From 7e3df8ec2e5e50b04660c1733cc323e131103d0e Mon Sep 17 00:00:00 2001 From: hecomi Date: Wed, 30 Nov 2016 02:40:16 +0900 Subject: [PATCH] add GetPixels() and GetPixel() APIs (wip). --- Assets/GetPixelsExample.cs | 36 ++++ Assets/GetPixelsExample.cs.meta | 12 ++ .../Examples/Scenes/GetPixels.unity | Bin 0 -> 19248 bytes .../Examples/Scenes/GetPixels.unity.meta | 8 + .../Examples/Scripts/GetPixels.cs | 15 ++ .../Examples/Scripts/GetPixels.cs.meta | 12 ++ .../{ => Models}/Resources.meta | 0 .../Resources/uDesktopDuplication.meta | 0 .../uDesktopDuplication/Textures.meta | 0 .../Textures/NotAvailable.png | Bin .../Textures/NotAvailable.png.meta | 0 .../Plugins/x86_64/uDesktopDuplication.dll | Bin 75776 -> 80896 bytes Assets/uDesktopDuplication/Scripts/Lib.cs | 43 ++++- Assets/uDesktopDuplication/Scripts/Manager.cs | 8 + Assets/uDesktopDuplication/Scripts/Monitor.cs | 20 +++ .../uDesktopDuplication/Cursor.cpp | 4 +- .../uDesktopDuplication/Monitor.cpp | 169 ++++++++++++++++++ .../uDesktopDuplication/Monitor.h | 6 + .../uDesktopDuplication/MonitorManager.cpp | 12 ++ .../uDesktopDuplication/MonitorManager.h | 3 + .../uDesktopDuplication/main.cpp | 31 ++++ 21 files changed, 376 insertions(+), 3 deletions(-) create mode 100644 Assets/GetPixelsExample.cs create mode 100644 Assets/GetPixelsExample.cs.meta create mode 100644 Assets/uDesktopDuplication/Examples/Scenes/GetPixels.unity create mode 100644 Assets/uDesktopDuplication/Examples/Scenes/GetPixels.unity.meta create mode 100644 Assets/uDesktopDuplication/Examples/Scripts/GetPixels.cs create mode 100644 Assets/uDesktopDuplication/Examples/Scripts/GetPixels.cs.meta rename Assets/uDesktopDuplication/{ => Models}/Resources.meta (100%) rename Assets/uDesktopDuplication/{ => Models}/Resources/uDesktopDuplication.meta (100%) rename Assets/uDesktopDuplication/{ => Models}/Resources/uDesktopDuplication/Textures.meta (100%) rename Assets/uDesktopDuplication/{ => Models}/Resources/uDesktopDuplication/Textures/NotAvailable.png (100%) rename Assets/uDesktopDuplication/{ => Models}/Resources/uDesktopDuplication/Textures/NotAvailable.png.meta (100%) diff --git a/Assets/GetPixelsExample.cs b/Assets/GetPixelsExample.cs new file mode 100644 index 0000000..9172ed8 --- /dev/null +++ b/Assets/GetPixelsExample.cs @@ -0,0 +1,36 @@ +using UnityEngine; + +public class GetPixelsExample : MonoBehaviour +{ + [SerializeField] uDesktopDuplication.Texture uddTexture; + + [SerializeField] int x = 100; + [SerializeField] int y = 100; + const int width = 64; + const int height = 32; + + public Texture2D texture; + Color32[] colors = new Color32[width * height]; + + void Start() + { + // must be called (performance will be slightly down). + uDesktopDuplication.Manager.useGetPixels = true; + + texture = new Texture2D(width, height, TextureFormat.ARGB32, false); + GetComponent().material.mainTexture = texture; + } + + void Update() + { + var monitor = uddTexture.monitor; + if (!monitor.hasBeenUpdated) return; + + if (monitor.GetPixels(colors, x, y, width, height)) { + texture.SetPixels32(colors); + texture.Apply(); + } + + Debug.Log(monitor.GetPixel(monitor.cursorX, monitor.cursorY)); + } +} diff --git a/Assets/GetPixelsExample.cs.meta b/Assets/GetPixelsExample.cs.meta new file mode 100644 index 0000000..40b5ee2 --- /dev/null +++ b/Assets/GetPixelsExample.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fd3f838ff57152e44a1810274a9df49b +timeCreated: 1480420430 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/uDesktopDuplication/Examples/Scenes/GetPixels.unity b/Assets/uDesktopDuplication/Examples/Scenes/GetPixels.unity new file mode 100644 index 0000000000000000000000000000000000000000..1855e9aae4d087663426420359f88d41c962b583 GIT binary patch literal 19248 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

4$z6ef-Ql2!XEd( z!`V?-7wE*S2QXH^ZQa+-{q6&>-Jlcaei_du@&L`f?Zgq-A<&6`g*^_pcrdZIoqOD$ zhJ6uq;;&#w;T{8S`3l-9+}1to+{=DbAI5j=XD8kcTMTzM@Ue%`zu@M6?WS*_U*P`G z5ODrCRoOa#PiglEko&Ru+$0)9Xoui$0rtVNJ&Xb8e;e%#^gN&omh^hy=V00P?ggIE zZsKpWI|j5rqIihsX}1Ho4_4qlqdS0)YC7?Rb`$4+N2Qeq{0;1z&>;rwdK7H{?puL< zu+)e6kJ|lH;Nr&=eF<gw< zE|BYC$?pMv50>}7JPG{BF|-B9^Z*-RPr}^?)H*iKQMozC9oFxDuz89_A=NjVKI#qJ78TJuhw`y za1QJT=5MtG)IE3k7*Z$ZP~9(tb~1@RJ44+e#QW!NvrUXe-^Q}ewpK@n5$2CNZd$dr zsCbpb2;fsV7V?tj{7v`_zQ>vxL^&KA@e5&* zD1S&)OIv;hY3rBEc!(Ln2RD4M?9zTv!u&~Ce9H1+2Yd&XjGK)}JkT0kCBM}n+cidq z(Td-c#s5vKyx2zH5xmI=uX42e)sJs(TGixjjToyOYvOV?u9-TOjcX?8v~f*5bBMli zjahE+OsmThO z?-v91f!u-o0mne$K=DB7fODXFz%@`m;2CHc2o3ZM^bYh592poII65#qaAII&;N$=` z8k0I5{np60PGWw=yA&@4g!+2=j`of9IltQb)#0y>ebtF{$NKXj>j+|s!O}r6ePCu( G0{;oFAri9y literal 75776 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 diff --git a/Assets/uDesktopDuplication/Scripts/Lib.cs b/Assets/uDesktopDuplication/Scripts/Lib.cs index f3dbfbe..b39e726 100644 --- a/Assets/uDesktopDuplication/Scripts/Lib.cs +++ b/Assets/uDesktopDuplication/Scripts/Lib.cs @@ -1,4 +1,5 @@ -using System; +using UnityEngine; +using System; using System.Text; using System.Runtime.InteropServices; @@ -78,6 +79,8 @@ public static class Lib [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void DebugLogDelegate(string str); + [DllImport("uDesktopDuplication")] + public static extern bool IsInitialized(); [DllImport("uDesktopDuplication")] public static extern void Initialize(); [DllImport("uDesktopDuplication")] @@ -164,6 +167,12 @@ public static class Lib public static extern int GetDirtyRectCount(int id); [DllImport("uDesktopDuplication", EntryPoint = "GetDirtyRects")] private static extern IntPtr GetDirtyRects_Internal(int id); + [DllImport("uDesktopDuplication", EntryPoint = "GetPixels")] + private static extern bool GetPixels_Internal(int id, System.IntPtr ptr, int x, int y, int width, int height); + [DllImport("uDesktopDuplication")] + public static extern bool HasBeenUpdated(int id); + [DllImport("uDesktopDuplication")] + public static extern bool UseGetPixels(bool use); public static string GetName(int id) { @@ -197,6 +206,38 @@ public static class Lib } return rects; } + + public static Color32[] GetPixels(int id, int x, int y, int width, int height) + { + var color = new Color32[width * height]; + GetPixels(id, color, x, y, width, height); + return color; + } + + public static bool GetPixels(int id, Color32[] colors, int x, int y, int width, int height) + { + if (!Mathf.IsPowerOfTwo(width) || !Mathf.IsPowerOfTwo(height)) { + Debug.LogErrorFormat("width and height must be power of two."); + return false; + } + if (colors.Length < width * height) { + Debug.LogErrorFormat("colors is small.", id, x, y, width, height); + return false; + } + var handle = GCHandle.Alloc(colors, GCHandleType.Pinned); + var ptr = handle.AddrOfPinnedObject(); + if (!GetPixels_Internal(id, ptr, x, y, width, height)) { + Debug.LogErrorFormat("GetPixels({0}, {1}, {2}, {3}, {4}) failed.", id, x, y, width, height); + return false; + } + handle.Free(); + return true; + } + + public static Color32 GetPixel(int id, int x, int y) + { + return GetPixels(id, x, y, 1, 1)[0]; + } } } \ No newline at end of file diff --git a/Assets/uDesktopDuplication/Scripts/Manager.cs b/Assets/uDesktopDuplication/Scripts/Manager.cs index d08dd10..5cff3b3 100644 --- a/Assets/uDesktopDuplication/Scripts/Manager.cs +++ b/Assets/uDesktopDuplication/Scripts/Manager.cs @@ -52,6 +52,14 @@ public class Manager : MonoBehaviour } } + static public bool useGetPixels + { + set + { + Lib.UseGetPixels(value); + } + } + [Tooltip("Debug mode is not applied while running.")] [SerializeField] DebugMode debugMode = DebugMode.File; diff --git a/Assets/uDesktopDuplication/Scripts/Monitor.cs b/Assets/uDesktopDuplication/Scripts/Monitor.cs index 72faa17..07f0ceb 100644 --- a/Assets/uDesktopDuplication/Scripts/Monitor.cs +++ b/Assets/uDesktopDuplication/Scripts/Monitor.cs @@ -232,6 +232,11 @@ public class Monitor get { return Lib.GetDirtyRects(id); } } + public bool hasBeenUpdated + { + get { return Lib.HasBeenUpdated(id); } + } + public bool shouldBeUpdated { get; @@ -317,6 +322,21 @@ public class Monitor { CreateTextureIfNeeded(); } + + public Color32[] GetPixels(int x, int y, int width, int height) + { + return Lib.GetPixels(id, x, y, width, height); + } + + public bool GetPixels(Color32[] colors, int x, int y, int width, int height) + { + return Lib.GetPixels(id, colors, x, y, width, height); + } + + public Color32 GetPixel(int x, int y) + { + return Lib.GetPixel(id, x, y); + } } } \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp index f035f3a..31ac461 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp @@ -176,8 +176,8 @@ void Cursor::Draw(Monitor* monitor) // Check if box is inner desktop area if (capturedImageLeft < 0 || capturedImageTop < 0 || - capturedImageRight > desktopImageWidth || - capturedImageBottom > desktopImageHeight) + capturedImageRight >= desktopImageWidth || + capturedImageBottom >= desktopImageHeight) { Debug::Error("Cursor::UpdateTexture() => box is out of area."); Debug::Error( diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index 8278cf2..5e25881 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -193,6 +193,22 @@ void Monitor::Render(UINT timeout) GetDevice()->GetImmediateContext(&context); context->CopyResource(unityTexture_, texture); } + + { + std::lock_guard lock(mutex_); + + ComPtr context; + if (!ddaTexture_) + { + if (FAILED(GetDevice()->CreateTexture2D(&dstDesc, nullptr, &ddaTexture_))) + { + Debug::Error("Monitor::Render() => GetDevice()->CreateTexture2D() failed."); + return; + } + } + GetDevice()->GetImmediateContext(&context); + context->CopyResource(ddaTexture_.Get(), texture); + } } UpdateMetadata(frameInfo); @@ -232,6 +248,8 @@ void Monitor::Render(UINT timeout) } return; } + + hasBeenUpdated_ = true; } @@ -456,4 +474,155 @@ int Monitor::GetDirtyRectCount() const RECT* Monitor::GetDirtyRects() const { return metaData_.As(moveRectSize_); +} + + +bool Monitor::GetPixels(UINT* ptr, int x, int y, int width, int height) +{ + if (!GetMonitorManager()->UseGetPixels()) + { + Debug::Error("Monitor::GetPixels() => UseGetPixels(true) must have been called when you want to use GetPixels()."); + return false; + } + + if (!ddaTexture_) + { + Debug::Error("Monitor::GetPixels() => texture is not set."); + return false; + } + + const auto monitorRot = static_cast(GetRotation()); + const auto monitorWidth = GetWidth(); + const auto monitorHeight = GetHeight(); + const auto isVertical = + monitorRot == DXGI_MODE_ROTATION_ROTATE90 || + monitorRot == DXGI_MODE_ROTATION_ROTATE270; + const auto desktopImageWidth = !isVertical ? monitorWidth : monitorHeight; + const auto desktopImageHeight = !isVertical ? monitorHeight : monitorWidth; + + int left, top, right, bottom; + + switch (monitorRot) + { + case DXGI_MODE_ROTATION_ROTATE90: + { + left = y; + top = monitorWidth - x - width; + right = y + width; + bottom = monitorWidth - x; + break; + } + case DXGI_MODE_ROTATION_ROTATE180: + { + left = monitorWidth - x - width; + top = monitorHeight - y - height; + right = monitorWidth - x; + bottom = monitorHeight - y; + break; + } + case DXGI_MODE_ROTATION_ROTATE270: + { + left = monitorHeight - y - height; + top = x; + right = monitorHeight - y; + bottom = x + width; + break; + } + case DXGI_MODE_ROTATION_IDENTITY: + case DXGI_MODE_ROTATION_UNSPECIFIED: + default: + { + left = x; + top = y; + right = x + width; + bottom = y + height; + break; + } + } + + if (left < 0 || + top < 0 || + right >= desktopImageWidth || + bottom >= desktopImageHeight) + { + Debug::Error("Monitor::GetPixels() => is out of area."); + Debug::Error( + " ", + "(", left, ", ", top, ")", + " ~ (", right, ", ", bottom, ") > ", + "(", desktopImageWidth, ", ", desktopImageHeight, ")"); + return false; + } + + D3D11_BOX box; + box.left = left; + box.top = top; + box.front = 0; + box.right = right; + box.bottom = bottom; + box.back = 1; + + // Create texture for capturing desktop image + ComPtr texture; + D3D11_TEXTURE2D_DESC desc; + desc.Width = width; + desc.Height = height; + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Usage = D3D11_USAGE_STAGING; + desc.BindFlags = 0; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + desc.MiscFlags = 0; + + if (FAILED(GetDevice()->CreateTexture2D(&desc, nullptr, &texture))) + { + Debug::Error("Monitor::GetPixels() => GetDevice()->CreateTexture2D() failed."); + return false; + } + + std::lock_guard lock(mutex_); + + ComPtr context; + GetDevice()->GetImmediateContext(&context); + context->CopySubresourceRegion(texture.Get(), 0, 0, 0, 0, ddaTexture_.Get(), 0, &box); + + ComPtr surface; + if (FAILED(texture.As(&surface))) + { + Debug::Error("Monitor::GetPixels() => texture.As() failed."); + return false; + } + + DXGI_MAPPED_RECT mappedSurface; + if (FAILED(surface->Map(&mappedSurface, DXGI_MAP_READ))) + { + Debug::Error("Monitor::GetPixels() => surface->Map() failed."); + return false; + } + + const auto colors = reinterpret_cast(mappedSurface.pBits); + std::memcpy(ptr, colors, width * height * sizeof(UINT)); + std::reverse(&ptr[0], &ptr[width * height - 1]); + for (int row = 0; row < height; ++row) + { + const auto start = width * row; + const auto end = width * (row + 1) - 1; + std::reverse(&ptr[start], &ptr[end]); + } + + if (FAILED(surface->Unmap())) + { + Debug::Error("Monitor::GetPixels() => surface->Unmap() failed."); + return false; + } + + return true; +} + +bool Monitor::HasBeenUpdated() const +{ + return hasBeenUpdated_; } \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h index 3c7c01e..18443c8 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "Common.h" enum class MonitorState @@ -51,6 +52,8 @@ public: DXGI_OUTDUPL_MOVE_RECT* GetMoveRects() const; int GetDirtyRectCount() const; RECT* GetDirtyRects() const; + bool GetPixels(UINT* ptr, int x, int y, int width, int height); + bool HasBeenUpdated() const; private: void UpdateCursor(const DXGI_OUTDUPL_FRAME_INFO& frameInfo); @@ -61,12 +64,15 @@ private: int id_ = -1; UINT dpiX_ = -1, dpiY_ = -1; int width_ = -1, height_ = -1; + bool hasBeenUpdated_ = false; State state_ = State::NotSet; IDXGIOutputDuplication* deskDupl_ = nullptr; ID3D11Texture2D* unityTexture_ = nullptr; + Microsoft::WRL::ComPtr ddaTexture_; DXGI_OUTPUT_DESC outputDesc_; MONITORINFOEX monitorInfo_; Buffer metaData_; UINT moveRectSize_ = 0; UINT dirtyRectSize_ = 0;; + mutable std::mutex mutex_; }; \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp index f7a12f8..475d8a2 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp @@ -140,6 +140,18 @@ int MonitorManager::GetTimeout() const } +void MonitorManager::UseGetPixels(bool use) +{ + useGetPixels_ = use; +} + + +bool MonitorManager::UseGetPixels() const +{ + return useGetPixels_; +} + + int MonitorManager::GetMonitorCount() const { return static_cast(monitors_.size()); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h index 968f2d5..e4f3b62 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.h @@ -32,6 +32,8 @@ public: void Update(); void SetTimeout(int timeout); int GetTimeout() const; + void UseGetPixels(bool use); + bool UseGetPixels() const; // Getters from Unity public: @@ -41,6 +43,7 @@ public: private: int timeout_ = 10; + bool useGetPixels_ = false; std::vector> monitors_; std::shared_ptr cursor_ = std::make_shared(); int cursorMonitorId_ = -1; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index 23205b4..f35916e 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -25,6 +25,11 @@ std::queue g_messages; extern "C" { + UNITY_INTERFACE_EXPORT bool UNITY_INTERFACE_API IsInitialized() + { + return g_unity && g_manager; + } + UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API Initialize() { if (g_unity && !g_manager) @@ -387,4 +392,30 @@ extern "C" } return nullptr; } + + UNITY_INTERFACE_EXPORT bool UNITY_INTERFACE_API GetPixels(int id, UINT* ptr, int x, int y, int width, int height) + { + if (!g_manager) return nullptr; + if (auto monitor = g_manager->GetMonitor(id)) + { + return monitor->GetPixels(ptr, x, y, width, height); + } + return false; + } + + UNITY_INTERFACE_EXPORT bool UNITY_INTERFACE_API HasBeenUpdated(int id) + { + if (!g_manager) return nullptr; + if (auto monitor = g_manager->GetMonitor(id)) + { + return monitor->HasBeenUpdated(); + } + return false; + } + + UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API UseGetPixels(bool use) + { + if (!g_manager) return; + g_manager->UseGetPixels(use); + } } \ No newline at end of file