From 7c97c14eba15080eced71f699162e0c825d8d40d Mon Sep 17 00:00:00 2001 From: spycrab Date: Fri, 16 Jun 2017 01:37:39 +0200 Subject: [PATCH] UICommon: Move Wx Graphics Settings functions --- Source/Core/DolphinWX/VideoConfigDiag.cpp | 76 ++++------------------ Source/Core/UICommon/CMakeLists.txt | 1 + Source/Core/UICommon/VideoUtils.cpp | 77 +++++++++++++++++++++++ Source/Core/UICommon/VideoUtils.h | 22 +++++++ 4 files changed, 112 insertions(+), 64 deletions(-) create mode 100644 Source/Core/UICommon/VideoUtils.cpp create mode 100644 Source/Core/UICommon/VideoUtils.h diff --git a/Source/Core/DolphinWX/VideoConfigDiag.cpp b/Source/Core/DolphinWX/VideoConfigDiag.cpp index 687bdf7b33..2dc76ae456 100644 --- a/Source/Core/DolphinWX/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/VideoConfigDiag.cpp @@ -32,6 +32,7 @@ #include "DolphinWX/Main.h" #include "DolphinWX/PostProcessingConfigDiag.h" #include "DolphinWX/WxUtils.h" +#include "UICommon/VideoUtils.h" #include "VideoCommon/PostProcessing.h" #include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoConfig.h" @@ -307,69 +308,6 @@ static wxString gpu_texture_decoding_desc = "performance gains in some scenarios, or on systems where the CPU is the " "bottleneck.\n\nIf unsure, leave this unchecked."); -#if !defined(__APPLE__) -// Search for available resolutions - TODO: Move to Common? -static wxArrayString GetListOfResolutions() -{ - wxArrayString retlist; - retlist.Add(_("Auto")); -#ifdef _WIN32 - DWORD iModeNum = 0; - DEVMODE dmi; - ZeroMemory(&dmi, sizeof(dmi)); - dmi.dmSize = sizeof(dmi); - std::vector resos; - - while (EnumDisplaySettings(nullptr, iModeNum++, &dmi) != 0) - { - char res[100]; - sprintf(res, "%dx%d", dmi.dmPelsWidth, dmi.dmPelsHeight); - std::string strRes(res); - // Only add unique resolutions - if (std::find(resos.begin(), resos.end(), strRes) == resos.end()) - { - resos.push_back(strRes); - retlist.Add(StrToWxStr(res)); - } - ZeroMemory(&dmi, sizeof(dmi)); - } -#elif defined(HAVE_XRANDR) && HAVE_XRANDR - std::vector resos; - main_frame->m_xrr_config->AddResolutions(resos); - for (auto res : resos) - retlist.Add(StrToWxStr(res)); -#elif defined(__APPLE__) - CFArrayRef modes = CGDisplayCopyAllDisplayModes(CGMainDisplayID(), nullptr); - for (CFIndex i = 0; i < CFArrayGetCount(modes); i++) - { - std::stringstream res; - CGDisplayModeRef mode; - CFStringRef encoding; - size_t w, h; - bool is32; - - mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, i); - w = CGDisplayModeGetWidth(mode); - h = CGDisplayModeGetHeight(mode); - encoding = CGDisplayModeCopyPixelEncoding(mode); - is32 = CFEqual(encoding, CFSTR(IO32BitDirectPixels)); - CFRelease(encoding); - - if (!is32) - continue; - if (CGDisplayModeGetIOFlags(mode) & kDisplayModeStretchedFlag) - continue; - - res << w << "x" << h; - - retlist.Add(res.str()); - } - CFRelease(modes); -#endif - return retlist; -} -#endif - VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string& title) : wxDialog(parent, wxID_ANY, wxString::Format(_("Dolphin %s Graphics Configuration"), wxGetTranslation(StrToWxStr(title)))), @@ -436,7 +374,17 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string& title) #if !defined(__APPLE__) // display resolution { - wxArrayString res_list = GetListOfResolutions(); + wxArrayString res_list; + res_list.Add(_("Auto")); +#if defined(HAVE_XRANDR) && HAVE_XRANDR + const auto resolutions = VideoUtils::GetAvailableResolutions(main_frame->m_xrr_config); +#else + const auto resolutions = VideoUtils::GetAvailableResolutions(nullptr); +#endif + + for (const auto& res : resolutions) + res_list.Add(res); + if (res_list.empty()) res_list.Add(_("")); label_display_resolution = diff --git a/Source/Core/UICommon/CMakeLists.txt b/Source/Core/UICommon/CMakeLists.txt index 36648bbe7c..838dfb8775 100644 --- a/Source/Core/UICommon/CMakeLists.txt +++ b/Source/Core/UICommon/CMakeLists.txt @@ -3,6 +3,7 @@ set(SRCS Disassembler.cpp UICommon.cpp USBUtils.cpp + VideoUtils.cpp ) if(USE_X11) diff --git a/Source/Core/UICommon/VideoUtils.cpp b/Source/Core/UICommon/VideoUtils.cpp new file mode 100644 index 0000000000..c21cb93b8f --- /dev/null +++ b/Source/Core/UICommon/VideoUtils.cpp @@ -0,0 +1,77 @@ +// Copyright 2017 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include "UICommon/VideoUtils.h" + +#include "Common/Assert.h" +#include "VideoCommon/VideoConfig.h" + +#if defined(HAVE_XRANDR) && HAVE_XRANDR +#include "UICommon/X11Utils.h" +#endif + +namespace VideoUtils +{ +#if !defined(__APPLE__) +std::vector GetAvailableResolutions(X11Utils::XRRConfiguration* xrr_config) +{ + std::vector resos; +#ifdef _WIN32 + DWORD iModeNum = 0; + DEVMODE dmi; + ZeroMemory(&dmi, sizeof(dmi)); + dmi.dmSize = sizeof(dmi); + + while (EnumDisplaySettings(nullptr, iModeNum++, &dmi) != 0) + { + char res[100]; + sprintf(res, "%dx%d", dmi.dmPelsWidth, dmi.dmPelsHeight); + std::string strRes(res); + // Only add unique resolutions + if (std::find(resos.begin(), resos.end(), strRes) == resos.end()) + { + resos.push_back(strRes); + } + ZeroMemory(&dmi, sizeof(dmi)); + } +#elif defined(HAVE_XRANDR) && HAVE_XRANDR + xrr_config->AddResolutions(resos); +#endif + return resos; +} +#endif + +std::vector GetAvailableAntialiasingModes(int& msaa_modes) +{ + std::vector modes; + const auto& aa_modes = g_Config.backend_info.AAModes; + const bool supports_ssaa = g_Config.backend_info.bSupportsSSAA; + msaa_modes = 0; + + for (const auto mode : aa_modes) + { + if (mode == 1) + { + modes.push_back("None"); + _assert_msg_(VIDEO, !supports_ssaa || msaa_modes == 0, "SSAA setting won't work correctly"); + } + else + { + modes.push_back(std::to_string(mode) + "x MSAA"); + msaa_modes++; + } + } + + if (supports_ssaa) + { + for (const auto mode : aa_modes) + { + if (mode != 1) + modes.push_back(std::to_string(mode) + "x SSAA"); + } + } + + return modes; +} +} diff --git a/Source/Core/UICommon/VideoUtils.h b/Source/Core/UICommon/VideoUtils.h new file mode 100644 index 0000000000..096abbe7b1 --- /dev/null +++ b/Source/Core/UICommon/VideoUtils.h @@ -0,0 +1,22 @@ +// Copyright 2017 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include +#include + +namespace X11Utils +{ +class XRRConfiguration; +} + +namespace VideoUtils +{ +#if !defined(__APPLE__) +std::vector GetAvailableResolutions(X11Utils::XRRConfiguration* xrr_config); +#endif + +std::vector GetAvailableAntialiasingModes(int& m_msaa_modes); +}