if light position is local, treat it as a homogeneous coord and divide by W (see...
authorBrian <brian.paul@tungstengraphics.com>
Mon, 21 May 2007 14:57:18 +0000 (08:57 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Mon, 21 May 2007 14:57:18 +0000 (08:57 -0600)
src/mesa/main/light.c

index 92d8a0ae0d4c7dfca11dfb2bd4b35062b593c20b..6e057614badf559fabfd253068cc0aa158a35ad7 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.5.3
+ * Version:  7.0
  *
- * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2007  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"),
@@ -1117,6 +1117,13 @@ compute_light_positions( GLcontext *ctx )
         }
         light->_VP_inf_spot_attenuation = 1.0;
       }
+      else {
+         /* positional light w/ homogeneous coordinate, divide by W */
+         GLfloat wInv = 1.0 / light->_Position[3];
+         light->_Position[0] *= wInv;
+         light->_Position[1] *= wInv;
+         light->_Position[2] *= wInv;
+      }
 
       if (light->_Flags & LIGHT_SPOT) {
         if (ctx->_NeedEyeCoords) {