12
src/SDL.c
12
src/SDL.c
@@ -328,9 +328,21 @@ bool SDL_InitSubSystem(SDL_InitFlags flags)
|
|||||||
|
|
||||||
#ifdef SDL_PLATFORM_EMSCRIPTEN
|
#ifdef SDL_PLATFORM_EMSCRIPTEN
|
||||||
MAIN_THREAD_EM_ASM({
|
MAIN_THREAD_EM_ASM({
|
||||||
|
// make sure this generic table to hang SDL-specific Javascript stuff is available at init time.
|
||||||
if (typeof(Module['SDL3']) === 'undefined') {
|
if (typeof(Module['SDL3']) === 'undefined') {
|
||||||
Module['SDL3'] = {};
|
Module['SDL3'] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var SDL3 = Module['SDL3'];
|
||||||
|
#if defined(__wasm32__)
|
||||||
|
if (typeof(SDL3.JSVarToCPtr) === 'undefined') { SDL3.JSVarToCPtr = function(v) { return v; }; }
|
||||||
|
if (typeof(SDL3.CPtrToHeap32Index) === 'undefined') { SDL3.CPtrToHeap32Index = function(ptr) { return ptr >>> 2; }; }
|
||||||
|
#elif defined(__wasm64__)
|
||||||
|
if (typeof(SDL3.JSVarToCPtr) === 'undefined') { SDL3.JSVarToCPtr = function(v) { return BigInt(v); }; }
|
||||||
|
if (typeof(SDL3.CPtrToHeap32Index) === 'undefined') { SDL3.CPtrToHeap32Index = function(ptr) { return Number(ptr / 4n); }; }
|
||||||
|
#else
|
||||||
|
#error Please define your platform.
|
||||||
|
#endif
|
||||||
});
|
});
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -41,13 +41,8 @@ static bool EMSCRIPTENAUDIO_PlayDevice(SDL_AudioDevice *device, const Uint8 *buf
|
|||||||
const int framelen = SDL_AUDIO_FRAMESIZE(device->spec);
|
const int framelen = SDL_AUDIO_FRAMESIZE(device->spec);
|
||||||
MAIN_THREAD_EM_ASM({
|
MAIN_THREAD_EM_ASM({
|
||||||
/* Convert incoming buf pointer to a HEAPF32 offset. */
|
/* Convert incoming buf pointer to a HEAPF32 offset. */
|
||||||
#ifdef __wasm64__
|
|
||||||
var buf = $0 / 4;
|
|
||||||
#else
|
|
||||||
var buf = $0 >>> 2;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
var SDL3 = Module['SDL3'];
|
var SDL3 = Module['SDL3'];
|
||||||
|
var buf = SDL3.CPtrToHeap32Index($0);
|
||||||
var numChannels = SDL3.audio_playback.currentPlaybackBuffer['numberOfChannels'];
|
var numChannels = SDL3.audio_playback.currentPlaybackBuffer['numberOfChannels'];
|
||||||
for (var c = 0; c < numChannels; ++c) {
|
for (var c = 0; c < numChannels; ++c) {
|
||||||
var channelData = SDL3.audio_playback.currentPlaybackBuffer['getChannelData'](c);
|
var channelData = SDL3.audio_playback.currentPlaybackBuffer['getChannelData'](c);
|
||||||
|
|||||||
@@ -974,11 +974,7 @@ static void Emscripten_prep_pointer_event_callbacks(void)
|
|||||||
|
|
||||||
var ptr = _SDL_malloc($0);
|
var ptr = _SDL_malloc($0);
|
||||||
if (ptr != 0) {
|
if (ptr != 0) {
|
||||||
#ifdef __wasm32__
|
var idx = SDL3.CPtrToHeap32Index(ptr);
|
||||||
var idx = ptr >> 2;
|
|
||||||
#elif __wasm64__
|
|
||||||
var idx = Number(ptr / 4n);
|
|
||||||
#endif
|
|
||||||
HEAP32[idx++] = ptrtype;
|
HEAP32[idx++] = ptrtype;
|
||||||
HEAP32[idx++] = event.pointerId;
|
HEAP32[idx++] = event.pointerId;
|
||||||
HEAP32[idx++] = (typeof(event.button) !== "undefined") ? event.button : -1;
|
HEAP32[idx++] = (typeof(event.button) !== "undefined") ? event.button : -1;
|
||||||
@@ -1016,11 +1012,7 @@ static void Emscripten_set_pointer_event_callbacks(SDL_WindowData *data)
|
|||||||
var d = SDL3.makePointerEventCStruct(rect.left, rect.top, event);
|
var d = SDL3.makePointerEventCStruct(rect.left, rect.top, event);
|
||||||
if (d != 0)
|
if (d != 0)
|
||||||
{
|
{
|
||||||
#ifdef __wasm32__
|
_Emscripten_HandlePointerEnter(SDL3.JSVarToCPtr(data), d);
|
||||||
_Emscripten_HandlePointerEnter(data, d);
|
|
||||||
#elif __wasm64__
|
|
||||||
_Emscripten_HandlePointerEnter(BigInt(data), d);
|
|
||||||
#endif
|
|
||||||
_SDL_free(d);
|
_SDL_free(d);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1029,11 +1021,7 @@ static void Emscripten_set_pointer_event_callbacks(SDL_WindowData *data)
|
|||||||
var d = SDL3.makePointerEventCStruct(rect.left, rect.top, event);
|
var d = SDL3.makePointerEventCStruct(rect.left, rect.top, event);
|
||||||
if (d != 0)
|
if (d != 0)
|
||||||
{
|
{
|
||||||
#ifdef __wasm32__
|
_Emscripten_HandlePointerLeave(SDL3.JSVarToCPtr(data), d);
|
||||||
_Emscripten_HandlePointerLeave(data, d);
|
|
||||||
#elif __wasm64__
|
|
||||||
_Emscripten_HandlePointerLeave(BigInt(data), d);
|
|
||||||
#endif
|
|
||||||
_SDL_free(d);
|
_SDL_free(d);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1042,11 +1030,7 @@ static void Emscripten_set_pointer_event_callbacks(SDL_WindowData *data)
|
|||||||
var d = SDL3.makePointerEventCStruct(rect.left, rect.top, event);
|
var d = SDL3.makePointerEventCStruct(rect.left, rect.top, event);
|
||||||
if (d != 0)
|
if (d != 0)
|
||||||
{
|
{
|
||||||
#ifdef __wasm32__
|
_Emscripten_HandlePointerGeneric(SDL3.JSVarToCPtr(data), d);
|
||||||
_Emscripten_HandlePointerGeneric(data, d);
|
|
||||||
#elif __wasm64__
|
|
||||||
_Emscripten_HandlePointerGeneric(BigInt(data), d);
|
|
||||||
#endif
|
|
||||||
_SDL_free(d);
|
_SDL_free(d);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1104,11 +1088,7 @@ static void Emscripten_set_global_mouseup_callback(SDL_VideoDevice *device)
|
|||||||
var d = SDL3.makePointerEventCStruct(0, 0, event);
|
var d = SDL3.makePointerEventCStruct(0, 0, event);
|
||||||
if (d != 0)
|
if (d != 0)
|
||||||
{
|
{
|
||||||
#ifdef __wasm32__
|
_Emscripten_HandleMouseButtonUpGlobal(SDL3.JSVarToCPtr($0), d);
|
||||||
_Emscripten_HandleMouseButtonUpGlobal($0, d);
|
|
||||||
#elif __wasm64__
|
|
||||||
_Emscripten_HandleMouseButtonUpGlobal(BigInt($0), d);
|
|
||||||
#endif
|
|
||||||
_SDL_free(d);
|
_SDL_free(d);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1348,11 +1328,7 @@ void Emscripten_RegisterEventHandlers(SDL_WindowData *data)
|
|||||||
// don't try to adjust the state on the actual lock key presses; the normal key handler will catch that and adjust.
|
// don't try to adjust the state on the actual lock key presses; the normal key handler will catch that and adjust.
|
||||||
if ((event.key != "CapsLock") && (event.key != "NumLock") && (event.key != "ScrollLock"))
|
if ((event.key != "CapsLock") && (event.key != "NumLock") && (event.key != "ScrollLock"))
|
||||||
{
|
{
|
||||||
#ifdef __wasm32__
|
_Emscripten_HandleLockKeysCheck(Module['SDL3'].JSVarToCPtr(data), event.getModifierState("CapsLock"), event.getModifierState("NumLock"), event.getModifierState("ScrollLock"));
|
||||||
_Emscripten_HandleLockKeysCheck(data, event.getModifierState("CapsLock"), event.getModifierState("NumLock"), event.getModifierState("ScrollLock"));
|
|
||||||
#elif __wasm64__
|
|
||||||
_Emscripten_HandleLockKeysCheck(BigInt(data), event.getModifierState("CapsLock"), event.getModifierState("NumLock"), event.getModifierState("ScrollLock"));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
document.addEventListener("keydown", document.sdlEventHandlerLockKeysCheck);
|
document.addEventListener("keydown", document.sdlEventHandlerLockKeysCheck);
|
||||||
|
|||||||
Reference in New Issue
Block a user