From 048a3172d77182d9cffbc24edadc4f35bbe32b32 Mon Sep 17 00:00:00 2001 From: Angie Date: Sat, 25 May 2024 16:05:35 -0400 Subject: [PATCH] Remove UserCallbacks in favor of threads_callbacks_t --- ultramodern/CMakeLists.txt | 1 - .../include/ultramodern/ultramodern.hpp | 17 ++++++++++- .../include/ultramodern/user_callbacks.hpp | 29 ------------------- ultramodern/src/events.cpp | 18 +++++++----- ultramodern/src/user_callbacks.cpp | 24 --------------- 5 files changed, 26 insertions(+), 63 deletions(-) delete mode 100644 ultramodern/include/ultramodern/user_callbacks.hpp delete mode 100644 ultramodern/src/user_callbacks.cpp diff --git a/ultramodern/CMakeLists.txt b/ultramodern/CMakeLists.txt index ca4b15c..94356b1 100644 --- a/ultramodern/CMakeLists.txt +++ b/ultramodern/CMakeLists.txt @@ -23,7 +23,6 @@ add_library(ultramodern STATIC "${CMAKE_CURRENT_SOURCE_DIR}/src/threads.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/timer.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/ultrainit.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/src/user_callbacks.cpp" ) target_include_directories(ultramodern PUBLIC diff --git a/ultramodern/include/ultramodern/ultramodern.hpp b/ultramodern/include/ultramodern/ultramodern.hpp index 1652a19..9a81efe 100644 --- a/ultramodern/include/ultramodern/ultramodern.hpp +++ b/ultramodern/include/ultramodern/ultramodern.hpp @@ -146,7 +146,7 @@ struct input_callbacks_t { set_rumble_t* set_rumble; }; -// TODO: This really isn't used by ultramodern. Should we move it to librecomp instead? +// TODO: Most of the members of this struct are not used by ultramodern. Should we move them to librecomp instead? struct gfx_callbacks_t { using gfx_data_t = void*; using create_gfx_t = gfx_data_t(); @@ -163,6 +163,21 @@ struct gfx_callbacks_t { destroy_ui_t* destroy_ui; }; +struct threads_callbacks_t { + using vi_callback_t = void(); + using gfx_init_callback_t = void(); + + /** + * Called in each VI. + */ + vi_callback_t* vi_callback; + + /** + * Called before entering the gfx main loop. + */ + gfx_init_callback_t* gfx_init_callback; +}; + bool is_game_started(); void quit(); void join_event_threads(); diff --git a/ultramodern/include/ultramodern/user_callbacks.hpp b/ultramodern/include/ultramodern/user_callbacks.hpp deleted file mode 100644 index 364977f..0000000 --- a/ultramodern/include/ultramodern/user_callbacks.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __USER_CALLBACKS_HPP__ -#define __USER_CALLBACKS_HPP__ - -#include "rsp_stuff.hpp" -#include "ultra64.h" - -namespace ultramodern { - struct UserCallbacks { - // TODO: Do we want those functions to take a generic `void *arg` for user data? - - // TODO: Consider renaming some functions to something more general, - // like `update_rumble` -> `update_controller` - - void (*update_rumble)(); - void (*update_supported_options)(); - }; - - /** - * - */ - void register_user_callbacks(UserCallbacks& callbacks); - - /** - * - */ - const UserCallbacks& get_user_callbacks(); -}; - -#endif diff --git a/ultramodern/src/events.cpp b/ultramodern/src/events.cpp index 6dbd8bd..937e715 100644 --- a/ultramodern/src/events.cpp +++ b/ultramodern/src/events.cpp @@ -15,9 +15,14 @@ #include "ultramodern.hpp" #include "config.hpp" #include "rt64_layer.h" -#include "user_callbacks.hpp" #include "rsp_stuff.hpp" +static ultramodern::threads_callbacks_t threads_callbacks{}; + +void set_threads_callbacks(const ultramodern::threads_callbacks_t& callbacks) { + threads_callbacks = callbacks; +} + struct SpTaskAction { OSTask task; }; @@ -115,7 +120,6 @@ void vi_thread_func() { using namespace std::chrono_literals; int remaining_retraces = events_context.vi.retrace_count; - auto& user_callbacks = ultramodern::get_user_callbacks(); while (!exited) { // Determine the next VI time (more accurate than adding 16ms each VI interrupt) @@ -175,8 +179,8 @@ void vi_thread_func() { } } - if (user_callbacks.update_rumble != nullptr) { - user_callbacks.update_rumble(); + if (threads_callbacks.vi_callback != nullptr) { + threads_callbacks.vi_callback(); } } } @@ -274,8 +278,6 @@ void gfx_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_re ultramodern::RT64Context rt64{rdram, window_handle, cur_config.load().developer_mode}; - auto& user_callbacks = ultramodern::get_user_callbacks(); - if (!rt64.valid()) { // TODO move recomp code out of ultramodern. rt64_setup_result.store(rt64.get_setup_result()); @@ -284,8 +286,8 @@ void gfx_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_re return; } - if (user_callbacks.update_supported_options != nullptr) { - user_callbacks.update_supported_options(); + if (threads_callbacks.gfx_init_callback != nullptr) { + threads_callbacks.gfx_init_callback(); } ultramodern::rsp::constants_init(); diff --git a/ultramodern/src/user_callbacks.cpp b/ultramodern/src/user_callbacks.cpp deleted file mode 100644 index e2de5fb..0000000 --- a/ultramodern/src/user_callbacks.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include - -#include "ultramodern/user_callbacks.hpp" - -static ultramodern::UserCallbacks s_user_callbacks {}; -static bool s_callbacks_initialized = false; - -void ultramodern::register_user_callbacks(UserCallbacks& callbacks) { - s_user_callbacks = callbacks; - - s_callbacks_initialized = true; -} - -const ultramodern::UserCallbacks& ultramodern::get_user_callbacks() { - if (!s_callbacks_initialized) { - fprintf(stderr, "%s: User callbacks have not been initialized.\n", __func__); - assert(false); - std::quick_exit(EXIT_FAILURE); - } - - return s_user_callbacks; -}