diff options
author | Brian Paul <[email protected]> | 2004-01-23 01:59:54 +0000 |
---|---|---|
committer | Brian Paul <[email protected]> | 2004-01-23 01:59:54 +0000 |
commit | 4f295cee73bae1f687efe2dc062522b40d90b1e4 (patch) | |
tree | 82efe0da331881d5b63bf6805985e909369b58bf /src/mesa/main/texformat_tmp.h | |
parent | edd1d86c740811e59272e2ba0f7ebe0caf9cf57c (diff) |
Initial support for floating point and signed texture formats.
New "FetchTexelFuncF()" function returns texels in floating point format.
Only used for depth component images at this time.
Changed original FetchTexelFunc to return GLchan instead of GLvoid, removing
need for a bunch of ugly casts.
Diffstat (limited to 'src/mesa/main/texformat_tmp.h')
-rw-r--r-- | src/mesa/main/texformat_tmp.h | 732 |
1 files changed, 546 insertions, 186 deletions
diff --git a/src/mesa/main/texformat_tmp.h b/src/mesa/main/texformat_tmp.h index 14eb0463abf..061f11daca3 100644 --- a/src/mesa/main/texformat_tmp.h +++ b/src/mesa/main/texformat_tmp.h @@ -17,9 +17,9 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.1 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -51,7 +51,7 @@ #define FLOAT_SRC( t, i, j, k ) \ ((GLfloat *)(t)->Data + (i)) -#define FETCH(x) fetch_1d_texel_##x +#define FETCH(x) fetch_texel_1d_##x #elif DIM == 2 @@ -64,7 +64,7 @@ #define FLOAT_SRC( t, i, j, k ) \ ((GLfloat *)(t)->Data + ((t)->RowStride * (j) + (i))) -#define FETCH(x) fetch_2d_texel_##x +#define FETCH(x) fetch_texel_2d_##x #elif DIM == 3 @@ -81,228 +81,477 @@ ((GLfloat *)(t)->Data + (((t)->Height * (k) + (j)) * \ (t)->RowStride + (i))) -#define FETCH(x) fetch_3d_texel_##x +#define FETCH(x) fetch_texel_3d_##x #else #error illegal number of texture dimensions #endif +/* Fetch color texel from 1D, 2D or 3D RGBA texture, returning 4 GLchans */ static void FETCH(rgba)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; - COPY_CHAN4( rgba, src ); + COPY_CHAN4( texel, src ); } +/* Fetch color texel from 1D, 2D or 3D RGBA texture, returning 4 GLfloats */ +static void FETCH(f_rgba)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = CHAN_TO_FLOAT(src[3]); +} + + +/* Fetch color texel from 1D, 2D or 3D RGB texture, returning 4 GLchans */ static void FETCH(rgb)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 3 ); + texel[RCOMP] = src[0]; + texel[GCOMP] = src[1]; + texel[BCOMP] = src[2]; + texel[ACOMP] = CHAN_MAX; +} + +/* Fetch color texel from 1D, 2D or 3D RGB texture, returning 4 GLfloats */ +static void FETCH(f_rgb)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 3 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[1]; - rgba[BCOMP] = src[2]; - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = CHAN_MAXF; } +/* Fetch color texel from 1D, 2D or 3D ALPHA texture, returning 4 GLchans */ static void FETCH(alpha)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = 0; + texel[ACOMP] = src[0]; +} + +/* Fetch color texel from 1D, 2D or 3D ALPHA texture, returning 4 GLfloats */ +static void FETCH(f_alpha)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = 0; - rgba[GCOMP] = 0; - rgba[BCOMP] = 0; - rgba[ACOMP] = src[0]; + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = 0.0; + texel[ACOMP] = CHAN_TO_FLOAT(src[0]); } +/* Fetch color texel from 1D, 2D or 3D LUMIN texture, returning 4 GLchans */ static void FETCH(luminance)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = src[0]; + texel[ACOMP] = CHAN_MAX; +} + +/* Fetch color texel from 1D, 2D or 3D LUMIN texture, returning 4 GLchans */ +static void FETCH(f_luminance)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = CHAN_TO_FLOAT(src[0]); + texel[ACOMP] = CHAN_MAXF; } +/* Fetch color texel from 1D, 2D or 3D L_A texture, returning 4 GLchans */ static void FETCH(luminance_alpha)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 2 ); + texel[RCOMP] = src[0]; + texel[GCOMP] = src[0]; + texel[BCOMP] = src[0]; + texel[ACOMP] = src[1]; +} + +/* Fetch color texel from 1D, 2D or 3D L_A texture, returning 4 GLfloats */ +static void FETCH(f_luminance_alpha)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 2 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = src[1]; + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = CHAN_TO_FLOAT(src[0]); + texel[ACOMP] = CHAN_TO_FLOAT(src[1]); } + +/* Fetch color texel from 1D, 2D or 3D INT. texture, returning 4 GLchans */ static void FETCH(intensity)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = src[0]; + texel[RCOMP] = src[0]; + texel[GCOMP] = src[0]; + texel[BCOMP] = src[0]; + texel[ACOMP] = src[0]; } +/* Fetch color texel from 1D, 2D or 3D INT. texture, returning 4 GLfloats */ +static void FETCH(f_intensity)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = + texel[ACOMP] = CHAN_TO_FLOAT(src[0]); +} + + +/* Fetch CI texel from 1D, 2D or 3D CI texture, returning 1 GLchan */ static void FETCH(color_index)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); GLchan *index = (GLchan *) texel; - *index = *src; + index[0] = src[0]; +} + +/* Fetch CI texel from 1D, 2D or 3D CI texture, returning 1 GLfloat */ +static void FETCH(f_color_index)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 ); + texel[0] = (GLfloat) src[0]; } + +#if 000 +/* Fetch depth texel from 1D, 2D or 3D DEPTH texture, returning 1 GLfloat */ static void FETCH(depth_component)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { +#if 0 const GLfloat *src = FLOAT_SRC( texImage, i, j, k ); GLfloat *depth = (GLfloat *) texel; - *depth = *src; + depth[0] = src[0]; +#else + _mesa_problem(NULL, "fetching depth component as non-float!"); +#endif } +#endif + +/* Fetch depth texel from 1D, 2D or 3D DEPTH texture, returning 1 GLfloat */ +static void FETCH(f_depth_component)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLfloat *src = FLOAT_SRC( texImage, i, j, k ); + texel[0] = src[0]; +} + + +/* Fetch color texel from 1D, 2D or 3D rgba8888 texture, return 4 GLchans */ static void FETCH(rgba8888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[3] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[2] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[1] ); - rgba[ACOMP] = UBYTE_TO_CHAN( src[0] ); + texel[RCOMP] = UBYTE_TO_CHAN( src[3] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[2] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[1] ); + texel[ACOMP] = UBYTE_TO_CHAN( src[0] ); } +/* Fetch color texel from 1D, 2D or 3D rgba8888 texture, return 4 GLfloats */ +static void FETCH(f_rgba8888)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = UBYTE_TO_FLOAT( src[3] ); + texel[GCOMP] = UBYTE_TO_FLOAT( src[2] ); + texel[BCOMP] = UBYTE_TO_FLOAT( src[1] ); + texel[ACOMP] = UBYTE_TO_FLOAT( src[0] ); +} + + +/* Fetch color texel from 1D, 2D or 3D argb8888 texture, return 4 GLchans */ static void FETCH(argb8888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[2] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[1] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[ACOMP] = UBYTE_TO_CHAN( src[3] ); + texel[RCOMP] = UBYTE_TO_CHAN( src[2] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[1] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[ACOMP] = UBYTE_TO_CHAN( src[3] ); } +/* Fetch color texel from 1D, 2D or 3D argb8888 texture, return 4 GLfloats */ +static void FETCH(f_argb8888)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = UBYTE_TO_FLOAT( src[2] ); + texel[GCOMP] = UBYTE_TO_FLOAT( src[1] ); + texel[BCOMP] = UBYTE_TO_FLOAT( src[0] ); + texel[ACOMP] = UBYTE_TO_FLOAT( src[3] ); +} + + +/* Fetch color texel from 1D, 2D or 3D rgb888 texture, return 4 GLchans */ static void FETCH(rgb888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 ); + texel[RCOMP] = UBYTE_TO_CHAN( src[2] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[1] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[ACOMP] = CHAN_MAX; +} + +/* Fetch color texel from 1D, 2D or 3D rgb888 texture, return 4 GLfloats */ +static void FETCH(f_rgb888)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[2] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[1] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = UBYTE_TO_FLOAT( src[2] ); + texel[GCOMP] = UBYTE_TO_FLOAT( src[1] ); + texel[BCOMP] = UBYTE_TO_FLOAT( src[0] ); + texel[ACOMP] = CHAN_MAXF; } + +/* Fetch color texel from 1D, 2D or 3D rgb565 texture, return 4 GLchans */ static void FETCH(rgb565)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort s = *src; + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = CHAN_MAX; +} + +/* Fetch color texel from 1D, 2D or 3D rgb565 texture, return 4 GLfloats */ +static void FETCH(f_rgb565)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); const GLushort s = *src; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 ); - rgba[ACOMP] = CHAN_MAX; + /* xxx fixup */ + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 3) & 0xfc) * 255 / 0xfc ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s << 3) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = CHAN_MAXF; } + +/* Fetch color texel from 1D, 2D or 3D rgb565 texture, return 4 GLchans */ static void FETCH(argb4444)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort s = *src; + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf ); +} + +/* Fetch color texel from 1D, 2D or 3D rgb565 texture, return 4 GLfloats */ +static void FETCH(f_argb4444)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); const GLushort s = *src; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) * 255 / 0xf ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) * 255 / 0xf ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) * 255 / 0xf ); - rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf ); + /* xxx fixup */ + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = UBYTE_TO_FLOAT( ((s >> 12) & 0xf) * 255 / 0xf ); } + +/* Fetch color texel from 1D, 2D or 3D argb1555 texture, return 4 GLchans */ static void FETCH(argb1555)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); const GLushort s = *src; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0x1f) * 255 / 0x1f ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 5) & 0x1f) * 255 / 0x1f ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0x1f) * 255 / 0x1f ); - rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 ); + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0x1f) * 255 / 0x1f ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 5) & 0x1f) * 255 / 0x1f ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0x1f) * 255 / 0x1f ); + texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 ); } +/* Fetch color texel from 1D, 2D or 3D argb1555 texture, return 4 GLfloats */ +static void FETCH(f_argb1555)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + const GLushort s = *src; + /* xxx better */ + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0x1f) * 255 / 0x1f ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0x1f) * 255 / 0x1f ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0x1f) * 255 / 0x1f ); + texel[ACOMP] = UBYTE_TO_FLOAT( ((s >> 15) & 0x01) * 255 ); +} + + +/* Fetch color texel from 1D, 2D or 3D al88 texture, return 4 GLchans */ static void FETCH(al88)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 2 ); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[ACOMP] = UBYTE_TO_CHAN( src[1] ); +} + +/* Fetch color texel from 1D, 2D or 3D al88 texture, return 4 GLfloats */ +static void FETCH(f_al88)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 2 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[ACOMP] = UBYTE_TO_CHAN( src[1] ); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = UBYTE_TO_FLOAT( src[0] ); + texel[ACOMP] = UBYTE_TO_FLOAT( src[1] ); } + +/* Fetch color texel from 1D, 2D or 3D rgb332 texture, return 4 GLchans */ static void FETCH(rgb332)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); const GLubyte s = *src; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xe0) * 255 / 0xe0 ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xe0) * 255 / 0xe0 ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 5) & 0xc0) * 255 / 0xc0 ); - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xe0) * 255 / 0xe0 ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xe0) * 255 / 0xe0 ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s << 5) & 0xc0) * 255 / 0xc0 ); + texel[ACOMP] = CHAN_MAX; } +/* Fetch color texel from 1D, 2D or 3D rgb332 texture, return 4 GLfloats */ +static void FETCH(f_rgb332)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + const GLubyte s = *src; + /* xxx improve */ + texel[RCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xe0) * 255 / 0xe0 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s << 3) & 0xe0) * 255 / 0xe0 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s << 5) & 0xc0) * 255 / 0xc0 ); + texel[ACOMP] = CHAN_MAXF; +} + + +/* Fetch color texel from 1D, 2D or 3D a8 texture, return 4 GLchans */ static void FETCH(a8)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = 0; - rgba[GCOMP] = 0; - rgba[BCOMP] = 0; - rgba[ACOMP] = UBYTE_TO_CHAN( src[0] ); + texel[RCOMP] = 0; + texel[GCOMP] = 0; + texel[BCOMP] = 0; + texel[ACOMP] = UBYTE_TO_CHAN( src[0] ); } +/* Fetch color texel from 1D, 2D or 3D a8 texture, return 4 GLfloats */ +static void FETCH(f_a8)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = 0.0; + texel[ACOMP] = UBYTE_TO_FLOAT( src[0] ); +} + + +/* Fetch color texel from 1D, 2D or 3D l8 texture, return 4 GLchans */ static void FETCH(l8)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[ACOMP] = CHAN_MAX; } +/* Fetch color texel from 1D, 2D or 3D l8 texture, return 4 GLfloats */ +static void FETCH(f_l8)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = UBYTE_TO_FLOAT( src[0] ); + texel[ACOMP] = CHAN_MAXF; +} + + +/* Fetch color texel from 1D, 2D or 3D i8 texture, return 4 GLchans */ static void FETCH(i8)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + texel[RCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[ACOMP] = UBYTE_TO_CHAN( src[0] ); +} + +/* Fetch color texel from 1D, 2D or 3D i8 texture, return 4 GLfloats */ +static void FETCH(f_i8)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[ACOMP] = UBYTE_TO_CHAN( src[0] ); + texel[RCOMP] = + texel[GCOMP] = + texel[BCOMP] = + texel[ACOMP] = UBYTE_TO_FLOAT( src[0] ); } + +/* Fetch color texel from 1D, 2D or 3D ci8 texture, return 1 GLchan */ static void FETCH(ci8)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); GLchan *index = (GLchan *) texel; *index = UBYTE_TO_CHAN( *src ); } + +/* Fetch color texel from 1D, 2D or 3D ci8 texture, return 1 GLfloat */ +static void FETCH(f_ci8)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); + texel[0] = UBYTE_TO_FLOAT( *src ); +} + + +/* Fetch color texel from 1D, 2D or 3D ycbcr texture, return 4 GLchans */ +/* We convert YCbCr to RGB here */ /* XXX this may break if GLchan != GLubyte */ static void FETCH(ycbcr)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src0 = USHORT_SRC( texImage, (i & ~1), j, k ); /* even */ const GLushort *src1 = src0 + 1; /* odd */ @@ -310,7 +559,6 @@ static void FETCH(ycbcr)( const struct gl_texture_image *texImage, const GLubyte cb = *src0 & 0xff; /* chroma U */ const GLubyte y1 = (*src1 >> 8) & 0xff; /* luminance */ const GLubyte cr = *src1 & 0xff; /* chroma V */ - GLchan *rgba = (GLchan *) texel; GLint r, g, b; if (i & 1) { /* odd pixel: use y1,cr,cb */ @@ -324,15 +572,53 @@ static void FETCH(ycbcr)( const struct gl_texture_image *texImage, g = (GLint) (1.164 * (y0-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); b = (GLint) (1.164 * (y0-16) + 2.018 * (cb-128)); } - rgba[RCOMP] = CLAMP(r, 0, CHAN_MAX); - rgba[GCOMP] = CLAMP(g, 0, CHAN_MAX); - rgba[BCOMP] = CLAMP(b, 0, CHAN_MAX); - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = CLAMP(r, 0, CHAN_MAX); + texel[GCOMP] = CLAMP(g, 0, CHAN_MAX); + texel[BCOMP] = CLAMP(b, 0, CHAN_MAX); + texel[ACOMP] = CHAN_MAX; } +/* Fetch color texel from 1D, 2D or 3D ycbcr texture, return 4 GLfloats */ +/* We convert YCbCr to RGB here */ +static void FETCH(f_ycbcr)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src0 = USHORT_SRC( texImage, (i & ~1), j, k ); /* even */ + const GLushort *src1 = src0 + 1; /* odd */ + const GLubyte y0 = (*src0 >> 8) & 0xff; /* luminance */ + const GLubyte cb = *src0 & 0xff; /* chroma U */ + const GLubyte y1 = (*src1 >> 8) & 0xff; /* luminance */ + const GLubyte cr = *src1 & 0xff; /* chroma V */ + GLfloat r, g, b; + if (i & 1) { + /* odd pixel: use y1,cr,cb */ + r = (1.164 * (y1-16) + 1.596 * (cr-128)); + g = (1.164 * (y1-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); + b = (1.164 * (y1-16) + 2.018 * (cb-128)); + } + else { + /* even pixel: use y0,cr,cb */ + r = (1.164 * (y0-16) + 1.596 * (cr-128)); + g = (1.164 * (y0-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); + b = (1.164 * (y0-16) + 2.018 * (cb-128)); + } + /* XXX remove / 255 here by tweaking arithmetic above */ + r /= 255.0; + g /= 255.0; + b /= 255.0; + /* XXX should we really clamp??? */ + texel[RCOMP] = CLAMP(r, 0.0, 1.0); + texel[GCOMP] = CLAMP(g, 0.0, 1.0); + texel[BCOMP] = CLAMP(b, 0.0, 1.0); + texel[ACOMP] = CHAN_MAXF; +} + + +/* Fetch color texel from 1D, 2D or 3D ycbcr_rev texture, return 4 GLchans */ +/* We convert YCbCr to RGB here */ /* XXX this may break if GLchan != GLubyte */ static void FETCH(ycbcr_rev)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src0 = USHORT_SRC( texImage, (i & ~1), j, k ); /* even */ const GLushort *src1 = src0 + 1; /* odd */ @@ -340,7 +626,6 @@ static void FETCH(ycbcr_rev)( const struct gl_texture_image *texImage, const GLubyte cr = (*src0 >> 8) & 0xff; /* chroma V */ const GLubyte y1 = *src1 & 0xff; /* luminance */ const GLubyte cb = (*src1 >> 8) & 0xff; /* chroma U */ - GLchan *rgba = (GLchan *) texel; GLint r, g, b; if (i & 1) { /* odd pixel: use y1,cr,cb */ @@ -354,72 +639,155 @@ static void FETCH(ycbcr_rev)( const struct gl_texture_image *texImage, g = (GLint) (1.164 * (y0-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); b = (GLint) (1.164 * (y0-16) + 2.018 * (cb-128)); } - rgba[RCOMP] = CLAMP(r, 0, CHAN_MAX); - rgba[GCOMP] = CLAMP(g, 0, CHAN_MAX); - rgba[BCOMP] = CLAMP(b, 0, CHAN_MAX); - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = CLAMP(r, 0, CHAN_MAX); + texel[GCOMP] = CLAMP(g, 0, CHAN_MAX); + texel[BCOMP] = CLAMP(b, 0, CHAN_MAX); + texel[ACOMP] = CHAN_MAX; +} + +/* Fetch color texel from 1D, 2D or 3D ycbcr_rev texture, return 4 GLfloats */ +/* We convert YCbCr to RGB here */ +/* XXX this may break if GLchan != GLubyte */ +static void FETCH(f_ycbcr_rev)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src0 = USHORT_SRC( texImage, (i & ~1), j, k ); /* even */ + const GLushort *src1 = src0 + 1; /* odd */ + const GLubyte y0 = *src0 & 0xff; /* luminance */ + const GLubyte cr = (*src0 >> 8) & 0xff; /* chroma V */ + const GLubyte y1 = *src1 & 0xff; /* luminance */ + const GLubyte cb = (*src1 >> 8) & 0xff; /* chroma U */ + GLfloat r, g, b; + if (i & 1) { + /* odd pixel: use y1,cr,cb */ + r = (1.164 * (y1-16) + 1.596 * (cr-128)); + g = (1.164 * (y1-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); + b = (1.164 * (y1-16) + 2.018 * (cb-128)); + } + else { + /* even pixel: use y0,cr,cb */ + r = (1.164 * (y0-16) + 1.596 * (cr-128)); + g = (1.164 * (y0-16) - 0.813 * (cr-128) - 0.391 * (cb-128)); + b = (1.164 * (y0-16) + 2.018 * (cb-128)); + } + /* XXX remove / 255 here by tweaking arithmetic above */ + r /= 255.0; + g /= 255.0; + b /= 255.0; + /* XXX should we really clamp??? */ + texel[RCOMP] = CLAMP(r, 0.0, 1.0); + texel[GCOMP] = CLAMP(g, 0.0, 1.0); + texel[BCOMP] = CLAMP(b, 0.0, 1.0); + texel[ACOMP] = CHAN_MAXF; } -#if DIM == 2 +#if DIM == 2 /* Only 2D compressed textures possible */ + static void FETCH(rgb_fxt1)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) +{ + /* Extract the (i,j) pixel from texImage->Data and return it + * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. + */ +} + +static void FETCH(f_rgb_fxt1)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) { /* Extract the (i,j) pixel from texImage->Data and return it * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. */ } -#endif -#if DIM == 2 static void FETCH(rgba_fxt1)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { /* Extract the (i,j) pixel from texImage->Data and return it * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. */ } -#endif +static void FETCH(f_rgba_fxt1)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + /* Extract the (i,j) pixel from texImage->Data and return it + * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. + */ +} + +#endif /* if DIM == 2 */ + + +#if DIM == 2 /* only 2D is valid */ -#if DIM == 2 static void FETCH(rgb_dxt1)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { /* Extract the (i,j) pixel from texImage->Data and return it * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. */ } -#endif -#if DIM == 2 +static void FETCH(f_rgb_dxt1)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + /* Extract the (i,j) pixel from texImage->Data and return it + * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. + */ +} + + static void FETCH(rgba_dxt1)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { /* Extract the (i,j) pixel from texImage->Data and return it * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. */ } -#endif -#if DIM == 2 +static void FETCH(f_rgba_dxt1)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + /* Extract the (i,j) pixel from texImage->Data and return it + * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. + */ +} + + static void FETCH(rgba_dxt3)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { /* Extract the (i,j) pixel from texImage->Data and return it * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. */ } -#endif -#if DIM == 2 +static void FETCH(f_rgba_dxt3)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + /* Extract the (i,j) pixel from texImage->Data and return it + * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. + */ +} + + static void FETCH(rgba_dxt5)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { /* Extract the (i,j) pixel from texImage->Data and return it * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. */ } + +static void FETCH(f_rgba_dxt5)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + /* Extract the (i,j) pixel from texImage->Data and return it + * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. + */ +} + #endif @@ -428,95 +796,87 @@ static void FETCH(rgba_dxt5)( const struct gl_texture_image *texImage, #if 0 static void FETCH(abgr8888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[3] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[2] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[1] ); - rgba[ACOMP] = UBYTE_TO_CHAN( src[0] ); + texel[RCOMP] = UBYTE_TO_CHAN( src[3] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[2] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[1] ); + texel[ACOMP] = UBYTE_TO_CHAN( src[0] ); } static void FETCH(bgra8888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[2] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[1] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[ACOMP] = UBYTE_TO_CHAN( src[3] ); + texel[RCOMP] = UBYTE_TO_CHAN( src[2] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[1] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[ACOMP] = UBYTE_TO_CHAN( src[3] ); } static void FETCH(bgr888)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[2] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[1] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = UBYTE_TO_CHAN( src[2] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[1] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[ACOMP] = CHAN_MAX; } static void FETCH(bgr565)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); const GLushort s = *src; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 ); - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = CHAN_MAX; } static void FETCH(bgra4444)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); const GLushort s = *src; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) * 255 / 0xf ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) * 255 / 0xf ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) * 255 / 0xf ); - rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf ); + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf ); } static void FETCH(bgra5551)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); const GLushort s = *src; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0x1f) * 255 / 0x1f ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 5) & 0x1f) * 255 / 0x1f ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0x1f) * 255 / 0x1f ); - rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 ); + texel[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0x1f) * 255 / 0x1f ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s >> 5) & 0x1f) * 255 / 0x1f ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0x1f) * 255 / 0x1f ); + texel[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 ); } static void FETCH(la88)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 2 ); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[GCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[BCOMP] = UBYTE_TO_CHAN( src[0] ); - rgba[ACOMP] = UBYTE_TO_CHAN( src[1] ); + texel[RCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[GCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[BCOMP] = UBYTE_TO_CHAN( src[0] ); + texel[ACOMP] = UBYTE_TO_CHAN( src[1] ); } static void FETCH(bgr233)( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 ); const GLubyte s = *src; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xe0) * 255 / 0xe0 ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xe0) * 255 / 0xe0 ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 5) & 0xc0) * 255 / 0xc0 ); - rgba[ACOMP] = CHAN_MAX; + texel[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xe0) * 255 / 0xe0 ); + texel[GCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xe0) * 255 / 0xe0 ); + texel[BCOMP] = UBYTE_TO_CHAN( ((s << 5) & 0xc0) * 255 / 0xc0 ); + texel[ACOMP] = CHAN_MAX; } #endif |