summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/varray.c
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2000-10-18 15:02:59 +0000
committerBrian Paul <[email protected]>2000-10-18 15:02:59 +0000
commitce938b307e5dcd06a03baf60903c2ecd682cd8d5 (patch)
tree435edda496e82f84fab7d0b0784db4336b940983 /src/mesa/main/varray.c
parentd3672166787028857ea51ad9570cab7e173898c3 (diff)
More fixes for MAX_TEXTURE_UNITS > 2. Seems to work now.
Misc code clean-ups, minor bug fixes. MAX_TEXTURE_UNITS now defaults to 3.
Diffstat (limited to 'src/mesa/main/varray.c')
-rw-r--r--src/mesa/main/varray.c94
1 files changed, 53 insertions, 41 deletions
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index d6889bb9966..62e5019dc92 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -1,8 +1,8 @@
-/* $Id: varray.c,v 1.23 2000/09/11 18:49:06 brianp Exp $ */
+/* $Id: varray.c,v 1.24 2000/10/18 15:02:59 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.3
+ * Version: 3.5
*
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
*
@@ -488,6 +488,13 @@ void gl_exec_array_elements( GLcontext *ctx, struct immediate *IM,
flags, elts, (VERT_ELT|VERT_TEX1_ANY),
start, count);
+#if MAX_TEXTURE_UNITS > 2
+ if (translate & VERT_TEX2_ANY)
+ (ctx->Array.TexCoordEltFunc[1])( IM->TexCoord[2],
+ &ctx->Array.TexCoord[2],
+ flags, elts, (VERT_ELT|VERT_TEX2_ANY),
+ start, count);
+#endif
for (i = start ; i < count ; i++)
if (flags[i] & VERT_ELT)
@@ -544,8 +551,7 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
return;
}
- if (!ctx->CompileFlag && ctx->Array.Vertex.Enabled)
- {
+ if (!ctx->CompileFlag && ctx->Array.Vertex.Enabled) {
GLint remaining = count;
GLint i;
struct gl_client_array *Normal;
@@ -582,8 +588,7 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
*/
IM->v.Obj.size = ctx->Array.Vertex.Size;
- if (required & VERT_RGBA)
- {
+ if (required & VERT_RGBA) {
Color = &ctx->Array.Color;
if (fallback & VERT_RGBA) {
Color = &ctx->Fallback.Color;
@@ -592,8 +597,7 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
}
}
- if (required & VERT_INDEX)
- {
+ if (required & VERT_INDEX) {
Index = &ctx->Array.Index;
if (fallback & VERT_INDEX) {
Index = &ctx->Fallback.Index;
@@ -601,15 +605,13 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
}
}
- for (i = 0 ; i < MAX_TEXTURE_UNITS ; i++)
- {
+ for (i = 0 ; i < MAX_TEXTURE_UNITS ; i++) {
GLuint flag = VERT_TEX_ANY(i);
if (required & flag) {
TexCoord[i] = &ctx->Array.TexCoord[i];
- if (fallback & flag)
- {
+ if (fallback & flag) {
TexCoord[i] = &ctx->Fallback.TexCoord[i];
TexCoord[i]->Size = gl_texcoord_size( ctx->Current.Flag, i );
@@ -619,13 +621,12 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
}
}
- if (ctx->Array.Flags != ctx->Array.Flag[0])
+ if (ctx->Array.Flags != ctx->Array.Flag[0]) {
for (i = 0 ; i < VB_MAX ; i++)
ctx->Array.Flag[i] = ctx->Array.Flags;
+ }
-
- if (required & VERT_NORM)
- {
+ if (required & VERT_NORM) {
Normal = &ctx->Array.Normal;
if (fallback & VERT_NORM) {
Normal = &ctx->Fallback.Normal;
@@ -633,12 +634,10 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
}
}
- if ( required & VERT_EDGE )
- {
+ if ( required & VERT_EDGE ) {
if (mode == GL_TRIANGLES ||
mode == GL_QUADS ||
- mode == GL_POLYGON)
- {
+ mode == GL_POLYGON) {
EdgeFlag = &ctx->Array.EdgeFlag;
if (fallback & VERT_EDGE) {
EdgeFlag = &ctx->Fallback.EdgeFlag;
@@ -663,7 +662,8 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
if (vbspace >= remaining) {
n = remaining;
VB->LastPrimitive = VB_START + n;
- } else {
+ }
+ else {
n = vbspace;
VB->LastPrimitive = VB_START;
}
@@ -704,6 +704,13 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
ctx->Array.TexCoordFunc[1]( IM->TexCoord[1] + VB_START,
TexCoord[1], start, n );
}
+#if MAX_TEXTURE_UNITS > 2
+ if (required & VERT_TEX2_ANY) {
+ IM->v.TexCoord[2].size = TexCoord[2]->Size;
+ ctx->Array.TexCoordFunc[2]( IM->TexCoord[2] + VB_START,
+ TexCoord[2], start, n );
+ }
+#endif
VB->ObjPtr = &IM->v.Obj;
VB->NormalPtr = &IM->v.Normal;
@@ -711,8 +718,9 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
VB->Color[0] = VB->Color[1] = VB->ColorPtr;
VB->IndexPtr = &IM->v.Index;
VB->EdgeFlagPtr = &IM->v.EdgeFlag;
- VB->TexCoordPtr[0] = &IM->v.TexCoord[0];
- VB->TexCoordPtr[1] = &IM->v.TexCoord[1];
+ for (i = 0; i < MAX_TEXTURE_UNITS; i++) {
+ VB->TexCoordPtr[i] = &IM->v.TexCoord[i];
+ }
VB->Flag = ctx->Array.Flag;
VB->OrFlag = ctx->Array.Flags;
@@ -724,8 +732,9 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
RESET_VEC(IM->v.Obj, (GLfloat *), VB_START, count);
RESET_VEC(IM->v.Normal, (GLfloat *), VB_START, count);
- RESET_VEC(IM->v.TexCoord[0], (GLfloat *), VB_START, count);
- RESET_VEC(IM->v.TexCoord[1], (GLfloat *), VB_START, count);
+ for (i = 0; i < MAX_TEXTURE_UNITS; i++) {
+ RESET_VEC(IM->v.TexCoord[i], (GLfloat *), VB_START, count);
+ }
RESET_VEC(IM->v.Index, &, VB_START, count);
RESET_VEC(IM->v.Elt, &, VB_START, count);
RESET_VEC(IM->v.EdgeFlag, &, VB_START, count);
@@ -1203,17 +1212,21 @@ _mesa_DrawRangeElements(GLenum mode, GLuint start,
void gl_update_client_state( GLcontext *ctx )
{
- static GLuint sz_flags[5] = { 0,
- 0,
- VERT_OBJ_2,
- VERT_OBJ_23,
- VERT_OBJ_234 };
-
- static GLuint tc_flags[5] = { 0,
- VERT_TEX0_1,
- VERT_TEX0_12,
- VERT_TEX0_123,
- VERT_TEX0_1234 };
+ static const GLuint sz_flags[5] = {
+ 0,
+ 0,
+ VERT_OBJ_2,
+ VERT_OBJ_23,
+ VERT_OBJ_234
+ };
+ static const GLuint tc_flags[5] = {
+ 0,
+ VERT_TEX0_1,
+ VERT_TEX0_12,
+ VERT_TEX0_123,
+ VERT_TEX0_1234
+ };
+ GLint i;
ctx->Array.Flags = 0;
ctx->Array.Summary = 0;
@@ -1227,11 +1240,10 @@ void gl_update_client_state( GLcontext *ctx )
ctx->Array.Flags |= sz_flags[ctx->Array.Vertex.Size];
ctx->input->ArrayIncr = 1;
}
- if (ctx->Array.TexCoord[0].Enabled) {
- ctx->Array.Flags |= tc_flags[ctx->Array.TexCoord[0].Size];
- }
- if (ctx->Array.TexCoord[1].Enabled) {
- ctx->Array.Flags |= (tc_flags[ctx->Array.TexCoord[1].Size] << NR_TEXSIZE_BITS);
+ for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
+ if (ctx->Array.TexCoord[i].Enabled) {
+ ctx->Array.Flags |= (tc_flags[ctx->Array.TexCoord[i].Size] << (i * NR_TEXSIZE_BITS));
+ }
}
/* Not really important any more: