From 70b898e2c6bbb2759a98d36e2f0dd84bfc56db3f Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Sun, 21 Dec 2014 14:06:16 +0100 Subject: [PATCH 1/5] VideoConfig: Rename Separation to Depth and update descriptions. More accurate since it's not a real IPD and Nvidia also calls it depth. --- Source/Core/Core/ConfigManager.cpp | 4 ++-- Source/Core/Core/CoreParameter.h | 4 ++-- Source/Core/DolphinWX/Frame.cpp | 12 ++++++------ Source/Core/DolphinWX/HotkeyDlg.cpp | 8 ++++---- Source/Core/DolphinWX/VideoConfigDiag.cpp | 10 +++++----- Source/Core/DolphinWX/VideoConfigDiag.h | 2 +- Source/Core/VideoCommon/GeometryShaderManager.cpp | 4 ++-- Source/Core/VideoCommon/VideoConfig.cpp | 14 +++++++------- Source/Core/VideoCommon/VideoConfig.h | 4 +++- 9 files changed, 32 insertions(+), 30 deletions(-) diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index 7afb655a44..8f88902fcd 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -81,8 +81,8 @@ static const struct { "FreelookZoomOut", 83 /* 'S' */, 4 /* wxMOD_SHIFT */ }, { "FreelookReset", 82 /* 'R' */, 4 /* wxMOD_SHIFT */ }, - { "IncreaseSeparation", 0, 0 /* wxMOD_NONE */ }, - { "DecreaseSeparation", 0, 0 /* wxMOD_NONE */ }, + { "IncreaseDepth", 0, 0 /* wxMOD_NONE */ }, + { "DecreaseDepth", 0, 0 /* wxMOD_NONE */ }, { "IncreaseConvergence", 0, 0 /* wxMOD_NONE */ }, { "DecreaseConvergence", 0, 0 /* wxMOD_NONE */ }, diff --git a/Source/Core/Core/CoreParameter.h b/Source/Core/Core/CoreParameter.h index 94087f77e7..f2d90885e1 100644 --- a/Source/Core/Core/CoreParameter.h +++ b/Source/Core/Core/CoreParameter.h @@ -54,8 +54,8 @@ enum Hotkey HK_FREELOOK_ZOOM_OUT, HK_FREELOOK_RESET, - HK_INCREASE_SEPARATION, - HK_DECREASE_SEPARATION, + HK_INCREASE_DEPTH, + HK_DECREASE_DEPTH, HK_INCREASE_CONVERGENCE, HK_DECREASE_CONVERGENCE, diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp index 8c5b2c247d..6799fd31eb 100644 --- a/Source/Core/DolphinWX/Frame.cpp +++ b/Source/Core/DolphinWX/Frame.cpp @@ -1123,15 +1123,15 @@ void CFrame::OnKeyDown(wxKeyEvent& event) { State::Load(g_saveSlot); } - else if (IsHotkey(event, HK_INCREASE_SEPARATION)) + else if (IsHotkey(event, HK_INCREASE_DEPTH)) { - if (++g_Config.iStereoSeparation > 100) - g_Config.iStereoSeparation = 100; + if (++g_Config.iStereoDepth > 100) + g_Config.iStereoDepth = 100; } - else if (IsHotkey(event, HK_DECREASE_SEPARATION)) + else if (IsHotkey(event, HK_DECREASE_DEPTH)) { - if (--g_Config.iStereoSeparation < 0) - g_Config.iStereoSeparation = 0; + if (--g_Config.iStereoDepth < 0) + g_Config.iStereoDepth = 0; } else if (IsHotkey(event, HK_INCREASE_CONVERGENCE)) { diff --git a/Source/Core/DolphinWX/HotkeyDlg.cpp b/Source/Core/DolphinWX/HotkeyDlg.cpp index f346991a55..a9b5081b5a 100644 --- a/Source/Core/DolphinWX/HotkeyDlg.cpp +++ b/Source/Core/DolphinWX/HotkeyDlg.cpp @@ -238,10 +238,10 @@ void HotkeyConfigDialog::CreateHotkeyGUIControls() _("Freelook Zoom Out"), _("Freelook Reset"), - _("Increase Stereocopy Separation"), - _("Decrease Stereocopy Separation"), - _("Increase Stereocopy Convergence"), - _("Decrease Stereocopy Convergence"), + _("Increase Depth"), + _("Decrease Depth"), + _("Increase Convergence"), + _("Decrease Convergence"), _("Load State Slot 1"), _("Load State Slot 2"), diff --git a/Source/Core/DolphinWX/VideoConfigDiag.cpp b/Source/Core/DolphinWX/VideoConfigDiag.cpp index c1a26c2387..9c81452c98 100644 --- a/Source/Core/DolphinWX/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/VideoConfigDiag.cpp @@ -150,8 +150,8 @@ static wxString ppshader_desc = wxTRANSLATE("Apply a post-processing effect afte static wxString cache_efb_copies_desc = wxTRANSLATE("Slightly speeds up EFB to RAM copies by sacrificing emulation accuracy.\nSometimes also increases visual quality.\nIf you're experiencing any issues, try raising texture cache accuracy or disable this option.\n\nIf unsure, leave this unchecked."); static wxString shader_errors_desc = wxTRANSLATE("Usually if shader compilation fails, an error message is displayed.\nHowever, one may skip the popups to allow interruption free gameplay by checking this option.\n\nIf unsure, leave this unchecked."); static wxString stereo_3d_desc = wxTRANSLATE("Select the stereoscopic 3D mode, stereoscopy allows you to get a better feeling of depth if you have the necessary hardware.\nSide-by-Side and Top-and-Bottom are used by most 3D TVs.\nAnaglyph is used for Red-Cyan colored glasses.\nHeavily decreases emulation speed and sometimes causes issues.\n\nIf unsure, select Off."); -static wxString stereo_separation_desc = wxTRANSLATE("Control the separation distance, this is the distance between the virtual cameras.\nA higher value creates a stronger feeling of depth while a lower value is more comfortable."); -static wxString stereo_convergence_desc = wxTRANSLATE("Control the convergence distance, this controls the apparant distance of virtual objects.\nA higher value creates stronger out-of-screen effects while a lower value is more comfortable."); +static wxString stereo_depth_desc = wxTRANSLATE("Control the distance between the virtual cameras.\nA higher value creates a stronger feeling of depth while a lower value is more comfortable."); +static wxString stereo_convergence_desc = wxTRANSLATE("Control the distance of the convergence plane, this is the distance at which objects will appear to be in front of the screen.\nA higher value creates stronger out-of-screen effects while a lower value is more comfortable."); static wxString stereo_swap_desc = wxTRANSLATE("Swap the left and right eye, mostly useful if you want to view side-by-side cross-eyed.\n\nIf unsure, leave this unchecked."); @@ -457,11 +457,11 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con szr_stereo->Add(new wxStaticText(page_enh, wxID_ANY, _("Stereoscopic 3D Mode:")), 1, wxALIGN_CENTER_VERTICAL, 0); szr_stereo->Add(CreateChoice(page_enh, vconfig.iStereoMode, wxGetTranslation(stereo_3d_desc), vconfig.backend_info.bSupports3DVision ? 5 : 4, stereo_choices)); - wxSlider* const sep_slider = new wxSlider(page_enh, wxID_ANY, vconfig.iStereoSeparation, 0, 100, wxDefaultPosition, wxDefaultSize); + wxSlider* const sep_slider = new wxSlider(page_enh, wxID_ANY, vconfig.iStereoDepth, 0, 100, wxDefaultPosition, wxDefaultSize); sep_slider->Bind(wxEVT_SLIDER, &VideoConfigDiag::Event_StereoSep, this); - RegisterControl(sep_slider, wxGetTranslation(stereo_separation_desc)); + RegisterControl(sep_slider, wxGetTranslation(stereo_depth_desc)); - szr_stereo->Add(new wxStaticText(page_enh, wxID_ANY, _("Separation:")), 1, wxALIGN_CENTER_VERTICAL, 0); + szr_stereo->Add(new wxStaticText(page_enh, wxID_ANY, _("Depth:")), 1, wxALIGN_CENTER_VERTICAL, 0); szr_stereo->Add(sep_slider, 0, wxEXPAND | wxRIGHT); wxSlider* const conv_slider = new wxSlider(page_enh, wxID_ANY, vconfig.iStereoConvergence, 0, 500, wxDefaultPosition, wxDefaultSize); diff --git a/Source/Core/DolphinWX/VideoConfigDiag.h b/Source/Core/DolphinWX/VideoConfigDiag.h index 10dc808bb9..7aaaec95b5 100644 --- a/Source/Core/DolphinWX/VideoConfigDiag.h +++ b/Source/Core/DolphinWX/VideoConfigDiag.h @@ -167,7 +167,7 @@ protected: void Event_StereoSep(wxCommandEvent &ev) { - vconfig.iStereoSeparation = ev.GetInt(); + vconfig.iStereoDepth = ev.GetInt(); ev.Skip(); } diff --git a/Source/Core/VideoCommon/GeometryShaderManager.cpp b/Source/Core/VideoCommon/GeometryShaderManager.cpp index 957a1a65ca..db3ac3f627 100644 --- a/Source/Core/VideoCommon/GeometryShaderManager.cpp +++ b/Source/Core/VideoCommon/GeometryShaderManager.cpp @@ -52,10 +52,10 @@ void GeometryShaderManager::SetConstants() if (xfmem.projection.type == GX_PERSPECTIVE) { - float offset = (g_ActiveConfig.iStereoSeparation / 1000.0f) * (g_ActiveConfig.iStereoSeparationPercent / 100.0f); + float offset = (g_ActiveConfig.iStereoDepth / 1000.0f) * (g_ActiveConfig.iStereoDepthPercentage / 100.0f); constants.stereoparams[0] = (g_ActiveConfig.bStereoSwapEyes) ? offset : -offset; constants.stereoparams[1] = (g_ActiveConfig.bStereoSwapEyes) ? -offset : offset; - constants.stereoparams[2] = (g_ActiveConfig.iStereoConvergence / 10.0f) * (g_ActiveConfig.iStereoConvergencePercent / 100.0f); + constants.stereoparams[2] = (g_ActiveConfig.iStereoConvergence / 10.0f) * (g_ActiveConfig.iStereoConvergencePercentage / 100.0f); } else { diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp index d4cff3ec42..a95cd30fbf 100644 --- a/Source/Core/VideoCommon/VideoConfig.cpp +++ b/Source/Core/VideoCommon/VideoConfig.cpp @@ -41,8 +41,8 @@ VideoConfig::VideoConfig() // Game-specific stereoscopy settings bStereoMonoEFBDepth = false; - iStereoSeparationPercent = 100; - iStereoConvergencePercent = 100; + iStereoDepthPercentage = 100; + iStereoConvergencePercentage = 100; } void VideoConfig::Load(const std::string& ini_file) @@ -88,7 +88,7 @@ void VideoConfig::Load(const std::string& ini_file) enhancements->Get("MaxAnisotropy", &iMaxAnisotropy, 0); // NOTE - this is x in (1 << x) enhancements->Get("PostProcessingShader", &sPostProcessingShader, ""); enhancements->Get("StereoMode", &iStereoMode, 0); - enhancements->Get("StereoSeparation", &iStereoSeparation, 20); + enhancements->Get("StereoDepth", &iStereoDepth, 20); enhancements->Get("StereoConvergence", &iStereoConvergence, 20); enhancements->Get("StereoSwapEyes", &bStereoSwapEyes, false); @@ -185,13 +185,13 @@ void VideoConfig::GameIniLoad() CHECK_SETTING("Video_Enhancements", "MaxAnisotropy", iMaxAnisotropy); // NOTE - this is x in (1 << x) CHECK_SETTING("Video_Enhancements", "PostProcessingShader", sPostProcessingShader); CHECK_SETTING("Video_Enhancements", "StereoMode", iStereoMode); - CHECK_SETTING("Video_Enhancements", "StereoSeparation", iStereoSeparation); + CHECK_SETTING("Video_Enhancements", "StereoDepth", iStereoDepth); CHECK_SETTING("Video_Enhancements", "StereoConvergence", iStereoConvergence); CHECK_SETTING("Video_Enhancements", "StereoSwapEyes", bStereoSwapEyes); CHECK_SETTING("Video_Stereoscopy", "StereoMonoEFBDepth", bStereoMonoEFBDepth); - CHECK_SETTING("Video_Stereoscopy", "StereoSeparationPercent", iStereoSeparationPercent); - CHECK_SETTING("Video_Stereoscopy", "StereoConvergencePercent", iStereoConvergencePercent); + CHECK_SETTING("Video_Stereoscopy", "StereoDepthPercentage", iStereoDepthPercentage); + CHECK_SETTING("Video_Stereoscopy", "StereoConvergencePercentage", iStereoConvergencePercentage); CHECK_SETTING("Video_Hacks", "EFBAccessEnable", bEFBAccessEnable); CHECK_SETTING("Video_Hacks", "EFBCopyEnable", bEFBCopyEnable); @@ -267,7 +267,7 @@ void VideoConfig::Save(const std::string& ini_file) enhancements->Set("MaxAnisotropy", iMaxAnisotropy); enhancements->Set("PostProcessingShader", sPostProcessingShader); enhancements->Set("StereoMode", iStereoMode); - enhancements->Set("StereoSeparation", iStereoSeparation); + enhancements->Set("StereoDepth", iStereoDepth); enhancements->Set("StereoConvergence", iStereoConvergence); enhancements->Set("StereoSwapEyes", bStereoSwapEyes); diff --git a/Source/Core/VideoCommon/VideoConfig.h b/Source/Core/VideoCommon/VideoConfig.h index f27b1b2116..88d5cd97af 100644 --- a/Source/Core/VideoCommon/VideoConfig.h +++ b/Source/Core/VideoCommon/VideoConfig.h @@ -81,7 +81,7 @@ struct VideoConfig final int iMaxAnisotropy; std::string sPostProcessingShader; int iStereoMode; - int iStereoSeparation; + int iStereoDepth; int iStereoConvergence; bool bStereoSwapEyes; @@ -129,6 +129,8 @@ struct VideoConfig final bool bStereoMonoEFBDepth; int iStereoSeparationPercent; int iStereoConvergencePercent; + int iStereoDepthPercentage; + int iStereoConvergencePercentage; // D3D only config, mostly to be merged into the above int iAdapter; From c424aa1ac634200eab9eb3d5a2244eab7e11f2a0 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Sun, 21 Dec 2014 14:18:21 +0100 Subject: [PATCH 2/5] GeometryShaderManager: Boost convergence value. Most game don't require much granularity regarding the convergence value. The default convergence was also too low, this commit increases it tenfold. --- Source/Core/VideoCommon/GeometryShaderManager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/VideoCommon/GeometryShaderManager.cpp b/Source/Core/VideoCommon/GeometryShaderManager.cpp index db3ac3f627..e392398f13 100644 --- a/Source/Core/VideoCommon/GeometryShaderManager.cpp +++ b/Source/Core/VideoCommon/GeometryShaderManager.cpp @@ -53,9 +53,9 @@ void GeometryShaderManager::SetConstants() if (xfmem.projection.type == GX_PERSPECTIVE) { float offset = (g_ActiveConfig.iStereoDepth / 1000.0f) * (g_ActiveConfig.iStereoDepthPercentage / 100.0f); - constants.stereoparams[0] = (g_ActiveConfig.bStereoSwapEyes) ? offset : -offset; - constants.stereoparams[1] = (g_ActiveConfig.bStereoSwapEyes) ? -offset : offset; - constants.stereoparams[2] = (g_ActiveConfig.iStereoConvergence / 10.0f) * (g_ActiveConfig.iStereoConvergencePercentage / 100.0f); + constants.stereoparams[0] = g_ActiveConfig.bStereoSwapEyes ? offset : -offset; + constants.stereoparams[1] = g_ActiveConfig.bStereoSwapEyes ? -offset : offset; + constants.stereoparams[2] = g_ActiveConfig.iStereoConvergence * (g_ActiveConfig.iStereoConvergencePercent / 100.0f); } else { From 1105dd7dcdbc8b3fc0f6a5efe6700fa2474914f6 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Sun, 21 Dec 2014 14:23:34 +0100 Subject: [PATCH 3/5] VideoConfigDiag: Enable stereoscopy options. --- Source/Core/DolphinWX/VideoConfigDiag.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/DolphinWX/VideoConfigDiag.cpp b/Source/Core/DolphinWX/VideoConfigDiag.cpp index 9c81452c98..a4f0f1433e 100644 --- a/Source/Core/DolphinWX/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/VideoConfigDiag.cpp @@ -449,7 +449,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con // - stereoscopy - if (vconfig.backend_info.bSupportsGeometryShaders && vconfig.iStereoMode > 0) + if (vconfig.backend_info.bSupportsGeometryShaders) { wxFlexGridSizer* const szr_stereo = new wxFlexGridSizer(2, 5, 5); From 31a55384b32990205c61f5ffb46484b2a2046d61 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Wed, 24 Dec 2014 23:06:44 +0100 Subject: [PATCH 4/5] VideoConfig: Rename "StereoMonoEFBDepth" to "StereoEFBMonoDepth" Makes a little bit more sense. --- Data/Sys/GameSettings/GLME01.ini | 2 +- Source/Core/VideoBackends/OGL/TextureCache.cpp | 2 +- Source/Core/VideoCommon/TextureCacheBase.cpp | 4 ++-- Source/Core/VideoCommon/TextureCacheBase.h | 2 +- Source/Core/VideoCommon/VideoConfig.cpp | 4 ++-- Source/Core/VideoCommon/VideoConfig.h | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Data/Sys/GameSettings/GLME01.ini b/Data/Sys/GameSettings/GLME01.ini index ccabdf2a10..d416b884e7 100644 --- a/Data/Sys/GameSettings/GLME01.ini +++ b/Data/Sys/GameSettings/GLME01.ini @@ -33,4 +33,4 @@ $99 of some treasures $End Boss Has No HP [Video_Stereoscopy] -StereoMonoEFBDepth = True +StereoEFBMonoDepth = True diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp index 97bc487675..0adb078cd5 100644 --- a/Source/Core/VideoBackends/OGL/TextureCache.cpp +++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp @@ -421,7 +421,7 @@ void TextureCache::CompileShaders() "}\n" : nullptr; const char* prefix = (GProgram == nullptr) ? "f" : "v"; - const char* depth_layer = (g_ActiveConfig.bStereoMonoEFBDepth) ? "0.0" : "f_uv0.z"; + const char* depth_layer = (g_ActiveConfig.bStereoEFBMonoDepth) ? "0.0" : "f_uv0.z"; ProgramShaderCache::CompileShader(s_ColorMatrixProgram, StringFromFormat(VProgram, prefix, prefix).c_str(), pColorMatrixProg, GProgram); ProgramShaderCache::CompileShader(s_DepthMatrixProgram, StringFromFormat(VProgram, prefix, prefix).c_str(), StringFromFormat(pDepthMatrixProg, depth_layer).c_str(), GProgram); diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp index e468dcca85..a005da3754 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/TextureCacheBase.cpp @@ -117,7 +117,7 @@ void TextureCache::OnConfigChanged(VideoConfig& config) } if ((config.iStereoMode > 0) != backup_config.s_stereo_3d || - config.bStereoMonoEFBDepth != backup_config.s_mono_efb_depth) + config.bStereoEFBMonoDepth != backup_config.s_efb_mono_depth) { g_texture_cache->DeleteShaders(); g_texture_cache->CompileShaders(); @@ -134,7 +134,7 @@ void TextureCache::OnConfigChanged(VideoConfig& config) backup_config.s_hires_textures = config.bHiresTextures; backup_config.s_copy_cache_enable = config.bEFBCopyCacheEnable; backup_config.s_stereo_3d = config.iStereoMode > 0; - backup_config.s_mono_efb_depth = config.bStereoMonoEFBDepth; + backup_config.s_efb_mono_depth = config.bStereoEFBMonoDepth; } void TextureCache::Cleanup() diff --git a/Source/Core/VideoCommon/TextureCacheBase.h b/Source/Core/VideoCommon/TextureCacheBase.h index d9cd2b8c16..c45894320c 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.h +++ b/Source/Core/VideoCommon/TextureCacheBase.h @@ -146,7 +146,7 @@ private: bool s_hires_textures; bool s_copy_cache_enable; bool s_stereo_3d; - bool s_mono_efb_depth; + bool s_efb_mono_depth; } backup_config; }; diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp index a95cd30fbf..4b30d4025d 100644 --- a/Source/Core/VideoCommon/VideoConfig.cpp +++ b/Source/Core/VideoCommon/VideoConfig.cpp @@ -40,7 +40,7 @@ VideoConfig::VideoConfig() backend_info.bSupportsExclusiveFullscreen = false; // Game-specific stereoscopy settings - bStereoMonoEFBDepth = false; + bStereoEFBMonoDepth = false; iStereoDepthPercentage = 100; iStereoConvergencePercentage = 100; } @@ -189,7 +189,7 @@ void VideoConfig::GameIniLoad() CHECK_SETTING("Video_Enhancements", "StereoConvergence", iStereoConvergence); CHECK_SETTING("Video_Enhancements", "StereoSwapEyes", bStereoSwapEyes); - CHECK_SETTING("Video_Stereoscopy", "StereoMonoEFBDepth", bStereoMonoEFBDepth); + CHECK_SETTING("Video_Stereoscopy", "StereoEFBMonoDepth", bStereoEFBMonoDepth); CHECK_SETTING("Video_Stereoscopy", "StereoDepthPercentage", iStereoDepthPercentage); CHECK_SETTING("Video_Stereoscopy", "StereoConvergencePercentage", iStereoConvergencePercentage); diff --git a/Source/Core/VideoCommon/VideoConfig.h b/Source/Core/VideoCommon/VideoConfig.h index 88d5cd97af..83807538dc 100644 --- a/Source/Core/VideoCommon/VideoConfig.h +++ b/Source/Core/VideoCommon/VideoConfig.h @@ -126,7 +126,7 @@ struct VideoConfig final int iSaveTargetId; // TODO: Should be dropped // Stereoscopy - bool bStereoMonoEFBDepth; + bool bStereoEFBMonoDepth; int iStereoSeparationPercent; int iStereoConvergencePercent; int iStereoDepthPercentage; From 111b04388c65b7ee67fbc40656a1da4de3901e66 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Thu, 25 Dec 2014 00:06:29 +0100 Subject: [PATCH 5/5] VideoConfigDiag: Don't enable the post-processing config button when there are no options. The handling of the Anaglyph override was incorrect. --- Source/Core/DolphinWX/VideoConfigDiag.cpp | 13 +++++++---- Source/Core/DolphinWX/VideoConfigDiag.h | 28 +++++++++++++++-------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/Source/Core/DolphinWX/VideoConfigDiag.cpp b/Source/Core/DolphinWX/VideoConfigDiag.cpp index a4f0f1433e..c474d0199d 100644 --- a/Source/Core/DolphinWX/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/VideoConfigDiag.cpp @@ -411,7 +411,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con choice_ppshader->AppendString(StrToWxStr(shader)); } - if (vconfig.sPostProcessingShader.empty()) + if (vconfig.sPostProcessingShader.empty() || vconfig.iStereoMode == STEREO_ANAGLYPH) choice_ppshader->Select(0); else choice_ppshader->SetStringSelection(StrToWxStr(vconfig.sPostProcessingShader)); @@ -453,19 +453,22 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con { wxFlexGridSizer* const szr_stereo = new wxFlexGridSizer(2, 5, 5); - const wxString stereo_choices[] = { "Off", "Side-by-Side", "Top-and-Bottom", "Anaglyph", "Nvidia 3D Vision" }; szr_stereo->Add(new wxStaticText(page_enh, wxID_ANY, _("Stereoscopic 3D Mode:")), 1, wxALIGN_CENTER_VERTICAL, 0); - szr_stereo->Add(CreateChoice(page_enh, vconfig.iStereoMode, wxGetTranslation(stereo_3d_desc), vconfig.backend_info.bSupports3DVision ? 5 : 4, stereo_choices)); + + const wxString stereo_choices[] = { "Off", "Side-by-Side", "Top-and-Bottom", "Anaglyph", "Nvidia 3D Vision" }; + wxChoice* stereo_choice = CreateChoice(page_enh, vconfig.iStereoMode, wxGetTranslation(stereo_3d_desc), vconfig.backend_info.bSupports3DVision ? ArraySize(stereo_choices) : ArraySize(stereo_choices) - 1, stereo_choices); + stereo_choice->Bind(wxEVT_CHOICE, &VideoConfigDiag::Event_StereoMode, this); + szr_stereo->Add(stereo_choice); wxSlider* const sep_slider = new wxSlider(page_enh, wxID_ANY, vconfig.iStereoDepth, 0, 100, wxDefaultPosition, wxDefaultSize); - sep_slider->Bind(wxEVT_SLIDER, &VideoConfigDiag::Event_StereoSep, this); + sep_slider->Bind(wxEVT_SLIDER, &VideoConfigDiag::Event_StereoDepth, this); RegisterControl(sep_slider, wxGetTranslation(stereo_depth_desc)); szr_stereo->Add(new wxStaticText(page_enh, wxID_ANY, _("Depth:")), 1, wxALIGN_CENTER_VERTICAL, 0); szr_stereo->Add(sep_slider, 0, wxEXPAND | wxRIGHT); wxSlider* const conv_slider = new wxSlider(page_enh, wxID_ANY, vconfig.iStereoConvergence, 0, 500, wxDefaultPosition, wxDefaultSize); - conv_slider->Bind(wxEVT_SLIDER, &VideoConfigDiag::Event_StereoFoc, this); + conv_slider->Bind(wxEVT_SLIDER, &VideoConfigDiag::Event_StereoConvergence, this); RegisterControl(conv_slider, wxGetTranslation(stereo_convergence_desc)); szr_stereo->Add(new wxStaticText(page_enh, wxID_ANY, _("Convergence:")), 1, wxALIGN_CENTER_VERTICAL, 0); diff --git a/Source/Core/DolphinWX/VideoConfigDiag.h b/Source/Core/DolphinWX/VideoConfigDiag.h index 7aaaec95b5..0d1c805feb 100644 --- a/Source/Core/DolphinWX/VideoConfigDiag.h +++ b/Source/Core/DolphinWX/VideoConfigDiag.h @@ -152,7 +152,7 @@ protected: // Should we enable the configuration button? PostProcessingShaderConfiguration postprocessing_shader; postprocessing_shader.LoadShader(vconfig.sPostProcessingShader); - button_config_pp->Enable(postprocessing_shader.HasOptions()); + button_config_pp->Enable(postprocessing_shader.HasOptions() && vconfig.iStereoMode != STEREO_ANAGLYPH); ev.Skip(); } @@ -165,20 +165,36 @@ protected: ev.Skip(); } - void Event_StereoSep(wxCommandEvent &ev) + void Event_StereoDepth(wxCommandEvent &ev) { vconfig.iStereoDepth = ev.GetInt(); ev.Skip(); } - void Event_StereoFoc(wxCommandEvent &ev) + void Event_StereoConvergence(wxCommandEvent &ev) { vconfig.iStereoConvergence = ev.GetInt(); ev.Skip(); } + void Event_StereoMode(wxCommandEvent &ev) + { + if (ev.GetInt() == STEREO_ANAGLYPH && vconfig.backend_info.PPShaders.size()) + { + // Anaglyph overrides post-processing shaders + choice_ppshader->Select(0); + choice_ppshader->Enable(false); + } + else if (vconfig.backend_info.PPShaders.size()) + { + choice_ppshader->Enable(true); + } + + ev.Skip(); + } + void Event_ClickClose(wxCommandEvent&); void Event_Close(wxCloseEvent&); @@ -198,12 +214,6 @@ protected: virtual_xfb->Enable(vconfig.bUseXFB); real_xfb->Enable(vconfig.bUseXFB); - // PP Shaders - if (choice_ppshader) - choice_ppshader->Enable(vconfig.iStereoMode != STEREO_ANAGLYPH); - if (button_config_pp) - button_config_pp->Enable(vconfig.iStereoMode != STEREO_ANAGLYPH); - // Things which shouldn't be changed during emulation if (Core::IsRunning()) {