From acc6ad59ba4d0a9841aa97a05c26bbc5ef2f900f Mon Sep 17 00:00:00 2001 From: Jonathan Li Date: Sun, 21 Jun 2015 15:03:17 +0100 Subject: [PATCH] GSdx: Use correct renderer after config change Rework the renderer selection logic to reload the saved renderer after it's been changed in the config panel and to properly detect whether a renderer toggle has been requested. --- plugins/GSdx/GS.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/plugins/GSdx/GS.cpp b/plugins/GSdx/GS.cpp index f250547c53..d29b3b98d1 100644 --- a/plugins/GSdx/GS.cpp +++ b/plugins/GSdx/GS.cpp @@ -445,17 +445,24 @@ static int _GSopen(void** dsp, char* title, int renderer, int threads = -1) EXPORT_C_(int) GSopen2(void** dsp, uint32 flags) { -#ifdef __linux__ - // Use ogl renderer as default otherwise it crash at startup - // GSRenderOGL only GSDeviceOGL (not GSDeviceNULL) - int renderer = theApp.GetConfig("Renderer", 12); -#else - int renderer = theApp.GetConfig("Renderer", 0); -#endif + static bool stored_toggle_state = false; + bool toggle_state = !!(flags & 4); - if(flags & 4) + int renderer = s_renderer; + // Fresh start up or config file changed + if (renderer == -1) { -#ifdef _WINDOWS +#ifdef __linux__ + // Use ogl renderer as default otherwise it crash at startup + // GSRenderOGL only GSDeviceOGL (not GSDeviceNULL) + renderer = theApp.GetConfig("Renderer", 12); +#else + renderer = theApp.GetConfig("Renderer", 0); +#endif + } + else if (stored_toggle_state != toggle_state) + { +#ifdef _WIN32 int best_sw_renderer = GSUtil::CheckDirect3D11Level() >= D3D_FEATURE_LEVEL_10_0 ? 4 : 1; // dx11 / dx9 sw switch(renderer){ @@ -477,6 +484,7 @@ EXPORT_C_(int) GSopen2(void** dsp, uint32 flags) } #endif } + stored_toggle_state = toggle_state; int retval = _GSopen(dsp, NULL, renderer); @@ -761,17 +769,19 @@ EXPORT_C GSconfigure() GSshutdown(); } + // Force a reload of the gs state + s_renderer = -1; } #else if (RunLinuxDialog()) { theApp.ReloadConfig(); + // Force a reload of the gs state + s_renderer = -1; } #endif - // Force a reload of the gs state - s_renderer = -1; } catch (GSDXRecoverableError) {