From 641277b430ce4fa1a2bf3b8d6f5b287cff34e153 Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Wed, 1 Jul 2020 00:46:27 -0400 Subject: [PATCH] Timing fixes for processVsync recreation workaround --- desktop_version/src/Graphics.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/desktop_version/src/Graphics.cpp b/desktop_version/src/Graphics.cpp index 4adab7de..95da6806 100644 --- a/desktop_version/src/Graphics.cpp +++ b/desktop_version/src/Graphics.cpp @@ -3278,22 +3278,27 @@ void Graphics::processVsync() { SDL_SetHintWithPriority(SDL_HINT_RENDER_VSYNC, vsync ? "1" : "0", SDL_HINT_OVERRIDE); - // FIXME: Sigh... work around SDL2 bug where the VSync hint is only listened to at renderer creation if (screenbuffer == NULL) { return; } + + // FIXME: Sigh... work around SDL2 bug where the VSync hint is only + // listened to at renderer creation + + // Ugh, have to re-create m_screenTexture as well, otherwise the screen + // will be black... + if (screenbuffer->m_screenTexture != NULL) + { + SDL_DestroyTexture(screenbuffer->m_screenTexture); + } + if (screenbuffer->m_renderer != NULL) { SDL_DestroyRenderer(screenbuffer->m_renderer); } screenbuffer->m_renderer = SDL_CreateRenderer(screenbuffer->m_window, -1, 0); - // Ugh, have to re-create m_screenTexture as well, otherwise the screen will be black... - if (screenbuffer->m_screenTexture != NULL) - { - SDL_DestroyTexture(screenbuffer->m_screenTexture); - } // FIXME: This is duplicated from Screen::init()! screenbuffer->m_screenTexture = SDL_CreateTexture( screenbuffer->m_renderer, @@ -3303,6 +3308,7 @@ void Graphics::processVsync() 240 ); - // Ugh, have to make sure to re-apply graphics options after doing the above, otherwise letterbox/integer won't be applied... + // Ugh, have to make sure to re-apply graphics options after doing the + // above, otherwise letterbox/integer won't be applied... screenbuffer->ResizeScreen(-1, -1); }