Permalink
Browse files

SDL: Fix changing screen size when using OpenGL ES 2

  • Loading branch information...
ccawley2011 authored and endrift committed Jan 29, 2018
1 parent 4f8fe38 commit eafd265ab6b0b025279dea5d6a485ecaa6b724a9
Showing with 20 additions and 9 deletions.
  1. +7 −0 src/platform/sdl/gl-common.c
  2. +1 −0 src/platform/sdl/gl-common.h
  3. +2 −9 src/platform/sdl/gl-sdl.c
  4. +10 −0 src/platform/sdl/gles2-sdl.c
@@ -7,6 +7,13 @@
#include <mgba/core/version.h>
+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)
@@ -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);
View
@@ -13,13 +13,6 @@
#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);
@@ -47,7 +40,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;
}
@@ -63,7 +56,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
@@ -115,6 +115,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;
}
@@ -126,6 +128,14 @@ void mSDLGLES2Runloop(struct mSDLRenderer* renderer, void* user) {
while (mCoreThreadIsActive(context)) {
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->impl->sync)) {

0 comments on commit eafd265

Please sign in to comment.