Reuse last set pipeline for triangle in iced_wgpu
This commit is contained in:
parent
99cf98971d
commit
93e309f491
3 changed files with 33 additions and 2 deletions
|
|
@ -186,6 +186,7 @@ impl Pipeline {
|
||||||
|
|
||||||
let mut num_solids = 0;
|
let mut num_solids = 0;
|
||||||
let mut num_gradients = 0;
|
let mut num_gradients = 0;
|
||||||
|
let mut last_is_solid = None;
|
||||||
|
|
||||||
for (index, mesh) in meshes.iter().enumerate() {
|
for (index, mesh) in meshes.iter().enumerate() {
|
||||||
let clip_bounds = (mesh.clip_bounds * scale_factor).snap();
|
let clip_bounds = (mesh.clip_bounds * scale_factor).snap();
|
||||||
|
|
@ -199,17 +200,35 @@ impl Pipeline {
|
||||||
|
|
||||||
match mesh.style {
|
match mesh.style {
|
||||||
mesh::Style::Solid(_) => {
|
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(
|
self.pipelines.solid.configure_render_pass(
|
||||||
&mut render_pass,
|
&mut render_pass,
|
||||||
num_solids,
|
num_solids,
|
||||||
);
|
);
|
||||||
|
|
||||||
num_solids += 1;
|
num_solids += 1;
|
||||||
}
|
}
|
||||||
mesh::Style::Gradient(_) => {
|
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(
|
self.pipelines.gradient.configure_render_pass(
|
||||||
&mut render_pass,
|
&mut render_pass,
|
||||||
num_gradients,
|
num_gradients,
|
||||||
);
|
);
|
||||||
|
|
||||||
num_gradients += 1;
|
num_gradients += 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -245,6 +245,13 @@ impl Pipeline {
|
||||||
self.color_stops_pending_write.color_stops.clear();
|
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
|
/// Configures the current render pass to draw the gradient at its offset stored in the
|
||||||
/// [DynamicBuffer] at [index].
|
/// [DynamicBuffer] at [index].
|
||||||
pub fn configure_render_pass<'a>(
|
pub fn configure_render_pass<'a>(
|
||||||
|
|
@ -252,7 +259,6 @@ impl Pipeline {
|
||||||
render_pass: &mut wgpu::RenderPass<'a>,
|
render_pass: &mut wgpu::RenderPass<'a>,
|
||||||
count: usize,
|
count: usize,
|
||||||
) {
|
) {
|
||||||
render_pass.set_pipeline(&self.pipeline);
|
|
||||||
render_pass.set_bind_group(
|
render_pass.set_bind_group(
|
||||||
0,
|
0,
|
||||||
&self.bind_group,
|
&self.bind_group,
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,13 @@ impl Pipeline {
|
||||||
self.buffer.write(device, staging_belt, encoder);
|
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
|
/// Configures the current render pass to draw the solid at its offset stored in the
|
||||||
/// [DynamicBuffer] at [index].
|
/// [DynamicBuffer] at [index].
|
||||||
pub fn configure_render_pass<'a>(
|
pub fn configure_render_pass<'a>(
|
||||||
|
|
@ -154,7 +161,6 @@ impl Pipeline {
|
||||||
render_pass: &mut wgpu::RenderPass<'a>,
|
render_pass: &mut wgpu::RenderPass<'a>,
|
||||||
count: usize,
|
count: usize,
|
||||||
) {
|
) {
|
||||||
render_pass.set_pipeline(&self.pipeline);
|
|
||||||
render_pass.set_bind_group(
|
render_pass.set_bind_group(
|
||||||
0,
|
0,
|
||||||
&self.bind_group,
|
&self.bind_group,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue