diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.kt index 60042ceb8e..e0171f9831 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.kt @@ -595,6 +595,18 @@ enum class BooleanSetting( "ArbitraryMipmapDetection", true ), + GFX_CC_CORRECT_COLOR_SPACE( + Settings.FILE_GFX, + Settings.SECTION_GFX_COLOR_CORRECTION, + "CorrectColorSpace", + false + ), + GFX_CC_CORRECT_GAMMA( + Settings.FILE_GFX, + Settings.SECTION_GFX_COLOR_CORRECTION, + "CorrectGamma", + false + ), GFX_STEREO_SWAP_EYES(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoSwapEyes", false), GFX_HACK_EFB_ACCESS_ENABLE( Settings.FILE_GFX, diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.kt index 99b73251e7..ec5bda11cc 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.kt @@ -10,7 +10,8 @@ enum class FloatSetting( ) : AbstractFloatSetting { // These entries have the same names and order as in C++, just for consistency. MAIN_EMULATION_SPEED(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "EmulationSpeed", 1.0f), - MAIN_OVERCLOCK(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Overclock", 1.0f); + MAIN_OVERCLOCK(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Overclock", 1.0f), + GFX_CC_GAME_GAMMA(Settings.FILE_GFX, Settings.SECTION_GFX_COLOR_CORRECTION, "GameGamma", 2.35f); override val isOverridden: Boolean get() = NativeConfig.isOverridden(file, section, key) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.kt index 256e68007e..22bb47528b 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.kt @@ -119,6 +119,12 @@ enum class IntSetting( "MaxAnisotropy", 0 ), + GFX_CC_GAME_COLOR_SPACE( + Settings.FILE_GFX, + Settings.SECTION_GFX_COLOR_CORRECTION, + "GameColorSpace", + 0 + ), GFX_STEREO_MODE(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoMode", 0), GFX_STEREO_DEPTH(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoDepth", 20), GFX_STEREO_CONVERGENCE_PERCENTAGE( diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt index b363104703..27291718dc 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt @@ -135,6 +135,7 @@ class Settings : Closeable { const val SECTION_LOGGER_OPTIONS = "Options" const val SECTION_GFX_SETTINGS = "Settings" const val SECTION_GFX_ENHANCEMENTS = "Enhancements" + const val SECTION_GFX_COLOR_CORRECTION = "ColorCorrection" const val SECTION_GFX_HACKS = "Hacks" const val SECTION_DEBUG = "Debug" const val SECTION_EMULATED_USB_DEVICES = "EmulatedUSBDevices" diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.kt index 3b67dbd9e8..8101d9efbf 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.kt @@ -272,6 +272,7 @@ class SettingsFragment : Fragment(), SettingsFragmentView { titles[MenuTag.DEBUG] = R.string.debug_submenu titles[MenuTag.GRAPHICS] = R.string.graphics_settings titles[MenuTag.ENHANCEMENTS] = R.string.enhancements_submenu + titles[MenuTag.COLOR_CORRECTION] = R.string.color_correction_submenu titles[MenuTag.STEREOSCOPY] = R.string.stereoscopy_submenu titles[MenuTag.HACKS] = R.string.hacks_submenu titles[MenuTag.STATISTICS] = R.string.statistics_submenu diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt index 0947e4f294..99b95bb7e3 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt @@ -72,9 +72,8 @@ class SettingsFragmentPresenter( && GpuDriverHelper.supportsCustomDriverLoading() ) { this.gpuDriver = - GpuDriverHelper.getInstalledDriverMetadata() ?: GpuDriverHelper.getSystemDriverMetadata( - context.applicationContext - ) + GpuDriverHelper.getInstalledDriverMetadata() + ?: GpuDriverHelper.getSystemDriverMetadata(context.applicationContext) } } @@ -713,12 +712,12 @@ class SettingsFragmentPresenter( ) ) sl.add( - SwitchSetting( - context, - BooleanSetting.MAIN_WII_WIILINK_ENABLE, - R.string.wii_enable_wiilink, - R.string.wii_enable_wiilink_description - ) + SwitchSetting( + context, + BooleanSetting.MAIN_WII_WIILINK_ENABLE, + R.string.wii_enable_wiilink, + R.string.wii_enable_wiilink_description + ) ) sl.add( SingleChoiceSetting( @@ -1333,6 +1332,13 @@ class SettingsFragmentPresenter( R.array.textureFilteringValues ) ) + sl.add( + SubmenuSetting( + context, + R.string.color_correction_submenu, + MenuTag.COLOR_CORRECTION + ) + ) val stereoModeValue = IntSetting.GFX_STEREO_MODE.int val anaglyphMode = 3 @@ -1429,6 +1435,53 @@ class SettingsFragmentPresenter( } } + private fun addColorCorrectionSettings(sl: ArrayList) { + sl.apply { + add(HeaderSetting(context, R.string.color_space, 0)) + add( + SwitchSetting( + context, + BooleanSetting.GFX_CC_CORRECT_COLOR_SPACE, + R.string.correct_color_space, + R.string.correct_color_space_description + ) + ) + add( + SingleChoiceSetting( + context, + IntSetting.GFX_CC_GAME_COLOR_SPACE, + R.string.game_color_space, + 0, + R.array.colorSpaceEntries, + R.array.colorSpaceValues + ) + ) + + add(HeaderSetting(context, R.string.gamma, 0)) + add( + FloatSliderSetting( + context, + FloatSetting.GFX_CC_GAME_GAMMA, + R.string.game_gamma, + R.string.game_gamma_description, + 2.2f, + 2.8f, + "", + 0.01f, + true + ) + ) + add( + SwitchSetting( + context, + BooleanSetting.GFX_CC_CORRECT_GAMMA, + R.string.correct_sdr_gamma, + 0 + ) + ) + } + } + private fun addHackSettings(sl: ArrayList) { sl.add(HeaderSetting(context, R.string.embedded_frame_buffer, 0)) sl.add( diff --git a/Source/Android/app/src/main/res/values/arrays.xml b/Source/Android/app/src/main/res/values/arrays.xml index fd2618af70..34fb65e614 100644 --- a/Source/Android/app/src/main/res/values/arrays.xml +++ b/Source/Android/app/src/main/res/values/arrays.xml @@ -685,4 +685,15 @@ 21 22 + + + @string/ntscm_space + @string/ntscj_space + @string/pal_space + + + 0 + 1 + 2 + diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 9145d10af0..17421bb7ed 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -222,6 +222,20 @@ Disables the blending of adjacent rows when copying the EFB. This is known in some games as \"deflickering\" or \"smoothing\". Disabling the filter is usually safe, and may result in a sharper image. Arbitrary Mipmap Detection Enables detection of arbitrary mipmaps, which some games use for special distance-based effects.\nMay have false positives that result in blurry textures at increased internal resolution, such as in games that use very low resolution mipmaps. Disabling this can also reduce stutter in games that frequently load new textures.\n\nIf unsure, leave this checked. + Color Correction + Color Space + Correct Color Space + Converts the colors from the color spaces that GC/Wii were meant to work with to sRGB/Rec.709. + Game Color Space + NTSC-M (SMPTE 170M) + NTSC-J (ARUB TR-89) + PAL (EBU) + Gamma + Game Gamma + NTSC-M and NTSC-J target gamma ~2.2. PAL targets gamma ~2.8.\nNone of the two were necessarily followed by games or TVs. 2.35 is a good generic value for all regions.\nIf a game allows you to chose a gamma value, match it here. + Correct SDR Gamma + SDR Display Gamma Target + Custom Gamma Target Stereoscopy Stereoscopy allows you to get a better feeling of depth if you have the necessary hardware.\nHeavily decreases emulation speed and sometimes causes issues Widescreen Hack