From a10d5aa5c11ab622926bf895e41fa3296caeb4a4 Mon Sep 17 00:00:00 2001 From: hecomi Date: Sat, 19 Nov 2016 15:37:35 +0900 Subject: [PATCH] add buffer class. --- .../Plugins/x86_64/uDesktopDuplication.dll | Bin 72192 -> 72192 bytes .../uDesktopDuplication/Common.cpp | 2 +- .../uDesktopDuplication/Common.h | 67 ++++++++++++++---- .../uDesktopDuplication/Cursor.cpp | 34 +++------ .../uDesktopDuplication/Cursor.h | 7 +- .../uDesktopDuplication/Monitor.cpp | 1 + 6 files changed, 71 insertions(+), 40 deletions(-) diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index 9f4420d355c9a5a681235850d5f283be68ae3264..ceee205749124852fcf2bc7364609ca20f583c94 100644 GIT binary patch delta 20081 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 nvBoz6?+P1a*-&;(=bm4yhP)lB* delta 19752 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�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 B60-mR diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp index 2c0c7e9..3c59f5d 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp @@ -36,4 +36,4 @@ const std::unique_ptr& GetMonitorManager() void SendMessageToUnity(Message message) { g_messages.push(message); -} \ No newline at end of file +} diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h index fb8c3a5..8f78917 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h @@ -17,17 +17,6 @@ class MonitorManager; const std::unique_ptr& GetMonitorManager(); -template -auto MakeUniqueWithReleaser(T* ptr) -{ - const auto deleter = [](T* ptr) - { - if (ptr != nullptr) ptr->Release(); - }; - return std::unique_ptr(ptr, deleter); -} - - // Message is pooled and fetch from Unity. enum class Message { @@ -36,4 +25,58 @@ enum class Message TextureSizeChanged = 1, }; -void SendMessageToUnity(Message message); \ No newline at end of file +void SendMessageToUnity(Message message); + + +// Buffer +template +class Buffer +{ +public: + Buffer() {} + ~Buffer() {} + + void ExpandIfNeeded(UINT size) + { + if (size > size_) + { + size_ = size; + value_ = std::make_unique(size); + } + } + + void Reset() + { + value_.reset(); + size_ = 0; + } + + UINT Size() const + { + return size_; + } + + T* Get() const + { + return value_.get(); + } + + operator bool() const + { + return value_ != nullptr; + } + + T operator [](UINT index) const + { + if (index >= size_) + { + Debug::Error("Array index out of range: ", index, size_); + return T(0); + } + return value_[index]; + } + +private: + std::unique_ptr value_; + UINT size_ = 0; +}; \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp index e08b3ac..21ce303 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp @@ -1,6 +1,5 @@ #include #include -#include "Common.h" #include "Debug.h" #include "MonitorManager.h" #include "Monitor.h" @@ -47,13 +46,7 @@ void Cursor::UpdateBuffer(const DXGI_OUTDUPL_FRAME_INFO& frameInfo) return; } - // Increase the buffer size if needed - if (frameInfo.PointerShapeBufferSize > apiBufferSize_) - { - apiBufferSize_ = frameInfo.PointerShapeBufferSize; - apiBuffer_ = std::make_unique(apiBufferSize_); - } - + apiBuffer_.ExpandIfNeeded(frameInfo.PointerShapeBufferSize); if (!apiBuffer_) { return; @@ -63,16 +56,15 @@ void Cursor::UpdateBuffer(const DXGI_OUTDUPL_FRAME_INFO& frameInfo) UINT bufferSize; DXGI_OUTDUPL_POINTER_SHAPE_INFO shapeInfo; const auto hr = monitor_->GetDeskDupl()->GetFramePointerShape( - apiBufferSize_, - apiBuffer_.get(), + apiBuffer_.Size(), + apiBuffer_.Get(), &bufferSize, &shapeInfo); if (FAILED(hr)) { Debug::Error("Cursor::UpdateBuffer() => GetFramePointerShape() failed."); - apiBuffer_.reset(); - apiBufferSize_ = 0; + apiBuffer_.Reset(); return; } @@ -100,11 +92,7 @@ void Cursor::UpdateTexture() // Convert the buffer given by API into BGRA32 const UINT bgraBufferSize = cursorImageWidth * cursorImageHeight * 4; - if (bgraBufferSize > bgra32BufferSize_) - { - bgra32BufferSize_ = bgraBufferSize; - bgra32Buffer_ = std::make_unique(bgra32BufferSize_); - } + bgra32Buffer_.ExpandIfNeeded(bgraBufferSize); // Check buffers if (!bgra32Buffer_ || !apiBuffer_) @@ -281,7 +269,7 @@ void Cursor::UpdateTexture() }; // Access RGBA values at the same time - auto output32 = reinterpret_cast(bgra32Buffer_.get()); + auto output32 = reinterpret_cast(bgra32Buffer_.Get()); if (isMono) { @@ -300,7 +288,7 @@ void Cursor::UpdateTexture() } else // DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR { - const auto buffer32 = reinterpret_cast(apiBuffer_.get()); + const auto buffer32 = reinterpret_cast(apiBuffer_.Get()); for (int row = rowMin, y = 0; row < rowMax; ++row, ++y) { @@ -329,8 +317,8 @@ void Cursor::UpdateTexture() } else // DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR { - auto output32 = reinterpret_cast(bgra32Buffer_.get()); - const auto buffer32 = reinterpret_cast(apiBuffer_.get()); + auto output32 = reinterpret_cast(bgra32Buffer_.Get()); + const auto buffer32 = reinterpret_cast(apiBuffer_.Get()); for (int i = 0; i < cursorImageWidth * cursorImageHeight; ++i) { output32[i] = buffer32[i]; @@ -341,7 +329,7 @@ void Cursor::UpdateTexture() void Cursor::GetTexture(ID3D11Texture2D* texture) { - if (bgra32Buffer_ == nullptr) + if (!bgra32Buffer_) { Debug::Error("Cursor::GetTexture() => bgra32Buffer is null."); return; @@ -368,7 +356,7 @@ void Cursor::GetTexture(ID3D11Texture2D* texture) ComPtr context; GetDevice()->GetImmediateContext(&context); - context->UpdateSubresource(texture, 0, nullptr, bgra32Buffer_.get(), GetWidth() * 4, 0); + context->UpdateSubresource(texture, 0, nullptr, bgra32Buffer_.Get(), GetWidth() * 4, 0); } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h index 40dee5b..1c7b594 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.h @@ -3,6 +3,7 @@ #include #include #include +#include "Common.h" class Monitor; @@ -30,10 +31,8 @@ private: bool isVisible_ = false; int x_ = -1; int y_ = -1; - std::unique_ptr apiBuffer_ = nullptr; - UINT apiBufferSize_ = 0; - std::unique_ptr bgra32Buffer_ = nullptr; - UINT bgra32BufferSize_ = 0; + Buffer apiBuffer_; + Buffer bgra32Buffer_; DXGI_OUTDUPL_POINTER_SHAPE_INFO shapeInfo_; LARGE_INTEGER timestamp_; }; \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index 3293215..496609b 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -156,6 +156,7 @@ void Monitor::Render(UINT timeout) return; } + // Get texture if (unityTexture_) { ID3D11Texture2D* texture;