ui: Ambient Occlusion settings row

This commit is contained in:
mchughalex 2026-07-17 08:26:00 +01:00
parent 2cab1be8eb
commit 7f6a5b5b7c
2 changed files with 28 additions and 2 deletions

View file

@ -115,6 +115,7 @@ class SimpleSettingsDialog final : public ImGuiDialog {
char gamertag_buf_[32] = {}; char gamertag_buf_[32] = {};
// Live setting values (hot cvars, applied and saved on change). // Live setting values (hot cvars, applied and saved on change).
bool renderer_native_ = true; bool renderer_native_ = true;
bool ssao_ = true;
bool mode_indicator_ = true; bool mode_indicator_ = true;
bool fps_counter_ = false; bool fps_counter_ = false;
bool audio_mute_ = false; bool audio_mute_ = false;

View file

@ -53,11 +53,12 @@ constexpr std::array<std::string_view, 7> kCoreSimpleSettingsCvars = {
// Optional cvars persisted when the host defines them (HasCvar-gated: app // Optional cvars persisted when the host defines them (HasCvar-gated: app
// cvars like the native-renderer knobs don't exist in every embedder, and // cvars like the native-renderer knobs don't exist in every embedder, and
// backend/platform cvars don't exist in every build). // backend/platform cvars don't exist in every build).
constexpr std::array<std::string_view, 13> kOptionalSimpleSettingsCvars = { constexpr std::array<std::string_view, 14> kOptionalSimpleSettingsCvars = {
"skate3_native_render_scene", "skate3_native_render_scene",
"skate3_native_render_scene_msaa", "skate3_native_render_scene_msaa",
"skate3_native_render_scene_shadows", "skate3_native_render_scene_shadows",
"skate3_native_render_scene_shadow_tile", "skate3_native_render_scene_shadow_tile",
"skate3_native_render_scene_ssao",
"skate3_native_render_mode_indicator", "skate3_native_render_mode_indicator",
"show_fps_counter", "show_fps_counter",
"monitor", "monitor",
@ -867,6 +868,8 @@ void SimpleSettingsDialog::LoadSettingsFromCvars() {
mnk_capture_mouse_ = rex::cvar::Query<bool>("mnk_capture_mouse"); mnk_capture_mouse_ = rex::cvar::Query<bool>("mnk_capture_mouse");
renderer_native_ = renderer_native_ =
HasCvar("skate3_native_render_scene") && rex::cvar::Query<bool>("skate3_native_render_scene"); HasCvar("skate3_native_render_scene") && rex::cvar::Query<bool>("skate3_native_render_scene");
ssao_ = HasCvar("skate3_native_render_scene_ssao") &&
rex::cvar::Query<bool>("skate3_native_render_scene_ssao");
mode_indicator_ = HasCvar("skate3_native_render_mode_indicator") && mode_indicator_ = HasCvar("skate3_native_render_mode_indicator") &&
rex::cvar::Query<bool>("skate3_native_render_mode_indicator"); rex::cvar::Query<bool>("skate3_native_render_mode_indicator");
fps_counter_ = HasCvar("show_fps_counter") && rex::cvar::Query<bool>("show_fps_counter"); fps_counter_ = HasCvar("show_fps_counter") && rex::cvar::Query<bool>("show_fps_counter");
@ -1203,7 +1206,8 @@ void SimpleSettingsDialog::BuildRows(std::vector<RowSpec>& rows, int category) {
row.reset = [this] { tearing_ = TearingDefault(); }; row.reset = [this] { tearing_ = TearingDefault(); };
rows.push_back(std::move(row)); rows.push_back(std::move(row));
} }
if (HasRendererChoice() || HasMsaaCvar() || HasShadowQualityCvars()) { if (HasRendererChoice() || HasMsaaCvar() || HasShadowQualityCvars() ||
HasCvar("skate3_native_render_scene_ssao")) {
header("Quality"); header("Quality");
} }
if (HasRendererChoice()) { if (HasRendererChoice()) {
@ -1276,6 +1280,27 @@ void SimpleSettingsDialog::BuildRows(std::vector<RowSpec>& rows, int category) {
}; };
rows.push_back(std::move(row)); rows.push_back(std::move(row));
} }
if (HasCvar("skate3_native_render_scene_ssao")) {
RowSpec row;
row.kind = RowSpec::kEnum;
row.label = "Ambient Occlusion";
row.desc =
"Soft contact shading where surfaces meet (under ledges, rails, "
"vehicles, the skater). Native renderer only; applies "
"immediately.";
row.options = {"Off", "On"};
row.flag = &ssao_;
row.on_enum_change = [this](int value) {
SetBoolCvar("skate3_native_render_scene_ssao", value != 0);
SaveSimpleSettingsConfig(config_path_);
};
row.reset = [this] {
ssao_ = CvarDefaultBool("skate3_native_render_scene_ssao", true);
SetBoolCvar("skate3_native_render_scene_ssao", ssao_);
SaveSimpleSettingsConfig(config_path_);
};
rows.push_back(std::move(row));
}
if (HasFieldOfViewCvar()) { if (HasFieldOfViewCvar()) {
header("Gameplay"); header("Gameplay");
RowSpec row; RowSpec row;