diff --git a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll index 1b82753..27a8cfb 100644 Binary files a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll and b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll differ diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index 3a32b49..78adc5f 100644 Binary files a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll and b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll differ diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp index e2bf6f8..90c8470 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp @@ -17,6 +17,29 @@ extern std::unique_ptr g_manager; extern std::queue g_messages; +void OutputWindowsInformation() +{ + const auto hModule = ::LoadLibrary(TEXT("ntdll.dll")); + if (!hModule) return; + + ScopedReleaser freeModule([&] { ::FreeLibrary(hModule); }); + + if (const auto address = ::GetProcAddress(hModule, "RtlGetVersion")) + { + using RtlGetVersionType = NTSTATUS(WINAPI *)(OSVERSIONINFOEXW*); + const auto RtlGetVersion = reinterpret_cast(address); + + OSVERSIONINFOEXW os = { sizeof(os) }; + if (!FAILED(RtlGetVersion(&os))) + { + Debug::Log("OS Version : ", os.dwMajorVersion, ".", os.dwMinorVersion); + Debug::Log("Build Number : ", os.dwBuildNumber); + Debug::Log("Service Pack : ", os.szCSDVersion); + } + } +} + + IUnityInterfaces* GetUnity() { return g_unity; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h index a36f15a..c16554f 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h @@ -7,6 +7,9 @@ +// Output windows version +void OutputWindowsInformation(); + // Unity interface getter struct IUnityInterfaces; IUnityInterfaces* GetUnity(); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h index b50b043..d1222aa 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h @@ -40,12 +40,24 @@ private: }; template - static void Output(T&& arg) + static void Output(const T& arg) { if (mode_ == Mode::None) return; if (ss_.good()) { - ss_ << std::forward(arg); + ss_ << arg; + } + } + + static void Output(const WCHAR* arg) + { + if (mode_ == Mode::None) return; + if (ss_.good()) + { + char buf[256]; + size_t size; + wcstombs_s(&size, buf, arg, 256); + ss_ << buf; } } @@ -89,10 +101,10 @@ private: } template - static void _Log(Level level, Arg&& arg, RestArgs&&... restArgs) + static void _Log(Level level, const Arg& arg, const RestArgs&... restArgs) { - Output(std::forward(arg)); - _Log(level, std::forward(restArgs)...); + Output(arg); + _Log(level, restArgs...); } static void _Log(Level level) diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp index d057c0d..2e7a9c4 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp @@ -57,17 +57,7 @@ void Duplicator::InitializeDuplication() case S_OK: { state_ = State::Ready; - const auto rot = static_cast(monitor_->GetRotation()); Debug::Log("Duplicator::Initialize() => OK."); - Debug::Log(" ID : ", monitor_->GetId()); - Debug::Log(" Size : (", monitor_->GetWidth(), ", ", monitor_->GetHeight(), ")"); - Debug::Log(" DPI : (", monitor_->GetDpiX(), ", ", monitor_->GetDpiY(), ")"); - Debug::Log(" Rot : ", - rot == DXGI_MODE_ROTATION_IDENTITY ? "Landscape" : - rot == DXGI_MODE_ROTATION_ROTATE90 ? "Portrait" : - rot == DXGI_MODE_ROTATION_ROTATE180 ? "Landscape (flipped)" : - rot == DXGI_MODE_ROTATION_ROTATE270 ? "Portrait (flipped)" : - "Unspecified"); break; } case E_INVALIDARG: diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h index 86fb635..2bdf53e 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h @@ -77,7 +77,7 @@ private: void UpdateMoveRects(); void UpdateDirtyRects(); - Monitor* monitor_ = nullptr; + Monitor* const monitor_ = nullptr; std::atomic state_ = State::Ready; std::shared_ptr device_; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index 7101807..f0e331f 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -57,6 +57,18 @@ void Monitor::Initialize( // DPI is set as -1, so the application has to use the appropriate value. } + const auto rot = outputDesc_.Rotation; + Debug::Log("Monitor::Initialized() =>"); + Debug::Log(" ID : ", id_); + Debug::Log(" Size : (", width_, ", ", height_, ")"); + Debug::Log(" DPI : (", dpiX_, ", ", dpiY_, ")"); + Debug::Log(" Rot : ", + rot == DXGI_MODE_ROTATION_IDENTITY ? "Landscape" : + rot == DXGI_MODE_ROTATION_ROTATE90 ? "Portrait" : + rot == DXGI_MODE_ROTATION_ROTATE180 ? "Landscape (flipped)" : + rot == DXGI_MODE_ROTATION_ROTATE270 ? "Portrait (flipped)" : + "Unspecified"); + duplicator_ = std::make_shared(this); } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp index 9a3b191..bbfaf32 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp @@ -30,7 +30,6 @@ MonitorManager::~MonitorManager() void MonitorManager::Initialize() { - // Get factory ComPtr factory; if (FAILED(CreateDXGIFactory1(IID_PPV_ARGS(&factory)))) { @@ -38,21 +37,33 @@ void MonitorManager::Initialize() return; } - // Check all display adapters - int id = 0; + std::vector, ComPtr>> outputs; + ComPtr adapter; for (int i = 0; (factory->EnumAdapters1(i, &adapter) != DXGI_ERROR_NOT_FOUND); ++i) { - // Search the main monitor from all outputs + DXGI_ADAPTER_DESC desc; + if (FAILED(adapter->GetDesc(&desc))) continue; + Debug::Log("Graphics Card [", i, "] : ", desc.Description); + ComPtr output; for (int j = 0; (adapter->EnumOutputs(j, &output) != DXGI_ERROR_NOT_FOUND); ++j) { - auto monitor = std::make_shared(id++); - monitor->Initialize(adapter, output); - monitor->StartCapture(); - monitors_.push_back(monitor); + DXGI_OUTPUT_DESC desc; + if (FAILED(output->GetDesc(&desc))) continue; + Debug::Log(" > Monitor[", j, "] : ", desc.DeviceName); + outputs.emplace_back(adapter, output); } } + + for (int id = 0; id < static_cast(outputs.size()); ++id) + { + const auto& pair = outputs.at(id); + auto monitor = std::make_shared(id); + monitor->Initialize(pair.first, pair.second); + monitor->StartCapture(); + monitors_.push_back(monitor); + } } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp index cb00f8b..2b49910 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/main.cpp @@ -39,6 +39,7 @@ extern "C" if (!g_manager) { Debug::Initialize(); + OutputWindowsInformation(); g_manager = std::make_unique(); g_manager->Initialize(); }