2014-09-13 02:06:13 +02:00
|
|
|
// Copyright 2014 Citra Emulator Project
|
2014-12-17 06:38:14 +01:00
|
|
|
// Licensed under GPLv2 or any later version
|
2014-09-13 02:06:13 +02:00
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
2020-07-19 15:07:16 +02:00
|
|
|
#include <string_view>
|
2018-12-29 01:24:56 +01:00
|
|
|
#include <utility>
|
2017-12-20 19:44:32 +01:00
|
|
|
#include "audio_core/dsp_interface.h"
|
2023-06-30 12:39:38 +02:00
|
|
|
#include "common/file_util.h"
|
2022-12-08 12:27:25 +01:00
|
|
|
#include "common/settings.h"
|
2016-04-11 14:38:42 +02:00
|
|
|
|
2014-09-13 02:06:13 +02:00
|
|
|
namespace Settings {
|
|
|
|
|
2023-03-27 13:29:17 +02:00
|
|
|
namespace {
|
|
|
|
|
2023-03-21 22:12:13 +01:00
|
|
|
std::string_view GetAudioEmulationName(AudioEmulation emulation) {
|
|
|
|
switch (emulation) {
|
|
|
|
case AudioEmulation::HLE:
|
|
|
|
return "HLE";
|
|
|
|
case AudioEmulation::LLE:
|
|
|
|
return "LLE";
|
|
|
|
case AudioEmulation::LLEMultithreaded:
|
|
|
|
return "LLE Multithreaded";
|
2023-05-01 21:38:58 +02:00
|
|
|
default:
|
|
|
|
return "Invalid";
|
2023-03-21 22:12:13 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2023-03-27 13:29:17 +02:00
|
|
|
std::string_view GetGraphicsAPIName(GraphicsAPI api) {
|
|
|
|
switch (api) {
|
|
|
|
case GraphicsAPI::Software:
|
|
|
|
return "Software";
|
|
|
|
case GraphicsAPI::OpenGL:
|
|
|
|
return "OpenGL";
|
2023-09-13 00:28:50 +02:00
|
|
|
case GraphicsAPI::Vulkan:
|
|
|
|
return "Vulkan";
|
2023-05-01 21:38:58 +02:00
|
|
|
default:
|
|
|
|
return "Invalid";
|
2023-03-27 13:29:17 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-04-21 09:14:55 +02:00
|
|
|
std::string_view GetTextureFilterName(TextureFilter filter) {
|
|
|
|
switch (filter) {
|
|
|
|
case TextureFilter::None:
|
|
|
|
return "None";
|
|
|
|
case TextureFilter::Anime4K:
|
|
|
|
return "Anime4K";
|
|
|
|
case TextureFilter::Bicubic:
|
|
|
|
return "Bicubic";
|
|
|
|
case TextureFilter::NearestNeighbor:
|
|
|
|
return "NearestNeighbor";
|
|
|
|
case TextureFilter::ScaleForce:
|
|
|
|
return "ScaleForce";
|
|
|
|
case TextureFilter::xBRZ:
|
|
|
|
return "xBRZ";
|
2023-05-31 10:55:46 +02:00
|
|
|
case TextureFilter::MMPX:
|
|
|
|
return "MMPX";
|
2023-05-01 21:38:58 +02:00
|
|
|
default:
|
|
|
|
return "Invalid";
|
2023-04-21 09:14:55 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-03-27 13:29:17 +02:00
|
|
|
} // Anonymous namespace
|
|
|
|
|
2014-09-13 02:06:13 +02:00
|
|
|
Values values = {};
|
2022-12-08 12:27:25 +01:00
|
|
|
static bool configuring_global = true;
|
2014-09-13 02:06:13 +02:00
|
|
|
|
2018-07-18 01:39:41 +02:00
|
|
|
void LogSettings() {
|
2020-07-19 15:07:16 +02:00
|
|
|
const auto log_setting = [](std::string_view name, const auto& value) {
|
|
|
|
LOG_INFO(Config, "{}: {}", name, value);
|
|
|
|
};
|
|
|
|
|
2018-07-18 01:39:41 +02:00
|
|
|
LOG_INFO(Config, "Citra Configuration:");
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("Core_UseCpuJit", values.use_cpu_jit.GetValue());
|
|
|
|
log_setting("Core_CPUClockPercentage", values.cpu_clock_percentage.GetValue());
|
|
|
|
log_setting("Renderer_UseGLES", values.use_gles.GetValue());
|
2023-03-27 13:29:17 +02:00
|
|
|
log_setting("Renderer_GraphicsAPI", GetGraphicsAPIName(values.graphics_api.GetValue()));
|
2023-09-13 00:28:50 +02:00
|
|
|
log_setting("Renderer_AsyncShaders", values.async_shader_compilation.GetValue());
|
|
|
|
log_setting("Renderer_AsyncPresentation", values.async_presentation.GetValue());
|
|
|
|
log_setting("Renderer_SpirvShaderGen", values.spirv_shader_gen.GetValue());
|
2023-03-30 13:24:49 +02:00
|
|
|
log_setting("Renderer_Debug", values.renderer_debug.GetValue());
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("Renderer_UseHwShader", values.use_hw_shader.GetValue());
|
|
|
|
log_setting("Renderer_ShadersAccurateMul", values.shaders_accurate_mul.GetValue());
|
|
|
|
log_setting("Renderer_UseShaderJit", values.use_shader_jit.GetValue());
|
|
|
|
log_setting("Renderer_UseResolutionFactor", values.resolution_factor.GetValue());
|
|
|
|
log_setting("Renderer_FrameLimit", values.frame_limit.GetValue());
|
|
|
|
log_setting("Renderer_VSyncNew", values.use_vsync_new.GetValue());
|
|
|
|
log_setting("Renderer_PostProcessingShader", values.pp_shader_name.GetValue());
|
|
|
|
log_setting("Renderer_FilterMode", values.filter_mode.GetValue());
|
2023-04-21 09:14:55 +02:00
|
|
|
log_setting("Renderer_TextureFilter", GetTextureFilterName(values.texture_filter.GetValue()));
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("Stereoscopy_Render3d", values.render_3d.GetValue());
|
|
|
|
log_setting("Stereoscopy_Factor3d", values.factor_3d.GetValue());
|
2022-12-24 03:17:49 +01:00
|
|
|
log_setting("Stereoscopy_MonoRenderOption", values.mono_render_option.GetValue());
|
2023-03-13 22:02:07 +01:00
|
|
|
if (values.render_3d.GetValue() == StereoRenderOption::Anaglyph) {
|
|
|
|
log_setting("Renderer_AnaglyphShader", values.anaglyph_shader_name.GetValue());
|
|
|
|
}
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("Layout_LayoutOption", values.layout_option.GetValue());
|
|
|
|
log_setting("Layout_SwapScreen", values.swap_screen.GetValue());
|
|
|
|
log_setting("Layout_UprightScreen", values.upright_screen.GetValue());
|
2023-02-17 15:19:52 +01:00
|
|
|
log_setting("Layout_LargeScreenProportion", values.large_screen_proportion.GetValue());
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("Utility_DumpTextures", values.dump_textures.GetValue());
|
|
|
|
log_setting("Utility_CustomTextures", values.custom_textures.GetValue());
|
2023-05-07 01:34:28 +02:00
|
|
|
log_setting("Utility_PreloadTextures", values.preload_textures.GetValue());
|
|
|
|
log_setting("Utility_AsyncCustomLoading", values.async_custom_loading.GetValue());
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("Utility_UseDiskShaderCache", values.use_disk_shader_cache.GetValue());
|
2023-03-21 22:12:13 +01:00
|
|
|
log_setting("Audio_Emulation", GetAudioEmulationName(values.audio_emulation.GetValue()));
|
2023-05-01 21:17:45 +02:00
|
|
|
log_setting("Audio_OutputType", values.output_type.GetValue());
|
|
|
|
log_setting("Audio_OutputDevice", values.output_device.GetValue());
|
|
|
|
log_setting("Audio_InputType", values.input_type.GetValue());
|
|
|
|
log_setting("Audio_InputDevice", values.input_device.GetValue());
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("Audio_EnableAudioStretching", values.enable_audio_stretching.GetValue());
|
2018-07-18 01:39:41 +02:00
|
|
|
using namespace Service::CAM;
|
2020-07-19 15:07:16 +02:00
|
|
|
log_setting("Camera_OuterRightName", values.camera_name[OuterRightCamera]);
|
|
|
|
log_setting("Camera_OuterRightConfig", values.camera_config[OuterRightCamera]);
|
|
|
|
log_setting("Camera_OuterRightFlip", values.camera_flip[OuterRightCamera]);
|
|
|
|
log_setting("Camera_InnerName", values.camera_name[InnerCamera]);
|
|
|
|
log_setting("Camera_InnerConfig", values.camera_config[InnerCamera]);
|
|
|
|
log_setting("Camera_InnerFlip", values.camera_flip[InnerCamera]);
|
|
|
|
log_setting("Camera_OuterLeftName", values.camera_name[OuterLeftCamera]);
|
|
|
|
log_setting("Camera_OuterLeftConfig", values.camera_config[OuterLeftCamera]);
|
|
|
|
log_setting("Camera_OuterLeftFlip", values.camera_flip[OuterLeftCamera]);
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("DataStorage_UseVirtualSd", values.use_virtual_sd.GetValue());
|
|
|
|
log_setting("DataStorage_UseCustomStorage", values.use_custom_storage.GetValue());
|
2022-10-22 15:39:47 +02:00
|
|
|
if (values.use_custom_storage) {
|
|
|
|
log_setting("DataStorage_SdmcDir", FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir));
|
|
|
|
log_setting("DataStorage_NandDir", FileUtil::GetUserPath(FileUtil::UserPath::NANDDir));
|
|
|
|
}
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("System_IsNew3ds", values.is_new_3ds.GetValue());
|
|
|
|
log_setting("System_RegionValue", values.region_value.GetValue());
|
2022-12-11 09:08:58 +01:00
|
|
|
log_setting("System_PluginLoader", values.plugin_loader_enabled.GetValue());
|
|
|
|
log_setting("System_PluginLoaderAllowed", values.allow_plugin_loader.GetValue());
|
2022-12-08 12:27:25 +01:00
|
|
|
log_setting("Debugging_UseGdbstub", values.use_gdbstub.GetValue());
|
|
|
|
log_setting("Debugging_GdbstubPort", values.gdbstub_port.GetValue());
|
|
|
|
}
|
|
|
|
|
|
|
|
bool IsConfiguringGlobal() {
|
|
|
|
return configuring_global;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetConfiguringGlobal(bool is_global) {
|
|
|
|
configuring_global = is_global;
|
2018-07-18 01:39:41 +02:00
|
|
|
}
|
|
|
|
|
2022-11-04 20:25:57 +01:00
|
|
|
float Volume() {
|
|
|
|
if (values.audio_muted) {
|
|
|
|
return 0.0f;
|
|
|
|
}
|
2022-12-08 12:27:25 +01:00
|
|
|
return values.volume.GetValue();
|
|
|
|
}
|
|
|
|
|
|
|
|
void RestoreGlobalState(bool is_powered_on) {
|
|
|
|
// If a game is running, DO NOT restore the global settings state
|
|
|
|
if (is_powered_on) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Audio
|
|
|
|
values.audio_emulation.SetGlobal(true);
|
|
|
|
values.enable_audio_stretching.SetGlobal(true);
|
|
|
|
values.volume.SetGlobal(true);
|
|
|
|
|
|
|
|
// Core
|
|
|
|
values.cpu_clock_percentage.SetGlobal(true);
|
|
|
|
values.is_new_3ds.SetGlobal(true);
|
|
|
|
|
|
|
|
// Renderer
|
2023-03-27 13:29:17 +02:00
|
|
|
values.graphics_api.SetGlobal(true);
|
2023-09-13 00:28:50 +02:00
|
|
|
values.physical_device.SetGlobal(true);
|
|
|
|
values.spirv_shader_gen.SetGlobal(true);
|
|
|
|
values.async_shader_compilation.SetGlobal(true);
|
|
|
|
values.async_presentation.SetGlobal(true);
|
2022-12-08 12:27:25 +01:00
|
|
|
values.use_hw_shader.SetGlobal(true);
|
|
|
|
values.use_disk_shader_cache.SetGlobal(true);
|
|
|
|
values.shaders_accurate_mul.SetGlobal(true);
|
|
|
|
values.use_vsync_new.SetGlobal(true);
|
|
|
|
values.resolution_factor.SetGlobal(true);
|
|
|
|
values.frame_limit.SetGlobal(true);
|
2023-04-21 09:14:55 +02:00
|
|
|
values.texture_filter.SetGlobal(true);
|
2022-12-08 12:27:25 +01:00
|
|
|
values.layout_option.SetGlobal(true);
|
|
|
|
values.swap_screen.SetGlobal(true);
|
|
|
|
values.upright_screen.SetGlobal(true);
|
2023-02-17 15:19:52 +01:00
|
|
|
values.large_screen_proportion.SetGlobal(true);
|
2022-12-08 12:27:25 +01:00
|
|
|
values.bg_red.SetGlobal(true);
|
|
|
|
values.bg_green.SetGlobal(true);
|
|
|
|
values.bg_blue.SetGlobal(true);
|
|
|
|
values.render_3d.SetGlobal(true);
|
|
|
|
values.factor_3d.SetGlobal(true);
|
|
|
|
values.filter_mode.SetGlobal(true);
|
|
|
|
values.pp_shader_name.SetGlobal(true);
|
2023-03-13 22:02:07 +01:00
|
|
|
values.anaglyph_shader_name.SetGlobal(true);
|
2023-03-21 22:12:13 +01:00
|
|
|
values.dump_textures.SetGlobal(true);
|
|
|
|
values.custom_textures.SetGlobal(true);
|
|
|
|
values.preload_textures.SetGlobal(true);
|
2022-11-04 20:25:57 +01:00
|
|
|
}
|
|
|
|
|
2018-12-29 01:24:56 +01:00
|
|
|
void LoadProfile(int index) {
|
2018-12-29 14:27:06 +01:00
|
|
|
Settings::values.current_input_profile = Settings::values.input_profiles[index];
|
|
|
|
Settings::values.current_input_profile_index = index;
|
2018-12-29 01:24:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void SaveProfile(int index) {
|
2018-12-29 14:27:06 +01:00
|
|
|
Settings::values.input_profiles[index] = Settings::values.current_input_profile;
|
2018-12-29 01:24:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void CreateProfile(std::string name) {
|
2018-12-29 14:27:06 +01:00
|
|
|
Settings::InputProfile profile = values.current_input_profile;
|
2018-12-29 01:24:56 +01:00
|
|
|
profile.name = std::move(name);
|
2018-12-29 14:27:06 +01: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 01:24:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void DeleteProfile(int index) {
|
2018-12-29 14:27:06 +01:00
|
|
|
Settings::values.input_profiles.erase(Settings::values.input_profiles.begin() + index);
|
|
|
|
Settings::LoadProfile(0);
|
2018-12-29 01:24:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void RenameCurrentProfile(std::string new_name) {
|
2019-11-09 19:13:41 +01:00
|
|
|
Settings::values.current_input_profile.name = std::move(new_name);
|
2018-12-29 01:24:56 +01:00
|
|
|
}
|
|
|
|
|
2017-08-25 23:53:07 +02:00
|
|
|
} // namespace Settings
|