diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-10-15 02:49:53 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-10-16 19:58:12 +0300 |
commit | 4ddf3215a7df3ac4a0cfceccb283414510078ba5 (patch) | |
tree | ce0bea243fa956facde99f10cacb11566d292a95 /source/blender/draw/modes/shaders | |
parent | 895666689931b313b06bd6f8384ac09794723f19 (diff) |
Fix T68380 Skin modifier root not displayed
Diffstat (limited to 'source/blender/draw/modes/shaders')
-rw-r--r-- | source/blender/draw/modes/shaders/common_globals_lib.glsl | 1 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/edit_mesh_skin_root_vert.glsl | 30 |
2 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/draw/modes/shaders/common_globals_lib.glsl b/source/blender/draw/modes/shaders/common_globals_lib.glsl index e559224eb9e..d147b193ccf 100644 --- a/source/blender/draw/modes/shaders/common_globals_lib.glsl +++ b/source/blender/draw/modes/shaders/common_globals_lib.glsl @@ -34,6 +34,7 @@ layout(std140) uniform globalsBlock vec4 colorVNormal; vec4 colorLNormal; vec4 colorFaceDot; + vec4 colorSkinRoot; vec4 colorDeselect; vec4 colorOutline; vec4 colorLightNoAlpha; diff --git a/source/blender/draw/modes/shaders/edit_mesh_skin_root_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_skin_root_vert.glsl new file mode 100644 index 00000000000..5187571b27b --- /dev/null +++ b/source/blender/draw/modes/shaders/edit_mesh_skin_root_vert.glsl @@ -0,0 +1,30 @@ +/* Need dedicated obmat since we use instancing attribs + * (we cannot let have baseinstance mess them). */ +uniform vec4 editModelMat[4]; +uniform vec3 screen_vecs[2]; + +/* ---- Instantiated Attrs ---- */ +in vec2 pos; + +/* ---- Per instance Attrs ---- */ +in float size; +in vec3 local_pos; + +flat out vec4 finalColor; + +void main() +{ + mat4 obmat = mat4(editModelMat[0], editModelMat[1], editModelMat[2], editModelMat[3]); + /* Could be optimized... but it is only for a handful of verts so not a priority. */ + mat3 imat = inverse(mat3(obmat)); + vec3 right = normalize(imat * vec3(screen_vecs[0])); + vec3 up = normalize(imat * vec3(screen_vecs[1])); + vec3 screen_pos = (right * pos.x + up * pos.y) * size; + vec4 pos_4d = obmat * vec4(local_pos + screen_pos, 1.0); + gl_Position = ViewProjectionMatrix * pos_4d; + finalColor = colorSkinRoot; + +#ifdef USE_WORLD_CLIP_PLANES + world_clip_planes_calc_clip_distance(pos_4d.xyz); +#endif +} |