Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

pixelformat.c

Go to the documentation of this file.
00001 /****************************************************************************************/
00002 /*  PixelFormat.c                                                                       */
00003 /*                                                                                      */
00004 /*  Author: Charles Bloom                                                               */
00005 /*  Description:  The abstract Pixel primitives                                         */
00006 /*                                                                                      */
00007 /*  The contents of this file are subject to the Genesis3D Public License               */
00008 /*  Version 1.01 (the "License"); you may not use this file except in                   */
00009 /*  compliance with the License. You may obtain a copy of the License at                */
00010 /*  http://www.genesis3d.com                                                            */
00011 /*                                                                                      */
00012 /*  Software distributed under the License is distributed on an "AS IS"                 */
00013 /*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */
00014 /*  the License for the specific language governing rights and limitations              */
00015 /*  under the License.                                                                  */
00016 /*                                                                                      */
00017 /*  The Original Code is Genesis3D, released March 25, 1999.                            */
00018 /*Genesis3D Version 1.1 released November 15, 1999                            */
00019 /*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */
00020 /*                                                                                      */
00021 /****************************************************************************************/
00022 
00023 /*}{****************************************************************************************/
00024 
00025 /***
00026 
00027 this code only work on Intel-Endian CPU's
00028 
00029         {
00030         uint32 x = (('A'<<24) + ('B'<<16) + ('C'<<8) + 'D');
00031 
00032                 assert( memcmp(&x,"DCBA",4) == 0 );
00033         }
00034 
00035 ***/
00036 
00037 #include <stdlib.h>
00038 #include <assert.h>
00039 #include "pixelformat.h"
00040 
00041 #define isinrange(x,lo,hi)      ( (x)>=(lo) && (x)<=(hi) )
00042 
00043 #define SHIFTL(val,shift)       ( (shift) >= 0 ? ((val)<<(shift)) : ((val)>>(-(shift))) )
00044 #define SHIFTR(val,shift)       ( (shift) >= 0 ? ((val)>>(shift)) : ((val)<<(-(shift))) )
00045 
00046 // internal protos
00047 
00048 extern const gePixelFormat_Operations * gePixelFormat_Operations_Array;
00049 
00050 /*}{****************************************************************************************/
00051 
00052 GENESISAPI uint32 GENESISCC gePixelFormat_ComposePixel(gePixelFormat Format,int R,int G,int B,int A)
00053 {
00054 const gePixelFormat_Operations * ops;
00055         ops = &gePixelFormat_Operations_Array[Format];
00056         assert(ops);
00057         assert(ops->ComposePixel);
00058         return ops->ComposePixel(R,G,B,A);
00059 }
00060 
00061 GENESISAPI void GENESISCC gePixelFormat_DecomposePixel(gePixelFormat Format,uint32 Pixel,int *R,int *G,int *B,int *A)
00062 {
00063 const gePixelFormat_Operations * ops;
00064         ops = &gePixelFormat_Operations_Array[Format];
00065         assert(ops);
00066         assert(ops->DecomposePixel);
00067         ops->DecomposePixel(Pixel,R,G,B,A);
00068 }
00069 
00070 GENESISAPI uint32 GENESISCC gePixelFormat_GetPixel(gePixelFormat Format,uint8 **ppData)
00071 {
00072 const gePixelFormat_Operations * ops;
00073         ops = &gePixelFormat_Operations_Array[Format];
00074         assert(ops);
00075         assert(ops->GetPixel);
00076         return ops->GetPixel(ppData);
00077 }
00078 
00079 GENESISAPI void GENESISCC gePixelFormat_PutPixel(gePixelFormat Format,uint8 **ppData,uint32 Pixel)
00080 {
00081 const gePixelFormat_Operations * ops;
00082         ops = &gePixelFormat_Operations_Array[Format];
00083         assert(ops);
00084         assert(ops->PutPixel);
00085         ops->PutPixel(ppData,Pixel);
00086 }
00087 
00088 GENESISAPI void GENESISCC gePixelFormat_GetColor(gePixelFormat Format,uint8 **ppData,int *R,int *G,int *B,int *A)
00089 {
00090 const gePixelFormat_Operations * ops;
00091         ops = &gePixelFormat_Operations_Array[Format];
00092         assert(ops);
00093         assert(ops->GetColor);
00094         ops->GetColor(ppData,R,G,B,A);
00095 }
00096 GENESISAPI void GENESISCC gePixelFormat_PutColor(gePixelFormat Format,uint8 **ppData,int R,int G,int B,int A)
00097 {
00098 const gePixelFormat_Operations * ops;
00099         ops = &gePixelFormat_Operations_Array[Format];
00100         assert(ops);
00101         assert(ops->PutColor);
00102         ops->PutColor(ppData,R,G,B,A);
00103 }
00104 
00105 /*}{****************************************************************************************/
00106 
00107 GENESISAPI uint32 GENESISCC gePixelFormat_ConvertPixel(gePixelFormat Format,uint32 Pixel,gePixelFormat ToFormat)
00108 {
00109 int R,G,B,A;
00110                 gePixelFormat_DecomposePixel(Format,Pixel,&R,&G,&B,&A);
00111 return  gePixelFormat_ComposePixel(ToFormat,R,G,B,A);
00112 }
00113 
00114 GENESISAPI const gePixelFormat_Operations * GENESISCC gePixelFormat_GetOperations( gePixelFormat Format )
00115 {
00116         if ( ! gePixelFormat_IsValid(Format) )
00117                 return NULL;
00118         else
00119                 return & gePixelFormat_Operations_Array[Format];
00120 }
00121 
00122 /*}{****************************************************************************************/
00123 
00124 GENESISAPI unsigned int GENESISCC gePixelFormat_BytesPerPel( gePixelFormat Format )
00125 {
00126         assert( gePixelFormat_IsValid(Format) );
00127 return gePixelFormat_Operations_Array[Format].BytesPerPel;
00128 }
00129 
00130 GENESISAPI geBoolean GENESISCC gePixelFormat_HasPalette(  gePixelFormat Format )
00131 {
00132         assert( gePixelFormat_IsValid(Format) );
00133 return gePixelFormat_Operations_Array[Format].HasPalette;
00134 }
00135 
00136 GENESISAPI geBoolean GENESISCC gePixelFormat_HasAlpha(  gePixelFormat Format )
00137 {
00138         assert( gePixelFormat_IsValid(Format) );
00139 //      if ( Format == GE_PIXELFORMAT_16BIT_1555_ARGB ) @@
00140 //              return 0;
00141 return gePixelFormat_Operations_Array[Format].AMask;
00142 }
00143 
00144 static int NumBitsOn(uint32 val)
00145 {
00146 uint32 count = 0;
00147         while(val)
00148         {
00149                 count += val&1;
00150                 val >>= 1;
00151         }
00152 return count;
00153 }
00154 
00155 GENESISAPI geBoolean GENESISCC gePixelFormat_HasGoodAlpha(  gePixelFormat Format )
00156 {
00157         assert( gePixelFormat_IsValid(Format) );
00158         
00159         if ( NumBitsOn(gePixelFormat_Operations_Array[Format].AMask) > 1 )
00160                 return GE_TRUE;
00161         else
00162                 return GE_FALSE;
00163 }
00164 
00165 GENESISAPI geBoolean GENESISCC gePixelFormat_IsRaw(  gePixelFormat Format )
00166 {
00167         assert( gePixelFormat_IsValid(Format) );
00168         if ( gePixelFormat_Operations_Array[Format].ComposePixel )
00169                 return GE_TRUE;
00170         else
00171                 return GE_FALSE;
00172 }
00173 
00174 GENESISAPI const char * GENESISCC gePixelFormat_Description(  gePixelFormat Format )
00175 {
00176         assert( gePixelFormat_IsValid(Format) );
00177 return gePixelFormat_Operations_Array[Format].Description;
00178 }
00179 
00180 GENESISAPI geBoolean GENESISCC gePixelFormat_IsValid(gePixelFormat Format)
00181 {
00182         if ( (int)Format < 0 || (int)Format >= GE_PIXELFORMAT_COUNT )
00183                 return GE_FALSE;
00184         return GE_TRUE;
00185 }
00186 
00187 /*}{****************************************************************************************/
00188 
00189 /*}{****************************************************************************************/
00190 
00191 uint32  GetPixel_8bit(uint8 **ppData)
00192 {
00193 uint32 pel;
00194         pel = *((uint8 *)(*ppData));
00195         (*ppData) += 1;
00196 return pel;
00197 }
00198 
00199 void    PutPixel_8bit(uint8 **ppData,uint32 Pixel)
00200 {
00201         *((uint8 *)(*ppData)) = (uint8)Pixel;
00202         (*ppData) += 1;
00203 }
00204 
00205 uint32  GetPixel_16bit(uint8 **ppData)
00206 {
00207 uint32 pel;
00208         pel = *((uint16 *)(*ppData));
00209         (*ppData) += 2;
00210 return pel;
00211 }
00212 
00213 void    PutPixel_16bit(uint8 **ppData,uint32 Pixel)
00214 {
00215         *((uint16 *)(*ppData)) = (uint16)Pixel;
00216         (*ppData) += 2;
00217 }
00218 
00219 uint32  GetPixel_24bit(uint8 **ppData)
00220 {
00221 uint32 pel;
00222         pel  = (*ppData)[0] <<16;
00223         pel += (*ppData)[1] << 8;
00224         pel += (*ppData)[2];
00225         (*ppData) += 3;
00226 return pel;
00227 }
00228 
00229 void    PutPixel_24bit(uint8 **ppData,uint32 Pixel)
00230 {
00231         (*ppData)[0] = (uint8)(Pixel>>16);
00232         (*ppData)[1] = (uint8)(Pixel>>8);
00233         (*ppData)[2] = (uint8)(Pixel);
00234         (*ppData) += 3;
00235 }
00236 
00237 uint32  GetPixel_32bit(uint8 **ppData)
00238 {
00239 uint32 pel;
00240         pel = *((uint32 *)(*ppData));
00241         (*ppData) += 4;
00242 return pel;
00243 }
00244 
00245 void    PutPixel_32bit(uint8 **ppData,uint32 Pixel)
00246 {
00247         *((uint32 *)(*ppData)) = (uint32)Pixel;
00248         (*ppData) += 4;
00249 }
00250 
00251 /*}{****************************************************************************************/
00252 
00253 //#define RGB_to_Gray(R,G,B)    ((R + G + B)/3)
00254 #define RGB_to_Gray(R,G,B)      max(max(R,G),B)
00255 
00256 uint32  Compose_8bitGray   (int R,int G,int B,int A)
00257 {
00258 return (uint32)RGB_to_Gray(R,G,B);
00259 }
00260 
00261 void    Decompose_8bitGray (uint32 Pixel,int *R,int *G,int *B,int *A)
00262 {
00263         *R = *G = *B = (int)Pixel;
00264         *A = 255;
00265 }
00266 
00267 void    Get_8bitGray(uint8 **ppData,int *R,int *G,int *B,int *A)
00268 {
00269 int V;
00270         V = **ppData;
00271         (*ppData) += 1;
00272         *R = *G = *B = V; *A = 255;
00273 }
00274 
00275 void    Put_8bitGray(uint8 **ppData,int  R,int  G,int  B,int  A)
00276 {
00277 int V;
00278         V = RGB_to_Gray(R,G,B);
00279         **ppData = V;
00280         (*ppData) += 1;
00281 }
00282 
00283 /*}{****************************************************************************************/
00284 
00285 uint32  Compose_nada   (int R,int G,int B,int A)
00286 {
00287 return 0;
00288 }
00289 
00290 void    Decompose_nada (uint32 Pixel,int *R,int *G,int *B,int *A)
00291 {
00292 }
00293 
00294 void    Get_nada(uint8 **ppData,int *R,int *G,int *B,int *A)
00295 {
00296 }
00297 
00298 void    Put_nada(uint8 **ppData,int  R,int  G,int  B,int  A)
00299 {
00300 }
00301 
00302 /*}{****************************************************************************************/
00303 
00304 uint32  Compose_555rgb   (int R,int G,int B,int A)
00305 {
00306         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00307         return  ( ((R>>3)<<10) + ((G>>3)<<5) + ((B>>3)) );
00308 }
00309 
00310 void    Decompose_555rgb (uint32 Pixel,int *R,int *G,int *B,int *A)
00311 {
00312         *R = ((Pixel & 0x7C00)>>7) + 4;
00313         *G = ((Pixel & 0x03E0)>>2) + 4;
00314         *B = ((Pixel & 0x001F)<<3) + 4;
00315         *A = 255;
00316 }
00317 
00318 void    Get_555rgb(uint8 **ppData,int *R,int *G,int *B,int *A)
00319 {
00320 uint16 Pixel;
00321         Pixel = *((uint16 *)*ppData);
00322         (*ppData) += 2;
00323         *R = ((Pixel & 0x7C00)>>7) + 4;
00324         *G = ((Pixel & 0x03E0)>>2) + 4;
00325         *B = ((Pixel & 0x001F)<<3) + 4;
00326         *A = 255;
00327 }
00328 
00329 void    Put_555rgb(uint8 **ppData,int  R,int  G,int  B,int  A)
00330 {
00331 uint16 Pixel;
00332         Pixel = ( ((R>>3)<<10) + ((G>>3)<<5) + ((B>>3)) );
00333         *((uint16 *)*ppData) = Pixel;
00334         (*ppData) += 2;
00335 }
00336 
00337 uint32  Compose_555bgr   (int R,int G,int B,int A)
00338 {
00339         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00340         return  ( ((B>>3)<<10) + ((G>>3)<<5) + ((R>>3)) );
00341 }
00342 
00343 void    Decompose_555bgr (uint32 Pixel,int *R,int *G,int *B,int *A)
00344 {
00345         *B = ((Pixel & 0x7C00)>>7) + 4;
00346         *G = ((Pixel & 0x03E0)>>2) + 4;
00347         *R = ((Pixel & 0x001F)<<3) + 4;
00348         *A = 255;
00349 }
00350 
00351 void    Get_555bgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00352 {
00353 uint16 Pixel;
00354         Pixel = *((uint16 *)*ppData);
00355         (*ppData) += 2;
00356         *B = ((Pixel & 0x7C00)>>7) + 4;
00357         *G = ((Pixel & 0x03E0)>>2) + 4;
00358         *R = ((Pixel & 0x001F)<<3) + 4;
00359         *A = 255;
00360 }
00361 
00362 void    Put_555bgr(uint8 **ppData,int  R,int  G,int  B,int  A)
00363 {
00364 uint16 Pixel;
00365         Pixel = ( ((B>>3)<<10) + ((G>>3)<<5) + ((R>>3)) );
00366         *((uint16 *)*ppData) = Pixel;
00367         (*ppData) += 2;
00368 }
00369 
00370 
00371 /*}{****************************************************************************************/
00372 
00373 uint32  Compose_565rgb   (int R,int G,int B,int A)
00374 {
00375         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00376         return  ( ((R>>3)<<11) + ((G>>2)<<5) + ((B>>3)) );
00377 }
00378 
00379 void    Decompose_565rgb (uint32 Pixel,int *R,int *G,int *B,int *A)
00380 {
00381         *R = ((Pixel & 0xF800)>>8) + 4;
00382         *G = ((Pixel & 0x07E0)>>3) + 2;
00383         *B = ((Pixel & 0x001F)<<3) + 4;
00384         *A = 255;
00385 }
00386 
00387 void    Get_565rgb(uint8 **ppData,int *R,int *G,int *B,int *A)
00388 {
00389 uint16 Pixel;
00390         Pixel = *((uint16 *)*ppData);
00391         (*ppData) += 2;
00392         *R = ((Pixel & 0xF800)>>8) + 4;
00393         *G = ((Pixel & 0x07E0)>>3) + 2;
00394         *B = ((Pixel & 0x001F)<<3) + 4;
00395         *A = 255;
00396 }
00397 
00398 void    Put_565rgb(uint8 **ppData,int  R,int  G,int  B,int  A)
00399 {
00400 uint16 Pixel;
00401         Pixel = ( ((R>>3)<<11) + ((G>>2)<<5) + ((B>>3)) );
00402         *((uint16 *)*ppData) = Pixel;
00403         (*ppData) += 2;
00404 }
00405 
00406 uint32  Compose_565bgr   (int R,int G,int B,int A)
00407 {
00408         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00409         return  ( ((B>>3)<<11) + ((G>>2)<<5) + ((R>>3)) );
00410 }
00411 
00412 void    Decompose_565bgr (uint32 Pixel,int *R,int *G,int *B,int *A)
00413 {
00414         *B = ((Pixel & 0xF800)>>8) + 4;
00415         *G = ((Pixel & 0x07E0)>>3) + 2;
00416         *R = ((Pixel & 0x001F)<<3) + 4;
00417         *A = 255;
00418 }
00419 
00420 void    Get_565bgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00421 {
00422 uint16 Pixel;
00423         Pixel = *((uint16 *)*ppData);
00424         (*ppData) += 2;
00425         *B = ((Pixel & 0xF800)>>8) + 4;
00426         *G = ((Pixel & 0x07E0)>>3) + 2;
00427         *R = ((Pixel & 0x001F)<<3) + 4;
00428         *A = 255;
00429 }
00430 
00431 void    Put_565bgr(uint8 **ppData,int  R,int  G,int  B,int  A)
00432 {
00433 uint16 Pixel;
00434         Pixel = ( ((B>>3)<<11) + ((G>>2)<<5) + ((R>>3)) );
00435         *((uint16 *)*ppData) = Pixel;
00436         (*ppData) += 2;
00437 }
00438 
00439 /*}{****************************************************************************************/
00440 
00441 uint32  Compose_4444   (int R,int G,int B,int A)
00442 {
00443         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00444         return  ((A>>4)<<12) + ((R>>4)<<8) + ((G>>4)<<4) + (B>>4);
00445 }
00446 
00447 void    Decompose_4444 (uint32 Pixel,int *R,int *G,int *B,int *A)
00448 {
00449         *A = ((Pixel & 0xF000)>>8);
00450         *R = ((Pixel & 0x0F00)>>4) + 8;
00451         *G = ((Pixel & 0x00F0)   ) + 8;
00452         *B = ((Pixel & 0x000F)<<4) + 8;
00453 }
00454 
00455 void    Get_4444(uint8 **ppData,int *R,int *G,int *B,int *A)
00456 {
00457 uint16 Pixel;
00458         Pixel = *((uint16 *)*ppData);
00459         (*ppData) += 2;
00460         *A = ((Pixel & 0xF000)>>8);
00461         *R = ((Pixel & 0x0F00)>>4) + 8;
00462         *G = ((Pixel & 0x00F0)   ) + 8;
00463         *B = ((Pixel & 0x000F)<<4) + 8;
00464 }
00465 
00466 void    Put_4444(uint8 **ppData,int  R,int  G,int  B,int  A)
00467 {
00468 uint16 Pixel;
00469         Pixel = ((A>>4)<<12) + ((R>>4)<<8) + ((G>>4)<<4) + (B>>4);
00470         *((uint16 *)*ppData) = Pixel;
00471         (*ppData) += 2;
00472 }
00473 
00474 uint32  Compose_1555   (int R,int G,int B,int A)
00475 {
00476         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00477         return  ((A>>7)<<15) + ((R>>3)<<10) + ((G>>3)<<5) + ((B>>3)) ;
00478 }
00479 
00480 void    Decompose_1555 (uint32 Pixel,int *R,int *G,int *B,int *A)
00481 {
00482         *R = ((Pixel & 0x7C00)>>7) + 4;
00483         *G = ((Pixel & 0x03E0)>>2) + 4;
00484         *B = ((Pixel & 0x001F)<<3) + 4;
00485         *A = (Pixel>>15)<<7;
00486 }
00487 
00488 void    Get_1555(uint8 **ppData,int *R,int *G,int *B,int *A)
00489 {
00490 uint16 Pixel;
00491         Pixel = *((uint16 *)*ppData);
00492         (*ppData) += 2;
00493         *R = ((Pixel & 0x7C00)>>7) + 4;
00494         *G = ((Pixel & 0x03E0)>>2) + 4;
00495         *B = ((Pixel & 0x001F)<<3) + 4;
00496         *A = (Pixel>>15)<<7;
00497 }
00498 
00499 void    Put_1555(uint8 **ppData,int  R,int  G,int  B,int  A)
00500 {
00501 uint16 Pixel;
00502         Pixel = ((A>>7)<<15) + ( ((R>>3)<<10) + ((G>>3)<<5) + ((B>>3)) );
00503         *((uint16 *)*ppData) = Pixel;
00504         (*ppData) += 2;
00505 }
00506 
00507 
00508 /*}{****************************************************************************************/
00509 
00510 uint32  Compose_24rgb   (int R,int G,int B,int A)
00511 {
00512         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00513         return  (R<<16) + (G<<8) + B;
00514 }
00515 
00516 void    Decompose_24rgb (uint32 Pixel,int *R,int *G,int *B,int *A)
00517 {
00518         *A = 255;
00519         *R = (Pixel>>16)&0xFF;
00520         *G = (Pixel>>8)&0xFF;
00521         *B = (Pixel)&0xFF;
00522 }
00523 
00524 void    Get_24rgb(uint8 **ppData,int *R,int *G,int *B,int *A)
00525 {
00526 uint8 * ptr = *ppData;
00527         *R = ptr[0];
00528         *G = ptr[1];
00529         *B = ptr[2];
00530         *A = 255;
00531         *ppData = ptr + 3;
00532 }
00533 
00534 void    Put_24rgb(uint8 **ppData,int  R,int  G,int  B,int  A)
00535 {
00536 uint8 * ptr = *ppData;
00537         ptr[0] = R;
00538         ptr[1] = G;
00539         ptr[2] = B;
00540         *ppData = ptr + 3;
00541 }
00542 
00543 uint32  Compose_24bgr   (int R,int G,int B,int A)
00544 {
00545         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00546         return  (B<<16) + (G<<8) + R;
00547 }
00548 
00549 void    Decompose_24bgr (uint32 Pixel,int *R,int *G,int *B,int *A)
00550 {
00551         *A = 255;
00552         *B = (Pixel>>16)&0xFF;
00553         *G = (Pixel>>8)&0xFF;
00554         *R = (Pixel)&0xFF;
00555 }
00556 
00557 void    Get_24bgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00558 {
00559 uint8 * ptr = *ppData;
00560         *B = ptr[0];
00561         *G = ptr[1];
00562         *R = ptr[2];
00563         *A = 255;
00564         *ppData = ptr + 3;
00565 }
00566 
00567 void    Put_24bgr(uint8 **ppData,int  R,int  G,int  B,int  A)
00568 {
00569 uint8 * ptr = *ppData;
00570         ptr[0] = B;
00571         ptr[1] = G;
00572         ptr[2] = R;
00573         *ppData = ptr + 3;
00574 }
00575 
00576 /*}{****************************************************************************************/
00577 
00578 // RGBX in 32 bit is XBGR in bytes !!!
00579 
00580 uint32  Compose_32rgbx   (int R,int G,int B,int A)
00581 {
00582         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00583         return  (R<<24) + (G<<16) + (B<<8);
00584 }
00585 
00586 void    Decompose_32rgbx (uint32 Pixel,int *R,int *G,int *B,int *A)
00587 {
00588         *A = 255;
00589         *R = (Pixel>>24)&0xFF;
00590         *G = (Pixel>>16)&0xFF;
00591         *B = (Pixel>> 8)&0xFF;
00592 }
00593 
00594 void    Get_32rgbx(uint8 **ppData,int *R,int *G,int *B,int *A)
00595 {
00596         (*ppData) += 1;
00597         *B = **ppData; (*ppData) += 1;
00598         *G = **ppData; (*ppData) += 1;
00599         *R = **ppData; (*ppData) += 1;
00600         *A = 255;
00601 }
00602 
00603 void    Put_32rgbx(uint8 **ppData,int  R,int  G,int  B,int  A)
00604 {
00605         (*ppData) += 1;
00606         **ppData = B; (*ppData) += 1;
00607         **ppData = G; (*ppData) += 1;
00608         **ppData = R; (*ppData) += 1;
00609 }
00610 
00611 uint32  Compose_32xrgb   (int R,int G,int B,int A)
00612 {
00613         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00614         return  (R<<16) + (G<<8) + (B);
00615 }
00616 
00617 void    Decompose_32xrgb (uint32 Pixel,int *R,int *G,int *B,int *A)
00618 {
00619         *A = 255;
00620         *R = (Pixel>>16)&0xFF;
00621         *G = (Pixel>> 8)&0xFF;
00622         *B = (Pixel   )&0xFF;
00623 }
00624 
00625 void    Get_32xrgb(uint8 **ppData,int *R,int *G,int *B,int *A)
00626 {
00627         *B = **ppData; (*ppData) += 1;
00628         *G = **ppData; (*ppData) += 1;
00629         *R = **ppData; (*ppData) += 1;
00630         (*ppData) += 1;
00631         *A = 255;
00632 }
00633 
00634 void    Put_32xrgb(uint8 **ppData,int  R,int  G,int  B,int  A)
00635 {
00636         **ppData = B; (*ppData) += 1;
00637         **ppData = G; (*ppData) += 1;
00638         **ppData = R; (*ppData) += 1;
00639         (*ppData) += 1;
00640 }
00641 
00642 uint32  Compose_32bgrx   (int R,int G,int B,int A)
00643 {
00644         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00645         return  (B<<24) + (G<<16) + (R<<8);
00646 }
00647 
00648 void    Decompose_32bgrx (uint32 Pixel,int *R,int *G,int *B,int *A)
00649 {
00650         *A = 255;
00651         *B = (Pixel>>24)&0xFF;
00652         *G = (Pixel>>16)&0xFF;
00653         *R = (Pixel>> 8)&0xFF;
00654 }
00655 
00656 void    Get_32bgrx(uint8 **ppData,int *R,int *G,int *B,int *A)
00657 {
00658         (*ppData) += 1;
00659         *R = **ppData; (*ppData) += 1;
00660         *G = **ppData; (*ppData) += 1;
00661         *B = **ppData; (*ppData) += 1;
00662         *A = 255;
00663 }
00664 
00665 void    Put_32bgrx(uint8 **ppData,int  R,int  G,int  B,int  A)
00666 {
00667         (*ppData) += 1;
00668         **ppData = R; (*ppData) += 1;
00669         **ppData = G; (*ppData) += 1;
00670         **ppData = B; (*ppData) += 1;
00671 }
00672 
00673 uint32  Compose_32xbgr   (int R,int G,int B,int A)
00674 {
00675         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B );
00676         return  (B<<16) + (G<<8) + (R);
00677 }
00678 
00679 void    Decompose_32xbgr (uint32 Pixel,int *R,int *G,int *B,int *A)
00680 {
00681         *A = 255;
00682         *B = (Pixel>>16)&0xFF;
00683         *G = (Pixel>> 8)&0xFF;
00684         *R = (Pixel   )&0xFF;
00685 }
00686 
00687 void    Get_32xbgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00688 {
00689         *R = **ppData; (*ppData) += 1;
00690         *G = **ppData; (*ppData) += 1;
00691         *B = **ppData; (*ppData) += 1;
00692         (*ppData) += 1;
00693         *A = 255;
00694 }
00695 
00696 void    Put_32xbgr(uint8 **ppData,int  R,int  G,int  B,int  A)
00697 {
00698         **ppData = R; (*ppData) += 1;
00699         **ppData = G; (*ppData) += 1;
00700         **ppData = B; (*ppData) += 1;
00701         (*ppData) += 1;
00702 }
00703 
00704 /*}{****************************************************************************************/
00705 
00706 uint32  Compose_32rgba   (int R,int G,int B,int A)
00707 {
00708         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00709         return  (R<<24) + (G<<16) + (B<<8) + A;
00710 }
00711 
00712 void    Decompose_32rgba (uint32 pixel,int *R,int *G,int *B,int *A)
00713 {
00714         *R = (pixel>>24)&0xFF;
00715         *G = (pixel>>16)&0xFF;
00716         *B = (pixel>> 8)&0xFF;
00717         *A = (pixel    )&0xFF;
00718 }
00719 
00720 void    Get_32rgba(uint8 **ppData,int *R,int *G,int *B,int *A)
00721 {
00722         *A = **ppData; (*ppData) += 1;
00723         *B = **ppData; (*ppData) += 1;
00724         *G = **ppData; (*ppData) += 1;
00725         *R = **ppData; (*ppData) += 1;
00726 }
00727 
00728 void    Put_32rgba(uint8 **ppData,int  R,int  G,int  B,int  A)
00729 {
00730         **ppData = A; (*ppData) += 1;
00731         **ppData = B; (*ppData) += 1;
00732         **ppData = G; (*ppData) += 1;
00733         **ppData = R; (*ppData) += 1;
00734 }
00735 
00736 uint32  Compose_32argb   (int R,int G,int B,int A)
00737 {
00738         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00739         return  (A<<24) + (R<<16) + (G<<8) + (B);
00740 }
00741 
00742 void    Decompose_32argb (uint32 pixel,int *R,int *G,int *B,int *A)
00743 {
00744         *A = (pixel>>24)&0xFF;
00745         *R = (pixel>>16)&0xFF;
00746         *G = (pixel>> 8)&0xFF;
00747         *B = (pixel    )&0xFF;
00748 }
00749 
00750 void    Get_32argb(uint8 **ppData,int *R,int *G,int *B,int *A)
00751 {
00752         *B = **ppData; (*ppData) += 1;
00753         *G = **ppData; (*ppData) += 1;
00754         *R = **ppData; (*ppData) += 1;
00755         *A = **ppData; (*ppData) += 1;
00756 }
00757 
00758 void    Put_32argb(uint8 **ppData,int  R,int  G,int  B,int  A)
00759 {
00760         **ppData = B; (*ppData) += 1;
00761         **ppData = G; (*ppData) += 1;
00762         **ppData = R; (*ppData) += 1;
00763         **ppData = A; (*ppData) += 1;
00764 }
00765 
00766 uint32  Compose_32bgra   (int R,int G,int B,int A)
00767 {
00768         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00769         return  (B<<24) + (G<<16) + (R<<8) + A;
00770 }
00771 
00772 void    Decompose_32bgra (uint32 pixel,int *R,int *G,int *B,int *A)
00773 {
00774         *B = (pixel>>24)&0xFF;
00775         *G = (pixel>>16)&0xFF;
00776         *R = (pixel>> 8)&0xFF;
00777         *A = (pixel    )&0xFF;
00778 }
00779 
00780 void    Get_32bgra(uint8 **ppData,int *R,int *G,int *B,int *A)
00781 {
00782         *A = **ppData; (*ppData) += 1;
00783         *R = **ppData; (*ppData) += 1;
00784         *G = **ppData; (*ppData) += 1;
00785         *B = **ppData; (*ppData) += 1;
00786 }
00787 
00788 void    Put_32bgra(uint8 **ppData,int  R,int  G,int  B,int  A)
00789 {
00790         **ppData = A; (*ppData) += 1;
00791         **ppData = R; (*ppData) += 1;
00792         **ppData = G; (*ppData) += 1;
00793         **ppData = B; (*ppData) += 1;
00794 }
00795 
00796 uint32  Compose_32abgr   (int R,int G,int B,int A)
00797 {
00798         assert( (R&0xFF) == R && (G&0xFF) == G && (B&0xFF) == B && (A&0xFF) == A );
00799         return  (A<<24) + (B<<16) + (G<<8) + (R);
00800 }
00801 
00802 void    Decompose_32abgr (uint32 pixel,int *R,int *G,int *B,int *A)
00803 {
00804         *A = (pixel>>24)&0xFF;
00805         *B = (pixel>>16)&0xFF;
00806         *G = (pixel>> 8)&0xFF;
00807         *R = (pixel    )&0xFF;
00808 }
00809 
00810 void    Get_32abgr(uint8 **ppData,int *R,int *G,int *B,int *A)
00811 {
00812         *R = **ppData; (*ppData) += 1;
00813         *G = **ppData; (*ppData) += 1;
00814         *B = **ppData; (*ppData) += 1;
00815         *A = **ppData; (*ppData) += 1;
00816 }
00817 
00818 void    Put_32abgr(uint8 **ppData,int  R,int  G,int  B,int  A)
00819 {
00820         **ppData = R; (*ppData) += 1;
00821         **ppData = G; (*ppData) += 1;
00822         **ppData = B; (*ppData) += 1;
00823         **ppData = A; (*ppData) += 1;
00824 }
00825 
00826 
00827 /*}{********* the giant format-ops definition ****************/
00828 
00829 static const gePixelFormat_Operations gePixelFormat_Operations_Array_Def[] = 
00830 {
00831         {0,0,0,0,                       0,0,0,0,        0,0,0,0,        0 ,0,           "invalid"},     
00832 
00833         {0,0,0,0,                       0,0,0,0,        0,0,0,0,        1 ,1,           "8bit pal",             NULL,NULL,      NULL,NULL,      GetPixel_8bit, PutPixel_8bit},
00834         //      Gray = (R>>2) + (G>>1) + (B>>2)
00835         {0x3F,0x7F,0x3F,0,      -2,-1,-2,0, 3,0,3,0xFF, 1 ,0,           "8bit gray",    Compose_8bitGray,Decompose_8bitGray, Get_8bitGray,Put_8bitGray, GetPixel_8bit, PutPixel_8bit},
00836 
00837         // 16 bit (in uwords)
00838         {0x7C00 ,0x03E0 ,0x001F ,0,                      7, 2, -3, 0,   4,4,4,0xFF,             2,0,    "555 RGB",              Compose_555rgb,Decompose_555rgb, Get_555rgb,Put_555rgb, GetPixel_16bit,PutPixel_16bit}, 
00839         {0x001F ,0x03E0 ,0x7C00 ,0,                     -3, 2,  7, 0,   4,4,4,0xFF,             2,0,    "555 BGR",              Compose_555bgr,Decompose_555bgr, Get_555bgr,Put_555bgr, GetPixel_16bit,PutPixel_16bit},
00840         {0xF800 ,0x07E0 ,0x001F ,0,                      8, 3, -3, 0,   4,2,4,0xFF,             2,0,    "565 RGB",              Compose_565rgb,Decompose_565rgb, Get_565rgb,Put_565rgb, GetPixel_16bit,PutPixel_16bit},
00841         {0x001F ,0x07E0 ,0xF800 ,0,                     -3, 3,  8, 0,   4,2,4,0xFF,             2,0,    "565 BGR",              Compose_565bgr,Decompose_565bgr, Get_565bgr,Put_565bgr, GetPixel_16bit,PutPixel_16bit},
00842         {0x0F00 ,0x00F0 ,0x000F ,0xF000,         4, 0, -4, 8,   8,8,8,8,                2,0,    "4444 ARGB",    Compose_4444,Decompose_4444, Get_4444,Put_4444,                 GetPixel_16bit,PutPixel_16bit},
00843         {0x7C00 ,0x03E0 ,0x001F ,0x8000,         7, 2, -3, 8,   4,4,4,0x40,             2,0,    "1555 ARGB",    Compose_1555,Decompose_1555, Get_1555,Put_1555,                 GetPixel_16bit,PutPixel_16bit},
00844 
00845         // 24 bit (in bytes!)
00846         {0x00FF0000,0x0000FF00,0x000000FF,0,    16, 8, 0,0,             0,0,0,0xFF,     3,0,    "24bit RGB",    Compose_24rgb,Decompose_24rgb, Get_24rgb,Put_24rgb,     GetPixel_24bit,PutPixel_24bit},
00847         {0x000000FF,0x0000FF00,0x00FF0000,0,    0 , 8,16,0,             0,0,0,0xFF,     3,0,    "24bit BGR",    Compose_24bgr,Decompose_24bgr, Get_24bgr,Put_24bgr,     GetPixel_24bit,PutPixel_24bit},
00848         {0x00FF0000,0x0000FF00,0x000000FF,0,    16, 8, 0,0,             0,0,0,0xFF,     3,0,    "24bit YUV",    Compose_24rgb,Decompose_24rgb, Get_24rgb,Put_24rgb,     GetPixel_24bit,PutPixel_24bit},
00849 
00850         // 32 bit (in ulongs)
00851         {0xFF000000,0x00FF0000,0x0000FF00,0,    24,16, 8,0,             0,0,0,0xFF,     4,0,    "32 bit RGBX",  Compose_32rgbx,Decompose_32rgbx, Get_32rgbx,Put_32rgbx, GetPixel_32bit,PutPixel_32bit},
00852         {0x00FF0000,0x0000FF00,0x000000FF,0,    16, 8, 0,0,             0,0,0,0xFF,     4,0,    "32 bit XRGB",  Compose_32xrgb,Decompose_32xrgb, Get_32xrgb,Put_32xrgb, GetPixel_32bit,PutPixel_32bit},
00853         {0x0000FF00,0x00FF0000,0xFF000000,0,    8 ,16,24,0,             0,0,0,0xFF,     4,0,    "32 bit BGRX",  Compose_32bgrx,Decompose_32bgrx, Get_32bgrx,Put_32bgrx, GetPixel_32bit,PutPixel_32bit},
00854         {0x000000FF,0x0000FF00,0x00FF0000,0,    0 , 8,16,0,             0,0,0,0xFF,     4,0,    "32 bit XBGR",  Compose_32xbgr,Decompose_32xbgr, Get_32xbgr,Put_32xbgr, GetPixel_32bit,PutPixel_32bit},
00855 
00856         {0xFF000000,0x00FF0000,0x0000FF00,0x000000FF,   24,16, 8, 0,    0,0,0,0,4,0,"32 bit RGBA",      Compose_32rgba,Decompose_32rgba, Get_32rgba,Put_32rgba, GetPixel_32bit,PutPixel_32bit},
00857         {0x00FF0000,0x0000FF00,0x000000FF,0xFF000000,   16, 8, 0,24,    0,0,0,0,4,0,"32 bit ARGB",      Compose_32argb,Decompose_32argb, Get_32argb,Put_32argb, GetPixel_32bit,PutPixel_32bit},
00858         {0x0000FF00,0x00FF0000,0xFF000000,0x000000FF,   8 ,16,24, 0,    0,0,0,0,4,0,"32 bit BGRA",      Compose_32bgra,Decompose_32bgra, Get_32bgra,Put_32bgra, GetPixel_32bit,PutPixel_32bit},
00859         {0x000000FF,0x0000FF00,0x00FF0000,0xFF000000,   0 , 8,16,24,    0,0,0,0,4,0,"32 bit ABGR",      Compose_32abgr,Decompose_32abgr, Get_32abgr,Put_32abgr, GetPixel_32bit,PutPixel_32bit},
00860 
00861         {0,0,0,0,                       0,0,0,0,        0,0,0,0,        0 ,0,   "wavelet"},
00862 
00863         {0,0,0,0,                       0,0,0,0,        0,0,0,0,        0 ,0,   "invalid"}
00864 };
00865 
00866 const gePixelFormat_Operations * gePixelFormat_Operations_Array = gePixelFormat_Operations_Array_Def;
00867 
00868 
00869 /*}{************************************************/
00870 
00871 /*
00872 uint32  Compose_   (int R,int G,int B,int A)
00873 {
00874 }
00875 
00876 void    Decompose_ (uint32 Pixel,int *R,int *G,int *B,int *A)
00877 {
00878 }
00879 
00880 void    Get_(uint8 **ppData,int *R,int *G,int *B,int *A)
00881 {
00882 }
00883 
00884 void    Put_(uint8 **ppData,int  R,int  G,int  B,int  A)
00885 {
00886 }
00887 */
00888 
00889 /*}{****************************************************************************************/
00890 

Generated on Tue Sep 30 12:36:10 2003 for GTestAndEngine by doxygen 1.3.2