mirror of
https://github.com/N64Recomp/N64ModernRuntime.git
synced 2026-05-11 03:12:15 +00:00
Move WindowHandle to renderer namespace
This commit is contained in:
parent
03e97ef101
commit
1cf5157206
6 changed files with 48 additions and 52 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue