Commit 80614b27e410f49433e6bf65e5a209d67902d68d

Ryan C. Gordon 2015-05-31T11:38:10

Fixed swizzle of SDL_FillRect() on 24-bit surface (thanks, "nagydavid91"!). Fixes Bugzilla #2986.

diff --git a/src/video/SDL_fillrect.c b/src/video/SDL_fillrect.c
index cf7e86d..2282d2b 100644
--- a/src/video/SDL_fillrect.c
+++ b/src/video/SDL_fillrect.c
@@ -196,9 +196,15 @@ SDL_FillRect2(Uint8 * pixels, int pitch, Uint32 color, int w, int h)
 static void
 SDL_FillRect3(Uint8 * pixels, int pitch, Uint32 color, int w, int h)
 {
-    Uint8 r = (Uint8) ((color >> 16) & 0xFF);
-    Uint8 g = (Uint8) ((color >> 8) & 0xFF);
-    Uint8 b = (Uint8) (color & 0xFF);
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN
+    Uint8 b1 = (Uint8) (color & 0xFF);
+    Uint8 b2 = (Uint8) ((color >> 8) & 0xFF);
+    Uint8 b3 = (Uint8) ((color >> 16) & 0xFF);
+#elif SDL_BYTEORDER == SDL_BIG_ENDIAN
+    Uint8 b1 = (Uint8) ((color >> 16) & 0xFF);
+    Uint8 b2 = (Uint8) ((color >> 8) & 0xFF);
+    Uint8 b3 = (Uint8) (color & 0xFF);
+#endif
     int n;
     Uint8 *p = NULL;
 
@@ -207,9 +213,9 @@ SDL_FillRect3(Uint8 * pixels, int pitch, Uint32 color, int w, int h)
         p = pixels;
 
         while (n--) {
-            *p++ = r;
-            *p++ = g;
-            *p++ = b;
+            *p++ = b1;
+            *p++ = b2;
+            *p++ = b3;
         }
         pixels += pitch;
     }