From 71f15297e738c02f93bdedae7ee62473ee6edfdd Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Mon, 13 Jan 2025 20:03:35 +0100 Subject: [PATCH] Consolidate more pipeline code in `Pipeline` --- .../src/render/pipelines/pipeline.rs | 30 +++++++++++++++-- .../src/render/pipelines/pipelines.rs | 33 ++----------------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/experiments/2024-12-09/src/render/pipelines/pipeline.rs b/experiments/2024-12-09/src/render/pipelines/pipeline.rs index 9038e4b89..fef14a7c6 100644 --- a/experiments/2024-12-09/src/render/pipelines/pipeline.rs +++ b/experiments/2024-12-09/src/render/pipelines/pipeline.rs @@ -1,6 +1,11 @@ +use std::f32::consts::PI; + +use glam::{Mat4, Vec3}; +use wgpu::util::DeviceExt; + use crate::render::geometry::Geometry; -use super::triangles; +use super::{pipelines::Uniforms, triangles}; pub struct Pipeline { render_pipeline: wgpu::RenderPipeline, @@ -11,8 +16,18 @@ impl Pipeline { pub fn new( device: &wgpu::Device, surface_configuration: &wgpu::SurfaceConfiguration, - uniforms: &wgpu::Buffer, ) -> Self { + let aspect_ratio = surface_configuration.width as f32 + / surface_configuration.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 bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { label: None, @@ -123,3 +138,14 @@ impl Pipeline { pub trait IsVertex { const ATTRIBUTES: &[wgpu::VertexAttribute]; } + +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-12-09/src/render/pipelines/pipelines.rs b/experiments/2024-12-09/src/render/pipelines/pipelines.rs index c9fe16dc4..bb20e3d44 100644 --- a/experiments/2024-12-09/src/render/pipelines/pipelines.rs +++ b/experiments/2024-12-09/src/render/pipelines/pipelines.rs @@ -1,7 +1,4 @@ -use std::f32::consts::PI; - -use glam::{Mat4, Vec3}; -use wgpu::util::DeviceExt; +use glam::Mat4; use super::Pipeline; @@ -14,22 +11,7 @@ impl Pipelines { device: &wgpu::Device, surface_configuration: &wgpu::SurfaceConfiguration, ) -> Self { - let aspect_ratio = surface_configuration.width as f32 - / surface_configuration.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 triangles = Pipeline::new( - device, - surface_configuration, - &uniforms, - ); + let triangles = Pipeline::new(device, surface_configuration); Self { triangles } } @@ -52,14 +34,3 @@ 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.) -}