diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2013-09-23 00:47:57 -0500 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2013-09-23 00:47:57 -0500 |
| commit | bab91494d53f15d804834ba5d11730b0e855ebd8 (patch) | |
| tree | a86cd67ea34aa3497955dceb501794275e4e7f04 /Source/Core/VideoCommon/Src/VideoConfig.cpp | |
| parent | d84312c799816e8835e6bed562f216bf19725761 (diff) | |
| parent | 1da6469c62fa1b4fd669a48cb583e161d5cb2713 (diff) | |
Merge branch 'master' into android-core-control
Diffstat (limited to 'Source/Core/VideoCommon/Src/VideoConfig.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/Src/VideoConfig.cpp | 170 |
1 files changed, 67 insertions, 103 deletions
diff --git a/Source/Core/VideoCommon/Src/VideoConfig.cpp b/Source/Core/VideoCommon/Src/VideoConfig.cpp index 707aec734c..e81807985a 100644 --- a/Source/Core/VideoCommon/Src/VideoConfig.cpp +++ b/Source/Core/VideoCommon/Src/VideoConfig.cpp @@ -120,30 +120,45 @@ void VideoConfig::Load(const char *ini_file) OSD::AddMessage("Warning: Shader Debugging is enabled, performance will suffer heavily", 15000); } -void VideoConfig::GameIniLoad(const char *ini_file) +void VideoConfig::GameIniLoad(const char* default_ini_file, const char* local_ini_file) { - IniFile iniFile; - iniFile.Load(ini_file); + bool gfx_override_exists = false; + + // XXX: Again, bad place to put OSD messages at (see delroth's comment above) + // XXX: This will add an OSD message for each projection hack value... meh +#define CHECK_SETTING(section, key, var) do { \ + decltype(var) temp = var; \ + if (iniFile.GetIfExists(section, key, &var) && var != temp) { \ + char buf[256]; \ + snprintf(buf, sizeof(buf), "Note: Option \"%s\" is overridden by game ini.", key); \ + OSD::AddMessage(buf, 7500); \ + gfx_override_exists = true; \ + } \ + } while (0) - iniFile.GetIfExists("Video_Hardware", "VSync", &bVSync); - - iniFile.GetIfExists("Video_Settings", "wideScreenHack", &bWidescreenHack); - iniFile.GetIfExists("Video_Settings", "AspectRatio", &iAspectRatio); - iniFile.GetIfExists("Video_Settings", "Crop", &bCrop); - iniFile.GetIfExists("Video_Settings", "UseXFB", &bUseXFB); - iniFile.GetIfExists("Video_Settings", "UseRealXFB", &bUseRealXFB); - iniFile.GetIfExists("Video_Settings", "SafeTextureCacheColorSamples", &iSafeTextureCache_ColorSamples); - iniFile.GetIfExists("Video_Settings", "DLOptimize", &iCompileDLsLevel); - iniFile.GetIfExists("Video_Settings", "HiresTextures", &bHiresTextures); - iniFile.GetIfExists("Video_Settings", "AnaglyphStereo", &bAnaglyphStereo); - iniFile.GetIfExists("Video_Settings", "AnaglyphStereoSeparation", &iAnaglyphStereoSeparation); - iniFile.GetIfExists("Video_Settings", "AnaglyphFocalAngle", &iAnaglyphFocalAngle); - iniFile.GetIfExists("Video_Settings", "EnablePixelLighting", &bEnablePixelLighting); - iniFile.GetIfExists("Video_Settings", "HackedBufferUpload", &bHackedBufferUpload); - iniFile.GetIfExists("Video_Settings", "FastDepthCalc", &bFastDepthCalc); - iniFile.GetIfExists("Video_Settings", "MSAA", &iMultisampleMode); + IniFile iniFile; + iniFile.Load(default_ini_file); + iniFile.Load(local_ini_file, true); + + CHECK_SETTING("Video_Hardware", "VSync", bVSync); + + CHECK_SETTING("Video_Settings", "wideScreenHack", bWidescreenHack); + CHECK_SETTING("Video_Settings", "AspectRatio", iAspectRatio); + CHECK_SETTING("Video_Settings", "Crop", bCrop); + CHECK_SETTING("Video_Settings", "UseXFB", bUseXFB); + CHECK_SETTING("Video_Settings", "UseRealXFB", bUseRealXFB); + CHECK_SETTING("Video_Settings", "SafeTextureCacheColorSamples", iSafeTextureCache_ColorSamples); + CHECK_SETTING("Video_Settings", "DLOptimize", iCompileDLsLevel); + CHECK_SETTING("Video_Settings", "HiresTextures", bHiresTextures); + CHECK_SETTING("Video_Settings", "AnaglyphStereo", bAnaglyphStereo); + CHECK_SETTING("Video_Settings", "AnaglyphStereoSeparation", iAnaglyphStereoSeparation); + CHECK_SETTING("Video_Settings", "AnaglyphFocalAngle", iAnaglyphFocalAngle); + CHECK_SETTING("Video_Settings", "EnablePixelLighting", bEnablePixelLighting); + CHECK_SETTING("Video_Settings", "HackedBufferUpload", bHackedBufferUpload); + CHECK_SETTING("Video_Settings", "FastDepthCalc", bFastDepthCalc); + CHECK_SETTING("Video_Settings", "MSAA", iMultisampleMode); int tmp = -9000; - iniFile.GetIfExists("Video_Settings", "EFBScale", &tmp); // integral + CHECK_SETTING("Video_Settings", "EFBScale", tmp); // integral if (tmp != -9000) { if (tmp != SCALE_FORCE_INTEGRAL) @@ -169,33 +184,36 @@ void VideoConfig::GameIniLoad(const char *ini_file) } } - iniFile.GetIfExists("Video_Settings", "DstAlphaPass", &bDstAlphaPass); - iniFile.GetIfExists("Video_Settings", "DisableFog", &bDisableFog); - iniFile.GetIfExists("Video_Settings", "EnableOpenCL", &bEnableOpenCL); - iniFile.GetIfExists("Video_Settings", "OMPDecoder", &bOMPDecoder); - - iniFile.GetIfExists("Video_Enhancements", "ForceFiltering", &bForceFiltering); - iniFile.GetIfExists("Video_Enhancements", "MaxAnisotropy", &iMaxAnisotropy); // NOTE - this is x in (1 << x) - iniFile.GetIfExists("Video_Enhancements", "PostProcessingShader", &sPostProcessingShader); - iniFile.GetIfExists("Video_Enhancements", "Enable3dVision", &b3DVision); - - iniFile.GetIfExists("Video_Hacks", "EFBAccessEnable", &bEFBAccessEnable); - iniFile.GetIfExists("Video_Hacks", "DlistCachingEnable", &bDlistCachingEnable); - iniFile.GetIfExists("Video_Hacks", "EFBCopyEnable", &bEFBCopyEnable); - iniFile.GetIfExists("Video_Hacks", "EFBToTextureEnable", &bCopyEFBToTexture); - iniFile.GetIfExists("Video_Hacks", "EFBScaledCopy", &bCopyEFBScaled); - iniFile.GetIfExists("Video_Hacks", "EFBCopyCacheEnable", &bEFBCopyCacheEnable); - iniFile.GetIfExists("Video_Hacks", "EFBEmulateFormatChanges", &bEFBEmulateFormatChanges); - - iniFile.GetIfExists("Video", "ProjectionHack", &iPhackvalue[0]); - iniFile.GetIfExists("Video", "PH_SZNear", &iPhackvalue[1]); - iniFile.GetIfExists("Video", "PH_SZFar", &iPhackvalue[2]); - iniFile.GetIfExists("Video", "PH_ExtraParam", &iPhackvalue[3]); - iniFile.GetIfExists("Video", "PH_ZNear", &sPhackvalue[0]); - iniFile.GetIfExists("Video", "PH_ZFar", &sPhackvalue[1]); - iniFile.GetIfExists("Video", "ZTPSpeedupHack", &bZTPSpeedHack); - iniFile.GetIfExists("Video", "UseBBox", &bUseBBox); - iniFile.GetIfExists("Video", "PerfQueriesEnable", &bPerfQueriesEnable); + CHECK_SETTING("Video_Settings", "DstAlphaPass", bDstAlphaPass); + CHECK_SETTING("Video_Settings", "DisableFog", bDisableFog); + CHECK_SETTING("Video_Settings", "EnableOpenCL", bEnableOpenCL); + CHECK_SETTING("Video_Settings", "OMPDecoder", bOMPDecoder); + + CHECK_SETTING("Video_Enhancements", "ForceFiltering", bForceFiltering); + CHECK_SETTING("Video_Enhancements", "MaxAnisotropy", iMaxAnisotropy); // NOTE - this is x in (1 << x) + CHECK_SETTING("Video_Enhancements", "PostProcessingShader", sPostProcessingShader); + CHECK_SETTING("Video_Enhancements", "Enable3dVision", b3DVision); + + CHECK_SETTING("Video_Hacks", "EFBAccessEnable", bEFBAccessEnable); + CHECK_SETTING("Video_Hacks", "DlistCachingEnable", bDlistCachingEnable); + CHECK_SETTING("Video_Hacks", "EFBCopyEnable", bEFBCopyEnable); + CHECK_SETTING("Video_Hacks", "EFBToTextureEnable", bCopyEFBToTexture); + CHECK_SETTING("Video_Hacks", "EFBScaledCopy", bCopyEFBScaled); + CHECK_SETTING("Video_Hacks", "EFBCopyCacheEnable", bEFBCopyCacheEnable); + CHECK_SETTING("Video_Hacks", "EFBEmulateFormatChanges", bEFBEmulateFormatChanges); + + CHECK_SETTING("Video", "ProjectionHack", iPhackvalue[0]); + CHECK_SETTING("Video", "PH_SZNear", iPhackvalue[1]); + CHECK_SETTING("Video", "PH_SZFar", iPhackvalue[2]); + CHECK_SETTING("Video", "PH_ExtraParam", iPhackvalue[3]); + CHECK_SETTING("Video", "PH_ZNear", sPhackvalue[0]); + CHECK_SETTING("Video", "PH_ZFar", sPhackvalue[1]); + CHECK_SETTING("Video", "ZTPSpeedupHack", bZTPSpeedHack); + CHECK_SETTING("Video", "UseBBox", bUseBBox); + CHECK_SETTING("Video", "PerfQueriesEnable", bPerfQueriesEnable); + + if (gfx_override_exists) + OSD::AddMessage("Warning: Opening the graphics configuration will reset settings and might cause issues!", 10000); } void VideoConfig::VerifyValidity() @@ -262,7 +280,7 @@ void VideoConfig::Save(const char *ini_file) iniFile.Set("Hacks", "EFBAccessEnable", bEFBAccessEnable); iniFile.Set("Hacks", "DlistCachingEnable", bDlistCachingEnable); iniFile.Set("Hacks", "EFBCopyEnable", bEFBCopyEnable); - iniFile.Set("Hacks", "EFBToTextureEnable", bCopyEFBToTexture); + iniFile.Set("Hacks", "EFBToTextureEnable", bCopyEFBToTexture); iniFile.Set("Hacks", "EFBScaledCopy", bCopyEFBScaled); iniFile.Set("Hacks", "EFBCopyCacheEnable", bEFBCopyCacheEnable); iniFile.Set("Hacks", "EFBEmulateFormatChanges", bEFBEmulateFormatChanges); @@ -273,60 +291,6 @@ void VideoConfig::Save(const char *ini_file) iniFile.Save(ini_file); } -void VideoConfig::GameIniSave(const char* default_ini, const char* game_ini) -{ - // wxWidgets doesn't provide us with a nice way to change 3-state checkboxes into 2-state ones - // This would allow us to make the "default config" dialog layout to be 2-state based, but the - // "game config" layout to be 3-state based (with the 3rd state being "use default") - // Since we can't do that, we instead just save anything which differs from the default config - // TODO: Make this less ugly - - VideoConfig defCfg; - defCfg.Load(default_ini); - - IniFile iniFile; - iniFile.Load(game_ini); - - #define SET_IF_DIFFERS(section, key, member) { if ((member) != (defCfg.member)) iniFile.Set((section), (key), (member)); else iniFile.DeleteKey((section), (key)); } - - SET_IF_DIFFERS("Video_Hardware", "VSync", bVSync); - - SET_IF_DIFFERS("Video_Settings", "wideScreenHack", bWidescreenHack); - SET_IF_DIFFERS("Video_Settings", "AspectRatio", iAspectRatio); - SET_IF_DIFFERS("Video_Settings", "Crop", bCrop); - SET_IF_DIFFERS("Video_Settings", "UseXFB", bUseXFB); - SET_IF_DIFFERS("Video_Settings", "UseRealXFB", bUseRealXFB); - SET_IF_DIFFERS("Video_Settings", "SafeTextureCacheColorSamples", iSafeTextureCache_ColorSamples); - SET_IF_DIFFERS("Video_Settings", "DLOptimize", iCompileDLsLevel); - SET_IF_DIFFERS("Video_Settings", "HiresTextures", bHiresTextures); - SET_IF_DIFFERS("Video_Settings", "AnaglyphStereo", bAnaglyphStereo); - SET_IF_DIFFERS("Video_Settings", "AnaglyphStereoSeparation", iAnaglyphStereoSeparation); - SET_IF_DIFFERS("Video_Settings", "AnaglyphFocalAngle", iAnaglyphFocalAngle); - SET_IF_DIFFERS("Video_Settings", "EnablePixelLighting", bEnablePixelLighting); - SET_IF_DIFFERS("Video_Settings", "FastDepthCalc", bFastDepthCalc); - SET_IF_DIFFERS("Video_Settings", "MSAA", iMultisampleMode); - SET_IF_DIFFERS("Video_Settings", "EFBScale", iEFBScale); // integral - SET_IF_DIFFERS("Video_Settings", "DstAlphaPass", bDstAlphaPass); - SET_IF_DIFFERS("Video_Settings", "DisableFog", bDisableFog); - SET_IF_DIFFERS("Video_Settings", "EnableOpenCL", bEnableOpenCL); - SET_IF_DIFFERS("Video_Settings", "OMPDecoder", bOMPDecoder); - - SET_IF_DIFFERS("Video_Enhancements", "ForceFiltering", bForceFiltering); - SET_IF_DIFFERS("Video_Enhancements", "MaxAnisotropy", iMaxAnisotropy); // NOTE - this is x in (1 << x) - SET_IF_DIFFERS("Video_Enhancements", "PostProcessingShader", sPostProcessingShader); - SET_IF_DIFFERS("Video_Enhancements", "Enable3dVision", b3DVision); - - SET_IF_DIFFERS("Video_Hacks", "EFBAccessEnable", bEFBAccessEnable); - SET_IF_DIFFERS("Video_Hacks", "DlistCachingEnable", bDlistCachingEnable); - SET_IF_DIFFERS("Video_Hacks", "EFBCopyEnable", bEFBCopyEnable); - SET_IF_DIFFERS("Video_Hacks", "EFBToTextureEnable", bCopyEFBToTexture); - SET_IF_DIFFERS("Video_Hacks", "EFBScaledCopy", bCopyEFBScaled); - SET_IF_DIFFERS("Video_Hacks", "EFBCopyCacheEnable", bEFBCopyCacheEnable); - SET_IF_DIFFERS("Video_Hacks", "EFBEmulateFormatChanges", bEFBEmulateFormatChanges); - - iniFile.Save(game_ini); -} - bool VideoConfig::IsVSync() { return Core::isTabPressed ? false : bVSync; |
