[Bf-blender-cvs] [8c5c02932f2] master: Wireframe: Refactor vertex shader to use less matrices

Clément Foucault noreply at git.blender.org
Wed May 8 17:59:27 CEST 2019


Commit: 8c5c02932f20dac55675448dae4dbccbbc34aaf8
Author: Clément Foucault
Date:   Wed May 8 17:12:24 2019 +0200
Branches: master
https://developer.blender.org/rB8c5c02932f20dac55675448dae4dbccbbc34aaf8

Wireframe: Refactor vertex shader to use less matrices

This means less matrices needs to be prepared by the CPU.

===================================================================

M	source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl

===================================================================

diff --git a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
index 96acba71233..d73f0bdb609 100644
--- a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
+++ b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
@@ -1,8 +1,10 @@
 
 uniform mat4 ProjectionMatrix;
-uniform mat4 ModelViewMatrix;
+uniform mat4 ViewMatrix;
+uniform mat4 ViewMatrixInverse;
+
 uniform mat4 ModelMatrix;
-uniform mat3 NormalMatrix;
+uniform mat4 ModelMatrixInverse;
 
 uniform float wireStepParam;
 uniform float ofs;
@@ -11,57 +13,43 @@ in vec3 pos;
 in vec3 nor;
 in float wd; /* wiredata */
 
-#ifndef USE_SCULPT
 float get_edge_sharpness(float wd)
 {
+#ifndef USE_SCULPT
   return ((wd == 0.0) ? -1.5 : wd) + wireStepParam;
-}
 #else
-float get_edge_sharpness(float wd)
-{
   return 1.0;
-}
 #endif
+}
+
+#define transform_normal_to_world(nor) (transpose(mat3(ModelMatrixInverse)) * nor)
 
 /* Geometry shader version */
 #if defined(SELECT_EDGES) || defined(USE_GEOM)
 out float facing_g;
 out float edgeSharpness_g;
 
-void main()
-{
-  edgeSharpness_g = get_edge_sharpness(wd);
-
-  mat4 projmat = ProjectionMatrix;
-  projmat[3][2] -= ofs;
-
-  gl_Position = projmat * (ModelViewMatrix * vec4(pos, 1.0));
-
-  facing_g = normalize(NormalMatrix * nor).z;
-
-#  ifdef USE_WORLD_CLIP_PLANES
-  world_clip_planes_calc_clip_distance((ModelMatrix * vec4(pos, 1.0)).xyz);
-#  endif
-}
-
 #else /* USE_GEOM */
 out float facing;
 flat out float edgeSharpness;
+#  define facing_g facing
+#  define edgeSharpness_g edgeSharpness
+
+#endif /* SELECT_EDGES */
 
 void main()
 {
-  edgeSharpness = get_edge_sharpness(wd);
-
   mat4 projmat = ProjectionMatrix;
   projmat[3][2] -= ofs;
 
-  gl_Position = projmat * (ModelViewMatrix * vec4(pos, 1.0));
+  vec4 wpos = ModelMatrix * vec4(pos, 1.0);
+  gl_Position = projmat * (ViewMatrix * wpos);
 
-  facing = normalize(NormalMatrix * nor).z;
+  vec3 wnor = normalize(transform_normal_to_world(nor));
+  facing_g = dot(wnor, ViewMatrixInverse[2].xyz);
+  edgeSharpness_g = get_edge_sharpness(wd);
 
-#  ifdef USE_WORLD_CLIP_PLANES
-  world_clip_planes_calc_clip_distance((ModelMatrix * vec4(pos, 1.0)).xyz);
-#  endif
+#ifdef USE_WORLD_CLIP_PLANES
+  world_clip_planes_calc_clip_distance(wpos.xyz);
+#endif
 }
-
-#endif /* SELECT_EDGES */



More information about the Bf-blender-cvs mailing list