Browse Source

Lazily redo RLE encoding

Also stop lying about the RLE encoding state, which causes crashes if we do RLE blit operations while the surface is locked.
Sam Lantinga 4 months ago
parent
commit
089dc86bcf
1 changed files with 1 additions and 10 deletions
  1. 1 10
      src/video/SDL_surface.c

+ 1 - 10
src/video/SDL_surface.c

@@ -1726,8 +1726,7 @@ bool SDL_LockSurface(SDL_Surface *surface)
         // Perform the lock
         // Perform the lock
         if (surface->internal_flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
         if (surface->internal_flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
             SDL_UnRLESurface(surface);
             SDL_UnRLESurface(surface);
-            surface->internal_flags |= SDL_INTERNAL_SURFACE_RLEACCEL; // save accel'd state
-            SDL_UpdateSurfaceLockFlag(surface);
+            surface->flags |= SDL_SURFACE_LOCK_NEEDED;
         }
         }
 #endif
 #endif
     }
     }
@@ -1754,14 +1753,6 @@ void SDL_UnlockSurface(SDL_Surface *surface)
         return;
         return;
     }
     }
 
 
-#ifdef SDL_HAVE_RLE
-    // Update RLE encoded surface with new data
-    if (surface->internal_flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
-        surface->internal_flags &= ~SDL_INTERNAL_SURFACE_RLEACCEL; // stop lying
-        SDL_RLESurface(surface);
-    }
-#endif
-
     surface->flags &= ~SDL_SURFACE_LOCKED;
     surface->flags &= ~SDL_SURFACE_LOCKED;
 }
 }