diff --git a/src/config/CemuConfig.h b/src/config/CemuConfig.h index 6778ceb5..dafad429 100644 --- a/src/config/CemuConfig.h +++ b/src/config/CemuConfig.h @@ -65,6 +65,7 @@ struct GraphicPackEntry bool enabled = true; }; +#define GRAPHIC_API_COUNT 3 enum GraphicAPI { kOpenGL = 0, diff --git a/src/gui/wxgui/GeneralSettings2.cpp b/src/gui/wxgui/GeneralSettings2.cpp index 6d57b5ac..d7a3d0e8 100644 --- a/src/gui/wxgui/GeneralSettings2.cpp +++ b/src/gui/wxgui/GeneralSettings2.cpp @@ -357,7 +357,7 @@ wxPanel* GeneralSettings2::AddGraphicsPage(wxNotebook* notebook) row->Add(new wxStaticText(box, wxID_ANY, _("Graphics API")), 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); sint32 api_size = 0; - wxString choices[NUM_GRAPHICS_APIS]; + wxString choices[GRAPHIC_API_COUNT]; #ifdef ENABLE_OPENGL choices[api_size++] = "OpenGL"; diff --git a/src/gui/wxgui/GeneralSettings2.h b/src/gui/wxgui/GeneralSettings2.h index 77c5fe49..5615b433 100644 --- a/src/gui/wxgui/GeneralSettings2.h +++ b/src/gui/wxgui/GeneralSettings2.h @@ -17,8 +17,6 @@ class wxStaticText; wxDECLARE_EVENT(wxEVT_ACCOUNTLIST_REFRESH, wxCommandEvent); -#define NUM_GRAPHICS_APIS 3 - class GeneralSettings2 : public wxDialog { public: diff --git a/src/gui/wxgui/MainWindow.cpp b/src/gui/wxgui/MainWindow.cpp index 4efb172a..ddb95419 100644 --- a/src/gui/wxgui/MainWindow.cpp +++ b/src/gui/wxgui/MainWindow.cpp @@ -1606,23 +1606,57 @@ void MainWindow::CreateCanvas() m_game_panel->SetSizer(sizer); this->GetSizer()->Add(m_game_panel, 1, wxEXPAND); - // create canvas - if (ActiveSettings::GetGraphicsAPI() == kVulkan) - { - #ifdef ENABLE_VULKAN - m_render_canvas = new VulkanCanvas(m_game_panel, wxSize(1280, 720), true); - #endif - } - else if (ActiveSettings::GetGraphicsAPI() == kOpenGL) - { - #ifdef ENABLE_OPENGL - m_render_canvas = GLCanvas_Create(m_game_panel, wxSize(1280, 720), true); - #endif - } -#if ENABLE_METAL - else - m_render_canvas = new MetalCanvas(m_game_panel, wxSize(1280, 720), true); + GraphicAPI available_apis[GRAPHIC_API_COUNT]; + int count = 0; +#ifdef ENABLE_OPENGL + if (count < GRAPHIC_API_COUNT) available_apis[count++] = kOpenGL; #endif +#ifdef ENABLE_VULKAN + if (count < GRAPHIC_API_COUNT) available_apis[count++] = kVulkan; +#endif +#ifdef ENABLE_METAL + if (count < GRAPHIC_API_COUNT) available_apis[count++] = kMetal; +#endif + cemu_assert(count > 0); + + GraphicAPI selected = ActiveSettings::GetGraphicsAPI(); + bool found = false; + + for (int i = 0; i < count; i++) + { + if (available_apis[i] == selected) + { + printf("Selected graphics API: %d\n", selected); + found = true; + break; + } + } + + if (!found) + selected = available_apis[0]; + + // create canvas + switch (selected) + { + case kVulkan: +#if defined(ENABLE_VULKAN) + m_render_canvas = new VulkanCanvas(m_game_panel, wxSize(1280, 720), true); + break; +#endif + case kOpenGL: +#if defined(ENABLE_OPENGL) + m_render_canvas = GLCanvas_Create(m_game_panel, wxSize(1280, 720), true); + break; +#endif + case kMetal: +#if defined(ENABLE_METAL) + m_render_canvas = new MetalCanvas(m_game_panel, wxSize(1280, 720), true); + break; +#endif + default: + cemu_assert(false && "Invalid graphics API selected"); + break; + } cemu_assert(m_render_canvas != nullptr);