MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / UpdateOutputs

Method UpdateOutputs

Source/Engine/GraphicsDevice/DirectX/RenderToolsDX.cpp:610–721  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

608#if PLATFORM_WINDOWS
609
610void GPUDeviceDX::UpdateOutputs(IDXGIAdapter* adapter)
611{
612 PROFILE_CPU();
613 uint32 outputIdx = 0;
614 ComPtr<IDXGIOutput> output;
615 DXGI_FORMAT backbufferFormat = RenderToolsDX::ToDxgiFormat(GPU_BACK_BUFFER_PIXEL_FORMAT);
616 Array<DXGI_MODE_DESC> modeDesc;
617 while (adapter->EnumOutputs(outputIdx, &output) != DXGI_ERROR_NOT_FOUND)
618 {
619 auto& outputDX11 = Outputs.AddOne();
620
621 outputDX11.Output = output;
622 output->GetDesc(&outputDX11.Desc);
623
624 uint32 numModes = 0;
625 HRESULT hr = output->GetDisplayModeList(backbufferFormat, 0, &numModes, nullptr);
626 if (FAILED(hr))
627 {
628 LOG(Warning, "Error while enumerating adapter output video modes.");
629 continue;
630 }
631
632 modeDesc.Resize(numModes, false);
633 hr = output->GetDisplayModeList(backbufferFormat, 0, &numModes, modeDesc.Get());
634 if (FAILED(hr))
635 {
636 LOG(Warning, "Error while enumerating adapter output video modes.");
637 continue;
638 }
639
640 for (auto& mode : modeDesc)
641 {
642 bool foundVideoMode = false;
643 for (auto& videoMode : outputDX11.VideoModes)
644 {
645 if (videoMode.Width == mode.Width &&
646 videoMode.Height == mode.Height &&
647 videoMode.RefreshRate.Numerator == mode.RefreshRate.Numerator &&
648 videoMode.RefreshRate.Denominator == mode.RefreshRate.Denominator)
649 {
650 foundVideoMode = true;
651 break;
652 }
653 }
654 if (!foundVideoMode)
655 {
656 outputDX11.VideoModes.Add(mode);
657 VideoOutputModes.Add({ mode.Width, mode.Height, mode.RefreshRate.Numerator / (float)mode.RefreshRate.Denominator, VideoOutputs.Count() });
658 }
659 }
660
661 // Get desktop display mode
662 HMONITOR hMonitor = outputDX11.Desc.Monitor;
663 MONITORINFOEX monitorInfo;
664 monitorInfo.cbSize = sizeof(MONITORINFOEX);
665 GetMonitorInfo(hMonitor, &monitorInfo);
666
667 Windows::DEVMODEW devMode;

Callers

nothing calls this directly

Calls 9

AddOneMethod · 0.80
SubstringMethod · 0.80
ResizeMethod · 0.45
GetMethod · 0.45
AddMethod · 0.45
CountMethod · 0.45
FindMethod · 0.45
IsEmptyMethod · 0.45
QueryInterfaceMethod · 0.45

Tested by

no test coverage detected