diff options
Diffstat (limited to '')
| -rw-r--r-- | src/yuzu_cmd/config.cpp | 196 |
1 files changed, 85 insertions, 111 deletions
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index 60bf66ec0..325584a1a 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp | |||
| @@ -241,6 +241,24 @@ static const std::array<int, 8> keyboard_mods{ | |||
| 241 | SDL_SCANCODE_RCTRL, SDL_SCANCODE_RSHIFT, SDL_SCANCODE_RALT, SDL_SCANCODE_RGUI, | 241 | SDL_SCANCODE_RCTRL, SDL_SCANCODE_RSHIFT, SDL_SCANCODE_RALT, SDL_SCANCODE_RGUI, |
| 242 | }; | 242 | }; |
| 243 | 243 | ||
| 244 | template <> | ||
| 245 | void Config::ReadSetting(const std::string& group, Settings::BasicSetting<float>& setting) { | ||
| 246 | setting = sdl2_config->GetReal(group, setting.GetLabel(), setting.GetDefault()); | ||
| 247 | } | ||
| 248 | template <> | ||
| 249 | void Config::ReadSetting(const std::string& group, Settings::BasicSetting<std::string>& setting) { | ||
| 250 | setting = sdl2_config->Get(group, setting.GetLabel(), setting.GetDefault()); | ||
| 251 | } | ||
| 252 | template <> | ||
| 253 | void Config::ReadSetting(const std::string& group, Settings::BasicSetting<bool>& setting) { | ||
| 254 | setting = sdl2_config->GetBoolean(group, setting.GetLabel(), setting.GetDefault()); | ||
| 255 | } | ||
| 256 | template <typename Type> | ||
| 257 | void Config::ReadSetting(const std::string& group, Settings::BasicSetting<Type>& setting) { | ||
| 258 | setting = static_cast<Type>(sdl2_config->GetInteger(group, setting.GetLabel(), | ||
| 259 | static_cast<long>(setting.GetDefault()))); | ||
| 260 | } | ||
| 261 | |||
| 244 | void Config::ReadValues() { | 262 | void Config::ReadValues() { |
| 245 | // Controls | 263 | // Controls |
| 246 | for (std::size_t p = 0; p < Settings::values.players.GetValue().size(); ++p) { | 264 | for (std::size_t p = 0; p < Settings::values.players.GetValue().size(); ++p) { |
| @@ -264,8 +282,7 @@ void Config::ReadValues() { | |||
| 264 | } | 282 | } |
| 265 | } | 283 | } |
| 266 | 284 | ||
| 267 | Settings::values.mouse_enabled = | 285 | ReadSetting("ControlsGeneral", Settings::values.mouse_enabled); |
| 268 | sdl2_config->GetBoolean("ControlsGeneral", "mouse_enabled", false); | ||
| 269 | for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) { | 286 | for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) { |
| 270 | std::string default_param = InputCommon::GenerateKeyboardParam(default_mouse_buttons[i]); | 287 | std::string default_param = InputCommon::GenerateKeyboardParam(default_mouse_buttons[i]); |
| 271 | Settings::values.mouse_buttons[i] = sdl2_config->Get( | 288 | Settings::values.mouse_buttons[i] = sdl2_config->Get( |
| @@ -275,14 +292,11 @@ void Config::ReadValues() { | |||
| 275 | Settings::values.mouse_buttons[i] = default_param; | 292 | Settings::values.mouse_buttons[i] = default_param; |
| 276 | } | 293 | } |
| 277 | 294 | ||
| 278 | Settings::values.motion_device = sdl2_config->Get( | 295 | ReadSetting("ControlsGeneral", Settings::values.motion_device); |
| 279 | "ControlsGeneral", "motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01"); | ||
| 280 | 296 | ||
| 281 | Settings::values.keyboard_enabled = | 297 | ReadSetting("ControlsGeneral", Settings::values.keyboard_enabled); |
| 282 | sdl2_config->GetBoolean("ControlsGeneral", "keyboard_enabled", false); | ||
| 283 | 298 | ||
| 284 | Settings::values.debug_pad_enabled = | 299 | ReadSetting("ControlsGeneral", Settings::values.debug_pad_enabled); |
| 285 | sdl2_config->GetBoolean("ControlsGeneral", "debug_pad_enabled", false); | ||
| 286 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { | 300 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { |
| 287 | std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); | 301 | std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); |
| 288 | Settings::values.debug_pad_buttons[i] = sdl2_config->Get( | 302 | Settings::values.debug_pad_buttons[i] = sdl2_config->Get( |
| @@ -303,12 +317,9 @@ void Config::ReadValues() { | |||
| 303 | Settings::values.debug_pad_analogs[i] = default_param; | 317 | Settings::values.debug_pad_analogs[i] = default_param; |
| 304 | } | 318 | } |
| 305 | 319 | ||
| 306 | Settings::values.vibration_enabled.SetValue( | 320 | ReadSetting("ControlsGeneral", Settings::values.vibration_enabled); |
| 307 | sdl2_config->GetBoolean("ControlsGeneral", "vibration_enabled", true)); | 321 | ReadSetting("ControlsGeneral", Settings::values.enable_accurate_vibrations); |
| 308 | Settings::values.enable_accurate_vibrations.SetValue( | 322 | ReadSetting("ControlsGeneral", Settings::values.motion_enabled); |
| 309 | sdl2_config->GetBoolean("ControlsGeneral", "enable_accurate_vibrations", false)); | ||
| 310 | Settings::values.motion_enabled.SetValue( | ||
| 311 | sdl2_config->GetBoolean("ControlsGeneral", "motion_enabled", true)); | ||
| 312 | Settings::values.touchscreen.enabled = | 323 | Settings::values.touchscreen.enabled = |
| 313 | sdl2_config->GetBoolean("ControlsGeneral", "touch_enabled", true); | 324 | sdl2_config->GetBoolean("ControlsGeneral", "touch_enabled", true); |
| 314 | Settings::values.touchscreen.rotation_angle = | 325 | Settings::values.touchscreen.rotation_angle = |
| @@ -349,13 +360,11 @@ void Config::ReadValues() { | |||
| 349 | Settings::TouchFromButtonMap{"default", {}}); | 360 | Settings::TouchFromButtonMap{"default", {}}); |
| 350 | num_touch_from_button_maps = 1; | 361 | num_touch_from_button_maps = 1; |
| 351 | } | 362 | } |
| 352 | Settings::values.use_touch_from_button = | 363 | ReadSetting("ControlsGeneral", Settings::values.use_touch_from_button); |
| 353 | sdl2_config->GetBoolean("ControlsGeneral", "use_touch_from_button", false); | 364 | Settings::values.touch_from_button_map_index = std::clamp( |
| 354 | Settings::values.touch_from_button_map_index = | 365 | Settings::values.touch_from_button_map_index.GetValue(), 0, num_touch_from_button_maps - 1); |
| 355 | std::clamp(Settings::values.touch_from_button_map_index, 0, num_touch_from_button_maps - 1); | ||
| 356 | 366 | ||
| 357 | Settings::values.udp_input_servers = | 367 | ReadSetting("ControlsGeneral", Settings::values.udp_input_servers); |
| 358 | sdl2_config->Get("Controls", "udp_input_address", InputCommon::CemuhookUDP::DEFAULT_SRV); | ||
| 359 | 368 | ||
| 360 | std::transform(keyboard_keys.begin(), keyboard_keys.end(), | 369 | std::transform(keyboard_keys.begin(), keyboard_keys.end(), |
| 361 | Settings::values.keyboard_keys.begin(), InputCommon::GenerateKeyboardParam); | 370 | Settings::values.keyboard_keys.begin(), InputCommon::GenerateKeyboardParam); |
| @@ -367,8 +376,7 @@ void Config::ReadValues() { | |||
| 367 | Settings::values.keyboard_mods.begin(), InputCommon::GenerateKeyboardParam); | 376 | Settings::values.keyboard_mods.begin(), InputCommon::GenerateKeyboardParam); |
| 368 | 377 | ||
| 369 | // Data Storage | 378 | // Data Storage |
| 370 | Settings::values.use_virtual_sd = | 379 | ReadSetting("Data Storage", Settings::values.use_virtual_sd); |
| 371 | sdl2_config->GetBoolean("Data Storage", "use_virtual_sd", true); | ||
| 372 | FS::SetYuzuPath(FS::YuzuPath::NANDDir, | 380 | FS::SetYuzuPath(FS::YuzuPath::NANDDir, |
| 373 | sdl2_config->Get("Data Storage", "nand_directory", | 381 | sdl2_config->Get("Data Storage", "nand_directory", |
| 374 | FS::GetYuzuPathString(FS::YuzuPath::NANDDir))); | 382 | FS::GetYuzuPathString(FS::YuzuPath::NANDDir))); |
| @@ -381,18 +389,16 @@ void Config::ReadValues() { | |||
| 381 | FS::SetYuzuPath(FS::YuzuPath::DumpDir, | 389 | FS::SetYuzuPath(FS::YuzuPath::DumpDir, |
| 382 | sdl2_config->Get("Data Storage", "dump_directory", | 390 | sdl2_config->Get("Data Storage", "dump_directory", |
| 383 | FS::GetYuzuPathString(FS::YuzuPath::DumpDir))); | 391 | FS::GetYuzuPathString(FS::YuzuPath::DumpDir))); |
| 384 | Settings::values.gamecard_inserted = | 392 | ReadSetting("Data Storage", Settings::values.gamecard_inserted); |
| 385 | sdl2_config->GetBoolean("Data Storage", "gamecard_inserted", false); | 393 | ReadSetting("Data Storage", Settings::values.gamecard_current_game); |
| 386 | Settings::values.gamecard_current_game = | 394 | ReadSetting("Data Storage", Settings::values.gamecard_path); |
| 387 | sdl2_config->GetBoolean("Data Storage", "gamecard_current_game", false); | ||
| 388 | Settings::values.gamecard_path = sdl2_config->Get("Data Storage", "gamecard_path", ""); | ||
| 389 | 395 | ||
| 390 | // System | 396 | // System |
| 391 | Settings::values.use_docked_mode.SetValue( | 397 | ReadSetting("System", Settings::values.use_docked_mode); |
| 392 | sdl2_config->GetBoolean("System", "use_docked_mode", true)); | ||
| 393 | 398 | ||
| 394 | Settings::values.current_user = std::clamp<int>( | 399 | ReadSetting("System", Settings::values.current_user); |
| 395 | sdl2_config->GetInteger("System", "current_user", 0), 0, Service::Account::MAX_USERS - 1); | 400 | Settings::values.current_user = std::clamp<int>(Settings::values.current_user.GetValue(), 0, |
| 401 | Service::Account::MAX_USERS - 1); | ||
| 396 | 402 | ||
| 397 | const auto rng_seed_enabled = sdl2_config->GetBoolean("System", "rng_seed_enabled", false); | 403 | const auto rng_seed_enabled = sdl2_config->GetBoolean("System", "rng_seed_enabled", false); |
| 398 | if (rng_seed_enabled) { | 404 | if (rng_seed_enabled) { |
| @@ -409,89 +415,60 @@ void Config::ReadValues() { | |||
| 409 | Settings::values.custom_rtc = std::nullopt; | 415 | Settings::values.custom_rtc = std::nullopt; |
| 410 | } | 416 | } |
| 411 | 417 | ||
| 412 | Settings::values.language_index.SetValue( | 418 | ReadSetting("System", Settings::values.language_index); |
| 413 | sdl2_config->GetInteger("System", "language_index", 1)); | 419 | ReadSetting("System", Settings::values.time_zone_index); |
| 414 | Settings::values.time_zone_index.SetValue( | ||
| 415 | sdl2_config->GetInteger("System", "time_zone_index", 0)); | ||
| 416 | 420 | ||
| 417 | // Core | 421 | // Core |
| 418 | Settings::values.use_multi_core.SetValue( | 422 | ReadSetting("Core", Settings::values.use_multi_core); |
| 419 | sdl2_config->GetBoolean("Core", "use_multi_core", true)); | ||
| 420 | 423 | ||
| 421 | // Renderer | 424 | // Renderer |
| 422 | const int renderer_backend = sdl2_config->GetInteger( | 425 | ReadSetting("Renderer", Settings::values.renderer_backend); |
| 423 | "Renderer", "backend", static_cast<int>(Settings::RendererBackend::OpenGL)); | 426 | ReadSetting("Renderer", Settings::values.renderer_debug); |
| 424 | Settings::values.renderer_backend.SetValue( | 427 | ReadSetting("Renderer", Settings::values.vulkan_device); |
| 425 | static_cast<Settings::RendererBackend>(renderer_backend)); | 428 | |
| 426 | Settings::values.renderer_debug = sdl2_config->GetBoolean("Renderer", "debug", false); | 429 | ReadSetting("Renderer", Settings::values.aspect_ratio); |
| 427 | Settings::values.vulkan_device.SetValue( | 430 | ReadSetting("Renderer", Settings::values.max_anisotropy); |
| 428 | sdl2_config->GetInteger("Renderer", "vulkan_device", 0)); | 431 | ReadSetting("Renderer", Settings::values.use_frame_limit); |
| 429 | 432 | ReadSetting("Renderer", Settings::values.frame_limit); | |
| 430 | Settings::values.aspect_ratio.SetValue( | 433 | ReadSetting("Renderer", Settings::values.use_disk_shader_cache); |
| 431 | static_cast<int>(sdl2_config->GetInteger("Renderer", "aspect_ratio", 0))); | 434 | ReadSetting("Renderer", Settings::values.gpu_accuracy); |
| 432 | Settings::values.max_anisotropy.SetValue( | 435 | ReadSetting("Renderer", Settings::values.use_asynchronous_gpu_emulation); |
| 433 | static_cast<int>(sdl2_config->GetInteger("Renderer", "max_anisotropy", 0))); | 436 | ReadSetting("Renderer", Settings::values.use_vsync); |
| 434 | Settings::values.use_frame_limit.SetValue( | 437 | ReadSetting("Renderer", Settings::values.disable_fps_limit); |
| 435 | sdl2_config->GetBoolean("Renderer", "use_frame_limit", true)); | 438 | ReadSetting("Renderer", Settings::values.use_assembly_shaders); |
| 436 | Settings::values.frame_limit.SetValue( | 439 | ReadSetting("Renderer", Settings::values.use_asynchronous_shaders); |
| 437 | static_cast<u16>(sdl2_config->GetInteger("Renderer", "frame_limit", 100))); | 440 | ReadSetting("Renderer", Settings::values.use_nvdec_emulation); |
| 438 | Settings::values.use_disk_shader_cache.SetValue( | 441 | ReadSetting("Renderer", Settings::values.accelerate_astc); |
| 439 | sdl2_config->GetBoolean("Renderer", "use_disk_shader_cache", false)); | 442 | ReadSetting("Renderer", Settings::values.use_fast_gpu_time); |
| 440 | const int gpu_accuracy_level = sdl2_config->GetInteger("Renderer", "gpu_accuracy", 1); | 443 | |
| 441 | Settings::values.gpu_accuracy.SetValue(static_cast<Settings::GPUAccuracy>(gpu_accuracy_level)); | 444 | ReadSetting("Renderer", Settings::values.bg_red); |
| 442 | Settings::values.use_asynchronous_gpu_emulation.SetValue( | 445 | ReadSetting("Renderer", Settings::values.bg_green); |
| 443 | sdl2_config->GetBoolean("Renderer", "use_asynchronous_gpu_emulation", true)); | 446 | ReadSetting("Renderer", Settings::values.bg_blue); |
| 444 | Settings::values.use_vsync.SetValue( | ||
| 445 | static_cast<u16>(sdl2_config->GetInteger("Renderer", "use_vsync", 1))); | ||
| 446 | Settings::values.disable_fps_limit.SetValue( | ||
| 447 | sdl2_config->GetBoolean("Renderer", "disable_fps_limit", false)); | ||
| 448 | Settings::values.use_assembly_shaders.SetValue( | ||
| 449 | sdl2_config->GetBoolean("Renderer", "use_assembly_shaders", true)); | ||
| 450 | Settings::values.use_asynchronous_shaders.SetValue( | ||
| 451 | sdl2_config->GetBoolean("Renderer", "use_asynchronous_shaders", false)); | ||
| 452 | Settings::values.use_nvdec_emulation.SetValue( | ||
| 453 | sdl2_config->GetBoolean("Renderer", "use_nvdec_emulation", true)); | ||
| 454 | Settings::values.accelerate_astc.SetValue( | ||
| 455 | sdl2_config->GetBoolean("Renderer", "accelerate_astc", true)); | ||
| 456 | Settings::values.use_fast_gpu_time.SetValue( | ||
| 457 | sdl2_config->GetBoolean("Renderer", "use_fast_gpu_time", true)); | ||
| 458 | |||
| 459 | Settings::values.bg_red.SetValue( | ||
| 460 | static_cast<float>(sdl2_config->GetReal("Renderer", "bg_red", 0.0))); | ||
| 461 | Settings::values.bg_green.SetValue( | ||
| 462 | static_cast<float>(sdl2_config->GetReal("Renderer", "bg_green", 0.0))); | ||
| 463 | Settings::values.bg_blue.SetValue( | ||
| 464 | static_cast<float>(sdl2_config->GetReal("Renderer", "bg_blue", 0.0))); | ||
| 465 | 447 | ||
| 466 | // Audio | 448 | // Audio |
| 467 | Settings::values.sink_id = sdl2_config->Get("Audio", "output_engine", "auto"); | 449 | ReadSetting("Audio", Settings::values.sink_id); |
| 468 | Settings::values.enable_audio_stretching.SetValue( | 450 | ReadSetting("Audio", Settings::values.enable_audio_stretching); |
| 469 | sdl2_config->GetBoolean("Audio", "enable_audio_stretching", true)); | 451 | ReadSetting("Audio", Settings::values.audio_device_id); |
| 470 | Settings::values.audio_device_id = sdl2_config->Get("Audio", "output_device", "auto"); | 452 | ReadSetting("Audio", Settings::values.volume); |
| 471 | Settings::values.volume.SetValue( | ||
| 472 | static_cast<float>(sdl2_config->GetReal("Audio", "volume", 1))); | ||
| 473 | 453 | ||
| 474 | // Miscellaneous | 454 | // Miscellaneous |
| 475 | Settings::values.log_filter = sdl2_config->Get("Miscellaneous", "log_filter", "*:Trace"); | 455 | // log_filter has a different default here than from common |
| 476 | Settings::values.use_dev_keys = sdl2_config->GetBoolean("Miscellaneous", "use_dev_keys", false); | 456 | Settings::values.log_filter = |
| 457 | sdl2_config->Get("Miscellaneous", Settings::values.log_filter.GetLabel(), "*:Trace"); | ||
| 458 | ReadSetting("Miscellaneous", Settings::values.use_dev_keys); | ||
| 477 | 459 | ||
| 478 | // Debugging | 460 | // Debugging |
| 479 | Settings::values.record_frame_times = | 461 | Settings::values.record_frame_times = |
| 480 | sdl2_config->GetBoolean("Debugging", "record_frame_times", false); | 462 | sdl2_config->GetBoolean("Debugging", "record_frame_times", false); |
| 481 | Settings::values.program_args = sdl2_config->Get("Debugging", "program_args", ""); | 463 | ReadSetting("Debugging", Settings::values.program_args); |
| 482 | Settings::values.dump_exefs = sdl2_config->GetBoolean("Debugging", "dump_exefs", false); | 464 | ReadSetting("Debugging", Settings::values.dump_exefs); |
| 483 | Settings::values.dump_nso = sdl2_config->GetBoolean("Debugging", "dump_nso", false); | 465 | ReadSetting("Debugging", Settings::values.dump_nso); |
| 484 | Settings::values.enable_fs_access_log = | 466 | ReadSetting("Debugging", Settings::values.enable_fs_access_log); |
| 485 | sdl2_config->GetBoolean("Debugging", "enable_fs_access_log", false); | 467 | ReadSetting("Debugging", Settings::values.reporting_services); |
| 486 | Settings::values.reporting_services = | 468 | ReadSetting("Debugging", Settings::values.quest_flag); |
| 487 | sdl2_config->GetBoolean("Debugging", "reporting_services", false); | 469 | ReadSetting("Debugging", Settings::values.use_debug_asserts); |
| 488 | Settings::values.quest_flag = sdl2_config->GetBoolean("Debugging", "quest_flag", false); | 470 | ReadSetting("Debugging", Settings::values.use_auto_stub); |
| 489 | Settings::values.use_debug_asserts = | 471 | ReadSetting("Debugging", Settings::values.disable_macro_jit); |
| 490 | sdl2_config->GetBoolean("Debugging", "use_debug_asserts", false); | ||
| 491 | Settings::values.use_auto_stub = sdl2_config->GetBoolean("Debugging", "use_auto_stub", false); | ||
| 492 | |||
| 493 | Settings::values.disable_macro_jit = | ||
| 494 | sdl2_config->GetBoolean("Debugging", "disable_macro_jit", false); | ||
| 495 | 472 | ||
| 496 | const auto title_list = sdl2_config->Get("AddOns", "title_ids", ""); | 473 | const auto title_list = sdl2_config->Get("AddOns", "title_ids", ""); |
| 497 | std::stringstream ss(title_list); | 474 | std::stringstream ss(title_list); |
| @@ -511,17 +488,14 @@ void Config::ReadValues() { | |||
| 511 | } | 488 | } |
| 512 | 489 | ||
| 513 | // Web Service | 490 | // Web Service |
| 514 | Settings::values.enable_telemetry = | 491 | ReadSetting("WebService", Settings::values.enable_telemetry); |
| 515 | sdl2_config->GetBoolean("WebService", "enable_telemetry", true); | 492 | ReadSetting("WebService", Settings::values.web_api_url); |
| 516 | Settings::values.web_api_url = | 493 | ReadSetting("WebService", Settings::values.yuzu_username); |
| 517 | sdl2_config->Get("WebService", "web_api_url", "https://api.yuzu-emu.org"); | 494 | ReadSetting("WebService", Settings::values.yuzu_token); |
| 518 | Settings::values.yuzu_username = sdl2_config->Get("WebService", "yuzu_username", ""); | ||
| 519 | Settings::values.yuzu_token = sdl2_config->Get("WebService", "yuzu_token", ""); | ||
| 520 | 495 | ||
| 521 | // Services | 496 | // Services |
| 522 | Settings::values.bcat_backend = sdl2_config->Get("Services", "bcat_backend", "none"); | 497 | ReadSetting("Services", Settings::values.bcat_backend); |
| 523 | Settings::values.bcat_boxcat_local = | 498 | ReadSetting("Services", Settings::values.bcat_boxcat_local); |
| 524 | sdl2_config->GetBoolean("Services", "bcat_boxcat_local", false); | ||
| 525 | } | 499 | } |
| 526 | 500 | ||
| 527 | void Config::Reload() { | 501 | void Config::Reload() { |