mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-04 08:56:25 +00:00
removed NaCL support.
This commit is contained in:
@@ -496,9 +496,6 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
|
||||
#if HAVE_STDIO_H && \
|
||||
!(defined(__APPLE__) && (defined(SDL_VIDEO_DRIVER_COCOA) || defined(SDL_VIDEO_DRIVER_UIKIT)))
|
||||
fprintf(stderr, "%s: %s\n", SDL_priority_prefixes[priority], message);
|
||||
#if __NACL__
|
||||
fflush(stderr);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -48,9 +48,6 @@ static const AudioBootStrap *const bootstrap[] = {
|
||||
#if SDL_AUDIO_DRIVER_QSA
|
||||
&QSAAUDIO_bootstrap,
|
||||
#endif
|
||||
#if SDL_AUDIO_DRIVER_NACL
|
||||
&NACLAUDIO_bootstrap,
|
||||
#endif
|
||||
#if SDL_AUDIO_DRIVER_WASAPI
|
||||
&WASAPI_bootstrap,
|
||||
#endif
|
||||
|
@@ -187,7 +187,6 @@ extern AudioBootStrap ALSA_bootstrap;
|
||||
extern AudioBootStrap NETBSDAUDIO_bootstrap;
|
||||
extern AudioBootStrap DSP_bootstrap;
|
||||
extern AudioBootStrap QSAAUDIO_bootstrap;
|
||||
extern AudioBootStrap NACLAUDIO_bootstrap;
|
||||
extern AudioBootStrap WASAPI_bootstrap;
|
||||
extern AudioBootStrap DSOUND_bootstrap;
|
||||
extern AudioBootStrap WINMM_bootstrap;
|
||||
|
@@ -1,160 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_AUDIO_DRIVER_NACL
|
||||
|
||||
#include "SDL_naclaudio.h"
|
||||
|
||||
#include "SDL_audio.h"
|
||||
#include "SDL_mutex.h"
|
||||
#include "../SDL_audio_c.h"
|
||||
#include "../SDL_audiodev_c.h"
|
||||
|
||||
#include "ppapi/c/pp_errors.h"
|
||||
#include "ppapi/c/pp_instance.h"
|
||||
#include "ppapi_simple/ps.h"
|
||||
#include "ppapi_simple/ps_interface.h"
|
||||
#include "ppapi_simple/ps_event.h"
|
||||
|
||||
/* The tag name used by NACL audio */
|
||||
#define NACLAUDIO_DRIVER_NAME "nacl"
|
||||
|
||||
#define SAMPLE_FRAME_COUNT 4096
|
||||
|
||||
/* Audio driver functions */
|
||||
static void nacl_audio_callback(void* samples, uint32_t buffer_size, PP_TimeDelta latency, void* data);
|
||||
|
||||
/* FIXME: Make use of latency if needed */
|
||||
static void nacl_audio_callback(void* stream, uint32_t buffer_size, PP_TimeDelta latency, void* data) {
|
||||
const int len = (int) buffer_size;
|
||||
SDL_AudioDevice* _this = (SDL_AudioDevice*) data;
|
||||
SDL_AudioCallback callback = _this->callbackspec.callback;
|
||||
|
||||
SDL_LockMutex(_this->mixer_lock);
|
||||
|
||||
/* Only do something if audio is enabled */
|
||||
if (!SDL_AtomicGet(&_this->enabled) || SDL_AtomicGet(&_this->paused)) {
|
||||
if (_this->stream) {
|
||||
SDL_AudioStreamClear(_this->stream);
|
||||
}
|
||||
SDL_memset(stream, _this->spec.silence, len);
|
||||
} else {
|
||||
SDL_assert(_this->spec.size == len);
|
||||
|
||||
if (_this->stream == NULL) { /* no conversion necessary. */
|
||||
callback(_this->callbackspec.userdata, stream, len);
|
||||
} else { /* streaming/converting */
|
||||
const int stream_len = _this->callbackspec.size;
|
||||
while (SDL_AudioStreamAvailable(_this->stream) < len) {
|
||||
callback(_this->callbackspec.userdata, _this->work_buffer, stream_len);
|
||||
if (SDL_AudioStreamPut(_this->stream, _this->work_buffer, stream_len) == -1) {
|
||||
SDL_AudioStreamClear(_this->stream);
|
||||
SDL_AtomicSet(&_this->enabled, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const int got = SDL_AudioStreamGet(_this->stream, stream, len);
|
||||
SDL_assert((got < 0) || (got == len));
|
||||
if (got != len) {
|
||||
SDL_memset(stream, _this->spec.silence, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SDL_UnlockMutex(_this->mixer_lock);
|
||||
}
|
||||
|
||||
static void NACLAUDIO_CloseDevice(SDL_AudioDevice *device) {
|
||||
const PPB_Core *core = PSInterfaceCore();
|
||||
const PPB_Audio *ppb_audio = PSInterfaceAudio();
|
||||
SDL_PrivateAudioData *hidden = (SDL_PrivateAudioData *) device->hidden;
|
||||
|
||||
ppb_audio->StopPlayback(hidden->audio);
|
||||
core->ReleaseResource(hidden->audio);
|
||||
}
|
||||
|
||||
static int
|
||||
NACLAUDIO_OpenDevice(_THIS, const char *devname) {
|
||||
PP_Instance instance = PSGetInstanceId();
|
||||
const PPB_Audio *ppb_audio = PSInterfaceAudio();
|
||||
const PPB_AudioConfig *ppb_audiocfg = PSInterfaceAudioConfig();
|
||||
|
||||
private = (SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *private));
|
||||
if (private == NULL) {
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
_this->spec.freq = 44100;
|
||||
_this->spec.format = AUDIO_S16LSB;
|
||||
_this->spec.channels = 2;
|
||||
_this->spec.samples = ppb_audiocfg->RecommendSampleFrameCount(
|
||||
instance,
|
||||
PP_AUDIOSAMPLERATE_44100,
|
||||
SAMPLE_FRAME_COUNT);
|
||||
|
||||
/* Calculate the final parameters for this audio specification */
|
||||
SDL_CalculateAudioSpec(&_this->spec);
|
||||
|
||||
private->audio = ppb_audio->Create(
|
||||
instance,
|
||||
ppb_audiocfg->CreateStereo16Bit(instance, PP_AUDIOSAMPLERATE_44100, _this->spec.samples),
|
||||
nacl_audio_callback,
|
||||
_this);
|
||||
|
||||
/* Start audio playback while we are still on the main thread. */
|
||||
ppb_audio->StartPlayback(private->audio);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SDL_bool
|
||||
NACLAUDIO_Init(SDL_AudioDriverImpl * impl)
|
||||
{
|
||||
if (PSGetInstanceId() == 0) {
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
/* Set the function pointers */
|
||||
impl->OpenDevice = NACLAUDIO_OpenDevice;
|
||||
impl->CloseDevice = NACLAUDIO_CloseDevice;
|
||||
impl->OnlyHasDefaultOutputDevice = SDL_TRUE;
|
||||
impl->ProvidesOwnCallbackThread = SDL_TRUE;
|
||||
/*
|
||||
* impl->WaitDevice = NACLAUDIO_WaitDevice;
|
||||
* impl->GetDeviceBuf = NACLAUDIO_GetDeviceBuf;
|
||||
* impl->PlayDevice = NACLAUDIO_PlayDevice;
|
||||
* impl->Deinitialize = NACLAUDIO_Deinitialize;
|
||||
*/
|
||||
|
||||
return SDL_TRUE;
|
||||
}
|
||||
|
||||
AudioBootStrap NACLAUDIO_bootstrap = {
|
||||
NACLAUDIO_DRIVER_NAME, "SDL NaCl Audio Driver",
|
||||
NACLAUDIO_Init, SDL_FALSE
|
||||
};
|
||||
|
||||
#endif /* SDL_AUDIO_DRIVER_NACL */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#ifndef SDL_naclaudio_h_
|
||||
#define SDL_naclaudio_h_
|
||||
|
||||
#include "SDL_audio.h"
|
||||
#include "../SDL_sysaudio.h"
|
||||
#include "SDL_mutex.h"
|
||||
|
||||
#include "ppapi/c/ppb_audio.h"
|
||||
|
||||
#define _THIS SDL_AudioDevice *_this
|
||||
#define private _this->hidden
|
||||
|
||||
typedef struct SDL_PrivateAudioData {
|
||||
PP_Resource audio;
|
||||
} SDL_PrivateAudioData;
|
||||
|
||||
#endif /* SDL_naclaudio_h_ */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
@@ -47,8 +47,6 @@
|
||||
#define SDL_DYNAMIC_API 0
|
||||
#elif defined(__ANDROID__) /* probably not useful on Android. */
|
||||
#define SDL_DYNAMIC_API 0
|
||||
#elif defined(__native_client__) && __native_client__ /* probably not useful on NACL. */
|
||||
#define SDL_DYNAMIC_API 0
|
||||
#elif defined(__EMSCRIPTEN__) && __EMSCRIPTEN__ /* probably not useful on Emscripten. */
|
||||
#define SDL_DYNAMIC_API 0
|
||||
#elif defined(SDL_BUILDING_WINRT) && SDL_BUILDING_WINRT /* probably not useful on WinRT, given current .dll loading restrictions */
|
||||
|
@@ -62,10 +62,6 @@
|
||||
#include "SDL_system.h"
|
||||
#endif
|
||||
|
||||
#if __NACL__
|
||||
#include "nacl_io/nacl_io.h"
|
||||
#endif
|
||||
|
||||
#if defined(__WIN32__) || defined(__GDK__)
|
||||
|
||||
/* Functions to read/write Win32 API file pointers */
|
||||
|
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
#include "SDL_error.h"
|
||||
#include "SDL_filesystem.h"
|
||||
|
||||
#ifdef SDL_FILESYSTEM_NACL
|
||||
|
||||
char *
|
||||
SDL_GetBasePath(void)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *
|
||||
SDL_GetPrefPath(const char *org, const char *app)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* SDL_FILESYSTEM_NACL */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
@@ -1,93 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_NACL
|
||||
|
||||
/* Include the SDL main definition header */
|
||||
#include "SDL_main.h"
|
||||
|
||||
#include "ppapi_simple/ps_main.h"
|
||||
#include "ppapi_simple/ps_event.h"
|
||||
#include "ppapi_simple/ps_interface.h"
|
||||
#include "nacl_io/nacl_io.h"
|
||||
#include "sys/mount.h"
|
||||
|
||||
extern void NACL_SetScreenResolution(int width, int height, Uint32 format);
|
||||
|
||||
int
|
||||
nacl_main(int argc, char *argv[])
|
||||
{
|
||||
int status;
|
||||
PSEvent* ps_event;
|
||||
PP_Resource event;
|
||||
struct PP_Rect rect;
|
||||
int ready = 0;
|
||||
const PPB_View *ppb_view = PSInterfaceView();
|
||||
|
||||
/* This is started in a worker thread by ppapi_simple! */
|
||||
|
||||
/* Wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before starting the app */
|
||||
|
||||
PSEventSetFilter(PSE_INSTANCE_DIDCHANGEVIEW);
|
||||
while (!ready) {
|
||||
/* Process all waiting events without blocking */
|
||||
while (!ready && (ps_event = PSEventWaitAcquire()) != NULL) {
|
||||
event = ps_event->as_resource;
|
||||
switch(ps_event->type) {
|
||||
/* From DidChangeView, contains a view resource */
|
||||
case PSE_INSTANCE_DIDCHANGEVIEW:
|
||||
ppb_view->GetRect(event, &rect);
|
||||
NACL_SetScreenResolution(rect.size.width, rect.size.height, 0);
|
||||
ready = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
PSEventRelease(ps_event);
|
||||
}
|
||||
}
|
||||
|
||||
/* Do a default httpfs mount on /,
|
||||
* apps can override this by unmounting /
|
||||
* and remounting with the desired configuration
|
||||
*/
|
||||
nacl_io_init_ppapi(PSGetInstanceId(), PSGetInterface);
|
||||
|
||||
umount("/");
|
||||
mount(
|
||||
"", /* source */
|
||||
"/", /* target */
|
||||
"httpfs", /* filesystemtype */
|
||||
0, /* mountflags */
|
||||
""); /* data specific to the html5fs type */
|
||||
|
||||
/* Everything is ready, start the user main function */
|
||||
SDL_SetMainReady();
|
||||
status = SDL_main(argc, argv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ppapi_simple will start nacl_main in a worker thread */
|
||||
PPAPI_SIMPLE_REGISTER_MAIN(nacl_main);
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_NACL */
|
@@ -53,11 +53,7 @@ SDL_PROC(void, glPixelStorei, (GLenum, GLint))
|
||||
SDL_PROC(void, glReadPixels, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*))
|
||||
SDL_PROC(void, glScissor, (GLint, GLint, GLsizei, GLsizei))
|
||||
SDL_PROC(void, glShaderBinary, (GLsizei, const GLuint *, GLenum, const void *, GLsizei))
|
||||
#if __NACL__
|
||||
SDL_PROC(void, glShaderSource, (GLuint, GLsizei, const GLchar **, const GLint *))
|
||||
#else
|
||||
SDL_PROC(void, glShaderSource, (GLuint, GLsizei, const GLchar* const*, const GLint *))
|
||||
#endif
|
||||
SDL_PROC(void, glTexImage2D, (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *))
|
||||
SDL_PROC(void, glTexParameteri, (GLenum, GLenum, GLint))
|
||||
SDL_PROC(void, glTexSubImage2D, (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *))
|
||||
|
@@ -60,13 +60,11 @@
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __NACL__
|
||||
/* List of signals to mask in the subthreads */
|
||||
static const int sig_list[] = {
|
||||
SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH,
|
||||
SIGVTALRM, SIGPROF, 0
|
||||
};
|
||||
#endif
|
||||
|
||||
static void *
|
||||
RunThread(void *data)
|
||||
@@ -125,10 +123,8 @@ SDL_SYS_CreateThread(SDL_Thread * thread)
|
||||
void
|
||||
SDL_SYS_SetupThread(const char *name)
|
||||
{
|
||||
#if !defined(__NACL__)
|
||||
int i;
|
||||
sigset_t mask;
|
||||
#endif /* !__NACL__ */
|
||||
|
||||
if (name != NULL) {
|
||||
#if (defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__LINUX__)) && defined(HAVE_DLOPEN)
|
||||
@@ -164,16 +160,12 @@ SDL_SYS_SetupThread(const char *name)
|
||||
#endif
|
||||
}
|
||||
|
||||
/* NativeClient does not yet support signals.*/
|
||||
#if !defined(__NACL__)
|
||||
/* Mask asynchronous signals for this thread */
|
||||
sigemptyset(&mask);
|
||||
for (i = 0; sig_list[i]; ++i) {
|
||||
sigaddset(&mask, sig_list[i]);
|
||||
}
|
||||
pthread_sigmask(SIG_BLOCK, &mask, 0);
|
||||
#endif /* !__NACL__ */
|
||||
|
||||
|
||||
#ifdef PTHREAD_CANCEL_ASYNCHRONOUS
|
||||
/* Allow ourselves to be asynchronously cancelled */
|
||||
@@ -193,8 +185,8 @@ SDL_ThreadID(void)
|
||||
int
|
||||
SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||
{
|
||||
#if __NACL__ || __RISCOS__ || __OS2__
|
||||
/* FIXME: Setting thread priority does not seem to be supported in NACL */
|
||||
#if __RISCOS__
|
||||
/* FIXME: Setting thread priority does not seem to be supported */
|
||||
return 0;
|
||||
#else
|
||||
struct sched_param sched;
|
||||
@@ -287,7 +279,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||
}
|
||||
return 0;
|
||||
#endif /* linux */
|
||||
#endif /* #if __NACL__ || __RISCOS__ */
|
||||
#endif /* #if __RISCOS__ */
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -468,7 +468,6 @@ extern VideoBootStrap KMSDRM_LEGACY_bootstrap;
|
||||
extern VideoBootStrap DUMMY_bootstrap;
|
||||
extern VideoBootStrap DUMMY_evdev_bootstrap;
|
||||
extern VideoBootStrap Wayland_bootstrap;
|
||||
extern VideoBootStrap NACL_bootstrap;
|
||||
extern VideoBootStrap VIVANTE_bootstrap;
|
||||
extern VideoBootStrap Emscripten_bootstrap;
|
||||
extern VideoBootStrap QNX_bootstrap;
|
||||
|
@@ -116,9 +116,6 @@ static VideoBootStrap *bootstrap[] = {
|
||||
#if SDL_VIDEO_DRIVER_RPI
|
||||
&RPI_bootstrap,
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_NACL
|
||||
&NACL_bootstrap,
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_EMSCRIPTEN
|
||||
&Emscripten_bootstrap,
|
||||
#endif
|
||||
@@ -198,7 +195,7 @@ typedef struct {
|
||||
static Uint32
|
||||
SDL_DefaultGraphicsBackends(SDL_VideoDevice *_this)
|
||||
{
|
||||
#if (SDL_VIDEO_OPENGL && __MACOSX__) || (__IPHONEOS__ && !TARGET_OS_MACCATALYST) || __ANDROID__ || __NACL__
|
||||
#if (SDL_VIDEO_OPENGL && __MACOSX__) || (__IPHONEOS__ && !TARGET_OS_MACCATALYST) || __ANDROID__
|
||||
if (_this->GL_CreateContext != NULL) {
|
||||
return SDL_WINDOW_OPENGL;
|
||||
}
|
||||
|
@@ -1,440 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_NACL
|
||||
|
||||
#include "SDL.h"
|
||||
#include "../../events/SDL_events_c.h"
|
||||
#include "../SDL_sysvideo.h"
|
||||
#include "SDL_naclevents_c.h"
|
||||
#include "SDL_naclvideo.h"
|
||||
#include "ppapi_simple/ps_event.h"
|
||||
|
||||
/* Ref: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent */
|
||||
|
||||
static SDL_Scancode NACL_Keycodes[] = {
|
||||
SDL_SCANCODE_UNKNOWN, /* 0 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 1 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 2 */
|
||||
SDL_SCANCODE_CANCEL, /* DOM_VK_CANCEL 3 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 4 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 5 */
|
||||
SDL_SCANCODE_HELP, /* DOM_VK_HELP 6 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 7 */
|
||||
SDL_SCANCODE_BACKSPACE, /* DOM_VK_BACK_SPACE 8 */
|
||||
SDL_SCANCODE_TAB, /* DOM_VK_TAB 9 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 10 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 11 */
|
||||
SDL_SCANCODE_CLEAR, /* DOM_VK_CLEAR 12 */
|
||||
SDL_SCANCODE_RETURN, /* DOM_VK_RETURN 13 */
|
||||
SDL_SCANCODE_RETURN, /* DOM_VK_ENTER 14 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 15 */
|
||||
SDL_SCANCODE_LSHIFT, /* DOM_VK_SHIFT 16 */
|
||||
SDL_SCANCODE_LCTRL, /* DOM_VK_CONTROL 17 */
|
||||
SDL_SCANCODE_LALT, /* DOM_VK_ALT 18 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_PAUSE 19 */
|
||||
SDL_SCANCODE_CAPSLOCK, /* DOM_VK_CAPS_LOCK 20 */
|
||||
SDL_SCANCODE_LANG1, /* DOM_VK_KANA DOM_VK_HANGUL 21 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_EISU 22 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_JUNJA 23 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_FINAL 24 */
|
||||
SDL_SCANCODE_LANG2, /* DOM_VK_HANJA DOM_VK_KANJI 25 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 26 */
|
||||
SDL_SCANCODE_ESCAPE, /* DOM_VK_ESCAPE 27 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_CONVERT 28 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_NONCONVERT 29 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_ACCEPT 30 */
|
||||
SDL_SCANCODE_MODE, /* DOM_VK_MODECHANGE 31 */
|
||||
SDL_SCANCODE_SPACE, /* DOM_VK_SPACE 32 */
|
||||
SDL_SCANCODE_PAGEUP, /* DOM_VK_PAGE_UP 33 */
|
||||
SDL_SCANCODE_PAGEDOWN, /* DOM_VK_PAGE_DOWN 34 */
|
||||
SDL_SCANCODE_END, /* DOM_VK_END 35 */
|
||||
SDL_SCANCODE_HOME, /* DOM_VK_HOME 36 */
|
||||
SDL_SCANCODE_LEFT, /* DOM_VK_LEFT 37 */
|
||||
SDL_SCANCODE_UP, /* DOM_VK_UP 38 */
|
||||
SDL_SCANCODE_RIGHT, /* DOM_VK_RIGHT 39 */
|
||||
SDL_SCANCODE_DOWN, /* DOM_VK_DOWN 40 */
|
||||
SDL_SCANCODE_SELECT, /* DOM_VK_SELECT 41 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_PRINT 42 */
|
||||
SDL_SCANCODE_EXECUTE, /* DOM_VK_EXECUTE 43 */
|
||||
SDL_SCANCODE_PRINTSCREEN, /* DOM_VK_PRINTSCREEN 44 */
|
||||
SDL_SCANCODE_INSERT, /* DOM_VK_INSERT 45 */
|
||||
SDL_SCANCODE_DELETE, /* DOM_VK_DELETE 46 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 47 */
|
||||
SDL_SCANCODE_0, /* DOM_VK_0 48 */
|
||||
SDL_SCANCODE_1, /* DOM_VK_1 49 */
|
||||
SDL_SCANCODE_2, /* DOM_VK_2 50 */
|
||||
SDL_SCANCODE_3, /* DOM_VK_3 51 */
|
||||
SDL_SCANCODE_4, /* DOM_VK_4 52 */
|
||||
SDL_SCANCODE_5, /* DOM_VK_5 53 */
|
||||
SDL_SCANCODE_6, /* DOM_VK_6 54 */
|
||||
SDL_SCANCODE_7, /* DOM_VK_7 55 */
|
||||
SDL_SCANCODE_8, /* DOM_VK_8 56 */
|
||||
SDL_SCANCODE_9, /* DOM_VK_9 57 */
|
||||
SDL_SCANCODE_KP_COLON, /* DOM_VK_COLON 58 */
|
||||
SDL_SCANCODE_SEMICOLON, /* DOM_VK_SEMICOLON 59 */
|
||||
SDL_SCANCODE_KP_LESS, /* DOM_VK_LESS_THAN 60 */
|
||||
SDL_SCANCODE_EQUALS, /* DOM_VK_EQUALS 61 */
|
||||
SDL_SCANCODE_KP_GREATER, /* DOM_VK_GREATER_THAN 62 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_QUESTION_MARK 63 */
|
||||
SDL_SCANCODE_KP_AT, /* DOM_VK_AT 64 */
|
||||
SDL_SCANCODE_A, /* DOM_VK_A 65 */
|
||||
SDL_SCANCODE_B, /* DOM_VK_B 66 */
|
||||
SDL_SCANCODE_C, /* DOM_VK_C 67 */
|
||||
SDL_SCANCODE_D, /* DOM_VK_D 68 */
|
||||
SDL_SCANCODE_E, /* DOM_VK_E 69 */
|
||||
SDL_SCANCODE_F, /* DOM_VK_F 70 */
|
||||
SDL_SCANCODE_G, /* DOM_VK_G 71 */
|
||||
SDL_SCANCODE_H, /* DOM_VK_H 72 */
|
||||
SDL_SCANCODE_I, /* DOM_VK_I 73 */
|
||||
SDL_SCANCODE_J, /* DOM_VK_J 74 */
|
||||
SDL_SCANCODE_K, /* DOM_VK_K 75 */
|
||||
SDL_SCANCODE_L, /* DOM_VK_L 76 */
|
||||
SDL_SCANCODE_M, /* DOM_VK_M 77 */
|
||||
SDL_SCANCODE_N, /* DOM_VK_N 78 */
|
||||
SDL_SCANCODE_O, /* DOM_VK_O 79 */
|
||||
SDL_SCANCODE_P, /* DOM_VK_P 80 */
|
||||
SDL_SCANCODE_Q, /* DOM_VK_Q 81 */
|
||||
SDL_SCANCODE_R, /* DOM_VK_R 82 */
|
||||
SDL_SCANCODE_S, /* DOM_VK_S 83 */
|
||||
SDL_SCANCODE_T, /* DOM_VK_T 84 */
|
||||
SDL_SCANCODE_U, /* DOM_VK_U 85 */
|
||||
SDL_SCANCODE_V, /* DOM_VK_V 86 */
|
||||
SDL_SCANCODE_W, /* DOM_VK_W 87 */
|
||||
SDL_SCANCODE_X, /* DOM_VK_X 88 */
|
||||
SDL_SCANCODE_Y, /* DOM_VK_Y 89 */
|
||||
SDL_SCANCODE_Z, /* DOM_VK_Z 90 */
|
||||
SDL_SCANCODE_LGUI, /* DOM_VK_WIN 91 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 92 */
|
||||
SDL_SCANCODE_APPLICATION, /* DOM_VK_CONTEXT_MENU 93 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 94 */
|
||||
SDL_SCANCODE_SLEEP, /* DOM_VK_SLEEP 95 */
|
||||
SDL_SCANCODE_KP_0, /* DOM_VK_NUMPAD0 96 */
|
||||
SDL_SCANCODE_KP_1, /* DOM_VK_NUMPAD1 97 */
|
||||
SDL_SCANCODE_KP_2, /* DOM_VK_NUMPAD2 98 */
|
||||
SDL_SCANCODE_KP_3, /* DOM_VK_NUMPAD3 99 */
|
||||
SDL_SCANCODE_KP_4, /* DOM_VK_NUMPAD4 100 */
|
||||
SDL_SCANCODE_KP_5, /* DOM_VK_NUMPAD5 101 */
|
||||
SDL_SCANCODE_KP_6, /* DOM_VK_NUMPAD6 102 */
|
||||
SDL_SCANCODE_KP_7, /* DOM_VK_NUMPAD7 103 */
|
||||
SDL_SCANCODE_KP_8, /* DOM_VK_NUMPAD8 104 */
|
||||
SDL_SCANCODE_KP_9, /* DOM_VK_NUMPAD9 105 */
|
||||
SDL_SCANCODE_KP_MULTIPLY, /* DOM_VK_MULTIPLY 106 */
|
||||
SDL_SCANCODE_KP_PLUS, /* DOM_VK_ADD 107 */
|
||||
SDL_SCANCODE_KP_COMMA, /* DOM_VK_SEPARATOR 108 */
|
||||
SDL_SCANCODE_KP_MINUS, /* DOM_VK_SUBTRACT 109 */
|
||||
SDL_SCANCODE_KP_PERIOD, /* DOM_VK_DECIMAL 110 */
|
||||
SDL_SCANCODE_KP_DIVIDE, /* DOM_VK_DIVIDE 111 */
|
||||
SDL_SCANCODE_F1, /* DOM_VK_F1 112 */
|
||||
SDL_SCANCODE_F2, /* DOM_VK_F2 113 */
|
||||
SDL_SCANCODE_F3, /* DOM_VK_F3 114 */
|
||||
SDL_SCANCODE_F4, /* DOM_VK_F4 115 */
|
||||
SDL_SCANCODE_F5, /* DOM_VK_F5 116 */
|
||||
SDL_SCANCODE_F6, /* DOM_VK_F6 117 */
|
||||
SDL_SCANCODE_F7, /* DOM_VK_F7 118 */
|
||||
SDL_SCANCODE_F8, /* DOM_VK_F8 119 */
|
||||
SDL_SCANCODE_F9, /* DOM_VK_F9 120 */
|
||||
SDL_SCANCODE_F10, /* DOM_VK_F10 121 */
|
||||
SDL_SCANCODE_F11, /* DOM_VK_F11 122 */
|
||||
SDL_SCANCODE_F12, /* DOM_VK_F12 123 */
|
||||
SDL_SCANCODE_F13, /* DOM_VK_F13 124 */
|
||||
SDL_SCANCODE_F14, /* DOM_VK_F14 125 */
|
||||
SDL_SCANCODE_F15, /* DOM_VK_F15 126 */
|
||||
SDL_SCANCODE_F16, /* DOM_VK_F16 127 */
|
||||
SDL_SCANCODE_F17, /* DOM_VK_F17 128 */
|
||||
SDL_SCANCODE_F18, /* DOM_VK_F18 129 */
|
||||
SDL_SCANCODE_F19, /* DOM_VK_F19 130 */
|
||||
SDL_SCANCODE_F20, /* DOM_VK_F20 131 */
|
||||
SDL_SCANCODE_F21, /* DOM_VK_F21 132 */
|
||||
SDL_SCANCODE_F22, /* DOM_VK_F22 133 */
|
||||
SDL_SCANCODE_F23, /* DOM_VK_F23 134 */
|
||||
SDL_SCANCODE_F24, /* DOM_VK_F24 135 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 136 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 137 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 138 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 139 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 140 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 141 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 142 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 143 */
|
||||
SDL_SCANCODE_NUMLOCKCLEAR, /* DOM_VK_NUM_LOCK 144 */
|
||||
SDL_SCANCODE_SCROLLLOCK, /* DOM_VK_SCROLL_LOCK 145 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_JISHO 146 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_MASSHOU 147 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_TOUROKU 148 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_LOYA 149 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_ROYA 150 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 151 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 152 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 153 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 154 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 155 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 156 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 157 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 158 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 159 */
|
||||
SDL_SCANCODE_GRAVE, /* DOM_VK_CIRCUMFLEX 160 */
|
||||
SDL_SCANCODE_KP_EXCLAM, /* DOM_VK_EXCLAMATION 161 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_DOUBLE_QUOTE 162 */
|
||||
SDL_SCANCODE_KP_HASH, /* DOM_VK_HASH 163 */
|
||||
SDL_SCANCODE_CURRENCYUNIT, /* DOM_VK_DOLLAR 164 */
|
||||
SDL_SCANCODE_KP_PERCENT, /* DOM_VK_PERCENT 165 */
|
||||
SDL_SCANCODE_KP_AMPERSAND, /* DOM_VK_AMPERSAND 166 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_UNDERSCORE 167 */
|
||||
SDL_SCANCODE_KP_LEFTPAREN, /* DOM_VK_OPEN_PAREN 168 */
|
||||
SDL_SCANCODE_KP_RIGHTPAREN, /* DOM_VK_CLOSE_PAREN 169 */
|
||||
SDL_SCANCODE_KP_MULTIPLY, /* DOM_VK_ASTERISK 170 */
|
||||
SDL_SCANCODE_KP_PLUS, /* DOM_VK_PLUS 171 */
|
||||
SDL_SCANCODE_KP_PLUS, /* DOM_VK_PIPE 172 */
|
||||
SDL_SCANCODE_MINUS, /* DOM_VK_HYPHEN_MINUS 173 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_OPEN_CURLY_BRACKET 174 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_CLOSE_CURLY_BRACKET 175 */
|
||||
SDL_SCANCODE_NONUSBACKSLASH, /* DOM_VK_TILDE 176 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 177 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 178 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 179 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 180 */
|
||||
SDL_SCANCODE_MUTE, /* DOM_VK_VOLUME_MUTE 181 */
|
||||
SDL_SCANCODE_VOLUMEDOWN, /* DOM_VK_VOLUME_DOWN 182 */
|
||||
SDL_SCANCODE_VOLUMEUP, /* DOM_VK_VOLUME_UP 183 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 184 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 185 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 186 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 187 */
|
||||
SDL_SCANCODE_COMMA, /* DOM_VK_COMMA 188 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 189 */
|
||||
SDL_SCANCODE_PERIOD, /* DOM_VK_PERIOD 190 */
|
||||
SDL_SCANCODE_SLASH, /* DOM_VK_SLASH 191 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_BACK_QUOTE 192 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 193 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 194 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 195 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 196 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 197 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 198 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 199 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 200 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 201 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 202 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 203 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 204 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 205 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 206 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 207 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 208 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 209 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 210 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 211 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 212 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 213 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 214 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 215 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 216 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 217 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 218 */
|
||||
SDL_SCANCODE_LEFTBRACKET, /* DOM_VK_OPEN_BRACKET 219 */
|
||||
SDL_SCANCODE_BACKSLASH, /* DOM_VK_BACK_SLASH 220 */
|
||||
SDL_SCANCODE_RIGHTBRACKET, /* DOM_VK_CLOSE_BRACKET 221 */
|
||||
SDL_SCANCODE_APOSTROPHE, /* DOM_VK_QUOTE 222 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 223 */
|
||||
SDL_SCANCODE_RGUI, /* DOM_VK_META 224 */
|
||||
SDL_SCANCODE_RALT, /* DOM_VK_ALTGR 225 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 226 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_HELP 227 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_00 228 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 229 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_CLEAR 230 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 231 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 232 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_RESET 233 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_JUMP 234 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA1 235 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA2 236 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA3 237 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_WSCTRL 238 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_CUSEL 239 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_ATTN 240 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FINISH 241 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_COPY 242 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_AUTO 243 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_ENLW 244 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_BACKTAB 245 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_ATTN 246 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_CRSEL 247 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_EXSEL 248 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_EREOF 249 */
|
||||
SDL_SCANCODE_AUDIOPLAY, /* DOM_VK_PLAY 250 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_ZOOM 251 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 252 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_PA1 253 */
|
||||
SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_CLEAR 254 */
|
||||
SDL_SCANCODE_UNKNOWN, /* 255 */
|
||||
};
|
||||
|
||||
static Uint8 SDL_NACL_translate_mouse_button(int32_t button) {
|
||||
switch (button) {
|
||||
case PP_INPUTEVENT_MOUSEBUTTON_LEFT:
|
||||
return SDL_BUTTON_LEFT;
|
||||
case PP_INPUTEVENT_MOUSEBUTTON_MIDDLE:
|
||||
return SDL_BUTTON_MIDDLE;
|
||||
case PP_INPUTEVENT_MOUSEBUTTON_RIGHT:
|
||||
return SDL_BUTTON_RIGHT;
|
||||
|
||||
case PP_INPUTEVENT_MOUSEBUTTON_NONE:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static SDL_Scancode
|
||||
SDL_NACL_translate_keycode(int keycode)
|
||||
{
|
||||
SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
|
||||
|
||||
if (keycode < SDL_arraysize(NACL_Keycodes)) {
|
||||
scancode = NACL_Keycodes[keycode];
|
||||
}
|
||||
#ifdef DEBUG_SCANCODES
|
||||
if (scancode == SDL_SCANCODE_UNKNOWN) {
|
||||
SDL_Log("The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL forums/mailing list <https://discourse.libsdl.org/> NACL KeyCode %d", keycode);
|
||||
}
|
||||
#endif
|
||||
return scancode;
|
||||
}
|
||||
|
||||
void NACL_PumpEvents(_THIS) {
|
||||
PSEvent* ps_event;
|
||||
PP_Resource event;
|
||||
PP_InputEvent_Type type;
|
||||
PP_InputEvent_Modifier modifiers;
|
||||
struct PP_Rect rect;
|
||||
struct PP_FloatPoint fp;
|
||||
struct PP_Point location;
|
||||
struct PP_Var var;
|
||||
const char *str;
|
||||
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];
|
||||
Uint32 str_len;
|
||||
SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
|
||||
SDL_Mouse *mouse = SDL_GetMouse();
|
||||
|
||||
if (driverdata->window) {
|
||||
while ((ps_event = PSEventTryAcquire()) != NULL) {
|
||||
event = ps_event->as_resource;
|
||||
switch(ps_event->type) {
|
||||
/* From DidChangeView, contains a view resource */
|
||||
case PSE_INSTANCE_DIDCHANGEVIEW:
|
||||
driverdata->ppb_view->GetRect(event, &rect);
|
||||
NACL_SetScreenResolution(rect.size.width, rect.size.height, SDL_PIXELFORMAT_UNKNOWN);
|
||||
// FIXME: Rebuild context? See life.c UpdateContext
|
||||
break;
|
||||
|
||||
/* From HandleInputEvent, contains an input resource. */
|
||||
case PSE_INSTANCE_HANDLEINPUT:
|
||||
type = driverdata->ppb_input_event->GetType(event);
|
||||
modifiers = driverdata->ppb_input_event->GetModifiers(event);
|
||||
switch(type) {
|
||||
case PP_INPUTEVENT_TYPE_MOUSEDOWN:
|
||||
SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_NACL_translate_mouse_button(driverdata->ppb_mouse_input_event->GetButton(event)));
|
||||
break;
|
||||
case PP_INPUTEVENT_TYPE_MOUSEUP:
|
||||
SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_NACL_translate_mouse_button(driverdata->ppb_mouse_input_event->GetButton(event)));
|
||||
break;
|
||||
case PP_INPUTEVENT_TYPE_WHEEL:
|
||||
/* FIXME: GetTicks provides high resolution scroll events */
|
||||
fp = driverdata->ppb_wheel_input_event->GetDelta(event);
|
||||
SDL_SendMouseWheel(mouse->focus, mouse->mouseID, fp.x, fp.y, SDL_MOUSEWHEEL_NORMAL);
|
||||
break;
|
||||
|
||||
case PP_INPUTEVENT_TYPE_MOUSEENTER:
|
||||
case PP_INPUTEVENT_TYPE_MOUSELEAVE:
|
||||
/* FIXME: Mouse Focus */
|
||||
break;
|
||||
|
||||
|
||||
case PP_INPUTEVENT_TYPE_MOUSEMOVE:
|
||||
location = driverdata->ppb_mouse_input_event->GetPosition(event);
|
||||
SDL_SendMouseMotion(mouse->focus, mouse->mouseID, SDL_FALSE, location.x, location.y);
|
||||
break;
|
||||
|
||||
case PP_INPUTEVENT_TYPE_TOUCHSTART:
|
||||
case PP_INPUTEVENT_TYPE_TOUCHMOVE:
|
||||
case PP_INPUTEVENT_TYPE_TOUCHEND:
|
||||
case PP_INPUTEVENT_TYPE_TOUCHCANCEL:
|
||||
/* FIXME: Touch events */
|
||||
break;
|
||||
|
||||
case PP_INPUTEVENT_TYPE_KEYDOWN:
|
||||
SDL_SendKeyboardKey(SDL_PRESSED, SDL_NACL_translate_keycode(driverdata->ppb_keyboard_input_event->GetKeyCode(event)));
|
||||
break;
|
||||
|
||||
case PP_INPUTEVENT_TYPE_KEYUP:
|
||||
SDL_SendKeyboardKey(SDL_RELEASED, SDL_NACL_translate_keycode(driverdata->ppb_keyboard_input_event->GetKeyCode(event)));
|
||||
break;
|
||||
|
||||
case PP_INPUTEVENT_TYPE_CHAR:
|
||||
var = driverdata->ppb_keyboard_input_event->GetCharacterText(event);
|
||||
str = driverdata->ppb_var->VarToUtf8(var, &str_len);
|
||||
/* str is not null terminated! */
|
||||
if ( str_len >= SDL_arraysize(text) ) {
|
||||
str_len = SDL_arraysize(text) - 1;
|
||||
}
|
||||
SDL_strlcpy(text, str, str_len );
|
||||
text[str_len] = '\0';
|
||||
|
||||
SDL_SendKeyboardText(text);
|
||||
/* FIXME: Do we have to handle ref counting? driverdata->ppb_var->Release(var);*/
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* From HandleMessage, contains a PP_Var. */
|
||||
case PSE_INSTANCE_HANDLEMESSAGE:
|
||||
break;
|
||||
|
||||
/* From DidChangeFocus, contains a PP_Bool with the current focus state. */
|
||||
case PSE_INSTANCE_DIDCHANGEFOCUS:
|
||||
break;
|
||||
|
||||
/* When the 3D context is lost, no resource. */
|
||||
case PSE_GRAPHICS3D_GRAPHICS3DCONTEXTLOST:
|
||||
break;
|
||||
|
||||
/* When the mouse lock is lost. */
|
||||
case PSE_MOUSELOCK_MOUSELOCKLOST:
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
PSEventRelease(ps_event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_NACL */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#ifndef SDL_naclevents_c_h_
|
||||
#define SDL_naclevents_c_h_
|
||||
|
||||
#include "SDL_naclvideo.h"
|
||||
|
||||
extern void NACL_PumpEvents(_THIS);
|
||||
|
||||
#endif /* SDL_naclevents_c_h_ */
|
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_NACL
|
||||
#endif /* SDL_VIDEO_DRIVER_NACL */
|
@@ -1,174 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_NACL
|
||||
|
||||
/* NaCl SDL video GLES 2 driver implementation */
|
||||
|
||||
#include "SDL_video.h"
|
||||
#include "SDL_naclvideo.h"
|
||||
|
||||
#ifdef HAVE_DLOPEN
|
||||
#include "dlfcn.h"
|
||||
#endif
|
||||
|
||||
#include "ppapi/gles2/gl2ext_ppapi.h"
|
||||
#include "ppapi_simple/ps.h"
|
||||
|
||||
/* GL functions */
|
||||
int
|
||||
NACL_GLES_LoadLibrary(_THIS, const char *path)
|
||||
{
|
||||
/* FIXME: Support dynamic linking when PNACL supports it */
|
||||
return glInitializePPAPI(PSGetInterface) == 0;
|
||||
}
|
||||
|
||||
void *
|
||||
NACL_GLES_GetProcAddress(_THIS, const char *proc)
|
||||
{
|
||||
#ifdef HAVE_DLOPEN
|
||||
return dlsym( 0 /* RTLD_DEFAULT */, proc);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
NACL_GLES_UnloadLibrary(_THIS)
|
||||
{
|
||||
/* FIXME: Support dynamic linking when PNACL supports it */
|
||||
glTerminatePPAPI();
|
||||
}
|
||||
|
||||
int
|
||||
NACL_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext sdl_context)
|
||||
{
|
||||
SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
|
||||
/* FIXME: Check threading issues...otherwise use a hardcoded _this->context across all threads */
|
||||
driverdata->ppb_instance->BindGraphics(driverdata->instance, (PP_Resource) sdl_context);
|
||||
glSetCurrentContextPPAPI((PP_Resource) sdl_context);
|
||||
return 0;
|
||||
}
|
||||
|
||||
SDL_GLContext
|
||||
NACL_GLES_CreateContext(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
|
||||
PP_Resource context, share_context = 0;
|
||||
/* 64 seems nice. */
|
||||
Sint32 attribs[64];
|
||||
int i = 0;
|
||||
|
||||
if (_this->gl_config.share_with_current_context) {
|
||||
share_context = (PP_Resource) SDL_GL_GetCurrentContext();
|
||||
}
|
||||
|
||||
/* FIXME: Some ATTRIBS from PP_Graphics3DAttrib are not set here */
|
||||
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_WIDTH;
|
||||
attribs[i++] = window->w;
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_HEIGHT;
|
||||
attribs[i++] = window->h;
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_RED_SIZE;
|
||||
attribs[i++] = _this->gl_config.red_size;
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_GREEN_SIZE;
|
||||
attribs[i++] = _this->gl_config.green_size;
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_BLUE_SIZE;
|
||||
attribs[i++] = _this->gl_config.blue_size;
|
||||
|
||||
if (_this->gl_config.alpha_size) {
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_ALPHA_SIZE;
|
||||
attribs[i++] = _this->gl_config.alpha_size;
|
||||
}
|
||||
|
||||
/*if (_this->gl_config.buffer_size) {
|
||||
attribs[i++] = EGL_BUFFER_SIZE;
|
||||
attribs[i++] = _this->gl_config.buffer_size;
|
||||
}*/
|
||||
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_DEPTH_SIZE;
|
||||
attribs[i++] = _this->gl_config.depth_size;
|
||||
|
||||
if (_this->gl_config.stencil_size) {
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_STENCIL_SIZE;
|
||||
attribs[i++] = _this->gl_config.stencil_size;
|
||||
}
|
||||
|
||||
if (_this->gl_config.multisamplebuffers) {
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS;
|
||||
attribs[i++] = _this->gl_config.multisamplebuffers;
|
||||
}
|
||||
|
||||
if (_this->gl_config.multisamplesamples) {
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_SAMPLES;
|
||||
attribs[i++] = _this->gl_config.multisamplesamples;
|
||||
}
|
||||
|
||||
attribs[i++] = PP_GRAPHICS3DATTRIB_NONE;
|
||||
|
||||
context = driverdata->ppb_graphics->Create(driverdata->instance, share_context, attribs);
|
||||
|
||||
if (context) {
|
||||
/* We need to make the context current, otherwise nothing works */
|
||||
SDL_GL_MakeCurrent(window, (SDL_GLContext) context);
|
||||
}
|
||||
|
||||
return (SDL_GLContext) context;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
NACL_GLES_SetSwapInterval(_THIS, int interval)
|
||||
{
|
||||
/* STUB */
|
||||
return SDL_Unsupported();
|
||||
}
|
||||
|
||||
int
|
||||
NACL_GLES_GetSwapInterval(_THIS)
|
||||
{
|
||||
/* STUB */
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
NACL_GLES_SwapWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
|
||||
struct PP_CompletionCallback callback = { NULL, 0, PP_COMPLETIONCALLBACK_FLAG_NONE };
|
||||
if (driverdata->ppb_graphics->SwapBuffers((PP_Resource) SDL_GL_GetCurrentContext(), callback ) != 0) {
|
||||
return SDL_SetError("SwapBuffers failed");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
NACL_GLES_DeleteContext(_THIS, SDL_GLContext context)
|
||||
{
|
||||
SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
|
||||
driverdata->ppb_core->ReleaseResource((PP_Resource) context);
|
||||
}
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_NACL */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#ifndef SDL_naclopengles_h_
|
||||
#define SDL_naclopengles_h_
|
||||
|
||||
extern int NACL_GLES_LoadLibrary(_THIS, const char *path);
|
||||
extern void *NACL_GLES_GetProcAddress(_THIS, const char *proc);
|
||||
extern void NACL_GLES_UnloadLibrary(_THIS);
|
||||
extern SDL_GLContext NACL_GLES_CreateContext(_THIS, SDL_Window * window);
|
||||
extern int NACL_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
|
||||
extern int NACL_GLES_SetSwapInterval(_THIS, int interval);
|
||||
extern int NACL_GLES_GetSwapInterval(_THIS);
|
||||
extern int NACL_GLES_SwapWindow(_THIS, SDL_Window * window);
|
||||
extern void NACL_GLES_DeleteContext(_THIS, SDL_GLContext context);
|
||||
|
||||
#endif /* SDL_naclopengles_h_ */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
@@ -1,187 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_NACL
|
||||
|
||||
#include "ppapi/c/pp_errors.h"
|
||||
#include "ppapi/c/pp_instance.h"
|
||||
#include "ppapi_simple/ps.h"
|
||||
#include "ppapi_simple/ps_interface.h"
|
||||
#include "ppapi_simple/ps_event.h"
|
||||
#include "nacl_io/nacl_io.h"
|
||||
|
||||
#include "SDL_naclvideo.h"
|
||||
#include "SDL_naclwindow.h"
|
||||
#include "SDL_naclevents_c.h"
|
||||
#include "SDL_naclopengles.h"
|
||||
#include "SDL_video.h"
|
||||
#include "../SDL_sysvideo.h"
|
||||
#include "../../events/SDL_events_c.h"
|
||||
|
||||
#define NACLVID_DRIVER_NAME "nacl"
|
||||
|
||||
/* Static init required because NACL_SetScreenResolution
|
||||
* may appear even before SDL starts and we want to remember
|
||||
* the window width and height
|
||||
*/
|
||||
static SDL_VideoData nacl = {0};
|
||||
|
||||
void
|
||||
NACL_SetScreenResolution(int width, int height, Uint32 format)
|
||||
{
|
||||
PP_Resource context;
|
||||
|
||||
nacl.w = width;
|
||||
nacl.h = height;
|
||||
nacl.format = format;
|
||||
|
||||
if (nacl.window) {
|
||||
nacl.window->w = width;
|
||||
nacl.window->h = height;
|
||||
SDL_SendWindowEvent(nacl.window, SDL_WINDOWEVENT_RESIZED, width, height);
|
||||
}
|
||||
|
||||
/* FIXME: Check threading issues...otherwise use a hardcoded _this->context across all threads */
|
||||
context = (PP_Resource) SDL_GL_GetCurrentContext();
|
||||
if (context) {
|
||||
PSInterfaceGraphics3D()->ResizeBuffers(context, width, height);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Initialization/Query functions */
|
||||
static int NACL_VideoInit(_THIS);
|
||||
static void NACL_VideoQuit(_THIS);
|
||||
|
||||
static int NACL_Available(void) {
|
||||
return PSGetInstanceId() != 0;
|
||||
}
|
||||
|
||||
static void NACL_DeleteDevice(SDL_VideoDevice *device) {
|
||||
SDL_VideoData *driverdata = (SDL_VideoData*) device->driverdata;
|
||||
driverdata->ppb_core->ReleaseResource((PP_Resource) driverdata->ppb_message_loop);
|
||||
/* device->driverdata is not freed because it points to static memory */
|
||||
SDL_free(device);
|
||||
}
|
||||
|
||||
static int
|
||||
NACL_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SDL_VideoDevice *NACL_CreateDevice(void) {
|
||||
SDL_VideoDevice *device;
|
||||
|
||||
if (!NACL_Available()) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Initialize all variables that we clean on shutdown */
|
||||
device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
|
||||
if (!device) {
|
||||
SDL_OutOfMemory();
|
||||
return NULL;
|
||||
}
|
||||
device->driverdata = &nacl;
|
||||
|
||||
/* Set the function pointers */
|
||||
device->VideoInit = NACL_VideoInit;
|
||||
device->VideoQuit = NACL_VideoQuit;
|
||||
device->PumpEvents = NACL_PumpEvents;
|
||||
|
||||
device->CreateSDLWindow = NACL_CreateWindow;
|
||||
device->SetWindowTitle = NACL_SetWindowTitle;
|
||||
device->DestroyWindow = NACL_DestroyWindow;
|
||||
|
||||
device->SetDisplayMode = NACL_SetDisplayMode;
|
||||
|
||||
device->free = NACL_DeleteDevice;
|
||||
|
||||
/* GL pointers */
|
||||
device->GL_LoadLibrary = NACL_GLES_LoadLibrary;
|
||||
device->GL_GetProcAddress = NACL_GLES_GetProcAddress;
|
||||
device->GL_UnloadLibrary = NACL_GLES_UnloadLibrary;
|
||||
device->GL_CreateContext = NACL_GLES_CreateContext;
|
||||
device->GL_MakeCurrent = NACL_GLES_MakeCurrent;
|
||||
device->GL_SetSwapInterval = NACL_GLES_SetSwapInterval;
|
||||
device->GL_GetSwapInterval = NACL_GLES_GetSwapInterval;
|
||||
device->GL_SwapWindow = NACL_GLES_SwapWindow;
|
||||
device->GL_DeleteContext = NACL_GLES_DeleteContext;
|
||||
|
||||
|
||||
return device;
|
||||
}
|
||||
|
||||
VideoBootStrap NACL_bootstrap = {
|
||||
NACLVID_DRIVER_NAME, "SDL Native Client Video Driver",
|
||||
NACL_CreateDevice
|
||||
};
|
||||
|
||||
int NACL_VideoInit(_THIS) {
|
||||
SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
|
||||
SDL_DisplayMode mode;
|
||||
|
||||
SDL_zero(mode);
|
||||
mode.format = driverdata->format;
|
||||
mode.w = driverdata->w;
|
||||
mode.h = driverdata->h;
|
||||
mode.refresh_rate = 0;
|
||||
mode.driverdata = NULL;
|
||||
if (SDL_AddBasicVideoDisplay(&mode) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
SDL_AddDisplayMode(&_this->displays[0], &mode);
|
||||
|
||||
PSInterfaceInit();
|
||||
driverdata->instance = PSGetInstanceId();
|
||||
driverdata->ppb_graphics = PSInterfaceGraphics3D();
|
||||
driverdata->ppb_message_loop = PSInterfaceMessageLoop();
|
||||
driverdata->ppb_core = PSInterfaceCore();
|
||||
driverdata->ppb_fullscreen = PSInterfaceFullscreen();
|
||||
driverdata->ppb_instance = PSInterfaceInstance();
|
||||
driverdata->ppb_image_data = PSInterfaceImageData();
|
||||
driverdata->ppb_view = PSInterfaceView();
|
||||
driverdata->ppb_var = PSInterfaceVar();
|
||||
driverdata->ppb_input_event = (PPB_InputEvent*) PSGetInterface(PPB_INPUT_EVENT_INTERFACE);
|
||||
driverdata->ppb_keyboard_input_event = (PPB_KeyboardInputEvent*) PSGetInterface(PPB_KEYBOARD_INPUT_EVENT_INTERFACE);
|
||||
driverdata->ppb_mouse_input_event = (PPB_MouseInputEvent*) PSGetInterface(PPB_MOUSE_INPUT_EVENT_INTERFACE);
|
||||
driverdata->ppb_wheel_input_event = (PPB_WheelInputEvent*) PSGetInterface(PPB_WHEEL_INPUT_EVENT_INTERFACE);
|
||||
driverdata->ppb_touch_input_event = (PPB_TouchInputEvent*) PSGetInterface(PPB_TOUCH_INPUT_EVENT_INTERFACE);
|
||||
|
||||
|
||||
driverdata->message_loop = driverdata->ppb_message_loop->Create(driverdata->instance);
|
||||
|
||||
PSEventSetFilter(PSE_ALL);
|
||||
|
||||
/* We're done! */
|
||||
return 0;
|
||||
}
|
||||
|
||||
void NACL_VideoQuit(_THIS) {
|
||||
}
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_NACL */
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#ifndef SDL_naclvideo_h_
|
||||
#define SDL_naclvideo_h_
|
||||
|
||||
#include "../SDL_sysvideo.h"
|
||||
#include "ppapi_simple/ps_interface.h"
|
||||
#include "ppapi/c/pp_input_event.h"
|
||||
|
||||
|
||||
/* Hidden "this" pointer for the video functions */
|
||||
#define _THIS SDL_VideoDevice *_this
|
||||
|
||||
|
||||
/* Private display data */
|
||||
|
||||
typedef struct SDL_VideoData {
|
||||
Uint32 format;
|
||||
int w, h;
|
||||
SDL_Window *window;
|
||||
|
||||
const PPB_Graphics3D *ppb_graphics;
|
||||
const PPB_MessageLoop *ppb_message_loop;
|
||||
const PPB_Core *ppb_core;
|
||||
const PPB_Fullscreen *ppb_fullscreen;
|
||||
const PPB_Instance *ppb_instance;
|
||||
const PPB_ImageData *ppb_image_data;
|
||||
const PPB_View *ppb_view;
|
||||
const PPB_Var *ppb_var;
|
||||
const PPB_InputEvent *ppb_input_event;
|
||||
const PPB_KeyboardInputEvent *ppb_keyboard_input_event;
|
||||
const PPB_MouseInputEvent *ppb_mouse_input_event;
|
||||
const PPB_WheelInputEvent *ppb_wheel_input_event;
|
||||
const PPB_TouchInputEvent *ppb_touch_input_event;
|
||||
|
||||
PP_Resource message_loop;
|
||||
PP_Instance instance;
|
||||
|
||||
/* FIXME: Check threading issues...otherwise use a hardcoded _this->context across all threads */
|
||||
/* PP_Resource context; */
|
||||
|
||||
} SDL_VideoData;
|
||||
|
||||
extern void NACL_SetScreenResolution(int width, int height, Uint32 format);
|
||||
|
||||
|
||||
#endif /* SDL_naclvideo_h_ */
|
@@ -1,78 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#if SDL_VIDEO_DRIVER_NACL
|
||||
|
||||
#include "../SDL_sysvideo.h"
|
||||
|
||||
#include "../../events/SDL_mouse_c.h"
|
||||
#include "../../events/SDL_keyboard_c.h"
|
||||
#include "SDL_naclvideo.h"
|
||||
#include "SDL_naclwindow.h"
|
||||
|
||||
int
|
||||
NACL_CreateWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
|
||||
|
||||
if (driverdata->window) {
|
||||
return SDL_SetError("NaCl only supports one window");
|
||||
}
|
||||
driverdata->window = window;
|
||||
|
||||
/* Adjust the window data to match the screen */
|
||||
window->x = 0;
|
||||
window->y = 0;
|
||||
window->w = driverdata->w;
|
||||
window->h = driverdata->h;
|
||||
|
||||
window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */
|
||||
window->flags |= SDL_WINDOW_FULLSCREEN; /* window is always fullscreen */
|
||||
window->flags &= ~SDL_WINDOW_HIDDEN;
|
||||
window->flags |= SDL_WINDOW_SHOWN; /* only one window on NaCl */
|
||||
window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */
|
||||
window->flags |= SDL_WINDOW_OPENGL;
|
||||
|
||||
SDL_SetMouseFocus(window);
|
||||
SDL_SetKeyboardFocus(window);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
NACL_SetWindowTitle(_THIS, SDL_Window * window)
|
||||
{
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
void
|
||||
NACL_DestroyWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
|
||||
if (window == driverdata->window) {
|
||||
driverdata->window = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SDL_VIDEO_DRIVER_NACL */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../../SDL_internal.h"
|
||||
|
||||
#ifndef SDL_naclwindow_h_
|
||||
#define SDL_naclwindow_h_
|
||||
|
||||
extern int NACL_CreateWindow(_THIS, SDL_Window * window);
|
||||
extern void NACL_SetWindowTitle(_THIS, SDL_Window * window);
|
||||
extern void NACL_DestroyWindow(_THIS, SDL_Window * window);
|
||||
|
||||
#endif /* SDL_naclwindow_h_ */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
Reference in New Issue
Block a user