The format detection code works better with 555 and 565 pixel formats
This commit is contained in:
parent
065cf0f75a
commit
e27077bfaf
2 changed files with 22 additions and 26 deletions
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue