From d4a6844727c9b673dc1980ab01d4dabcdfe739ec Mon Sep 17 00:00:00 2001 From: Cameron Cawley Date: Mon, 29 Jan 2018 17:29:19 +0000 Subject: [PATCH] SDL: Fix changing screen size when using OpenGL ES 2 --- src/platform/sdl/gl-common.c | 7 +++++++ src/platform/sdl/gl-common.h | 1 + src/platform/sdl/gl-sdl.c | 11 ++--------- src/platform/sdl/gles2-sdl.c | 10 ++++++++++ 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/platform/sdl/gl-common.c b/src/platform/sdl/gl-common.c index 13c20811b..0b73cc519 100644 --- a/src/platform/sdl/gl-common.c +++ b/src/platform/sdl/gl-common.c @@ -7,6 +7,13 @@ #include +void mSDLGLDoViewport(int w, int h, struct VideoBackend* v) { + v->resized(v, w, h); + v->clear(v); + v->swap(v); + v->clear(v); +} + void mSDLGLCommonSwap(struct VideoBackend* context) { struct mSDLRenderer* renderer = (struct mSDLRenderer*) context->user; #if SDL_VERSION_ATLEAST(2, 0, 0) diff --git a/src/platform/sdl/gl-common.h b/src/platform/sdl/gl-common.h index b517dd436..307da756f 100644 --- a/src/platform/sdl/gl-common.h +++ b/src/platform/sdl/gl-common.h @@ -12,6 +12,7 @@ CXX_GUARD_START #include "main.h" +void mSDLGLDoViewport(int w, int h, struct VideoBackend* v); void mSDLGLCommonSwap(struct VideoBackend* context); void mSDLGLCommonInit(struct mSDLRenderer* renderer); diff --git a/src/platform/sdl/gl-sdl.c b/src/platform/sdl/gl-sdl.c index b723a495c..bc992c720 100644 --- a/src/platform/sdl/gl-sdl.c +++ b/src/platform/sdl/gl-sdl.c @@ -11,13 +11,6 @@ #include #include "platform/opengl/gl.h" -static void _doViewport(int w, int h, struct VideoBackend* v) { - v->resized(v, w, h); - v->clear(v); - v->swap(v); - v->clear(v); -} - static bool mSDLGLInit(struct mSDLRenderer* renderer); static void mSDLGLRunloop(struct mSDLRenderer* renderer, void* user); static void mSDLGLDeinit(struct mSDLRenderer* renderer); @@ -44,7 +37,7 @@ bool mSDLGLInit(struct mSDLRenderer* renderer) { renderer->gl.d.init(&renderer->gl.d, 0); renderer->gl.d.setDimensions(&renderer->gl.d, renderer->width, renderer->height); - _doViewport(renderer->viewportWidth, renderer->viewportHeight, &renderer->gl.d); + mSDLGLDoViewport(renderer->viewportWidth, renderer->viewportHeight, &renderer->gl.d); return true; } @@ -60,7 +53,7 @@ void mSDLGLRunloop(struct mSDLRenderer* renderer, void* user) { // Event handling can change the size of the screen if (renderer->player.windowUpdated) { SDL_GetWindowSize(renderer->window, &renderer->viewportWidth, &renderer->viewportHeight); - _doViewport(renderer->viewportWidth, renderer->viewportHeight, v); + mSDLGLDoViewport(renderer->viewportWidth, renderer->viewportHeight, v); renderer->player.windowUpdated = 0; } #endif diff --git a/src/platform/sdl/gles2-sdl.c b/src/platform/sdl/gles2-sdl.c index 9f9778c3f..3a832546f 100644 --- a/src/platform/sdl/gles2-sdl.c +++ b/src/platform/sdl/gles2-sdl.c @@ -114,6 +114,8 @@ bool mSDLGLES2Init(struct mSDLRenderer* renderer) { renderer->gl2.d.swap = mSDLGLCommonSwap; renderer->gl2.d.init(&renderer->gl2.d, 0); renderer->gl2.d.setDimensions(&renderer->gl2.d, renderer->width, renderer->height); + + mSDLGLDoViewport(renderer->viewportWidth, renderer->viewportHeight, &renderer->gl2.d); return true; } @@ -125,6 +127,14 @@ void mSDLGLES2Runloop(struct mSDLRenderer* renderer, void* user) { while (context->state < THREAD_EXITING) { while (SDL_PollEvent(&event)) { mSDLHandleEvent(context, &renderer->player, &event); +#if SDL_VERSION_ATLEAST(2, 0, 0) + // Event handling can change the size of the screen + if (renderer->player.windowUpdated) { + SDL_GetWindowSize(renderer->window, &renderer->viewportWidth, &renderer->viewportHeight); + mSDLGLDoViewport(renderer->viewportWidth, renderer->viewportHeight, v); + renderer->player.windowUpdated = 0; + } +#endif } if (mCoreSyncWaitFrameStart(&context->sync)) {