diff --git a/ultramodern/include/ultramodern/ultramodern.hpp b/ultramodern/include/ultramodern/ultramodern.hpp index cb0a8d2..1bc3526 100644 --- a/ultramodern/include/ultramodern/ultramodern.hpp +++ b/ultramodern/include/ultramodern/ultramodern.hpp @@ -128,6 +128,7 @@ uint32_t get_target_framerate(uint32_t original); uint32_t get_display_refresh_rate(); float get_resolution_scale(); void load_shader_cache(std::span cache_data); +void trigger_config_action(); // Audio void init_audio(); diff --git a/ultramodern/src/events.cpp b/ultramodern/src/events.cpp index ed65f64..de8d689 100644 --- a/ultramodern/src/events.cpp +++ b/ultramodern/src/events.cpp @@ -247,6 +247,10 @@ void ultramodern::load_shader_cache(std::span cache_data) { events_context.action_queue.enqueue(LoadShaderCacheAction{cache_data}); } +void ultramodern::trigger_config_action() { + events_context.action_queue.enqueue(UpdateConfigAction{}); +} + std::atomic renderer_setup_result = ultramodern::renderer::SetupResult::Success; void gfx_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_ready, ultramodern::WindowHandle window_handle) { @@ -308,7 +312,7 @@ void gfx_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_re } else if (const auto* config_action = std::get_if(&action)) { auto new_config = ultramodern::renderer::get_graphics_config(); - if (!old_config->is_equal(*new_config)) { + if (!new_config->is_equal(*old_config)) { renderer_context->update_config(old_config, new_config); old_config = new_config; } diff --git a/ultramodern/src/renderer_wrapper.cpp b/ultramodern/src/renderer_wrapper.cpp index f131549..ff46edf 100644 --- a/ultramodern/src/renderer_wrapper.cpp +++ b/ultramodern/src/renderer_wrapper.cpp @@ -27,6 +27,7 @@ static std::mutex graphic_config_mutex; void ultramodern::renderer::set_graphics_config(std::unique_ptr&& config) { std::lock_guard lock(graphic_config_mutex); graphic_config.swap(config); + ultramodern::trigger_config_action(); } const ultramodern::renderer::GraphicsConfig* ultramodern::renderer::get_graphics_config() {