diff options
Diffstat (limited to 'source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl')
-rw-r--r-- | source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl new file mode 100644 index 00000000000..0a396a5325f --- /dev/null +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl @@ -0,0 +1,59 @@ + +/* Solid Wirefram implementation + * Mike Erwin, Clément Foucault */ + +/* This shader follows the principles of + * http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */ + +uniform mat4 ModelViewProjectionMatrix; +uniform vec2 viewportSize; + +in vec3 pos; +in ivec4 data; + +/* these are the same for all vertices + * and does not need interpolation */ +flat out vec3 edgesCrease; +flat out vec3 edgesBweight; +flat out ivec3 flag; +flat out vec4 faceColor; +flat out int clipCase; +#ifdef VERTEX_SELECTION +out vec3 vertexColor; +#endif + +/* See fragment shader */ +noperspective out vec4 eData1; +flat out vec4 eData2; + +/* project to screen space */ +vec2 proj(vec4 pos) +{ + return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize; +} + +void main() +{ + clipCase = 0; + edgesCrease = vec3(0.0); + edgesBweight = vec3(0.0); + + vec4 pPos = ModelViewProjectionMatrix * vec4(pos, 1.0); + + /* there is no face */ + faceColor = vec4(0.0); + +#ifdef VERTEX_SELECTION + vertexColor = vec3(0.0); +#endif + + /* only vertex position 0 is used */ + eData1 = eData2 = vec4(1e10); + eData2.zw = proj(pPos); + + flag = ivec3(0); + flag[0] = (data.x << 8); + + gl_PointSize = sizeEdgeFix; + gl_Position = pPos; +} |