From daa5e02853c3788693e5a5a5d061ab66cdb47def Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Mon, 14 Sep 2020 18:20:42 +1000 Subject: [PATCH] GameSettings: Add trait for disabling PGXP texture correction --- src/frontend-common/game_list.h | 2 +- src/frontend-common/game_settings.cpp | 18 +++++++++++++----- src/frontend-common/game_settings.h | 3 +-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/frontend-common/game_list.h b/src/frontend-common/game_list.h index 7b00c602a..54955c0b7 100644 --- a/src/frontend-common/game_list.h +++ b/src/frontend-common/game_list.h @@ -112,7 +112,7 @@ private: enum : u32 { GAME_LIST_CACHE_SIGNATURE = 0x45434C47, - GAME_LIST_CACHE_VERSION = 8 + GAME_LIST_CACHE_VERSION = 9 }; using DatabaseMap = std::unordered_map; diff --git a/src/frontend-common/game_settings.cpp b/src/frontend-common/game_settings.cpp index 591bb6e4c..5652e7a7d 100644 --- a/src/frontend-common/game_settings.cpp +++ b/src/frontend-common/game_settings.cpp @@ -29,6 +29,7 @@ std::array, static_cast(Trait::Count)> {"DisableWidescreen", TRANSLATABLE("GameSettingsTrait", "Disable Widescreen")}, {"DisablePGXP", TRANSLATABLE("GameSettingsTrait", "Disable PGXP")}, {"DisablePGXPCulling", TRANSLATABLE("GameSettingsTrait", "Disable PGXP Culling")}, + {"DisablePGXPTextureCorrection", TRANSLATABLE("GameSettingsTrait", "Disable PGXP Texture Correction")}, {"ForcePGXPVertexCache", TRANSLATABLE("GameSettingsTrait", "Force PGXP Vertex Cache")}, {"ForcePGXPCPUMode", TRANSLATABLE("GameSettingsTrait", "Force PGXP CPU Mode")}, {"ForceDigitalController", TRANSLATABLE("GameSettingsTrait", "Force Digital Controller")}, @@ -48,11 +49,6 @@ const char* GetTraitDisplayName(Trait trait) return s_trait_names[static_cast(trait)].second; } -bool Entry::HasAnySettings() const -{ - return traits.any() || display_active_start_offset >= 0 || display_active_end_offset > 0; -} - template bool ReadOptionalFromStream(ByteStream* stream, std::optional* dest) { @@ -549,6 +545,18 @@ void Entry::ApplySettings(bool display_osd_messages) const g_settings.gpu_pgxp_culling = false; } + if (HasTrait(Trait::DisablePGXPTextureCorrection)) + { + if (display_osd_messages && g_settings.gpu_pgxp_culling && g_settings.gpu_pgxp_texture_correction) + { + g_host_interface->AddOSDMessage( + g_host_interface->TranslateStdString("OSDMessage", "PGXP texture correction disabled by game settings."), + osd_duration); + } + + g_settings.gpu_pgxp_texture_correction = false; + } + if (HasTrait(Trait::ForcePGXPVertexCache)) { if (display_osd_messages && g_settings.gpu_pgxp_enable && !g_settings.gpu_pgxp_vertex_cache) diff --git a/src/frontend-common/game_settings.h b/src/frontend-common/game_settings.h index 9e466d743..fb02776f7 100644 --- a/src/frontend-common/game_settings.h +++ b/src/frontend-common/game_settings.h @@ -20,6 +20,7 @@ enum class Trait : u32 DisableWidescreen, DisablePGXP, DisablePGXPCulling, + DisablePGXPTextureCorrection, ForcePGXPVertexCache, ForcePGXPCPUMode, ForceDigitalController, @@ -62,8 +63,6 @@ struct Entry ALWAYS_INLINE void RemoveTrait(Trait trait) { traits[static_cast(trait)] = false; } ALWAYS_INLINE void SetTrait(Trait trait, bool enabled) { traits[static_cast(trait)] = enabled; } - bool HasAnySettings() const; - bool LoadFromStream(ByteStream* stream); bool SaveToStream(ByteStream* stream) const;