Header file clean-up:
[mesa.git] / src / mesa / tnl / t_imm_dlist.c
index 6d6830a50d92bcb3fe10e90710b8765f01560a8b..34da0ea448a0df512ec73a197cbdfc6973dc191a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_dlist.c,v 1.28 2001/08/02 22:39:51 keithw Exp $ */
+/* $Id: t_imm_dlist.c,v 1.43 2002/10/24 23:57:25 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -33,7 +33,7 @@
 #include "dlist.h"
 #include "debug.h"
 #include "mmath.h"
-#include "mem.h"
+#include "imports.h"
 #include "state.h"
 
 #include "t_context.h"
@@ -70,25 +70,25 @@ static void build_normal_lengths( struct immediate *IM )
 {
    GLuint i;
    GLfloat len;
-   GLfloat (*data)[3] = IM->Normal + IM->Start;
+   GLfloat (*data)[4] = IM->Attrib[VERT_ATTRIB_NORMAL] + IM->Start;
    GLfloat *dest = IM->NormalLengthPtr;
    GLuint *flags = IM->Flag + IM->Start;
    GLuint count = IM->Count - IM->Start;
 
    if (!dest) {
-      dest = IM->NormalLengthPtr = ALIGN_MALLOC( IMM_SIZE*sizeof(GLfloat), 32 );
+      dest = IM->NormalLengthPtr = (GLfloat *) ALIGN_MALLOC( IMM_SIZE*sizeof(GLfloat), 32 );
       if (!dest) return;
    }
    dest += IM->Start;
 
    len = (GLfloat) LEN_3FV( data[0] );
-   if (len > 0.0) len = 1.0/len;
+   if (len > 0.0F) len = 1.0F / len;
    
    for (i = 0 ; i < count ; ) {
       dest[i] = len;
-      if (flags[++i] & VERT_NORM) {
+      if (flags[++i] & VERT_BIT_NORMAL) {
         len = (GLfloat) LEN_3FV( data[i] );
-        if (len > 0.0) len = 1.0/len;
+        if (len > 0.0F) len = 1.0F / len;
       }
    } 
 }
@@ -96,19 +96,19 @@ static void build_normal_lengths( struct immediate *IM )
 static void fixup_normal_lengths( struct immediate *IM ) 
 {
    GLuint i;
-   GLfloat len = 1.0;  /* just to silence warnings */
-   GLfloat (*data)[3] = IM->Normal;
+   GLfloat len = 1.0F;  /* just to silence warnings */
+   GLfloat (*data)[4] = IM->Attrib[VERT_ATTRIB_NORMAL];
    GLfloat *dest = IM->NormalLengthPtr;
    GLuint *flags = IM->Flag;
 
    for (i = IM->CopyStart ; i <= IM->Start ; i++) {
       len = (GLfloat) LEN_3FV( data[i] );
-      if (len > 0.0) len = 1.0/len;
+      if (len > 0.0F) len = 1.0F / len;
       dest[i] = len;
    } 
 
    if (i < IM->Count) {
-      while (!(flags[i] & (VERT_NORM|VERT_END_VB))) {
+      while (!(flags[i] & (VERT_BIT_NORMAL|VERT_BIT_END_VB))) {
         dest[i] = len;
         i++;
       }
@@ -128,6 +128,9 @@ _tnl_compile_cassette( GLcontext *ctx, struct immediate *IM )
    TNLvertexcassette *node;
    GLuint new_beginstate;
 
+   if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST)
+      _mesa_debug(ctx, "_tnl_compiled_cassette IM: %d\n", IM->id); 
+
    if (IM->FlushElt) {
       ASSERT (IM->FlushElt == FLUSH_ELT_LAZY); 
       _tnl_translate_array_elts( ctx, IM, IM->Start, IM->Count );
@@ -139,8 +142,8 @@ _tnl_compile_cassette( GLcontext *ctx, struct immediate *IM )
     * array-elements have been translated away by now, so it's ok to
     * remove it.)
     */
-   IM->OrFlag &= ~VERT_ELT;    
-   IM->AndFlag &= ~VERT_ELT;   
+   IM->OrFlag &= ~VERT_BIT_ELT;        
+   IM->AndFlag &= ~VERT_BIT_ELT;       
 
    _tnl_fixup_input( ctx, IM );
 
@@ -222,17 +225,17 @@ static void fixup_compiled_primitives( GLcontext *ctx, struct immediate *IM )
         _mesa_error( ctx, GL_INVALID_OPERATION, "glBegin/glEnd");
 
       for (i = IM->Start ; i <= IM->Count ; i += IM->PrimitiveLength[i])
-        if (IM->Flag[i] & (VERT_BEGIN|VERT_END_VB))
+        if (IM->Flag[i] & (VERT_BIT_BEGIN|VERT_BIT_END_VB))
            break;
 
       /* Would like to just ignore vertices upto this point.  Can't
        * set copystart because it might skip materials?
        */
       ASSERT(IM->Start == IM->CopyStart);
-      if (i > IM->CopyStart) {
+      if (i > IM->CopyStart || !(IM->Flag[IM->Start] & VERT_BIT_BEGIN)) {
         IM->Primitive[IM->CopyStart] = GL_POLYGON+1;
         IM->PrimitiveLength[IM->CopyStart] = i - IM->CopyStart;
-        if (IM->Flag[i] & VERT_END_VB) {
+        if (IM->Flag[i] & VERT_BIT_END_VB) {
            IM->Primitive[IM->CopyStart] |= PRIM_LAST;
            IM->LastPrimitive = IM->CopyStart;
         }
@@ -244,7 +247,7 @@ static void fixup_compiled_primitives( GLcontext *ctx, struct immediate *IM )
         _mesa_error( ctx, GL_INVALID_OPERATION, "glBegin/glEnd");
 
       if (IM->CopyStart == IM->Start &&
-         IM->Flag[IM->Start] & (VERT_END|VERT_END_VB))
+         IM->Flag[IM->Start] & (VERT_BIT_END | VERT_BIT_END_VB))
       {
       }
       else
@@ -256,16 +259,16 @@ static void fixup_compiled_primitives( GLcontext *ctx, struct immediate *IM )
          /* one of these should be true, else we'll be in an infinite loop 
          */
          ASSERT(IM->PrimitiveLength[IM->Start] > 0 ||
-                IM->Flag[IM->Start] & (VERT_END|VERT_END_VB));
+                IM->Flag[IM->Start] & (VERT_BIT_END | VERT_BIT_END_VB));
 
         for (i = IM->Start ; i <= IM->Count ; i += IM->PrimitiveLength[i])
-           if (IM->Flag[i] & (VERT_END|VERT_END_VB)) {
+           if (IM->Flag[i] & (VERT_BIT_END | VERT_BIT_END_VB)) {
               IM->PrimitiveLength[IM->CopyStart] = i - IM->CopyStart;
-              if (IM->Flag[i] & VERT_END_VB) {
+              if (IM->Flag[i] & VERT_BIT_END_VB) {
                  IM->Primitive[IM->CopyStart] |= PRIM_LAST;
                  IM->LastPrimitive = IM->CopyStart;
               }
-              if (IM->Flag[i] & VERT_END) {
+              if (IM->Flag[i] & VERT_BIT_END) {
                  IM->Primitive[IM->CopyStart] |= PRIM_END;
               }
               break;
@@ -293,7 +296,7 @@ execute_compiled_cassette( GLcontext *ctx, void *data )
    TNLvertexcassette *node = (TNLvertexcassette *)data;
    struct immediate *IM = node->IM;
 
-/*     fprintf(stderr, "%s\n", __FUNCTION__); */
+/*     _mesa_debug("%s\n", __FUNCTION__); */
 
    IM->Start = node->Start;
    IM->CopyStart = node->Start;
@@ -314,9 +317,8 @@ execute_compiled_cassette( GLcontext *ctx, void *data )
       _tnl_print_cassette( IM );
 
    if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST) {
-      fprintf(stderr, "Run cassette %d, rows %d..%d, beginstate %x ",
-             IM->id,
-             IM->Start, IM->Count, IM->BeginState);
+      _mesa_debug(ctx, "Run cassette %d, rows %d..%d, beginstate %x ",
+                  IM->id, IM->Start, IM->Count, IM->BeginState);
       _tnl_print_vert_flags("orflag", IM->OrFlag);
    }
 
@@ -339,6 +341,7 @@ execute_compiled_cassette( GLcontext *ctx, void *data )
    }
 
    if (tnl->LoopbackDListCassettes) {
+/*        (tnl->IsolateMaterials && (IM->OrFlag & VERT_MATERIAL)) ) { */
       fixup_compiled_primitives( ctx, IM );
       loopback_compiled_cassette( ctx, IM );
       restore_compiled_primitives( ctx, IM );
@@ -387,7 +390,7 @@ destroy_compiled_cassette( GLcontext *ctx, void *data )
    TNLvertexcassette *node = (TNLvertexcassette *)data;
 
    if ( --node->IM->ref_count == 0 )
-      _tnl_free_immediate( node->IM );
+      _tnl_free_immediate( ctx, node->IM );
 }
 
 
@@ -397,8 +400,8 @@ print_compiled_cassette( GLcontext *ctx, void *data )
    TNLvertexcassette *node = (TNLvertexcassette *)data;
    struct immediate *IM = node->IM;
 
-   fprintf(stderr, "TNL-VERTEX-CASSETTE, id %u, rows %u..%u\n",
-          node->IM->id, node->Start, node->Count);
+   _mesa_debug(ctx, "TNL-VERTEX-CASSETTE, id %u, rows %u..%u\n",
+               node->IM->id, node->Start, node->Count);
 
    IM->Start = node->Start;
    IM->CopyStart = node->Start;
@@ -425,12 +428,18 @@ _tnl_BeginCallList( GLcontext *ctx, GLuint list )
 }
 
 
-/* Called at the tail of a CallList.  Nothing to do.
+/* Called at the tail of a CallList.  Make current immediate aware of
+ * any new to-be-copied vertices.
  */
 void
 _tnl_EndCallList( GLcontext *ctx )
 {
-   (void) ctx;
+   GLuint beginstate = 0;
+
+   if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END)
+      beginstate = VERT_BEGIN_0|VERT_BEGIN_1;
+
+   _tnl_reset_exec_input( ctx, TNL_CURRENT_IM(ctx)->Start, beginstate, 0 );
 }
 
 
@@ -564,14 +573,14 @@ static void loopback_compiled_cassette( GLcontext *ctx, struct immediate *IM )
    GLuint maxtex = 0;
    GLuint p, length, prim = 0;
    
-   if (orflag & VERT_OBJ_234)
+   if (orflag & VERT_BITS_OBJ_234)
       vertex = (void (GLAPIENTRY *)(const GLfloat *)) glVertex4fv;
    else
       vertex = (void (GLAPIENTRY *)(const GLfloat *)) glVertex3fv;
    
-   if (orflag & VERT_TEX_ANY) {
+   if (orflag & VERT_BITS_TEX_ANY) {
       for (j = 0 ; j < ctx->Const.MaxTextureUnits ; j++) {
-        if (orflag & VERT_TEX(j)) {
+        if (orflag & VERT_BIT_TEX(j)) {
            maxtex = j+1;
            if ((IM->TexSize & TEX_SIZE_4(j)) == TEX_SIZE_4(j))
               texcoordfv[j] = glMultiTexCoord4fvARB;
@@ -591,64 +600,56 @@ static void loopback_compiled_cassette( GLcontext *ctx, struct immediate *IM )
       ASSERT((prim & PRIM_MODE_MASK) <= GL_POLYGON+1);
 
       if (prim & PRIM_BEGIN) {
-/*      fprintf(stderr, "begin %s\n", _mesa_prim_name[prim&PRIM_MODE_MASK]); */
         glBegin(prim & PRIM_MODE_MASK);
       }
 
       for ( i = p ; i <= p+length ; i++) {
-        if (flags[i] & VERT_TEX_ANY) {
+        if (flags[i] & VERT_BITS_TEX_ANY) {
            GLuint k;
            for (k = 0 ; k < maxtex ; k++) {
-              if (flags[i] & VERT_TEX(k)) {
-                 texcoordfv[k]( GL_TEXTURE0_ARB + k, IM->TexCoord[k][i] );
+              if (flags[i] & VERT_BIT_TEX(k)) {
+                 texcoordfv[k]( GL_TEXTURE0_ARB + k,
+                                 IM->Attrib[VERT_ATTRIB_TEX0 + k][i] );
               }
            }
         }
 
-        if (flags[i] & VERT_NORM) {
-/*            fprintf(stderr, "normal %d: %f %f %f\n", i, */
-/*                    IM->Normal[i][0], IM->Normal[i][1], IM->Normal[i][2]);  */
-           glNormal3fv(IM->Normal[i]);
-        }
+        if (flags[i] & VERT_BIT_NORMAL) 
+           glNormal3fv(IM->Attrib[VERT_ATTRIB_NORMAL][i]);
 
-        if (flags[i] & VERT_RGBA) {
-/*            fprintf(stderr, "color %d: %f %f %f\n", i, */
-/*                    IM->Color[i][0], IM->Color[i][1], IM->Color[i][2]);  */
-           glColor4fv( IM->Color[i] );
-        }
+        if (flags[i] & VERT_BIT_COLOR0) 
+           glColor4fv( IM->Attrib[VERT_ATTRIB_COLOR0][i] );
 
-        if (flags[i] & VERT_SPEC_RGB)
-           glSecondaryColor3fvEXT( IM->SecondaryColor[i] );
+        if (flags[i] & VERT_BIT_COLOR1)
+           _glapi_Dispatch->SecondaryColor3fvEXT( IM->Attrib[VERT_ATTRIB_COLOR1][i] );
 
-        if (flags[i] & VERT_FOG_COORD)
-           glFogCoordfEXT( IM->FogCoord[i] );
+        if (flags[i] & VERT_BIT_FOG)
+           _glapi_Dispatch->FogCoordfEXT( IM->Attrib[VERT_ATTRIB_FOG][i][0] );
 
-        if (flags[i] & VERT_INDEX)
+        if (flags[i] & VERT_BIT_INDEX)
            glIndexi( IM->Index[i] );
 
-        if (flags[i] & VERT_EDGE)
+        if (flags[i] & VERT_BIT_EDGEFLAG)
            glEdgeFlag( IM->EdgeFlag[i] );
 
-        if (flags[i] & VERT_MATERIAL) 
+        if (flags[i] & VERT_BIT_MATERIAL) 
            emit_material( IM->Material[i], IM->MaterialMask[i] );
 
-        if (flags[i]&VERT_OBJ_234) {
-/*            fprintf(stderr, "vertex %d: %f %f %f\n", i, */
-/*                    IM->Obj[i][0], IM->Obj[i][1], IM->Obj[i][2]); */
-           vertex( IM->Obj[i] );
-        }
-        else if (flags[i] & VERT_EVAL_C1)
-           glEvalCoord1f(IM->Obj[i][0]);
-        else if (flags[i] & VERT_EVAL_P1)
-           glEvalPoint1(IM->Obj[i][0]);
-        else if (flags[i] & VERT_EVAL_C2)
-           glEvalCoord2f( IM->Obj[i][0], IM->Obj[i][1]);
-        else if (flags[i] & VERT_EVAL_P2)
-           glEvalPoint2( IM->Obj[i][0], IM->Obj[i][1]);
+        if (flags[i]&VERT_BITS_OBJ_234) 
+           vertex( IM->Attrib[VERT_ATTRIB_POS][i] );
+        else if (flags[i] & VERT_BIT_EVAL_C1)
+           glEvalCoord1f( IM->Attrib[VERT_ATTRIB_POS][i][0] );
+        else if (flags[i] & VERT_BIT_EVAL_P1)
+           glEvalPoint1( (GLint) IM->Attrib[VERT_ATTRIB_POS][i][0] );
+        else if (flags[i] & VERT_BIT_EVAL_C2)
+           glEvalCoord2f( IM->Attrib[VERT_ATTRIB_POS][i][0],
+                           IM->Attrib[VERT_ATTRIB_POS][i][1] );
+        else if (flags[i] & VERT_BIT_EVAL_P2)
+           glEvalPoint2( (GLint) IM->Attrib[VERT_ATTRIB_POS][i][0],
+                          (GLint) IM->Attrib[VERT_ATTRIB_POS][i][1] );
       }
 
       if (prim & PRIM_END) {
-/*      fprintf(stderr, "end\n"); */
         glEnd();
       }
    }