Fix the RGB order of the specular color emit, and turn GL_EXT_secondary_color
authorEric Anholt <anholt@FreeBSD.org>
Wed, 26 Oct 2005 10:46:49 +0000 (10:46 +0000)
committerEric Anholt <anholt@FreeBSD.org>
Wed, 26 Oct 2005 10:46:49 +0000 (10:46 +0000)
back on.  Tested using seccolor modified to use the blue channel instead of
green, since green stays in the same place across RGB/BGR mistakes.  Also hook
in UpdateSpecular on COLOR_EXT change, which might have resulted in missing
statechanges before.

src/mesa/drivers/dri/r128/r128_context.c
src/mesa/drivers/dri/r128/r128_state.c
src/mesa/drivers/dri/r128/r128_tris.c

index 986be35c9d158643b49f8f4c5f6f19d8afa028c0..7909951f0ba2ad22147f0a9cb78f8e3c01a9d9b6 100644 (file)
@@ -68,8 +68,9 @@ int R128_DEBUG = 0;
 
 #define need_GL_ARB_multisample
 #define need_GL_ARB_texture_compression
-#define need_GL_EXT_fog_coord
 #define need_GL_EXT_blend_minmax
+#define need_GL_EXT_fog_coord
+#define need_GL_EXT_secondary_color
 #include "extension_helper.h"
 
 const struct dri_extension card_extensions[] =
@@ -82,6 +83,7 @@ const struct dri_extension card_extensions[] =
     { "GL_EXT_blend_subtract",             GL_EXT_blend_minmax_functions },
     { "GL_EXT_fog_coord",                  GL_EXT_fog_coord_functions },
     { "GL_EXT_texture_edge_clamp",         NULL },
+    { "GL_EXT_secondary_color",            GL_EXT_secondary_color_functions },
     { "GL_MESA_ycbcr_texture",             NULL },
     { "GL_NV_blend_square",                NULL },
     { "GL_SGIS_generate_mipmap",           NULL },
index 7da3a081904ca7bdf3369bc32a7ffef07ac4730b..f6c6504566b58923995def4d2fe921a6cf500493 100644 (file)
@@ -545,34 +545,20 @@ static void updateSpecularLighting( GLcontext *ctx )
    r128ContextPtr rmesa = R128_CONTEXT(ctx);
    GLuint t = rmesa->setup.tex_cntl_c;
 
-   if ( ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR &&
-        ctx->Light.Enabled) {
-      /* XXX separate specular color just doesn't seem to work as it should.
-       * For now, we fall back to s/w rendering whenever separate specular
-       * is enabled.
-       */
-#if 0
+   if ( NEED_SECONDARY_COLOR( ctx ) ) {
       if (ctx->Light.ShadeModel == GL_FLAT) {
          /* R128 can't do flat-shaded separate specular */
          t &= ~R128_SPEC_LIGHT_ENABLE;
          FALLBACK( rmesa, R128_FALLBACK_SEP_SPECULAR, GL_TRUE );
-         /*printf("%s fallback  sep spec\n", __FUNCTION__);*/
       }
       else {
          t |= R128_SPEC_LIGHT_ENABLE;
          FALLBACK( rmesa, R128_FALLBACK_SEP_SPECULAR, GL_FALSE );
-         /*printf("%s enable sep spec\n", __FUNCTION__);*/
       }
-#else
-      t &= ~R128_SPEC_LIGHT_ENABLE;
-      FALLBACK( rmesa, R128_FALLBACK_SEP_SPECULAR, GL_TRUE );
-      /*printf("%s fallback  sep spec\n", __FUNCTION__);*/
-#endif
    }
    else {
       t &= ~R128_SPEC_LIGHT_ENABLE;
       FALLBACK( rmesa, R128_FALLBACK_SEP_SPECULAR, GL_FALSE );
-      /*printf("%s disable sep spec\n", __FUNCTION__);*/
    }
 
    if ( rmesa->setup.tex_cntl_c != t ) {
@@ -855,6 +841,7 @@ static void r128DDEnable( GLcontext *ctx, GLenum cap, GLboolean state )
       break;
 
    case GL_LIGHTING:
+   case GL_COLOR_SUM_EXT:
       updateSpecularLighting(ctx);
       break;
 
index c12ad0ccb0b8e7d9b914eb515b0f944ea62c24c2..64f54682b6e650c8886328b2a71bc352e3a49023 100644 (file)
@@ -595,7 +595,7 @@ static void r128RenderStart( GLcontext *ctx )
 #if MESA_LITTLE_ENDIAN
       if ( index & _TNL_BIT_COLOR1) {
         rmesa->specoffset = offset;
-        EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB,
+        EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR,
            R128_CCE_VC_FRMT_SPEC_FRGB, 3 );
       } else 
         EMIT_PAD( 3 );