From 19aefbf28794f519521df409297a45e1576c5c08 Mon Sep 17 00:00:00 2001 From: Piotrek Date: Mon, 26 Apr 2021 16:55:57 +0200 Subject: [PATCH] removed vertex and index buffers, we are only rendering fullscreen --- src/renderer/buffers/mod.rs | 8 +--- src/renderer/buffers/raster.rs | 74 ----------------------------- src/renderer/mod.rs | 2 +- src/renderer/passes/postprocess.rs | 9 ++++ src/renderer/passes/raytrace.rs | 15 +++--- src/shaders/bin/shader.vert.spv | Bin 1080 -> 1360 bytes src/shaders/shader.vert | 16 +++++-- 7 files changed, 31 insertions(+), 93 deletions(-) delete mode 100644 src/renderer/buffers/raster.rs create mode 100644 src/renderer/passes/postprocess.rs diff --git a/src/renderer/buffers/mod.rs b/src/renderer/buffers/mod.rs index 09a8c1b..c863d81 100644 --- a/src/renderer/buffers/mod.rs +++ b/src/renderer/buffers/mod.rs @@ -24,10 +24,6 @@ mod uniform; pub use uniform::Uniform; pub use uniform::UniformValues; -mod raster; -pub use raster::Raster; -pub use raster::Vertex; - mod materials; pub use materials::Materials; @@ -35,7 +31,6 @@ pub use materials::Materials; pub struct Buffers { pub uniform_buffer: Uniform, - pub raster_buffer: Raster, pub node_buffer: Nodes, pub brick_buffer: Blocks, pub material_buffer: Materials @@ -45,10 +40,9 @@ impl Buffers { pub fn new(device: &wgpu::Device) -> Self { let uniform_buffer = Uniform::new(device); - let raster_buffer = Raster::new(device); let node_buffer = Nodes::new(device); let brick_buffer = Blocks::new(device); let material_buffer = Materials::new(device); - Self { uniform_buffer, raster_buffer, node_buffer, brick_buffer, material_buffer } + Self { uniform_buffer, node_buffer, brick_buffer, material_buffer } } } \ No newline at end of file diff --git a/src/renderer/buffers/raster.rs b/src/renderer/buffers/raster.rs deleted file mode 100644 index 7e19cd0..0000000 --- a/src/renderer/buffers/raster.rs +++ /dev/null @@ -1,74 +0,0 @@ -use wgpu::util::DeviceExt; - -#[repr(C)] -#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct Vertex { - pub position: [f32; 3], - pub uv: [f32; 2], -} - -impl Vertex { - pub fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { - wgpu::VertexBufferLayout { - array_stride: std::mem::size_of::() as wgpu::BufferAddress, - step_mode: wgpu::InputStepMode::Vertex, - attributes: &[ - // position - wgpu::VertexAttribute { - offset: 0, - shader_location: 0, - format: wgpu::VertexFormat::Float3, - }, - // color - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 3]>() as wgpu::BufferAddress, - shader_location: 1, - format: wgpu::VertexFormat::Float2, - } - ] - } - } -} - - -const VERTICES: &[Vertex] = &[ - Vertex { position: [-1.0, 1.0, 0.0], uv: [-1.0, 1.0] }, // top left - Vertex { position: [ 1.0, 1.0, 0.0], uv: [1.0, 1.0] }, // top right - Vertex { position: [ 1.0,-1.0, 0.0], uv: [1.0, -1.0] }, // bottom right - Vertex { position: [-1.0,-1.0, 0.0], uv: [-1.0, -1.0] }, // bottom left -]; -pub const INDICES: &[u16] = &[ 0, 1, 3, 3, 1, 2 ]; - - -pub struct Raster { - pub vertex_buffer: wgpu::Buffer, - pub index_buffer: wgpu::Buffer, - pub index_len: u32 -} - -impl Raster { - pub fn new(device: &wgpu::Device) -> Self { - - // Create vertex buffer - let vertex_buffer = device.create_buffer_init( - &wgpu::util::BufferInitDescriptor { - label: Some("Vertex buffer"), - contents: bytemuck::cast_slice(VERTICES), - usage: wgpu::BufferUsage::VERTEX, - } - ); - - // Create index buffer - let index_buffer = device.create_buffer_init( - &wgpu::util::BufferInitDescriptor { - label: Some("Index buffer"), - contents: bytemuck::cast_slice(INDICES), - usage: wgpu::BufferUsage::INDEX, - } - ); - let index_len = INDICES.len() as u32; - - // Done - Self { vertex_buffer, index_buffer, index_len } - } -} \ No newline at end of file diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 42c9efc..43e1131 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -2,7 +2,7 @@ use winit::{window::Window, dpi::PhysicalSize}; use cgmath::{Point3}; pub mod buffers; -use buffers::{Buffers, Nodes, Blocks, Uniform, Raster, Materials}; +use buffers::Buffers; mod passes; use passes::RaytracePass; diff --git a/src/renderer/passes/postprocess.rs b/src/renderer/passes/postprocess.rs new file mode 100644 index 0000000..0605dd1 --- /dev/null +++ b/src/renderer/passes/postprocess.rs @@ -0,0 +1,9 @@ +pub struct PostprocessPass { + pub pipeline: wgpu::RenderPipeline +} + +impl PostprocessPass { + pub fn new(device: &wgpu::Device, swapchain_desc: &wgpu::SwapChainDescriptor) -> Self { + + } +} \ No newline at end of file diff --git a/src/renderer/passes/raytrace.rs b/src/renderer/passes/raytrace.rs index 9b530c9..6284e56 100644 --- a/src/renderer/passes/raytrace.rs +++ b/src/renderer/passes/raytrace.rs @@ -1,4 +1,4 @@ -use crate::renderer::buffers::{Vertex, Buffers}; +use crate::renderer::buffers::Buffers; pub struct RaytracePass { pub pipeline: wgpu::RenderPipeline @@ -11,7 +11,7 @@ impl RaytracePass { let vert_state = wgpu::VertexState { module: &device.create_shader_module(&wgpu::include_spirv!("..\\..\\shaders\\bin\\shader.vert.spv")), entry_point: "main", - buffers: &[Vertex::desc()], + buffers: &[], }; // Fragment shader @@ -80,15 +80,16 @@ impl RaytracePass { // Pipeline render_pass.set_pipeline(&self.pipeline); - // Vertices and indices - render_pass.set_vertex_buffer(0, buffers.raster_buffer.vertex_buffer.slice(..)); - render_pass.set_index_buffer(buffers.raster_buffer.index_buffer.slice(..), wgpu::IndexFormat::Uint16); - render_pass.draw_indexed(0..buffers.raster_buffer.index_len, 0, 0..1); - // Bind groups render_pass.set_bind_group(0, &buffers.uniform_buffer.bind_group, &[]); render_pass.set_bind_group(1, &buffers.node_buffer.bind_group, &[]); render_pass.set_bind_group(2, &buffers.brick_buffer.bind_group, &[]); render_pass.set_bind_group(3, &buffers.material_buffer.bind_group, &[]); + + // Vertices and indices + render_pass.draw(0..6, 0..1); // 3. + // render_pass.set_vertex_buffer(0, buffers.raster_buffer.vertex_buffer.slice(..)); + // render_pass.set_index_buffer(buffers.raster_buffer.index_buffer.slice(..), wgpu::IndexFormat::Uint16); + // render_pass.draw_indexed(0..buffers.raster_buffer.index_len, 0, 0..1); } } \ No newline at end of file diff --git a/src/shaders/bin/shader.vert.spv b/src/shaders/bin/shader.vert.spv index dd48e112a9b7c0674b235bcfc5c51242274bf7ba..9bb3ef291d571e60838fcce4084544a92318b362 100644 GIT binary patch literal 1360 zcmYk5TW`}q5QR4vr#ISC3N4q?x;I*AiFg2nga9Ex1}Rd5D)DNC#Hvqt1D!JTOKhh*lZI;9X zJ4*VwohIn!D>|F?)5)MJ2&Aaq2j>C{+6m>+t?M7ZD-I3uhN6~yDBIKty+97L7Yg%6poM>3VxAA&9pOd!P{ukbF?W-5 zOZbL7XW`g~UzQp3>$k@%1%7v`-qEhg(7=1{W{IoZTFIgHx?76D1-IbtUl%4PIXFX% zM@tX4*e}l&4ST?`OjE<~%dmk!K%nTTv+Q z&#;G)cUPV{hcfB_@5$iEOMUw?mY?Nu0p0mi#c0X>QnTfmQWFdQub4od-1NlvL=PVG z?t`$UG8J!ZrEL(R9tLuv%0|ECPEWd8y7*JoP* literal 1080 zcmYk4OG^Vm5QN*r#P|FCUhyc12Ngk7L}fh$R0OY!B#R8JYe+UhJ^9=GRbB+^+w6pl zbb6|~X1b==a%peGY{U2sh-Svd^8K)W z-(Fk_fSFJ%C{`6^{gsq|bYNJW!devG--or^sNQTw?d&s&qr|0g)Nrl1p1E#}ZgfEB z(t6Tq3<@ez4E6-mw;Q*zsM9qt9$X4C;i}Ckzb4T`+Q@S@GQ?!ha1%44-PM0#~zN^g{p8LI(p&9_g)YSzbg%A*e`2WRSpy@ z((4~5$J7GhQDwC7X9eb)z)>Gp#-Fc)y=U&566SuqE$Me!IZ&|n3p}GecWesJDx-(n z){eLMJE#%#oma*Kb$o&O4si5YR1Or}OCRu(f`zYTW%~GctZ0uGp8LSe&YwrSt}y$) zr2md~oWWqx34^jlNV>rp4@vr%wLeQvYh@Z)t` j1xN1(b-@eYn)B$XKB;7y?#( diff --git a/src/shaders/shader.vert b/src/shaders/shader.vert index 00a9fbf..5138c8b 100644 --- a/src/shaders/shader.vert +++ b/src/shaders/shader.vert @@ -1,11 +1,19 @@ #version 450 -layout(location=0) in vec3 in_position; -layout(location=1) in vec2 in_uv; layout(location=0) out vec2 vert_uv; +const vec2 positions[6] = vec2[6]( + vec2(-1.0, 1.0), + vec2( 1.0, 1.0), + vec2( 1.0,-1.0), + + vec2(-1.0, 1.0), + vec2( 1.0,-1.0), + vec2(-1.0,-1.0) +); + void main() { - vert_uv = in_uv; - gl_Position = vec4(in_position, 1.0); + vert_uv = positions[gl_VertexIndex]; + gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); } \ No newline at end of file