From 90b811cd31f02565ea80664a79de7b78adc1c72e Mon Sep 17 00:00:00 2001 From: hecomi Date: Sat, 5 Nov 2016 00:09:04 +0900 Subject: [PATCH] add function to fetch left/right/top/bottom/rotation. --- .../Scripts/MultipleMonitorCreator.cs | 3 + .../Plugins/uDesktopDuplication.dll | Bin 30208 -> 34304 bytes Assets/uDesktopDuplication/Scripts/Lib.cs | 23 ++++++ Assets/uDesktopDuplication/Scripts/Monitor.cs | 25 ++++++ Assets/uDesktopDuplication/Scripts/Texture.cs | 1 + .../Shaders/uDD_Unlit.shader | 6 +- .../uDesktopDuplication/Monitor.cpp | 30 +++++++ .../uDesktopDuplication/Monitor.h | 5 ++ .../uDesktopDuplication/MonitorManager.cpp | 77 ++++++++++++++++++ .../uDesktopDuplication/MonitorManager.h | 7 ++ .../uDesktopDuplication/main.cpp | 42 ++++++++++ 11 files changed, 216 insertions(+), 3 deletions(-) diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs index d960bb0..184493e 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs @@ -9,6 +9,8 @@ public class MultipleMonitorCreator : MonoBehaviour void Start() { var monitors = uDesktopDuplication.Manager.monitors; + monitors.Sort((a, b) => a.left - b.left); + var n = monitors.Count; var totalWidth = 0f; @@ -24,6 +26,7 @@ public class MultipleMonitorCreator : MonoBehaviour totalWidth += width * scaleX; } + totalWidth += margin * (n - 1); var x = -totalWidth / 2; for (int i = 0 ; i < n; ++i) { diff --git a/Assets/uDesktopDuplication/Plugins/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/uDesktopDuplication.dll index 80e7005bd91937b25d5e0a4394a1c85a55302a21..dd700b5cbfa7f70c7c7c0b7d22a9a93db4e16954 100644 GIT binary patch literal 34304 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 RIa+(outputDesc_.Rotation); +} + + int Monitor::GetWidth() const { const auto rect = monitorInfo_.rcMonitor; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h index e3066ef..92168df 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h @@ -18,8 +18,13 @@ public: ID3D11Texture2D* GetUnityTexture() const; void GetName(char* buf, int len) const; bool IsPrimary() const; + int GetLeft() const; + int GetRight() const; + int GetTop() const; + int GetBottom() const; int GetWidth() const; int GetHeight() const; + int GetRotation() const; IDXGIOutputDuplication* GetDeskDupl(); const std::unique_ptr& GetCursor(); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp index 3208956..b898958 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "IUnityInterface.h" #include "IUnityGraphicsD3D11.h" @@ -129,6 +130,32 @@ int MonitorManager::GetMonitorCount() const return static_cast(monitors_.size()); } +int MonitorManager::GetTotalWidth() const +{ + std::vector lefts, rights; + for (const auto& monitor : monitors_) + { + lefts.push_back(monitor->GetLeft()); + rights.push_back(monitor->GetRight()); + } + const auto minLeft = *std::min_element(lefts.begin(), lefts.end()); + const auto maxRight = *std::max_element(rights.begin(), rights.end()); + return maxRight - minLeft; +} + +int MonitorManager::GetTotalHeight() const +{ + std::vector tops, bottoms; + for (const auto& monitor : monitors_) + { + tops.push_back(monitor->GetTop()); + bottoms.push_back(monitor->GetBottom()); + } + const auto minTop = *std::min_element(tops.begin(), tops.end()); + const auto maxBottom = *std::max_element(bottoms.begin(), bottoms.end()); + return maxBottom - minTop; +} + void MonitorManager::GetName(int id, char* buf, int len) const { @@ -149,6 +176,46 @@ bool MonitorManager::IsPrimary(int id) const } +int MonitorManager::GetLeft(int id) const +{ + if (auto monitor = GetMonitor(id)) + { + return monitor->GetLeft(); + } + return 0; +} + + +int MonitorManager::GetRight(int id) const +{ + if (auto monitor = GetMonitor(id)) + { + return monitor->GetRight(); + } + return 0; +} + + +int MonitorManager::GetTop(int id) const +{ + if (auto monitor = GetMonitor(id)) + { + return monitor->GetTop(); + } + return 0; +} + + +int MonitorManager::GetBottom(int id) const +{ + if (auto monitor = GetMonitor(id)) + { + return monitor->GetBottom(); + } + return 0; +} + + int MonitorManager::GetWidth(int id) const { if (auto monitor = GetMonitor(id)) @@ -169,6 +236,16 @@ int MonitorManager::GetHeight(int id) const } +int MonitorManager::GetRotation(int id) const +{ + if (auto monitor = GetMonitor(id)) + { + return monitor->GetRotation(); + } + return DXGI_MODE_ROTATION_UNSPECIFIED; +} + + bool MonitorManager::IsCursorVisible(int id) const { if (auto monitor = GetMonitor(id)) diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h index 2378dfa..f0769ce 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h @@ -36,10 +36,17 @@ public: // Getters from Unity public: int GetMonitorCount() const; + int GetTotalWidth() const; + int GetTotalHeight() const; void GetName(int id, char* buf, int len) const; bool IsPrimary(int id) const; + int GetLeft(int id) const; + int GetRight(int id) const; + int GetTop(int id) const; + int GetBottom(int id) const; int GetWidth(int id) const; int GetHeight(int id) const; + int GetRotation(int id) const; bool IsCursorVisible(int id) const; int GetCursorX(int id) const; int GetCursorY(int id) const; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index 76afd1b..0201dc3 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -106,6 +106,18 @@ extern "C" return g_manager->GetMonitorCount(); } + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetTotalWidth() + { + if (!g_manager) return 0; + return g_manager->GetTotalWidth(); + } + + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetTotalHeight() + { + if (!g_manager) return 0; + return g_manager->GetTotalHeight(); + } + UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API SetTimeout(int timeout) { if (!g_manager) return; @@ -124,6 +136,30 @@ extern "C" return g_manager->IsPrimary(id); } + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetLeft(int id) + { + if (!g_manager) return -1; + return g_manager->GetLeft(id); + } + + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetRight(int id) + { + if (!g_manager) return -1; + return g_manager->GetRight(id); + } + + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetTop(int id) + { + if (!g_manager) return -1; + return g_manager->GetTop(id); + } + + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetBottom(int id) + { + if (!g_manager) return -1; + return g_manager->GetBottom(id); + } + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetWidth(int id) { if (!g_manager) return -1; @@ -136,6 +172,12 @@ extern "C" return g_manager->GetHeight(id); } + UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API GetRotation(int id) + { + if (!g_manager) return -1; + return g_manager->GetRotation(id); + } + UNITY_INTERFACE_EXPORT bool UNITY_INTERFACE_API IsCursorVisible(int id) { if (!g_manager) return false;