mirror of
https://github.com/N64Recomp/N64ModernRuntime.git
synced 2026-05-11 03:12:15 +00:00
Allow registering get_graphics_api_name
This commit is contained in:
parent
ae53e8e372
commit
03e97ef101
4 changed files with 34 additions and 24 deletions
|
|
@ -71,10 +71,9 @@ namespace ultramodern {
|
||||||
int rr_manual_value;
|
int rr_manual_value;
|
||||||
int ds_option;
|
int ds_option;
|
||||||
|
|
||||||
virtual ~GraphicsConfig();
|
virtual ~GraphicsConfig() = default;
|
||||||
|
|
||||||
virtual std::string get_graphics_api_name() const;
|
std::string get_graphics_api_name() const;
|
||||||
virtual std::optional<uint32_t> get_target_framerate(uint32_t original) const;
|
|
||||||
|
|
||||||
auto operator<=>(const GraphicsConfig& rhs) const = default;
|
auto operator<=>(const GraphicsConfig& rhs) const = default;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -46,13 +46,26 @@ namespace ultramodern {
|
||||||
|
|
||||||
struct callbacks_t {
|
struct callbacks_t {
|
||||||
using create_render_context_t = std::unique_ptr<RendererContext>(uint8_t* rdram, WindowHandle window_handle, bool developer_mode);
|
using create_render_context_t = std::unique_ptr<RendererContext>(uint8_t* rdram, WindowHandle window_handle, bool developer_mode);
|
||||||
|
using get_graphics_api_name_t = std::string(const GraphicsConfig& config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instances a subclass of RendererContext that is used to render the game.
|
||||||
|
*
|
||||||
|
* This callback is mandatory for using the library.
|
||||||
|
*/
|
||||||
create_render_context_t *create_render_context;
|
create_render_context_t *create_render_context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This callback is optional. If not provided a library default will be used.
|
||||||
|
*/
|
||||||
|
get_graphics_api_name_t *get_graphics_api_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
void set_callbacks(const callbacks_t& callbacks);
|
void set_callbacks(const callbacks_t& callbacks);
|
||||||
|
|
||||||
std::unique_ptr<RendererContext> create_render_context(uint8_t* rdram, WindowHandle window_handle, bool developer_mode);
|
std::unique_ptr<RendererContext> create_render_context(uint8_t* rdram, WindowHandle window_handle, bool developer_mode);
|
||||||
|
|
||||||
|
std::string get_graphics_api_name(const GraphicsConfig& config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -227,12 +227,17 @@ std::atomic_uint32_t display_refresh_rate = 60;
|
||||||
std::atomic<float> resolution_scale = 1.0f;
|
std::atomic<float> resolution_scale = 1.0f;
|
||||||
|
|
||||||
uint32_t ultramodern::get_target_framerate(uint32_t original) {
|
uint32_t ultramodern::get_target_framerate(uint32_t original) {
|
||||||
auto maybe_framerate = ultramodern::renderer::get_graphics_config().get_target_framerate(original);
|
auto& config = ultramodern::renderer::get_graphics_config();
|
||||||
|
|
||||||
if (maybe_framerate.has_value()) {
|
switch (config.rr_option) {
|
||||||
return maybe_framerate.value();
|
default:
|
||||||
|
case ultramodern::renderer::RefreshRate::Original:
|
||||||
|
return original;
|
||||||
|
case ultramodern::renderer::RefreshRate::Manual:
|
||||||
|
return config.rr_manual_value;
|
||||||
|
case ultramodern::renderer::RefreshRate::Display:
|
||||||
|
return display_refresh_rate.load();
|
||||||
}
|
}
|
||||||
return display_refresh_rate.load();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ultramodern::get_display_refresh_rate() {
|
uint32_t ultramodern::get_display_refresh_rate() {
|
||||||
|
|
@ -520,10 +525,10 @@ void ultramodern::init_events(RDRAM_ARG ultramodern::WindowHandle window_handle)
|
||||||
show_renderer_error("Failed to load dynamic libraries. Make sure the DLLs are next to the recomp executable.");
|
show_renderer_error("Failed to load dynamic libraries. Make sure the DLLs are next to the recomp executable.");
|
||||||
break;
|
break;
|
||||||
case ultramodern::renderer::SetupResult::InvalidGraphicsAPI:
|
case ultramodern::renderer::SetupResult::InvalidGraphicsAPI:
|
||||||
show_renderer_error(ultramodern::renderer::get_graphics_config().get_graphics_api_name() + " is not supported on this platform. Please select a different graphics API.");
|
show_renderer_error(ultramodern::renderer::get_graphics_api_name(ultramodern::renderer::get_graphics_config()) + " is not supported on this platform. Please select a different graphics API.");
|
||||||
break;
|
break;
|
||||||
case ultramodern::renderer::SetupResult::GraphicsAPINotFound:
|
case ultramodern::renderer::SetupResult::GraphicsAPINotFound:
|
||||||
show_renderer_error("Unable to initialize " + ultramodern::renderer::get_graphics_config().get_graphics_api_name() + "." + driver_os_suffix);
|
show_renderer_error("Unable to initialize " + ultramodern::renderer::get_graphics_api_name(ultramodern::renderer::get_graphics_config()) + "." + driver_os_suffix);
|
||||||
break;
|
break;
|
||||||
case ultramodern::renderer::SetupResult::GraphicsDeviceNotFound:
|
case ultramodern::renderer::SetupResult::GraphicsDeviceNotFound:
|
||||||
show_renderer_error("Unable to find compatible graphics device." + driver_os_suffix);
|
show_renderer_error("Unable to find compatible graphics device." + driver_os_suffix);
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ void ultramodern::renderer::set_callbacks(const callbacks_t& callbacks) {
|
||||||
|
|
||||||
std::unique_ptr<ultramodern::renderer::RendererContext> ultramodern::renderer::create_render_context(uint8_t* rdram, WindowHandle window_handle, bool developer_mode) {
|
std::unique_ptr<ultramodern::renderer::RendererContext> ultramodern::renderer::create_render_context(uint8_t* rdram, WindowHandle window_handle, bool developer_mode) {
|
||||||
if (render_callbacks.create_render_context == nullptr) {
|
if (render_callbacks.create_render_context == nullptr) {
|
||||||
error_handling::message_box("[Error] The render callback `create_render_context` was not registered");
|
error_handling::message_box("[Error] The mandatory render callback `create_render_context` was not registered");
|
||||||
// TODO: should we make a macro for this?
|
// TODO: should we make a macro for this?
|
||||||
error_handling::quick_exit(__FILE__, __LINE__, __func__);
|
error_handling::quick_exit(__FILE__, __LINE__, __func__);
|
||||||
}
|
}
|
||||||
|
|
@ -20,6 +20,13 @@ std::unique_ptr<ultramodern::renderer::RendererContext> ultramodern::renderer::c
|
||||||
return render_callbacks.create_render_context(rdram, window_handle, developer_mode);
|
return render_callbacks.create_render_context(rdram, window_handle, developer_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string ultramodern::renderer::get_graphics_api_name(const GraphicsConfig& config) {
|
||||||
|
if (render_callbacks.get_graphics_api_name != nullptr) {
|
||||||
|
return render_callbacks.get_graphics_api_name(config);
|
||||||
|
}
|
||||||
|
return config.get_graphics_api_name();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static ultramodern::renderer::GraphicsConfig graphic_config{};
|
static ultramodern::renderer::GraphicsConfig graphic_config{};
|
||||||
static std::mutex graphic_config_mutex;
|
static std::mutex graphic_config_mutex;
|
||||||
|
|
@ -35,8 +42,6 @@ const ultramodern::renderer::GraphicsConfig& ultramodern::renderer::get_graphics
|
||||||
return graphic_config;
|
return graphic_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
ultramodern::renderer::GraphicsConfig::~GraphicsConfig() = default;
|
|
||||||
|
|
||||||
std::string ultramodern::renderer::GraphicsConfig::get_graphics_api_name() const {
|
std::string ultramodern::renderer::GraphicsConfig::get_graphics_api_name() const {
|
||||||
ultramodern::renderer::GraphicsApi api = api_option;
|
ultramodern::renderer::GraphicsApi api = api_option;
|
||||||
|
|
||||||
|
|
@ -62,15 +67,3 @@ std::string ultramodern::renderer::GraphicsConfig::get_graphics_api_name() const
|
||||||
return "[Unknown graphics API]";
|
return "[Unknown graphics API]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<uint32_t> ultramodern::renderer::GraphicsConfig::get_target_framerate(uint32_t original) const {
|
|
||||||
switch (rr_option) {
|
|
||||||
default:
|
|
||||||
case ultramodern::renderer::RefreshRate::Original:
|
|
||||||
return original;
|
|
||||||
case ultramodern::renderer::RefreshRate::Manual:
|
|
||||||
return rr_manual_value;
|
|
||||||
case ultramodern::renderer::RefreshRate::Display:
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue