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:
authorCampbell Barton <ideasman42@gmail.com>2019-01-21 11:08:42 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-21 11:08:42 +0300
commit78d2abd9c16f97be2ab272ee38ba7e398f57a742 (patch)
treeab83647a2f0477ab7fda9665eecccd6db6da951b /source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
parent7bc9a563e65842629a98f0655578e1e4f8c8c960 (diff)
DRW: Support wire overlay clipping
Diffstat (limited to 'source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl')
-rw-r--r--source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl41
1 files changed, 32 insertions, 9 deletions
diff --git a/source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl b/source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
index 9249b29436b..2f3acc2a050 100644
--- a/source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
+++ b/source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
@@ -8,6 +8,10 @@ layout(line_strip, max_vertices = 6) out;
layout(triangle_strip, max_vertices = 3) out;
#endif
+#ifdef USE_WORLD_CLIP_PLANES
+uniform int WorldClipPlanesLen;
+#endif
+
in float facing_g[];
in float edgeSharpness_g[];
@@ -17,25 +21,44 @@ out vec3 barycentric;
flat out vec3 edgeSharpness;
#endif
+void vert_from_gl_in(int v)
+{
+ gl_Position = gl_in[v].gl_Position;
+#ifdef USE_WORLD_CLIP_PLANES
+ for (int i = 0; i < WorldClipPlanesLen; i++) {
+ gl_ClipDistance[i] = gl_in[v].gl_ClipDistance[i];
+ }
+#endif
+}
+
void main(void)
{
#ifdef SELECT_EDGES
const float edge_select_threshold = 0.3;
if (edgeSharpness_g[0] > edge_select_threshold) {
- gl_Position = gl_in[0].gl_Position; EmitVertex();
- gl_Position = gl_in[1].gl_Position; EmitVertex();
+ vert_from_gl_in(0);
+ EmitVertex();
+ vert_from_gl_in(1);
+ EmitVertex();
+
EndPrimitive();
}
if (edgeSharpness_g[1] > edge_select_threshold) {
- gl_Position = gl_in[1].gl_Position; EmitVertex();
- gl_Position = gl_in[2].gl_Position; EmitVertex();
+ vert_from_gl_in(1);
+ EmitVertex();
+ vert_from_gl_in(2);
+ EmitVertex();
+
EndPrimitive();
}
if (edgeSharpness_g[2] > edge_select_threshold) {
- gl_Position = gl_in[2].gl_Position; EmitVertex();
- gl_Position = gl_in[0].gl_Position; EmitVertex();
+ vert_from_gl_in(2);
+ EmitVertex();
+ vert_from_gl_in(0);
+ EmitVertex();
+
EndPrimitive();
}
#else
@@ -50,17 +73,17 @@ void main(void)
edgeSharpness = vec3(1.0);
barycentric = vec3(1.0, 0.0, 0.0);
- gl_Position = gl_in[0].gl_Position;
+ vert_from_gl_in(0);
facing = facing_g[0];
EmitVertex();
barycentric = vec3(0.0, 1.0, 0.0);
- gl_Position = gl_in[1].gl_Position;
+ vert_from_gl_in(1);
facing = facing_g[1];
EmitVertex();
barycentric = vec3(0.0, 0.0, 1.0);
- gl_Position = gl_in[2].gl_Position;
+ vert_from_gl_in(2);
facing = facing_g[2];
EmitVertex();
EndPrimitive();