Skip to content

Commit 0efafaf

Browse files
committed
Implement IUnityGraphicsD3D11 methods for the tester
1 parent 9d45399 commit 0efafaf

2 files changed

Lines changed: 104 additions & 9 deletions

File tree

  • unity-native-plugin-sample/src
  • unity-native-plugin-tester/src

unity-native-plugin-sample/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ fn test() {
5858
let instant = std::time::Instant::now();
5959
unity_native_plugin_tester::d3d11::test_plugin_d3d11(
6060
(256, 256),
61-
|window, context| {},
62-
|window, context| {
61+
|_window, _context| {},
62+
|_window, context| {
6363
let n = (instant.elapsed().as_millis() % 1000) as f32 / 1000.0;
6464
FillTexture(context.back_buffer().as_raw() as _, 0.0, 0.0, n, 1.0);
6565
unity_native_plugin_tester::window::LoopResult::Continue

unity-native-plugin-tester/src/d3d11.rs

Lines changed: 102 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1726
impl 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

118181
impl crate::interface::UnityInterfaceBase for TesterContextGraphicsD3D11 {
@@ -140,27 +203,59 @@ extern "system" fn get_device() -> *mut ID3D11Device {
140203
}
141204

142205
extern "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

146217
extern "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

150229
extern "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

156243
extern "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

162257
pub 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

Comments
 (0)