Avoid preparing layers outside physical bounds in iced_wgpu
This commit is contained in:
parent
c0db7b8e1f
commit
3428a3d2af
3 changed files with 13 additions and 33 deletions
|
|
@ -145,7 +145,19 @@ impl Renderer {
|
||||||
|
|
||||||
self.text_viewport.update(queue, viewport.physical_size());
|
self.text_viewport.update(queue, viewport.physical_size());
|
||||||
|
|
||||||
|
let physical_bounds = Rectangle::<f32>::from(Rectangle::with_size(
|
||||||
|
viewport.physical_size(),
|
||||||
|
));
|
||||||
|
|
||||||
for layer in self.layers.iter_mut() {
|
for layer in self.layers.iter_mut() {
|
||||||
|
if physical_bounds
|
||||||
|
.intersection(&(layer.bounds * scale_factor))
|
||||||
|
.and_then(Rectangle::snap)
|
||||||
|
.is_none()
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if !layer.quads.is_empty() {
|
if !layer.quads.is_empty() {
|
||||||
engine.quad_pipeline.prepare(
|
engine.quad_pipeline.prepare(
|
||||||
device,
|
device,
|
||||||
|
|
@ -269,27 +281,9 @@ impl Renderer {
|
||||||
|
|
||||||
for layer in self.layers.iter() {
|
for layer in self.layers.iter() {
|
||||||
let Some(scissor_rect) = physical_bounds
|
let Some(scissor_rect) = physical_bounds
|
||||||
.intersection(&(layer.bounds * scale))
|
.intersection(&(layer.bounds * scale_factor))
|
||||||
.and_then(Rectangle::snap)
|
.and_then(Rectangle::snap)
|
||||||
else {
|
else {
|
||||||
if !layer.quads.is_empty() {
|
|
||||||
quad_layer += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if !layer.triangles.is_empty() {
|
|
||||||
mesh_layer +=
|
|
||||||
triangle::Pipeline::layer_count(&layer.triangles);
|
|
||||||
}
|
|
||||||
|
|
||||||
if !layer.text.is_empty() {
|
|
||||||
text_layer += text::Pipeline::layer_count(&layer.text);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(any(feature = "svg", feature = "image"))]
|
|
||||||
if !layer.images.is_empty() {
|
|
||||||
image_layer += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -302,13 +302,6 @@ impl Pipeline {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn layer_count(batch: &Batch) -> usize {
|
|
||||||
batch
|
|
||||||
.iter()
|
|
||||||
.filter(|item| matches!(item, Item::Group { .. }))
|
|
||||||
.count()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn prepare(
|
pub fn prepare(
|
||||||
&mut self,
|
&mut self,
|
||||||
device: &wgpu::Device,
|
device: &wgpu::Device,
|
||||||
|
|
|
||||||
|
|
@ -177,13 +177,6 @@ impl Pipeline {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn layer_count(items: &[Item]) -> usize {
|
|
||||||
items
|
|
||||||
.iter()
|
|
||||||
.filter(|item| matches!(item, Item::Group { .. }))
|
|
||||||
.count()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn prepare(
|
pub fn prepare(
|
||||||
&mut self,
|
&mut self,
|
||||||
device: &wgpu::Device,
|
device: &wgpu::Device,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue