diff --git a/experiments/2024-10-30/src/render/pipelines/mod.rs b/experiments/2024-10-30/src/render/pipelines/mod.rs index c8564eef2..1909e0cec 100644 --- a/experiments/2024-10-30/src/render/pipelines/mod.rs +++ b/experiments/2024-10-30/src/render/pipelines/mod.rs @@ -3,7 +3,10 @@ mod pipeline; pub mod triangles; pub mod vertices; -use glam::Mat4; +use std::f32::consts::PI; + +use glam::{Mat4, Vec3}; +use wgpu::util::DeviceExt; pub use self::pipeline::Pipeline; @@ -16,19 +19,28 @@ impl Pipelines { pub fn new( device: &wgpu::Device, config: &wgpu::SurfaceConfiguration, - uniforms: &wgpu::Buffer, ) -> Self { + let aspect_ratio = config.width as f32 / config.height as f32; + let uniforms = + device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: None, + contents: bytemuck::cast_slice(&[Uniforms::from_transform( + default_transform(aspect_ratio), + )]), + usage: wgpu::BufferUsages::UNIFORM, + }); + let vertices = Pipeline::new( device, config, wgpu::include_wgsl!("shaders/vertices.wgsl"), - uniforms, + &uniforms, ); let triangles = Pipeline::new( device, config, wgpu::include_wgsl!("shaders/triangles.wgsl"), - uniforms, + &uniforms, ); Self { @@ -55,3 +67,14 @@ impl Uniforms { } } } + +fn default_transform(aspect_ratio: f32) -> Mat4 { + let fov_y_radians = std::f32::consts::PI / 2.; + let z_near = 0.1; + let z_far = 10.; + + Mat4::perspective_rh(fov_y_radians, aspect_ratio, z_near, z_far) + * Mat4::from_translation(Vec3::new(0., 0., -2.)) + * Mat4::from_rotation_x(-PI / 4.) + * Mat4::from_rotation_z(PI / 4.) +} diff --git a/experiments/2024-10-30/src/render/renderer.rs b/experiments/2024-10-30/src/render/renderer.rs index 1cc5750b9..02287589c 100644 --- a/experiments/2024-10-30/src/render/renderer.rs +++ b/experiments/2024-10-30/src/render/renderer.rs @@ -1,16 +1,11 @@ -use std::{f32::consts::PI, sync::Arc}; +use std::sync::Arc; use anyhow::anyhow; -use glam::{Mat4, Vec3}; -use wgpu::util::DeviceExt; use winit::window::Window; use crate::geometry::Operation; -use super::{ - geometry::Geometry, - pipelines::{Pipelines, Uniforms}, -}; +use super::{geometry::Geometry, pipelines::Pipelines}; pub struct Renderer { pub surface: wgpu::Surface<'static>, @@ -49,17 +44,7 @@ impl Renderer { .ok_or_else(|| anyhow!("Failed to get default surface config"))?; surface.configure(&device, &config); - let aspect_ratio = size.width as f32 / size.height as f32; - let uniforms = - device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: None, - contents: bytemuck::cast_slice(&[Uniforms::from_transform( - default_transform(aspect_ratio), - )]), - usage: wgpu::BufferUsages::UNIFORM, - }); - - let pipelines = Pipelines::new(&device, &config, &uniforms); + let pipelines = Pipelines::new(&device, &config); let depth_view = { let depth_texture = @@ -148,14 +133,3 @@ impl Renderer { frame.present(); } } - -fn default_transform(aspect_ratio: f32) -> Mat4 { - let fov_y_radians = std::f32::consts::PI / 2.; - let z_near = 0.1; - let z_far = 10.; - - Mat4::perspective_rh(fov_y_radians, aspect_ratio, z_near, z_far) - * Mat4::from_translation(Vec3::new(0., 0., -2.)) - * Mat4::from_rotation_x(-PI / 4.) - * Mat4::from_rotation_z(PI / 4.) -}