1
0
Fork 0

[Refactor] Renderable

This commit is contained in:
Florian RICHER 2022-06-16 17:24:57 +02:00
parent 2982f7cd39
commit 96d1e2441f
5 changed files with 25 additions and 14 deletions

View file

@ -95,7 +95,7 @@ impl Camera {
}
impl Renderable for Camera {
fn prepare(&mut self, device: &wgpu::Device) {
fn initialize(&mut self, device: &wgpu::Device) {
self.update_uniform();
self.buffer = Some(
@ -142,9 +142,11 @@ impl Renderable for Camera {
);
}
fn render<'a>(&'a self, render_pass: &mut wgpu::RenderPass<'a>) {
fn prepare<'a>(&'a self, render_pass: &mut wgpu::RenderPass<'a>) {
render_pass.set_bind_group(1, &self.bind_group.as_ref().unwrap(), &[]);
}
fn draw<'a>(&'a self, _render_pass: &mut wgpu::RenderPass<'a>) { }
}
impl Controllable for Camera {

View file

@ -16,7 +16,7 @@ pub struct Mesh {
}
impl Renderable for Mesh {
fn prepare(&mut self, device: &Device) {
fn initialize(&mut self, device: &Device) {
self.vertex_buffer = Some(device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
label: Some("Vertex Buffer"),
contents: bytemuck::cast_slice(&self.vertex_array),
@ -54,12 +54,14 @@ impl Renderable for Mesh {
);
}
fn render<'a>(&'a self, render_pass: &mut wgpu::RenderPass<'a>) {
fn prepare<'a>(&'a self, render_pass: &mut wgpu::RenderPass<'a>) {
render_pass.set_bind_group(0, &self.texture_bind_group.as_ref().unwrap(), &[]);
render_pass.set_vertex_buffer(0, self.vertex_buffer.as_ref().unwrap().slice(..));
render_pass.set_vertex_buffer(1, self.instance_buffer.as_ref().unwrap().slice(..));
render_pass.set_index_buffer(self.index_buffer.as_ref().unwrap().slice(..), wgpu::IndexFormat::Uint16);
}
fn draw<'a>(&'a self, render_pass: &mut wgpu::RenderPass<'a>) {
render_pass.draw_indexed(0..self.num_indices as _, 0, 0..self.instance_array.len() as _);
}
}

View file

@ -17,7 +17,8 @@ mod mesh;
pub use mesh::Mesh;
pub trait Renderable {
fn prepare(&mut self, device: &Device);
fn initialize(&mut self, device: &Device);
fn update_instances(&mut self, queue: &Queue);
fn render<'a>(&'a self, render_pass: &mut wgpu::RenderPass<'a>);
fn prepare<'a>(&'a self, render_pass: &mut wgpu::RenderPass<'a>);
fn draw<'a>(&'a self, render_pass: &mut wgpu::RenderPass<'a>);
}