diff --git a/src/video/SDL_pixels.c b/src/video/SDL_pixels.c index e2bf0c9cd..53a28f0d7 100644 --- a/src/video/SDL_pixels.c +++ b/src/video/SDL_pixels.c @@ -256,12 +256,12 @@ SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, } break; case 15: - switch (Rmask) { - case 0x001F: - return SDL_PIXELFORMAT_BGR555; - case 0x7C00: + if (Rmask == 0x7C00 && Bmask == 0x001F) { return SDL_PIXELFORMAT_RGB555; } + if (Rmask == 0x001F && Bmask == 0x7C00) { + return SDL_PIXELFORMAT_BGR555; + } break; case 16: switch (Rmask) { @@ -273,18 +273,24 @@ SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, return SDL_PIXELFORMAT_BGRA4444; case 0x000F: return SDL_PIXELFORMAT_ABGR4444; - case 0x001F: - if (Gmask == 0x07E0) { - return SDL_PIXELFORMAT_BGR565; - } - return SDL_PIXELFORMAT_ABGR1555; - case 0x7C00: - return SDL_PIXELFORMAT_ARGB1555; case 0xF800: - if (Gmask == 0x07E0) { + if (Bmask == 0x001F) { return SDL_PIXELFORMAT_RGB565; } - return SDL_PIXELFORMAT_RGBA5551; + break; + case 0x7C00: + if (Bmask == 0x001F) { + return SDL_PIXELFORMAT_RGB555; + } + break; + case 0x001F: + if (Bmask == 0xF800) { + return SDL_PIXELFORMAT_BGR565; + } + if (Bmask == 0x7C00) { + return SDL_PIXELFORMAT_BGR555; + } + break; } break; case 24: diff --git a/src/video/windows/SDL_windowsframebuffer.c b/src/video/windows/SDL_windowsframebuffer.c index 05dac6f9d..f78b5f547 100644 --- a/src/video/windows/SDL_windowsframebuffer.c +++ b/src/video/windows/SDL_windowsframebuffer.c @@ -60,22 +60,12 @@ int WIN_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, voi *format = SDL_PIXELFORMAT_UNKNOWN; if (info->bmiHeader.biCompression == BI_BITFIELDS) { + int bpp; Uint32 *masks; + bpp = info->bmiHeader.biPlanes * info->bmiHeader.biBitCount; masks = (Uint32*)((Uint8*)info + info->bmiHeader.biSize); - if (masks[0] == 0x00FF0000 && masks[2] == 0x000000FF) { - *format = SDL_PIXELFORMAT_RGB888; - } else if (masks[0] == 0x000000FF && masks[2] == 0x00FF0000) { - *format = SDL_PIXELFORMAT_BGR888; - } else if (masks[0] == 0xF800 && masks[2] == 0x001F) { - *format = SDL_PIXELFORMAT_RGB565; - } else if (masks[0] == 0x001F && masks[2] == 0xF800) { - *format = SDL_PIXELFORMAT_BGR565; - } else if (masks[0] == 0x7C00 && masks[2] == 0x001F) { - *format = SDL_PIXELFORMAT_RGB555; - } else if (masks[0] == 0x001F && masks[2] == 0x7C00) { - *format = SDL_PIXELFORMAT_BGR555; - } + *format = SDL_MasksToPixelFormatEnum(bpp, masks[0], masks[1], masks[2], 0); } if (*format == SDL_PIXELFORMAT_UNKNOWN) #endif