diff options
author | 2022-11-10 14:43:38 -0800 | |
---|---|---|
committer | 2022-11-10 15:25:54 -0800 | |
commit | 365f37a3ae10e7aff407b84050f77da10820866e (patch) | |
tree | 471643b7f81019ef9cb0328c6d5ac6f4c625c90e | |
parent | 23299a555f8b7e908a6a14915307792a7cf97b9a (diff) | |
download | iced-365f37a3ae10e7aff407b84050f77da10820866e.tar.gz iced-365f37a3ae10e7aff407b84050f77da10820866e.tar.bz2 iced-365f37a3ae10e7aff407b84050f77da10820866e.zip |
Added conditional configurations for WASM target for gradients & storage buffers, since storage buffers are not supported on wgpu WASM target at the moment.
-rw-r--r-- | glow/src/triangle.rs | 1 | ||||
-rw-r--r-- | graphics/src/triangle.rs | 6 | ||||
-rw-r--r-- | graphics/src/widget/canvas/frame.rs | 1 | ||||
-rw-r--r-- | wgpu/src/buffer/dynamic.rs | 7 | ||||
-rw-r--r-- | wgpu/src/triangle.rs | 15 |
5 files changed, 27 insertions, 3 deletions
diff --git a/glow/src/triangle.rs b/glow/src/triangle.rs index 0e27bcf2..cb7ab055 100644 --- a/glow/src/triangle.rs +++ b/glow/src/triangle.rs @@ -141,6 +141,7 @@ impl Pipeline { triangle::Style::Solid(color) => { self.programs.solid.use_program(gl, color, &transform); } + #[cfg(not(target_arch = "wasm32"))] triangle::Style::Gradient(gradient) => { self.programs .gradient diff --git a/graphics/src/triangle.rs b/graphics/src/triangle.rs index 04ff6d21..8b41bfc4 100644 --- a/graphics/src/triangle.rs +++ b/graphics/src/triangle.rs @@ -1,5 +1,7 @@ //! Draw geometry using meshes of triangles. -use crate::{Color, Gradient}; +use crate::Color; +#[cfg(not(target_arch = "wasm32"))] +use crate::Gradient; use bytemuck::{Pod, Zeroable}; @@ -27,6 +29,7 @@ pub struct Vertex2D { pub enum Style { /// Fill a primitive with a solid color. Solid(Color), + #[cfg(not(target_arch = "wasm32"))] /// Fill a primitive with an interpolated color. Gradient(Gradient), } @@ -37,6 +40,7 @@ impl From<Color> for Style { } } +#[cfg(not(target_arch = "wasm32"))] impl From<Gradient> for Style { fn from(gradient: Gradient) -> Self { Self::Gradient(gradient) diff --git a/graphics/src/widget/canvas/frame.rs b/graphics/src/widget/canvas/frame.rs index cf6c6928..a7b88502 100644 --- a/graphics/src/widget/canvas/frame.rs +++ b/graphics/src/widget/canvas/frame.rs @@ -76,6 +76,7 @@ impl Transform { fn transform_style(&self, style: triangle::Style) -> triangle::Style { match style { triangle::Style::Solid(color) => triangle::Style::Solid(color), + #[cfg(not(target_arch = "wasm32"))] triangle::Style::Gradient(gradient) => { triangle::Style::Gradient(self.transform_gradient(gradient)) } diff --git a/wgpu/src/buffer/dynamic.rs b/wgpu/src/buffer/dynamic.rs index c0c48c74..2a675d81 100644 --- a/wgpu/src/buffer/dynamic.rs +++ b/wgpu/src/buffer/dynamic.rs @@ -24,6 +24,7 @@ impl<T: ShaderType + WriteInto> Buffer<T> { ) } + #[cfg(not(target_arch = "wasm32"))] /// Creates a new dynamic storage buffer. pub fn storage(device: &wgpu::Device, label: &'static str) -> Self { Buffer::new( @@ -91,6 +92,7 @@ impl<T: ShaderType + WriteInto> Buffer<T> { Internal::Uniform(_) => { wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST } + #[cfg(not(target_arch = "wasm32"))] Internal::Storage(_) => { wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST } @@ -154,6 +156,8 @@ impl<T: ShaderType + WriteInto> Buffer<T> { // Currently supported dynamic buffers. enum Internal { Uniform(encase::DynamicUniformBuffer<Vec<u8>>), + #[cfg(not(target_arch = "wasm32"))] + //storage buffers are not supported on wgpu wasm target (yet) Storage(encase::DynamicStorageBuffer<Vec<u8>>), } @@ -168,6 +172,7 @@ impl Internal { .write(value) .expect("Error when writing to dynamic uniform buffer.") as u32, + #[cfg(not(target_arch = "wasm32"))] Internal::Storage(buf) => buf .write(value) .expect("Error when writing to dynamic storage buffer.") @@ -179,6 +184,7 @@ impl Internal { pub(super) fn get_ref(&self) -> &Vec<u8> { match self { Internal::Uniform(buf) => buf.as_ref(), + #[cfg(not(target_arch = "wasm32"))] Internal::Storage(buf) => buf.as_ref(), } } @@ -190,6 +196,7 @@ impl Internal { buf.as_mut().clear(); buf.set_offset(0); } + #[cfg(not(target_arch = "wasm32"))] Internal::Storage(buf) => { buf.as_mut().clear(); buf.set_offset(0); diff --git a/wgpu/src/triangle.rs b/wgpu/src/triangle.rs index f9abf2b5..c51b5339 100644 --- a/wgpu/src/triangle.rs +++ b/wgpu/src/triangle.rs @@ -1,4 +1,5 @@ //! Draw meshes of triangles. +#[cfg(not(target_arch = "wasm32"))] mod gradient; mod msaa; mod solid; @@ -27,6 +28,8 @@ pub(crate) struct Pipeline { /// Supported triangle pipelines for different fills. pub(crate) struct PipelineList { solid: solid::Pipeline, + /// Gradients are currently not supported on WASM targets due to their need of storage buffers. + #[cfg(not(target_arch = "wasm32"))] gradient: gradient::Pipeline, } @@ -40,8 +43,11 @@ impl PipelineList { /// Resets each pipeline's buffers. fn clear(&mut self) { self.solid.buffer.clear(); - self.gradient.uniform_buffer.clear(); - self.gradient.storage_buffer.clear(); + #[cfg(not(target_arch = "wasm32"))] + { + self.gradient.uniform_buffer.clear(); + self.gradient.storage_buffer.clear(); + } } /// Writes the contents of each pipeline's CPU buffer to the GPU, resizing the GPU buffer @@ -53,6 +59,7 @@ impl PipelineList { encoder: &mut wgpu::CommandEncoder, ) { self.solid.write(device, staging_belt, encoder); + #[cfg(not(target_arch = "wasm32"))] self.gradient.write(device, staging_belt, encoder); } } @@ -79,6 +86,7 @@ impl Pipeline { index_strides: Vec::new(), pipelines: PipelineList { solid: solid::Pipeline::new(device, format, antialiasing), + #[cfg(not(target_arch = "wasm32"))] gradient: gradient::Pipeline::new(device, format, antialiasing), }, } @@ -145,6 +153,7 @@ impl Pipeline { triangle::Style::Solid(color) => { self.pipelines.solid.push(transform, color); } + #[cfg(not(target_arch = "wasm32"))] triangle::Style::Gradient(gradient) => { self.pipelines.gradient.push(transform, gradient); } @@ -186,6 +195,7 @@ impl Pipeline { }); let mut num_solids = 0; + #[cfg(not(target_arch = "wasm32"))] let mut num_gradients = 0; let mut last_is_solid = None; @@ -216,6 +226,7 @@ impl Pipeline { num_solids += 1; } + #[cfg(not(target_arch = "wasm32"))] triangle::Style::Gradient(_) => { if last_is_solid.unwrap_or(true) { self.pipelines |