Merge pull request #978 from ATiltedTree/use-preffered-format
wgpu: Use the preferred texture format of the surface
This commit is contained in:
commit
63bdbf817e
4 changed files with 37 additions and 33 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue