Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Fixed garbage trying to create a FourCC pixel format.
Browse files Browse the repository at this point in the history
  • Loading branch information
slouken committed Mar 7, 2011
1 parent bc28f2f commit 7c38407
Showing 1 changed file with 58 additions and 63 deletions.
121 changes: 58 additions & 63 deletions src/video/SDL_pixels.c
Expand Up @@ -83,6 +83,12 @@ SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp, Uint32 * Rmask,
{
Uint32 masks[4];

/* This function doesn't work with FourCC pixel formats */
if (SDL_ISPIXELFORMAT_FOURCC(format)) {
SDL_SetError("Unknown pixel format");
return SDL_FALSE;
}

/* Initialize the values here */
if (SDL_BYTESPERPIXEL(format) <= 2) {
*bpp = SDL_BITSPERPIXEL(format);
Expand Down Expand Up @@ -444,73 +450,62 @@ SDL_AllocFormat(Uint32 pixel_format)
int
SDL_InitFormat(SDL_PixelFormat * format, Uint32 pixel_format)
{
int bpp;
Uint32 Rmask, Gmask, Bmask, Amask;
Uint32 mask;

if (!SDL_PixelFormatEnumToMasks(pixel_format, &bpp,
&Rmask, &Gmask, &Bmask, &Amask)) {
SDL_SetError("Unknown pixel format");
return -1;
}

/* Set up the format */
SDL_zerop(format);
format->format = pixel_format;
format->BitsPerPixel = SDL_BITSPERPIXEL(pixel_format);
format->BytesPerPixel = SDL_BYTESPERPIXEL(pixel_format);
if (SDL_ISPIXELFORMAT_INDEXED(pixel_format)) {
/* Palettized formats have no mask info */
format->Rloss = 8;
format->Gloss = 8;
format->Bloss = 8;
format->Aloss = 8;
format->Rshift = 0;
format->Gshift = 0;
format->Bshift = 0;
format->Ashift = 0;
format->Rmask = 0;
format->Gmask = 0;
format->Bmask = 0;
format->Amask = 0;
} else {
int bpp;
Uint32 Rmask, Gmask, Bmask, Amask;
Uint32 mask;

if (!SDL_PixelFormatEnumToMasks(pixel_format, &bpp,
&Rmask, &Gmask, &Bmask, &Amask)) {
SDL_SetError("Unknown pixel format");
return -1;
}

format->Rshift = 0;
format->Rloss = 8;
if (Rmask) {
for (mask = Rmask; !(mask & 0x01); mask >>= 1)
++format->Rshift;
for (; (mask & 0x01); mask >>= 1)
--format->Rloss;
}
format->Gshift = 0;
format->Gloss = 8;
if (Gmask) {
for (mask = Gmask; !(mask & 0x01); mask >>= 1)
++format->Gshift;
for (; (mask & 0x01); mask >>= 1)
--format->Gloss;
}
format->Bshift = 0;
format->Bloss = 8;
if (Bmask) {
for (mask = Bmask; !(mask & 0x01); mask >>= 1)
++format->Bshift;
for (; (mask & 0x01); mask >>= 1)
--format->Bloss;
}
format->Ashift = 0;
format->Aloss = 8;
if (Amask) {
for (mask = Amask; !(mask & 0x01); mask >>= 1)
++format->Ashift;
for (; (mask & 0x01); mask >>= 1)
--format->Aloss;
}
format->Rmask = Rmask;
format->Gmask = Gmask;
format->Bmask = Bmask;
format->Amask = Amask;
format->BitsPerPixel = bpp;
format->BytesPerPixel = (bpp + 7) / 8;

format->Rmask = Rmask;
format->Rshift = 0;
format->Rloss = 8;
if (Rmask) {
for (mask = Rmask; !(mask & 0x01); mask >>= 1)
++format->Rshift;
for (; (mask & 0x01); mask >>= 1)
--format->Rloss;
}

format->Gmask = Gmask;
format->Gshift = 0;
format->Gloss = 8;
if (Gmask) {
for (mask = Gmask; !(mask & 0x01); mask >>= 1)
++format->Gshift;
for (; (mask & 0x01); mask >>= 1)
--format->Gloss;
}

format->Bmask = Bmask;
format->Bshift = 0;
format->Bloss = 8;
if (Bmask) {
for (mask = Bmask; !(mask & 0x01); mask >>= 1)
++format->Bshift;
for (; (mask & 0x01); mask >>= 1)
--format->Bloss;
}

format->Amask = Amask;
format->Ashift = 0;
format->Aloss = 8;
if (Amask) {
for (mask = Amask; !(mask & 0x01); mask >>= 1)
++format->Ashift;
for (; (mask & 0x01); mask >>= 1)
--format->Aloss;
}

format->palette = NULL;
format->refcount = 1;
format->next = NULL;
Expand Down

0 comments on commit 7c38407

Please sign in to comment.