pebble/graphics/render/
render_pass.rs1use crate::graphics::{pipeline::{buffers::{BindGroup, Buffer}, material::RenderPipeline}, types::IndexFormat};
2
3pub struct RenderPass<'a> {
6 raw: wgpu::RenderPass<'a>,
7}
8
9impl<'a> RenderPass<'a> {
10 pub(crate) fn new(raw: wgpu::RenderPass<'a>) -> Self {
11 Self { raw }
12 }
13
14 pub fn set_pipeline(&mut self, pipeline: &RenderPipeline) {
15 self.raw.set_pipeline(pipeline.raw());
16 }
17
18 pub fn set_bind_group(&mut self, index: u32, bind_group: &BindGroup, offsets: &[u32]) {
19 self.raw.set_bind_group(index, Some(bind_group.raw()), offsets);
20 }
21
22 pub fn set_vertex_buffer(&mut self, slot: u32, buffer: &'a Buffer) {
23 self.raw.set_vertex_buffer(slot, buffer.raw().slice(..));
24 }
25
26 pub fn set_index_buffer(&mut self, buffer: &'a Buffer, format: IndexFormat) {
27 self.raw.set_index_buffer(buffer.raw().slice(..), format.into());
28 }
29
30 pub fn draw(&mut self, vertices: std::ops::Range<u32>, instances: std::ops::Range<u32>) {
31 self.raw.draw(vertices, instances);
32 }
33
34 pub fn draw_indexed(
35 &mut self,
36 indices: std::ops::Range<u32>,
37 base_vertex: i32,
38 instances: std::ops::Range<u32>,
39 ) {
40 self.raw.draw_indexed(indices, base_vertex, instances);
41 }
42
43 pub fn draw_indirect(&mut self, indirect_buffer: &'a Buffer, indirect_offset: u64) {
44 self.raw.draw_indirect(indirect_buffer.raw(), indirect_offset);
45 }
46
47 pub fn draw_indexed_indirect(&mut self, indirect_buffer: &'a Buffer, indirect_offset: u64) {
48 self.raw.draw_indexed_indirect(indirect_buffer.raw(), indirect_offset);
49 }
50}
51
52#[repr(C)]
56#[derive(Copy, Clone, Debug, Default, bytemuck::Pod, bytemuck::Zeroable)]
57pub struct DrawIndirectArgs {
58 pub vertex_count: u32,
59 pub instance_count: u32,
60 pub first_vertex: u32,
61 pub first_instance: u32,
62}
63
64impl DrawIndirectArgs {
65 pub fn as_bytes(&self) -> &[u8] {
66 bytemuck::bytes_of(self)
67 }
68}
69
70#[repr(C)]
73#[derive(Copy, Clone, Debug, Default, bytemuck::Pod, bytemuck::Zeroable)]
74pub struct DrawIndexedIndirectArgs {
75 pub index_count: u32,
76 pub instance_count: u32,
77 pub first_index: u32,
78 pub base_vertex: i32,
79 pub first_instance: u32,
80}
81
82impl DrawIndexedIndirectArgs {
83 pub fn as_bytes(&self) -> &[u8] {
84 bytemuck::bytes_of(self)
85 }
86}