mirror of
https://github.com/emilk/egui.git
synced 2026-06-27 15:13:12 -04:00
Bug fix: make sure end_pass is called for all loaders (#7072)
None of the built-in loaders does any cache eviction (yet), but 3rd party ones might have
This commit is contained in:
@@ -2316,6 +2316,8 @@ impl ContextImpl {
|
||||
let viewport = self.viewports.entry(ended_viewport_id).or_default();
|
||||
let pixels_per_point = viewport.input.pixels_per_point;
|
||||
|
||||
self.loaders.end_pass(viewport.repaint.cumulative_pass_nr);
|
||||
|
||||
viewport.repaint.cumulative_pass_nr += 1;
|
||||
|
||||
self.memory.end_pass(&viewport.this_pass.used_ids);
|
||||
|
||||
@@ -322,8 +322,8 @@ pub trait BytesLoader {
|
||||
|
||||
/// Implementations may use this to perform work at the end of a frame,
|
||||
/// such as evicting unused entries from a cache.
|
||||
fn end_pass(&self, frame_index: usize) {
|
||||
let _ = frame_index;
|
||||
fn end_pass(&self, pass_index: u64) {
|
||||
let _ = pass_index;
|
||||
}
|
||||
|
||||
/// If the loader caches any data, this should return the size of that cache.
|
||||
@@ -394,8 +394,8 @@ pub trait ImageLoader {
|
||||
|
||||
/// Implementations may use this to perform work at the end of a pass,
|
||||
/// such as evicting unused entries from a cache.
|
||||
fn end_pass(&self, frame_index: usize) {
|
||||
let _ = frame_index;
|
||||
fn end_pass(&self, pass_index: u64) {
|
||||
let _ = pass_index;
|
||||
}
|
||||
|
||||
/// If the loader caches any data, this should return the size of that cache.
|
||||
@@ -539,8 +539,8 @@ pub trait TextureLoader {
|
||||
|
||||
/// Implementations may use this to perform work at the end of a pass,
|
||||
/// such as evicting unused entries from a cache.
|
||||
fn end_pass(&self, frame_index: usize) {
|
||||
let _ = frame_index;
|
||||
fn end_pass(&self, pass_index: u64) {
|
||||
let _ = pass_index;
|
||||
}
|
||||
|
||||
/// If the loader caches any data, this should return the size of that cache.
|
||||
@@ -572,3 +572,26 @@ impl Default for Loaders {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Loaders {
|
||||
/// The given pass has just ended.
|
||||
pub fn end_pass(&self, pass_index: u64) {
|
||||
let Self {
|
||||
include,
|
||||
bytes,
|
||||
image,
|
||||
texture,
|
||||
} = self;
|
||||
|
||||
include.end_pass(pass_index);
|
||||
for loader in bytes.lock().iter() {
|
||||
loader.end_pass(pass_index);
|
||||
}
|
||||
for loader in image.lock().iter() {
|
||||
loader.end_pass(pass_index);
|
||||
}
|
||||
for loader in texture.lock().iter() {
|
||||
loader.end_pass(pass_index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,8 +64,6 @@ impl TextureLoader for DefaultTextureLoader {
|
||||
self.cache.lock().clear();
|
||||
}
|
||||
|
||||
fn end_pass(&self, _: usize) {}
|
||||
|
||||
fn byte_size(&self) -> usize {
|
||||
self.cache
|
||||
.lock()
|
||||
|
||||
Reference in New Issue
Block a user