blob: 491da8870792fb2f8bd17295236360738aa3aba3 [file] [log] [blame]
// Copyright 2015 The Emscripten Authors. All rights reserved.
// Emscripten is available under two separate licenses, the MIT license and the
// University of Illinois/NCSA Open Source License. Both these licenses can be
// found in the LICENSE file.
#include <SDL.h>
#include <emscripten.h>
#define TOTAL_RUNS 20
static SDL_Window *window;
static SDL_Surface *surface;
static void sdlError(const char *str)
{
fprintf(stderr, "Error at %s: %s\n", str, SDL_GetError());
emscripten_force_exit(1);
}
static void main_loop(void)
{
static unsigned int runs = 0;
// verify that the ctx and image do not change from frame to frame
if (runs == 1) {
EM_ASM({
Module.the_ctx = Module.SDL2.ctx;
Module.the_image = Module.SDL2.image;
out('start with ' + [Module.the_ctx, Module.the_image]);
assert(!!Module.the_ctx && (typeof Module.the_ctx === 'object'), 'typeof ctx');
assert(!!Module.the_image && (typeof Module.the_image === 'object'), 'typeof image');
out('set values');
});
} else if (runs > 1) {
EM_ASM({
assert(Module.the_ctx === Module.SDL2.ctx, 'ctx');
assert(Module.the_image === Module.SDL2.image, 'image');
out('check ok ' + $0);
}, runs);
}
int i;
if (SDL_LockSurface(surface) != 0) sdlError("SDL_LockSurface");
SDL_UnlockSurface(surface); // does not return a value
if (SDL_UpdateWindowSurface(window) != 0)
sdlError("SDL_UpdateWindowSurface");
runs++;
if (runs >= TOTAL_RUNS) {
emscripten_cancel_main_loop();
REPORT_RESULT(1);
}
}
int main(void)
{
if (SDL_Init(SDL_INIT_VIDEO) != 0) sdlError("SDL_Init");
window = SDL_CreateWindow("SDL 2 test",
0, 0,
640, 480,
SDL_WINDOW_SHOWN);
if (window == NULL) sdlError("SDL_CreateWindow");
surface = SDL_GetWindowSurface(window);
if (surface == NULL) sdlError("SDL_GetWindowSurface");
emscripten_set_main_loop(main_loop, 0, 1);
}