diff options
Diffstat (limited to 'src/mesa/main/texstore.c')
-rw-r--r-- | src/mesa/main/texstore.c | 407 |
1 files changed, 5 insertions, 402 deletions
diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c index 8fa9deb221..9bccb20791 100644 --- a/src/mesa/main/texstore.c +++ b/src/mesa/main/texstore.c @@ -1,4 +1,4 @@ -/* $Id: texstore.c,v 1.12 2001/03/18 08:53:50 gareth Exp $ */ +/* $Id: texstore.c,v 1.13 2001/03/18 13:31:52 gareth Exp $ */ /* * Mesa 3-D graphics library @@ -50,412 +50,14 @@ #include "swrast/s_span.h" -#if 0 -/* - * Default 1-D texture texel fetch function. This will typically be - * overridden by hardware drivers which store their texture images in - * special ways. - */ -static void -fetch_1d_texel(const struct gl_texture_image *img, - GLint i, GLint j, GLint k, GLvoid *texel) -{ - switch (img->Format) { - case GL_RGBA: - { - const GLchan *src = (GLchan *) img->Data + i * 4; - GLchan *rgba = (GLchan *) texel; - COPY_CHAN4(rgba, src); - return; - } - case GL_RGB: - { - const GLchan *src = (GLchan *) img->Data + i * 3; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[1]; - rgba[BCOMP] = src[2]; - rgba[ACOMP] = CHAN_MAX; - return; - } - case GL_ALPHA: - { - const GLchan *src = (GLchan *) img->Data + i; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = 0; - rgba[GCOMP] = 0; - rgba[BCOMP] = 0; - rgba[ACOMP] = src[0]; - return; - } - case GL_LUMINANCE: - { - const GLchan *src = (GLchan *) img->Data + i; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = CHAN_MAX; - return; - } - case GL_INTENSITY: - { - const GLchan *src = (GLchan *) img->Data + i; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = src[0]; - return; - } - case GL_LUMINANCE_ALPHA: - { - const GLchan *src = (GLchan *) img->Data + i * 2; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = src[1]; - return; - } - case GL_COLOR_INDEX: - { - const GLchan *src = (GLchan *) img->Data + i; - GLchan *index = (GLchan *) texel; - *index = *src; - return; - } - case GL_DEPTH_COMPONENT: - { - const GLfloat *src = (GLfloat *) img->Data + i; - GLfloat *depth = (GLfloat *) texel; - *depth = *src; - return; - } - default: - _mesa_problem(NULL, "Bad format in fetch_1d_texel"); - } -} - - -/* - * Default 2-D texture texel fetch function. - */ -static void -fetch_2d_texel(const struct gl_texture_image *img, - GLint i, GLint j, GLint k, GLvoid *texel) -{ - switch (img->Format) { - case GL_RGBA: - { - const GLchan *src = (GLchan *) img->Data + (img->Width * j + i) * 4; - GLchan *rgba = (GLchan *) texel; - COPY_CHAN4(rgba, src); - return; - } - case GL_RGB: - { - const GLchan *src = (GLchan *) img->Data + (img->Width * j + i) * 3; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[1]; - rgba[BCOMP] = src[2]; - rgba[ACOMP] = CHAN_MAX; - return; - } - case GL_ALPHA: - { - const GLchan *src = (GLchan *) img->Data + (img->Width * j + i); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = 0; - rgba[GCOMP] = 0; - rgba[BCOMP] = 0; - rgba[ACOMP] = src[0]; - return; - } - case GL_LUMINANCE: - { - const GLchan *src = (GLchan *) img->Data + (img->Width * j + i); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = CHAN_MAX; - return; - } - case GL_INTENSITY: - { - const GLchan *src = (GLchan *) img->Data + (img->Width * j + i); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = src[0]; - return; - } - case GL_LUMINANCE_ALPHA: - { - const GLchan *src = (GLchan *) img->Data + (img->Width * j + i) * 2; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = src[1]; - return; - } - case GL_COLOR_INDEX: - { - const GLchan *src = (GLchan *) img->Data + (img->Width * j + i); - GLchan *index = (GLchan *) texel; - *index = *src; - return; - } - case GL_DEPTH_COMPONENT: - { - const GLfloat *src = (GLfloat *) img->Data + (img->Width * j + i); - GLfloat *depth = (GLfloat *) texel; - *depth = *src; - return; - } - default: - _mesa_problem(NULL, "Bad format in fetch_2d_texel"); - } -} - - -/* - * Default 2-D texture texel fetch function. - */ -static void -fetch_3d_texel(const struct gl_texture_image *img, - GLint i, GLint j, GLint k, GLvoid *texel) -{ - const GLint width = img->Width; - const GLint rectArea = width * img->Height; - - switch (img->Format) { - case GL_RGBA: - { - const GLchan *src = (GLchan *) img->Data - + (rectArea * k + width * j + i) * 4; - GLchan *rgba = (GLchan *) texel; - COPY_CHAN4(rgba, src); - return; - } - case GL_RGB: - { - const GLchan *src = (GLchan *) img->Data - + (rectArea * k + width * j + i) * 3; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[1]; - rgba[BCOMP] = src[2]; - rgba[ACOMP] = CHAN_MAX; - return; - } - case GL_ALPHA: - { - const GLchan *src = (GLchan *) img->Data - + (rectArea * k + width * j + i); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = 0; - rgba[GCOMP] = 0; - rgba[BCOMP] = 0; - rgba[ACOMP] = src[0]; - return; - } - case GL_LUMINANCE: - { - const GLchan *src = (GLchan *) img->Data - + (rectArea * k + width * j + i); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = CHAN_MAX; - return; - } - case GL_INTENSITY: - { - const GLchan *src = (GLchan *) img->Data - + (rectArea * k + width * j + i); - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = src[0]; - return; - } - case GL_LUMINANCE_ALPHA: - { - const GLchan *src = (GLchan *) img->Data - + (rectArea * k + width * j + i) * 2; - GLchan *rgba = (GLchan *) texel; - rgba[RCOMP] = src[0]; - rgba[GCOMP] = src[0]; - rgba[BCOMP] = src[0]; - rgba[ACOMP] = src[1]; - return; - } - case GL_COLOR_INDEX: - { - const GLchan *src = (GLchan *) img->Data - + (rectArea * k + width * j + i); - GLchan *index = (GLchan *) texel; - *index = *src; - return; - } - case GL_DEPTH_COMPONENT: - { - const GLfloat *src = (GLfloat *) img->Data - + (rectArea * k + width * j + i); - GLfloat *depth = (GLfloat *) texel; - *depth = *src; - return; - } - default: - _mesa_problem(NULL, "Bad format in fetch_3d_texel"); - } -} - - - -/* - * Examine the texImage->Format field and set the Red, Green, Blue, etc - * texel component sizes to default values. - * These fields are set only here by core Mesa but device drivers may - * overwritting these fields to indicate true texel resolution. - */ -static void -set_teximage_component_sizes( struct gl_texture_image *texImage ) -{ - switch (texImage->Format) { - case GL_ALPHA: - texImage->RedBits = 0; - texImage->GreenBits = 0; - texImage->BlueBits = 0; - texImage->AlphaBits = 8 * sizeof(GLchan); - texImage->IntensityBits = 0; - texImage->LuminanceBits = 0; - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_LUMINANCE: - texImage->RedBits = 0; - texImage->GreenBits = 0; - texImage->BlueBits = 0; - texImage->AlphaBits = 0; - texImage->IntensityBits = 0; - texImage->LuminanceBits = 8 * sizeof(GLchan); - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_LUMINANCE_ALPHA: - texImage->RedBits = 0; - texImage->GreenBits = 0; - texImage->BlueBits = 0; - texImage->AlphaBits = 8 * sizeof(GLchan); - texImage->IntensityBits = 0; - texImage->LuminanceBits = 8 * sizeof(GLchan); - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_INTENSITY: - texImage->RedBits = 0; - texImage->GreenBits = 0; - texImage->BlueBits = 0; - texImage->AlphaBits = 0; - texImage->IntensityBits = 8 * sizeof(GLchan); - texImage->LuminanceBits = 0; - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_RED: - texImage->RedBits = 8 * sizeof(GLchan); - texImage->GreenBits = 0; - texImage->BlueBits = 0; - texImage->AlphaBits = 0; - texImage->IntensityBits = 0; - texImage->LuminanceBits = 0; - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_GREEN: - texImage->RedBits = 0; - texImage->GreenBits = 8 * sizeof(GLchan); - texImage->BlueBits = 0; - texImage->AlphaBits = 0; - texImage->IntensityBits = 0; - texImage->LuminanceBits = 0; - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_BLUE: - texImage->RedBits = 0; - texImage->GreenBits = 0; - texImage->BlueBits = 8 * sizeof(GLchan); - texImage->AlphaBits = 0; - texImage->IntensityBits = 0; - texImage->LuminanceBits = 0; - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_RGB: - case GL_BGR: - texImage->RedBits = 8 * sizeof(GLchan); - texImage->GreenBits = 8 * sizeof(GLchan); - texImage->BlueBits = 8 * sizeof(GLchan); - texImage->AlphaBits = 0; - texImage->IntensityBits = 0; - texImage->LuminanceBits = 0; - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_RGBA: - case GL_BGRA: - case GL_ABGR_EXT: - texImage->RedBits = 8 * sizeof(GLchan); - texImage->GreenBits = 8 * sizeof(GLchan); - texImage->BlueBits = 8 * sizeof(GLchan); - texImage->AlphaBits = 8 * sizeof(GLchan); - texImage->IntensityBits = 0; - texImage->LuminanceBits = 0; - texImage->IndexBits = 0; - texImage->DepthBits = 0; - break; - case GL_COLOR_INDEX: - texImage->RedBits = 0; - texImage->GreenBits = 0; - texImage->BlueBits = 0; - texImage->AlphaBits = 0; - texImage->IntensityBits = 0; - texImage->LuminanceBits = 0; - texImage->IndexBits = 8 * sizeof(GLchan); - texImage->DepthBits = 0; - break; - case GL_DEPTH_COMPONENT: - texImage->RedBits = 0; - texImage->GreenBits = 0; - texImage->BlueBits = 0; - texImage->AlphaBits = 0; - texImage->IntensityBits = 0; - texImage->LuminanceBits = 0; - texImage->IndexBits = 0; - texImage->DepthBits = 8 * sizeof(GLfloat); - break; - default: - _mesa_problem(NULL, "unexpected format in set_teximage_component_sizes"); - } -} -#endif - - - /* * Given an internal texture format enum or 1, 2, 3, 4 return the * corresponding _base_ internal format: GL_ALPHA, GL_LUMINANCE, * GL_LUMANCE_ALPHA, GL_INTENSITY, GL_RGB, or GL_RGBA. Return the * number of components for the format. Return -1 if invalid enum. + * + * GH: Do we really need this? We have the number of bytes per texel + * in the texture format structures, so why don't we just use that? */ static GLint components_in_intformat( GLint format ) @@ -526,6 +128,7 @@ components_in_intformat( GLint format ) return -1; /* error */ } } +#endif /* |