Support for floating point color representation in tnl module.
authorKeith Whitwell <keith@tungstengraphics.com>
Sat, 28 Apr 2001 08:39:17 +0000 (08:39 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Sat, 28 Apr 2001 08:39:17 +0000 (08:39 +0000)
31 files changed:
src/mesa/array_cache/ac_context.c
src/mesa/array_cache/ac_import.c
src/mesa/drivers/common/t_dd_tritmp.h
src/mesa/drivers/common/t_dd_vbtmp.h
src/mesa/main/api_noop.c
src/mesa/main/context.c
src/mesa/main/drawpix.c
src/mesa/main/get.c
src/mesa/main/light.c
src/mesa/main/light.h
src/mesa/main/mtypes.h
src/mesa/main/rastpos.c
src/mesa/math/m_translate.c
src/mesa/swrast_setup/ss_triangle.c
src/mesa/swrast_setup/ss_tritmp.h
src/mesa/swrast_setup/ss_vbtmp.h
src/mesa/tnl/t_array_api.c
src/mesa/tnl/t_array_import.c
src/mesa/tnl/t_array_import.h
src/mesa/tnl/t_context.h
src/mesa/tnl/t_imm_api.c
src/mesa/tnl/t_imm_debug.c
src/mesa/tnl/t_imm_elt.c
src/mesa/tnl/t_imm_eval.c
src/mesa/tnl/t_imm_exec.c
src/mesa/tnl/t_imm_fixup.c
src/mesa/tnl/t_imm_fixup.h
src/mesa/tnl/t_vb_cliptmp.h
src/mesa/tnl/t_vb_light.c
src/mesa/tnl/t_vb_lighttmp.h
src/mesa/tnl/t_vb_render.c

index 2e11414079443a01019793f6bf0746ac320e8ce5..e9c4fe869ad600e37e916caea5496050d348a709 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ac_context.c,v 1.3 2001/03/12 00:48:41 gareth Exp $ */
+/* $Id: ac_context.c,v 1.4 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -48,22 +48,25 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->StrideB = 0;
    cl->Ptr = (void *) ctx->Current.Normal;
    cl->Enabled = 1;
+   cl->Flags = CA_CLIENT_DATA; /* hack */
 
    cl = &ac->Fallback.Color;
    cl->Size = 4;
-   cl->Type = GL_UNSIGNED_BYTE;
+   cl->Type = GL_FLOAT;
    cl->Stride = 0;
    cl->StrideB = 0;
    cl->Ptr = (void *) ctx->Current.Color;
    cl->Enabled = 1;
+   cl->Flags = CA_CLIENT_DATA; /* hack */
 
    cl = &ac->Fallback.SecondaryColor;
    cl->Size = 3;
-   cl->Type = GL_UNSIGNED_BYTE;
+   cl->Type = GL_FLOAT;
    cl->Stride = 0;
    cl->StrideB = 0;
    cl->Ptr = (void *) ctx->Current.SecondaryColor;
    cl->Enabled = 1;
+   cl->Flags = CA_CLIENT_DATA; /* hack */
 
    cl = &ac->Fallback.FogCoord;
    cl->Size = 1;
@@ -72,6 +75,7 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->StrideB = 0;
    cl->Ptr = (void *) &ctx->Current.FogCoord;
    cl->Enabled = 1;
+   cl->Flags = CA_CLIENT_DATA; /* hack */
 
    cl = &ac->Fallback.Index;
    cl->Size = 1;
@@ -80,6 +84,7 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->StrideB = 0;
    cl->Ptr = (void *) &ctx->Current.Index;
    cl->Enabled = 1;
+   cl->Flags = CA_CLIENT_DATA; /* hack */
 
    for (i = 0 ; i < MAX_TEXTURE_UNITS ; i++) {
       cl = &ac->Fallback.TexCoord[i];
@@ -89,6 +94,7 @@ static void _ac_fallbacks_init( GLcontext *ctx )
       cl->StrideB = 0;
       cl->Ptr = (void *) ctx->Current.Texcoord[i];
       cl->Enabled = 1;
+      cl->Flags = CA_CLIENT_DATA;      /* hack */
    }
 
    cl = &ac->Fallback.EdgeFlag;
@@ -98,6 +104,7 @@ static void _ac_fallbacks_init( GLcontext *ctx )
    cl->StrideB = 0;
    cl->Ptr = (void *) &ctx->Current.EdgeFlag;
    cl->Enabled = 1;
+   cl->Flags = CA_CLIENT_DATA; /* hack */
 }
 
 
@@ -115,6 +122,7 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->StrideB = 4 * sizeof(GLfloat);
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
+   cl->Flags = 0;
 
    cl = &ac->Cache.Normal;
    cl->Size = 3;
@@ -123,22 +131,25 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->StrideB = 3 * sizeof(GLfloat);
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
+   cl->Flags = 0;
 
    cl = &ac->Cache.Color;
    cl->Size = 4;
-   cl->Type = GL_UNSIGNED_BYTE;
+   cl->Type = GL_FLOAT;
    cl->Stride = 0;
-   cl->StrideB = 4 * sizeof(GLubyte);
+   cl->StrideB = 4 * sizeof(GLfloat);
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
+   cl->Flags = 0;
 
    cl = &ac->Cache.SecondaryColor;
    cl->Size = 3;
-   cl->Type = GL_UNSIGNED_BYTE;
+   cl->Type = GL_FLOAT;
    cl->Stride = 0;
-   cl->StrideB = 4 * sizeof(GLubyte);
+   cl->StrideB = 4 * sizeof(GLfloat);
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
+   cl->Flags = 0;
 
    cl = &ac->Cache.FogCoord;
    cl->Size = 1;
@@ -147,6 +158,7 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->StrideB = sizeof(GLfloat);
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
+   cl->Flags = 0;
 
    cl = &ac->Cache.Index;
    cl->Size = 1;
@@ -155,6 +167,7 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->StrideB = sizeof(GLuint);
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
+   cl->Flags = 0;
 
    for (i = 0 ; i < MAX_TEXTURE_UNITS ; i++) {
       cl = &ac->Cache.TexCoord[i];
@@ -164,6 +177,7 @@ static void _ac_cache_init( GLcontext *ctx )
       cl->StrideB = 4 * sizeof(GLfloat);
       cl->Ptr = MALLOC( cl->StrideB * size );
       cl->Enabled = 1;
+      cl->Flags = 0;
    }
 
    cl = &ac->Cache.EdgeFlag;
@@ -173,6 +187,7 @@ static void _ac_cache_init( GLcontext *ctx )
    cl->StrideB = sizeof(GLubyte);
    cl->Ptr = MALLOC( cl->StrideB * size );
    cl->Enabled = 1;
+   cl->Flags = 0;
 }
 
 
