@@ -10,6 +10,7 @@ use sourcerenderer_core::gpu::{Texture as _, TexturePlane};
1010use sourcerenderer_core:: { Matrix4 , Vec2 , Vec2I , Vec2UI , Vec3 , Vec3UI } ;
1111use std:: collections:: HashMap ;
1212use std:: sync:: Arc ;
13+ use crate :: asset:: { AssetHandle , AssetType } ;
1314
1415pub struct DearImguiRenderer {
1516 next_id : u64 ,
@@ -19,6 +20,8 @@ pub struct DearImguiRenderer {
1920}
2021
2122impl DearImguiRenderer {
23+ const IMGUI_IDENTIFY_MASK : u64 = 1 << 63 ;
24+
2225 pub fn new (
2326 _device : & Device ,
2427 _resources : & mut RendererResources ,
@@ -207,7 +210,7 @@ impl DearImguiRenderer {
207210 Some ( & format ! ( "DearImgui view {}" , id) ) ,
208211 ) ;
209212
210- let imgui_id = dear_imgui_rs:: TextureId :: new ( id) ;
213+ let imgui_id = dear_imgui_rs:: TextureId :: new ( id | Self :: IMGUI_IDENTIFY_MASK ) ;
211214 self . textures
212215 . insert ( texture_request. texture ( ) , ( imgui_id, view) ) ;
213216
@@ -423,12 +426,18 @@ impl DearImguiRenderer {
423426
424427 let view = match texture {
425428 dear_imgui_rs:: TextureBinding :: Legacy ( id) => {
426- log:: warn!( "Binding with legacy texture id: {:?}" , id) ;
427- self . textures
428- . iter ( )
429- . find ( |( _, ( stored_id, _) ) | id == stored_id)
430- . map ( |( _, ( _, texture) ) | texture)
431- . unwrap ( )
429+ if ( id. id ( ) & Self :: IMGUI_IDENTIFY_MASK ) != 0 {
430+ log:: warn!( "Got a managed texture in the legacy path." ) ;
431+ self . textures
432+ . iter ( )
433+ . find ( |( _, ( stored_id, _) ) | id == stored_id)
434+ . map ( |( _, ( _, texture) ) | texture)
435+ . unwrap ( )
436+ } else {
437+ let asset_handle = AssetHandle :: new ( id. id ( ) , AssetType :: Texture ) ;
438+ let texture = assets_readonly. get_texture_opt ( asset_handle. into ( ) ) ;
439+ texture. map ( |t| & t. view ) . unwrap_or ( & assets_readonly. get_placeholder_texture_black ( ) . view )
440+ }
432441 }
433442 dear_imgui_rs:: TextureBinding :: Managed ( id) => {
434443 & ( self . textures . get ( id) . unwrap ( ) . 1 )
0 commit comments