summaryrefslogtreecommitdiffstats
path: root/examples
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
parentb1b2467b45e16185cc17df00b4c75700435cd46e (diff)
downloadiced-811aa673e9e832ebe38bf56a087f32fdc7aba59c.tar.gz
iced-811aa673e9e832ebe38bf56a087f32fdc7aba59c.tar.bz2
iced-811aa673e9e832ebe38bf56a087f32fdc7aba59c.zip
Improve module hierarchy of `custom_shader` example
Diffstat (limited to 'examples')
-rw-r--r--examples/custom_shader/src/main.rs7
-rw-r--r--examples/custom_shader/src/primitive.rs97
-rw-r--r--examples/custom_shader/src/scene.rs103
-rw-r--r--examples/custom_shader/src/scene/camera.rs (renamed from examples/custom_shader/src/camera.rs)0
-rw-r--r--examples/custom_shader/src/scene/pipeline.rs (renamed from examples/custom_shader/src/pipeline.rs)35
-rw-r--r--examples/custom_shader/src/scene/pipeline/buffer.rs (renamed from examples/custom_shader/src/primitive/buffer.rs)0
-rw-r--r--examples/custom_shader/src/scene/pipeline/cube.rs (renamed from examples/custom_shader/src/primitive/cube.rs)2
-rw-r--r--examples/custom_shader/src/scene/pipeline/uniforms.rs (renamed from examples/custom_shader/src/primitive/uniforms.rs)3
-rw-r--r--examples/custom_shader/src/scene/pipeline/vertex.rs (renamed from examples/custom_shader/src/primitive/vertex.rs)0
9 files changed, 121 insertions, 126 deletions
diff --git a/examples/custom_shader/src/main.rs b/examples/custom_shader/src/main.rs
index f4853507..2eb1ac4a 100644
--- a/examples/custom_shader/src/main.rs
+++ b/examples/custom_shader/src/main.rs
@@ -1,11 +1,6 @@
-mod camera;
-mod pipeline;
-mod primitive;
mod scene;
-use crate::camera::Camera;
-use crate::pipeline::Pipeline;
-use crate::scene::Scene;
+use scene::Scene;
use iced::executor;
use iced::time::Instant;
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,
- );
- }
-}
diff --git a/examples/custom_shader/src/scene.rs b/examples/custom_shader/src/scene.rs
index ab923093..3b291ce2 100644
--- a/examples/custom_shader/src/scene.rs
+++ b/examples/custom_shader/src/scene.rs
@@ -1,13 +1,21 @@
-use crate::camera::Camera;
-use crate::primitive;
-use crate::primitive::cube::Cube;
-use glam::Vec3;
+mod camera;
+mod pipeline;
+
+use camera::Camera;
+use pipeline::Pipeline;
+
+use crate::wgpu;
+use pipeline::cube::{self, Cube};
+
+use iced::mouse;
+use iced::time::Duration;
use iced::widget::shader;
-use iced::{mouse, Color, Rectangle};
+use iced::{Color, Rectangle, Size};
+
+use glam::Vec3;
use rand::Rng;
use std::cmp::Ordering;
use std::iter;
-use std::time::Duration;
pub const MAX: u32 = 500;
@@ -72,7 +80,7 @@ impl Scene {
impl<Message> shader::Program<Message> for Scene {
type State = ();
- type Primitive = primitive::Primitive;
+ type Primitive = Primitive;
fn draw(
&self,
@@ -80,7 +88,7 @@ impl<Message> shader::Program<Message> for Scene {
_cursor: mouse::Cursor,
bounds: Rectangle,
) -> Self::Primitive {
- primitive::Primitive::new(
+ Primitive::new(
&self.cubes,
&self.camera,
bounds,
@@ -90,6 +98,85 @@ impl<Message> shader::Program<Message> for Scene {
}
}
+/// A collection of `Cube`s that can be rendered.
+#[derive(Debug)]
+pub struct Primitive {
+ cubes: Vec<cube::Raw>,
+ uniforms: pipeline::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 = pipeline::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: shader::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,
+ );
+ }
+}
+
fn rnd_origin() -> Vec3 {
Vec3::new(
rand::thread_rng().gen_range(-4.0..4.0),
diff --git a/examples/custom_shader/src/camera.rs b/examples/custom_shader/src/scene/camera.rs
index 2a49c102..2a49c102 100644
--- a/examples/custom_shader/src/camera.rs
+++ b/examples/custom_shader/src/scene/camera.rs
diff --git a/examples/custom_shader/src/pipeline.rs b/examples/custom_shader/src/scene/pipeline.rs
index 9343e5e0..0967e139 100644
--- a/examples/custom_shader/src/pipeline.rs
+++ b/examples/custom_shader/src/scene/pipeline.rs
@@ -1,6 +1,15 @@
-use crate::primitive;
-use crate::primitive::cube;
-use crate::primitive::{Buffer, Uniforms};
+pub mod cube;
+
+mod buffer;
+mod uniforms;
+mod vertex;
+
+pub use cube::Cube;
+pub use uniforms::Uniforms;
+
+use buffer::Buffer;
+use vertex::Vertex;
+
use crate::wgpu;
use crate::wgpu::util::DeviceExt;
@@ -221,7 +230,7 @@ impl Pipeline {
device.create_shader_module(wgpu::ShaderModuleDescriptor {
label: Some("cubes shader"),
source: wgpu::ShaderSource::Wgsl(std::borrow::Cow::Borrowed(
- include_str!("shaders/cubes.wgsl"),
+ include_str!("../shaders/cubes.wgsl"),
)),
});
@@ -232,7 +241,7 @@ impl Pipeline {
vertex: wgpu::VertexState {
module: &shader,
entry_point: "vs_main",
- buffers: &[primitive::Vertex::desc(), cube::Raw::desc()],
+ buffers: &[Vertex::desc(), cube::Raw::desc()],
},
primitive: wgpu::PrimitiveState::default(),
depth_stencil: Some(wgpu::DepthStencilState {
@@ -468,7 +477,7 @@ impl DepthPipeline {
device.create_shader_module(wgpu::ShaderModuleDescriptor {
label: Some("cubes.depth_pipeline.shader"),
source: wgpu::ShaderSource::Wgsl(std::borrow::Cow::Borrowed(
- include_str!("shaders/depth.wgsl"),
+ include_str!("../shaders/depth.wgsl"),
)),
});
@@ -573,12 +582,12 @@ impl DepthPipeline {
}
fn load_skybox_data() -> Vec<u8> {
- let pos_x: &[u8] = include_bytes!("textures/skybox/pos_x.jpg");
- let neg_x: &[u8] = include_bytes!("textures/skybox/neg_x.jpg");
- let pos_y: &[u8] = include_bytes!("textures/skybox/pos_y.jpg");
- let neg_y: &[u8] = include_bytes!("textures/skybox/neg_y.jpg");
- let pos_z: &[u8] = include_bytes!("textures/skybox/pos_z.jpg");
- let neg_z: &[u8] = include_bytes!("textures/skybox/neg_z.jpg");
+ let pos_x: &[u8] = include_bytes!("../textures/skybox/pos_x.jpg");
+ let neg_x: &[u8] = include_bytes!("../textures/skybox/neg_x.jpg");
+ let pos_y: &[u8] = include_bytes!("../textures/skybox/pos_y.jpg");
+ let neg_y: &[u8] = include_bytes!("../textures/skybox/neg_y.jpg");
+ let pos_z: &[u8] = include_bytes!("../textures/skybox/pos_z.jpg");
+ let neg_z: &[u8] = include_bytes!("../textures/skybox/neg_z.jpg");
let data: [&[u8]; 6] = [pos_x, neg_x, pos_y, neg_y, pos_z, neg_z];
@@ -597,7 +606,7 @@ fn load_skybox_data() -> Vec<u8> {
}
fn load_normal_map_data() -> Vec<u8> {
- let bytes: &[u8] = include_bytes!("textures/ice_cube_normal_map.png");
+ let bytes: &[u8] = include_bytes!("../textures/ice_cube_normal_map.png");
image::load_from_memory_with_format(bytes, image::ImageFormat::Png)
.unwrap()
diff --git a/examples/custom_shader/src/primitive/buffer.rs b/examples/custom_shader/src/scene/pipeline/buffer.rs
index ef4c41c9..ef4c41c9 100644
--- a/examples/custom_shader/src/primitive/buffer.rs
+++ b/examples/custom_shader/src/scene/pipeline/buffer.rs
diff --git a/examples/custom_shader/src/primitive/cube.rs b/examples/custom_shader/src/scene/pipeline/cube.rs
index 7ece685d..de8bad6c 100644
--- a/examples/custom_shader/src/primitive/cube.rs
+++ b/examples/custom_shader/src/scene/pipeline/cube.rs
@@ -1,4 +1,4 @@
-use crate::primitive::Vertex;
+use crate::scene::pipeline::Vertex;
use crate::wgpu;
use glam::{vec2, vec3, Vec3};
diff --git a/examples/custom_shader/src/primitive/uniforms.rs b/examples/custom_shader/src/scene/pipeline/uniforms.rs
index 4fcb413b..1eac8292 100644
--- a/examples/custom_shader/src/primitive/uniforms.rs
+++ b/examples/custom_shader/src/scene/pipeline/uniforms.rs
@@ -1,4 +1,5 @@
-use crate::camera::Camera;
+use crate::scene::Camera;
+
use iced::{Color, Rectangle};
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
diff --git a/examples/custom_shader/src/primitive/vertex.rs b/examples/custom_shader/src/scene/pipeline/vertex.rs
index e64cd926..e64cd926 100644
--- a/examples/custom_shader/src/primitive/vertex.rs
+++ b/examples/custom_shader/src/scene/pipeline/vertex.rs