fix view leak and add view count

This commit is contained in:
2025-08-24 22:13:02 -04:00
parent 74d01d14d4
commit 44a8b1cbeb
7 changed files with 41 additions and 18 deletions

View File

@@ -264,6 +264,10 @@ impl UiRenderer {
label: Some("ui rsc"),
})
}
pub fn view_count(&self) -> usize {
self.textures.view_count()
}
}
pub struct UiLimits {

View File

@@ -4,7 +4,7 @@ use std::{
};
use crate::{
layout::{Color, TextureHandle, UiRegion},
layout::{Color, UiRegion},
render::{ArrBuf, data::PrimitiveInstance},
};
use bytemuck::Pod;
@@ -14,8 +14,6 @@ pub struct Primitives {
pub(super) instances: Vec<PrimitiveInstance>,
pub(super) run: Vec<PrimitiveInstance>,
pub(super) data: PrimitiveData,
// ensure drawn textures don't get freed
pub(crate) drawn_textures: Vec<TextureHandle>,
pub updated: bool,
run_start: usize,
}
@@ -26,7 +24,6 @@ impl Default for Primitives {
instances: Default::default(),
run: Default::default(),
data: Default::default(),
drawn_textures: Default::default(),
updated: true,
run_start: 0,
}
@@ -117,7 +114,6 @@ impl Primitives {
self.instances.clear();
self.run.clear();
self.data.clear();
self.drawn_textures.clear();
}
pub fn set<P: Primitive>(&mut self, handle: &PrimitiveHandle<P>, data: P) {

View File

@@ -7,6 +7,7 @@ pub struct GpuTextures {
device: Device,
queue: Queue,
views: Vec<TextureView>,
view_count: usize,
samplers: Vec<Sampler>,
null_view: TextureView,
no_views: Vec<TextureView>,
@@ -23,19 +24,19 @@ impl GpuTextures {
TextureUpdate::Free(i) => self.free(i),
}
}
// if changed {
// println!("{}", self.views.len());
// }
changed
}
fn set(&mut self, i: u32, image: &DynamicImage) {
self.view_count += 1;
let view = self.create_view(image);
self.views[i as usize] = view;
}
fn free(&mut self, i: u32) {
self.view_count -= 1;
self.views[i as usize] = self.null_view.clone();
}
fn push(&mut self, image: &DynamicImage) {
self.view_count += 1;
let view = self.create_view(image);
self.views.push(view);
}
@@ -74,6 +75,7 @@ impl GpuTextures {
samplers: vec![default_sampler(device)],
no_views: vec![null_view.clone()],
null_view,
view_count: 0,
}
}
@@ -91,6 +93,10 @@ impl GpuTextures {
pub fn samplers(&self) -> Vec<&Sampler> {
self.samplers.iter().by_ref().collect()
}
pub fn view_count(&self) -> usize {
self.view_count
}
}
pub fn null_texture_view(device: &Device) -> TextureView {