From 089dc86bcfebe6737965fcb4db9c36bcb2fbc7da Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 8 Nov 2025 14:31:06 -0800
Subject: [PATCH] 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.
---
src/video/SDL_surface.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c
index efab1081db509..7a53b5cb16d8c 100644
--- a/src/video/SDL_surface.c
+++ b/src/video/SDL_surface.c
@@ -1726,8 +1726,7 @@ bool SDL_LockSurface(SDL_Surface *surface)
// Perform the lock
if (surface->internal_flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
SDL_UnRLESurface(surface);
- surface->internal_flags |= SDL_INTERNAL_SURFACE_RLEACCEL; // save accel'd state
- SDL_UpdateSurfaceLockFlag(surface);
+ surface->flags |= SDL_SURFACE_LOCK_NEEDED;
}
#endif
}
@@ -1754,14 +1753,6 @@ void SDL_UnlockSurface(SDL_Surface *surface)
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;
}