21 #include "../../SDL_internal.h" 23 #if SDL_VIDEO_DRIVER_EMSCRIPTEN 27 #include "../SDL_sysvideo.h" 28 #include "../SDL_pixels_c.h" 29 #include "../SDL_egl_c.h" 30 #include "../../events/SDL_events_c.h" 38 #define EMSCRIPTENVID_DRIVER_NAME "emscripten" 41 static int Emscripten_VideoInit(
_THIS);
43 static void Emscripten_VideoQuit(
_THIS);
49 static void Emscripten_PumpEvents(
_THIS);
55 Emscripten_Available(
void)
67 Emscripten_CreateDevice(
int devindex)
117 device->
free = Emscripten_DeleteDevice;
123 EMSCRIPTENVID_DRIVER_NAME,
"SDL emscripten video driver",
124 Emscripten_Available, Emscripten_CreateDevice
129 Emscripten_VideoInit(
_THIS)
137 emscripten_get_element_css_size(
NULL, &css_w, &css_h);
165 Emscripten_VideoQuit(
_THIS)
171 Emscripten_PumpEvents(
_THIS)
180 double scaled_w, scaled_h;
190 wdata->
pixel_ratio = emscripten_get_device_pixel_ratio();
198 emscripten_set_canvas_size(scaled_w, scaled_h);
200 emscripten_get_element_css_size(
NULL, &css_w, &css_h);
202 wdata->
external_size = css_w != scaled_w || css_h != scaled_h;
209 emscripten_set_canvas_size(scaled_w, scaled_h);
217 emscripten_set_element_css_size(
NULL, window->
w, window->
h);
225 if (!
_this->egl_data) {
233 return SDL_SetError(
"Could not create GLES window surface");
262 emscripten_set_element_css_size(
NULL, window->
w, window->
h);
299 var canvas = Module[
'canvas'];
300 if(canvas.parentNode.id !=
"SDLFullscreenElement") {
301 var canvasContainer = document.createElement(
"div");
302 canvasContainer.id =
"SDLFullscreenElement";
303 canvas.parentNode.insertBefore(canvasContainer, canvas);
304 canvasContainer.appendChild(canvas);
310 emscripten_request_fullscreen(
"SDLFullscreenElement", 1);
313 emscripten_exit_fullscreen();
void SDL_SetKeyboardFocus(SDL_Window *window)
void Emscripten_FiniMouse()
int SDL_AddBasicVideoDisplay(const SDL_DisplayMode *desktop_mode)
int(* GL_SetSwapInterval)(_THIS, int interval)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
The structure that defines a display mode.
void(* SetWindowSize)(_THIS, SDL_Window *window)
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
void SDL_SetMouseFocus(SDL_Window *window)
void(* GL_SwapWindow)(_THIS, SDL_Window *window)
void Emscripten_DestroyWindowFramebuffer(_THIS, SDL_Window *window)
#define SDL_GL_LoadLibrary
void Emscripten_RegisterEventHandlers(SDL_WindowData *data)
int(* GL_LoadLibrary)(_THIS, const char *path)
int(* SetDisplayMode)(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
void(* GL_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
static SDL_VideoDevice * _this
int Emscripten_CreateWindowFramebuffer(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
void * SDL_calloc(size_t nmemb, size_t size)
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
int(* GL_MakeCurrent)(_THIS, SDL_Window *window, SDL_GLContext context)
SDL_VideoDisplay * displays
void(* DestroyWindow)(_THIS, SDL_Window *window)
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
void(* GL_UnloadLibrary)(_THIS)
#define SDL_OutOfMemory()
int requested_fullscreen_mode
int(* CreateWindow)(_THIS, SDL_Window *window)
The type used to identify a window.
SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
void(* SetWindowFullscreen)(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
int(* UpdateWindowFramebuffer)(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
void(* GL_DeleteContext)(_THIS, SDL_GLContext context)
void Emscripten_UnregisterEventHandlers(SDL_WindowData *data)
int(* GL_GetSwapInterval)(_THIS)
int Emscripten_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
int(* CreateWindowFramebuffer)(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
void *(* GL_GetProcAddress)(_THIS, const char *proc)
void Emscripten_InitMouse()
void(* PumpEvents)(_THIS)