Fix expose handling.
authorTimo Korvola <tkorvola@iki.fi>
Mon, 2 Apr 2018 08:52:16 +0000 (11:52 +0300)
committerTimo Korvola <tkorvola@iki.fi>
Mon, 2 Apr 2018 08:52:16 +0000 (11:52 +0300)
It is not enough to just call SDL_RenderPresent.  The frame must be
rendered first, i.e., copied from texture.  This fixes fullscreen
toggling as well.

src/sdl/sf_video.c

index a4e6d1434fb2ef2aa9a4a5e3e441a19666687ea4..3980da19ec3deb7fa8138e9d5ef6c4ba99653227 100644 (file)
@@ -51,7 +51,6 @@ static int mywcslen( zchar *b)
   }
 
 static void myGrefresh() {
-    SDL_UpdateTexture(texture, NULL, sbuffer, sbpitch * sizeof(ulong));
     SDL_RenderClear(renderer);
     SDL_RenderCopy(renderer, texture, NULL, NULL);
     SDL_RenderPresent(renderer);
@@ -349,6 +348,7 @@ static void scroll( int x, int y, int w, int h, int n)
  */
 bool sf_flushdisplay() {
     if (dirty) {
+        SDL_UpdateTexture(texture, NULL, sbuffer, sbpitch * sizeof(ulong));
         myGrefresh();
         dirty = 0;
         return true;
@@ -597,7 +597,7 @@ static void handle_window_event(SDL_Event *e)
 {
     switch (e->window.event) {
     case SDL_WINDOWEVENT_EXPOSED:
-        SDL_RenderPresent(renderer);
+        myGrefresh();
     }
 }