diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index c6e5647bc..51510291c 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -438,7 +438,7 @@ void Config::SaveValues() { qt_config->beginGroup("Layout"); WriteSetting("toggle_3d", Settings::values.toggle_3d, false); - WriteSetting("factor_3d", Settings::values.factor_3d, 0); + WriteSetting("factor_3d", Settings::values.factor_3d.load(), 0); WriteSetting("layout_option", static_cast(Settings::values.layout_option)); WriteSetting("swap_screen", Settings::values.swap_screen, false); WriteSetting("custom_layout", Settings::values.custom_layout, false); diff --git a/src/core/hle/kernel/shared_page.cpp b/src/core/hle/kernel/shared_page.cpp index e2af01e0d..caf073658 100644 --- a/src/core/hle/kernel/shared_page.cpp +++ b/src/core/hle/kernel/shared_page.cpp @@ -121,6 +121,10 @@ void Handler::Set3DLed(u8 state) { shared_page.ledstate_3d = state; } +void Handler::Set3DSlider(float slidestate) { + shared_page.sliderstate_3d = static_cast(slidestate); +} + SharedPageDef& Handler::GetSharedPage() { return shared_page; } diff --git a/src/core/hle/kernel/shared_page.h b/src/core/hle/kernel/shared_page.h index 7b6dc2e06..8ea114a4e 100644 --- a/src/core/hle/kernel/shared_page.h +++ b/src/core/hle/kernel/shared_page.h @@ -89,6 +89,8 @@ public: void SetWifiLinkLevel(WifiLinkLevel); + void Set3DSlider(float); + void Set3DLed(u8); SharedPageDef& GetSharedPage(); diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 39ae4c43e..9fc045c81 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -12,6 +12,7 @@ #include "core/hle/kernel/event.h" #include "core/hle/kernel/handle_table.h" #include "core/hle/kernel/shared_memory.h" +#include "core/hle/kernel/shared_page.h" #include "core/hle/service/hid/hid.h" #include "core/hle/service/hid/hid_spvr.h" #include "core/hle/service/hid/hid_user.h" @@ -164,6 +165,10 @@ void Module::UpdatePadCallback(u64 userdata, s64 cycles_late) { event_pad_or_touch_1->Signal(); event_pad_or_touch_2->Signal(); + // TODO(xperia64): How the 3D Slider is updated by the HID module needs to be RE'd + // and possibly moved to its own Core::Timing event. + system.Kernel().GetSharedPageHandler().Set3DSlider(Settings::values.factor_3d / 100.0f); + // Reschedule recurrent event system.CoreTiming().ScheduleEvent(pad_update_ticks - cycles_late, pad_update_event); } diff --git a/src/core/settings.h b/src/core/settings.h index efe637dd4..d1de56349 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include #include @@ -156,7 +157,7 @@ struct Values { float bg_blue; bool toggle_3d; - u8 factor_3d; + std::atomic factor_3d; // Audio bool enable_dsp_lle; diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index da2cfb5c7..8f9073dde 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -179,7 +179,8 @@ TelemetrySession::TelemetrySession() { Settings::values.use_shader_jit); AddField(Telemetry::FieldType::UserConfig, "Renderer_UseVsync", Settings::values.vsync_enabled); AddField(Telemetry::FieldType::UserConfig, "Renderer_Toggle3d", Settings::values.toggle_3d); - AddField(Telemetry::FieldType::UserConfig, "Renderer_Factor3d", Settings::values.factor_3d); + AddField(Telemetry::FieldType::UserConfig, "Renderer_Factor3d", + Settings::values.factor_3d.load()); AddField(Telemetry::FieldType::UserConfig, "System_IsNew3ds", Settings::values.is_new_3ds); AddField(Telemetry::FieldType::UserConfig, "System_RegionValue", Settings::values.region_value); }