From c030a18ea6a07f10fc0873695fb34c11d8239423 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 8 Apr 2002 15:37:13 +0000 Subject: tranforming display list normals by non-uniform scale didn't work (Carlos Pereira) --- src/mesa/tnl/t_vb_normals.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src/mesa/tnl/t_vb_normals.c') diff --git a/src/mesa/tnl/t_vb_normals.c b/src/mesa/tnl/t_vb_normals.c index 06d2fde4ea..541aa885df 100644 --- a/src/mesa/tnl/t_vb_normals.c +++ b/src/mesa/tnl/t_vb_normals.c @@ -1,10 +1,10 @@ -/* $Id: t_vb_normals.c,v 1.13 2002/01/22 14:35:17 brianp Exp $ */ +/* $Id: t_vb_normals.c,v 1.14 2002/04/08 15:37:13 brianp Exp $ */ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.1 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -61,12 +61,22 @@ static GLboolean run_normal_stage( GLcontext *ctx, ASSERT(store->NormalTransform); - if (stage->changed_inputs) + if (stage->changed_inputs) { + /* We can only use the display list's saved normal lengths if we've + * got a transformation matrix with uniform scaling. + */ + const GLfloat *lengths; + if (ctx->ModelviewMatrixStack.Top->flags & MAT_FLAG_GENERAL_SCALE) + lengths = NULL; + else + lengths = VB->NormalLengthPtr; + store->NormalTransform( ctx->ModelviewMatrixStack.Top, ctx->_ModelViewInvScale, VB->NormalPtr, - VB->NormalLengthPtr, + lengths, &store->normal ); + } VB->NormalPtr = &store->normal; VB->NormalLengthPtr = 0; /* no longer valid */ -- cgit v1.2.3