diff --git a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll index d6df73e..1b82753 100644 Binary files a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll and b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll differ diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index b719289..3a32b49 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/Common.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp index 5a2b694..e2bf6f8 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp @@ -37,7 +37,7 @@ const std::unique_ptr& GetMonitorManager() LUID GetUnityAdapterLuid() { - const auto device = GetUnity()->Get()->GetDevice(); + const auto device = GetDevice(); Microsoft::WRL::ComPtr dxgiDevice; if (FAILED(device->QueryInterface(IID_PPV_ARGS(&dxgiDevice)))){ diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index 935c570..7101807 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -21,7 +21,6 @@ Monitor::Monitor(int id) Monitor::~Monitor() { - duplicator_->Stop(); } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h index d6637d2..bb6754f 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h @@ -9,6 +9,7 @@ #include "Common.h" +class MonitorManager; enum class DuplicatorState; @@ -56,11 +57,10 @@ public: private: void CopyTextureFromGpuToCpu(ID3D11Texture2D* texture); - int id_ = -1; - + MonitorManager* manager_ = nullptr; + const int id_; UINT dpiX_ = -1, dpiY_ = -1; int width_ = -1, height_ = -1; - bool hasBeenUpdated_ = false; bool useGetPixels_ = false; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp index 20643c9..9a3b191 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp @@ -18,22 +18,18 @@ using namespace Microsoft::WRL; -MonitorManager::MonitorManager(LUID unityAdapterLuid) - : unityAdapterLuid_(unityAdapterLuid) +MonitorManager::MonitorManager() { } MonitorManager::~MonitorManager() { - Finalize(); } void MonitorManager::Initialize() { - Finalize(); - // Get factory ComPtr factory; if (FAILED(CreateDXGIFactory1(IID_PPV_ARGS(&factory)))) @@ -52,7 +48,6 @@ void MonitorManager::Initialize() for (int j = 0; (adapter->EnumOutputs(j, &output) != DXGI_ERROR_NOT_FOUND); ++j) { auto monitor = std::make_shared(id++); - const auto unityAdapterLuid = GetUnityAdapterLuid(); monitor->Initialize(adapter, output); monitor->StartCapture(); monitors_.push_back(monitor); @@ -92,6 +87,7 @@ void MonitorManager::RequireReinitilization() void MonitorManager::Reinitialize() { Debug::Log("MonitorManager::Reinitialize()"); + Finalize(); Initialize(); SendMessageToUnity(Message::Reinitialized); } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h index 49212a7..3905ba7 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h @@ -13,7 +13,7 @@ class Cursor; class MonitorManager { public: - explicit MonitorManager(LUID unityAdapterLuid_); + MonitorManager(); ~MonitorManager(); void Initialize(); void Finalize(); @@ -34,7 +34,6 @@ public: int GetTotalHeight() const; private: - LUID unityAdapterLuid_; UINT frameRate_ = 60; bool enableTextureCopyFromGpuToCpu_ = false; std::vector> monitors_; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index b2ac14c..cb00f8b 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -23,7 +23,6 @@ IUnityInterfaces* g_unity = nullptr; std::unique_ptr g_manager; std::queue g_messages; -ID3D11DeviceContext* g_deviceContextForMainThread = nullptr; extern "C" @@ -35,40 +34,23 @@ extern "C" UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API Initialize() { - if (g_unity && !g_manager) + if (!g_unity) return; + + if (!g_manager) { Debug::Initialize(); - - auto device = g_unity->Get()->GetDevice(); - - Microsoft::WRL::ComPtr dxgiDevice; - if (FAILED(device->QueryInterface(IID_PPV_ARGS(&dxgiDevice)))) - { - Debug::Error("Initialize() => device->QueryInterface() failed."); - return; - } - - Microsoft::WRL::ComPtr dxgiAdapter; - if (FAILED(dxgiDevice->GetAdapter(&dxgiAdapter))) - { - Debug::Error("Initialize() => dxgiDevice->GetAdapter() failed."); - return; - } - - DXGI_ADAPTER_DESC desc; - dxgiAdapter->GetDesc(&desc); - - g_manager = std::make_unique(desc.AdapterLuid); + g_manager = std::make_unique(); g_manager->Initialize(); } } UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API Finalize() { - if (!g_manager) return; - - g_manager->Finalize(); - g_manager.reset(); + if (g_manager) + { + g_manager->Finalize(); + g_manager.reset(); + } std::queue empty; g_messages.swap(empty);