diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-03-16 10:41:34 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-03-16 10:43:36 +0300 |
commit | 37af7ce779af9bdf0e858251edc866687d895913 (patch) | |
tree | d649b171bdc992fb1af1578f339be3112076ab33 /source/blender/draw/modes | |
parent | c55fb58e8a4f1fd34d24deeed3a86b32e819d677 (diff) |
DRW: support clipping for armature bone axes
Also minor changes to make empty axis match armature axis.
Diffstat (limited to 'source/blender/draw/modes')
-rw-r--r-- | source/blender/draw/modes/shaders/armature_axes_vert.glsl | 11 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/object_empty_axes_vert.glsl | 8 |
2 files changed, 14 insertions, 5 deletions
diff --git a/source/blender/draw/modes/shaders/armature_axes_vert.glsl b/source/blender/draw/modes/shaders/armature_axes_vert.glsl index 137bcff1ed1..ac640f0c303 100644 --- a/source/blender/draw/modes/shaders/armature_axes_vert.glsl +++ b/source/blender/draw/modes/shaders/armature_axes_vert.glsl @@ -1,7 +1,9 @@ uniform mat4 ViewProjectionMatrix; uniform vec3 screenVecs[3]; - +#ifdef USE_WORLD_CLIP_PLANES +uniform mat4 ModelMatrix; +#endif /* ---- Instantiated Attrs ---- */ in float axis; /* position on the axis. [0.0-1.0] is X axis, [1.0-2.0] is Y, etc... */ in vec2 screenPos; @@ -23,8 +25,13 @@ void main() /* Scale uniformly by axis length */ spos *= length(chosen_axis); - gl_Position = ViewProjectionMatrix * vec4(wpos + spos, 1.0); + vec4 pos_4d = vec4(wpos + spos, 1.0); + gl_Position = ViewProjectionMatrix * pos_4d; finalColor.rgb = mix(colorAxis, color.rgb, color.a); finalColor.a = 1.0; + +#ifdef USE_WORLD_CLIP_PLANES + world_clip_planes_calc_clip_distance((ModelMatrix * pos_4d).xyz); +#endif } diff --git a/source/blender/draw/modes/shaders/object_empty_axes_vert.glsl b/source/blender/draw/modes/shaders/object_empty_axes_vert.glsl index 4aafceeb437..8de25de35ad 100644 --- a/source/blender/draw/modes/shaders/object_empty_axes_vert.glsl +++ b/source/blender/draw/modes/shaders/object_empty_axes_vert.glsl @@ -1,6 +1,8 @@ uniform mat4 ViewProjectionMatrix; +#ifdef USE_WORLD_CLIP_PLANES uniform mat4 ModelMatrix; +#endif uniform vec3 screenVecs[3]; @@ -25,12 +27,12 @@ void main() /* Scale uniformly by axis length */ spos *= length(chosen_axis) * draw_size; - vec4 pos = vec4(wpos + spos, 1.0); - gl_Position = ViewProjectionMatrix * pos; + vec4 pos_4d = vec4(wpos + spos, 1.0); + gl_Position = ViewProjectionMatrix * pos_4d; finalColor = vec4(color, 1.0); #ifdef USE_WORLD_CLIP_PLANES - world_clip_planes_calc_clip_distance((ModelMatrix * pos).xyz); + world_clip_planes_calc_clip_distance((ModelMatrix * pos_4d).xyz); #endif } |