@@ -6,8 +6,9 @@ use windows::Win32::Graphics::Direct3D11::{
66 D3D11_TEXTURE2D_DESC , ID3D11Device1 , ID3D11Texture2D ,
77} ;
88use windows:: Win32 :: Graphics :: Dxgi :: * ;
9+ use imgui_renderer_dx11:: RenderToken ;
910
10- use crate :: common:: OverlayWindow ;
11+ use crate :: common:: { OverlayWindow , RenderError } ;
1112use crate :: d3d11:: hook:: { Direct3D11HookContext , FnPresentHook , FnResizeBuffersHook } ;
1213use crate :: d3d11:: imgui:: Direct3D11ImguiController ;
1314use crate :: d3d11:: overlay:: Direct3D11Overlay ;
@@ -42,7 +43,7 @@ impl Direct3D11Kernel {
4243 mut overlay : RwLockWriteGuard < Direct3D11Overlay > ,
4344 mut imgui : RwLockWriteGuard < Direct3D11ImguiController > ,
4445 this : & IDXGISwapChain ,
45- ) -> Result < ( ) , Box < dyn Error > > {
46+ ) -> Result < RenderToken , RenderError > {
4647 // Handle update of any overlay here.
4748 if let Ok ( cmd) = handle. try_recv ( ) {
4849 match & cmd. ty {
@@ -70,20 +71,17 @@ impl Direct3D11Kernel {
7071 }
7172
7273 if !overlay. ready_to_initialize ( ) {
73- eprintln ! ( "[dx11] Texture handle not ready" ) ;
74- return Ok :: < _ , Box < dyn Error > > ( ( ) ) ;
74+ return Err ( RenderError :: OverlayHandleNotReady )
7575 }
7676
7777 let device = unsafe { this. GetDevice :: < ID3D11Device1 > ( ) ? } ;
7878
7979 if !overlay. prepare_paint ( device, swapchain_desc. OutputWindow ) {
80- eprintln ! ( "[dx11] Failed to refresh texture for output window" ) ;
81- return Ok :: < _ , Box < dyn Error > > ( ( ) ) ;
80+ return Err ( RenderError :: OverlayPaintNotReady )
8281 }
8382
8483 if !imgui. prepare_paint ( & this, size) {
85- eprintln ! ( "[dx11] Failed to setup imgui render state" ) ;
86- return Ok :: < _ , Box < dyn Error > > ( ( ) ) ;
84+ return Err ( RenderError :: ImGuiNotReady )
8785 }
8886
8987 // imgui stuff here.
@@ -95,10 +93,11 @@ impl Direct3D11Kernel {
9593 overlay. paint ( |tid, dim| OverlayWindow :: new ( & ui, tid, dim) ) ;
9694 ui. show_demo_window ( & mut false ) ;
9795 ui. show_metrics_window ( & mut false ) ;
98- render. render ( ui. render ( ) ) . unwrap ( )
99- } ) ;
96+ render. render ( ui. render ( ) )
97+ } )
98+ } else {
99+ Err ( RenderError :: OverlayMutexNotReady )
100100 }
101- Ok :: < _ , Box < dyn Error > > ( ( ) )
102101 }
103102
104103 fn resize_impl ( mut imgui : RwLockWriteGuard < Direct3D11ImguiController > ) {
@@ -112,9 +111,14 @@ impl Direct3D11Kernel {
112111 Box :: new (
113112 move |this : IDXGISwapChain , sync : u32 , flags : u32 , mut next| {
114113 let handle = handle. clone ( ) ;
115- Direct3D11Kernel :: present_impl ( handle, overlay. write ( ) ,
114+ match Direct3D11Kernel :: present_impl ( handle, overlay. write ( ) ,
116115 imgui. write ( ) , & this)
117- . unwrap_or ( ( ) ) ;
116+ {
117+ Ok ( _) => { }
118+ Err ( e) => {
119+ eprintln ! ( "[dx11] {}" , e)
120+ }
121+ }
118122 let fp = next. fp_next ( ) ;
119123 fp ( this, sync, flags, next)
120124 } ,
0 commit comments