From 11dbb7be570859747c5bd5504fafdbafb3739762 Mon Sep 17 00:00:00 2001 From: hecomi Date: Thu, 5 Jan 2017 19:38:01 +0900 Subject: [PATCH] update cursor in each thread #10 --- .../Plugins/x86_64/uDesktopDuplication.dll | Bin 93184 -> 94208 bytes .../uDesktopDuplication/Cursor.cpp | 30 ++++++++++------ .../uDesktopDuplication/Cursor.h | 6 ++-- .../uDesktopDuplication/Duplicator.cpp | 32 ++++++++++++++++++ .../uDesktopDuplication/Duplicator.h | 4 +++ .../uDesktopDuplication/Monitor.cpp | 20 +---------- .../uDesktopDuplication/Monitor.h | 1 - 7 files changed, 59 insertions(+), 34 deletions(-) diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index 8f6aa9994ab209a79f02b223fa27e1ef4b92ec9b..985283db33d0f44a3c6ed9235aec3bd958436d16 100644 GIT binary patch delta 35696 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 E0Z^DXm;e9( delta 34807 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 diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp index c761296..7f44afe 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp @@ -1,9 +1,11 @@ #include #include + +#include "Cursor.h" #include "Debug.h" #include "MonitorManager.h" #include "Monitor.h" -#include "Cursor.h" +#include "Duplicator.h" using namespace Microsoft::WRL; @@ -19,8 +21,11 @@ Cursor::~Cursor() } -void Cursor::UpdateBuffer(Monitor* monitor, const DXGI_OUTDUPL_FRAME_INFO& frameInfo) +void Cursor::UpdateBuffer(Duplicator* duplicator) { + auto monitor = duplicator->GetMonitor(); + const auto& frameInfo = duplicator->GetFrame().info; + if (frameInfo.LastMouseUpdateTime.QuadPart == 0) { return; @@ -50,7 +55,7 @@ void Cursor::UpdateBuffer(Monitor* monitor, const DXGI_OUTDUPL_FRAME_INFO& frame // Get mouse pointer information UINT bufferSize; DXGI_OUTDUPL_POINTER_SHAPE_INFO shapeInfo; - const auto hr = monitor->GetDeskDupl()->GetFramePointerShape( + const auto hr = duplicator->GetDuplication()->GetFramePointerShape( buffer_.Size(), buffer_.Get(), &bufferSize, @@ -67,12 +72,15 @@ void Cursor::UpdateBuffer(Monitor* monitor, const DXGI_OUTDUPL_FRAME_INFO& frame } -void Cursor::Draw(Monitor* monitor) +void Cursor::Draw(Duplicator* duplicator) { + auto monitor = duplicator->GetMonitor(); + const auto& frame = duplicator->GetFrame(); + // Check desktop texure - if (monitor->GetUnityTexture() == nullptr) + if (frame.texture == nullptr) { - Debug::Error("Cursor::UpdateTexture() => Monitor::GetUnityTexture() is null."); + Debug::Error("Cursor::UpdateTexture() => texture is null."); return; } @@ -220,7 +228,7 @@ void Cursor::Draw(Monitor* monitor) desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; desc.MiscFlags = 0; - if (FAILED(GetDevice()->CreateTexture2D(&desc, nullptr, &texture))) + if (FAILED(duplicator->GetDevice()->CreateTexture2D(&desc, nullptr, &texture))) { Debug::Error("Cursor::UpdateTexture() => GetDevice()->CreateTexture2D() failed."); return; @@ -230,8 +238,8 @@ void Cursor::Draw(Monitor* monitor) // Copy desktop image to the texture { ComPtr context; - GetDevice()->GetImmediateContext(&context); - context->CopySubresourceRegion(texture.Get(), 0, 0, 0, 0, monitor->GetUnityTexture(), 0, &capturedImageArea); + duplicator->GetDevice()->GetImmediateContext(&context); + context->CopySubresourceRegion(texture.Get(), 0, 0, 0, 0, frame.texture.Get(), 0, &capturedImageArea); } // Get mapped surface to access pixels in CPU @@ -361,8 +369,8 @@ void Cursor::Draw(Monitor* monitor) { ComPtr context; - GetDevice()->GetImmediateContext(&context); - context->UpdateSubresource(monitor->GetUnityTexture(), 0, &capturedImageArea, bgraBuffer_.Get(), capturedImageWidth * 4, 0); + duplicator->GetDevice()->GetImmediateContext(&context); + context->UpdateSubresource(frame.texture.Get(), 0, &capturedImageArea, bgraBuffer_.Get(), capturedImageWidth * 4, 0); } if (FAILED(surface->Unmap())) diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h index efc7f8b..0f994fe 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h @@ -5,15 +5,15 @@ #include #include "Common.h" -class Monitor; +class Duplicator; class Cursor { public: explicit Cursor(); ~Cursor(); - void UpdateBuffer(Monitor* monitor, const DXGI_OUTDUPL_FRAME_INFO& frameInfo); - void Draw(Monitor* monitor); + void UpdateBuffer(Duplicator* duplicator); + void Draw(Duplicator* duplicator); void GetTexture(ID3D11Texture2D* texture); bool IsVisible() const; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp index 873de69..92c88cc 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp @@ -2,6 +2,8 @@ #include "Duplicator.h" #include "Monitor.h" +#include "MonitorManager.h" +#include "Cursor.h" #include "Device.h" #include "Debug.h" @@ -183,6 +185,18 @@ Duplicator::State Duplicator::GetState() const } +Monitor* Duplicator::GetMonitor() const +{ + return monitor_; +} + + +Microsoft::WRL::ComPtr Duplicator::GetDevice() +{ + return device_->GetDevice(); +} + + ComPtr Duplicator::GetDuplication() { return dupl_; @@ -294,10 +308,28 @@ bool Duplicator::Duplicate() UpdateMetadata(); + if (frameInfo.PointerPosition.Visible) + { + GetMonitorManager()->SetCursorMonitorId(monitor_->GetId()); + } + + if (GetMonitorManager()->GetCursorMonitorId() == monitor_->GetId()) + { + UpdateCursor(); + } + return true; } +void Duplicator::UpdateCursor() +{ + auto cursor = GetMonitorManager()->GetCursor(); + cursor->UpdateBuffer(this); + cursor->Draw(this); +} + + void Duplicator::UpdateMetadata() { metaData_.buffer.ExpandIfNeeded(lastFrame_.info.TotalMetadataBufferSize); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h index 9330909..a048377 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h @@ -55,6 +55,8 @@ public: bool IsRunning() const; bool IsError() const; State GetState() const; + Monitor* GetMonitor() const; + Microsoft::WRL::ComPtr GetDevice(); Microsoft::WRL::ComPtr GetDuplication(); const Frame& GetFrame() const; @@ -64,6 +66,8 @@ private: void CheckUnityAdapter(); bool Duplicate(); + + void UpdateCursor(); void UpdateMetadata(); void UpdateMoveRects(); void UpdateDirtyRects(); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index ee0d732..c6e99d8 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -100,33 +100,15 @@ void Monitor::Render() } } - if (frameInfo.PointerPosition.Visible) - { - GetMonitorManager()->SetCursorMonitorId(id_); - } - - if (GetMonitorManager()->GetCursorMonitorId() == id_) - { - UpdateCursor(frameInfo); - } - if (UseGetPixels()) { - CopyTextureFromGpuToCpu(texture.Get()); + CopyTextureFromGpuToCpu(unityTexture_); } hasBeenUpdated_ = true; } -void Monitor::UpdateCursor(const DXGI_OUTDUPL_FRAME_INFO& frameInfo) -{ - auto cursor_ = GetMonitorManager()->GetCursor(); - cursor_->UpdateBuffer(this, frameInfo); - cursor_->Draw(this); -} - - int Monitor::GetId() const { return id_; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h index 99a8cb2..cf8c2ac 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h @@ -53,7 +53,6 @@ public: bool GetPixels(BYTE* output, int x, int y, int width, int height); private: - void UpdateCursor(const DXGI_OUTDUPL_FRAME_INFO& frameInfo); void CopyTextureFromGpuToCpu(ID3D11Texture2D* texture); int id_ = -1;