diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-12-17 23:24:43 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-12-18 04:19:52 +0300 |
commit | 6a1315d6e72689907207a1202b6372402ace59af (patch) | |
tree | 8938905d8d8d8e43cbb6ff0f7341873183d46e58 /source/blender/draw/modes/shaders/paint_wire_vert.glsl | |
parent | 4fceaf3848b6ff926a8f0ffdb8f5a7b1537da57b (diff) |
Weight Paint Overlay: Refactor wire drawing
This reduce the number of batch/data needed. Stores a select/visiblee
flag inside the vert/loop normals.
Diffstat (limited to 'source/blender/draw/modes/shaders/paint_wire_vert.glsl')
-rw-r--r-- | source/blender/draw/modes/shaders/paint_wire_vert.glsl | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/source/blender/draw/modes/shaders/paint_wire_vert.glsl b/source/blender/draw/modes/shaders/paint_wire_vert.glsl index 253c21745e2..a92591b957d 100644 --- a/source/blender/draw/modes/shaders/paint_wire_vert.glsl +++ b/source/blender/draw/modes/shaders/paint_wire_vert.glsl @@ -2,13 +2,30 @@ uniform mat4 ModelViewProjectionMatrix; in vec3 pos; -in int data; +in vec4 nor; /* flag stored in w */ -flat out int finalFlag; +flat out vec4 finalColor; void main() { + bool is_select = (nor.w > 0.0); + bool is_hidden = (nor.w < 0.0); gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); + /* Add offset in Z to avoid zfighting and render selected wires on top. */ + /* TODO scale this bias using znear and zfar range. */ + gl_Position.zw -= exp2(-20) * (is_select ? 2.0 : 1.0); - finalFlag = data; + if (is_hidden) { + gl_Position = vec4(-2.0, -2.0, -2.0, 1.0); + } + +#ifdef VERTEX_MODE + vec4 colSel = colorEdgeSelect; + colSel.rgb = clamp(colSel.rgb - 0.2, 0.0, 1.0); +#else + const vec4 colSel = vec4(1.0, 1.0, 1.0, 1.0); +#endif + + finalColor = (is_select) ? colSel : colorWire; + finalColor.a = nor.w; } |