From 63d8f6936de0cf434821ee9d98880d7e91763a55 Mon Sep 17 00:00:00 2001 From: hecomi Date: Sat, 12 Nov 2016 02:44:20 +0900 Subject: [PATCH] use ComPtr for resources instead of standard smart pointers. --- .../Scripts/MultipleMonitorCreator.cs | 2 -- .../Plugins/x86_64/uDesktopDuplication.dll | Bin 56832 -> 55296 bytes .../uDesktopDuplication/Common.h | 12 --------- .../uDesktopDuplication/Cursor.cpp | 23 +++++++++--------- .../uDesktopDuplication/Monitor.cpp | 23 ++++++++---------- .../uDesktopDuplication/Monitor.h | 5 ++-- .../uDesktopDuplication/MonitorManager.cpp | 16 ++++++------ 7 files changed, 33 insertions(+), 48 deletions(-) diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs index 72f4438..9a3bba5 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs @@ -69,8 +69,6 @@ public class MultipleMonitorCreator : MonoBehaviour { ResetRemoveTimer(); - Debug.Log(uDesktopDuplication.Manager.monitorCount); - // Create monitors for (int i = 0; i < uDesktopDuplication.Manager.monitorCount; ++i) { // Create monitor obeject diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index bae16316453a843c9cfdb0ae61fb7118d7e9ef16..4075b3515f6c31252ffb45816dca03f8eee52a28 100644 GIT binary patch literal 55296 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 literal 56832 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 -auto MakeUniqueWithReleaser(T* ptr) -{ - const auto deleter = [](T* ptr) - { - if (ptr != nullptr) ptr->Release(); - }; - return std::unique_ptr(ptr, deleter); -} - - // Manager getter class MonitorManager; const std::unique_ptr& GetMonitorManager(); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp index 6c60b02..e02520c 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp @@ -1,10 +1,13 @@ #include +#include #include "Common.h" #include "Debug.h" #include "MonitorManager.h" #include "Monitor.h" #include "Cursor.h" +using namespace Microsoft::WRL; + Cursor::Cursor(Monitor* monitor) : monitor_(monitor) @@ -149,9 +152,8 @@ void Cursor::UpdateTexture() desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; desc.MiscFlags = 0; - ID3D11Texture2D* texture = nullptr; + ComPtr texture; hr = GetDevice()->CreateTexture2D(&desc, nullptr, &texture); - const auto textureReleaser = MakeUniqueWithReleaser(texture); if (FAILED(hr)) { Debug::Error("Cursor::UpdateTexture() => GetDevice()->CreateTexture2D() failed."); @@ -172,14 +174,14 @@ void Cursor::UpdateTexture() return; } - ID3D11DeviceContext* context; - GetDevice()->GetImmediateContext(&context); - context->CopySubresourceRegion(texture, 0, 0, 0, 0, monitor_->GetUnityTexture(), 0, &box); - context->Release(); + { + ComPtr context; + GetDevice()->GetImmediateContext(&context); + context->CopySubresourceRegion(texture.Get(), 0, 0, 0, 0, monitor_->GetUnityTexture(), 0, &box); + } - IDXGISurface* surface = nullptr; - hr = texture->QueryInterface(__uuidof(IDXGISurface), (void**)&surface); - const auto surfaceReleaser = MakeUniqueWithReleaser(surface); + ComPtr surface; + hr = texture.As(&surface); if (FAILED(hr)) { Debug::Error("Cursor::UpdateTexture() => texture->QueryInterface() failed."); @@ -286,10 +288,9 @@ void Cursor::GetTexture(ID3D11Texture2D* texture) return; } - ID3D11DeviceContext* context; + ComPtr context; GetDevice()->GetImmediateContext(&context); context->UpdateSubresource(texture, 0, nullptr, bgra32Buffer_.get(), GetWidth() * 4, 0); - context->Release(); } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index 0875412..12577b1 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -6,6 +6,8 @@ #include "MonitorManager.h" #include "Monitor.h" +using namespace Microsoft::WRL; + Monitor::Monitor(int id) : id_(id) @@ -28,17 +30,14 @@ void Monitor::Initialize(IDXGIOutput* output) GetDpiForMonitor(outputDesc_.Monitor, MDT_RAW_DPI, &dpiX_, &dpiY_); auto output1 = reinterpret_cast(output); - IDXGIOutputDuplication* deskDupl; - const auto hr = output1->DuplicateOutput(GetDevice(), &deskDupl); + const auto hr = output1->DuplicateOutput(GetDevice(), &deskDupl_); // TODO: error check switch (hr) { case S_OK: state_ = State::Available; - deskDupl_ = std::shared_ptr( - deskDupl, - [](IDXGIOutputDuplication* ptr) { if (ptr != nullptr) ptr->Release(); }); + Debug::Log("Monitor::Initialize() => OK."); break; case E_INVALIDARG: state_ = State::InvalidArg; @@ -73,12 +72,11 @@ void Monitor::Render(UINT timeout) { if (!deskDupl_) return; - IDXGIResource* resource = nullptr; + ComPtr resource; DXGI_OUTDUPL_FRAME_INFO frameInfo; HRESULT hr; hr = deskDupl_->AcquireNextFrame(timeout, &frameInfo, &resource); - const auto resourceReleaser = MakeUniqueWithReleaser(resource); if (FAILED(hr)) { switch (hr) @@ -107,13 +105,12 @@ void Monitor::Render(UINT timeout) if (unityTexture_) { - ID3D11Texture2D* texture; - resource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast(&texture)); + ComPtr texture; + resource.As(&texture); - ID3D11DeviceContext* context; + ComPtr context; GetDevice()->GetImmediateContext(&context); - context->CopyResource(unityTexture_, texture); - context->Release(); + context->CopyResource(unityTexture_, texture.Get()); } cursor_->UpdateBuffer(frameInfo); @@ -151,7 +148,7 @@ ID3D11Texture2D* Monitor::GetUnityTexture() const } -const std::shared_ptr& Monitor::GetDeskDupl() +const ComPtr& Monitor::GetDeskDupl() { return deskDupl_; } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h index 39a67d0..dff70ff 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.h @@ -2,6 +2,7 @@ #include #include +#include #include class Cursor; @@ -45,7 +46,7 @@ public: int GetRotation() const; int GetDpiX() const; int GetDpiY() const; - const std::shared_ptr& GetDeskDupl(); + const Microsoft::WRL::ComPtr& GetDeskDupl(); const std::unique_ptr& GetCursor(); private: @@ -53,7 +54,7 @@ private: UINT dpiX_ = -1, dpiY_ = -1; State state_ = State::NotSet; std::unique_ptr cursor_; - std::shared_ptr deskDupl_; + Microsoft::WRL::ComPtr deskDupl_; ID3D11Texture2D* unityTexture_ = nullptr; DXGI_OUTPUT_DESC outputDesc_; MONITORINFOEX monitorInfo_; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp index 0877fbd..960205c 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -12,6 +13,8 @@ #include "Cursor.h" #include "MonitorManager.h" +using namespace Microsoft::WRL; + MonitorManager::MonitorManager() { @@ -30,23 +33,20 @@ void MonitorManager::Initialize() Finalize(); // Get factory - IDXGIFactory1* factory; - CreateDXGIFactory1(__uuidof(IDXGIFactory1), reinterpret_cast(&factory)); - const auto factoryReleaser = MakeUniqueWithReleaser(factory); + ComPtr factory; + CreateDXGIFactory1(IID_PPV_ARGS(&factory)); // Check all display adapters int id = 0; - IDXGIAdapter1* adapter; + ComPtr adapter; for (int i = 0; (factory->EnumAdapters1(i, &adapter) != DXGI_ERROR_NOT_FOUND); ++i) { - const auto adapterReleaser = MakeUniqueWithReleaser(adapter); // Search the main monitor from all outputs - IDXGIOutput* output; + ComPtr output; for (int j = 0; (adapter->EnumOutputs(j, &output) != DXGI_ERROR_NOT_FOUND); ++j) { - const auto outputReleaser = MakeUniqueWithReleaser(output); auto monitor = std::make_shared(id++); - monitor->Initialize(output); + monitor->Initialize(output.Get()); monitors_.push_back(monitor); } }