dear_imgui_wgpu/renderer/
external_textures.rs

1// Renderer external texture helpers (register/update/unregister)
2
3use super::WgpuRenderer;
4
5impl WgpuRenderer {
6    /// Register an external WGPU texture + view and obtain a TextureId for ImGui usage.
7    ///
8    /// Use this when you already have a `wgpu::Texture` (e.g., game view RT, video frame,
9    /// atlas upload) and want to display it via legacy `TextureId` path:
10    /// `ui.image(TextureId::from(id), size)`.
11    pub fn register_external_texture(
12        &mut self,
13        texture: &wgpu::Texture,
14        view: &wgpu::TextureView,
15    ) -> u64 {
16        self.texture_manager
17            .register_texture(crate::WgpuTexture::new(texture.clone(), view.clone()))
18    }
19
20    /// Update the view for an already-registered external texture.
21    ///
22    /// Returns true if the texture existed and the view was replaced.
23    pub fn update_external_texture_view(
24        &mut self,
25        texture_id: u64,
26        view: &wgpu::TextureView,
27    ) -> bool {
28        if let Some(mut tex) = self.texture_manager.remove_texture(texture_id) {
29            tex.texture_view = view.clone();
30            self.texture_manager.insert_texture_with_id(texture_id, tex);
31            if let Some(backend) = self.backend_data.as_mut() {
32                backend.render_resources.remove_image_bind_group(texture_id);
33            }
34            true
35        } else {
36            false
37        }
38    }
39
40    /// Unregister (remove) a texture by id. Safe for both external and managed textures.
41    pub fn unregister_texture(&mut self, texture_id: u64) {
42        self.texture_manager.remove_texture(texture_id);
43        if let Some(backend) = self.backend_data.as_mut() {
44            backend.render_resources.remove_image_bind_group(texture_id);
45        }
46    }
47}