Procházet zdrojové kódy

wallet: remove unused freed_textures field from DrawUpdate, and make RenderApi::*_unmanaged_texture() methods private.

darkfi před 1 rokem
rodič
revize
b72b033a39

+ 24 - 3
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<ManagedBuffer>;
+
+/// 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<GraphicsMethod>,
@@ -99,7 +120,7 @@ impl RenderApi {
         Self { method_req }
     }
 
-    pub fn new_unmanaged_texture(&self, width: u16, height: u16, data: Vec<u8>) -> GfxTextureId {
+    fn new_unmanaged_texture(&self, width: u16, height: u16, data: Vec<u8>) -> 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);
     }

+ 0 - 1
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,
         })
     }

+ 0 - 1
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,
         })
     }

+ 0 - 2
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,
         })
     }

+ 1 - 3
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 })
     }
 }
 

+ 0 - 1
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<GfxTextureId>,
     pub freed_buffers: Vec<GfxBufferId>,
 }
 

+ 0 - 1
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,

+ 0 - 2
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,
         })
     }

+ 0 - 5
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);
         }