unity_native_plugin/
graphics.rs

1use crate::define_unity_interface;
2use crate::interface::UnityInterface;
3use unity_native_plugin_sys::*;
4
5pub type RenderBuffer = unity_native_plugin_sys::UnityRenderBuffer;
6pub type TextureID = unity_native_plugin_sys::UnityTextureID;
7pub type RenderingEvent = unity_native_plugin_sys::UnityRenderingEvent;
8pub type RenderingEventAndData = unity_native_plugin_sys::UnityRenderingEventAndData;
9
10#[repr(u32)]
11#[derive(Copy, Clone, PartialEq, Eq, Debug)]
12pub enum GfxRenderer {
13    D3D11 = UnityGfxRenderer_kUnityGfxRendererD3D11,
14    Null = UnityGfxRenderer_kUnityGfxRendererNull,
15    OpenGLES20 = 8, // OpenGL ES 2.0, removed
16    OpenGLES30 = UnityGfxRenderer_kUnityGfxRendererOpenGLES30,
17    PS4 = UnityGfxRenderer_kUnityGfxRendererPS4,
18    XboxOne = UnityGfxRenderer_kUnityGfxRendererXboxOne,
19    Metal = UnityGfxRenderer_kUnityGfxRendererMetal,
20    OpenGLCore = UnityGfxRenderer_kUnityGfxRendererOpenGLCore,
21    D3D12 = UnityGfxRenderer_kUnityGfxRendererD3D12,
22    Vulkan = UnityGfxRenderer_kUnityGfxRendererVulkan,
23    Nvn = UnityGfxRenderer_kUnityGfxRendererNvn,
24    XboxOneD3D12 = UnityGfxRenderer_kUnityGfxRendererXboxOneD3D12,
25    GameCoreXboxOne = UnityGfxRenderer_kUnityGfxRendererGameCoreXboxOne,
26    GameCoreXboxSeries = UnityGfxRenderer_kUnityGfxRendererGameCoreXboxSeries,
27    PS5 = UnityGfxRenderer_kUnityGfxRendererPS5,
28    PS5NGGC = UnityGfxRenderer_kUnityGfxRendererPS5NGGC,
29    ReservedCFE = UnityGfxRenderer_kUnityGfxRendererReservedCFE,
30}
31
32#[repr(u32)]
33#[derive(Copy, Clone, PartialEq, Eq, Debug)]
34pub enum GfxDeviceEventType {
35    Initialize = UnityGfxDeviceEventType_kUnityGfxDeviceEventInitialize,
36    Shutdown = UnityGfxDeviceEventType_kUnityGfxDeviceEventShutdown,
37    BeforeReset = UnityGfxDeviceEventType_kUnityGfxDeviceEventBeforeReset,
38    AfterReset = UnityGfxDeviceEventType_kUnityGfxDeviceEventAfterReset,
39}
40
41define_unity_interface!(
42    UnityGraphics,
43    IUnityGraphics,
44    0x7CBA0A9CA4DDB544_u64,
45    0x8C5AD4926EB17B11_u64
46);
47
48pub type GraphicsDeviceEventCallback = extern "system" fn(eventType: GfxDeviceEventType);
49
50impl UnityGraphics {
51    pub fn renderer(&self) -> GfxRenderer {
52        unsafe {
53            match self.interface().GetRenderer {
54                Some(intf) => std::mem::transmute(intf()),
55                None => GfxRenderer::Null,
56            }
57        }
58    }
59
60    pub fn register_device_event_callback(&self, callback: Option<GraphicsDeviceEventCallback>) {
61        unsafe {
62            if let Some(intf) = self.interface().RegisterDeviceEventCallback {
63                intf(std::mem::transmute(callback));
64            }
65        }
66    }
67
68    pub fn unregister_device_event_callback(&self, callback: Option<GraphicsDeviceEventCallback>) {
69        unsafe {
70            if let Some(intf) = self.interface().UnregisterDeviceEventCallback {
71                intf(std::mem::transmute(callback));
72            }
73        }
74    }
75}