Browse Source

[settings] Fix resolution enum for UltraCam

When 0.25x (Res1_4X) was added all the resolutions were shifted.
This broke UltraCam expecting Res1X at index 2 when it was instead at index 3,
Causing a bug where UltraCam would use 0.75x instead of 1x.

NOTE: Current users need to readjust resolution settings.
Credit:
MaxLastBreath - Adressing the issue.
Zephyron - Originally fixing the bug in Citron.
pull/3565/head
JPikachu 3 weeks ago
parent
commit
b98ca27301
  1. 20
      src/common/settings_enums.h
  2. 2
      src/common/settings_setting.h

20
src/common/settings_enums.h

@ -142,7 +142,25 @@ ENUM(MemoryLayout, Memory_4Gb, Memory_6Gb, Memory_8Gb, Memory_10Gb, Memory_12Gb)
ENUM(ConfirmStop, Ask_Always, Ask_Based_On_Game, Ask_Never); ENUM(ConfirmStop, Ask_Always, Ask_Based_On_Game, Ask_Never);
ENUM(FullscreenMode, Borderless, Exclusive); ENUM(FullscreenMode, Borderless, Exclusive);
ENUM(NvdecEmulation, Off, Cpu, Gpu); ENUM(NvdecEmulation, Off, Cpu, Gpu);
ENUM(ResolutionSetup, Res1_4X, Res1_2X, Res3_4X, Res1X, Res5_4X, Res3_2X, Res2X, Res3X, Res4X, Res5X, Res6X, Res7X, Res8X);
// Res1X MUST stay at index 2 to maintain compatibility with various mods.
enum class ResolutionSetup : s32 {
Res1_4X = -1, Res1_2X = 0, Res3_4X = 1,
Res1X = 2, Res5_4X = 3, Res3_2X = 4,
Res2X = 5, Res3X = 6, Res4X = 7,
Res5X = 8, Res6X = 9, Res7X = 10,
Res8X = 11 };
template<> inline std::vector<std::pair<std::string_view, ResolutionSetup>> EnumMetadata<ResolutionSetup>::Canonicalizations() {
return {
{"Res1_4X", ResolutionSetup::Res1_4X}, {"Res1_2X", ResolutionSetup::Res1_2X}, {"Res3_4X", ResolutionSetup::Res3_4X},
{"Res1X", ResolutionSetup::Res1X}, {"Res5_4X", ResolutionSetup::Res5_4X}, {"Res3_2X", ResolutionSetup::Res3_2X},
{"Res2X", ResolutionSetup::Res2X}, {"Res3X", ResolutionSetup::Res3X}, {"Res4X", ResolutionSetup::Res4X},
{"Res5X", ResolutionSetup::Res5X}, {"Res6X", ResolutionSetup::Res6X}, {"Res7X", ResolutionSetup::Res7X},
{"Res8X", ResolutionSetup::Res8X}
};
}
template<> inline u32 EnumMetadata<ResolutionSetup>::Index() { return 19; }
template<> inline ResolutionSetup EnumMetadata<ResolutionSetup>::GetFirst() { return ResolutionSetup::Res1_4X; }
template<> inline ResolutionSetup EnumMetadata<ResolutionSetup>::GetLast() { return ResolutionSetup::Res8X; }
ENUM(ScalingFilter, NearestNeighbor, Bilinear, Bicubic, Gaussian, Lanczos, ScaleForce, Fsr, Area, ZeroTangent, BSpline, Mitchell, Spline1, Mmpx, MaxEnum); ENUM(ScalingFilter, NearestNeighbor, Bilinear, Bicubic, Gaussian, Lanczos, ScaleForce, Fsr, Area, ZeroTangent, BSpline, Mitchell, Spline1, Mmpx, MaxEnum);
ENUM(AntiAliasing, None, Fxaa, Smaa, MaxEnum); ENUM(AntiAliasing, None, Fxaa, Smaa, MaxEnum);
ENUM(AspectRatio, R16_9, R4_3, R21_9, R16_10, Stretch); ENUM(AspectRatio, R16_9, R4_3, R21_9, R16_10, Stretch);

2
src/common/settings_setting.h

@ -129,7 +129,7 @@ protected:
} else if constexpr (std::is_floating_point_v<Type>) { } else if constexpr (std::is_floating_point_v<Type>) {
return fmt::format("{:f}", value_); return fmt::format("{:f}", value_);
} else if constexpr (std::is_enum_v<Type>) { } else if constexpr (std::is_enum_v<Type>) {
return std::to_string(u32(value_));
return std::to_string(static_cast<std::underlying_type_t<Type>>(value_));
} else { } else {
return std::to_string(value_); return std::to_string(value_);
} }

Loading…
Cancel
Save