unity_native_plugin/
graphics.rs1use 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, 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}