Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-10-15 11:43:49 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-10-15 11:43:49 +0300
commit0c394530718880064b04e53032dd9cce0cbc31e7 (patch)
treea809f6e96226d7630cb7226e0d137969ecf2d32a /source/blender
parent38828309d393c446392d9266451efd99a43c989e (diff)
Cleanup: Edit Mesh shader: Remove unecessary varying
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl7
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl74
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl5
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