From 5a706eea4beb1c4f256351109eecc5beb23eb533 Mon Sep 17 00:00:00 2001
From: ansgar <ansgar@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Sat, 29 May 2010 15:51:45 +0000
Subject: [PATCH] fixed broken point/line display for some shaders

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/branches/new_gfx@2307 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gfx/src/shader/basic_hf_vs.glsl | 5 ++++-
 modules/gfx/src/shader/dumpnorm_vs.glsl | 5 ++++-
 modules/gfx/src/shader/toon_vs.glsl     | 5 ++++-
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/modules/gfx/src/shader/basic_hf_vs.glsl b/modules/gfx/src/shader/basic_hf_vs.glsl
index 4dbe147a6..80324bf1d 100644
--- a/modules/gfx/src/shader/basic_hf_vs.glsl
+++ b/modules/gfx/src/shader/basic_hf_vs.glsl
@@ -17,7 +17,10 @@ void main()
   // hemisphere lighting contribution
   vec3 ec_pos = vec3(gl_ModelViewMatrix* gl_Vertex);
   if(lighting_flag) {
-    vec3 normal = normalize(gl_NormalMatrix * gl_Normal);
+    vec3 normal = vec3(0,0,1);
+    if(dot(gl_Normal,gl_Normal)>0.001) {
+      normal = normalize(gl_NormalMatrix * gl_Normal);
+    }
     vec3 l_dir  = normalize(gl_LightSource[0].position.xyz); // assume directional vector
     float a  = 0.5+0.5*dot(normal,l_dir);
     gl_FrontColor.rgb = mix(ground_color, sky_color, a).rgb;
diff --git a/modules/gfx/src/shader/dumpnorm_vs.glsl b/modules/gfx/src/shader/dumpnorm_vs.glsl
index f11d00259..f4cc4a1b4 100644
--- a/modules/gfx/src/shader/dumpnorm_vs.glsl
+++ b/modules/gfx/src/shader/dumpnorm_vs.glsl
@@ -1,7 +1,10 @@
 void main()
 {
   gl_Position = ftransform();
-  vec3 normal = gl_NormalMatrix * gl_Normal;
+  vec3 normal = vec3(0,0,1);
+  if(dot(gl_Normal,gl_Normal)>0.001) {
+    normal = gl_NormalMatrix * gl_Normal;
+  }
   gl_TexCoord[0].stp=normal;
 }
 
diff --git a/modules/gfx/src/shader/toon_vs.glsl b/modules/gfx/src/shader/toon_vs.glsl
index 1913f445e..3eb50da66 100644
--- a/modules/gfx/src/shader/toon_vs.glsl
+++ b/modules/gfx/src/shader/toon_vs.glsl
@@ -7,7 +7,10 @@ void main()
   // for some reason, the fog and z coordinate are sign toggled...
   gl_FogFragCoord = -ec_Pos.z;
 
-  vec3 normal = normalize(gl_NormalMatrix * gl_Normal);
+  vec3 normal = vec3(0,0,1);
+  if(dot(gl_Normal,gl_Normal)>0.001) {
+    normal = normalize(gl_NormalMatrix * gl_Normal);
+  }
   // since a directional light is used, the position is not needed
   gl_TexCoord[0].stp=normal;
 
-- 
GitLab