Merge shaders into pipelines

This commit is contained in:
Hanno Braun 2024-11-22 19:36:15 +01:00
parent 8052b65384
commit f4838b14ee
6 changed files with 62 additions and 59 deletions

View File

@ -5,7 +5,7 @@ use wgpu::util::DeviceExt;
use crate::geometry::Operation;
use super::shaders::{TrianglesVertex, VerticesVertex};
use super::pipelines::{TrianglesVertex, VerticesVertex};
pub struct Geometry<V> {
pub vertices: wgpu::Buffer,

View File

@ -1,6 +1,5 @@
mod geometry;
mod pipelines;
mod renderer;
mod shaders;
pub use self::renderer::Renderer;

View File

@ -1,8 +1,8 @@
mod pipeline;
pub use self::pipeline::Pipeline;
use glam::Mat4;
use super::shaders::{TrianglesVertex, VerticesVertex};
pub use self::pipeline::Pipeline;
pub struct Pipelines {
pub vertices: Pipeline<VerticesVertex>,
@ -34,3 +34,55 @@ impl Pipelines {
}
}
}
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
#[repr(C)]
pub struct Uniforms {
pub transform: Mat4,
pub transform_for_normals: Mat4,
}
impl Uniforms {
pub fn from_transform(transform: Mat4) -> Self {
let transform_for_normals = transform.inverse().transpose();
Self {
transform,
transform_for_normals,
}
}
}
pub trait Vertex {
const ATTRIBUTES: &[wgpu::VertexAttribute];
}
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
#[repr(C)]
pub struct TrianglesVertex {
pub position: [f32; 3],
pub normal: [f32; 3],
}
impl Vertex for TrianglesVertex {
const ATTRIBUTES: &[wgpu::VertexAttribute] = &wgpu::vertex_attr_array![
0 => Float32x3,
1 => Float32x3,
];
}
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
#[repr(C)]
pub struct VerticesVertex {
pub position: [f32; 3],
pub center: [f32; 3],
pub radius: f32,
}
impl Vertex for VerticesVertex {
const ATTRIBUTES: &[wgpu::VertexAttribute] = &wgpu::vertex_attr_array![
0 => Float32x3,
1 => Float32x3,
2 => Float32,
];
}

View File

@ -1,6 +1,8 @@
use std::marker::PhantomData;
use crate::render::{geometry::Geometry, shaders::Vertex};
use crate::render::geometry::Geometry;
use super::Vertex;
pub struct Pipeline<V> {
render_pipeline: wgpu::RenderPipeline,

View File

@ -7,7 +7,10 @@ use winit::window::Window;
use crate::geometry::Operation;
use super::{geometry::Geometry, pipelines::Pipelines, shaders::Uniforms};
use super::{
geometry::Geometry,
pipelines::{Pipelines, Uniforms},
};
pub struct Renderer {
pub surface: wgpu::Surface<'static>,

View File

@ -1,53 +0,0 @@
use glam::Mat4;
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
#[repr(C)]
pub struct Uniforms {
pub transform: Mat4,
pub transform_for_normals: Mat4,
}
impl Uniforms {
pub fn from_transform(transform: Mat4) -> Self {
let transform_for_normals = transform.inverse().transpose();
Self {
transform,
transform_for_normals,
}
}
}
pub trait Vertex {
const ATTRIBUTES: &[wgpu::VertexAttribute];
}
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
#[repr(C)]
pub struct TrianglesVertex {
pub position: [f32; 3],
pub normal: [f32; 3],
}
impl Vertex for TrianglesVertex {
const ATTRIBUTES: &[wgpu::VertexAttribute] = &wgpu::vertex_attr_array![
0 => Float32x3,
1 => Float32x3,
];
}
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
#[repr(C)]
pub struct VerticesVertex {
pub position: [f32; 3],
pub center: [f32; 3],
pub radius: f32,
}
impl Vertex for VerticesVertex {
const ATTRIBUTES: &[wgpu::VertexAttribute] = &wgpu::vertex_attr_array![
0 => Float32x3,
1 => Float32x3,
2 => Float32,
];
}