From: <ebo...@us...> - 2003-03-26 10:27:33
|
Update of /cvsroot/alleg/allegro/include/allegro/internal In directory sc8-pr-cvs1:/tmp/cvs-serv7823/include/allegro/internal Modified Files: aintern.h alconfig.h Log Message: Fixed more endianess problems. Index: aintern.h =================================================================== RCS file: /cvsroot/alleg/allegro/include/allegro/internal/aintern.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- aintern.h 7 Feb 2003 13:29:05 -0000 1.11 +++ aintern.h 26 Mar 2003 10:27:26 -0000 1.12 @@ -312,6 +312,22 @@ AL_FUNC(BITMAP *, _fixup_loaded_bitmap, (BITMAP *bmp, PALETTE pal, int bpp)); +/* default truecolor pixel format */ +#define DEFAULT_RGB_R_SHIFT_15 0 +#define DEFAULT_RGB_G_SHIFT_15 5 +#define DEFAULT_RGB_B_SHIFT_15 10 +#define DEFAULT_RGB_R_SHIFT_16 0 +#define DEFAULT_RGB_G_SHIFT_16 5 +#define DEFAULT_RGB_B_SHIFT_16 11 +#define DEFAULT_RGB_R_SHIFT_24 0 +#define DEFAULT_RGB_G_SHIFT_24 8 +#define DEFAULT_RGB_B_SHIFT_24 16 +#define DEFAULT_RGB_R_SHIFT_32 0 +#define DEFAULT_RGB_G_SHIFT_32 8 +#define DEFAULT_RGB_B_SHIFT_32 16 +#define DEFAULT_RGB_A_SHIFT_32 24 + + /* display switching support */ AL_FUNC(void, _switch_in, (void)); AL_FUNC(void, _switch_out, (void)); Index: alconfig.h =================================================================== RCS file: /cvsroot/alleg/allegro/include/allegro/internal/alconfig.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- alconfig.h 31 Oct 2002 12:56:24 -0000 1.9 +++ alconfig.h 26 Mar 2003 10:27:26 -0000 1.10 @@ -258,6 +258,32 @@ #endif +/* endian-independent 3-byte accessor macros */ +#ifdef ALLEGRO_LITTLE_ENDIAN + + #define READ3BYTES(p) (((int) *(p)) \ + | ((int) *((p) + 1) << 8) \ + | ((int) *((p) + 2) << 16)) + + #define WRITE3BYTES(p,c) ((*(p) = (c)), \ + (*((p) + 1) = (c) >> 8), \ + (*((p) + 2) = (c) >> 16)) + +#elif defined ALLEGRO_BIG_ENDIAN + + #define READ3BYTES(p) (((int) *(p) << 16) \ + | ((int) *((p) + 1) << 8) \ + | ((int) *((p) + 2))) + + #define WRITE3BYTES(p,c) ((*(p) = (c) >> 16), \ + (*((p) + 1) = (c) >> 8), \ + (*((p) + 2) = (c))) + +#else + #error endianess not defined +#endif + + /* generic versions of the video memory access helpers */ #ifndef bmp_select #define bmp_select(bmp) @@ -274,55 +300,22 @@ #define bmp_read16(addr) (*((unsigned short *)(addr))) #define bmp_read32(addr) (*((unsigned long *)(addr))) - #ifdef ALLEGRO_LITTLE_ENDIAN - - AL_INLINE(void, bmp_write24, (unsigned long addr, int c), - { - unsigned char *p = (unsigned char *)addr; - - p[0] = c & 0xFF; - p[1] = (c>>8) & 0xFF; - p[2] = (c>>16) & 0xFF; - }) - - AL_INLINE(int, bmp_read24, (unsigned long addr), - { - unsigned char *p = (unsigned char *)addr; - int c; - - c = p[0]; - c |= (int)p[1] << 8; - c |= (int)p[2] << 16; - - return c; - }) - - #elif defined ALLEGRO_BIG_ENDIAN - - AL_INLINE(void, bmp_write24, (unsigned long addr, int c), - { - unsigned char *p = (unsigned char *)addr; - - p[0] = (c>>16) & 0xFF; - p[1] = (c>>8) & 0xFF; - p[2] = c & 0xFF; - }) + AL_INLINE(int, bmp_read24, (unsigned long addr), + { + unsigned char *p = (unsigned char *)addr; + int c; - AL_INLINE(int, bmp_read24, (unsigned long addr), - { - unsigned char *p = (unsigned char *)addr; - int c; + c = READ3BYTES(p); - c = (int)p[0] << 16; - c |= (int)p[1] << 8; - c |= p[2]; + return c; + }) - return c; - }) + AL_INLINE(void, bmp_write24, (unsigned long addr, int c), + { + unsigned char *p = (unsigned char *)addr; - #else - #error endianess not defined - #endif + WRITE3BYTES(p, c); + }) #endif |