Calculate render inputs for tcl stage correctly (hint: they aren't the

same as tnl->render_inputs).  Fixes recent tcl problems.
This commit is contained in:
Keith Whitwell 2005-05-13 09:15:50 +00:00
parent c9a69a6968
commit 846eb333ae

View file

@ -370,6 +370,7 @@ static GLboolean r200_run_tcl_render( GLcontext *ctx,
r200ContextPtr rmesa = R200_CONTEXT(ctx);
TNLcontext *tnl = TNL_CONTEXT(ctx);
struct vertex_buffer *VB = &tnl->vb;
GLuint inputs = VERT_BIT_POS | VERT_BIT_COLOR0;
GLuint i;
/* TODO: separate this from the swtnl pipeline
@ -383,8 +384,38 @@ static GLboolean r200_run_tcl_render( GLcontext *ctx,
if (VB->Count == 0)
return GL_FALSE;
/* Validate state:
*/
if (rmesa->NewGLState)
r200ValidateState( ctx );
/* NOTE: inputs != tnl->render_inputs - these are the untransformed
* inputs.
*/
if (ctx->Light.Enabled) {
inputs |= VERT_BIT_NORMAL;
if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) {
inputs |= VERT_BIT_COLOR1;
}
}
if ( ctx->Fog.FogCoordinateSource == GL_FOG_COORD ) {
inputs |= VERT_BIT_FOG;
}
for (i = 0 ; i < ctx->Const.MaxTextureUnits; i++) {
if (ctx->Texture.Unit[i]._ReallyEnabled) {
if (rmesa->TexGenNeedNormals[i]) {
inputs |= VERT_BIT_NORMAL;
}
inputs |= VERT_BIT_TEX(i);
}
}
/* Do the actual work:
*/
r200ReleaseArrays( ctx, ~0 /* stage->changed_inputs */ );
r200EmitArrays( ctx, tnl->render_inputs );
r200EmitArrays( ctx, inputs );
rmesa->tcl.Elts = VB->Elts;