aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorThierry Crozat2016-09-18 04:23:17 +0100
committerThierry Crozat2016-09-18 04:23:37 +0100
commit1fd4dbfdce66bc515e43c062e5b142e33391b131 (patch)
tree681e578d6d2258a2c3d83894b413cb0ad9788d89 /backends
parent1f541a700595e6ecc600ccf11005f7e62b47504b (diff)
downloadscummvm-rg350-1fd4dbfdce66bc515e43c062e5b142e33391b131.tar.gz
scummvm-rg350-1fd4dbfdce66bc515e43c062e5b142e33391b131.tar.bz2
scummvm-rg350-1fd4dbfdce66bc515e43c062e5b142e33391b131.zip
SDL: Ignore outdated SDL resize event in OpenGL mode
Those outdated resize events are sent from SDL_DestroyWindow when the window is fullscreen and doesn't have the SDL_WINDOW_FULLSCREEN_DESKTOP flag (thus Surface SDL is not affected). Switching resolutions in fullscreen, or switching from fullscreen to windowed will therefore cause a resize event to be received with the former fullscreen resolution after we have already setup the window to use the new resolution. If we don't ignore this event we end up with a texture size and a window size that are not consistent and for example see only a part of the texture (if the old resolution is bigger than the new one.
Diffstat (limited to 'backends')
-rw-r--r--backends/graphics/openglsdl/openglsdl-graphics.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp
index 7ea1860d93..33c82b9fd6 100644
--- a/backends/graphics/openglsdl/openglsdl-graphics.cpp
+++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp
@@ -348,6 +348,17 @@ void OpenGLSdlGraphicsManager::notifyVideoExpose() {
void OpenGLSdlGraphicsManager::notifyResize(const uint width, const uint height) {
#if SDL_VERSION_ATLEAST(2, 0, 0)
+ // We sometime get outdated resize events from SDL2. So check that the size we get
+ // is the actual current window size. If not ignore the resize.
+ // The issue for example occurs when switching from fullscreen to windowed mode or
+ // when switching between different fullscreen resolutions because SDL_DestroyWindow
+ // for a fullscreen window that doesn't have the SDL_WINDOW_FULLSCREEN_DESKTOP flag
+ // causes a SDL_WINDOWEVENT_RESIZED event with the old resolution to be sent, and this
+ // event is processed after recreating the window at the new resolution.
+ int currentWidth, currentHeight;
+ getWindowDimensions(&currentWidth, &currentHeight);
+ if (width != currentWidth || height != currentHeight)
+ return;
setActualScreenSize(width, height);
_eventSource->resetKeyboadEmulation(width - 1, height - 1);
#else