diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-10-15 11:43:49 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-10-15 11:43:49 +0300 |
commit | 0c394530718880064b04e53032dd9cce0cbc31e7 (patch) | |
tree | a809f6e96226d7630cb7226e0d137969ecf2d32a /source/blender | |
parent | 38828309d393c446392d9266451efd99a43c989e (diff) |
Cleanup: Edit Mesh shader: Remove unecessary varying
Diffstat (limited to 'source/blender')
3 files changed, 37 insertions, 49 deletions
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl index 13591cea8fb..d8b54168f09 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl @@ -8,7 +8,6 @@ layout(triangle_strip, max_vertices=4) out; uniform mat4 ProjectionMatrix; uniform vec2 viewportSize; -in vec4 vPos[]; in vec4 pPos[]; in ivec4 vData[]; #ifdef VERTEX_FACING @@ -77,10 +76,8 @@ void main() /* Perspective */ if (ProjectionMatrix[3][3] == 0.0) { - /* vPos[i].z is negative and we don't want - * our fixvec to be flipped */ - dirs1 *= -vPos[0].z; - dirs2 *= -vPos[1].z; + dirs1 *= pPos[0].w; + dirs2 *= pPos[1].w; } /* Edge / Vert data */ diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl index 3b7af9108e2..9e56a1f2b3c 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl @@ -14,7 +14,6 @@ layout(triangle_strip, max_vertices=12) out; uniform mat4 ProjectionMatrix; uniform vec2 viewportSize; -in vec4 vPos[]; in vec4 pPos[]; in ivec4 vData[]; #ifdef VERTEX_FACING @@ -79,9 +78,7 @@ void doVertexOfs(int v, vec2 fixvec) #ifdef VERTEX_FACING facing = v_facing[v]; #endif - gl_Position = pPos[v]; - - gl_Position.xyz += vec3(fixvec, Z_OFFSET); + gl_Position = pPos[v] + vec4(fixvec, Z_OFFSET, 0.0); EmitVertex(); } @@ -98,6 +95,35 @@ void mask_edge_flag(int v, ivec3 eflag) flag[v] &= ~EDGE_EXISTS; } +vec2 compute_fixvec(int i) +{ + int i1 = (i + 1) % 3; + int i2 = (i + 2) % 3; + /* This fix the case when 2 vertices are perfectly aligned + * and corner vectors have nowhere to go. + * ie: length(cornervec[i]) == 0 */ + const float epsilon = 1e-2; /* in pixel so not that much */ + const vec2 bias[3] = vec2[3]( + vec2( epsilon, epsilon), + vec2(-epsilon, epsilon), + vec2( 0.0, -epsilon) + ); + vec2 v1 = ssPos[i] + bias[i]; + vec2 v2 = ssPos[i1] + bias[i1]; + vec2 v3 = ssPos[i2] + bias[i2]; + /* Edge normalized vector */ + vec2 dir = normalize(v2 - v1); + vec2 dir2 = normalize(v3 - v1); + /* perpendicular to dir */ + vec2 perp = vec2(-dir.y, dir.x); + /* Backface case */ + if (dot(perp, dir2) > 0.0) { + perp = -perp; + } + /* Make it view independent */ + return perp * sizeEdgeFix / viewportSize;; +} + void main() { /* Edge */ @@ -127,46 +153,12 @@ void main() vec2 fixvec[3]; vec2 fixvecaf[3]; - /* This fix the case when 2 vertices are perfectly aligned - * and corner vectors have nowhere to go. - * ie: length(cornervec[i]) == 0 */ - const float epsilon = 1e-2; /* in pixel so not that much */ - const vec2 bias[3] = vec2[3]( - vec2( epsilon, epsilon), - vec2(-epsilon, epsilon), - vec2( 0.0, -epsilon) - ); - for (int i = 0; i < 3; ++i) { - int i1 = (i + 1) % 3; - int i2 = (i + 2) % 3; - - vec2 v1 = ssPos[i] + bias[i]; - vec2 v2 = ssPos[i1] + bias[i1]; - vec2 v3 = ssPos[i2] + bias[i2]; - - /* Edge normalized vector */ - vec2 dir = normalize(v2 - v1); - vec2 dir2 = normalize(v3 - v1); - - /* perpendicular to dir */ - vec2 perp = vec2(-dir.y, dir.x); - - /* Backface case */ - if (dot(perp, dir2) > 0) { - perp = -perp; - } - - /* Make it view independent */ - perp *= sizeEdgeFix / viewportSize; - fixvec[i] = fixvecaf[i] = perp; - + fixvec[i] = fixvecaf[i] = compute_fixvec(i); /* Perspective */ if (ProjectionMatrix[3][3] == 0.0) { - /* vPos[i].z is negative and we don't want - * our fixvec to be flipped */ - fixvec[i] *= -vPos[i].z; - fixvecaf[i] *= -vPos[i1].z; + fixvec[i] *= pPos[i].w; + fixvecaf[i] *= pPos[(i + 1) % 3].w; } } diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl index 8715ab69181..8b1ffb5199d 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl @@ -20,7 +20,6 @@ in vec3 vnor; #ifdef EDGE_FIX in ivec4 data; -out vec4 vPos; out vec4 pPos; out ivec4 vData; # ifdef VERTEX_FACING @@ -29,14 +28,14 @@ out float vFacing; void main() { - vPos = ModelViewMatrix * vec4(pos, 1.0); pPos = ModelViewProjectionMatrix * vec4(pos, 1.0); pPos.z -= ofs; vData = data & dataMask; # ifdef VERTEX_FACING + vec4 vpos = ModelViewMatrix * vec4(pos, 1.0); vec3 view_normal = normalize(NormalMatrix * vnor); vec3 view_vec = (ProjectionMatrix[3][3] == 0.0) - ? normalize(vPos.xyz) + ? normalize(vpos.xyz) : vec3(0.0, 0.0, 1.0); vFacing = dot(view_vec, view_normal); # endif |