Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-05-08 18:12:24 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-08 18:52:48 +0300
commit8c5c02932f20dac55675448dae4dbccbbc34aaf8 (patch)
treeeaae24ec9a57a59e1786f8ee8ea3527ac08342f7 /source/blender/draw/modes/shaders
parent8d3e2ffa07576561d44a6f1e2aa4cccd765b5396 (diff)
Wireframe: Refactor vertex shader to use less matrices
This means less matrices needs to be prepared by the CPU.
Diffstat (limited to 'source/blender/draw/modes/shaders')
-rw-r--r--source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl52
1 files changed, 20 insertions, 32 deletions
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 */