diff --git a/Source/Core/DolphinWX/VideoConfigDiag.cpp b/Source/Core/DolphinWX/VideoConfigDiag.cpp index b494659ca7..834651be40 100644 --- a/Source/Core/DolphinWX/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/VideoConfigDiag.cpp @@ -275,6 +275,10 @@ static wxString validation_layer_desc = static wxString backend_multithreading_desc = wxTRANSLATE("Enables multi-threading in the video backend, which may result in performance " "gains in some scenarios.\n\nIf unsure, leave this unchecked."); +static wxString true_color_desc = + wxTRANSLATE("Forces the game to render the RGB color channels in 24-bit, thereby increasing " + "quality by reducing color banding.\nIt has no impact on performance and causes " + "few graphical issues.\n\n\nIf unsure, leave this unchecked."); #if !defined(__APPLE__) // Search for available resolutions - TODO: Move to Common? @@ -618,6 +622,8 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string& title) vconfig.bWidescreenHack)); cb_szr->Add(CreateCheckBox(page_enh, _("Disable Fog"), wxGetTranslation(disable_fog_desc), vconfig.bDisableFog)); + cb_szr->Add(CreateCheckBox(page_enh, _("Force True Color"), wxGetTranslation(true_color_desc), + vconfig.bForceTrueColor)); szr_enh->Add(cb_szr, wxGBPosition(row, 0), wxGBSpan(1, 3)); row += 1; diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index a6c74f49cd..2996ac46ed 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -169,7 +169,8 @@ PixelShaderUid GetPixelShaderUid(DSTALPHA_MODE dstAlphaMode) uid_data->per_pixel_lighting = g_ActiveConfig.bEnablePixelLighting; uid_data->bounding_box = g_ActiveConfig.backend_info.bSupportsBBox && g_ActiveConfig.bBBoxEnable && BoundingBox::active; - uid_data->rgba6_format = bpmem.zcontrol.pixel_format == PEControl::RGBA6_Z24; + uid_data->rgba6_format = + bpmem.zcontrol.pixel_format == PEControl::RGBA6_Z24 && !g_ActiveConfig.bForceTrueColor; uid_data->dither = bpmem.blendmode.dither; u32 numStages = uid_data->genMode_numtevstages + 1; diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp index 73e6eafa12..6106e3ea81 100644 --- a/Source/Core/VideoCommon/VideoConfig.cpp +++ b/Source/Core/VideoCommon/VideoConfig.cpp @@ -103,6 +103,7 @@ void VideoConfig::Load(const std::string& ini_file) enhancements->Get("ForceFiltering", &bForceFiltering, 0); enhancements->Get("MaxAnisotropy", &iMaxAnisotropy, 0); // NOTE - this is x in (1 << x) enhancements->Get("PostProcessingShader", &sPostProcessingShader, ""); + enhancements->Get("ForceTrueColor", &bForceTrueColor, false); IniFile::Section* stereoscopy = iniFile.GetOrCreateSection("Stereoscopy"); stereoscopy->Get("StereoMode", &iStereoMode, 0); @@ -167,6 +168,7 @@ void VideoConfig::GameIniLoad() CHECK_SETTING("Video_Settings", "FastDepthCalc", bFastDepthCalc); CHECK_SETTING("Video_Settings", "MSAA", iMultisamples); CHECK_SETTING("Video_Settings", "SSAA", bSSAA); + CHECK_SETTING("Video_Settings", "ForceTrueColor", bForceTrueColor); int tmp = -9000; CHECK_SETTING("Video_Settings", "EFBScale", tmp); // integral @@ -317,6 +319,7 @@ void VideoConfig::Save(const std::string& ini_file) enhancements->Set("ForceFiltering", bForceFiltering); enhancements->Set("MaxAnisotropy", iMaxAnisotropy); enhancements->Set("PostProcessingShader", sPostProcessingShader); + enhancements->Set("ForceTrueColor", bForceTrueColor); IniFile::Section* stereoscopy = iniFile.GetOrCreateSection("Stereoscopy"); stereoscopy->Set("StereoMode", iStereoMode); diff --git a/Source/Core/VideoCommon/VideoConfig.h b/Source/Core/VideoCommon/VideoConfig.h index a08024b849..b866ce6343 100644 --- a/Source/Core/VideoCommon/VideoConfig.h +++ b/Source/Core/VideoCommon/VideoConfig.h @@ -79,6 +79,7 @@ struct VideoConfig final bool bForceFiltering; int iMaxAnisotropy; std::string sPostProcessingShader; + bool bForceTrueColor; // Information bool bShowFPS;