diff --git a/ultramodern/include/ultramodern/renderer_wrapper.hpp b/ultramodern/include/ultramodern/renderer_wrapper.hpp index b7cf957..f000838 100644 --- a/ultramodern/include/ultramodern/renderer_wrapper.hpp +++ b/ultramodern/include/ultramodern/renderer_wrapper.hpp @@ -18,11 +18,13 @@ namespace ultramodern { public: bool developer_mode; - virtual ~GraphicsConfig() = 0; + virtual ~GraphicsConfig() = default; virtual std::string get_graphics_api_name() const = 0; virtual std::optional get_target_framerate() const = 0; + auto operator<=>(const GraphicsConfig& rhs) const = default; + virtual bool is_equal(const GraphicsConfig& rhs) const = 0; }; @@ -66,7 +68,7 @@ namespace ultramodern { std::unique_ptr create_render_context(uint8_t* rdram, WindowHandle window_handle, bool developer_mode); - void set_graphics_config(const GraphicsConfig* config); + void set_graphics_config(std::unique_ptr&& config); const GraphicsConfig* get_graphics_config(); } } diff --git a/ultramodern/src/renderer_wrapper.cpp b/ultramodern/src/renderer_wrapper.cpp index 36e1a78..00a698c 100644 --- a/ultramodern/src/renderer_wrapper.cpp +++ b/ultramodern/src/renderer_wrapper.cpp @@ -24,10 +24,9 @@ std::unique_ptr ultramodern::renderer::c static std::unique_ptr graphic_config{}; static std::mutex graphic_config_mutex; -void ultramodern::renderer::set_graphics_config(const GraphicsConfig* config) { +void ultramodern::renderer::set_graphics_config(std::unique_ptr&& config) { std::lock_guard lock(graphic_config_mutex); - assert(config != nullptr); - graphic_config.reset(config); + graphic_config.swap(config); } const ultramodern::renderer::GraphicsConfig* ultramodern::renderer::get_graphics_config() {