diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index 00cb451..07eb46a 100644 Binary files a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll and b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll differ diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index 7d391df..2800d8f 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -36,25 +36,47 @@ extern "C" UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API FinalizeUDD() { - if (g_manager) - { - g_manager.reset(); + if (!g_manager) return; - std::queue empty; - g_messages.swap(empty); + g_manager.reset(); - Debug::Finalize(); - } + std::queue empty; + g_messages.swap(empty); + + Debug::Finalize(); } + void UNITY_INTERFACE_API OnGraphicsDeviceEvent(UnityGfxDeviceEventType event) + { + switch (event) + { + case kUnityGfxDeviceEventInitialize: + { + InitializeUDD(); + break; + } + case kUnityGfxDeviceEventShutdown: + { + FinalizeUDD(); + break; + } + } + } + UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces) { g_unity = unityInterfaces; InitializeUDD(); + + auto unityGraphics = g_unity->Get(); + unityGraphics->RegisterDeviceEventCallback(OnGraphicsDeviceEvent); } UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API UnityPluginUnload() { + auto unityGraphics = g_unity->Get(); + unityGraphics->UnregisterDeviceEventCallback(OnGraphicsDeviceEvent); + FinalizeUDD(); g_unity = nullptr; }