Move some RETRO_ENVIRONMENT vars into C

This commit is contained in:
Sergey Stepanov 2024-12-16 23:28:14 +03:00
parent 600243c87d
commit 4aaeda3fbb
No known key found for this signature in database
GPG key ID: A56B4929BAA8556B
3 changed files with 33 additions and 32 deletions

View file

@ -4,6 +4,8 @@
#include <stdarg.h>
#include <stdio.h>
#define RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB (3 | 0x800000)
int initialized = 0;
typedef struct {
@ -127,16 +129,41 @@ static bool clear_all_thread_waits_cb(unsigned v, void *data) {
return true;
}
void bridge_clear_all_thread_waits_cb(void *data) {
*(retro_environment_t *)data = clear_all_thread_waits_cb;
}
void bridge_retro_keyboard_callback(void *cb, bool down, unsigned keycode, uint32_t character, uint16_t keyModifiers) {
(*(retro_keyboard_event_t *) cb)(down, keycode, character, keyModifiers);
}
bool core_environment_cgo(unsigned cmd, void *data) {
bool coreEnvironment(unsigned, void *);
switch (cmd)
{
case RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE:
return false;
break;
case RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE:
return false;
break;
case RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB:
*(retro_environment_t *)data = clear_all_thread_waits_cb;
return true;
break;
case RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS:
*(unsigned *)data = 4;
core_log_cgo(RETRO_LOG_DEBUG, "Set max users: %d\n", 4);
return true;
break;
case RETRO_ENVIRONMENT_GET_INPUT_BITMASKS:
return false;
case RETRO_ENVIRONMENT_SHUTDOWN:
return false;
break;
case RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT:
if (data != NULL) *(int *)data = RETRO_SAVESTATE_CONTEXT_NORMAL;
return true;
break;
}
return coreEnvironment(cmd, data);
}

View file

@ -23,8 +23,6 @@ import (
#include "libretro.h"
#include "nanoarch.h"
#include <stdlib.h>
#define RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB (3 | 0x800000)
*/
import "C"
@ -771,13 +769,8 @@ func coreGetProcAddress(sym *C.char) C.retro_proc_address_t {
//export coreEnvironment
func coreEnvironment(cmd C.unsigned, data unsafe.Pointer) C.bool {
// spammy
switch cmd {
case C.RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE:
return false
case C.RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE:
return false
}
// see core_environment_cgo
switch cmd {
case C.RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO:
@ -829,9 +822,6 @@ func coreEnvironment(cmd C.unsigned, data unsafe.Pointer) C.bool {
return true
}
return false
case C.RETRO_ENVIRONMENT_SHUTDOWN:
//window.SetShouldClose(true)
return false
case C.RETRO_ENVIRONMENT_GET_VARIABLE:
if Nan0.options == nil {
return false
@ -884,25 +874,10 @@ func coreEnvironment(cmd C.unsigned, data unsafe.Pointer) C.bool {
//Nan0.log.Debug().Msgf("%v", cInfo.String())
}
return true
case C.RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS:
*(*C.unsigned)(data) = C.unsigned(4)
Nan0.log.Debug().Msgf("Set max users: %v", 4)
return true
case C.RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK:
Nan0.log.Debug().Msgf("Keyboard event callback was set")
Nan0.keyboardCb = (*C.struct_retro_keyboard_callback)(data)
return true
case C.RETRO_ENVIRONMENT_GET_INPUT_BITMASKS:
Nan0.log.Debug().Msgf("Set input bitmasks: false")
return false
case C.RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB:
C.bridge_clear_all_thread_waits_cb(data)
return true
case C.RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT:
if ctx := (*C.int)(data); ctx != nil {
*ctx = C.RETRO_SAVESTATE_CONTEXT_NORMAL
}
return true
}
return false
}

View file

@ -23,7 +23,6 @@ void bridge_retro_set_controller_port_device(void *f, unsigned port, unsigned de
void bridge_retro_set_input_poll(void *f, void *callback);
void bridge_retro_set_input_state(void *f, void *callback);
void bridge_retro_set_video_refresh(void *f, void *callback);
void bridge_clear_all_thread_waits_cb(void *f);
void bridge_retro_keyboard_callback(void *f, bool down, unsigned keycode, uint32_t character, uint16_t keyModifiers);
bool core_environment_cgo(unsigned cmd, void *data);