fix for colormaterial
authorKeith Whitwell <keith@tungstengraphics.com>
Wed, 10 Nov 1999 06:29:44 +0000 (06:29 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Wed, 10 Nov 1999 06:29:44 +0000 (06:29 +0000)
src/mesa/main/enable.c
src/mesa/main/light.c

index aa6629007772ce5febda9714ee43b4063c0f498f..c12013a421a05e7ca04b173340688a68b61736fc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: enable.c,v 1.8 1999/11/08 07:36:44 brianp Exp $ */
+/* $Id: enable.c,v 1.9 1999/11/10 06:29:44 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -123,6 +123,8 @@ void gl_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
          if (ctx->Light.ColorMaterialEnabled!=state) {
             ctx->Light.ColorMaterialEnabled = state;
            ctx->NewState |= NEW_LIGHTING;
+           if (state) 
+              gl_update_color_material( ctx, ctx->Current.ByteColor );
          }
         break;
       case GL_CULL_FACE:
index 9712866032f85b5d1e1637b6a71ce1d58eb4b048..e38e25ba82203811808d588feae1477b8ad9ae72 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: light.c,v 1.7 1999/11/08 07:36:44 brianp Exp $ */
+/* $Id: light.c,v 1.8 1999/11/10 06:29:44 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -435,6 +435,9 @@ void gl_update_material( GLcontext *ctx,
    if (ctx->Light.ColorMaterialEnabled)
       bitmask &= ~ctx->Light.ColorMaterialBitmask;
 
+   if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
+      fprintf(stderr, "gl_update_material, mask %x\n", bitmask);
+
    if (!bitmask) 
       return;
 
@@ -531,6 +534,26 @@ void gl_update_material( GLcontext *ctx,
       ctx->Light.Material[1].SpecularIndex = src[1].SpecularIndex;
    }
 
+   if (0)
+   {
+      struct gl_material *mat = &ctx->Light.Material[0];
+      fprintf(stderr, "update_mat  emission : %f %f %f\n",
+             mat->Emission[0],
+             mat->Emission[1],
+             mat->Emission[2]);
+      fprintf(stderr, "update_mat  specular : %f %f %f\n",
+             mat->Specular[0],
+             mat->Specular[1],
+             mat->Specular[2]);
+      fprintf(stderr, "update_mat  diffuse : %f %f %f\n",
+             mat->Diffuse[0],
+             mat->Diffuse[1],
+             mat->Diffuse[2]);
+      fprintf(stderr, "update_mat  ambient : %f %f %f\n",
+             mat->Ambient[0],
+             mat->Ambient[1],
+             mat->Ambient[2]);
+   }
 }
 
 
@@ -546,6 +569,10 @@ void gl_update_color_material( GLcontext *ctx,
    GLfloat tmp[4], color[4];
 
    UBYTE_RGBA_TO_FLOAT_RGBA( color, rgba );
+
+   if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
+      fprintf(stderr, "gl_update_color_material, mask %x\n", bitmask);
+
    
    if (bitmask & FRONT_AMBIENT_BIT) {
       struct gl_material *mat = &ctx->Light.Material[0];
@@ -623,6 +650,27 @@ void gl_update_color_material( GLcontext *ctx,
       ACC_3V( ctx->Light.BaseColor[1], tmp );
       COPY_4FV( mat->Emission, color );
    }
+
+   if (0)
+   {
+      struct gl_material *mat = &ctx->Light.Material[0];
+      fprintf(stderr, "update_color_mat  emission : %f %f %f\n",
+             mat->Emission[0],
+             mat->Emission[1],
+             mat->Emission[2]);
+      fprintf(stderr, "update_color_mat  specular : %f %f %f\n",
+             mat->Specular[0],
+             mat->Specular[1],
+             mat->Specular[2]);
+      fprintf(stderr, "update_color_mat  diffuse : %f %f %f\n",
+             mat->Diffuse[0],
+             mat->Diffuse[1],
+             mat->Diffuse[2]);
+      fprintf(stderr, "update_color_mat  ambient : %f %f %f\n",
+             mat->Ambient[0],
+             mat->Ambient[1],
+             mat->Ambient[2]);
+   }
 }
 
 
@@ -638,6 +686,11 @@ void gl_ColorMaterial( GLcontext *ctx, GLenum face, GLenum mode )
 
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glColorMaterial");
 
+   if (MESA_VERBOSE&VERBOSE_API) 
+      fprintf(stderr, "glColorMaterial %s %s\n", 
+             gl_lookup_enum_by_nr(face),
+             gl_lookup_enum_by_nr(mode));
+
    bitmask = gl_material_bitmask( ctx, face, mode, legal, "glColorMaterial" );
 
    if (bitmask != 0) {
@@ -645,6 +698,9 @@ void gl_ColorMaterial( GLcontext *ctx, GLenum face, GLenum mode )
       ctx->Light.ColorMaterialFace = face;
       ctx->Light.ColorMaterialMode = mode;
    }
+
+   if (ctx->Light.ColorMaterialEnabled)
+      gl_update_color_material( ctx, ctx->Current.ByteColor );
 }
 
 
@@ -680,7 +736,6 @@ void gl_Materialfv( GLcontext *ctx,
       IM->MaterialMask[count] = 0;      
    }
 
-
    IM->MaterialMask[count] |= bitmask;
    mat = IM->Material[count];