2014-09-13 00:06:13 +00:00
|
|
|
// Copyright 2014 Citra Emulator Project
|
2014-12-17 05:38:14 +00:00
|
|
|
// Licensed under GPLv2 or any later version
|
2014-09-13 00:06:13 +00:00
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
2018-12-29 00:24:56 +00:00
|
|
|
#include <utility>
|
2019-03-07 03:03:22 +00:00
|
|
|
#if HAVE_CUBEB
|
2019-02-27 22:13:51 +00:00
|
|
|
#include "audio_core/cubeb_input.h"
|
2019-03-07 03:03:22 +00:00
|
|
|
#endif
|
2017-12-20 18:44:32 +00:00
|
|
|
#include "audio_core/dsp_interface.h"
|
|
|
|
#include "core/core.h"
|
2019-02-27 22:13:51 +00:00
|
|
|
#include "core/frontend/emu_window.h"
|
|
|
|
#include "core/frontend/mic.h"
|
2016-04-11 12:38:42 +00:00
|
|
|
#include "core/gdbstub/gdbstub.h"
|
2017-01-20 20:46:39 +00:00
|
|
|
#include "core/hle/service/hid/hid.h"
|
2018-10-11 09:12:07 +00:00
|
|
|
#include "core/hle/service/ir/ir_rst.h"
|
|
|
|
#include "core/hle/service/ir/ir_user.h"
|
2017-05-27 23:31:42 +00:00
|
|
|
#include "core/settings.h"
|
2018-08-24 13:18:46 +00:00
|
|
|
#include "video_core/renderer_base.h"
|
2016-04-11 12:38:42 +00:00
|
|
|
#include "video_core/video_core.h"
|
|
|
|
|
2014-09-13 00:06:13 +00:00
|
|
|
namespace Settings {
|
|
|
|
|
|
|
|
Values values = {};
|
|
|
|
|
2016-04-11 12:38:42 +00:00
|
|
|
void Apply() {
|
|
|
|
|
2017-01-31 17:44:23 +00:00
|
|
|
GDBStub::SetServerPort(values.gdbstub_port);
|
2016-04-11 12:38:42 +00:00
|
|
|
GDBStub::ToggleServer(values.use_gdbstub);
|
|
|
|
|
|
|
|
VideoCore::g_hw_renderer_enabled = values.use_hw_renderer;
|
|
|
|
VideoCore::g_shader_jit_enabled = values.use_shader_jit;
|
2018-05-13 07:47:06 +00:00
|
|
|
VideoCore::g_hw_shader_enabled = values.use_hw_shader;
|
|
|
|
VideoCore::g_hw_shader_accurate_gs = values.shaders_accurate_gs;
|
|
|
|
VideoCore::g_hw_shader_accurate_mul = values.shaders_accurate_mul;
|
2016-04-27 12:53:23 +00:00
|
|
|
|
2018-08-24 13:18:46 +00:00
|
|
|
if (VideoCore::g_renderer) {
|
|
|
|
VideoCore::g_renderer->UpdateCurrentFramebufferLayout();
|
2016-05-03 06:07:17 +00:00
|
|
|
}
|
|
|
|
|
2018-08-04 07:11:51 +00:00
|
|
|
VideoCore::g_renderer_bg_color_update_requested = true;
|
|
|
|
|
2018-10-11 09:12:07 +00:00
|
|
|
auto& system = Core::System::GetInstance();
|
|
|
|
if (system.IsPoweredOn()) {
|
2018-07-02 13:03:14 +00:00
|
|
|
Core::DSP().SetSink(values.sink_id, values.audio_device_id);
|
2017-12-20 18:44:32 +00:00
|
|
|
Core::DSP().EnableStretching(values.enable_audio_stretching);
|
2017-01-20 20:46:39 +00:00
|
|
|
|
2018-10-12 09:50:50 +00:00
|
|
|
auto hid = Service::HID::GetModule(system);
|
2018-10-11 09:12:07 +00:00
|
|
|
if (hid) {
|
2018-10-12 09:50:50 +00:00
|
|
|
hid->ReloadInputDevices();
|
2018-10-11 09:12:07 +00:00
|
|
|
}
|
|
|
|
|
2018-10-12 09:50:50 +00:00
|
|
|
auto sm = system.ServiceManager();
|
2018-10-11 09:12:07 +00:00
|
|
|
auto ir_user = sm.GetService<Service::IR::IR_USER>("ir:USER");
|
|
|
|
if (ir_user)
|
|
|
|
ir_user->ReloadInputDevices();
|
|
|
|
auto ir_rst = sm.GetService<Service::IR::IR_RST>("ir:rst");
|
|
|
|
if (ir_rst)
|
|
|
|
ir_rst->ReloadInputDevices();
|
|
|
|
|
2018-10-12 09:50:50 +00:00
|
|
|
auto cam = Service::CAM::GetModule(system);
|
2018-10-11 09:12:07 +00:00
|
|
|
if (cam) {
|
2018-10-12 09:50:50 +00:00
|
|
|
cam->ReloadCameraDevices();
|
2018-10-11 09:12:07 +00:00
|
|
|
}
|
|
|
|
}
|
2019-02-27 22:13:51 +00:00
|
|
|
// TODO support mic hotswapping by creating the new impl, and copying any parameters to it.
|
|
|
|
switch (Settings::values.mic_input_type) {
|
2019-03-06 18:16:43 +00:00
|
|
|
case Settings::MicInputType::None:
|
2019-03-05 05:47:24 +00:00
|
|
|
Frontend::Mic::RegisterMic(std::make_shared<Frontend::Mic::NullMic>());
|
2019-02-27 22:13:51 +00:00
|
|
|
break;
|
2019-03-06 18:16:43 +00:00
|
|
|
case Settings::MicInputType::Real:
|
2019-03-07 03:03:22 +00:00
|
|
|
#if HAVE_CUBEB
|
2019-03-05 05:47:24 +00:00
|
|
|
Frontend::Mic::RegisterMic(std::make_shared<AudioCore::CubebInput>());
|
2019-03-07 03:03:22 +00:00
|
|
|
#endif
|
2019-03-05 05:47:24 +00:00
|
|
|
break;
|
2019-03-06 18:16:43 +00:00
|
|
|
case Settings::MicInputType::Static:
|
2019-03-05 05:47:24 +00:00
|
|
|
Frontend::Mic::RegisterMic(std::make_shared<Frontend::Mic::StaticMic>());
|
2019-02-27 22:13:51 +00:00
|
|
|
break;
|
|
|
|
}
|
2014-09-13 00:06:13 +00:00
|
|
|
}
|
2016-04-11 12:38:42 +00:00
|
|
|
|
2018-07-17 23:39:41 +00:00
|
|
|
template <typename T>
|
|
|
|
void LogSetting(const std::string& name, const T& value) {
|
|
|
|
LOG_INFO(Config, "{}: {}", name, value);
|
|
|
|
}
|
|
|
|
|
|
|
|
void LogSettings() {
|
|
|
|
LOG_INFO(Config, "Citra Configuration:");
|
|
|
|
LogSetting("Core_UseCpuJit", Settings::values.use_cpu_jit);
|
2019-01-30 20:11:39 +00:00
|
|
|
LogSetting("Renderer_UseGLES", Settings::values.use_gles);
|
2018-07-17 23:39:41 +00:00
|
|
|
LogSetting("Renderer_UseHwRenderer", Settings::values.use_hw_renderer);
|
|
|
|
LogSetting("Renderer_UseHwShader", Settings::values.use_hw_shader);
|
|
|
|
LogSetting("Renderer_ShadersAccurateGs", Settings::values.shaders_accurate_gs);
|
|
|
|
LogSetting("Renderer_ShadersAccurateMul", Settings::values.shaders_accurate_mul);
|
|
|
|
LogSetting("Renderer_UseShaderJit", Settings::values.use_shader_jit);
|
|
|
|
LogSetting("Renderer_UseResolutionFactor", Settings::values.resolution_factor);
|
2018-11-29 16:07:18 +00:00
|
|
|
LogSetting("Renderer_VsyncEnabled", Settings::values.vsync_enabled);
|
2018-07-17 23:39:41 +00:00
|
|
|
LogSetting("Renderer_UseFrameLimit", Settings::values.use_frame_limit);
|
|
|
|
LogSetting("Renderer_FrameLimit", Settings::values.frame_limit);
|
|
|
|
LogSetting("Layout_Toggle3d", Settings::values.toggle_3d);
|
|
|
|
LogSetting("Layout_Factor3d", Settings::values.factor_3d);
|
|
|
|
LogSetting("Layout_LayoutOption", static_cast<int>(Settings::values.layout_option));
|
|
|
|
LogSetting("Layout_SwapScreen", Settings::values.swap_screen);
|
2018-12-06 16:13:13 +00:00
|
|
|
LogSetting("Audio_EnableDspLle", Settings::values.enable_dsp_lle);
|
2018-12-20 00:45:22 +00:00
|
|
|
LogSetting("Audio_EnableDspLleMultithread", Settings::values.enable_dsp_lle_multithread);
|
2018-07-17 23:39:41 +00:00
|
|
|
LogSetting("Audio_OutputEngine", Settings::values.sink_id);
|
|
|
|
LogSetting("Audio_EnableAudioStretching", Settings::values.enable_audio_stretching);
|
|
|
|
LogSetting("Audio_OutputDevice", Settings::values.audio_device_id);
|
|
|
|
using namespace Service::CAM;
|
|
|
|
LogSetting("Camera_OuterRightName", Settings::values.camera_name[OuterRightCamera]);
|
|
|
|
LogSetting("Camera_OuterRightConfig", Settings::values.camera_config[OuterRightCamera]);
|
|
|
|
LogSetting("Camera_OuterRightFlip", Settings::values.camera_flip[OuterRightCamera]);
|
|
|
|
LogSetting("Camera_InnerName", Settings::values.camera_name[InnerCamera]);
|
|
|
|
LogSetting("Camera_InnerConfig", Settings::values.camera_config[InnerCamera]);
|
|
|
|
LogSetting("Camera_InnerFlip", Settings::values.camera_flip[InnerCamera]);
|
|
|
|
LogSetting("Camera_OuterLeftName", Settings::values.camera_name[OuterLeftCamera]);
|
|
|
|
LogSetting("Camera_OuterLeftConfig", Settings::values.camera_config[OuterLeftCamera]);
|
|
|
|
LogSetting("Camera_OuterLeftFlip", Settings::values.camera_flip[OuterLeftCamera]);
|
|
|
|
LogSetting("DataStorage_UseVirtualSd", Settings::values.use_virtual_sd);
|
|
|
|
LogSetting("System_IsNew3ds", Settings::values.is_new_3ds);
|
|
|
|
LogSetting("System_RegionValue", Settings::values.region_value);
|
|
|
|
LogSetting("Debugging_UseGdbstub", Settings::values.use_gdbstub);
|
|
|
|
LogSetting("Debugging_GdbstubPort", Settings::values.gdbstub_port);
|
|
|
|
}
|
|
|
|
|
2018-12-29 00:24:56 +00:00
|
|
|
void LoadProfile(int index) {
|
2018-12-29 13:27:06 +00:00
|
|
|
Settings::values.current_input_profile = Settings::values.input_profiles[index];
|
|
|
|
Settings::values.current_input_profile_index = index;
|
2018-12-29 00:24:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SaveProfile(int index) {
|
2018-12-29 13:27:06 +00:00
|
|
|
Settings::values.input_profiles[index] = Settings::values.current_input_profile;
|
2018-12-29 00:24:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void CreateProfile(std::string name) {
|
2018-12-29 13:27:06 +00:00
|
|
|
Settings::InputProfile profile = values.current_input_profile;
|
2018-12-29 00:24:56 +00:00
|
|
|
profile.name = std::move(name);
|
2018-12-29 13:27:06 +00:00
|
|
|
Settings::values.input_profiles.push_back(std::move(profile));
|
|
|
|
Settings::values.current_input_profile_index =
|
|
|
|
static_cast<int>(Settings::values.input_profiles.size()) - 1;
|
|
|
|
Settings::LoadProfile(Settings::values.current_input_profile_index);
|
2018-12-29 00:24:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DeleteProfile(int index) {
|
2018-12-29 13:27:06 +00:00
|
|
|
Settings::values.input_profiles.erase(Settings::values.input_profiles.begin() + index);
|
|
|
|
Settings::LoadProfile(0);
|
2018-12-29 00:24:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void RenameCurrentProfile(std::string new_name) {
|
2018-12-29 13:27:06 +00:00
|
|
|
Settings::values.input_profiles[Settings::values.current_input_profile_index].name =
|
|
|
|
std::move(new_name);
|
2018-12-29 00:24:56 +00:00
|
|
|
}
|
|
|
|
|
2017-08-25 21:53:07 +00:00
|
|
|
} // namespace Settings
|