From b72b033a39ff04e5501043fd20482bd0df4e56f6 Mon Sep 17 00:00:00 2001 From: darkfi Date: Mon, 9 Dec 2024 14:20:14 +0100 Subject: [PATCH] wallet: remove unused freed_textures field from DrawUpdate, and make RenderApi::*_unmanaged_texture() methods private. --- bin/darkwallet/src/gfx/mod.rs | 27 ++++++++++++++++++++++--- bin/darkwallet/src/ui/chatview/mod.rs | 1 - bin/darkwallet/src/ui/editbox.rs | 1 - bin/darkwallet/src/ui/image.rs | 2 -- bin/darkwallet/src/ui/layer.rs | 4 +--- bin/darkwallet/src/ui/mod.rs | 1 - bin/darkwallet/src/ui/text.rs | 1 - bin/darkwallet/src/ui/vector_art/mod.rs | 2 -- bin/darkwallet/src/ui/win.rs | 5 ----- 9 files changed, 25 insertions(+), 19 deletions(-) diff --git a/bin/darkwallet/src/gfx/mod.rs b/bin/darkwallet/src/gfx/mod.rs index e696d8eae..85b7bf0c7 100644 --- a/bin/darkwallet/src/gfx/mod.rs +++ b/bin/darkwallet/src/gfx/mod.rs @@ -79,7 +79,7 @@ pub struct ManagedTexture { impl Drop for ManagedTexture { fn drop(&mut self) { - self.render_api.delete_texture(self.id); + self.render_api.delete_unmanaged_texture(self.id); } } @@ -89,6 +89,27 @@ impl std::fmt::Debug for ManagedTexture { } } +pub type ManagedBufferPtr = Arc; + +/// Auto-deletes buffer on drop +#[derive(Clone)] +pub struct ManagedBuffer { + id: GfxBufferId, + render_api: RenderApi, +} + +impl Drop for ManagedBuffer { + fn drop(&mut self) { + //self.render_api.delete_unmanaged_buffer(self.id); + } +} + +impl std::fmt::Debug for ManagedBuffer { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ManagedBuffer").field("id", &self.id).finish() + } +} + #[derive(Clone)] pub struct RenderApi { method_req: mpsc::Sender, @@ -99,7 +120,7 @@ impl RenderApi { Self { method_req } } - pub fn new_unmanaged_texture(&self, width: u16, height: u16, data: Vec) -> GfxTextureId { + fn new_unmanaged_texture(&self, width: u16, height: u16, data: Vec) -> GfxTextureId { let gfx_texture_id = rand::random(); let method = GraphicsMethod::NewTexture((width, height, data, gfx_texture_id)); @@ -115,7 +136,7 @@ impl RenderApi { }) } - pub fn delete_texture(&self, texture: GfxTextureId) { + fn delete_unmanaged_texture(&self, texture: GfxTextureId) { let method = GraphicsMethod::DeleteTexture(texture); let _ = self.method_req.send(method); } diff --git a/bin/darkwallet/src/ui/chatview/mod.rs b/bin/darkwallet/src/ui/chatview/mod.rs index 6ddbc0b7b..4cef8de83 100644 --- a/bin/darkwallet/src/ui/chatview/mod.rs +++ b/bin/darkwallet/src/ui/chatview/mod.rs @@ -812,7 +812,6 @@ impl UIObject for ChatView { self.dc_key, GfxDrawCall { instrs, dcs: vec![], z_index: self.z_index.get() }, )], - freed_textures: freed.textures, freed_buffers: freed.buffers, }) } diff --git a/bin/darkwallet/src/ui/editbox.rs b/bin/darkwallet/src/ui/editbox.rs index fc8adaa8b..539a3145a 100644 --- a/bin/darkwallet/src/ui/editbox.rs +++ b/bin/darkwallet/src/ui/editbox.rs @@ -1273,7 +1273,6 @@ impl EditBox { GfxDrawCall { instrs: cursor_instrs, dcs: vec![], z_index: self.z_index.get() }, ), ], - freed_textures: vec![], freed_buffers: freed.buffers, }) } diff --git a/bin/darkwallet/src/ui/image.rs b/bin/darkwallet/src/ui/image.rs index 021316ac2..627796756 100644 --- a/bin/darkwallet/src/ui/image.rs +++ b/bin/darkwallet/src/ui/image.rs @@ -135,7 +135,6 @@ impl Image { }; self.render_api.replace_draw_calls(draw_update.draw_calls); debug!(target: "ui::image", "replace draw calls done"); - assert!(draw_update.freed_textures.is_empty()); for buff in draw_update.freed_buffers { self.render_api.delete_buffer(buff); } @@ -188,7 +187,6 @@ impl Image { z_index: self.z_index.get(), }, )], - freed_textures: vec![], freed_buffers, }) } diff --git a/bin/darkwallet/src/ui/layer.rs b/bin/darkwallet/src/ui/layer.rs index 706422d51..3ead86fb5 100644 --- a/bin/darkwallet/src/ui/layer.rs +++ b/bin/darkwallet/src/ui/layer.rs @@ -102,7 +102,6 @@ impl Layer { let mut draw_calls = vec![]; let mut child_calls = vec![]; - let mut freed_textures = vec![]; let mut freed_buffers = vec![]; // We should return a draw call so that if the layer is made visible, we can just @@ -117,7 +116,6 @@ impl Layer { draw_calls.append(&mut draw_update.draw_calls); child_calls.push(draw_update.key); - freed_textures.append(&mut draw_update.freed_textures); freed_buffers.append(&mut draw_update.freed_buffers); } } @@ -128,7 +126,7 @@ impl Layer { z_index: self.z_index(), }; draw_calls.push((self.dc_key, dc)); - Some(DrawUpdate { key: self.dc_key, draw_calls, freed_textures, freed_buffers }) + Some(DrawUpdate { key: self.dc_key, draw_calls, freed_buffers }) } } diff --git a/bin/darkwallet/src/ui/mod.rs b/bin/darkwallet/src/ui/mod.rs index 3a09e9624..791bb79f0 100644 --- a/bin/darkwallet/src/ui/mod.rs +++ b/bin/darkwallet/src/ui/mod.rs @@ -96,7 +96,6 @@ pub trait UIObject: Sync { pub struct DrawUpdate { pub key: u64, pub draw_calls: Vec<(u64, GfxDrawCall)>, - pub freed_textures: Vec, pub freed_buffers: Vec, } diff --git a/bin/darkwallet/src/ui/text.rs b/bin/darkwallet/src/ui/text.rs index e1fd53d52..3683b75f3 100644 --- a/bin/darkwallet/src/ui/text.rs +++ b/bin/darkwallet/src/ui/text.rs @@ -213,7 +213,6 @@ impl Text { z_index: self.z_index.get(), }, )], - freed_textures: vec![], freed_buffers: vec![ old_render_info.mesh.vertex_buffer, old_render_info.mesh.index_buffer, diff --git a/bin/darkwallet/src/ui/vector_art/mod.rs b/bin/darkwallet/src/ui/vector_art/mod.rs index 553694401..3fee8325c 100644 --- a/bin/darkwallet/src/ui/vector_art/mod.rs +++ b/bin/darkwallet/src/ui/vector_art/mod.rs @@ -97,7 +97,6 @@ impl VectorArt { return; }; self.render_api.replace_draw_calls(draw_update.draw_calls); - assert!(draw_update.freed_textures.is_empty()); for buff in draw_update.freed_buffers { self.render_api.delete_buffer(buff); } @@ -141,7 +140,6 @@ impl VectorArt { z_index: self.z_index.get(), }, )], - freed_textures: vec![], freed_buffers, }) } diff --git a/bin/darkwallet/src/ui/win.rs b/bin/darkwallet/src/ui/win.rs index 4d09d7f53..91ff60b52 100644 --- a/bin/darkwallet/src/ui/win.rs +++ b/bin/darkwallet/src/ui/win.rs @@ -421,7 +421,6 @@ impl Window { let mut draw_calls = vec![]; let mut child_calls = vec![]; - let mut freed_textures = vec![]; let mut freed_buffers = vec![]; for child in self.get_children() { @@ -433,7 +432,6 @@ impl Window { draw_calls.append(&mut draw_update.draw_calls); child_calls.push(draw_update.key); - freed_textures.append(&mut draw_update.freed_textures); freed_buffers.append(&mut draw_update.freed_buffers); } @@ -447,9 +445,6 @@ impl Window { self.render_api.replace_draw_calls(draw_calls); - for texture in freed_textures { - self.render_api.delete_texture(texture); - } for buff in freed_buffers { self.render_api.delete_buffer(buff); }