index 334b3673f2d5a790c69aeb2ab479801cce4ec39c..a2f3ceabad6b74b434f55bed1058f82cccaed61c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ac_import.c,v 1.13 2001/04/17 21:08:32 brianp Exp $ */
+/* $Id: ac_import.c,v 1.14 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -178,6 +178,65 @@ static void reset_edgeflag( GLcontext *ctx )
 }
 
 
+
+static void import( GLcontext *ctx,
+                   GLenum type,
+                   struct gl_client_array *to,
+                   struct gl_client_array *from )
+{
+   ACcontext *ac = AC_CONTEXT(ctx);
+
+   if (type == 0) 
+      type = from->Type;
+
+   switch (type) {
+   case GL_FLOAT:
+      _math_trans_4f( (GLfloat (*)[4]) to->Ptr,
+                     from->Ptr,
+                     from->StrideB,
+                     from->Type,
+                     from->Size,
+                     0,
+                     ac->count - ac->start);
+
+      to->StrideB = 4 * sizeof(GLfloat);
+      to->Type = GL_FLOAT;
+      break;
+      
+   case GL_UNSIGNED_BYTE:
+      _math_trans_4ub( (GLubyte (*)[4]) to->Ptr,
+                      from->Ptr,
+                      from->StrideB,
+                      from->Type,
+                      from->Size,
+                      0,
+                      ac->count - ac->start);
+
+      to->StrideB = 4 * sizeof(GLubyte);
+      to->Type = GL_UNSIGNED_BYTE;
+      break;
+
+   case GL_UNSIGNED_SHORT:
+      _math_trans_4us( (GLushort (*)[4]) to->Ptr,
+                      from->Ptr,
+                      from->StrideB,
+                      from->Type,
+                      from->Size,
+                      0,
+                      ac->count - ac->start);
+
+      to->StrideB = 4 * sizeof(GLushort);
+      to->Type = GL_UNSIGNED_SHORT;
+      break;
+      
+   default:
+      ASSERT(0);
+      break;
+   }
+}
+
+
+
 /* Functions to import array ranges with specified types and strides.
  */
 static void import_texcoord( GLcontext *ctx, GLuint unit,
@@ -257,6 +316,9 @@ static void import_normal( GLcontext *ctx,
    ac->IsCached.Normal = GL_TRUE;
 }
 
+                   
+
+
 static void import_color( GLcontext *ctx,
                          GLenum type, GLuint stride )
 {
@@ -264,22 +326,8 @@ static void import_color( GLcontext *ctx,
    struct gl_client_array *from = &ac->Raw.Color;
    struct gl_client_array *to = &ac->Cache.Color;
 
-   /* Limited choices at this stage:
-    */
-   ASSERT(type == CHAN_TYPE);
-   ASSERT(stride == 4 * sizeof(GLchan) || stride == 0);
-
-   _math_trans_4chan( (GLchan (*)[4]) to->Ptr,
-                     from->Ptr,
-                     from->StrideB,
-                     from->Type,
-                     from->Size,
-                     0,
-                     ac->count - ac->start);
-
-   to->Size = from->Size;
-   to->StrideB = 4 * sizeof(GLchan);
-   to->Type = CHAN_TYPE;
+   import( ctx, type, to, from );
+   
    ac->IsCached.Color = GL_TRUE;
 }
 
@@ -314,21 +362,8 @@ static void import_secondarycolor( GLcontext *ctx,
    struct gl_client_array *from = &ac->Raw.SecondaryColor;
    struct gl_client_array *to = &ac->Cache.SecondaryColor;
 
-   /* Limited choices at this stage:
-    */
-   ASSERT(type == CHAN_TYPE);
-   ASSERT(stride == 4 * sizeof(GLchan) || stride == 0);
-
-   _math_trans_4chan( (GLchan (*)[4]) to->Ptr,
-                     from->Ptr,
-                     from->StrideB,
-                     from->Type,
-                     from->Size,
-                     0,
-                     ac->count - ac->start);
+   import( ctx, type, to, from );
 
-   to->StrideB = 4 * sizeof(GLchan);
-   to->Type = CHAN_TYPE;
    ac->IsCached.SecondaryColor = GL_TRUE;
 }
 
@@ -509,7 +544,7 @@ struct gl_client_array *_ac_import_color( GLcontext *ctx,
 
    /* Do we need to pull in a copy of the client data:
     */
-   if (ac->Raw.Color.Type != type ||
+   if ((type != 0 && ac->Raw.Color.Type != type) ||
        (reqstride != 0 && ac->Raw.Color.StrideB != (GLint) reqstride) ||
        reqwriteable)
    {
@@ -576,7 +611,7 @@ struct gl_client_array *_ac_import_secondarycolor( GLcontext *ctx,
 
    /* Do we need to pull in a copy of the client data:
     */
-   if (ac->Raw.SecondaryColor.Type != type ||
+   if ((type != 0 && ac->Raw.SecondaryColor.Type != type) ||
        (reqstride != 0 && ac->Raw.SecondaryColor.StrideB != (GLint)reqstride) ||
        reqwriteable)
    {
index 963db088265fe6d7c9bf0e4a83d9bf830a0f7159..22eff7f252fcc5ee303ff163816e9cafc5627059 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_dd_tritmp.h,v 1.8 2001/04/06 16:26:41 alanh Exp $ */
+/* $Id: t_dd_tritmp.h,v 1.9 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -177,23 +177,30 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
                  }
               }
               else {
-                 GLchan (*vbcolor)[4] = VB->ColorPtr[1]->data;
-                 ASSERT(VB->ColorPtr[1]->stride == 4*sizeof(GLchan));
+                 GLfloat (*vbcolor)[4] = VB->ColorPtr[1]->Ptr;
+                 ASSERT(VB->ColorPtr[1]->Type == GL_FLOAT);
+                 ASSERT(VB->ColorPtr[1]->StrideB == 4*sizeof(GLfloat));
                  (void) vbcolor;
 
                  if (!DO_FLAT) {
+                    VERT_SAVE_RGBA( 0 );
+                    VERT_SAVE_RGBA( 1 );
                     VERT_SET_RGBA( v[0], vbcolor[e0] );
                     VERT_SET_RGBA( v[1], vbcolor[e1] );
                  }
+                 VERT_SAVE_RGBA( 2 );
                  VERT_SET_RGBA( v[2], vbcolor[e2] );
 
                  if (HAVE_SPEC && VB->SecondaryColorPtr[1]) {
-                    GLchan (*vbspec)[4] = VB->SecondaryColorPtr[1]->data;
+                    GLfloat (*vbspec)[4] = VB->SecondaryColorPtr[1]->Ptr;
 
                     if (!DO_FLAT) {
+                       VERT_SAVE_SPEC( 0 );
+                       VERT_SAVE_SPEC( 1 );
                        VERT_SET_SPEC( v[0], vbspec[e0] );
                        VERT_SET_SPEC( v[1], vbspec[e1] );
                     }
+                    VERT_SAVE_SPEC( 2 );
                     VERT_SET_SPEC( v[2], vbspec[e2] );
                  }
               }
@@ -288,37 +295,17 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
    if (DO_TWOSIDE && facing == 1)
    {
       if (HAVE_RGBA) {
-        if (HAVE_BACK_COLORS) {
+        if (!DO_FLAT) {
            VERT_RESTORE_RGBA( 0 );
            VERT_RESTORE_RGBA( 1 );
-           VERT_RESTORE_RGBA( 2 );
-           if (HAVE_SPEC) {
-              VERT_RESTORE_SPEC( 0 );
-              VERT_RESTORE_SPEC( 1 );
-              VERT_RESTORE_SPEC( 2 );
-           }
         }
-        else {
-           GLchan (*vbcolor)[4] = VB->ColorPtr[0]->data;
-           ASSERT(VB->ColorPtr[0]->stride == 4*sizeof(GLchan));
-           (void) vbcolor;
-
+        VERT_RESTORE_RGBA( 2 );
+        if (HAVE_SPEC) {
            if (!DO_FLAT) {
-              VERT_SET_RGBA( v[0], vbcolor[e0] );
-              VERT_SET_RGBA( v[1], vbcolor[e1] );
-           }
-           VERT_SET_RGBA( v[2], vbcolor[e2] );
-
-           if (HAVE_SPEC && VB->SecondaryColorPtr[0]) {
-              GLchan (*vbspec)[4] = VB->SecondaryColorPtr[0]->data;
-              ASSERT(VB->SecondaryColorPtr[0]->stride == 4*sizeof(GLchan));
-
-              if (!DO_FLAT) {
-                 VERT_SET_SPEC( v[0], vbspec[e0] );
-                 VERT_SET_SPEC( v[1], vbspec[e1] );
-              }
-              VERT_SET_SPEC( v[2], vbspec[e2] );
+              VERT_RESTORE_SPEC( 0 );
+              VERT_RESTORE_SPEC( 1 );
            }
+           VERT_RESTORE_SPEC( 2 );
         }
       }
       else {
@@ -398,7 +385,7 @@ static void TAG(quad)( GLcontext *ctx,
         if (DO_TWOSIDE && facing == 1)
         {
            if (HAVE_RGBA) {
-              GLchan (*vbcolor)[4] = VB->ColorPtr[1]->data;
+              GLfloat (*vbcolor)[4] = VB->ColorPtr[1]->Ptr;
               (void)vbcolor;
 
               if (!DO_FLAT) {
@@ -409,8 +396,8 @@ static void TAG(quad)( GLcontext *ctx,
               VERT_SET_RGBA( v[3], vbcolor[e3] );
 
               if (HAVE_SPEC && VB->SecondaryColorPtr[facing]) {
-                 GLchan (*vbspec)[4] = VB->SecondaryColorPtr[1]->data;
-                 ASSERT(VB->SecondaryColorPtr[1]->stride == 4*sizeof(GLchan));
+                 GLchan (*vbspec)[4] = VB->SecondaryColorPtr[1]->Ptr;
+                 ASSERT(VB->SecondaryColorPtr[1]->StrideB==4*sizeof(GLfloat));
 
                  if (!DO_FLAT) {
                     VERT_SET_SPEC( v[0], vbspec[e0] );
@@ -521,27 +508,19 @@ static void TAG(quad)( GLcontext *ctx,
    if (DO_TWOSIDE && facing == 1)
    {
       if (HAVE_RGBA) {
-        GLchan (*vbcolor)[4] = VB->ColorPtr[0]->data;
-        ASSERT(VB->ColorPtr[0]->stride == 4*sizeof(GLchan));
-        (void) vbcolor;
-
         if (!DO_FLAT) {
-           VERT_SET_RGBA( v[0], vbcolor[e0] );
-           VERT_SET_RGBA( v[1], vbcolor[e1] );
-           VERT_SET_RGBA( v[2], vbcolor[e2] );
+           VERT_RESTORE_RGBA( 0 );
+           VERT_RESTORE_RGBA( 1 );
+           VERT_RESTORE_RGBA( 2 );
         }
-        VERT_SET_RGBA( v[3], vbcolor[e3] );
-
-        if (HAVE_SPEC && VB->SecondaryColorPtr[0]) {
-           GLchan (*vbspec)[4] = VB->SecondaryColorPtr[0]->data;
-           ASSERT(VB->SecondaryColorPtr[0]->stride == 4*sizeof(GLchan));
-
+        VERT_RESTORE_RGBA( 3 );
+        if (HAVE_SPEC) {
            if (!DO_FLAT) {
-              VERT_SET_SPEC( v[0], vbspec[e0] );
-              VERT_SET_SPEC( v[1], vbspec[e1] );
-              VERT_SET_SPEC( v[2], vbspec[e2] );
+              VERT_RESTORE_SPEC( 0 );
+              VERT_RESTORE_SPEC( 1 );
+              VERT_RESTORE_SPEC( 2 );
            }
-           VERT_SET_SPEC( v[3], vbspec[e3] );
+           VERT_RESTORE_SPEC( 3 );
         }
       }
       else {
index d6425f0b96280fd227c13303d26f550fe44fc91e..65e00a13adae377a5824f77058f1dc5d964c4208 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_dd_vbtmp.h,v 1.10 2001/04/09 10:16:01 alanh Exp $ */
+/* $Id: t_dd_vbtmp.h,v 1.11 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -175,13 +175,17 @@ static void TAG(emit)( GLcontext *ctx,
    }
 
    if (DO_RGBA) {
-      col = VB->ColorPtr[0]->data;
-      col_stride = VB->ColorPtr[0]->stride;
+      if (VB->ColorPtr[0]->Type != GL_UNSIGNED_BYTE)
+        IMPORT_FLOAT_COLORS( ctx );
+      col = (GLubyte (*)[4])VB->ColorPtr[0]->Ptr;
+      col_stride = VB->ColorPtr[0]->StrideB;
    }
 
    if (DO_SPEC) {
-      spec = VB->SecondaryColorPtr[0]->data;
-      spec_stride = VB->SecondaryColorPtr[0]->stride;
+      if (VB->SecondaryColorPtr[0]->Type != GL_UNSIGNED_BYTE)
+        IMPORT_FLOAT_SPEC_COLORS( ctx );
+      spec = (GLubyte (*)[4])VB->SecondaryColorPtr[0]->Ptr;
+      spec_stride = VB->SecondaryColorPtr[0]->StrideB;
    }
 
    if (DO_FOG) {
@@ -389,8 +393,8 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
 {
    LOCALVARS
    struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-   GLubyte (*col)[4] = VB->ColorPtr[0]->data;
-   GLuint col_stride = VB->ColorPtr[0]->stride;
+   GLubyte (*col)[4];
+   GLuint col_stride;
    GLfloat (*coord)[4] = VB->ProjectedClipPtr->data;
    GLuint coord_stride = VB->ProjectedClipPtr->stride;
    GLfloat *v = (GLfloat *)dest;
@@ -402,6 +406,16 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
 
    ASSERT(stride == 4);
 
+   if (VB->ColorPtr[0]->Type != GL_UNSIGNED_BYTE)
+      IMPORT_FLOAT_COLORS( ctx );
+
+   col = (GLubyte (*)[4])VB->ColorPtr[0]->Ptr;
+   col_stride = VB->ColorPtr[0]->StrideB;
+   ASSERT(VB->ColorPtr[0]->Type == GL_UNSIGNED_BYTE);
+
+/*     fprintf(stderr, "%s stride %d importable %d\n",  */
+/*        __FUNCTION__, col_stride, VB->importable_data); */
+
    /* Pack what's left into a 4-dword vertex.  Color is in a different
     * place, and there is no 'w' coordinate.
     */
@@ -461,11 +475,17 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
 {
    LOCALVARS
    struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
-   GLubyte (*col)[4] = VB->ColorPtr[0]->data;
-   GLuint col_stride = VB->ColorPtr[0]->stride;
+   GLubyte (*col)[4];
+   GLuint col_stride;
    GLfloat *v = (GLfloat *)dest;
    int i;
 
+   if (VB->ColorPtr[0]->Type != GL_UNSIGNED_BYTE)
+      IMPORT_FLOAT_COLORS( ctx );
+
+   col = VB->ColorPtr[0]->data;
+   col_stride = VB->ColorPtr[0]->stride;
+
    if (start)
       STRIDE_4UB(col, col_stride * start);
 
@@ -579,8 +599,8 @@ static void TAG(interp)( GLcontext *ctx,
    const GLfloat *s = GET_VIEWPORT_MAT();
 
    VERTEX *dst = (VERTEX *)(ddverts + (edst << shift));
-   VERTEX *in  = (VERTEX *)(ddverts + (eout << shift));
-   VERTEX *out = (VERTEX *)(ddverts + (ein << shift));
+   VERTEX *in  = (VERTEX *)(ddverts + (ein << shift));
+   VERTEX *out = (VERTEX *)(ddverts + (eout << shift));
 
    (void)s;
 
index b8d191faeae596ce49ec0a3d061a5749cefad99a..58a6e7d77126487daeccc93c9719ee2180962050 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: api_noop.c,v 1.7 2001/03/20 18:35:23 gareth Exp $ */
+/* $Id: api_noop.c,v 1.8 2001/04/28 08:39:17 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -155,85 +155,81 @@ void _mesa_noop_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
 void _mesa_noop_Color4ub( GLubyte a, GLubyte b, GLubyte c, GLubyte d )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.Color;
-   color[0] = UBYTE_TO_CHAN(a);
-   color[1] = UBYTE_TO_CHAN(b);
-   color[2] = UBYTE_TO_CHAN(c);
-   color[3] = UBYTE_TO_CHAN(d);
+   GLfloat *color = ctx->Current.Color;
+   color[0] = UBYTE_TO_FLOAT(a);
+   color[1] = UBYTE_TO_FLOAT(b);
+   color[2] = UBYTE_TO_FLOAT(c);
+   color[3] = UBYTE_TO_FLOAT(d);
 }
 
 void _mesa_noop_Color4ubv( const GLubyte *v )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.Color;
-#if CHAN_TYPE == GL_UNSIGNED_BYTE
-   COPY_4UBV( color, v );
-#else
-   color[0] = UBYTE_TO_CHAN(v[0]);
-   color[1] = UBYTE_TO_CHAN(v[1]);
-   color[2] = UBYTE_TO_CHAN(v[2]);
-   color[3] = UBYTE_TO_CHAN(v[3]);
-#endif
+   GLfloat *color = ctx->Current.Color;
+   color[0] = UBYTE_TO_FLOAT(v[0]);
+   color[1] = UBYTE_TO_FLOAT(v[1]);
+   color[2] = UBYTE_TO_FLOAT(v[2]);
+   color[3] = UBYTE_TO_FLOAT(v[3]);
 }
 
 void _mesa_noop_Color4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.Color;
-   UNCLAMPED_FLOAT_TO_CHAN(color[0], a);
-   UNCLAMPED_FLOAT_TO_CHAN(color[1], b);
-   UNCLAMPED_FLOAT_TO_CHAN(color[2], c);
-   UNCLAMPED_FLOAT_TO_CHAN(color[3], d);
+   GLfloat *color = ctx->Current.Color;
+   color[0] = a;
+   color[1] = b;
+   color[2] = c;
+   color[3] = d;
 }
 
 void _mesa_noop_Color4fv( const GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.Color;
-   UNCLAMPED_FLOAT_TO_CHAN(color[0], v[0]);
-   UNCLAMPED_FLOAT_TO_CHAN(color[1], v[1]);
-   UNCLAMPED_FLOAT_TO_CHAN(color[2], v[2]);
-   UNCLAMPED_FLOAT_TO_CHAN(color[3], v[3]);
+   GLfloat *color = ctx->Current.Color;
+   color[0] = v[0];
+   color[1] = v[1];
+   color[2] = v[2];
+   color[3] = v[3];
 }
 
 void _mesa_noop_Color3ub( GLubyte a, GLubyte b, GLubyte c )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.Color;
-   color[0] = UBYTE_TO_CHAN(a);
-   color[1] = UBYTE_TO_CHAN(b);
-   color[2] = UBYTE_TO_CHAN(c);
-   color[3] = CHAN_MAX;
+   GLfloat *color = ctx->Current.Color;
+   color[0] = UBYTE_TO_FLOAT(a);
+   color[1] = UBYTE_TO_FLOAT(b);
+   color[2] = UBYTE_TO_FLOAT(c);
+   color[3] = 1.0;
 }
 
 void _mesa_noop_Color3ubv( const GLubyte *v )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.Color;
-   color[0] = UBYTE_TO_CHAN(v[0]);
-   color[1] = UBYTE_TO_CHAN(v[1]);
-   color[2] = UBYTE_TO_CHAN(v[2]);
-   color[3] = CHAN_MAX;
+   GLfloat *color = ctx->Current.Color;
+   color[0] = UBYTE_TO_FLOAT(v[0]);
+   color[1] = UBYTE_TO_FLOAT(v[1]);
+   color[2] = UBYTE_TO_FLOAT(v[2]);
+   color[3] = 1.0;
 }
 
 void _mesa_noop_Color3f( GLfloat a, GLfloat b, GLfloat c )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.Color;
-   UNCLAMPED_FLOAT_TO_CHAN(color[0], a);
-   UNCLAMPED_FLOAT_TO_CHAN(color[1], b);
-   UNCLAMPED_FLOAT_TO_CHAN(color[2], c);
-   color[3] = CHAN_MAX;
+   GLfloat *color = ctx->Current.Color;
+   color[0] = a;
+   color[1] = b;
+   color[2] = c;
+   color[3] = 1.0;
 }
 
 void _mesa_noop_Color3fv( const GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.Color;
-   UNCLAMPED_FLOAT_TO_CHAN(color[0], v[0]);
-   UNCLAMPED_FLOAT_TO_CHAN(color[1], v[1]);
-   UNCLAMPED_FLOAT_TO_CHAN(color[2], v[2]);
-   color[3] = CHAN_MAX;
+   GLfloat *color = ctx->Current.Color;
+   color[0] = v[0];
+   color[1] = v[1];
+   color[2] = v[2];
+   color[3] = 1.0;
 }
 
 void _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a )
@@ -376,41 +372,41 @@ void _mesa_noop_MultiTexCoord4fvARB( GLenum target, GLfloat *v )
 void _mesa_noop_SecondaryColor3ubEXT( GLubyte a, GLubyte b, GLubyte c )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.SecondaryColor;
-   color[0] = UBYTE_TO_CHAN(a);
-   color[1] = UBYTE_TO_CHAN(b);
-   color[2] = UBYTE_TO_CHAN(c);
-   color[3] = CHAN_MAX;
+   GLfloat *color = ctx->Current.SecondaryColor;
+   color[0] = UBYTE_TO_FLOAT(a);
+   color[1] = UBYTE_TO_FLOAT(b);
+   color[2] = UBYTE_TO_FLOAT(c);
+   color[3] = 1.0;
 }
 
 void _mesa_noop_SecondaryColor3ubvEXT( const GLubyte *v )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.SecondaryColor;
-   color[0] = UBYTE_TO_CHAN(v[0]);
-   color[1] = UBYTE_TO_CHAN(v[1]);
-   color[2] = UBYTE_TO_CHAN(v[2]);
-   color[3] = CHAN_MAX;
+   GLfloat *color = ctx->Current.SecondaryColor;
+   color[0] = UBYTE_TO_FLOAT(v[0]);
+   color[1] = UBYTE_TO_FLOAT(v[1]);
+   color[2] = UBYTE_TO_FLOAT(v[2]);
+   color[3] = 1.0;
 }
 
 void _mesa_noop_SecondaryColor3fEXT( GLfloat a, GLfloat b, GLfloat c )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.SecondaryColor;
-   UNCLAMPED_FLOAT_TO_CHAN(color[0], a);
-   UNCLAMPED_FLOAT_TO_CHAN(color[1], b);
-   UNCLAMPED_FLOAT_TO_CHAN(color[2], c);
-   color[3] = CHAN_MAX;
+   GLfloat *color = ctx->Current.SecondaryColor;
+   color[0] = a;
+   color[1] = b;
+   color[2] = c;
+   color[3] = 1.0;
 }
 
 void _mesa_noop_SecondaryColor3fvEXT( const GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLchan *color = ctx->Current.SecondaryColor;
-   UNCLAMPED_FLOAT_TO_CHAN(color[0], v[0]);
-   UNCLAMPED_FLOAT_TO_CHAN(color[1], v[1]);
-   UNCLAMPED_FLOAT_TO_CHAN(color[2], v[2]);
-   color[3] = CHAN_MAX;
+   GLfloat *color = ctx->Current.SecondaryColor;
+   color[0] = v[0];
+   color[1] = v[1];
+   color[2] = v[2];
+   color[3] = 1.0;
 }
 
 void _mesa_noop_TexCoord1f( GLfloat a )
index 87a9749d5888f82d753cdbc800bc9a739b3db0a0..948de1b330fa7145f15dd05e8fe7cd2680ca8592 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.134 2001/04/27 21:17:20 brianp Exp $ */
+/* $Id: context.c,v 1.135 2001/04/28 08:39:17 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -817,7 +817,7 @@ init_attrib_groups( GLcontext *ctx )
    ctx->Color.MultiDrawBuffer = GL_FALSE;
 
    /* Current group */
-   ASSIGN_4V( ctx->Current.Color, CHAN_MAX, CHAN_MAX, CHAN_MAX, CHAN_MAX );
+   ASSIGN_4V( ctx->Current.Color, 1.0, 1.0, 1.0, 1.0 );
    ctx->Current.Index = 1;
    for (i=0; i<MAX_TEXTURE_UNITS; i++)
       ASSIGN_4V( ctx->Current.Texcoord[i], 0.0, 0.0, 0.0, 1.0 );
@@ -1156,22 +1156,40 @@ init_attrib_groups( GLcontext *ctx )
    ctx->Array.Vertex.StrideB = 0;
    ctx->Array.Vertex.Ptr = NULL;
    ctx->Array.Vertex.Enabled = GL_FALSE;
+   ctx->Array.Vertex.Flags = CA_CLIENT_DATA;
    ctx->Array.Normal.Type = GL_FLOAT;
    ctx->Array.Normal.Stride = 0;
    ctx->Array.Normal.StrideB = 0;
    ctx->Array.Normal.Ptr = NULL;
    ctx->Array.Normal.Enabled = GL_FALSE;
+   ctx->Array.Normal.Flags = CA_CLIENT_DATA;
    ctx->Array.Color.Size = 4;
    ctx->Array.Color.Type = GL_FLOAT;
    ctx->Array.Color.Stride = 0;
    ctx->Array.Color.StrideB = 0;
    ctx->Array.Color.Ptr = NULL;
    ctx->Array.Color.Enabled = GL_FALSE;
+   ctx->Array.Color.Flags = CA_CLIENT_DATA;
+   ctx->Array.SecondaryColor.Size = 4;
+   ctx->Array.SecondaryColor.Type = GL_FLOAT;
+   ctx->Array.SecondaryColor.Stride = 0;
+   ctx->Array.SecondaryColor.StrideB = 0;
+   ctx->Array.SecondaryColor.Ptr = NULL;
+   ctx->Array.SecondaryColor.Enabled = GL_FALSE;
+   ctx->Array.SecondaryColor.Flags = CA_CLIENT_DATA;
+   ctx->Array.FogCoord.Size = 1;
+   ctx->Array.FogCoord.Type = GL_FLOAT;
+   ctx->Array.FogCoord.Stride = 0;
+   ctx->Array.FogCoord.StrideB = 0;
+   ctx->Array.FogCoord.Ptr = NULL;
+   ctx->Array.FogCoord.Enabled = GL_FALSE;
+   ctx->Array.FogCoord.Flags = CA_CLIENT_DATA;
    ctx->Array.Index.Type = GL_FLOAT;
    ctx->Array.Index.Stride = 0;
    ctx->Array.Index.StrideB = 0;
    ctx->Array.Index.Ptr = NULL;
    ctx->Array.Index.Enabled = GL_FALSE;
+   ctx->Array.Index.Flags = CA_CLIENT_DATA;
    for (i = 0; i < MAX_TEXTURE_UNITS; i++) {
       ctx->Array.TexCoord[i].Size = 4;
       ctx->Array.TexCoord[i].Type = GL_FLOAT;
@@ -1179,12 +1197,14 @@ init_attrib_groups( GLcontext *ctx )
       ctx->Array.TexCoord[i].StrideB = 0;
       ctx->Array.TexCoord[i].Ptr = NULL;
       ctx->Array.TexCoord[i].Enabled = GL_FALSE;
+      ctx->Array.TexCoord[i].Flags = CA_CLIENT_DATA;
    }
    ctx->Array.TexCoordInterleaveFactor = 1;
    ctx->Array.EdgeFlag.Stride = 0;
    ctx->Array.EdgeFlag.StrideB = 0;
    ctx->Array.EdgeFlag.Ptr = NULL;
    ctx->Array.EdgeFlag.Enabled = GL_FALSE;
+   ctx->Array.EdgeFlag.Flags = CA_CLIENT_DATA;
    ctx->Array.ActiveTexture = 0;   /* GL_ARB_multitexture */
 
    /* Pixel transfer */
index d46ace0a65586659ccf393b73c3375e61aa0fc13..e51f8369a1ef97e53e4caa992a609d031eed2d05 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drawpix.c,v 1.52 2001/04/10 15:25:45 brianp Exp $ */
+/* $Id: drawpix.c,v 1.53 2001/04/28 08:39:17 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -73,14 +73,9 @@ _mesa_DrawPixels( GLsizei width, GLsizei height,
    }
    else if (ctx->RenderMode==GL_FEEDBACK) {
       if (ctx->Current.RasterPosValid) {
-         GLfloat color[4];
         GLfloat texcoord[4], invq;
 
         FLUSH_CURRENT(ctx, 0);
-         color[0] = CHAN_TO_FLOAT(ctx->Current.Color[0]);
-         color[1] = CHAN_TO_FLOAT(ctx->Current.Color[1]);
-         color[2] = CHAN_TO_FLOAT(ctx->Current.Color[2]);
-         color[3] = CHAN_TO_FLOAT(ctx->Current.Color[3]);
          invq = 1.0F / ctx->Current.Texcoord[0][3];
          texcoord[0] = ctx->Current.Texcoord[0][0] * invq;
          texcoord[1] = ctx->Current.Texcoord[0][1] * invq;
@@ -88,8 +83,10 @@ _mesa_DrawPixels( GLsizei width, GLsizei height,
          texcoord[3] = ctx->Current.Texcoord[0][3];
          FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN );
          _mesa_feedback_vertex( ctx,
-                             ctx->Current.RasterPos,
-                             color, ctx->Current.Index, texcoord );
+                               ctx->Current.RasterPos,
+                               ctx->Current.Color,
+                               ctx->Current.Index, 
+                               texcoord );
       }
    }
    else if (ctx->RenderMode==GL_SELECT) {
index c721bd4bfd9e5f3a5d6339d4a549b6a86c8fb85c..26a0de03b734413a8d54113b435798a216b4a7e4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: get.c,v 1.57 2001/03/18 08:53:49 gareth Exp $ */
+/* $Id: get.c,v 1.58 2001/04/28 08:39:17 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -228,10 +228,10 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_CURRENT_COLOR:
         FLUSH_CURRENT(ctx, 0);
-         params[0] = INT_TO_BOOL(ctx->Current.Color[0]);
-         params[1] = INT_TO_BOOL(ctx->Current.Color[1]);
-         params[2] = INT_TO_BOOL(ctx->Current.Color[2]);
-         params[3] = INT_TO_BOOL(ctx->Current.Color[3]);
+         params[0] = FLOAT_TO_BOOL(ctx->Current.Color[0]);
+         params[1] = FLOAT_TO_BOOL(ctx->Current.Color[1]);
+         params[2] = FLOAT_TO_BOOL(ctx->Current.Color[2]);
+         params[3] = FLOAT_TO_BOOL(ctx->Current.Color[3]);
          break;
       case GL_CURRENT_INDEX:
         FLUSH_CURRENT(ctx, 0);
@@ -1427,10 +1427,10 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
          break;
       case GL_CURRENT_COLOR:
         FLUSH_CURRENT(ctx, 0);
-         params[0] = CHAN_TO_FLOAT(ctx->Current.Color[0]);
-         params[1] = CHAN_TO_FLOAT(ctx->Current.Color[1]);
-         params[2] = CHAN_TO_FLOAT(ctx->Current.Color[2]);
-         params[3] = CHAN_TO_FLOAT(ctx->Current.Color[3]);
+         params[0] = (ctx->Current.Color[0]);
+         params[1] = (ctx->Current.Color[1]);
+         params[2] = (ctx->Current.Color[2]);
+         params[3] = (ctx->Current.Color[3]);
          break;
       case GL_CURRENT_INDEX:
         FLUSH_CURRENT(ctx, 0);
@@ -2420,9 +2420,9 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
         break;
       case GL_CURRENT_SECONDARY_COLOR_EXT:
         FLUSH_CURRENT(ctx, 0);
-         params[0] = CHAN_TO_FLOAT(ctx->Current.SecondaryColor[0]);
-         params[1] = CHAN_TO_FLOAT(ctx->Current.SecondaryColor[1]);
-         params[2] = CHAN_TO_FLOAT(ctx->Current.SecondaryColor[2]);
+         params[0] = (ctx->Current.SecondaryColor[0]);
+         params[1] = (ctx->Current.SecondaryColor[1]);
+         params[2] = (ctx->Current.SecondaryColor[2]);
         break;
       case GL_SECONDARY_COLOR_ARRAY_EXT:
          *params = (GLdouble) ctx->Array.SecondaryColor.Enabled;
@@ -2626,10 +2626,10 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_CURRENT_COLOR:
         FLUSH_CURRENT(ctx, 0);
-         params[0] = CHAN_TO_FLOAT(ctx->Current.Color[0]);
-         params[1] = CHAN_TO_FLOAT(ctx->Current.Color[1]);
-         params[2] = CHAN_TO_FLOAT(ctx->Current.Color[2]);
-         params[3] = CHAN_TO_FLOAT(ctx->Current.Color[3]);
+         params[0] = (ctx->Current.Color[0]);
+         params[1] = (ctx->Current.Color[1]);
+         params[2] = (ctx->Current.Color[2]);
+         params[3] = (ctx->Current.Color[3]);
          break;
       case GL_CURRENT_INDEX:
         FLUSH_CURRENT(ctx, 0);
@@ -3593,9 +3593,9 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
         break;
       case GL_CURRENT_SECONDARY_COLOR_EXT:
         FLUSH_CURRENT(ctx, 0);
-         params[0] = CHAN_TO_FLOAT(ctx->Current.SecondaryColor[0]);
-         params[1] = CHAN_TO_FLOAT(ctx->Current.SecondaryColor[1]);
-         params[2] = CHAN_TO_FLOAT(ctx->Current.SecondaryColor[2]);
+         params[0] = (ctx->Current.SecondaryColor[0]);
+         params[1] = (ctx->Current.SecondaryColor[1]);
+         params[2] = (ctx->Current.SecondaryColor[2]);
         break;
       case GL_SECONDARY_COLOR_ARRAY_EXT:
          *params = (GLfloat) ctx->Array.SecondaryColor.Enabled;
@@ -3773,10 +3773,10 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          *params = (GLint) ctx->Transform.ClipEnabled[i];
          break;
       case GL_COLOR_CLEAR_VALUE:
-         params[0] = FLOAT_TO_INT( CHAN_TO_FLOAT(ctx->Color.ClearColor[0]) );
-         params[1] = FLOAT_TO_INT( CHAN_TO_FLOAT(ctx->Color.ClearColor[1]) );
-         params[2] = FLOAT_TO_INT( CHAN_TO_FLOAT(ctx->Color.ClearColor[2]) );
-         params[3] = FLOAT_TO_INT( CHAN_TO_FLOAT(ctx->Color.ClearColor[3]) );
+         params[0] = FLOAT_TO_INT( (ctx->Color.ClearColor[0]) );
+         params[1] = FLOAT_TO_INT( (ctx->Color.ClearColor[1]) );
+         params[2] = FLOAT_TO_INT( (ctx->Color.ClearColor[2]) );
+         params[3] = FLOAT_TO_INT( (ctx->Color.ClearColor[3]) );
          break;
       case GL_COLOR_MATERIAL:
          *params = (GLint) ctx->Light.ColorMaterialEnabled;
@@ -3801,10 +3801,10 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_CURRENT_COLOR:
         FLUSH_CURRENT(ctx, 0);
-         params[0] = FLOAT_TO_INT( CHAN_TO_FLOAT( ctx->Current.Color[0] ) );
-         params[1] = FLOAT_TO_INT( CHAN_TO_FLOAT( ctx->Current.Color[1] ) );
-         params[2] = FLOAT_TO_INT( CHAN_TO_FLOAT( ctx->Current.Color[2] ) );
-         params[3] = FLOAT_TO_INT( CHAN_TO_FLOAT( ctx->Current.Color[3] ) );
+         params[0] = FLOAT_TO_INT( ( ctx->Current.Color[0] ) );
+         params[1] = FLOAT_TO_INT( ( ctx->Current.Color[1] ) );
+         params[2] = FLOAT_TO_INT( ( ctx->Current.Color[2] ) );
+         params[3] = FLOAT_TO_INT( ( ctx->Current.Color[3] ) );
          break;
       case GL_CURRENT_INDEX:
         FLUSH_CURRENT(ctx, 0);
@@ -4795,9 +4795,9 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
         break;
       case GL_CURRENT_SECONDARY_COLOR_EXT:
         FLUSH_CURRENT(ctx, 0);
-         params[0] = FLOAT_TO_INT( CHAN_TO_FLOAT(ctx->Current.SecondaryColor[0]) );
-         params[1] = FLOAT_TO_INT( CHAN_TO_FLOAT(ctx->Current.SecondaryColor[1]) );
-         params[2] = FLOAT_TO_INT( CHAN_TO_FLOAT(ctx->Current.SecondaryColor[2]) );
+         params[0] = FLOAT_TO_INT( (ctx->Current.SecondaryColor[0]) );
+         params[1] = FLOAT_TO_INT( (ctx->Current.SecondaryColor[1]) );
+         params[2] = FLOAT_TO_INT( (ctx->Current.SecondaryColor[2]) );
         break;
       case GL_SECONDARY_COLOR_ARRAY_EXT:
          *params = (GLint) ctx->Array.SecondaryColor.Enabled;
index ecc6e877cced07f0da97bc4c6f490cf4cf0189f7..0b79afa415ee700eeaa89458b0357b8ad88bb906 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: light.c,v 1.42 2001/03/29 16:50:32 brianp Exp $ */
+/* $Id: light.c,v 1.43 2001/04/28 08:39:17 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -745,16 +745,10 @@ void _mesa_update_material( GLcontext *ctx,
  * set by glColorMaterial().
  */
 void _mesa_update_color_material( GLcontext *ctx,
-                              const GLchan rgba[4] )
+                                 const GLfloat color[4] )
 {
    struct gl_light *light, *list = &ctx->Light.EnabledList;
    GLuint bitmask = ctx->Light.ColorMaterialBitmask;
-   GLfloat color[4];
-
-   color[0] = CHAN_TO_FLOAT(rgba[0]);
-   color[1] = CHAN_TO_FLOAT(rgba[1]);
-   color[2] = CHAN_TO_FLOAT(rgba[2]);
-   color[3] = CHAN_TO_FLOAT(rgba[3]);
 
    if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
       fprintf(stderr, "_mesa_update_color_material, mask 0x%x\n", bitmask);
index 82b6d74a5521865004795aed712b5d77fbc1f99f..79fad5a98a70b874c617c973a8c1efa9edbe444b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: light.h,v 1.12 2001/03/12 00:48:38 gareth Exp $ */
+/* $Id: light.h,v 1.13 2001/04/28 08:39:17 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -116,7 +116,7 @@ extern void _mesa_copy_material_pairs( struct gl_material dst[2],
                                        GLuint bitmask );
 
 extern void _mesa_update_color_material( GLcontext *ctx,
-                                         const GLchan rgba[4] );
+                                         const GLfloat rgba[4] );
 
 
 #endif
index cfeadf108afbd131d06bf8db975caf0fcea7aaa2..651b6bb7b95fe8b0269fd7aad13573538a036132 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mtypes.h,v 1.40 2001/04/20 16:46:04 brianp Exp $ */
+/* $Id: mtypes.h,v 1.41 2001/04/28 08:39:17 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -297,8 +297,8 @@ struct gl_current_attrib {
    /* These values valid only when FLUSH_VERTICES has been called.
     */
    GLfloat Normal[3];                          /* Current vertex normal */
-   GLchan Color[4];                            /* Current RGBA color */
-   GLchan SecondaryColor[4];                   /* Current secondary color */
+   GLfloat Color[4];                           /* Current RGBA color */
+   GLfloat SecondaryColor[4];                  /* Current secondary color */
    GLfloat FogCoord;                           /* Current Fog coord */
    GLuint Index;                               /* Current color index */
    GLboolean EdgeFlag;                         /* Current edge flag */
@@ -489,7 +489,7 @@ struct gl_light_attrib {
    GLboolean _NeedVertices;            /* Use fast shader? */
    GLuint  _Flags;                     /* LIGHT_* flags, see below */
    GLfloat _BaseColor[2][3];
-   GLchan _BaseAlpha[2];
+   GLfloat _BaseAlpha[2];
 };
 
 
@@ -970,6 +970,9 @@ struct gl_pixelstore_attrib {
 };
 
 
+#define CA_CLIENT_DATA     0x1 /* Data not alloced by mesa */
+
+
 /*
  * Client vertex array attributes
  */
@@ -979,6 +982,7 @@ struct gl_client_array {
    GLsizei Stride;             /* user-specified stride */
    GLsizei StrideB;            /* actual stride in bytes */
    void *Ptr;
+   GLuint Flags;
    GLboolean Enabled;
 };
 
index 09a4ebe8c63a8bce2c8c8dd7d3d216e68e26a280..79ec481267a1ca0686d0229b03219853f2ba6590 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: rastpos.c,v 1.22 2001/03/12 00:48:38 gareth Exp $ */
+/* $Id: rastpos.c,v 1.23 2001/04/28 08:39:17 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -274,10 +274,10 @@ raster_pos4f(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
    else {
       /* use current color or index */
       if (ctx->Visual.rgbMode) {
-         ctx->Current.RasterColor[0] = CHAN_TO_FLOAT(ctx->Current.Color[0]);
-         ctx->Current.RasterColor[1] = CHAN_TO_FLOAT(ctx->Current.Color[1]);
-         ctx->Current.RasterColor[2] = CHAN_TO_FLOAT(ctx->Current.Color[2]);
-         ctx->Current.RasterColor[3] = CHAN_TO_FLOAT(ctx->Current.Color[3]);
+         ctx->Current.RasterColor[0] = (ctx->Current.Color[0]);
+         ctx->Current.RasterColor[1] = (ctx->Current.Color[1]);
+         ctx->Current.RasterColor[2] = (ctx->Current.Color[2]);
+         ctx->Current.RasterColor[3] = (ctx->Current.Color[3]);
       }
       else {
         ctx->Current.RasterIndex = ctx->Current.Index;
index 47f6c61f5f59b70f5f8eb7d804976d740faa6542..dd7a59168c3b0dc731f7d5d592f1c1b2aef9939b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: m_translate.c,v 1.6 2001/03/12 00:48:41 gareth Exp $ */
+/* $Id: m_translate.c,v 1.7 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -167,19 +167,27 @@ static trans_4f_func  _math_trans_4f_tab[5][MAX_TYPES];
  */
 #define SRC GLubyte
 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_BYTE)
-#define TRX_3F(f,n)            /* unused */
-#define TRX_4F(f,n)            /* unused */
+#define TRX_3F(f,n)         UBYTE_TO_FLOAT(PTR_ELT(f,n))
+#define TRX_4F(f,n)         UBYTE_TO_FLOAT(PTR_ELT(f,n))
 #define TRX_UB(ub, f,n)             ub = PTR_ELT(f,n)
 #define TRX_US(us, f,n)      us = UBYTE_TO_USHORT(PTR_ELT(f,n))
 #define TRX_UI(f,n)          (GLuint)PTR_ELT(f,n)
 
 /* 4ub->4ub handled in special case below.
  */
+#define SZ 4
+#define INIT init_trans_4_GLubyte_raw
+#define DEST_4F trans_4_GLubyte_4f_raw
+#define DEST_4US trans_4_GLubyte_4us_raw
+#include "m_trans_tmp.h"
+
 
 #define SZ 3
 #define INIT init_trans_3_GLubyte_raw
 #define DEST_4UB trans_3_GLubyte_4ub_raw
 #define DEST_4US trans_3_GLubyte_4us_raw
+#define DEST_3F trans_3_GLubyte_3f_raw
+#define DEST_4F trans_3_GLubyte_4f_raw
 #include "m_trans_tmp.h"
 
 
@@ -507,14 +515,13 @@ static void init_translate_raw(void)
    MEMSET( TAB(_4us), 0, sizeof(TAB(_4us)) );
    MEMSET( TAB(_4f),  0, sizeof(TAB(_4f)) );
 
-   TAB(_4ub)[4][TYPE_IDX(GL_UNSIGNED_BYTE)] = trans_4_GLubyte_4ub_raw;
-
    init_trans_4_GLbyte_raw();
    init_trans_3_GLbyte_raw();
    init_trans_2_GLbyte_raw();
    init_trans_1_GLbyte_raw();
    init_trans_1_GLubyte_raw();
    init_trans_3_GLubyte_raw();
+   init_trans_4_GLubyte_raw();
    init_trans_4_GLshort_raw();
    init_trans_3_GLshort_raw();
    init_trans_2_GLshort_raw();
@@ -539,6 +546,8 @@ static void init_translate_raw(void)
    init_trans_3_GLfloat_raw();
    init_trans_2_GLfloat_raw();
    init_trans_1_GLfloat_raw();
+
+   TAB(_4ub)[4][TYPE_IDX(GL_UNSIGNED_BYTE)] = trans_4_GLubyte_4ub_raw;
 }
 
 
index 958eae3a29aeaf1f9ee3a5c6686df4a2c1de5f07..a12429e26df40b093d2e5671321d77019b4a3414 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ss_triangle.c,v 1.12 2001/03/12 00:48:43 gareth Exp $ */
+/* $Id: ss_triangle.c,v 1.13 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -141,8 +141,8 @@ static void _swsetup_render_point_tri( GLcontext *ctx,
    }
 }
 
-#define SS_COLOR(a,b) COPY_CHAN4(a,b)
-#define SS_SPEC(a,b) COPY_CHAN4(a,b)
+#define SS_COLOR(a,b) UNCLAMPED_FLOAT_TO_RGBA_CHAN(a,b)
+#define SS_SPEC(a,b) UNCLAMPED_FLOAT_TO_RGB_CHAN(a,b)
 #define SS_IND(a,b) (a = b)
 
 #define IND (0)
index 0c81fb891fc543f036af1b465ad3a1506a81b0c4..0db792ba2b5abf0aaf7f8f19a7376d1513d41cdd 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ss_tritmp.h,v 1.11 2001/03/21 17:11:32 pesco Exp $ */
+/* $Id: ss_tritmp.h,v 1.12 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -61,8 +61,8 @@ static void TAG(triangle)(GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
         if (facing == 1) {
            if (IND & SS_TWOSIDE_BIT) {
               if (IND & SS_RGBA_BIT) {
-                 GLchan (*vbcolor)[4] = VB->ColorPtr[1]->data;
-                 GLchan (*vbspec)[4] = VB->SecondaryColorPtr[1]->data;
+                 GLfloat (*vbcolor)[4] = (GLfloat (*)[4])VB->ColorPtr[1]->Ptr;
+                 GLfloat (*vbspec)[4] = (GLfloat (*)[4])VB->SecondaryColorPtr[1]->Ptr;
                  SS_COLOR(v[0]->color, vbcolor[e0]);
                  SS_COLOR(v[1]->color, vbcolor[e1]);
                  SS_COLOR(v[2]->color, vbcolor[e2]);
@@ -134,8 +134,8 @@ static void TAG(triangle)(GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
    if (IND & SS_TWOSIDE_BIT) {
       if (facing == 1) {
         if (IND & SS_RGBA_BIT) {
-           GLchan (*vbcolor)[4] = VB->ColorPtr[0]->data;
-           GLchan (*vbspec)[4] = VB->SecondaryColorPtr[0]->data;
+           GLfloat (*vbcolor)[4] = (GLfloat (*)[4])VB->ColorPtr[0]->Ptr;
+           GLfloat (*vbspec)[4] = (GLfloat (*)[4])VB->SecondaryColorPtr[0]->Ptr;
            SS_COLOR(v[0]->color, vbcolor[e0]);
            SS_COLOR(v[1]->color, vbcolor[e1]);
            SS_COLOR(v[2]->color, vbcolor[e2]);
index 0a7c1ded5457eab16c6461cc77a917ba680f713c..7e924b5a7e177ea97a575efd806b53eb6a81bd3c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ss_vbtmp.h,v 1.13 2001/03/29 16:50:33 brianp Exp $ */
+/* $Id: ss_vbtmp.h,v 1.14 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -35,8 +35,8 @@ static void TAG(rs)(GLcontext *ctx, GLuint start, GLuint end, GLuint newinputs )
    SWvertex *v;
    GLfloat (*proj)[4];         /* projected clip coordinates */
    GLfloat (*tc[MAX_TEXTURE_UNITS])[4];
-   GLchan (*color)[4];
-   GLchan (*spec)[4];
+   GLfloat (*color)[4];
+   GLfloat (*spec)[4];
    GLuint *index;
    GLfloat *fog;
    GLfloat *pointSize;
@@ -57,6 +57,10 @@ static void TAG(rs)(GLcontext *ctx, GLuint start, GLuint end, GLuint newinputs )
    }
 
    /* TODO:  Get import_client_data to pad vectors out to 4 cleanly.
+    *
+    * NOTE: This has the effect of converting any remaining ubyte
+    *       colors to floats...  As they're already there 90% of the
+    *       time, this isn't a bad thing.  
     */
    if (VB->importable_data)
       VB->import_data( ctx, VB->importable_data & newinputs,
@@ -92,9 +96,9 @@ static void TAG(rs)(GLcontext *ctx, GLuint start, GLuint end, GLuint newinputs )
    if (IND & FOG)
       fog = VB->FogCoordPtr->data;
    if (IND & COLOR)
-      color = VB->ColorPtr[0]->data;
+      color = (GLfloat (*)[4])VB->ColorPtr[0]->Ptr;
    if (IND & SPEC)
-      spec = VB->SecondaryColorPtr[0]->data;
+      spec = (GLfloat (*)[4])VB->SecondaryColorPtr[0]->Ptr;
    if (IND & INDEX)
       index = VB->IndexPtr[0]->data;
    if (IND & POINT)
@@ -120,10 +124,10 @@ static void TAG(rs)(GLcontext *ctx, GLuint start, GLuint end, GLuint newinputs )
         }
 
         if (IND & COLOR)
-           COPY_CHAN4(v->color, color[i]);
+           UNCLAMPED_FLOAT_TO_RGBA_CHAN(v->color, color[i]);
 
         if (IND & SPEC)
-           COPY_CHAN4(v->specular, spec[i]);
+           UNCLAMPED_FLOAT_TO_RGBA_CHAN(v->specular, spec[i]);
 
         if (IND & FOG)
            v->fog = fog[i];
index e269773042666f94120dc2030746b54206888736..95d1f455485f5b709f26c06b8366f533c24ef873 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_array_api.c,v 1.11 2001/04/26 14:51:06 keithw Exp $ */
+/* $Id: t_array_api.c,v 1.12 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -417,9 +417,9 @@ void _tnl_array_init( GLcontext *ctx )
    /* Setup vector pointers that will be used to bind arrays to VB's.
     */
    _mesa_vector4f_init( &tmp->Obj, 0, 0 );
-   _mesa_vector3f_init( &tmp->Normal, 0, 0 );
-   _mesa_vector4chan_init( &tmp->Color, 0, 0 );
-   _mesa_vector4chan_init( &tmp->SecondaryColor, 0, 0 );
+   _mesa_vector3f_init( &tmp->Normal, 0, 0 );   
+/*     _mesa_vector4chan_init( &tmp->Color, 0, 0 ); */
+/*     _mesa_vector4chan_init( &tmp->SecondaryColor, 0, 0 ); */
    _mesa_vector1f_init( &tmp->FogCoord, 0, 0 );
    _mesa_vector1ui_init( &tmp->Index, 0, 0 );
    _mesa_vector1ub_init( &tmp->EdgeFlag, 0, 0 );
index 7bb208cf72555d06cf676dc9354e9a4b726c3435..78ba917570538cfe9799cdcd76db75e7cdd356f4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_array_import.c,v 1.13 2001/04/26 14:53:48 keithw Exp $ */
+/* $Id: t_array_import.c,v 1.14 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -43,8 +43,8 @@
 
 
 static void _tnl_import_vertex( GLcontext *ctx,
-                          GLboolean writeable,
-                          GLboolean stride )
+                               GLboolean writeable,
+                               GLboolean stride )
 {
    struct gl_client_array *tmp;
    GLboolean is_writeable = 0;
@@ -69,8 +69,8 @@ static void _tnl_import_vertex( GLcontext *ctx,
 }
 
 static void _tnl_import_normal( GLcontext *ctx,
-                          GLboolean writeable,
-                          GLboolean stride )
+                               GLboolean writeable,
+                               GLboolean stride )
 {
    struct gl_client_array *tmp;
    GLboolean is_writeable = 0;
@@ -92,6 +92,7 @@ static void _tnl_import_normal( GLcontext *ctx,
 
 
 static void _tnl_import_color( GLcontext *ctx,
+                              GLenum type,
                               GLboolean writeable,
                               GLboolean stride )
 {
@@ -102,50 +103,38 @@ static void _tnl_import_color( GLcontext *ctx,
 /*     fprintf(stderr, "%s\n", __FUNCTION__); */
 
    tmp = _ac_import_color(ctx,
-                         GL_UNSIGNED_BYTE,
-                         stride ? 4*sizeof(GLubyte) : 0,
+                         type,
+                         stride ? 4*sizeof(GLfloat) : 0,
                          4,
                          writeable,
                          &is_writeable);
 
-   inputs->Color.data = (GLchan (*)[4]) tmp->Ptr;
-   inputs->Color.start = (GLchan *) tmp->Ptr;
-   inputs->Color.stride = tmp->StrideB;
-   inputs->Color.flags &= ~(VEC_BAD_STRIDE|VEC_NOT_WRITEABLE);
-   if (inputs->Color.stride != 4*sizeof(GLchan))
-      inputs->Color.flags |= VEC_BAD_STRIDE;
-   if (!is_writeable)
-      inputs->Color.flags |= VEC_NOT_WRITEABLE;
+   inputs->Color = *tmp;
 }
 
 
 static void _tnl_import_secondarycolor( GLcontext *ctx,
-                                  GLboolean writeable,
-                                  GLboolean stride )
+                                       GLenum type,
+                                       GLboolean writeable,
+                                       GLboolean stride )
 {
    struct gl_client_array *tmp;
    GLboolean is_writeable = 0;
    struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs;
 
-   tmp = _ac_import_secondarycolor(ctx, GL_UNSIGNED_BYTE,
-                                  stride ? 4*sizeof(GLubyte) : 0,
+   tmp = _ac_import_secondarycolor(ctx, 
+                                  type,
+                                  stride ? 4*sizeof(GLfloat) : 0,
                                   4,
                                   writeable,
                                   &is_writeable);
 
-   inputs->SecondaryColor.data = (GLchan (*)[4]) tmp->Ptr;
-   inputs->SecondaryColor.start = (GLchan *) tmp->Ptr;
-   inputs->SecondaryColor.stride = tmp->StrideB;
-   inputs->SecondaryColor.flags &= ~(VEC_BAD_STRIDE|VEC_NOT_WRITEABLE);
-   if (inputs->SecondaryColor.stride != 4*sizeof(GLubyte))
-      inputs->SecondaryColor.flags |= VEC_BAD_STRIDE;
-   if (!is_writeable)
-      inputs->SecondaryColor.flags |= VEC_NOT_WRITEABLE;
+   inputs->SecondaryColor = *tmp;
 }
 
 static void _tnl_import_fogcoord( GLcontext *ctx,
-                            GLboolean writeable,
-                            GLboolean stride )
+                                 GLboolean writeable,
+                                 GLboolean stride )
 {
    struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs;
     struct gl_client_array *tmp;
@@ -166,8 +155,8 @@ static void _tnl_import_fogcoord( GLcontext *ctx,
 }
 
 static void _tnl_import_index( GLcontext *ctx,
-                         GLboolean writeable,
-                         GLboolean stride )
+                              GLboolean writeable,
+                              GLboolean stride )
 {
    struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs;
    struct gl_client_array *tmp;
@@ -189,9 +178,9 @@ static void _tnl_import_index( GLcontext *ctx,
 
 
 static void _tnl_import_texcoord( GLcontext *ctx,
-                            GLuint i,
-                            GLboolean writeable,
-                            GLboolean stride )
+                                 GLuint i,
+                                 GLboolean writeable,
+                                 GLboolean stride )
 {
    struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs;
    struct gl_client_array *tmp;
@@ -216,8 +205,8 @@ static void _tnl_import_texcoord( GLcontext *ctx,
 
 
 static void _tnl_import_edgeflag( GLcontext *ctx,
-                            GLboolean writeable,
-                            GLboolean stride )
+                                 GLboolean writeable,
+                                 GLboolean stride )
 {
    struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs;
    struct gl_client_array *tmp;
@@ -253,8 +242,11 @@ static void _tnl_upgrade_client_data( GLcontext *ctx,
    GLboolean writeable = (flags & VEC_NOT_WRITEABLE) != 0;
    GLboolean stride = (flags & VEC_BAD_STRIDE) != 0;
    struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs;
+   GLuint ca_flags = 0;
    (void) inputs;
 
+   if (writeable || stride) ca_flags |= CA_CLIENT_DATA;
+
    if ((required & VERT_CLIP) && VB->ClipPtr == VB->ObjPtr)
       required |= VERT_OBJ;
 
@@ -272,15 +264,16 @@ static void _tnl_upgrade_client_data( GLcontext *ctx,
       VB->importable_data &= ~VERT_NORM;
    }
 
-   if ((required & VERT_RGBA) && (VB->ColorPtr[0]->flags & flags)) {
+   if ((required & VERT_RGBA) && (VB->ColorPtr[0]->Flags & ca_flags)) {
       ASSERT(VB->ColorPtr[0] == &inputs->Color);
-      _tnl_import_color( ctx, writeable, stride );
+      _tnl_import_color( ctx, GL_FLOAT, writeable, stride );
       VB->importable_data &= ~VERT_RGBA;
    }
 
-   if ((required & VERT_SPEC_RGB) && (VB->SecondaryColorPtr[0]->flags&flags)) {
+   if ((required & VERT_SPEC_RGB) && 
+       (VB->SecondaryColorPtr[0]->Flags & ca_flags)) {
       ASSERT(VB->SecondaryColorPtr[0] == &inputs->SecondaryColor);
-      _tnl_import_secondarycolor( ctx, writeable, stride );
+      _tnl_import_secondarycolor( ctx, GL_FLOAT, writeable, stride );
       VB->importable_data &= ~VERT_SPEC_RGB;
    }
 
@@ -308,8 +301,6 @@ static void _tnl_upgrade_client_data( GLcontext *ctx,
 
 
 
-
-
 void _tnl_vb_bind_arrays( GLcontext *ctx, GLint start, GLsizei count )
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
@@ -360,11 +351,13 @@ void _tnl_vb_bind_arrays( GLcontext *ctx, GLint start, GLsizei count )
 
    if (inputs & VERT_RGBA) {
       if (imports & VERT_RGBA) {
-        _tnl_import_color( ctx, 0, 0 );
-        tmp->Color.count = VB->Count;
+        _tnl_import_color( ctx, 0, 0, 0 );
       }
       VB->ColorPtr[0] = &tmp->Color;
       VB->ColorPtr[1] = 0;
+/*        fprintf(stderr, "VB->ColorPtr[0]->StrideB %d Type %s\n",  */
+/*           VB->ColorPtr[0]->StrideB, */
+/*           _mesa_lookup_enum_by_nr(VB->ColorPtr[0]->Type)); */
    }
 
    if (inputs & VERT_INDEX) {
@@ -392,9 +385,9 @@ void _tnl_vb_bind_arrays( GLcontext *ctx, GLint start, GLsizei count )
 
    if (inputs & VERT_SPEC_RGB) {
       if (imports & VERT_SPEC_RGB) {
-        _tnl_import_secondarycolor( ctx, 0, 0 );
-        tmp->SecondaryColor.count = VB->Count;
+        _tnl_import_secondarycolor( ctx, 0, 0, 0 );
       }
+
       VB->SecondaryColorPtr[0] = &tmp->SecondaryColor;
       VB->SecondaryColorPtr[1] = 0;
    }
@@ -414,9 +407,10 @@ void _tnl_vb_bind_arrays( GLcontext *ctx, GLint start, GLsizei count )
    VB->Primitive = tnl->tmp_primitive;
    VB->PrimitiveLength = tnl->tmp_primitive_length;
    VB->import_data = _tnl_upgrade_client_data;
-   VB->importable_data = imports & VERT_FIXUP;
-/*     _tnl_print_vert_flags("_tnl_vb_bind_arrays: importable", VB->importable_data); */
+   VB->importable_data = inputs & VERT_FIXUP;
 
+/*     _tnl_print_vert_flags("_tnl_vb_bind_arrays: importable",  */
+/*                      VB->importable_data); */
 }
 
 
@@ -469,21 +463,21 @@ void _tnl_fill_immediate_drawarrays( GLcontext *ctx, struct immediate *IM,
    }
 
    if (required & VERT_RGBA) {
-      _math_trans_4chan( IM->Color + IM->Start,
-                      ctx->Array.Color.Ptr,
-                      ctx->Array.Color.StrideB,
-                      ctx->Array.Color.Type,
-                      ctx->Array.Color.Size,
-                      start, n );
+      _math_trans_4f( IM->Color + IM->Start,
+                     ctx->Array.Color.Ptr,
+                     ctx->Array.Color.StrideB,
+                     ctx->Array.Color.Type,
+                     ctx->Array.Color.Size,
+                     start, n );
    }
 
    if (required & VERT_SPEC_RGB) {
-      _math_trans_4chan( IM->SecondaryColor + IM->Start,
-                        ctx->Array.SecondaryColor.Ptr,
-                        ctx->Array.SecondaryColor.StrideB,
-                        ctx->Array.SecondaryColor.Type,
-                        ctx->Array.SecondaryColor.Size,
-                        start, n );
+      _math_trans_4f( IM->SecondaryColor + IM->Start,
+                     ctx->Array.SecondaryColor.Ptr,
+                     ctx->Array.SecondaryColor.StrideB,
+                     ctx->Array.SecondaryColor.Type,
+                     ctx->Array.SecondaryColor.Size,
+                     start, n );
    }
 
    if (required & VERT_FOG_COORD) {
index 1236850b91d98d342eb582560544840b12164c7b..fbcb795d3b76c709edb6bc2cca52ea5890607587 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_array_import.h,v 1.2 2001/03/12 00:48:43 gareth Exp $ */
+/* $Id: t_array_import.h,v 1.3 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -38,5 +38,4 @@ extern void _tnl_fill_immediate_drawarrays( GLcontext *ctx,
 
 extern void _tnl_array_import_init( GLcontext *ctx );
 
-
 #endif
index 7e5c0de36351829a0193630f59bb0593de02c2c0..5b57fe863540dff45b1b845086be0ef8f35cf289 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_context.h,v 1.20 2001/04/26 14:53:48 keithw Exp $ */
+/* $Id: t_context.h,v 1.21 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -201,14 +201,14 @@ struct immediate
    GLuint  Primitive[IMM_SIZE];            /* BEGIN/END */
    GLuint  PrimitiveLength[IMM_SIZE]; /* BEGIN/END */
    GLuint  Flag[IMM_SIZE];         /* VERT_* flags */
-   GLchan  Color[IMM_SIZE][4];
+   GLfloat Color[IMM_SIZE][4];
    GLfloat Obj[IMM_SIZE][4];
    GLfloat Normal[IMM_SIZE][3];
    GLfloat TexCoord0[IMM_SIZE][4];  /* just VERT_TEX0 */
    GLuint  Elt[IMM_SIZE];
    GLubyte EdgeFlag[IMM_SIZE];
    GLuint  Index[IMM_SIZE];
-   GLchan  SecondaryColor[IMM_SIZE][4];
+   GLfloat SecondaryColor[IMM_SIZE][4];
    GLfloat FogCoord[IMM_SIZE];
 };
 
@@ -217,8 +217,8 @@ struct vertex_arrays
 {
    GLvector4f  Obj;
    GLvector3f  Normal;
-   GLvector4chan Color;
-   GLvector4chan SecondaryColor;
+   struct gl_client_array Color;
+   struct gl_client_array SecondaryColor;
    GLvector1ui Index;
    GLvector1ub EdgeFlag;
    GLvector4f  TexCoord[MAX_TEXTURE_UNITS];
@@ -256,8 +256,8 @@ typedef struct vertex_buffer
    GLboolean   *EdgeFlag;                      /* VERT_EDGE */
    GLvector4f  *TexCoordPtr[MAX_TEXTURE_UNITS];        /* VERT_TEX_0..n */
    GLvector1ui *IndexPtr[2];                   /* VERT_INDEX */
-   GLvector4chan *ColorPtr[2];                 /* VERT_RGBA */
-   GLvector4chan *SecondaryColorPtr[2];         /* VERT_SPEC_RGB */
+   struct gl_client_array *ColorPtr[2];                        /* VERT_RGBA */
+   struct gl_client_array *SecondaryColorPtr[2];         /* VERT_SPEC_RGB */
    GLvector1f  *FogCoordPtr;                   /* VERT_FOG_COORD */
    GLvector1f  *PointSizePtr;                  /* VERT_POINT_SIZE */
    GLmaterial (*Material)[2];                   /* VERT_MATERIAL, optional */
index 375e4b63090d6f1b942dc23c7bcbce57ad839db5..5b4630881bb05759ae18c439329cf3066113509b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_api.c,v 1.10 2001/04/09 14:47:34 keithw Exp $ */
+/* $Id: t_imm_api.c,v 1.11 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -348,56 +348,29 @@ _tnl_End(void)
    IM->Color[count][3] = a;                    \
 }
 
-#define COLORV( IM, v )                                \
-{                                              \
-   GLuint count = IM->Count;                   \
-   IM->Flag[count] |= VERT_RGBA;               \
-   COPY_CHAN4(IM->Color[count], v);            \
-}
-
-
 static void
 _tnl_Color3f( GLfloat red, GLfloat green, GLfloat blue )
 {
-   GLchan col[4];
    GET_IMMEDIATE;
-   UNCLAMPED_FLOAT_TO_CHAN(col[0], red);
-   UNCLAMPED_FLOAT_TO_CHAN(col[1], green);
-   UNCLAMPED_FLOAT_TO_CHAN(col[2], blue);
-   col[3] = CHAN_MAX;
-   COLORV( IM, col );
+   COLOR( IM, red, green, blue, 1.0 );
 }
 
-
 static void
 _tnl_Color3ub( GLubyte red, GLubyte green, GLubyte blue )
 {
-#if CHAN_BITS == 8
-   GET_IMMEDIATE;
-   COLOR( IM, red, green, blue, CHAN_MAX );
-#else
    GET_IMMEDIATE;
    COLOR(IM,
-         UBYTE_TO_CHAN(red),
-         UBYTE_TO_CHAN(green),
-         UBYTE_TO_CHAN(blue),
-         CHAN_MAX);
-#endif
+         UBYTE_TO_FLOAT(red),
+         UBYTE_TO_FLOAT(green),
+         UBYTE_TO_FLOAT(blue),
+         1.0);
 }
 
-
-
-
 static void
 _tnl_Color4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
 {
-   GLchan col[4];
    GET_IMMEDIATE;
-   UNCLAMPED_FLOAT_TO_CHAN(col[0], red);
-   UNCLAMPED_FLOAT_TO_CHAN(col[1], green);
-   UNCLAMPED_FLOAT_TO_CHAN(col[2], blue);
-   UNCLAMPED_FLOAT_TO_CHAN(col[3], alpha);
-   COLORV( IM, col );
+   COLOR( IM, red, green, blue, alpha );
 }
 
 static void
@@ -405,61 +378,46 @@ _tnl_Color4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha )
 {
    GET_IMMEDIATE;
    COLOR(IM,
-         UBYTE_TO_CHAN(red),
-         UBYTE_TO_CHAN(green),
-         UBYTE_TO_CHAN(blue),
-         UBYTE_TO_CHAN(alpha));
+         UBYTE_TO_FLOAT(red),
+         UBYTE_TO_FLOAT(green),
+         UBYTE_TO_FLOAT(blue),
+         UBYTE_TO_FLOAT(alpha));
 }
 
-
 static void
 _tnl_Color3fv( const GLfloat *v )
 {
-   GLchan col[4];
    GET_IMMEDIATE;
-   UNCLAMPED_FLOAT_TO_CHAN(col[0], v[0]);
-   UNCLAMPED_FLOAT_TO_CHAN(col[1], v[1]);
-   UNCLAMPED_FLOAT_TO_CHAN(col[2], v[2]);
-   col[3] = CHAN_MAX;
-   COLORV( IM, col );
+   COLOR( IM, v[0], v[1], v[2], 1.0 );
 }
 
-
-
 static void
 _tnl_Color3ubv( const GLubyte *v )
 {
    GET_IMMEDIATE;
    COLOR(IM,
-         UBYTE_TO_CHAN(v[0]),
-         UBYTE_TO_CHAN(v[1]),
-         UBYTE_TO_CHAN(v[2]),
-         CHAN_MAX );
+         UBYTE_TO_FLOAT(v[0]),
+         UBYTE_TO_FLOAT(v[1]),
+         UBYTE_TO_FLOAT(v[2]),
+         1.0 );
 }
 
 static void
 _tnl_Color4fv( const GLfloat *v )
 {
-   GLchan col[4];
    GET_IMMEDIATE;
-   UNCLAMPED_FLOAT_TO_CHAN(col[0], v[0]);
-   UNCLAMPED_FLOAT_TO_CHAN(col[1], v[1]);
-   UNCLAMPED_FLOAT_TO_CHAN(col[2], v[2]);
-   UNCLAMPED_FLOAT_TO_CHAN(col[3], v[3]);
-   COLORV( IM, col );
+   COLOR( IM, v[0], v[1], v[2], v[3] );
 }
 
-
-
 static void
 _tnl_Color4ubv( const GLubyte *v)
 {
    GET_IMMEDIATE;
    COLOR(IM,
-         UBYTE_TO_CHAN(v[0]),
-         UBYTE_TO_CHAN(v[1]),
-         UBYTE_TO_CHAN(v[2]),
-         UBYTE_TO_CHAN(v[3]));
+         UBYTE_TO_FLOAT(v[0]),
+         UBYTE_TO_FLOAT(v[1]),
+         UBYTE_TO_FLOAT(v[2]),
+         UBYTE_TO_FLOAT(v[3]));
 }
 
 
@@ -474,65 +432,38 @@ _tnl_Color4ubv( const GLubyte *v)
    IM->SecondaryColor[count][2] = b;           \
 }
 
-#define SECONDARY_COLORV( IM, v )              \
-{                                              \
-   GLuint count = IM->Count;                   \
-   IM->Flag[count] |= VERT_SPEC_RGB;           \
-   IM->SecondaryColor[count][0] = v[0];                \
-   IM->SecondaryColor[count][1] = v[1];                \
-   IM->SecondaryColor[count][2] = v[2];                \
-}
-
-
-
-
 static void
 _tnl_SecondaryColor3fEXT( GLfloat red, GLfloat green, GLfloat blue )
 {
-   GLchan col[3];
    GET_IMMEDIATE;
-   UNCLAMPED_FLOAT_TO_CHAN(col[0], red);
-   UNCLAMPED_FLOAT_TO_CHAN(col[1], green);
-   UNCLAMPED_FLOAT_TO_CHAN(col[2], blue);
-   SECONDARY_COLORV( IM, col );
+   SECONDARY_COLOR( IM, red, green, blue );
 }
 
-
-
 static void
 _tnl_SecondaryColor3ubEXT( GLubyte red, GLubyte green, GLubyte blue )
 {
    GET_IMMEDIATE;
    SECONDARY_COLOR(IM,
-                   UBYTE_TO_CHAN(red),
-                   UBYTE_TO_CHAN(green),
-                   UBYTE_TO_CHAN(blue));
+                   UBYTE_TO_FLOAT(red),
+                   UBYTE_TO_FLOAT(green),
+                   UBYTE_TO_FLOAT(blue));
 }
 
-
-
-
 static void
 _tnl_SecondaryColor3fvEXT( const GLfloat *v )
 {
-   GLchan col[3];
    GET_IMMEDIATE;
-   UNCLAMPED_FLOAT_TO_CHAN(col[0], v[0]);
-   UNCLAMPED_FLOAT_TO_CHAN(col[1], v[1]);
-   UNCLAMPED_FLOAT_TO_CHAN(col[2], v[2]);
-   SECONDARY_COLORV( IM, col );
+   SECONDARY_COLOR( IM, v[0], v[1], v[2] );
 }
 
-
-
 static void
 _tnl_SecondaryColor3ubvEXT( const GLubyte *v )
 {
    GET_IMMEDIATE;
    SECONDARY_COLOR(IM,
-                   UBYTE_TO_CHAN(v[0]),
-                   UBYTE_TO_CHAN(v[1]),
-                   UBYTE_TO_CHAN(v[2]));
+                   UBYTE_TO_FLOAT(v[0]),
+                   UBYTE_TO_FLOAT(v[1]),
+                   UBYTE_TO_FLOAT(v[2]));
 }
 
 
index ded4ee4d0c16b1646cf1e074f5940324cdac8156..d641ee10493567b5060c6db0f663e937192beb6e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_debug.c,v 1.2 2001/03/12 00:48:43 gareth Exp $ */
+/* $Id: t_imm_debug.c,v 1.3 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -125,12 +125,12 @@ void _tnl_print_cassette( struct immediate *IM )
       }
 
       if (req & flags[i] & VERT_RGBA)
-        fprintf(stderr, " Rgba %d %d %d %d ",
+        fprintf(stderr, " Rgba %f %f %f %f ",
                IM->Color[i][0], IM->Color[i][1],
                IM->Color[i][2], IM->Color[i][3]);
 
       if (req & flags[i] & VERT_SPEC_RGB)
-        fprintf(stderr, " Spec %d %d %d ",
+        fprintf(stderr, " Spec %f %f %f ",
                IM->SecondaryColor[i][0], IM->SecondaryColor[i][1],
                IM->SecondaryColor[i][2]);
 
index 1386ef16f7c3a8ff1e421fb916946f8368e84f65..c339897bc95e3590f7ebfbbb0ce0892e8f269448 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_elt.c,v 1.7 2001/04/26 14:53:48 keithw Exp $ */
+/* $Id: t_imm_elt.c,v 1.8 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -647,6 +647,7 @@ static void _tnl_trans_elt_1ub(GLubyte *to,
 }
 
 
+#if 0
 static void _tnl_trans_elt_4ub(GLubyte (*to)[4],
                                const struct gl_client_array *from,
                                GLuint *flags,
@@ -665,7 +666,9 @@ static void _tnl_trans_elt_4ub(GLubyte (*to)[4],
                                                              n );
 
 }
+#endif
 
+#if 0
 static void _tnl_trans_elt_4us(GLushort (*to)[4],
                                const struct gl_client_array *from,
                                GLuint *flags,
@@ -684,6 +687,7 @@ static void _tnl_trans_elt_4us(GLushort (*to)[4],
                                                              n );
 
 }
+#endif
 
 static void _tnl_trans_elt_4f(GLfloat (*to)[4],
                               const struct gl_client_array *from,
@@ -704,25 +708,6 @@ static void _tnl_trans_elt_4f(GLfloat (*to)[4],
 
 }
 
-static void _tnl_trans_elt_4chan(GLchan (*to)[4],
-                               const struct gl_client_array *from,
-                               GLuint *flags,
-                               GLuint *elts,
-                               GLuint match,
-                               GLuint start,
-                               GLuint n )
-{
-#if CHAN_TYPE == GL_UNSIGNED_BYTE
-      _tnl_trans_elt_4ub( to, from, flags, elts, match, start, n );
-      (void)_tnl_trans_elt_4us;
-#elif CHAN_TYPE == GL_UNSIGNED_SHORT
-      _tnl_trans_elt_4us( to, from, flags, elts, match, start, n );
-#elif CHAN_TYPE == GL_FLOAT
-      _tnl_trans_elt_4f( to, from, flags, elts, match, start, n );
-      (void)_tnl_trans_elt_4us;
-#endif
-}
-
 
 
 static void _tnl_trans_elt_3f(GLfloat (*to)[3],
@@ -789,17 +774,17 @@ void _tnl_translate_array_elts( GLcontext *ctx, struct immediate *IM,
                          start, count);
 
    if (translate & VERT_RGBA) {
-      _tnl_trans_elt_4chan( IM->Color,
-                          &ctx->Array.Color,
-                          flags, elts, (VERT_ELT|VERT_RGBA),
-                          start, count);
+      _tnl_trans_elt_4f( IM->Color,
+                        &ctx->Array.Color,
+                        flags, elts, (VERT_ELT|VERT_RGBA),
+                        start, count);
    }
 
    if (translate & VERT_SPEC_RGB) {
-      _tnl_trans_elt_4chan( IM->SecondaryColor,
-                           &ctx->Array.SecondaryColor,
-                           flags, elts, (VERT_ELT|VERT_SPEC_RGB),
-                           start, count);
+      _tnl_trans_elt_4f( IM->SecondaryColor,
+                        &ctx->Array.SecondaryColor,
+                        flags, elts, (VERT_ELT|VERT_SPEC_RGB),
+                        start, count);
    }
 
    if (translate & VERT_FOG_COORD)
index 21529a42b5aad78974b25ac6ac5a49ec620deac8..d06f702e5bc178504b9346e2a7cc0eab3accd6bf 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_eval.c,v 1.7 2001/04/26 14:53:48 keithw Exp $ */
+/* $Id: t_imm_eval.c,v 1.8 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -85,10 +85,10 @@ static const GLubyte dirty_flags[5] = {
 
 
 static void eval1_4f( GLvector4f *dest,
-                            GLfloat coord[][4],
-                            const GLuint *flags,
-                            GLuint dimension,
-                            struct gl_1d_map *map )
+                     GLfloat coord[][4],
+                     const GLuint *flags,
+                     GLuint dimension,
+                     struct gl_1d_map *map )
 {
    const GLfloat u1 = map->u1;
    const GLfloat du = map->du;
@@ -107,6 +107,31 @@ static void eval1_4f( GLvector4f *dest,
    dest->flags |= dirty_flags[dimension];
 }
 
+static void eval1_4f_ca( struct gl_client_array *dest,
+                        GLfloat coord[][4],
+                        const GLuint *flags,
+                        GLuint dimension,
+                        struct gl_1d_map *map )
+{
+   const GLfloat u1 = map->u1;
+   const GLfloat du = map->du;
+   GLfloat (*to)[4] = (GLfloat (*)[4])dest->Ptr;
+   GLuint i;
+
+   ASSERT(dest->Type == GL_FLOAT);
+   ASSERT(dest->StrideB == 4 * sizeof(GLfloat));
+
+   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
+      if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
+        GLfloat u = (coord[i][0] - u1) * du;
+        ASSIGN_4V(to[i], 0,0,0,1);
+        _math_horner_bezier_curve(map->Points, to[i], u,
+                                  dimension, map->Order);
+      }
+
+   dest->Size = MAX2(dest->Size, dimension);
+}
+
 
 static void eval1_1ui( GLvector1ui *dest,
                       GLfloat coord[][4],
@@ -145,25 +170,6 @@ static void eval1_norm( GLvector3f *dest,
       }
 }
 
-static void eval1_color( GLvector4chan *dest,
-                        GLfloat coord[][4],
-                        const GLuint *flags,
-                        struct gl_1d_map *map )
-{
-   const GLfloat u1 = map->u1;
-   const GLfloat du = map->du;
-   GLchan (*to)[4] = dest->data;
-   GLuint i;
-
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++) {
-      if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
-        GLfloat u = (coord[i][0] - u1) * du;
-        GLfloat fcolor[4];
-        _math_horner_bezier_curve(map->Points, fcolor, u, 4, map->Order);
-         UNCLAMPED_FLOAT_TO_RGBA_CHAN(to[i], fcolor);
-      }
-   }
-}
 
 
 
@@ -227,6 +233,33 @@ static void eval2_4f( GLvector4f *dest,
    dest->flags |= dirty_flags[dimension];
 }
 
+static void eval2_4f_ca( struct gl_client_array *dest,
+                        GLfloat coord[][4],
+                        const GLuint *flags,
+                        GLuint dimension,
+                        struct gl_2d_map *map )
+{
+   const GLfloat u1 = map->u1;
+   const GLfloat du = map->du;
+   const GLfloat v1 = map->v1;
+   const GLfloat dv = map->dv;
+   GLfloat (*to)[4] = (GLfloat (*)[4])dest->Ptr;
+   GLuint i;
+
+   ASSERT(dest->Type == GL_FLOAT);
+   ASSERT(dest->StrideB == 4 * sizeof(GLfloat));
+
+   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
+      if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
+        GLfloat u = (coord[i][0] - u1) * du;
+        GLfloat v = (coord[i][1] - v1) * dv;
+        _math_horner_bezier_surf(map->Points, to[i], u, v, dimension,
+                                 map->Uorder, map->Vorder);
+      }
+
+   dest->Size = MAX2(dest->Size, dimension);
+}
+
 
 static void eval2_norm( GLvector3f *dest,
                        GLfloat coord[][4],
@@ -277,29 +310,6 @@ static void eval2_1ui( GLvector1ui *dest,
 
 
 
-static void eval2_color( GLvector4chan *dest,
-                        GLfloat coord[][4],
-                        GLuint *flags,
-                        struct gl_2d_map *map )
-{
-   const GLfloat u1 = map->u1;
-   const GLfloat du = map->du;
-   const GLfloat v1 = map->v1;
-   const GLfloat dv = map->dv;
-   GLchan (*to)[4] = dest->data;
-   GLuint i;
-
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++) {
-      if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
-        GLfloat u = (coord[i][0] - u1) * du;
-        GLfloat v = (coord[i][1] - v1) * dv;
-        GLfloat fcolor[4];
-        _math_horner_bezier_surf(map->Points, fcolor, u, v, 4,
-                                 map->Uorder, map->Vorder);
-         UNCLAMPED_FLOAT_TO_RGBA_CHAN(to[i], fcolor);
-      }
-   }
-}
 
 
 
@@ -313,10 +323,6 @@ static void copy_3f( GLfloat to[][3], GLfloat from[][3], GLuint count )
    MEMCPY( to, from, (count) * sizeof(to[0]));
 }
 
-static void copy_4chan( GLchan to[][4], GLchan from[][4], GLuint count )
-{
-   MEMCPY( to, from, (count) * sizeof(to[0]));
-}
 
 static void copy_1ui( GLuint to[], GLuint from[], GLuint count )
 {
@@ -496,18 +502,17 @@ void _tnl_eval_vb( GLcontext *ctx,
       GLuint generated = 0;
 
       if (!all_eval)
-        copy_4chan( store->Color, tmp->Color.data, count );
+        copy_4f( store->Color, (GLfloat (*)[4])tmp->Color.Ptr, count );
 
-      tmp->Color.data = store->Color;
-      tmp->Color.start = (GLchan *) store->Color;
+      tmp->Color.Ptr = store->Color;
 
       if (ctx->Eval.Map1Color4 && any_eval1) {
-        eval1_color( &tmp->Color, coord, flags, &ctx->EvalMap.Map1Color4 );
+        eval1_4f_ca( &tmp->Color, coord, flags, 4, &ctx->EvalMap.Map1Color4 );
         generated |= VERT_EVAL_C1|VERT_EVAL_P1;
       }
 
       if (ctx->Eval.Map2Color4 && any_eval2) {
-        eval2_color( &tmp->Color, coord, flags, &ctx->EvalMap.Map2Color4 );
+        eval2_4f_ca( &tmp->Color, coord, flags, 4, &ctx->EvalMap.Map2Color4 );
         generated |= VERT_EVAL_C2|VERT_EVAL_P2;
       }
 
@@ -515,11 +520,11 @@ void _tnl_eval_vb( GLcontext *ctx,
        * maps are disabled.
        */
       if (purge_flags & generated)
-        _tnl_fixup_4chan( store->Color, flags, 0, 
-                          VERT_RGBA|
-                          VERT_OBJ|
-                          generated|
-                          (VERT_EVAL_ANY&~purge_flags) );
+        _tnl_fixup_4f( store->Color, flags, 0, 
+                       VERT_RGBA|
+                       VERT_OBJ|
+                       generated|
+                       (VERT_EVAL_ANY&~purge_flags) );
    }
 
 
index a5752535908acc04ed3cce8167c81f139c946c39..18eaa488a35189cd52dfa3a4a1231b7cba05419e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_exec.c,v 1.17 2001/04/09 14:47:34 keithw Exp $ */
+/* $Id: t_imm_exec.c,v 1.18 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -109,7 +109,7 @@ void _tnl_copy_to_current( GLcontext *ctx, struct immediate *IM,
       ctx->Current.EdgeFlag = IM->EdgeFlag[count];
 
    if (flag & VERT_RGBA) {
-      COPY_CHAN4(ctx->Current.Color, IM->Color[count]);
+      COPY_4FV(ctx->Current.Color, IM->Color[count]);
       if (ctx->Light.ColorMaterialEnabled) {
         _mesa_update_color_material( ctx, ctx->Current.Color );
         _mesa_validate_all_lighting_tables( ctx );
@@ -117,7 +117,7 @@ void _tnl_copy_to_current( GLcontext *ctx, struct immediate *IM,
    }
 
    if (flag & VERT_SPEC_RGB)
-      COPY_CHAN4(ctx->Current.SecondaryColor, IM->SecondaryColor[count]);
+      COPY_4FV(ctx->Current.SecondaryColor, IM->SecondaryColor[count]);
 
    if (flag & VERT_FOG_COORD)
       ctx->Current.FogCoord = IM->FogCoord[count];
@@ -179,6 +179,9 @@ void _tnl_compute_orflag( struct immediate *IM )
 
 
 
+
+
+
 /* Note: The 'start' member of the GLvector structs is now redundant
  * because we always re-transform copied vertices, and the vectors
  * below are set up so that the first copied vertex (if any) appears
@@ -268,9 +271,7 @@ static void _tnl_vb_bind_immediate( GLcontext *ctx, struct immediate *IM )
    }
 
    if (inputs & VERT_SPEC_RGB) {
-      tmp->SecondaryColor.data = IM->SecondaryColor + start;
-      tmp->SecondaryColor.start = (GLchan *)(IM->SecondaryColor + start);
-      tmp->SecondaryColor.count = count;
+      tmp->SecondaryColor.Ptr = IM->SecondaryColor + start;
       VB->SecondaryColorPtr[0] = &tmp->SecondaryColor;
    }
 
@@ -279,9 +280,17 @@ static void _tnl_vb_bind_immediate( GLcontext *ctx, struct immediate *IM )
    }
 
    if (inputs & VERT_RGBA) {
-      tmp->Color.data = IM->Color + start;
-      tmp->Color.start = (GLchan *)(IM->Color + start);
-      tmp->Color.count = count;
+      if (IM->CopyOrFlag & VERT_RGBA) {
+        tmp->Color.Ptr = IM->Color + start;
+        tmp->Color.StrideB = 4 * sizeof(GLfloat);
+        tmp->Color.Flags = 0;
+      } else {
+        tmp->Color.Ptr = ctx->Current.Color;
+        tmp->Color.StrideB = 0;
+        tmp->Color.Flags = CA_CLIENT_DATA; /* hack */
+        VB->importable_data |= VERT_RGBA;
+        VB->import_data = _tnl_upgrade_current_data;
+      }
       VB->ColorPtr[0] = &tmp->Color;
    }
 
@@ -308,6 +317,10 @@ static void _tnl_vb_bind_immediate( GLcontext *ctx, struct immediate *IM )
       VB->MaterialMask = IM->MaterialMask + start;
       VB->Material = IM->Material + start;
    }
+
+/*    _tnl_print_vert_flags("_tnl_vb_bind_immediate: importable",  */
+/*                     VB->importable_data);  */
+
 }
 
 
@@ -477,8 +490,21 @@ void _tnl_imm_init( GLcontext *ctx )
 
    _mesa_vector4f_init( &tmp->Obj, 0, 0 );
    _mesa_vector3f_init( &tmp->Normal, 0, 0 );
-   _mesa_vector4chan_init( &tmp->Color, 0, 0 );
-   _mesa_vector4chan_init( &tmp->SecondaryColor, 0, 0 );
+
+   tmp->Color.Ptr = 0;
+   tmp->Color.Type = GL_FLOAT;
+   tmp->Color.Size = 4;
+   tmp->Color.Stride = 0;
+   tmp->Color.StrideB = 4 * sizeof(GLfloat);
+   tmp->Color.Flags = 0;
+
+   tmp->SecondaryColor.Ptr = 0;
+   tmp->SecondaryColor.Type = GL_FLOAT;
+   tmp->SecondaryColor.Size = 4;
+   tmp->SecondaryColor.Stride = 0;
+   tmp->SecondaryColor.StrideB = 4 * sizeof(GLfloat);
+   tmp->SecondaryColor.Flags = 0;
+
    _mesa_vector1f_init( &tmp->FogCoord, 0, 0 );
    _mesa_vector1ui_init( &tmp->Index, 0, 0 );
    _mesa_vector1ub_init( &tmp->EdgeFlag, 0, 0 );
index bfb1d3064276658ee2e611e3d292efee5b98604c..53e5dcbdc55e2b4147504f1701027124a448b31e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_fixup.c,v 1.11 2001/04/26 14:53:48 keithw Exp $ */
+/* $Id: t_imm_fixup.c,v 1.12 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -126,21 +126,6 @@ _tnl_fixup_1ub( GLubyte *data, GLuint flag[], GLuint start, GLuint match )
 }
 
 
-void
-_tnl_fixup_4chan( GLchan data[][4], GLuint flag[], GLuint start, GLuint match )
-{
-   GLuint i = start;
-
-   for (;;) {
-      if ((flag[++i] & match) == 0) {
-        COPY_CHAN4(data[i], data[i-1]);
-        if (flag[i] & VERT_END_VB) break;
-      }
-   }
-   flag[i] |= match;
-}
-
-
 static void
 fixup_first_4f( GLfloat data[][4], GLuint flag[], GLuint match,
                GLuint start, GLfloat *dflt )
@@ -199,18 +184,6 @@ fixup_first_1ub( GLubyte data[], GLuint flag[], GLuint match,
 }
 
 
-static void
-fixup_first_4chan( GLchan data[][4], GLuint flag[], GLuint match,
-                   GLuint start, GLchan dflt[4] )
-{
-   GLuint i = start-1;
-   match |= VERT_END_VB;
-
-   while ((flag[++i]&match) == 0)
-      COPY_CHAN4(data[i], dflt);
-}
-
-
 void _tnl_fixup_input( GLcontext *ctx, struct immediate *IM )
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
@@ -255,11 +228,11 @@ void _tnl_fixup_input( GLcontext *ctx, struct immediate *IM )
         }
 
         if (copy & VERT_RGBA) {
-           COPY_CHAN4( IM->Color[start], ctx->Current.Color);
+           COPY_4FV( IM->Color[start], ctx->Current.Color);
         }
 
         if (copy & VERT_SPEC_RGB)
-           COPY_CHAN4( IM->SecondaryColor[start], ctx->Current.SecondaryColor);
+           COPY_4FV( IM->SecondaryColor[start], ctx->Current.SecondaryColor);
 
         if (copy & VERT_FOG_COORD)
            IM->FogCoord[start] = ctx->Current.FogCoord;
@@ -315,19 +288,19 @@ void _tnl_fixup_input( GLcontext *ctx, struct immediate *IM )
 
       if (fixup & VERT_RGBA) {
         if (orflag & VERT_RGBA)
-           _tnl_fixup_4chan( IM->Color, IM->Flag, start, VERT_RGBA );
-        else
-           fixup_first_4chan( IM->Color, IM->Flag, VERT_END_VB, start, 
-                              IM->Color[start] );
+           _tnl_fixup_4f( IM->Color, IM->Flag, start, VERT_RGBA );
+/*      else */
+/*         fixup_first_4f( IM->Color, IM->Flag, VERT_END_VB, start,  */
+/*                         IM->Color[start] ); */
       }
       
       if (fixup & VERT_SPEC_RGB) {
         if (orflag & VERT_SPEC_RGB)
-           _tnl_fixup_4chan( IM->SecondaryColor, IM->Flag, start, 
-                            VERT_SPEC_RGB );
+           _tnl_fixup_4f( IM->SecondaryColor, IM->Flag, start, 
+                          VERT_SPEC_RGB );
         else
-           fixup_first_4chan( IM->SecondaryColor, IM->Flag, VERT_END_VB, start,
-                              IM->SecondaryColor[start] );
+           fixup_first_4f( IM->SecondaryColor, IM->Flag, VERT_END_VB, start,
+                           IM->SecondaryColor[start] );
       }
       
       if (fixup & VERT_FOG_COORD) {
@@ -422,7 +395,7 @@ static void copy_vertices( GLcontext *ctx,
 
       COPY_4FV( next->Obj[dst], prev->Obj[src] );
       COPY_3FV( next->Normal[dst], prev->Normal[src] );
-      COPY_CHAN4( next->Color[dst], prev->Color[src] );
+      COPY_4FV( next->Color[dst], prev->Color[src] );
 
       if (prev->OrFlag & VERT_TEX_ANY) {
         GLuint i;
@@ -438,7 +411,7 @@ static void copy_vertices( GLcontext *ctx,
       next->Elt[dst] = prev->Elt[src];
       next->EdgeFlag[dst] = prev->EdgeFlag[src];
       next->Index[dst] = prev->Index[src];
-      COPY_CHAN4( next->SecondaryColor[dst], prev->SecondaryColor[src] );
+      COPY_4FV( next->SecondaryColor[dst], prev->SecondaryColor[src] );
       next->FogCoord[dst] = prev->FogCoord[src];
       next->Flag[dst] = (prev->CopyOrFlag & VERT_FIXUP);
       next->CopyOrFlag |= prev->Flag[src];  /* redundant for current_im */
@@ -550,12 +523,13 @@ void _tnl_fixup_compiled_cassette( GLcontext *ctx, struct immediate *IM )
                         ctx->Current.Index );
 
       if (fixup & VERT_RGBA)
-        fixup_first_4chan(IM->Color, IM->Flag, VERT_RGBA, start,
-                           ctx->Current.Color );
+        if (IM->CopyOrFlag & VERT_RGBA)
+           fixup_first_4f(IM->Color, IM->Flag, VERT_RGBA, start,
+                          ctx->Current.Color );
 
       if (fixup & VERT_SPEC_RGB)
-        fixup_first_4chan(IM->SecondaryColor, IM->Flag, VERT_SPEC_RGB, start,
-                           ctx->Current.SecondaryColor );
+        fixup_first_4f(IM->SecondaryColor, IM->Flag, VERT_SPEC_RGB, start,
+                       ctx->Current.SecondaryColor );
 
       if (fixup & VERT_FOG_COORD)
         fixup_first_1f(IM->FogCoord, IM->Flag, VERT_FOG_COORD, start,
@@ -795,7 +769,7 @@ void _tnl_fixup_purged_eval( GLcontext *ctx, struct immediate *IM )
       GLenum prim = IM->Primitive[last];
       GLuint pincr = increment[prim];
       GLuint pintro = intro[prim];
-      GLuint ovf, i;
+      GLuint ovf = 0, i;
 
       tnl->ExecCopyCount = 0;
       tnl->ExecParity = IM->PrimitiveLength[last] & 1;
@@ -810,3 +784,30 @@ void _tnl_fixup_purged_eval( GLcontext *ctx, struct immediate *IM )
         tnl->ExecCopyElts[i] = IM->Elt[tnl->ExecCopyElts[i]];
    }
 }
+
+
+void _tnl_upgrade_current_data( GLcontext *ctx,
+                               GLuint required,
+                               GLuint flags )
+{
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   struct immediate *IM = tnl->ExecCopySource;
+   struct vertex_buffer *VB = &tnl->vb;
+
+/*     _tnl_print_vert_flags("_tnl_upgrade_client_data", required); */
+
+   if ((required & VERT_RGBA) && (VB->ColorPtr[0]->Flags & CA_CLIENT_DATA)) {
+      struct gl_client_array *tmp = &tnl->imm_inputs.Color;
+      GLuint start = IM->CopyStart;
+
+      tmp->Ptr = IM->Color + start;
+      tmp->StrideB = 4 * sizeof(GLfloat);
+      tmp->Flags = 0;
+
+      COPY_4FV( IM->Color[start], ctx->Current.Color);   
+      fixup_first_4f( IM->Color, IM->Flag, VERT_END_VB, start, 
+                     IM->Color[start] );
+
+      VB->importable_data &= ~VERT_RGBA;
+   }
+}
index 939bba408b253567d428c603895cf5d90f6372a6..584712167f015a107c56029fab1042f37880d3bf 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_fixup.h,v 1.3 2001/04/26 14:53:48 keithw Exp $ */
+/* $Id: t_imm_fixup.h,v 1.4 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -31,9 +31,6 @@
 #include "mtypes.h"
 #include "t_context.h"
 
-extern void _tnl_fixup_4chan( GLchan data[][4], GLuint flag[],
-                             GLuint start, GLuint match );
-
 extern void _tnl_fixup_1ub( GLubyte *data, GLuint flag[],
                            GLuint start, GLuint match );
 
@@ -60,7 +57,12 @@ extern void _tnl_restore_compiled_cassette( GLcontext *ctx,
 
 extern void _tnl_fixup_purged_eval( GLcontext *ctx, struct immediate *IM );
 
-extern void _tnl_copy_immediate_vertices( GLcontext *ctx, struct immediate *IM );
+extern void _tnl_copy_immediate_vertices( GLcontext *ctx, 
+                                         struct immediate *IM );
+
 extern void _tnl_get_exec_copy_verts( GLcontext *ctx, struct immediate *IM );
 
+extern void _tnl_upgrade_current_data( GLcontext *ctx, GLuint required,
+                                      GLuint flags );
+
 #endif
index 6ecd1c3c605103131769790573b673e6c011e14a..5c64d964896de77ecd23093883d3c45f3165ae06 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_vb_cliptmp.h,v 1.10 2001/03/19 02:25:37 keithw Exp $ */
+/* $Id: t_vb_cliptmp.h,v 1.11 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -58,13 +58,13 @@ do {                                                                        \
                * know dp != dpPrev from DIFFERENT_SIGNS, above.        \
                */                                                      \
               GLfloat t = dp / (dp - dpPrev);                          \
-               LINTERP_4F( t, coord, newvert, idx, idxPrev, SIZE );    \
+               INTERP_4F( t, coord[newvert], coord[idx], coord[idxPrev]); \
               interp( ctx, t, newvert, idx, idxPrev, GL_TRUE );        \
            } else {                                                    \
               /* Coming back in.                                       \
                */                                                      \
               GLfloat t = dpPrev / (dpPrev - dp);                      \
-               LINTERP_4F( t, coord, newvert, idxPrev, idx, SIZE );    \
+               INTERP_4F( t, coord[newvert], coord[idxPrev], coord[idx]); \
               interp( ctx, t, newvert, idxPrev, idx, GL_FALSE );       \
            }                                                           \
         }                                                              \
@@ -86,32 +86,32 @@ do {                                                                        \
 } while (0)
 
 
-#define LINE_CLIP(PLANE, A, B, C, D )                          \
-do {                                                           \
-   if (mask & PLANE) {                                         \
-      GLfloat dpI = CLIP_DOTPROD( ii, A, B, C, D );            \
-      GLfloat dpJ = CLIP_DOTPROD( jj, A, B, C, D );            \
-                                                               \
-      if (DIFFERENT_SIGNS(dpI, dpJ)) {                         \
-         GLuint newvert = VB->LastClipped++;                   \
-         VB->ClipMask[newvert] = 0;                            \
-        if (NEGATIVE(dpJ)) {                                   \
-           GLfloat t = dpI / (dpI - dpJ);                      \
-            VB->ClipMask[jj] |= PLANE;                         \
-            LINTERP_4F( t, coord, newvert, ii, jj, SIZE );     \
-           interp( ctx, t, newvert, ii, jj, GL_FALSE );        \
-            jj = newvert;                                      \
-        } else {                                               \
-           GLfloat t = dpJ / (dpJ - dpI);                      \
-            VB->ClipMask[ii] |= PLANE;                         \
-            LINTERP_4F( t, coord, newvert, jj, ii, SIZE );     \
-           interp( ctx, t, newvert, jj, ii, GL_FALSE );        \
-            ii = newvert;                                      \
-        }                                                      \
-      }                                                                \
-      else if (NEGATIVE(dpI))                                  \
-        return;                                                \
-  }                                                            \
+#define LINE_CLIP(PLANE, A, B, C, D )                                  \
+do {                                                                   \
+   if (mask & PLANE) {                                                 \
+      GLfloat dpI = CLIP_DOTPROD( ii, A, B, C, D );                    \
+      GLfloat dpJ = CLIP_DOTPROD( jj, A, B, C, D );                    \
+                                                                       \
+      if (DIFFERENT_SIGNS(dpI, dpJ)) {                                 \
+         GLuint newvert = VB->LastClipped++;                           \
+         VB->ClipMask[newvert] = 0;                                    \
+        if (NEGATIVE(dpJ)) {                                           \
+           GLfloat t = dpI / (dpI - dpJ);                              \
+            VB->ClipMask[jj] |= PLANE;                                 \
+            INTERP_4F( t, coord[newvert], coord[ii], coord[jj] );      \
+           interp( ctx, t, newvert, ii, jj, GL_FALSE );                \
+            jj = newvert;                                              \
+        } else {                                                       \
+           GLfloat t = dpJ / (dpJ - dpI);                              \
+            VB->ClipMask[ii] |= PLANE;                                 \
+            INTERP_4F( t, coord[newvert], coord[jj], coord[ii] );      \
+           interp( ctx, t, newvert, jj, ii, GL_FALSE );                \
+            ii = newvert;                                              \
+        }                                                              \
+      }                                                                        \
+      else if (NEGATIVE(dpI))                                          \
+        return;                                                        \
+  }                                                                    \
 } while (0)
 
 
index 209c32f8aba1d6a61b333271213de6ec73eb5b8e..7b24cbfaa3a6bfa4c1860daaee1da13b79f30735 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_vb_light.c,v 1.13 2001/04/26 14:53:48 keithw Exp $ */
+/* $Id: t_vb_light.c,v 1.14 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -49,8 +49,8 @@ typedef void (*light_func)( GLcontext *ctx,
                            GLvector4f *input );
 
 struct light_stage_data {
-   GLvector4chan LitColor[2];
-   GLvector4chan LitSecondary[2];
+   struct gl_client_array LitColor[2];
+   struct gl_client_array LitSecondary[2];
    GLvector1ui LitIndex[2];
    light_func *light_func_tab;
 };
@@ -149,8 +149,8 @@ static GLboolean run_lighting( GLcontext *ctx, struct gl_pipeline_stage *stage )
    else
       ind = 0;
 
-   /* The individual tabs know about replaying side-effects vs. full
-    * re-execution.
+   /* The individual functions know about replaying side-effects
+    * vs. full re-execution. 
     */
    store->light_func_tab[ind]( ctx, VB, stage, input );
 
@@ -201,6 +201,22 @@ static GLboolean run_validate_lighting( GLcontext *ctx,
    return stage->run( ctx, stage );
 }
 
+static void alloc_4f( struct gl_client_array *a, GLuint sz )
+{
+   a->Ptr = ALIGN_MALLOC( sz * sizeof(GLfloat) * 4, 32 );
+   a->Size = 4;
+   a->Type = GL_FLOAT;
+   a->Stride = 0;
+   a->StrideB = sizeof(GLfloat) * 4;
+   a->Enabled = 0;
+   a->Flags = 0;
+}
+
+static void free_4f( struct gl_client_array *a )
+{
+   ALIGN_FREE( a->Ptr );
+}
+
 /* Called the first time stage->run is called.  In effect, don't
  * allocate data until the first time the stage is run.
  */
@@ -220,10 +236,11 @@ static GLboolean run_init_lighting( GLcontext *ctx,
     */
    init_lighting();
 
-   _mesa_vector4chan_alloc( &store->LitColor[0], 0, size, 32 );
-   _mesa_vector4chan_alloc( &store->LitColor[1], 0, size, 32 );
-   _mesa_vector4chan_alloc( &store->LitSecondary[0], 0, size, 32 );
-   _mesa_vector4chan_alloc( &store->LitSecondary[1], 0, size, 32 );
+   alloc_4f( &store->LitColor[0], size );
+   alloc_4f( &store->LitColor[1], size );
+   alloc_4f( &store->LitSecondary[0], size );
+   alloc_4f( &store->LitSecondary[1], size );
+
    _mesa_vector1ui_alloc( &store->LitIndex[0], 0, size, 32 );
    _mesa_vector1ui_alloc( &store->LitIndex[1], 0, size, 32 );
 
@@ -263,10 +280,10 @@ static void dtr( struct gl_pipeline_stage *stage )
    struct light_stage_data *store = LIGHT_STAGE_DATA(stage);
 
    if (store) {
-      _mesa_vector4chan_free( &store->LitColor[0] );
-      _mesa_vector4chan_free( &store->LitColor[1] );
-      _mesa_vector4chan_free( &store->LitSecondary[0] );
-      _mesa_vector4chan_free( &store->LitSecondary[1] );
+      free_4f( &store->LitColor[0] );
+      free_4f( &store->LitColor[1] );
+      free_4f( &store->LitSecondary[0] );
+      free_4f( &store->LitSecondary[1] );
       _mesa_vector1ui_free( &store->LitIndex[0] );
       _mesa_vector1ui_free( &store->LitIndex[1] );
       FREE( store );
index a9df6de1d5158214cc9c09cfc3870fb23d68a5fd..76d2a8c047b26a2b447fd9ff035bb24ab2288e85 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_vb_lighttmp.h,v 1.11 2001/04/19 12:22:09 keithw Exp $ */
+/* $Id: t_vb_lighttmp.h,v 1.12 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -36,7 +36,7 @@
 #  define CHECK_MATERIAL(x)  (flags[x] & VERT_MATERIAL)
 #  define CHECK_END_VB(x)    (flags[x] & VERT_END_VB)
 #  if (IDX & LIGHT_COLORMATERIAL)
-#    define CMSTRIDE STRIDE_CHAN(CMcolor, (4 * sizeof(GLchan)))
+#    define CMSTRIDE STRIDE_F(CMcolor, (4 * sizeof(GLfloat)))
 #    define CHECK_COLOR_MATERIAL(x) (flags[x] & VERT_RGBA)
 #    define CHECK_VALIDATE(x) (flags[x] & (VERT_RGBA|VERT_MATERIAL))
 #    define DO_ANOTHER_NORMAL(x) \
@@ -58,7 +58,7 @@
 #  define CHECK_MATERIAL(x)   0                   /* no materials on array paths */
 #  define CHECK_END_VB(XX)     (XX >= nr)
 #  if (IDX & LIGHT_COLORMATERIAL)
-#     define CMSTRIDE STRIDE_CHAN(CMcolor, CMstride)
+#     define CMSTRIDE STRIDE_F(CMcolor, CMstride)
 #     define CHECK_COLOR_MATERIAL(x) (x < nr) /* always have colormaterial */
 #     define CHECK_VALIDATE(x) (x < nr)
 #     define DO_ANOTHER_NORMAL(x) 0        /* always stop to recalc colormat */
@@ -88,7 +88,7 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
 {
    struct light_stage_data *store = LIGHT_STAGE_DATA(stage);
    GLfloat (*base)[3] = ctx->Light._BaseColor;
-   const GLchan *sumA = ctx->Light._BaseAlpha;
+   const GLfloat *sumA = ctx->Light._BaseAlpha;
 
    GLuint j;
 
@@ -97,15 +97,16 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
    GLuint  nstride = VB->NormalPtr->stride;
    const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
 
-   GLchan *CMcolor;
+   GLfloat *CMcolor;
    GLuint CMstride;
 
-   GLchan (*Fcolor)[4] = (GLchan (*)[4]) store->LitColor[0].data;
-   GLchan (*Bcolor)[4] = (GLchan (*)[4]) store->LitColor[1].data;
-   GLchan (*Fspec)[4] = (GLchan (*)[4]) store->LitSecondary[0].data;
-   GLchan (*Bspec)[4] = (GLchan (*)[4]) store->LitSecondary[1].data;
-   GLuint nr = VB->Count;
+   GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].Ptr;
+   GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].Ptr;
+   GLfloat (*Fspec)[4] = (GLfloat (*)[4]) store->LitSecondary[0].Ptr;
+   GLfloat (*Bspec)[4] = (GLfloat (*)[4]) store->LitSecondary[1].Ptr;
+   GLfloat (*spec[2])[4];
 
+   GLuint nr = VB->Count;
    GLuint *flags = VB->Flag;
    struct gl_material (*new_material)[2] = VB->Material;
    GLuint *new_material_mask = VB->MaterialMask;
@@ -114,11 +115,18 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
    (void) nstride;
    (void) vstride;
 
+
 /*     fprintf(stderr, "%s\n", __FUNCTION__ );  */
 
+   spec[0] = Fspec;
+   spec[1] = Bspec;
+
    if (IDX & LIGHT_COLORMATERIAL) {
-      CMcolor = (GLchan *) VB->ColorPtr[0]->data;
-      CMstride = VB->ColorPtr[0]->stride;
+      if (VB->ColorPtr[0]->Type != GL_FLOAT)
+        VB->import_data( ctx, VERT_RGBA, ~0 );
+
+      CMcolor = (GLfloat *) VB->ColorPtr[0]->Ptr;
+      CMstride = VB->ColorPtr[0]->StrideB;
    }
 
    VB->ColorPtr[0] = &store->LitColor[0];
@@ -138,7 +146,6 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
         j<nr ;
         j++,STRIDE_F(vertex,VSTRIDE),STRIDE_F(normal,NSTRIDE),CMSTRIDE)
    {
-      GLfloat sum[2][3], spec[2][3];
       struct gl_light *light;
 
       if ( CHECK_COLOR_MATERIAL(j) )
@@ -150,12 +157,14 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
       if ( CHECK_VALIDATE(j) )
         _mesa_validate_all_lighting_tables( ctx );
 
-      COPY_3V(sum[0], base[0]);
-      ZERO_3V(spec[0]);
+      COPY_3V(Fcolor[j], base[0]);
+      Fcolor[j][3] = sumA[0];
+      ZERO_3V(Fspec[j]);
 
       if (IDX & LIGHT_TWOSIDE) {
-        COPY_3V(sum[1], base[1]);
-        ZERO_3V(spec[1]);
+        COPY_3V(Bcolor[j], base[1]);
+        Bcolor[j][3] = sumA[1];
+        ZERO_3V(Bspec[j]);
       }
 
       /* Add contribution from each enabled light source */
@@ -217,27 +226,30 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
 
         /* Which side gets the diffuse & specular terms? */
         if (n_dot_VP < 0.0F) {
-           ACC_SCALE_SCALAR_3V(sum[0], attenuation, light->_MatAmbient[0]);
+           ACC_SCALE_SCALAR_3V(Fcolor[j], attenuation, light->_MatAmbient[0]);
            if (!(IDX & LIGHT_TWOSIDE)) {
               continue;
            }
-           side = 1;
+           /* diffuse term */
+           COPY_3V(contrib, light->_MatAmbient[1]);
+           ACC_SCALE_SCALAR_3V(contrib, -n_dot_VP, light->_MatDiffuse[1]);
+           ACC_SCALE_SCALAR_3V(Bcolor[j], attenuation, contrib );
            correction = -1;
-           n_dot_VP = -n_dot_VP;
+           side = 1;
         }
          else {
            if (IDX & LIGHT_TWOSIDE) {
-              ACC_SCALE_SCALAR_3V( sum[1], attenuation, light->_MatAmbient[1]);
+              ACC_SCALE_SCALAR_3V( Bcolor[j], attenuation, 
+                                   light->_MatAmbient[1]);
            }
-           side = 0;
+           /* diffuse term */
+           COPY_3V(contrib, light->_MatAmbient[0]);
+           ACC_SCALE_SCALAR_3V(contrib, n_dot_VP, light->_MatDiffuse[0]);
+           ACC_SCALE_SCALAR_3V(Fcolor[j], attenuation, contrib );
            correction = 1;
+           side = 0;
         }
 
-        /* diffuse term */
-        COPY_3V(contrib, light->_MatAmbient[side]);
-        ACC_SCALE_SCALAR_3V(contrib, n_dot_VP, light->_MatDiffuse[side]);
-        ACC_SCALE_SCALAR_3V(sum[side], attenuation, contrib );
-
         /* specular term - cannibalize VP... */
         if (ctx->Light.Model.LocalViewer) {
            GLfloat v[3];
@@ -265,21 +277,11 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
 
            if (spec_coef > 1.0e-10) {
               spec_coef *= attenuation;
-              ACC_SCALE_SCALAR_3V( spec[side], spec_coef,
+              ACC_SCALE_SCALAR_3V( spec[side][j], spec_coef,
                                    light->_MatSpecular[side]);
            }
         }
       } /*loop over lights*/
-
-      UNCLAMPED_FLOAT_TO_RGB_CHAN( Fcolor[j], sum[0] );
-      UNCLAMPED_FLOAT_TO_RGB_CHAN( Fspec[j], spec[0] );
-      Fcolor[j][3] = sumA[0];
-
-      if (IDX & LIGHT_TWOSIDE) {
-        UNCLAMPED_FLOAT_TO_RGB_CHAN( Bcolor[j], sum[1] );
-        UNCLAMPED_FLOAT_TO_RGB_CHAN( Bspec[j], spec[1] );
-        Bcolor[j][3] = sumA[1];
-      }
    }
 }
 
@@ -293,18 +295,19 @@ static void TAG(light_rgba)( GLcontext *ctx,
    GLuint j;
 
    GLfloat (*base)[3] = ctx->Light._BaseColor;
-   const GLchan *sumA = ctx->Light._BaseAlpha;
+   const GLfloat *sumA = ctx->Light._BaseAlpha;
 
    GLuint  vstride = input->stride;
    const GLfloat *vertex = (GLfloat *) input->data;
    GLuint  nstride = VB->NormalPtr->stride;
    const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
 
-   GLchan *CMcolor;
+   GLfloat *CMcolor;
    GLuint CMstride;
 
-   GLchan (*Fcolor)[4] = (GLchan (*)[4]) store->LitColor[0].data;
-   GLchan (*Bcolor)[4] = (GLchan (*)[4]) store->LitColor[1].data;
+   GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].Ptr;
+   GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].Ptr;
+   GLfloat (*color[2])[4];
    GLuint *flags = VB->Flag;
 
    struct gl_material (*new_material)[2] = VB->Material;
@@ -316,9 +319,15 @@ static void TAG(light_rgba)( GLcontext *ctx,
    (void) nstride;
    (void) vstride;
 
+   color[0] = Fcolor;
+   color[1] = Bcolor;
+
    if (IDX & LIGHT_COLORMATERIAL) {
-      CMcolor = (GLchan *)VB->ColorPtr[0]->data;
-      CMstride = VB->ColorPtr[0]->stride;
+      if (VB->ColorPtr[0]->Type != GL_FLOAT)
+        VB->import_data( ctx, VERT_RGBA, ~0 );
+
+      CMcolor = (GLfloat *)VB->ColorPtr[0]->Ptr;
+      CMstride = VB->ColorPtr[0]->StrideB;
    }
 
    VB->ColorPtr[0] = &store->LitColor[0];
@@ -332,7 +341,6 @@ static void TAG(light_rgba)( GLcontext *ctx,
         j<nr ;
         j++,STRIDE_F(vertex,VSTRIDE), STRIDE_F(normal,NSTRIDE),CMSTRIDE)
    {
-      GLfloat sum[2][3];
       struct gl_light *light;
 
       if ( CHECK_COLOR_MATERIAL(j) )
@@ -344,10 +352,14 @@ static void TAG(light_rgba)( GLcontext *ctx,
       if ( CHECK_VALIDATE(j) )
         _mesa_validate_all_lighting_tables( ctx );
 
-      COPY_3V(sum[0], base[0]);
+      COPY_3V(Fcolor[j], base[0]);
+      Fcolor[j][3] = sumA[0];
+
+      if (IDX & LIGHT_TWOSIDE) {
+        COPY_3V(Bcolor[j], base[1]);
+        Bcolor[j][3] = sumA[1];
+      }
 
-      if ( IDX & LIGHT_TWOSIDE )
-        COPY_3V(sum[1], base[1]);
 
       /* Add contribution from each enabled light source */
       foreach (light, &ctx->Light.EnabledList) {
@@ -411,7 +423,7 @@ static void TAG(light_rgba)( GLcontext *ctx,
 
         /* which side are we lighting? */
         if (n_dot_VP < 0.0F) {
-           ACC_SCALE_SCALAR_3V(sum[0], attenuation, light->_MatAmbient[0]);
+           ACC_SCALE_SCALAR_3V(Fcolor[j], attenuation, light->_MatAmbient[0]);
 
            if (!(IDX & LIGHT_TWOSIDE))
               continue;
@@ -422,7 +434,8 @@ static void TAG(light_rgba)( GLcontext *ctx,
         }
          else {
            if (IDX & LIGHT_TWOSIDE) {
-              ACC_SCALE_SCALAR_3V( sum[1], attenuation, light->_MatAmbient[1]);
+              ACC_SCALE_SCALAR_3V(Bcolor[j], attenuation, 
+                                  light->_MatAmbient[1]);
            }
            side = 0;
            correction = 1;
@@ -465,16 +478,9 @@ static void TAG(light_rgba)( GLcontext *ctx,
                                    light->_MatSpecular[side]);
            }
         }
-
-        ACC_SCALE_SCALAR_3V( sum[side], attenuation, contrib );
-      }
-
-      UNCLAMPED_FLOAT_TO_RGB_CHAN( Fcolor[j], sum[0] );
-      Fcolor[j][3] = sumA[0];
-
-      if (IDX & LIGHT_TWOSIDE) {
-        UNCLAMPED_FLOAT_TO_RGB_CHAN( Bcolor[j], sum[1] );
-        Bcolor[j][3] = sumA[1];
+        
+        
+        ACC_SCALE_SCALAR_3V( color[side][j], attenuation, contrib );
       }
    }
 }
@@ -493,17 +499,16 @@ static void TAG(light_fast_rgba_single)( GLcontext *ctx,
    struct light_stage_data *store = LIGHT_STAGE_DATA(stage);
    GLuint  nstride = VB->NormalPtr->stride;
    const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
-   GLchan *CMcolor;
+   GLfloat *CMcolor;
    GLuint CMstride;
-   GLchan (*Fcolor)[4] = (GLchan (*)[4]) store->LitColor[0].data;
-   GLchan (*Bcolor)[4] = (GLchan (*)[4]) store->LitColor[1].data;
+   GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].Ptr;
+   GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].Ptr;
    struct gl_light *light = ctx->Light.EnabledList.next;
    GLuint *flags = VB->Flag;
-   GLchan baseubyte[2][4];
    GLuint j = 0;
    struct gl_material (*new_material)[2] = VB->Material;
    GLuint *new_material_mask = VB->MaterialMask;
-   GLfloat base[2][3];
+   GLfloat base[2][4];
    GLuint nr = VB->Count;
 
 /*     fprintf(stderr, "%s\n", __FUNCTION__ );  */
@@ -513,8 +518,11 @@ static void TAG(light_fast_rgba_single)( GLcontext *ctx,
    (void) nstride;
 
    if (IDX & LIGHT_COLORMATERIAL) {
-      CMcolor = (GLchan *)VB->ColorPtr[0]->data;
-      CMstride = VB->ColorPtr[0]->stride;
+      if (VB->ColorPtr[0]->Type != GL_FLOAT)
+        VB->import_data( ctx, VERT_RGBA, ~0 );
+
+      CMcolor = (GLfloat *)VB->ColorPtr[0]->Ptr;
+      CMstride = VB->ColorPtr[0]->StrideB;
    }
 
    VB->ColorPtr[0] = &store->LitColor[0];
@@ -535,54 +543,42 @@ static void TAG(light_fast_rgba_single)( GLcontext *ctx,
       if ( CHECK_VALIDATE(j) )
         _mesa_validate_all_lighting_tables( ctx );
 
-      baseubyte[0][3] = ctx->Light._BaseAlpha[0];
-      baseubyte[1][3] = ctx->Light._BaseAlpha[1];
 
-      /* No attenuation, so incoporate _MatAmbient into base color.
-       */
-      {
-        COPY_3V(base[0], light->_MatAmbient[0]);
-        ACC_3V(base[0], ctx->Light._BaseColor[0] );
-        UNCLAMPED_FLOAT_TO_RGB_CHAN( baseubyte[0], base[0] );
+      COPY_3V(base[0], light->_MatAmbient[0]);
+      ACC_3V(base[0], ctx->Light._BaseColor[0] );
+      base[0][3] = ctx->Light._BaseAlpha[0];
 
-        if (IDX & LIGHT_TWOSIDE) {
-           COPY_3V(base[1], light->_MatAmbient[1]);
-           ACC_3V(base[1], ctx->Light._BaseColor[1]);
-           UNCLAMPED_FLOAT_TO_RGB_CHAN( baseubyte[1], base[1]);
-        }
+      if (IDX & LIGHT_TWOSIDE) {
+        COPY_3V(base[1], light->_MatAmbient[1]);
+        ACC_3V(base[1], ctx->Light._BaseColor[1]);
+        base[1][3] = ctx->Light._BaseAlpha[1];
       }
 
       do {
-        GLfloat n_dot_VP = DOT3(normal, light->_VP_inf_norm);
+        GLfloat n_dot_VP;
 
-        COPY_CHAN4(Fcolor[j], baseubyte[0]);
-        if (IDX & LIGHT_TWOSIDE) COPY_CHAN4(Bcolor[j], baseubyte[1]);
+        COPY_4FV(Fcolor[j], base[0]);
+        if (IDX & LIGHT_TWOSIDE) COPY_4FV(Bcolor[j], base[1]);
 
-        if (n_dot_VP < 0.0F) {
-           if (IDX & LIGHT_TWOSIDE) {
-              GLfloat n_dot_h = -DOT3(normal, light->_h_inf_norm);
-              GLfloat sum[3];
-              COPY_3V(sum, base[1]);
-              ACC_SCALE_SCALAR_3V(sum, -n_dot_VP, light->_MatDiffuse[1]);
-              if (n_dot_h > 0.0F) {
-                 GLfloat spec;
-                 GET_SHINE_TAB_ENTRY( ctx->_ShineTable[1], n_dot_h, spec );
-                 ACC_SCALE_SCALAR_3V(sum, spec, light->_MatSpecular[1]);
-              }
-              UNCLAMPED_FLOAT_TO_RGB_CHAN(Bcolor[j], sum );
-           }
-        } else {
+        n_dot_VP = DOT3(normal, light->_VP_inf_norm);
+
+        if (n_dot_VP > 0.0F) {
            GLfloat n_dot_h = DOT3(normal, light->_h_inf_norm);
-           GLfloat sum[3];
-           COPY_3V(sum, base[0]);
-           ACC_SCALE_SCALAR_3V(sum, n_dot_VP, light->_MatDiffuse[0]);
+           ACC_SCALE_SCALAR_3V(Fcolor[j], n_dot_VP, light->_MatDiffuse[0]);
            if (n_dot_h > 0.0F) {
               GLfloat spec;
               GET_SHINE_TAB_ENTRY( ctx->_ShineTable[0], n_dot_h, spec );
-              ACC_SCALE_SCALAR_3V(sum, spec, light->_MatSpecular[0]);
-
+              ACC_SCALE_SCALAR_3V( Fcolor[j], spec, light->_MatSpecular[0]);
+           }
+        } 
+        else if (IDX & LIGHT_TWOSIDE) {
+           GLfloat n_dot_h = -DOT3(normal, light->_h_inf_norm);
+           ACC_SCALE_SCALAR_3V(Bcolor[j], -n_dot_VP, light->_MatDiffuse[1]);
+           if (n_dot_h > 0.0F) {
+              GLfloat spec;
+              GET_SHINE_TAB_ENTRY( ctx->_ShineTable[1], n_dot_h, spec );
+              ACC_SCALE_SCALAR_3V( Bcolor[j], spec, light->_MatSpecular[1]);
            }
-           UNCLAMPED_FLOAT_TO_RGB_CHAN(Fcolor[j], sum );
         }
 
         j++;
@@ -591,11 +587,11 @@ static void TAG(light_fast_rgba_single)( GLcontext *ctx,
       } while (DO_ANOTHER_NORMAL(j));
 
 
-      for ( ; REUSE_LIGHT_RESULTS(j) ; j++, CMSTRIDE ) {
-        COPY_CHAN4(Fcolor[j], Fcolor[j-1]);
+      for ( ; REUSE_LIGHT_RESULTS(j) ; j++, CMSTRIDE, STRIDE_F(normal,NSTRIDE))
+      {
+        COPY_4FV(Fcolor[j], Fcolor[j-1]);
         if (IDX & LIGHT_TWOSIDE)
-           COPY_CHAN4(Bcolor[j], Bcolor[j-1]);
-        STRIDE_F(normal, NSTRIDE);
+           COPY_4FV(Bcolor[j], Bcolor[j-1]);
       }
 
    } while (!CHECK_END_VB(j));
@@ -610,13 +606,13 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
                                  GLvector4f *input )
 {
    struct light_stage_data *store = LIGHT_STAGE_DATA(stage);
-   const GLchan *sumA = ctx->Light._BaseAlpha;
+   const GLfloat *sumA = ctx->Light._BaseAlpha;
    GLuint  nstride = VB->NormalPtr->stride;
    const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
-   GLchan *CMcolor;
+   GLfloat *CMcolor;
    GLuint CMstride;
-   GLchan (*Fcolor)[4] = (GLchan (*)[4]) store->LitColor[0].data;
-   GLchan (*Bcolor)[4] = (GLchan (*)[4]) store->LitColor[1].data;
+   GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].Ptr;
+   GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].Ptr;
    GLuint *flags = VB->Flag;
    GLuint j = 0;
    struct gl_material (*new_material)[2] = VB->Material;
@@ -631,8 +627,11 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
    (void) nstride;
 
    if (IDX & LIGHT_COLORMATERIAL) {
-      CMcolor = (GLchan *)VB->ColorPtr[0]->data;
-      CMstride = VB->ColorPtr[0]->stride;
+      if (VB->ColorPtr[0]->Type != GL_FLOAT)
+        VB->import_data( ctx, VERT_RGBA, ~0 );
+
+      CMcolor = (GLfloat *)VB->ColorPtr[0]->Ptr;
+      CMstride = VB->ColorPtr[0]->StrideB;
    }
 
    VB->ColorPtr[0] = &store->LitColor[0];
@@ -644,8 +643,6 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
 
    do {
       do {
-        GLfloat sum[2][3];
-
         if ( CHECK_COLOR_MATERIAL(j) )
            _mesa_update_color_material( ctx, CMcolor );
 
@@ -656,49 +653,45 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
            _mesa_validate_all_lighting_tables( ctx );
 
 
-        COPY_3V(sum[0], ctx->Light._BaseColor[0]);
-        if (IDX & LIGHT_TWOSIDE)
-           COPY_3V(sum[1], ctx->Light._BaseColor[1]);
+        COPY_3V(Fcolor[j], ctx->Light._BaseColor[0]);
+        Fcolor[j][3] = sumA[0];
+
+        if (IDX & LIGHT_TWOSIDE) {
+           COPY_3V(Bcolor[j], ctx->Light._BaseColor[1]);
+           Bcolor[j][3] = sumA[1];
+        }
 
         foreach (light, &ctx->Light.EnabledList) {
            GLfloat n_dot_h, n_dot_VP, spec;
 
-           ACC_3V(sum[0], light->_MatAmbient[0]);
+           ACC_3V(Fcolor[j], light->_MatAmbient[0]);
            if (IDX & LIGHT_TWOSIDE)
-              ACC_3V(sum[1], light->_MatAmbient[1]);
+              ACC_3V(Bcolor[j], light->_MatAmbient[1]);
 
            n_dot_VP = DOT3(normal, light->_VP_inf_norm);
 
            if (n_dot_VP > 0.0F) {
-              ACC_SCALE_SCALAR_3V(sum[0], n_dot_VP, light->_MatDiffuse[0]);
+              ACC_SCALE_SCALAR_3V(Fcolor[j], n_dot_VP, light->_MatDiffuse[0]);
               n_dot_h = DOT3(normal, light->_h_inf_norm);
               if (n_dot_h > 0.0F) {
                  struct gl_shine_tab *tab = ctx->_ShineTable[0];
                  GET_SHINE_TAB_ENTRY( tab, n_dot_h, spec );
-                 ACC_SCALE_SCALAR_3V( sum[0], spec,
+                 ACC_SCALE_SCALAR_3V( Fcolor[j], spec,
                                       light->_MatSpecular[0]);
               }
            }
            else if (IDX & LIGHT_TWOSIDE) {
-              ACC_SCALE_SCALAR_3V(sum[1], -n_dot_VP, light->_MatDiffuse[1]);
+              ACC_SCALE_SCALAR_3V(Bcolor[j], -n_dot_VP, light->_MatDiffuse[1]);
               n_dot_h = -DOT3(normal, light->_h_inf_norm);
               if (n_dot_h > 0.0F) {
                  struct gl_shine_tab *tab = ctx->_ShineTable[1];
                  GET_SHINE_TAB_ENTRY( tab, n_dot_h, spec );
-                 ACC_SCALE_SCALAR_3V( sum[1], spec,
+                 ACC_SCALE_SCALAR_3V( Bcolor[j], spec,
                                       light->_MatSpecular[1]);
               }
            }
         }
 
-        UNCLAMPED_FLOAT_TO_RGB_CHAN( Fcolor[j], sum[0] );
-        Fcolor[j][3] = sumA[0];
-
-        if (IDX & LIGHT_TWOSIDE) {
-           UNCLAMPED_FLOAT_TO_RGB_CHAN( Bcolor[j], sum[1] );
-           Bcolor[j][3] = sumA[1];
-        }
-
         j++;
         CMSTRIDE;
         STRIDE_F(normal, NSTRIDE);
@@ -707,11 +700,11 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
       /* Reuse the shading results while there is no change to
        * normal or material values.
        */
-      for ( ; REUSE_LIGHT_RESULTS(j) ; j++, CMSTRIDE ) {
-        COPY_CHAN4(Fcolor[j], Fcolor[j-1]);
+      for ( ; REUSE_LIGHT_RESULTS(j) ; j++, CMSTRIDE, STRIDE_F(normal, NSTRIDE))
+      {
+        COPY_4FV(Fcolor[j], Fcolor[j-1]);
         if (IDX & LIGHT_TWOSIDE)
-           COPY_CHAN4(Bcolor[j], Bcolor[j-1]);
-        STRIDE_F(normal, NSTRIDE);
+           COPY_4FV(Bcolor[j], Bcolor[j-1]);
       }
 
    } while (!CHECK_END_VB(j));
@@ -741,7 +734,7 @@ static void TAG(light_ci)( GLcontext *ctx,
    const GLfloat *vertex = (GLfloat *) input->data;
    GLuint nstride = VB->NormalPtr->stride;
    const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
-   GLchan *CMcolor;
+   GLfloat *CMcolor;
    GLuint CMstride;
    GLuint *flags = VB->Flag;
    GLuint *indexResult[2];
@@ -766,8 +759,11 @@ static void TAG(light_ci)( GLcontext *ctx,
       indexResult[1] = VB->IndexPtr[1]->data;
 
    if (IDX & LIGHT_COLORMATERIAL) {
-      CMcolor = (GLchan *)VB->ColorPtr[0]->data;
-      CMstride = VB->ColorPtr[0]->stride;
+      if (VB->ColorPtr[0]->Type != GL_FLOAT)
+        VB->import_data( ctx, VERT_RGBA, ~0 );
+
+      CMcolor = (GLfloat *)VB->ColorPtr[0]->Ptr;
+      CMstride = VB->ColorPtr[0]->StrideB;
    }
 
    /* loop over vertices */
index a71ed8d4493bd8c7d66d69e2ef65f7e6bdc5b855..fc4fb958528053ce3d7278b0839bf73c28e71f4e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_vb_render.c,v 1.18 2001/04/26 14:53:48 keithw Exp $ */
+/* $Id: t_vb_render.c,v 1.19 2001/04/28 08:39:18 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
  */
 #endif
 
-#define LINTERP_SZ( t, vec, to, a, b, sz )                     \
-do {                                                           \
-   switch (sz) {                                               \
-   case 2: vec[to][2] = 0.0;                                   \
-   case 3: vec[to][3] = 1.0;                                   \
-   }                                                           \
-   switch (sz) {                                               \
-   case 4: vec[to][3] = LINTERP( t, vec[a][3], vec[b][3] );    \
-   case 3: vec[to][2] = LINTERP( t, vec[a][2], vec[b][2] );    \
-   case 2: vec[to][1] = LINTERP( t, vec[a][1], vec[b][1] );    \
-           vec[to][0] = LINTERP( t, vec[a][0], vec[b][0] );    \
-   }                                                           \
-} while(0)
-
-#define LINTERP_4F( t, vec, to, a, b, sz )             \
-do {                                                   \
-   vec[to][3] = LINTERP( t, vec[a][3], vec[b][3] );    \
-   vec[to][2] = LINTERP( t, vec[a][2], vec[b][2] );    \
-   vec[to][1] = LINTERP( t, vec[a][1], vec[b][1] );    \
-   vec[to][0] = LINTERP( t, vec[a][0], vec[b][0] );    \
-} while (0)
 
 #define W(i) coord[i][3]
 #define Z(i) coord[i][2]