Reuse last set pipeline for triangle in iced_wgpu

This commit is contained in:
Héctor Ramón Jiménez 2022-11-03 05:06:09 +01:00
parent 99cf98971d
commit 93e309f491
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
3 changed files with 33 additions and 2 deletions

View file

@ -186,6 +186,7 @@ impl Pipeline {
let mut num_solids = 0;
let mut num_gradients = 0;
let mut last_is_solid = None;
for (index, mesh) in meshes.iter().enumerate() {
let clip_bounds = (mesh.clip_bounds * scale_factor).snap();
@ -199,17 +200,35 @@ impl Pipeline {
match mesh.style {
mesh::Style::Solid(_) => {
if !last_is_solid.unwrap_or(false) {
self.pipelines
.solid
.set_render_pass_pipeline(&mut render_pass);
last_is_solid = Some(true);
}
self.pipelines.solid.configure_render_pass(
&mut render_pass,
num_solids,
);
num_solids += 1;
}
mesh::Style::Gradient(_) => {
if last_is_solid.unwrap_or(true) {
self.pipelines
.gradient
.set_render_pass_pipeline(&mut render_pass);
last_is_solid = Some(false);
}
self.pipelines.gradient.configure_render_pass(
&mut render_pass,
num_gradients,
);
num_gradients += 1;
}
};

View file

@ -245,6 +245,13 @@ impl Pipeline {
self.color_stops_pending_write.color_stops.clear();
}
pub fn set_render_pass_pipeline<'a>(
&'a self,
render_pass: &mut wgpu::RenderPass<'a>,
) {
render_pass.set_pipeline(&self.pipeline);
}
/// Configures the current render pass to draw the gradient at its offset stored in the
/// [DynamicBuffer] at [index].
pub fn configure_render_pass<'a>(
@ -252,7 +259,6 @@ impl Pipeline {
render_pass: &mut wgpu::RenderPass<'a>,
count: usize,
) {
render_pass.set_pipeline(&self.pipeline);
render_pass.set_bind_group(
0,
&self.bind_group,

View file

@ -147,6 +147,13 @@ impl Pipeline {
self.buffer.write(device, staging_belt, encoder);
}
pub fn set_render_pass_pipeline<'a>(
&'a self,
render_pass: &mut wgpu::RenderPass<'a>,
) {
render_pass.set_pipeline(&self.pipeline);
}
/// Configures the current render pass to draw the solid at its offset stored in the
/// [DynamicBuffer] at [index].
pub fn configure_render_pass<'a>(
@ -154,7 +161,6 @@ impl Pipeline {
render_pass: &mut wgpu::RenderPass<'a>,
count: usize,
) {
render_pass.set_pipeline(&self.pipeline);
render_pass.set_bind_group(
0,
&self.bind_group,