summaryrefslogtreecommitdiffstats
path: root/examples/custom_shader/src/primitive.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2023-11-14 15:48:01 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2023-11-14 15:48:01 +0100
commit811aa673e9e832ebe38bf56a087f32fdc7aba59c (patch)
tree179786a0be316d83264657071e33bf18d228535c /examples/custom_shader/src/primitive.rs
parentb1b2467b45e16185cc17df00b4c75700435cd46e (diff)
downloadiced-811aa673e9e832ebe38bf56a087f32fdc7aba59c.tar.gz
iced-811aa673e9e832ebe38bf56a087f32fdc7aba59c.tar.bz2
iced-811aa673e9e832ebe38bf56a087f32fdc7aba59c.zip
Improve module hierarchy of `custom_shader` example
Diffstat (limited to 'examples/custom_shader/src/primitive.rs')
-rw-r--r--examples/custom_shader/src/primitive.rs97
1 files changed, 0 insertions, 97 deletions
diff --git a/examples/custom_shader/src/primitive.rs b/examples/custom_shader/src/primitive.rs
deleted file mode 100644
index f5862ab3..00000000
--- a/examples/custom_shader/src/primitive.rs
+++ /dev/null
@@ -1,97 +0,0 @@
-pub mod cube;
-pub mod vertex;
-
-mod buffer;
-mod uniforms;
-
-pub use buffer::Buffer;
-pub use cube::Cube;
-pub use uniforms::Uniforms;
-pub use vertex::Vertex;
-
-use crate::wgpu;
-use crate::Camera;
-use crate::Pipeline;
-
-use iced::advanced::graphics::Transformation;
-use iced::widget::shader;
-use iced::{Color, Rectangle, Size};
-
-/// A collection of `Cube`s that can be rendered.
-#[derive(Debug)]
-pub struct Primitive {
- cubes: Vec<cube::Raw>,
- uniforms: Uniforms,
- show_depth_buffer: bool,
-}
-
-impl Primitive {
- pub fn new(
- cubes: &[Cube],
- camera: &Camera,
- bounds: Rectangle,
- show_depth_buffer: bool,
- light_color: Color,
- ) -> Self {
- let uniforms = Uniforms::new(camera, bounds, light_color);
-
- Self {
- cubes: cubes
- .iter()
- .map(cube::Raw::from_cube)
- .collect::<Vec<cube::Raw>>(),
- uniforms,
- show_depth_buffer,
- }
- }
-}
-
-impl shader::Primitive for Primitive {
- fn prepare(
- &self,
- format: wgpu::TextureFormat,
- device: &wgpu::Device,
- queue: &wgpu::Queue,
- target_size: Size<u32>,
- _scale_factor: f32,
- _transform: Transformation,
- storage: &mut shader::Storage,
- ) {
- if !storage.has::<Pipeline>() {
- storage.store(Pipeline::new(device, queue, format, target_size));
- }
-
- let pipeline = storage.get_mut::<Pipeline>().unwrap();
-
- //upload data to GPU
- pipeline.update(
- device,
- queue,
- target_size,
- &self.uniforms,
- self.cubes.len(),
- &self.cubes,
- );
- }
-
- fn render(
- &self,
- storage: &shader::Storage,
- bounds: Rectangle<u32>,
- target: &wgpu::TextureView,
- _target_size: Size<u32>,
- encoder: &mut wgpu::CommandEncoder,
- ) {
- //at this point our pipeline should always be initialized
- let pipeline = storage.get::<Pipeline>().unwrap();
-
- //render primitive
- pipeline.render(
- target,
- encoder,
- bounds,
- self.cubes.len() as u32,
- self.show_depth_buffer,
- );
- }
-}