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:
Diffstat (limited to 'source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl')
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl51
1 files changed, 35 insertions, 16 deletions
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 e27e1d01750..bc25ff17e74 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
@@ -17,13 +17,32 @@ in vec4 norAndFlag;
# define vnor norAndFlag.xyz
#endif
-#ifdef FLAT
-flat out vec4 finalColor;
+#ifdef USE_GEOM_SHADER
+# define qual_col
+# define qual_sel
#else
-out vec4 finalColor;
-# ifdef EDGE
-flat out int selectOveride;
+# ifdef FLAT
+# define qual_col flat out
+# else
+# define qual_col out
# endif
+# define qual_sel flat out
+#endif
+
+#ifdef USE_GEOM_SHADER
+out VertexData {
+#endif
+
+qual_col vec4 finalColor;
+#if defined(EDGE) && !defined(FLAT)
+qual_sel int selectOveride;
+#endif
+
+#ifdef USE_GEOM_SHADER
+} v;
+# define v(a) v.a
+#else
+# define v(a) a
#endif
void main()
@@ -41,7 +60,7 @@ void main()
ivec4 m_data = data & dataMask;
#if defined(VERT)
- finalColor = EDIT_MESH_vertex_color(m_data.y);
+ v(finalColor) = EDIT_MESH_vertex_color(m_data.y);
gl_PointSize = sizeVertex * 2.0;
gl_Position.z -= 3e-5 * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0);
/* Make selected and active vertex always on top. */
@@ -54,23 +73,23 @@ void main()
#elif defined(EDGE)
# ifdef FLAT
- finalColor = EDIT_MESH_edge_color_inner(m_data.y);
+ v(finalColor) = EDIT_MESH_edge_color_inner(m_data.y);
# else
- finalColor = EDIT_MESH_edge_vertex_color(m_data.y);
- selectOveride = (m_data.y & EDGE_SELECTED);
+ v(finalColor) = EDIT_MESH_edge_vertex_color(m_data.y);
+ v(selectOveride) = (m_data.y & EDGE_SELECTED);
# endif
#elif defined(EDGE_DECORATION)
float crease = float(m_data.z) / 255.0;
float bweight = float(m_data.w) / 255.0;
- finalColor = EDIT_MESH_edge_color_outer(m_data.y, m_data.x, crease, bweight);
+ v(finalColor) = EDIT_MESH_edge_color_outer(m_data.y, m_data.x, crease, bweight);
#elif defined(FACE)
- finalColor = EDIT_MESH_face_color(m_data.x);
- finalColor.a *= faceAlphaMod;
+ v(finalColor) = EDIT_MESH_face_color(m_data.x);
+ v(finalColor).a *= faceAlphaMod;
#elif defined(FACEDOT)
- finalColor = EDIT_MESH_facedot_color(norAndFlag.w);
+ v(finalColor) = EDIT_MESH_facedot_color(norAndFlag.w);
/* Bias Facedot Z position in clipspace. */
gl_Position.z -= 0.00035;
gl_PointSize = sizeFaceDot;
@@ -87,12 +106,12 @@ void main()
float facing = dot(view_vec, view_normal);
facing = 1.0 - abs(facing) * 0.3;
- finalColor = mix(colorEditMeshMiddle, finalColor, facing);
- finalColor.a = 1.0;
+ v(finalColor) = mix(colorEditMeshMiddle, v(finalColor), facing);
+ v(finalColor).a = 1.0;
# if defined(EDGE) && !defined(FLAT)
/* Hack to blend color in pixel shader in case of overide. */
- finalColor.a = facing;
+ v(finalColor).a = facing;
# endif
#endif