summaryrefslogtreecommitdiff
path: root/src/mesa/swrast/s_texture.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/swrast/s_texture.c')
-rw-r--r--src/mesa/swrast/s_texture.c45
1 files changed, 21 insertions, 24 deletions
diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c
index 617c04ca68..060c8e136d 100644
--- a/src/mesa/swrast/s_texture.c
+++ b/src/mesa/swrast/s_texture.c
@@ -1,4 +1,4 @@
-/* $Id: s_texture.c,v 1.58 2002/04/04 16:56:24 brianp Exp $ */
+/* $Id: s_texture.c,v 1.59 2002/04/12 15:39:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -3329,26 +3329,30 @@ apply_texture( const GLcontext *ctx,
* Apply a unit of texture mapping to the incoming fragments.
*/
void
-_swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, GLuint n,
- GLfloat texcoords[][4], GLfloat lambda[],
- CONST GLchan primary_rgba[][4],
- GLchan rgba[][4] )
+_swrast_texture_fragments( GLcontext *ctx, GLuint texUnit,
+ struct sw_span *span,
+ CONST GLchan primary_rgba[][4])
{
const GLuint mask = TEXTURE0_ANY << (texUnit * 4);
+ GLfloat (*texcoords)[4] = span->texcoords[texUnit];
+ GLfloat *lambda = span->lambda[texUnit];
+
if (ctx->Texture._ReallyEnabled & mask) {
const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit];
+
+ ASSERT(span->arrayMask & SPAN_TEXTURE);
if (textureUnit->_Current) { /* XXX need this? */
const struct gl_texture_object *curObj = textureUnit->_Current;
GLchan texel[MAX_WIDTH][4];
- if (lambda) {
+ if (span->arrayMask | SPAN_LAMBDA) {
#if 0
float min, max;
int i;
min = max = lambda[0];
- for (i = 1; i < n; i++) {
+ for (i = 1; i < span->end; i++) {
if (lambda[i] > max)
max = lambda[i];
if (lambda[i] < min)
@@ -3359,7 +3363,7 @@ _swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, GLuint n,
if (textureUnit->LodBias != 0.0F) {
/* apply LOD bias, but don't clamp yet */
GLuint i;
- for (i=0;i<n;i++) {
+ for (i=0;i<span->end;i++) {
lambda[i] += textureUnit->LodBias;
}
}
@@ -3369,7 +3373,7 @@ _swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, GLuint n,
const GLfloat min = curObj->MinLod;
const GLfloat max = curObj->MaxLod;
GLuint i;
- for (i=0;i<n;i++) {
+ for (i=0;i<span->end;i++) {
GLfloat l = lambda[i];
lambda[i] = CLAMP(l, min, max);
}
@@ -3379,11 +3383,11 @@ _swrast_texture_fragments( GLcontext *ctx, GLuint texUnit, GLuint n,
/* Sample the texture for n fragments */
SWRAST_CONTEXT(ctx)->TextureSample[texUnit]( ctx, texUnit,
textureUnit->_Current,
- n, texcoords,
+ span->end, texcoords,
lambda, texel );
- apply_texture( ctx, textureUnit, n, primary_rgba,
- (const GLchan (*)[4]) texel, rgba );
+ apply_texture( ctx, textureUnit, span->end, primary_rgba,
+ (const GLchan (*)[4]) texel, span->color.rgba );
}
}
}
@@ -3405,6 +3409,7 @@ _swrast_multitexture_fragments( GLcontext *ctx, struct sw_span *span )
GLuint unit;
ASSERT(span->end < MAX_WIDTH);
+ ASSERT(span->arrayMask & SPAN_TEXTURE);
/* save copy of the span colors (the GL_PRIMARY_COLOR) */
MEMCPY(primary_rgba, span->color.rgba, 4 * span->end * sizeof(GLchan));
@@ -3412,12 +3417,8 @@ _swrast_multitexture_fragments( GLcontext *ctx, struct sw_span *span )
/* loop over texture units, modifying the span->color.rgba values */
for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
if (ctx->Texture.Unit[unit]._ReallyEnabled) {
- _swrast_texture_fragments( ctx, unit, span->end,
- span->texcoords[unit],
- (span->arrayMask & SPAN_LAMBDA) ?
- span->lambda[unit] : NULL,
- (CONST GLchan (*)[4]) primary_rgba,
- span->color.rgba );
+ _swrast_texture_fragments( ctx, unit, span,
+ (CONST GLchan (*)[4]) primary_rgba);
}
}
}
@@ -3425,11 +3426,7 @@ _swrast_multitexture_fragments( GLcontext *ctx, struct sw_span *span )
/* Just unit 0 enabled */
ASSERT(ctx->Texture._ReallyEnabled & TEXTURE0_ANY);
- _swrast_texture_fragments( ctx, 0, span->end,
- span->texcoords[0],
- (span->arrayMask & SPAN_LAMBDA) ?
- span->lambda[0] : NULL,
- (CONST GLchan (*)[4]) span->color.rgba,
- span->color.rgba );
+ _swrast_texture_fragments( ctx, 0, span,
+ (CONST GLchan (*)[4]) span->color.rgba);
}
}