Commit e27077bf authored by Sam Lantinga's avatar Sam Lantinga

The format detection code works better with 555 and 565 pixel formats

parent 065cf0f7
...@@ -256,12 +256,12 @@ SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, ...@@ -256,12 +256,12 @@ SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask,
} }
break; break;
case 15: case 15:
switch (Rmask) { if (Rmask == 0x7C00 && Bmask == 0x001F) {
case 0x001F:
return SDL_PIXELFORMAT_BGR555;
case 0x7C00:
return SDL_PIXELFORMAT_RGB555; return SDL_PIXELFORMAT_RGB555;
} }
if (Rmask == 0x001F && Bmask == 0x7C00) {
return SDL_PIXELFORMAT_BGR555;
}
break; break;
case 16: case 16:
switch (Rmask) { switch (Rmask) {
...@@ -273,18 +273,24 @@ SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, ...@@ -273,18 +273,24 @@ SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask,
return SDL_PIXELFORMAT_BGRA4444; return SDL_PIXELFORMAT_BGRA4444;
case 0x000F: case 0x000F:
return SDL_PIXELFORMAT_ABGR4444; return SDL_PIXELFORMAT_ABGR4444;
case 0xF800:
if (Bmask == 0x001F) {
return SDL_PIXELFORMAT_RGB565;
}
break;
case 0x7C00:
if (Bmask == 0x001F) {
return SDL_PIXELFORMAT_RGB555;
}
break;
case 0x001F: case 0x001F:
if (Gmask == 0x07E0) { if (Bmask == 0xF800) {
return SDL_PIXELFORMAT_BGR565; return SDL_PIXELFORMAT_BGR565;
} }
return SDL_PIXELFORMAT_ABGR1555; if (Bmask == 0x7C00) {
case 0x7C00: return SDL_PIXELFORMAT_BGR555;
return SDL_PIXELFORMAT_ARGB1555;
case 0xF800:
if (Gmask == 0x07E0) {
return SDL_PIXELFORMAT_RGB565;
} }
return SDL_PIXELFORMAT_RGBA5551; break;
} }
break; break;
case 24: case 24:
......
...@@ -60,22 +60,12 @@ int WIN_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, voi ...@@ -60,22 +60,12 @@ int WIN_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, voi
*format = SDL_PIXELFORMAT_UNKNOWN; *format = SDL_PIXELFORMAT_UNKNOWN;
if (info->bmiHeader.biCompression == BI_BITFIELDS) { if (info->bmiHeader.biCompression == BI_BITFIELDS) {
int bpp;
Uint32 *masks; Uint32 *masks;
bpp = info->bmiHeader.biPlanes * info->bmiHeader.biBitCount;
masks = (Uint32*)((Uint8*)info + info->bmiHeader.biSize); masks = (Uint32*)((Uint8*)info + info->bmiHeader.biSize);
if (masks[0] == 0x00FF0000 && masks[2] == 0x000000FF) { *format = SDL_MasksToPixelFormatEnum(bpp, masks[0], masks[1], masks[2], 0);
*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;
}
} }
if (*format == SDL_PIXELFORMAT_UNKNOWN) if (*format == SDL_PIXELFORMAT_UNKNOWN)
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment