From 9de5064fbe06841b43a2c911d689d88962d002b9 Mon Sep 17 00:00:00 2001 From: hecomi Date: Sun, 6 Nov 2016 00:39:07 +0900 Subject: [PATCH] do reinitialization from unity. --- .../Plugins/uDesktopDuplication.dll | Bin 34304 -> 34304 bytes Assets/uDesktopDuplication/Scripts/Lib.cs | 16 +++++++- Assets/uDesktopDuplication/Scripts/Manager.cs | 36 ++++++++++++++++-- Assets/uDesktopDuplication/Scripts/Monitor.cs | 7 +++- Assets/uDesktopDuplication/Scripts/Texture.cs | 1 - .../uDesktopDuplication/Monitor.cpp | 23 ++++++++--- .../uDesktopDuplication/Monitor.h | 18 ++++++++- .../uDesktopDuplication/MonitorManager.cpp | 24 +++--------- .../uDesktopDuplication/MonitorManager.h | 7 +--- .../uDesktopDuplication/main.cpp | 19 ++++++--- 10 files changed, 109 insertions(+), 42 deletions(-) diff --git a/Assets/uDesktopDuplication/Plugins/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/uDesktopDuplication.dll index d48defc1bb221d87755f9c08779379a6ff358803..4bbc5076f6e7783f95bd0c6133e92966d3de30a1 100644 GIT binary patch delta 13574 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 oB%Q7Vu10xgn}&3w?kP;X0;7ZVChM%Qad!BDT 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 retryReinitializationDuration) { + Lib.Reinitialize(); + shouldReinitialize = false; + } + reinitializationTimer += Time.deltaTime; + } + } + + void UpdateMessage() + { var message = Lib.PopMessage(); while (message != Message.None) { switch (message) { diff --git a/Assets/uDesktopDuplication/Scripts/Monitor.cs b/Assets/uDesktopDuplication/Scripts/Monitor.cs index 3f6466e..b2d2f06 100644 --- a/Assets/uDesktopDuplication/Scripts/Monitor.cs +++ b/Assets/uDesktopDuplication/Scripts/Monitor.cs @@ -21,9 +21,14 @@ public class Monitor get { return id < Manager.monitorCount; } } + public MonitorState state + { + get { return Lib.GetState(id); } + } + public bool available { - get { return Lib.IsAvailable(id); } + get { return state == MonitorState.Available; } } public string name diff --git a/Assets/uDesktopDuplication/Scripts/Texture.cs b/Assets/uDesktopDuplication/Scripts/Texture.cs index ef45cde..168b4bd 100644 --- a/Assets/uDesktopDuplication/Scripts/Texture.cs +++ b/Assets/uDesktopDuplication/Scripts/Texture.cs @@ -50,7 +50,6 @@ public class Texture : MonoBehaviour void Update() { - Debug.Log(monitor.available); monitor.shouldBeUpdated = true; UpdateMaterial(); } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index cde2cef..38c6c5a 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -11,6 +11,7 @@ Monitor::Monitor(int id) { } + HRESULT Monitor::Initialize(IDXGIOutput* output) { output->GetDesc(&outputDesc_); @@ -24,23 +25,27 @@ HRESULT Monitor::Initialize(IDXGIOutput* output) switch (hr) { case S_OK: - available_ = true; + state_ = State::Available; break; case E_INVALIDARG: + state_ = State::InvalidArg; break; case E_ACCESSDENIED: // For example, when the user presses Ctrl + Alt + Delete and the screen // switches to admin screen, this error occurs. - // GetMonitorManager()->RequireReinitilization(); + state_ = State::AccessDenied; break; case DXGI_ERROR_UNSUPPORTED: // If the display adapter on the computer is running under the Microsoft Hybrid system, // this error occurs. + state_ = State::Unsupported; break; case DXGI_ERROR_NOT_CURRENTLY_AVAILABLE: // When other application use Desktop Duplication API, this error occurs. + state_ = State::CurrentlyNotAvailable; break; case DXGI_ERROR_SESSION_DISCONNECTED: + state_ = State::SessionDisconnected; break; } @@ -61,7 +66,7 @@ HRESULT Monitor::Render(UINT timeout) { if (deskDupl_ == nullptr) { - return 0; + return S_OK; } if (unityTexture_ == nullptr) return 0; @@ -72,7 +77,13 @@ HRESULT Monitor::Render(UINT timeout) const auto hr = deskDupl_->AcquireNextFrame(timeout, &frameInfo, &resource); if (FAILED(hr)) { - return hr; + // If any monitor setting has changed (e.g. monitor size has changed), + // it is necessary to re-initialize monitors. + if (hr == DXGI_ERROR_ACCESS_LOST) + { + state_ = State::AccessLost; + } + return hr; } ID3D11Texture2D* texture; @@ -98,9 +109,9 @@ int Monitor::GetId() const } -bool Monitor::IsAvailable() const +MonitorState Monitor::GetState() const { - return available_; + return state_; } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h index 1cee5a6..a7f35c6 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h @@ -4,9 +4,23 @@ class Cursor; +enum class MonitorState +{ + NotSet = -1, + Available = 0, + InvalidArg = 1, + AccessDenied = 2, + Unsupported = 3, + CurrentlyNotAvailable = 4, + SessionDisconnected = 5, + AccessLost = 6, +}; + class Monitor { public: + using State = MonitorState; + explicit Monitor(int id); ~Monitor(); HRESULT Initialize(IDXGIOutput* output); @@ -15,7 +29,7 @@ public: public: int GetId() const; - bool IsAvailable() const; + State GetState() const; void SetUnityTexture(ID3D11Texture2D* texture); ID3D11Texture2D* GetUnityTexture() const; void GetName(char* buf, int len) const; @@ -32,7 +46,7 @@ public: private: int id_ = -1; - bool available_ = false; + State state_ = State::NotSet; std::unique_ptr cursor_; IDXGIOutputDuplication* deskDupl_ = nullptr; ID3D11Texture2D* unityTexture_ = nullptr; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp index 940edb5..a925126 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp @@ -59,6 +59,12 @@ void MonitorManager::Finalize() } +void MonitorManager::RequireReinitilization() +{ + isReinitializationRequired_ = true; +} + + void MonitorManager::Reinitialize() { Initialize(); @@ -86,24 +92,6 @@ void MonitorManager::Update() } -void MonitorManager::OnRender(int id) -{ - if (auto monitor = GetMonitor(id)) - { - if (!monitor->IsAvailable()) return; - - const auto hr = monitor->Render(timeout_); - - // If any monitor setting has changed (e.g. monitor size has changed), - // it is necessary to re-initialize monitors. - if (hr == DXGI_ERROR_ACCESS_LOST) - { - isReinitializationRequired_ = true; - } - } -} - - void MonitorManager::SetTimeout(int timeout) { timeout_ = timeout; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h index c4d5d6e..959b621 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h @@ -13,9 +13,8 @@ class MonitorManager public: explicit MonitorManager(); ~MonitorManager(); - - void RequireReinitilization() { isReinitializationRequired_ = true; } - + void Reinitialize(); + void RequireReinitilization(); void SetCursorMonitorId(int id) { cursorMonitorId_ = id; } int GetCursorMonitorId() const { return cursorMonitorId_; } std::shared_ptr GetMonitor(int id) const; @@ -23,11 +22,9 @@ public: private: void Initialize(); void Finalize(); - void Reinitialize(); // Setters from Unity public: - void OnRender(int id); void Update(); void SetTimeout(int timeout); int GetTimeout() const; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index 0719706..4c63e59 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -79,7 +79,10 @@ extern "C" void UNITY_INTERFACE_API OnRenderEvent(int id) { if (!g_manager) return; - g_manager->OnRender(id); + if (auto monitor = g_manager->GetMonitor(id)) + { + monitor->Render(g_manager->GetTimeout()); + } } UNITY_INTERFACE_EXPORT UnityRenderingEvent UNITY_INTERFACE_API GetRenderEventFunc() @@ -87,6 +90,12 @@ extern "C" return OnRenderEvent; } + UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API Reinitialize() + { + if (!g_manager) return; + return g_manager->Reinitialize(); + } + UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API Update() { if (!g_manager) return; @@ -126,14 +135,14 @@ extern "C" g_manager->SetTimeout(timeout); } - UNITY_INTERFACE_EXPORT bool UNITY_INTERFACE_API IsAvailable(int id) + UNITY_INTERFACE_EXPORT MonitorState UNITY_INTERFACE_API GetState(int id) { - if (!g_manager) return false; + if (!g_manager) return MonitorState::NotSet; if (auto monitor = g_manager->GetMonitor(id)) { - return monitor->IsAvailable(); + return monitor->GetState(); } - return false; + return MonitorState::NotSet; } UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API GetName(int id, char* buf, int len)