@@ -12,6 +12,15 @@ pub struct TesterContextGraphicsD3D11 {
1212 swap_chain : ComPtr < dxgi:: IDXGISwapChain > ,
1313 back_buffer : ComPtr < d3d11:: ID3D11Texture2D > ,
1414 back_buffer_desc : d3d11:: D3D11_TEXTURE2D_DESC ,
15+
16+ textures_render_buffer :
17+ std:: collections:: HashMap < UnityRenderBuffer , ComPtr < d3d11:: ID3D11Texture2D > > ,
18+ textures_native_texture :
19+ std:: collections:: HashMap < UnityTextureID , ComPtr < d3d11:: ID3D11Texture2D > > ,
20+ rtvs_render_buffer :
21+ std:: collections:: HashMap < UnityRenderBuffer , ComPtr < d3d11:: ID3D11RenderTargetView > > ,
22+ srvs_native_texture :
23+ std:: collections:: HashMap < UnityTextureID , ComPtr < d3d11:: ID3D11ShaderResourceView > > ,
1524}
1625
1726impl TesterContextGraphicsD3D11 {
@@ -80,13 +89,17 @@ impl TesterContextGraphicsD3D11 {
8089 swap_chain : ComPtr :: from_raw ( swap_chain) ,
8190 back_buffer : ComPtr :: from_raw ( back_buffer) ,
8291 back_buffer_desc : desc,
92+ textures_render_buffer : std:: collections:: HashMap :: new ( ) ,
93+ textures_native_texture : std:: collections:: HashMap :: new ( ) ,
94+ rtvs_render_buffer : std:: collections:: HashMap :: new ( ) ,
8395 interfaces : IUnityGraphicsD3D11 {
8496 GetDevice : Some ( get_device) ,
8597 TextureFromRenderBuffer : Some ( texture_from_render_buffer) ,
8698 TextureFromNativeTexture : Some ( texture_from_native_texture) ,
8799 RTVFromRenderBuffer : Some ( rtv_from_render_buffer) ,
88100 SRVFromNativeTexture : Some ( srv_from_native_texture) ,
89101 } ,
102+ srvs_native_texture : std:: collections:: HashMap :: new ( ) ,
90103 } )
91104 } else {
92105 Err ( hr)
@@ -113,6 +126,56 @@ impl TesterContextGraphicsD3D11 {
113126 pub fn unity_back_buffer ( & self ) -> UnityRenderBuffer {
114127 self . back_buffer . as_raw ( ) as _
115128 }
129+
130+ pub fn textures_render_buffer (
131+ & self ,
132+ ) -> & std:: collections:: HashMap < UnityRenderBuffer , ComPtr < d3d11:: ID3D11Texture2D > > {
133+ & self . textures_render_buffer
134+ }
135+
136+ pub fn textures_render_buffer_mut (
137+ & mut self ,
138+ ) -> & mut std:: collections:: HashMap < UnityRenderBuffer , ComPtr < d3d11:: ID3D11Texture2D > > {
139+ & mut self . textures_render_buffer
140+ }
141+
142+ pub fn textures_native_texture (
143+ & self ,
144+ ) -> & std:: collections:: HashMap < UnityTextureID , ComPtr < d3d11:: ID3D11Texture2D > > {
145+ & self . textures_native_texture
146+ }
147+
148+ pub fn textures_native_texture_mut (
149+ & mut self ,
150+ ) -> & mut std:: collections:: HashMap < UnityTextureID , ComPtr < d3d11:: ID3D11Texture2D > > {
151+ & mut self . textures_native_texture
152+ }
153+
154+ pub fn rtvs_render_buffer (
155+ & self ,
156+ ) -> & std:: collections:: HashMap < UnityRenderBuffer , ComPtr < d3d11:: ID3D11RenderTargetView > > {
157+ & self . rtvs_render_buffer
158+ }
159+
160+ pub fn rtvs_render_buffer_mut (
161+ & mut self ,
162+ ) -> & mut std:: collections:: HashMap < UnityRenderBuffer , ComPtr < d3d11:: ID3D11RenderTargetView > >
163+ {
164+ & mut self . rtvs_render_buffer
165+ }
166+
167+ pub fn srvs_native_texture (
168+ & self ,
169+ ) -> & std:: collections:: HashMap < UnityTextureID , ComPtr < d3d11:: ID3D11ShaderResourceView > > {
170+ & self . srvs_native_texture
171+ }
172+
173+ pub fn srvs_native_texture_mut (
174+ & mut self ,
175+ ) -> & mut std:: collections:: HashMap < UnityTextureID , ComPtr < d3d11:: ID3D11ShaderResourceView > >
176+ {
177+ & mut self . srvs_native_texture
178+ }
116179}
117180
118181impl crate :: interface:: UnityInterfaceBase for TesterContextGraphicsD3D11 {
@@ -140,27 +203,59 @@ extern "system" fn get_device() -> *mut ID3D11Device {
140203}
141204
142205extern "system" fn texture_from_render_buffer ( buffer : UnityRenderBuffer ) -> * mut ID3D11Resource {
143- std:: ptr:: null_mut ( )
206+ unsafe {
207+ match crate :: interface:: get_unity_interface :: < TesterContextGraphicsD3D11 > ( )
208+ . textures_render_buffer ( )
209+ . get ( & buffer)
210+ {
211+ Some ( v) => v. as_raw ( ) as _ ,
212+ None => std:: ptr:: null_mut ( ) ,
213+ }
214+ }
144215}
145216
146217extern "system" fn texture_from_native_texture ( texture : UnityTextureID ) -> * mut ID3D11Resource {
147- std:: ptr:: null_mut ( )
218+ unsafe {
219+ match crate :: interface:: get_unity_interface :: < TesterContextGraphicsD3D11 > ( )
220+ . textures_native_texture ( )
221+ . get ( & texture)
222+ {
223+ Some ( v) => v. as_raw ( ) as _ ,
224+ None => std:: ptr:: null_mut ( ) ,
225+ }
226+ }
148227}
149228
150229extern "system" fn rtv_from_render_buffer (
151230 surface : UnityRenderBuffer ,
152231) -> * mut ID3D11RenderTargetView {
153- std:: ptr:: null_mut ( )
232+ unsafe {
233+ match crate :: interface:: get_unity_interface :: < TesterContextGraphicsD3D11 > ( )
234+ . rtvs_render_buffer ( )
235+ . get ( & surface)
236+ {
237+ Some ( v) => v. as_raw ( ) as _ ,
238+ None => std:: ptr:: null_mut ( ) ,
239+ }
240+ }
154241}
155242
156243extern "system" fn srv_from_native_texture (
157244 texture : UnityTextureID ,
158245) -> * mut ID3D11ShaderResourceView {
159- std:: ptr:: null_mut ( )
246+ unsafe {
247+ match crate :: interface:: get_unity_interface :: < TesterContextGraphicsD3D11 > ( )
248+ . srvs_native_texture ( )
249+ . get ( & texture)
250+ {
251+ Some ( v) => v. as_raw ( ) as _ ,
252+ None => std:: ptr:: null_mut ( ) ,
253+ }
254+ }
160255}
161256
162257pub fn test_plugin_d3d11 <
163- FnInit : FnOnce ( & Window , & TesterContextGraphicsD3D11 ) ,
258+ FnInit : FnOnce ( & Window , & mut TesterContextGraphicsD3D11 ) ,
164259 FnMain : FnMut ( & Window , & TesterContextGraphicsD3D11 ) -> crate :: window:: LoopResult ,
165260 FnFinalize : FnOnce ( & Window , & TesterContextGraphicsD3D11 ) ,
166261> (
@@ -181,8 +276,8 @@ pub fn test_plugin_d3d11<
181276 crate :: window:: run_window_app (
182277 client_size,
183278 |window| {
184- let ret = TesterContextGraphicsD3D11 :: new ( window) . unwrap ( ) ;
185- fn_init ( window, & ret) ;
279+ let mut ret = TesterContextGraphicsD3D11 :: new ( window) . unwrap ( ) ;
280+ fn_init ( window, & mut ret) ;
186281 ret
187282 } ,
188283 |window, context| {
0 commit comments