Fix rendering order for quad::Pipeline

This commit is contained in:
Héctor Ramón Jiménez 2023-02-07 19:26:41 +01:00
parent a970f34cb4
commit 77b59496b0
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
2 changed files with 15 additions and 14 deletions

View file

@ -88,14 +88,13 @@ impl Backend {
let mut layers = Layer::generate(primitives, viewport); let mut layers = Layer::generate(primitives, viewport);
layers.push(Layer::overlay(overlay_text, viewport)); layers.push(Layer::overlay(overlay_text, viewport));
for (i, layer) in layers.iter().enumerate() { for layer in layers {
self.flush( self.flush(
device, device,
queue, queue,
scale_factor, scale_factor,
transformation, transformation,
&layer, &layer,
i,
staging_belt, staging_belt,
encoder, encoder,
frame, frame,
@ -117,7 +116,6 @@ impl Backend {
scale_factor: f32, scale_factor: f32,
transformation: Transformation, transformation: Transformation,
layer: &Layer<'_>, layer: &Layer<'_>,
layer_index: usize,
staging_belt: &mut wgpu::util::StagingBelt, staging_belt: &mut wgpu::util::StagingBelt,
encoder: &mut wgpu::CommandEncoder, encoder: &mut wgpu::CommandEncoder,
target: &wgpu::TextureView, target: &wgpu::TextureView,
@ -154,8 +152,7 @@ impl Backend {
depth_stencil_attachment: None, depth_stencil_attachment: None,
}); });
self.quad_pipeline self.quad_pipeline.render(bounds, &mut render_pass);
.render(layer_index, bounds, &mut render_pass);
} }
if !layer.meshes.is_empty() { if !layer.meshes.is_empty() {

View file

@ -17,7 +17,8 @@ pub struct Pipeline {
vertices: wgpu::Buffer, vertices: wgpu::Buffer,
indices: wgpu::Buffer, indices: wgpu::Buffer,
layers: Vec<Layer>, layers: Vec<Layer>,
current_layer: usize, prepare_layer: usize,
render_layer: usize,
} }
impl Pipeline { impl Pipeline {
@ -139,7 +140,8 @@ impl Pipeline {
vertices, vertices,
indices, indices,
layers: Vec::new(), layers: Vec::new(),
current_layer: 0, prepare_layer: 0,
render_layer: 0,
} }
} }
@ -151,23 +153,22 @@ impl Pipeline {
transformation: Transformation, transformation: Transformation,
scale: f32, scale: f32,
) { ) {
if self.layers.len() <= self.current_layer { if self.layers.len() <= self.prepare_layer {
self.layers.push(Layer::new(device, &self.constant_layout)); self.layers.push(Layer::new(device, &self.constant_layout));
} }
let layer = &mut self.layers[self.current_layer]; let layer = &mut self.layers[self.prepare_layer];
layer.prepare(device, queue, instances, transformation, scale); layer.prepare(device, queue, instances, transformation, scale);
self.current_layer += 1; self.prepare_layer += 1;
} }
pub fn render<'a>( pub fn render<'a>(
&'a self, &'a mut self,
layer: usize,
bounds: Rectangle<u32>, bounds: Rectangle<u32>,
render_pass: &mut wgpu::RenderPass<'a>, render_pass: &mut wgpu::RenderPass<'a>,
) { ) {
if let Some(layer) = self.layers.get(layer) { if let Some(layer) = self.layers.get(self.render_layer) {
render_pass.set_pipeline(&self.pipeline); render_pass.set_pipeline(&self.pipeline);
render_pass.set_scissor_rect( render_pass.set_scissor_rect(
@ -184,11 +185,14 @@ impl Pipeline {
render_pass.set_vertex_buffer(0, self.vertices.slice(..)); render_pass.set_vertex_buffer(0, self.vertices.slice(..));
layer.draw(render_pass); layer.draw(render_pass);
self.render_layer += 1;
} }
} }
pub fn end_frame(&mut self) { pub fn end_frame(&mut self) {
self.current_layer = 0; self.prepare_layer = 0;
self.render_layer = 0;
} }
} }