瀏覽代碼

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

Fixes Bugzilla #2986.
Ryan C. Gordon 10 年之前
父節點
當前提交
80614b27e4
共有 1 個文件被更改,包括 12 次插入6 次删除
  1. 12 6
      src/video/SDL_fillrect.c

+ 12 - 6
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;
     }