tranforming display list normals by non-uniform scale didn't work (Carlos Pereira)
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 8 Apr 2002 15:37:13 +0000 (15:37 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 8 Apr 2002 15:37:13 +0000 (15:37 +0000)
src/mesa/tnl/t_vb_normals.c

index 06d2fde4eab53c4d3cdf9116dd977cea2ad15bcc..541aa885df6e35d15d9bb15c3ca8254d0540f809 100644 (file)
@@ -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 */