diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-01-21 11:08:42 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-01-21 11:08:42 +0300 |
commit | 78d2abd9c16f97be2ab272ee38ba7e398f57a742 (patch) | |
tree | ab83647a2f0477ab7fda9665eecccd6db6da951b /source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl | |
parent | 7bc9a563e65842629a98f0655578e1e4f8c8c960 (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.glsl | 41 |
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(); |