Move WindowHandle to renderer namespace

This commit is contained in:
Angie 2024-06-04 16:22:28 -04:00 committed by angie
parent 03e97ef101
commit 1cf5157206
6 changed files with 48 additions and 52 deletions

View file

@ -42,7 +42,7 @@ namespace recomp {
void do_rom_read(uint8_t* rdram, gpr ram_address, uint32_t physical_addr, size_t num_bytes); void do_rom_read(uint8_t* rdram, gpr ram_address, uint32_t physical_addr, size_t num_bytes);
void do_rom_pio(uint8_t* rdram, gpr ram_address, uint32_t physical_addr); void do_rom_pio(uint8_t* rdram, gpr ram_address, uint32_t physical_addr);
void start( void start(
ultramodern::WindowHandle window_handle, ultramodern::renderer::WindowHandle window_handle,
const recomp::rsp::callbacks_t& rsp_callbacks, const recomp::rsp::callbacks_t& rsp_callbacks,
const ultramodern::renderer::callbacks_t& renderer_callbacks, const ultramodern::renderer::callbacks_t& renderer_callbacks,
const ultramodern::audio_callbacks_t& audio_callbacks, const ultramodern::audio_callbacks_t& audio_callbacks,

View file

@ -391,7 +391,7 @@ void ultramodern::quit() {
} }
void recomp::start( void recomp::start(
ultramodern::WindowHandle window_handle, ultramodern::renderer::WindowHandle window_handle,
const recomp::rsp::callbacks_t& rsp_callbacks, const recomp::rsp::callbacks_t& rsp_callbacks,
const ultramodern::renderer::callbacks_t& renderer_callbacks, const ultramodern::renderer::callbacks_t& renderer_callbacks,
const ultramodern::audio_callbacks_t& audio_callbacks, const ultramodern::audio_callbacks_t& audio_callbacks,
@ -419,7 +419,7 @@ void recomp::start(
gfx_data = gfx_callbacks.create_gfx(); gfx_data = gfx_callbacks.create_gfx();
} }
if (window_handle == ultramodern::WindowHandle{}) { if (window_handle == ultramodern::renderer::WindowHandle{}) {
if (gfx_callbacks.create_window) { if (gfx_callbacks.create_window) {
window_handle = gfx_callbacks.create_window(gfx_data); window_handle = gfx_callbacks.create_window(gfx_data);
} }
@ -432,7 +432,7 @@ void recomp::start(
std::unique_ptr<uint8_t[]> rdram_buffer = std::make_unique<uint8_t[]>(ultramodern::rdram_size); std::unique_ptr<uint8_t[]> rdram_buffer = std::make_unique<uint8_t[]>(ultramodern::rdram_size);
std::memset(rdram_buffer.get(), 0, ultramodern::rdram_size); std::memset(rdram_buffer.get(), 0, ultramodern::rdram_size);
std::thread game_thread{[](ultramodern::WindowHandle window_handle, uint8_t* rdram) { std::thread game_thread{[](ultramodern::renderer::WindowHandle window_handle, uint8_t* rdram) {
debug_printf("[Recomp] Starting\n"); debug_printf("[Recomp] Starting\n");
ultramodern::set_native_thread_name("Game Start Thread"); ultramodern::set_native_thread_name("Game Start Thread");

View file

@ -6,15 +6,49 @@
#include <optional> #include <optional>
#include <span> #include <span>
#if defined(_WIN32)
# define WIN32_LEAN_AND_MEAN
# include <Windows.h>
#elif defined(__ANDROID__)
# include "android/native_window.h"
#elif defined(__linux__)
# include "X11/Xlib.h"
# undef None
# undef Status
# undef LockMask
# undef Always
# undef Success
#endif
#include "ultra64.h" #include "ultra64.h"
#include "config.hpp" #include "config.hpp"
namespace ultramodern { namespace ultramodern {
// TODO: should we move the WindowHandle definition here?
struct WindowHandle;
namespace renderer { namespace renderer {
#if defined(_WIN32)
// Native HWND handle to the target window.
struct WindowHandle {
HWND window;
DWORD thread_id = (DWORD)-1;
auto operator<=>(const WindowHandle&) const = default;
};
#elif defined(__ANDROID__)
using WindowHandle = ANativeWindow*;
#elif defined(__linux__)
struct WindowHandle {
Display* display;
Window window;
auto operator<=>(const WindowHandle&) const = default;
};
#elif defined(__APPLE__)
struct WindowHandle {
void* window;
void* view;
auto operator<=>(const WindowHandle&) const = default;
};
#endif
enum class SetupResult { enum class SetupResult {
Success, Success,
DynamicLibrariesNotFound, DynamicLibrariesNotFound,
@ -69,5 +103,4 @@ namespace ultramodern {
} }
} }
#endif #endif

View file

@ -11,20 +11,6 @@
#include "lightweightsemaphore.h" #include "lightweightsemaphore.h"
#include "ultra64.h" #include "ultra64.h"
#if defined(_WIN32)
# define WIN32_LEAN_AND_MEAN
# include <Windows.h>
#elif defined(__ANDROID__)
# include "android/native_window.h"
#elif defined(__linux__)
# include "X11/Xlib.h"
# undef None
# undef Status
# undef LockMask
# undef Always
# undef Success
#endif
#include "ultramodern/error_handling.hpp" #include "ultramodern/error_handling.hpp"
#include "ultramodern/events.hpp" #include "ultramodern/events.hpp"
#include "ultramodern/input.hpp" #include "ultramodern/input.hpp"
@ -39,29 +25,6 @@ struct UltraThreadContext {
namespace ultramodern { namespace ultramodern {
#if defined(_WIN32)
// Native HWND handle to the target window.
struct WindowHandle {
HWND window;
DWORD thread_id = (DWORD)-1;
auto operator<=>(const WindowHandle&) const = default;
};
#elif defined(__ANDROID__)
using WindowHandle = ANativeWindow*;
#elif defined(__linux__)
struct WindowHandle {
Display* display;
Window window;
auto operator<=>(const WindowHandle&) const = default;
};
#elif defined(__APPLE__)
struct WindowHandle {
void* window;
void* view;
auto operator<=>(const WindowHandle&) const = default;
};
#endif
// We need a place in rdram to hold the PI handles, so pick an address in extended rdram // We need a place in rdram to hold the PI handles, so pick an address in extended rdram
constexpr uint32_t rdram_size = 1024 * 1024 * 16; // 16MB to give extra room for anything custom constexpr uint32_t rdram_size = 1024 * 1024 * 16; // 16MB to give extra room for anything custom
constexpr int32_t cart_handle = 0x80800000; constexpr int32_t cart_handle = 0x80800000;
@ -70,9 +33,9 @@ constexpr int32_t flash_handle = (int32_t)(drive_handle + sizeof(OSPiHandle));
constexpr uint32_t save_size = 1024 * 1024 / 8; // Maximum save size, 1Mbit for flash constexpr uint32_t save_size = 1024 * 1024 / 8; // Maximum save size, 1Mbit for flash
// Initialization. // Initialization.
void preinit(RDRAM_ARG WindowHandle window_handle); void preinit(RDRAM_ARG renderer::WindowHandle window_handle);
void init_saving(RDRAM_ARG1); void init_saving(RDRAM_ARG1);
void init_events(RDRAM_ARG WindowHandle window_handle); void init_events(RDRAM_ARG renderer::WindowHandle window_handle);
void init_timers(RDRAM_ARG1); void init_timers(RDRAM_ARG1);
void init_thread_cleanup(); void init_thread_cleanup();
@ -149,7 +112,7 @@ struct audio_callbacks_t {
struct gfx_callbacks_t { struct gfx_callbacks_t {
using gfx_data_t = void*; using gfx_data_t = void*;
using create_gfx_t = gfx_data_t(); using create_gfx_t = gfx_data_t();
using create_window_t = WindowHandle(gfx_data_t); using create_window_t = renderer::WindowHandle(gfx_data_t);
using update_gfx_t = void(gfx_data_t); using update_gfx_t = void(gfx_data_t);
create_gfx_t* create_gfx; create_gfx_t* create_gfx;

View file

@ -258,7 +258,7 @@ void ultramodern::trigger_config_action() {
std::atomic<ultramodern::renderer::SetupResult> renderer_setup_result = ultramodern::renderer::SetupResult::Success; std::atomic<ultramodern::renderer::SetupResult> renderer_setup_result = ultramodern::renderer::SetupResult::Success;
void gfx_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_ready, ultramodern::WindowHandle window_handle) { void gfx_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_ready, ultramodern::renderer::WindowHandle window_handle) {
bool enabled_instant_present = false; bool enabled_instant_present = false;
using namespace std::chrono_literals; using namespace std::chrono_literals;
@ -497,7 +497,7 @@ void ultramodern::send_si_message(RDRAM_ARG1) {
osSendMesg(PASS_RDRAM events_context.si.mq, events_context.si.msg, OS_MESG_NOBLOCK); osSendMesg(PASS_RDRAM events_context.si.mq, events_context.si.msg, OS_MESG_NOBLOCK);
} }
void ultramodern::init_events(RDRAM_ARG ultramodern::WindowHandle window_handle) { void ultramodern::init_events(RDRAM_ARG ultramodern::renderer::WindowHandle window_handle) {
moodycamel::LightweightSemaphore gfx_thread_ready; moodycamel::LightweightSemaphore gfx_thread_ready;
moodycamel::LightweightSemaphore task_thread_ready; moodycamel::LightweightSemaphore task_thread_ready;
events_context.rdram = rdram; events_context.rdram = rdram;

View file

@ -19,7 +19,7 @@ void ultramodern::set_callbacks(
ultramodern::error_handling::set_callbacks(error_handling_callbacks); ultramodern::error_handling::set_callbacks(error_handling_callbacks);
} }
void ultramodern::preinit(RDRAM_ARG ultramodern::WindowHandle window_handle) { void ultramodern::preinit(RDRAM_ARG ultramodern::renderer::WindowHandle window_handle) {
ultramodern::set_main_thread(); ultramodern::set_main_thread();
ultramodern::init_events(PASS_RDRAM window_handle); ultramodern::init_events(PASS_RDRAM window_handle);
ultramodern::init_timers(PASS_RDRAM1); ultramodern::init_timers(PASS_RDRAM1);