Fix the RGB order of the specular color emit, and turn GL_EXT_secondary_color

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.
This commit is contained in:
Eric Anholt 2005-10-26 10:46:49 +00:00
parent f8a5898ca0
commit 5f79025e0d
3 changed files with 6 additions and 17 deletions

View 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 },

View 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;

View 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 );