-/* $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
#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 )
return -1; /* error */
}
}
+#endif
/*