[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