summaryrefslogtreecommitdiffstats
path: root/wgpu
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector@lich.io>2021-05-05 14:33:03 +0700
committerLibravatar Héctor Ramón <hector@lich.io>2021-05-05 14:33:30 +0700
commit3840b75beaa3925f3438a7b40f01aaac221b8206 (patch)
treefcfeeecbfdbb9fb8713466ad8e92c7fbb7e33a06 /wgpu
parent6b4bf34bf94eed091eb89efa1bbb14e6bc68883e (diff)
downloadiced-3840b75beaa3925f3438a7b40f01aaac221b8206.tar.gz
iced-3840b75beaa3925f3438a7b40f01aaac221b8206.tar.bz2
iced-3840b75beaa3925f3438a7b40f01aaac221b8206.zip
Provide `compatible_surface` in `iced_wgpu::Compositor`
Diffstat (limited to 'wgpu')
-rw-r--r--wgpu/src/window/compositor.rs23
1 files changed, 18 insertions, 5 deletions
diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs
index fdd648e8..aa873df8 100644
--- a/wgpu/src/window/compositor.rs
+++ b/wgpu/src/window/compositor.rs
@@ -21,9 +21,16 @@ impl Compositor {
/// Requests a new [`Compositor`] with the given [`Settings`].
///
/// Returns `None` if no compatible graphics adapter could be found.
- pub async fn request(settings: Settings) -> Option<Self> {
+ pub async fn request<W: HasRawWindowHandle>(
+ settings: Settings,
+ compatible_window: Option<&W>,
+ ) -> Option<Self> {
let instance = wgpu::Instance::new(settings.internal_backend);
+ #[allow(unsafe_code)]
+ let compatible_surface = compatible_window
+ .map(|window| unsafe { instance.create_surface(window) });
+
let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: if settings.antialiasing.is_none() {
@@ -31,7 +38,7 @@ impl Compositor {
} else {
wgpu::PowerPreference::HighPerformance
},
- compatible_surface: None,
+ compatible_surface: compatible_surface.as_ref(),
})
.await?;
@@ -77,9 +84,15 @@ impl iced_graphics::window::Compositor for Compositor {
type Surface = wgpu::Surface;
type SwapChain = wgpu::SwapChain;
- fn new(settings: Self::Settings) -> Result<(Self, Renderer), Error> {
- let compositor = futures::executor::block_on(Self::request(settings))
- .ok_or(Error::AdapterNotFound)?;
+ fn new<W: HasRawWindowHandle>(
+ settings: Self::Settings,
+ compatible_window: Option<&W>,
+ ) -> Result<(Self, Renderer), Error> {
+ let compositor = futures::executor::block_on(Self::request(
+ settings,
+ compatible_window,
+ ))
+ .ok_or(Error::AdapterNotFound)?;
let backend = compositor.create_backend();