summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2021-08-04 18:48:19 +0700
committerLibravatar GitHub <noreply@github.com>2021-08-04 18:48:19 +0700
commit63bdbf817e0ecd8ce9162f2b8cc5eaefb5b42e68 (patch)
tree01217e3365733a8c34a2bee980b21197347d6c03
parentcdd2f247f8c22775a5035be03715775c96cd1037 (diff)
parentf3916decf25063ea23e03e63a65f0342cef09f1a (diff)
downloadiced-63bdbf817e0ecd8ce9162f2b8cc5eaefb5b42e68.tar.gz
iced-63bdbf817e0ecd8ce9162f2b8cc5eaefb5b42e68.tar.bz2
iced-63bdbf817e0ecd8ce9162f2b8cc5eaefb5b42e68.zip
Merge pull request #978 from ATiltedTree/use-preffered-format
wgpu: Use the preferred texture format of the surface
-rw-r--r--examples/integration/src/main.rs35
-rw-r--r--wgpu/src/backend.rs19
-rw-r--r--wgpu/src/settings.rs6
-rw-r--r--wgpu/src/window/compositor.rs10
4 files changed, 37 insertions, 33 deletions
diff --git a/examples/integration/src/main.rs b/examples/integration/src/main.rs
index b57c73d8..b4f580a4 100644
--- a/examples/integration/src/main.rs
+++ b/examples/integration/src/main.rs
@@ -34,7 +34,7 @@ pub fn main() {
let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY);
let surface = unsafe { instance.create_surface(&window) };
- let (mut device, queue) = futures::executor::block_on(async {
+ let (format, (mut device, queue)) = futures::executor::block_on(async {
let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::HighPerformance,
@@ -43,21 +43,24 @@ pub fn main() {
.await
.expect("Request adapter");
- adapter
- .request_device(
- &wgpu::DeviceDescriptor {
- label: None,
- features: wgpu::Features::empty(),
- limits: wgpu::Limits::default(),
- },
- None,
- )
- .await
- .expect("Request device")
+ (
+ adapter
+ .get_swap_chain_preferred_format(&surface)
+ .expect("Get preferred format"),
+ adapter
+ .request_device(
+ &wgpu::DeviceDescriptor {
+ label: None,
+ features: wgpu::Features::empty(),
+ limits: wgpu::Limits::default(),
+ },
+ None,
+ )
+ .await
+ .expect("Request device"),
+ )
});
- let format = wgpu::TextureFormat::Bgra8UnormSrgb;
-
let mut swap_chain = {
let size = window.inner_size();
@@ -65,7 +68,7 @@ pub fn main() {
&surface,
&wgpu::SwapChainDescriptor {
usage: wgpu::TextureUsage::RENDER_ATTACHMENT,
- format: format,
+ format,
width: size.width,
height: size.height,
present_mode: wgpu::PresentMode::Mailbox,
@@ -85,7 +88,7 @@ pub fn main() {
// Initialize iced
let mut debug = Debug::new();
let mut renderer =
- Renderer::new(Backend::new(&mut device, Settings::default()));
+ Renderer::new(Backend::new(&mut device, Settings::default(), format));
let mut state = program::State::new(
controls,
diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs
index 783079f3..4f34045b 100644
--- a/wgpu/src/backend.rs
+++ b/wgpu/src/backend.rs
@@ -30,23 +30,24 @@ pub struct Backend {
impl Backend {
/// Creates a new [`Backend`].
- pub fn new(device: &wgpu::Device, settings: Settings) -> Self {
+ pub fn new(
+ device: &wgpu::Device,
+ settings: Settings,
+ format: wgpu::TextureFormat,
+ ) -> Self {
let text_pipeline = text::Pipeline::new(
device,
- settings.format,
+ format,
settings.default_font,
settings.text_multithreading,
);
- let quad_pipeline = quad::Pipeline::new(device, settings.format);
- let triangle_pipeline = triangle::Pipeline::new(
- device,
- settings.format,
- settings.antialiasing,
- );
+ let quad_pipeline = quad::Pipeline::new(device, format);
+ let triangle_pipeline =
+ triangle::Pipeline::new(device, format, settings.antialiasing);
#[cfg(any(feature = "image_rs", feature = "svg"))]
- let image_pipeline = image::Pipeline::new(device, settings.format);
+ let image_pipeline = image::Pipeline::new(device, format);
Self {
quad_pipeline,
diff --git a/wgpu/src/settings.rs b/wgpu/src/settings.rs
index 9a7eed34..dc06b82d 100644
--- a/wgpu/src/settings.rs
+++ b/wgpu/src/settings.rs
@@ -6,11 +6,6 @@ pub use crate::Antialiasing;
/// [`Backend`]: crate::Backend
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Settings {
- /// The output format of the [`Backend`].
- ///
- /// [`Backend`]: crate::Backend
- pub format: wgpu::TextureFormat,
-
/// The present mode of the [`Backend`].
///
/// [`Backend`]: crate::Backend
@@ -68,7 +63,6 @@ impl Settings {
impl Default for Settings {
fn default() -> Settings {
Settings {
- format: wgpu::TextureFormat::Bgra8UnormSrgb,
present_mode: wgpu::PresentMode::Mailbox,
internal_backend: wgpu::BackendBit::PRIMARY,
default_font: None,
diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs
index 9b65596f..68ebf234 100644
--- a/wgpu/src/window/compositor.rs
+++ b/wgpu/src/window/compositor.rs
@@ -13,6 +13,7 @@ pub struct Compositor {
queue: wgpu::Queue,
staging_belt: wgpu::util::StagingBelt,
local_pool: futures::executor::LocalPool,
+ format: wgpu::TextureFormat,
}
impl Compositor {
@@ -42,6 +43,10 @@ impl Compositor {
})
.await?;
+ let format = compatible_surface
+ .as_ref()
+ .and_then(|surf| adapter.get_swap_chain_preferred_format(surf))?;
+
let (device, queue) = adapter
.request_device(
&wgpu::DeviceDescriptor {
@@ -69,12 +74,13 @@ impl Compositor {
queue,
staging_belt,
local_pool,
+ format,
})
}
/// Creates a new rendering [`Backend`] for this [`Compositor`].
pub fn create_backend(&self) -> Backend {
- Backend::new(&self.device, self.settings)
+ Backend::new(&self.device, self.settings, self.format)
}
}
@@ -119,7 +125,7 @@ impl iced_graphics::window::Compositor for Compositor {
surface,
&wgpu::SwapChainDescriptor {
usage: wgpu::TextureUsage::RENDER_ATTACHMENT,
- format: self.settings.format,
+ format: self.format,
present_mode: self.settings.present_mode,
width,
height,