Mercurial > repos > blastem
diff render_sdl.c @ 2600:251cc75574af
Basic emscripten support
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 13 Feb 2025 02:18:30 -0800 |
parents | 35f765c2bc87 |
children | f5603b4ee14d |
line wrap: on
line diff
--- a/render_sdl.c Sun Feb 09 22:46:07 2025 -0800 +++ b/render_sdl.c Thu Feb 13 02:18:30 2025 -0800 @@ -107,7 +107,11 @@ uint8_t render_should_release_on_exit(void) { +#ifdef __EMSCRIPTEN__ + return 0; +#else return sync_src != SYNC_AUDIO_THREAD; +#endif } void render_buffer_consumed(audio_source *src) @@ -1271,7 +1275,11 @@ SDL_DisplayMode mode; //TODO: Explicit multiple monitor support SDL_GetCurrentDisplayMode(0, &mode); +#ifdef __EMSCRIPTEN__ + display_hz = 60; //TODO: FIXME +#else display_hz = mode.refresh_rate; +#endif if (fullscreen) { //the SDL2 migration guide suggests setting width and height to 0 when using SDL_WINDOW_FULLSCREEN_DESKTOP @@ -1509,10 +1517,12 @@ free(path); } +#ifndef __EMSCRIPTEN__ void GLAPIENTRY gl_message_callback(GLenum source, GLenum type, GLenum id, GLenum severity, GLsizei length, const GLchar *message, const void *user) { fprintf(stderr, "GL Message: %d, %d, %d - %s\n", source, type, severity, message); } +#endif uint8_t render_create_window(char *caption, uint32_t width, uint32_t height, window_close_handler close_handler) { @@ -1553,10 +1563,12 @@ if (render_gl) { extras[win_idx].gl_context = SDL_GL_CreateContext(extras[win_idx].win); SDL_GL_MakeCurrent(extras[win_idx].win, extras[win_idx].gl_context); +#ifndef __EMSCRIPTEN__ glEnable(GL_DEBUG_OUTPUT); if (glDebugMessageCallback) { glDebugMessageCallback(gl_message_callback, NULL); } +#endif glGenTextures(2, extras[win_idx].gl_texture); for (int i = 0; i < 2; i++) { @@ -2256,6 +2268,12 @@ render_ui = fun; } +static ui_render_fun frame_presented; +void render_set_frame_presented_fun(ui_render_fun fun) +{ + frame_presented = fun; +} + void render_update_display() { #ifndef DISABLE_OPENGL @@ -2328,6 +2346,9 @@ process_events(); } events_processed = 0; + if (frame_presented) { + frame_presented(); + } } uint32_t render_emulated_width()