diff options
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.glsl | 51 |
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 |