Reintroduce damage tracking for iced_tiny_skia
This commit is contained in:
parent
14b9708f72
commit
1e802e776c
10 changed files with 347 additions and 92 deletions
|
|
@ -1,5 +1,6 @@
|
|||
use crate::core::{Color, Rectangle, Size};
|
||||
use crate::graphics::compositor::{self, Information};
|
||||
use crate::graphics::damage;
|
||||
use crate::graphics::error::{self, Error};
|
||||
use crate::graphics::{self, Viewport};
|
||||
use crate::{Layer, Renderer, Settings};
|
||||
|
|
@ -154,7 +155,7 @@ pub fn present<T: AsRef<str>>(
|
|||
.buffer_mut()
|
||||
.map_err(|_| compositor::SurfaceError::Lost)?;
|
||||
|
||||
let _last_layers = {
|
||||
let last_layers = {
|
||||
let age = buffer.age();
|
||||
|
||||
surface.max_age = surface.max_age.max(age);
|
||||
|
|
@ -167,26 +168,28 @@ pub fn present<T: AsRef<str>>(
|
|||
}
|
||||
};
|
||||
|
||||
// TODO
|
||||
// let damage = last_layers
|
||||
// .and_then(|last_layers| {
|
||||
// (surface.background_color == background_color)
|
||||
// .then(|| damage::layers(last_layers, renderer.layers()))
|
||||
// })
|
||||
// .unwrap_or_else(|| vec![Rectangle::with_size(viewport.logical_size())]);
|
||||
|
||||
let damage = vec![Rectangle::with_size(viewport.logical_size())];
|
||||
let damage = last_layers
|
||||
.and_then(|last_layers| {
|
||||
(surface.background_color == background_color).then(|| {
|
||||
damage::diff(
|
||||
last_layers,
|
||||
renderer.layers(),
|
||||
|layer| vec![layer.bounds],
|
||||
Layer::damage,
|
||||
)
|
||||
})
|
||||
})
|
||||
.unwrap_or_else(|| vec![Rectangle::with_size(viewport.logical_size())]);
|
||||
|
||||
if damage.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
surface
|
||||
.layer_stack
|
||||
.push_front(renderer.layers().cloned().collect());
|
||||
surface.layer_stack.push_front(renderer.layers().to_vec());
|
||||
surface.background_color = background_color;
|
||||
|
||||
// let damage = damage::group(damage, viewport.logical_size());
|
||||
let damage =
|
||||
damage::group(damage, Rectangle::with_size(viewport.logical_size()));
|
||||
|
||||
let mut pixels = tiny_skia::PixmapMut::from_bytes(
|
||||
bytemuck::cast_slice_mut(&mut buffer),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue