Merge branch 'libretro-compat' into libretro

This commit is contained in:
刘皓 2025-03-11 22:38:55 -04:00
commit ebca366cc3
No known key found for this signature in database
GPG key ID: 7901753DB465B711

View file

@ -43,6 +43,17 @@
using namespace mkxp_retro; using namespace mkxp_retro;
using namespace mkxp_sandbox; using namespace mkxp_sandbox;
namespace mkxp_retro {
retro_log_printf_t log_printf = NULL;
retro_video_refresh_t video_refresh;
retro_audio_sample_batch_t audio_sample_batch;
retro_environment_t environment;
retro_input_poll_t input_poll;
retro_input_state_t input_state;
struct retro_perf_callback perf;
retro_hw_render_callback hw_render;
}
static inline void *malloc_align(size_t alignment, size_t size) { static inline void *malloc_align(size_t alignment, size_t size) {
#if defined(MKXPZ_HAVE_POSIX_MEMALIGN) || defined(MKXPZ_BUILD_XCODE) #if defined(MKXPZ_HAVE_POSIX_MEMALIGN) || defined(MKXPZ_BUILD_XCODE)
void *mem; void *mem;
@ -64,17 +75,6 @@ static inline void free_align(void *ptr) {
#endif #endif
} }
namespace mkxp_retro {
retro_log_printf_t log_printf;
retro_video_refresh_t video_refresh;
retro_audio_sample_batch_t audio_sample_batch;
retro_environment_t environment;
retro_input_poll_t input_poll;
retro_input_state_t input_state;
struct retro_perf_callback perf;
retro_hw_render_callback hw_render;
}
extern const uint8_t mkxp_gmgsx_sf2[]; extern const uint8_t mkxp_gmgsx_sf2[];
extern const size_t mkxp_gmgsx_sf2_len; extern const size_t mkxp_gmgsx_sf2_len;
@ -304,15 +304,15 @@ extern "C" RETRO_API void retro_set_environment(retro_environment_t cb) {
environment = cb; environment = cb;
struct retro_log_callback log; struct retro_log_callback log;
#ifndef __EMSCRIPTEN__
if (cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &log)) { if (cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &log)) {
log_printf = log.log; log_printf = log.log;
} else {
#endif // __EMSCRIPTEN__
log_printf = fallback_log;
#ifndef __EMSCRIPTEN__
} }
#endif // __EMSCRIPTEN__ // Bug in RetroArch:
// retro_set_environment is called multiple times and only the first time
// callbacks will work and return true.
else if (log_printf == NULL) {
log_printf = fallback_log;
}
perf = { perf = {
.get_time_usec = nullptr, .get_time_usec = nullptr,
@ -516,6 +516,7 @@ extern "C" RETRO_API bool retro_load_game_special(unsigned int type, const struc
extern "C" RETRO_API void retro_unload_game() { extern "C" RETRO_API void retro_unload_game() {
deinit_sandbox(); deinit_sandbox();
log_printf = NULL;
} }
extern "C" RETRO_API unsigned int retro_get_region() { extern "C" RETRO_API unsigned int retro_get_region() {