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:
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl')
-rw-r--r--source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl53
1 files changed, 53 insertions, 0 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl b/source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl
new file mode 100644
index 00000000000..2a00160836b
--- /dev/null
+++ b/source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl
@@ -0,0 +1,53 @@
+
+uniform float normalSize;
+uniform sampler2D depthTex;
+uniform float alpha = 1.0;
+
+in vec3 pos;
+in vec3 lnor;
+in vec3 vnor;
+in vec4 norAndFlag;
+
+flat out vec4 finalColor;
+
+bool test_occlusion()
+{
+ vec3 ndc = (gl_Position.xyz / gl_Position.w) * 0.5 + 0.5;
+ return (ndc.z - 0.00035) > texture(depthTex, ndc.xy).r;
+}
+
+void main()
+{
+ GPU_INTEL_VERTEX_SHADER_WORKAROUND
+
+ vec3 nor;
+ /* Select the right normal by cheking if the generic attrib is used. */
+ if (!all(equal(lnor, vec3(0)))) {
+ nor = lnor;
+ finalColor = colorLNormal;
+ }
+ else if (!all(equal(vnor, vec3(0)))) {
+ nor = vnor;
+ finalColor = colorVNormal;
+ }
+ else {
+ nor = norAndFlag.xyz;
+ finalColor = colorNormal;
+ }
+
+ vec3 n = normalize(normal_object_to_world(nor));
+
+ vec3 world_pos = point_object_to_world(pos);
+
+ if (gl_VertexID == 0) {
+ world_pos += n * normalSize;
+ }
+
+ gl_Position = point_world_to_ndc(world_pos);
+
+ finalColor.a *= (test_occlusion()) ? alpha : 1.0;
+
+#ifdef USE_WORLD_CLIP_PLANES
+ world_clip_planes_calc_clip_distance(world_pos);
+#endif
+}