#include "capture/monitor_layout.h" #include #include #include using Microsoft::WRL::ComPtr; namespace sauna { std::vector EnumerateMonitors(ID3D12Device* renderDev) { std::vector out; ComPtr factory; if (FAILED(CreateDXGIFactory1(IID_PPV_ARGS(&factory)))) return out; ComPtr adapter; if (FAILED(factory->EnumAdapterByLuid(renderDev->GetAdapterLuid(), IID_PPV_ARGS(&adapter)))) return out; for (UINT i = 0;; i++) { ComPtr output; if (adapter->EnumOutputs(i, &output) == DXGI_ERROR_NOT_FOUND) break; DXGI_OUTPUT_DESC od{}; if (!output || FAILED(output->GetDesc(&od)) || !od.AttachedToDesktop) continue; MonitorDesc m; m.outputIndex = (int)i; m.left = od.DesktopCoordinates.left; m.top = od.DesktopCoordinates.top; m.right = od.DesktopCoordinates.right; m.bottom = od.DesktopCoordinates.bottom; m.primary = m.left == 0 && m.top == 0; memcpy(m.name, od.DeviceName, sizeof(m.name)); out.push_back(m); } return out; } } // namespace sauna