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>2017-03-02 03:07:03 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-03-02 03:08:32 +0300
commitb463cd2ab8f1a48200e6b348002ac88d3a8507ca (patch)
tree0dc31f194e4ab344657651484dc2f65054ed2faa /source/blender/gpu
parentaa102283daf0fd7a6a59d241c0b353f3e0ecfffc (diff)
Edit Mode overlay: Moved Shaders to draw modules and resolved some draw issue.
We don't want to clutter gpu_shader.c with engine specific code Added face's center dot Simplified loose vert shader
Diffstat (limited to 'source/blender/gpu')
-rw-r--r--source/blender/gpu/CMakeLists.txt5
-rw-r--r--source/blender/gpu/GPU_shader.h4
-rw-r--r--source/blender/gpu/intern/gpu_shader.c18
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edit_overlay_frag.glsl220
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_edge.glsl188
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_tri.glsl317
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_vert.glsl113
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edit_overlay_vert.glsl23
8 files changed, 0 insertions, 888 deletions
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 95b15d664ab..b6ec702403a 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -191,11 +191,6 @@ data_to_c_simple(shaders/gpu_shader_edges_overlay_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_edges_overlay_geom.glsl SRC)
data_to_c_simple(shaders/gpu_shader_edges_overlay_simple_geom.glsl SRC)
data_to_c_simple(shaders/gpu_shader_edges_overlay_frag.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_edit_overlay_frag.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_edit_overlay_geom_tri.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_edit_overlay_geom_edge.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_edit_overlay_geom_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_edit_overlay_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_text_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_text_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_keyframe_diamond_vert.glsl SRC)
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index 2488d265834..fe29b1edc58 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -100,10 +100,6 @@ typedef enum GPUBuiltinShader {
GPU_SHADER_EDGES_FRONT_BACK_PERSP,
GPU_SHADER_EDGES_FRONT_BACK_ORTHO,
GPU_SHADER_EDGES_OVERLAY_SIMPLE,
- GPU_SHADER_EDGES_OVERLAY_EDIT_TRI,
- GPU_SHADER_EDGES_OVERLAY_EDIT_TRI_FAST,
- GPU_SHADER_EDGES_OVERLAY_EDIT_VERT,
- GPU_SHADER_EDGES_OVERLAY_EDIT_EDGE,
GPU_SHADER_EDGES_OVERLAY,
GPU_SHADER_KEYFRAME_DIAMOND,
GPU_SHADER_SIMPLE_LIGHTING,
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index 2e590302227..aeec2af8d0c 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -109,11 +109,6 @@ extern char datatoc_gpu_shader_edges_overlay_vert_glsl[];
extern char datatoc_gpu_shader_edges_overlay_geom_glsl[];
extern char datatoc_gpu_shader_edges_overlay_simple_geom_glsl[];
extern char datatoc_gpu_shader_edges_overlay_frag_glsl[];
-extern char datatoc_gpu_shader_edit_overlay_frag_glsl[];
-extern char datatoc_gpu_shader_edit_overlay_geom_tri_glsl[];
-extern char datatoc_gpu_shader_edit_overlay_geom_edge_glsl[];
-extern char datatoc_gpu_shader_edit_overlay_geom_vert_glsl[];
-extern char datatoc_gpu_shader_edit_overlay_vert_glsl[];
extern char datatoc_gpu_shader_text_vert_glsl[];
extern char datatoc_gpu_shader_text_frag_glsl[];
extern char datatoc_gpu_shader_keyframe_diamond_vert_glsl[];
@@ -672,18 +667,6 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
datatoc_gpu_shader_flat_color_frag_glsl },
[GPU_SHADER_EDGES_OVERLAY_SIMPLE] = { datatoc_gpu_shader_3D_vert_glsl, datatoc_gpu_shader_edges_overlay_frag_glsl,
datatoc_gpu_shader_edges_overlay_simple_geom_glsl },
- [GPU_SHADER_EDGES_OVERLAY_EDIT_TRI] = { datatoc_gpu_shader_edit_overlay_vert_glsl,
- datatoc_gpu_shader_edit_overlay_frag_glsl,
- datatoc_gpu_shader_edit_overlay_geom_tri_glsl },
- [GPU_SHADER_EDGES_OVERLAY_EDIT_TRI_FAST] = { datatoc_gpu_shader_edit_overlay_vert_glsl,
- datatoc_gpu_shader_edit_overlay_frag_glsl,
- datatoc_gpu_shader_edit_overlay_geom_tri_glsl },
- [GPU_SHADER_EDGES_OVERLAY_EDIT_EDGE] = { datatoc_gpu_shader_edit_overlay_vert_glsl,
- datatoc_gpu_shader_edit_overlay_frag_glsl,
- datatoc_gpu_shader_edit_overlay_geom_edge_glsl },
- [GPU_SHADER_EDGES_OVERLAY_EDIT_VERT] = { datatoc_gpu_shader_edit_overlay_vert_glsl,
- datatoc_gpu_shader_edit_overlay_frag_glsl,
- datatoc_gpu_shader_edit_overlay_geom_vert_glsl },
[GPU_SHADER_EDGES_OVERLAY] = { datatoc_gpu_shader_edges_overlay_vert_glsl,
datatoc_gpu_shader_edges_overlay_frag_glsl,
datatoc_gpu_shader_edges_overlay_geom_glsl },
@@ -778,7 +761,6 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
/* just a few special cases */
const char *defines = (shader == GPU_SHADER_SMOKE_COBA) ? "#define USE_COBA;\n" :
(shader == GPU_SHADER_SIMPLE_LIGHTING) ? "#define USE_NORMALS;\n" :
- (shader == GPU_SHADER_EDGES_OVERLAY_EDIT_TRI) ? "#define EDGE_FIX;\n" :
(shader == GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR) ? "#define USE_INSTANCE_COLOR;\n" : NULL;
const GPUShaderStages *stages = builtin_shader_stages + shader;
diff --git a/source/blender/gpu/shaders/gpu_shader_edit_overlay_frag.glsl b/source/blender/gpu/shaders/gpu_shader_edit_overlay_frag.glsl
deleted file mode 100644
index 96f65bd5836..00000000000
--- a/source/blender/gpu/shaders/gpu_shader_edit_overlay_frag.glsl
+++ /dev/null
@@ -1,220 +0,0 @@
-
-/* 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 */
-
-/* keep in sync with GlobalsUboStorage */
-layout(std140) uniform globalsBlock {
- vec4 colorWire;
- vec4 colorWireEdit;
- vec4 colorActive;
- vec4 colorSelect;
- vec4 colorTransform;
- vec4 colorGroupActive;
- vec4 colorGroup;
- vec4 colorLamp;
- vec4 colorSpeaker;
- vec4 colorCamera;
- vec4 colorEmpty;
- vec4 colorVertex;
- vec4 colorVertexSelect;
- vec4 colorEditMeshActive;
- vec4 colorEdgeSelect;
- vec4 colorEdgeSeam;
- vec4 colorEdgeSharp;
- vec4 colorEdgeCrease;
- vec4 colorEdgeBWeight;
- vec4 colorEdgeFaceSelect;
- vec4 colorFace;
- vec4 colorFaceSelect;
- vec4 colorNormal;
- vec4 colorVNormal;
- vec4 colorLNormal;
- vec4 colorFaceDot;
-
- vec4 colorDeselect;
- vec4 colorOutline;
- vec4 colorLampNoAlpha;
-
- float sizeLampCenter;
- float sizeLampCircle;
- float sizeLampCircleShadow;
- float sizeVertex;
- float sizeEdge;
- float sizeEdgeFix;
- float sizeNormal;
- float sizeFaceDot;
-};
-
-flat in vec3 edgesCrease;
-flat in vec3 edgesBweight;
-flat in ivec3 flag;
-flat in vec4 faceColor;
-flat in int clipCase;
-#ifdef VERTEX_SELECTION
-smooth in vec3 vertexColor;
-#endif
-
-/* We use a vec4[2] interface to pass edge data
- * (without fragmenting memory accesses)
- *
- * There is 2 cases :
- *
- * - Simple case : geometry shader return edge distances
- * in the first 2 components of the first vec4.
- * This needs noperspective interpolation.
- * The rest is filled with vertex screen positions.
- * eData1.zw actually contain v2
- * eData2.xy actually contain v1
- * eData2.zw actually contain v0
- *
- * - Hard case : two 2d edge corner are described by each
- * vec4 as origin and direction. This is constant over
- * the triangle and use to detect the correct case. */
-
-noperspective in vec4 eData1;
-flat in vec4 eData2;
-
-out vec4 FragColor;
-
-#define EDGE_EXISTS (1 << 0)
-#define EDGE_ACTIVE (1 << 1)
-#define EDGE_SELECTED (1 << 2)
-#define EDGE_SEAM (1 << 3)
-#define EDGE_SHARP (1 << 4)
-/* Vertex flag is shifted and combined with the edge flag */
-#define VERTEX_ACTIVE (1 << (0 + 8))
-#define VERTEX_SELECTED (1 << (1 + 8))
-#define FACE_ACTIVE (1 << (2 + 8))
-
-/* Style Parameters in pixel */
-
-/* Array to retreive vert/edge indices */
-const ivec3 clipEdgeIdx[6] = ivec3[6](
- ivec3(1, 0, 2),
- ivec3(2, 0, 1),
- ivec3(2, 1, 0),
- ivec3(2, 1, 0),
- ivec3(2, 0, 1),
- ivec3(1, 0, 2)
-);
-
-const ivec3 clipPointIdx[6] = ivec3[6](
- ivec3(0, 1, 2),
- ivec3(0, 2, 1),
- ivec3(0, 2, 1),
- ivec3(1, 2, 0),
- ivec3(1, 2, 0),
- ivec3(2, 1, 0)
-);
-
-const mat4 stipple_matrix = mat4(vec4(1.0, 0.0, 0.0, 0.0),
- vec4(0.0, 0.0, 0.0, 0.0),
- vec4(0.0, 0.0, 1.0, 0.0),
- vec4(0.0, 0.0, 0.0, 0.0));
-
-void colorDist(vec4 color, float dist)
-{
- FragColor = (dist < 0) ? color : FragColor;
-}
-
-float distToEdge(vec2 o, vec2 dir)
-{
- vec2 af = gl_FragCoord.xy - o;
- float daf = dot(dir, af);
- return sqrt(abs(dot(af, af) - daf * daf));
-}
-
-void main()
-{
- vec3 e, p;
-
- /* Step 1 : Computing Distances */
-
- if (clipCase == 0) {
- e.xy = eData1.xy;
-
- /* computing missing distance */
- vec2 dir = normalize(eData2.zw - eData2.xy);
- e.z = distToEdge(eData2.zw, dir);
-
- p.x = distance(eData2.zw, gl_FragCoord.xy);
- p.y = distance(eData2.xy, gl_FragCoord.xy);
- p.z = distance(eData1.zw, gl_FragCoord.xy);
- }
- else {
- ivec3 eidxs = clipEdgeIdx[clipCase - 1];
- ivec3 pidxs = clipPointIdx[clipCase - 1];
-
- e[eidxs.x] = distToEdge(eData1.xy, eData1.zw);
- e[eidxs.y] = distToEdge(eData2.xy, eData2.zw);
-
- /* Three edges visible cases */
- if (clipCase == 1 || clipCase == 2 || clipCase == 4) {
- e[eidxs.z] = distToEdge(eData1.xy, normalize(eData2.xy - eData1.xy));
- p[pidxs.y] = distance(eData2.xy, gl_FragCoord.xy);
- }
- else {
- e[eidxs.z] = 1e10; /* off screen */
- p[pidxs.y] = 1e10; /* off screen */
- }
-
- p[pidxs.x] = distance(eData1.xy, gl_FragCoord.xy);
- p[pidxs.z] = 1e10; /* off screen */
- }
-
- /* Step 2 : coloring (order dependant) */
-
- /* First */
- FragColor = faceColor;
-
- if ((flag[0] & FACE_ACTIVE) != 0) {
- int x = int(gl_FragCoord.x) & 0x3; /* mod 4 */
- int y = int(gl_FragCoord.y) & 0x3; /* mod 4 */
- FragColor *= stipple_matrix[x][y];
- }
-
- /* Edges */
- for (int v = 0; v < 3; ++v) {
- if ((flag[v] & EDGE_EXISTS) != 0) {
- float largeEdge = e[v] - sizeEdge * 2.0;
- float innerEdge = e[v] - sizeEdge;
-
- if ((flag[v] & EDGE_SEAM) != 0)
- colorDist(colorEdgeSeam, largeEdge);
- else if (edgesBweight[v] > 0.0)
- colorDist(vec4(colorEdgeBWeight.rgb, edgesBweight[v]), largeEdge);
- else if (edgesCrease[v] > 0.0)
- colorDist(vec4(colorEdgeCrease.rgb, edgesCrease[v]), largeEdge);
- else if ((flag[v] & EDGE_SHARP) != 0)
- colorDist(colorEdgeSharp, largeEdge);
- else
-#ifdef VERTEX_SELECTION
- colorDist(vertexColor, innerEdge);
-#else
- colorDist(colorWireEdit, innerEdge);
- if ((flag[v] & EDGE_ACTIVE) != 0)
- colorDist(vec4(colorEditMeshActive.xyz, 1.0), innerEdge);
- else if ((flag[v] & EDGE_SELECTED) != 0)
- colorDist(colorEdgeSelect, innerEdge);
-#endif
- }
- }
-
- /* Points */
- for (int v = 0; v < 3; ++v) {
- float size = p[v] - sizeVertex;
-
- if ((flag[v] & VERTEX_ACTIVE) != 0)
- colorDist(vec4(colorEditMeshActive.xyz, 1.0), size);
- else if ((flag[v] & VERTEX_SELECTED) != 0)
- colorDist(colorVertexSelect, size);
- else
- colorDist(colorVertex, size);
- }
-
- /* don't write depth if not opaque */
- if (FragColor.a == 0.0) discard;
-}
diff --git a/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_edge.glsl b/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_edge.glsl
deleted file mode 100644
index 7ebaea59133..00000000000
--- a/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_edge.glsl
+++ /dev/null
@@ -1,188 +0,0 @@
-
-/* 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 */
-
-/* keep in sync with GlobalsUboStorage */
-layout(std140) uniform globalsBlock {
- vec4 colorWire;
- vec4 colorWireEdit;
- vec4 colorActive;
- vec4 colorSelect;
- vec4 colorTransform;
- vec4 colorGroupActive;
- vec4 colorGroup;
- vec4 colorLamp;
- vec4 colorSpeaker;
- vec4 colorCamera;
- vec4 colorEmpty;
- vec4 colorVertex;
- vec4 colorVertexSelect;
- vec4 colorEditMeshActive;
- vec4 colorEdgeSelect;
- vec4 colorEdgeSeam;
- vec4 colorEdgeSharp;
- vec4 colorEdgeCrease;
- vec4 colorEdgeBWeight;
- vec4 colorEdgeFaceSelect;
- vec4 colorFace;
- vec4 colorFaceSelect;
- vec4 colorNormal;
- vec4 colorVNormal;
- vec4 colorLNormal;
- vec4 colorFaceDot;
-
- vec4 colorDeselect;
- vec4 colorOutline;
- vec4 colorLampNoAlpha;
-
- float sizeLampCenter;
- float sizeLampCircle;
- float sizeLampCircleShadow;
- float sizeVertex;
- float sizeEdge;
- float sizeEdgeFix;
- float sizeNormal;
- float sizeFaceDot;
-};
-
-layout(lines) in;
-layout(triangle_strip, max_vertices=6) out;
-
-uniform mat4 ProjectionMatrix;
-uniform vec2 viewportSize;
-
-in vec4 vPos[];
-in vec4 pPos[];
-in ivec4 vData[];
-
-/* these are the same for all vertices
- * and does not need interpolation */
-flat out vec3 edgesCrease;
-flat out vec3 edgesSharp;
-flat out ivec3 flag;
-flat out vec4 faceColor;
-flat out int clipCase;
-#ifdef VERTEX_SELECTION
-smooth out vec3 vertexColor;
-#endif
-
-/* See fragment shader */
-noperspective out vec4 eData1;
-flat out vec4 eData2;
-
-#define VERTEX_ACTIVE (1 << 0)
-#define VERTEX_SELECTED (1 << 1)
-
-#define FACE_ACTIVE (1 << 2)
-#define FACE_SELECTED (1 << 3)
-
-/* Table 1. Triangle Projection Cases */
-const ivec4 clipPointsIdx[6] = ivec4[6](
- ivec4(0, 1, 2, 2),
- ivec4(0, 2, 1, 1),
- ivec4(0, 0, 1, 2),
- ivec4(1, 2, 0, 0),
- ivec4(1, 1, 0, 2),
- ivec4(2, 2, 0, 1)
-);
-
-/* project to screen space */
-vec2 proj(vec4 pos)
-{
- return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
-}
-
-float dist(vec2 pos[3], vec2 vpos, int v)
-{
- /* endpoints of opposite edge */
- vec2 e1 = pos[(v + 1) % 3];
- vec2 e2 = pos[(v + 2) % 3];
- /* Edge normalized vector */
- vec2 dir = normalize(e2 - e1);
- /* perpendicular to dir */
- vec2 orthogonal = vec2(-dir.y, dir.x);
-
- return abs(dot(vpos - e1, orthogonal));
-}
-
-vec3 getVertexColor(int v)
-{
- if ((vData[v].x & VERTEX_ACTIVE) != 0)
- return colorEditMeshActive;
- else if ((vData[v].x & VERTEX_SELECTED) != 0)
- return colorEdgeSelect;
- else
- return colorWireEdit;
-}
-
-void doVertex(int v, vec4 pos)
-{
-#ifdef VERTEX_SELECTION
- vertexColor = getVertexColor(v);
-#endif
-
- gl_Position = pos;
-
- EmitVertex();
-}
-
-void main()
-{
- clipCase = 0;
-
- /* Face */
- faceColor = vec4(0.0);
-
- /* Proj Vertex */
- vec2 pos[2] = vec2[2](proj(pPos[0]), proj(pPos[1]));
-
- /* little optimization use a vec4 to vectorize
- * following operations */
- vec4 dirs1, dirs2;
-
- /* Edge normalized vector */
- dirs1.xy = normalize(pos[1] - pos[0]);
-
- /* perpendicular to dir */
- dirs1.zw = vec2(-dirs1.y, dirs1.x);
-
- /* Make it view independant */
- dirs1 *= sizeEdgeFix / viewportSize.xyxy;
-
- dirs2 = dirs1;
-
- /* 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;
- }
-
- /* Edge / Vert data */
- eData1 = vec4(1e10);
- eData2.zw = pos[0];
- eData2.xy = pos[1];
- flag[0] = (vData[0].x << 8);
- flag[1] = (vData[1].x << 8);
- flag[2] = 0;
-
- doVertex(0, pPos[0] + vec4(-dirs1.xy, 0.0, 0.0));
- doVertex(0, pPos[0] + vec4( dirs1.zw, 0.0, 0.0));
- doVertex(0, pPos[0] + vec4(-dirs1.zw, 0.0, 0.0));
-
- flag[2] = vData[0].y | (vData[0].x << 8);
- edgesCrease[2] = vData[0].z / 255.0;
- edgesSharp[2] = vData[0].w / 255.0;
-
- doVertex(1, pPos[1] + vec4( dirs2.zw, 0.0, 0.0));
- doVertex(1, pPos[1] + vec4(-dirs2.zw, 0.0, 0.0));
-
- flag[2] = 0;
- doVertex(1, pPos[1] + vec4( dirs2.xy, 0.0, 0.0));
-
- EndPrimitive();
-}
diff --git a/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_tri.glsl b/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_tri.glsl
deleted file mode 100644
index 0f847c28ded..00000000000
--- a/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_tri.glsl
+++ /dev/null
@@ -1,317 +0,0 @@
-
-/* 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 */
-
-/* keep in sync with GlobalsUboStorage */
-layout(std140) uniform globalsBlock {
- vec4 colorWire;
- vec4 colorWireEdit;
- vec4 colorActive;
- vec4 colorSelect;
- vec4 colorTransform;
- vec4 colorGroupActive;
- vec4 colorGroup;
- vec4 colorLamp;
- vec4 colorSpeaker;
- vec4 colorCamera;
- vec4 colorEmpty;
- vec4 colorVertex;
- vec4 colorVertexSelect;
- vec4 colorEditMeshActive;
- vec4 colorEdgeSelect;
- vec4 colorEdgeSeam;
- vec4 colorEdgeSharp;
- vec4 colorEdgeCrease;
- vec4 colorEdgeBWeight;
- vec4 colorEdgeFaceSelect;
- vec4 colorFace;
- vec4 colorFaceSelect;
- vec4 colorNormal;
- vec4 colorVNormal;
- vec4 colorLNormal;
- vec4 colorFaceDot;
-
- vec4 colorDeselect;
- vec4 colorOutline;
- vec4 colorLampNoAlpha;
-
- float sizeLampCenter;
- float sizeLampCircle;
- float sizeLampCircleShadow;
- float sizeVertex;
- float sizeEdge;
- float sizeEdgeFix;
- float sizeNormal;
- float sizeFaceDot;
-};
-
-layout(triangles) in;
-
-#ifdef EDGE_FIX
-/* To fix the edge artifacts, we render
- * an outline strip around the screenspace
- * triangle. Order is important.
- * TODO diagram
- */
-
-layout(triangle_strip, max_vertices=23) out;
-#else
-layout(triangle_strip, max_vertices=3) out;
-#endif
-
-uniform mat4 ProjectionMatrix;
-uniform vec2 viewportSize;
-
-in vec4 vPos[];
-in vec4 pPos[];
-in ivec4 vData[];
-
-/* these are the same for all vertices
- * and does not need interpolation */
-flat out vec3 edgesCrease;
-flat out vec3 edgesSharp;
-flat out ivec3 flag;
-flat out vec4 faceColor;
-flat out int clipCase;
-#ifdef VERTEX_SELECTION
-smooth out vec3 vertexColor;
-#endif
-
-/* See fragment shader */
-noperspective out vec4 eData1;
-flat out vec4 eData2;
-
-
-#define VERTEX_ACTIVE (1 << 0)
-#define VERTEX_SELECTED (1 << 1)
-
-#define FACE_ACTIVE (1 << 2)
-#define FACE_SELECTED (1 << 3)
-
-/* Table 1. Triangle Projection Cases */
-const ivec4 clipPointsIdx[6] = ivec4[6](
- ivec4(0, 1, 2, 2),
- ivec4(0, 2, 1, 1),
- ivec4(0, 0, 1, 2),
- ivec4(1, 2, 0, 0),
- ivec4(1, 1, 0, 2),
- ivec4(2, 2, 0, 1)
-);
-
-/* project to screen space */
-vec2 proj(vec4 pos)
-{
- return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
-}
-
-float dist(vec2 pos[3], vec2 vpos, int v)
-{
- /* endpoints of opposite edge */
- vec2 e1 = pos[(v + 1) % 3];
- vec2 e2 = pos[(v + 2) % 3];
- /* Edge normalized vector */
- vec2 dir = normalize(e2 - e1);
- /* perpendicular to dir */
- vec2 orthogonal = vec2(-dir.y, dir.x);
-
- return abs(dot(vpos - e1, orthogonal));
-}
-
-vec3 getVertexColor(int v)
-{
- if ((vData[v].x & VERTEX_ACTIVE) != 0)
- return colorEditMeshActive;
- else if ((vData[v].x & VERTEX_SELECTED) != 0)
- return colorEdgeSelect;
- else
- return colorWireEdit;
-}
-
-vec4 getClipData(vec2 pos[3], ivec2 vidx)
-{
- vec2 A = pos[vidx.x];
- vec2 Adir = normalize(A - pos[vidx.y]);
-
- return vec4(A, Adir);
-}
-
-void doVertex(int v, vec4 pos)
-{
-#ifdef VERTEX_SELECTION
- vertexColor = getVertexColor(v);
-#endif
-
- gl_Position = pos;
-
- EmitVertex();
-}
-
-void main()
-{
- /* First we detect which case we are in */
- clipCase = 0;
-
- /* if perspective */
- if (ProjectionMatrix[3][3] == 0.0) {
- /* See Table 1. Triangle Projection Cases */
- clipCase += int(pPos[0].z / pPos[0].w < -1 || vPos[0].z > 0.0) * 4;
- clipCase += int(pPos[1].z / pPos[1].w < -1 || vPos[1].z > 0.0) * 2;
- clipCase += int(pPos[2].z / pPos[2].w < -1 || vPos[2].z > 0.0) * 1;
- }
-
- /* If triangle is behind nearplane, early out */
- if (clipCase == 7)
- return;
-
- /* Edge */
- ivec3 eflag; vec3 ecrease, esharp;
- for (int v = 0; v < 3; ++v) {
- flag[v] = eflag[v] = vData[v].y | (vData[v].x << 8);
- edgesCrease[v] = ecrease[v] = vData[v].z / 255.0;
- edgesSharp[v] = esharp[v] = vData[v].w / 255.0;
- }
-
- /* Face */
- if ((vData[0].x & FACE_ACTIVE) != 0)
- faceColor = colorEditMeshActive;
- else if ((vData[0].x & FACE_SELECTED) != 0)
- faceColor = colorFaceSelect;
- else
- faceColor = colorFace;
-
- /* Vertex */
- vec2 pos[3] = vec2[3](proj(pPos[0]), proj(pPos[1]), proj(pPos[2]));
-
- /* Simple case : compute edge distances in geometry shader */
- if (clipCase == 0) {
-
- /* Packing screen positions and 2 distances */
- eData1 = vec4(0.0, 0.0, pos[2]);
- eData2 = vec4(pos[1], pos[0]);
-
- /* Only pass the first 2 distances */
- for (int v = 0; v < 2; ++v) {
- eData1[v] = dist(pos, pos[v], v);
- doVertex(v, pPos[v]);
- eData1[v] = 0.0;
- }
-
- /* and the last vertex */
- doVertex(2, pPos[2]);
-
-#ifdef EDGE_FIX
- vec2 fixvec[6];
- vec2 fixvecaf[6];
- vec2 cornervec[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 = pos[i] + bias[i];
- vec2 v2 = pos[i1] + bias[i1];
- vec2 v3 = pos[i2] + bias[i2];
-
- /* Edge normalized vector */
- vec2 dir = normalize(v2 - v1);
- vec2 dir2 = normalize(v3 - v1);
-
- cornervec[i] = -normalize(dir + dir2);
-
- /* perpendicular to dir */
- vec2 perp = vec2(-dir.y, dir.x);
-
- /* Backface case */
- if (dot(perp, dir2) > 0) {
- perp = -perp;
- }
-
- /* Make it view independant */
- perp *= sizeEdgeFix / viewportSize;
- cornervec[i] *= sizeEdgeFix / viewportSize;
- fixvec[i] = fixvecaf[i] = perp;
-
- /* 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;
- cornervec[i] *= -vPos[i].z;
- }
- }
-
- /* to not let face color bleed */
- faceColor = vec4(0.0, 0.0, 0.0, 0.0);
-
- /* we don't want other edges : make them far*/
- eData1 = vec4(1e10);
-
- /* Start with the same last vertex to create a
- * degenerate triangle in order to "create"
- * a new triangle strip */
- for (int i = 2; i < 5; ++i) {
- int vbe = (i - 1) % 3;
- int vaf = (i + 1) % 3;
- int v = i % 3;
-
- /* Position of the "hidden" thrid vertex
- * we set it early because it has*/
- eData1.zw = pos[vbe];
-
- doVertex(vaf, pPos[v]);
- doVertex(vaf, pPos[v] + vec4(fixvec[v], 0.0, 0.0));
-
- /* Now one triangle only shade one edge
- * so we use the edge distance calculated
- * in the fragment shader, the third edge;
- * we do this because we need flat interp to
- * draw a continuous triangle strip */
- eData2.xy = pos[vaf];
- eData2.zw = pos[v];
- flag[0] = (vData[v].x << 8);
- flag[1] = (vData[vaf].x << 8);
- flag[2] = eflag[vbe];
- edgesCrease[2] = ecrease[vbe];
- edgesSharp[2] = esharp[vbe];
-
- doVertex(v, pPos[vaf]);
- doVertex(v, pPos[vaf] + vec4(fixvecaf[v], 0.0, 0.0));
-
- /* corner vertices should not drax edges but draw point only */
- flag[2] = (vData[vbe].x << 8);
- doVertex(v, pPos[vaf]);
- doVertex(v, pPos[vaf] + vec4(cornervec[vaf], 0.0, 0.0));
- }
-
- /* finish the loop strip */
- doVertex(0, pPos[2]);
- doVertex(0, pPos[2] + vec4(fixvec[2], 0.0, 0.0));
-#endif
- }
- /* Harder case : compute visible edges vectors */
- else {
- ivec4 vindices = clipPointsIdx[clipCase - 1];
-
- eData1 = getClipData(pos, vindices.xz);
- eData2 = getClipData(pos, vindices.yw);
-
- for (int v = 0; v < 3; ++v)
- doVertex(v, pPos[v]);
- }
-
- EndPrimitive();
-}
diff --git a/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_vert.glsl b/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_vert.glsl
deleted file mode 100644
index 1dc7f7aa389..00000000000
--- a/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_vert.glsl
+++ /dev/null
@@ -1,113 +0,0 @@
-
-/* 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 */
-
-/* keep in sync with GlobalsUboStorage */
-layout(std140) uniform globalsBlock {
- vec4 colorWire;
- vec4 colorWireEdit;
- vec4 colorActive;
- vec4 colorSelect;
- vec4 colorTransform;
- vec4 colorGroupActive;
- vec4 colorGroup;
- vec4 colorLamp;
- vec4 colorSpeaker;
- vec4 colorCamera;
- vec4 colorEmpty;
- vec4 colorVertex;
- vec4 colorVertexSelect;
- vec4 colorEditMeshActive;
- vec4 colorEdgeSelect;
- vec4 colorEdgeSeam;
- vec4 colorEdgeSharp;
- vec4 colorEdgeCrease;
- vec4 colorEdgeBWeight;
- vec4 colorEdgeFaceSelect;
- vec4 colorFace;
- vec4 colorFaceSelect;
- vec4 colorNormal;
- vec4 colorVNormal;
- vec4 colorLNormal;
- vec4 colorFaceDot;
-
- vec4 colorDeselect;
- vec4 colorOutline;
- vec4 colorLampNoAlpha;
-
- float sizeLampCenter;
- float sizeLampCircle;
- float sizeLampCircleShadow;
- float sizeVertex;
- float sizeEdge;
- float sizeEdgeFix;
- float sizeNormal;
- float sizeFaceDot;
-};
-
-layout(points) in;
-layout(triangle_strip, max_vertices=4) out;
-
-uniform mat4 ProjectionMatrix;
-uniform vec2 viewportSize;
-
-in vec4 vPos[];
-in vec4 pPos[];
-in ivec4 vData[];
-
-/* these are the same for all vertices
- * and does not need interpolation */
-flat out ivec3 flag;
-flat out vec4 faceColor;
-flat out int clipCase;
-
-/* 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 doVertex(vec4 pos)
-{
- gl_Position = pos;
- EmitVertex();
-}
-
-void main()
-{
- clipCase = 0;
-
- /* there is no face */
- faceColor = vec4(0.0);
-
- /* only verterx position 0 is used */
- eData1 = eData2 = vec4(1e10);
- flag = ivec3(0);
-
- vec2 dir = vec2(1.0) * sizeEdgeFix;
- /* Make it view independant */
- dir /= viewportSize;
-
- if (ProjectionMatrix[3][3] == 0.0) {
- dir *= -vPos[0].z;
- }
-
- eData2.zw = proj(pPos[0]);
-
- flag[0] = (vData[0].x << 8);
-
- /* Quad */
- doVertex(pPos[0] + vec4( dir.x, dir.y, 0.0, 0.0));
- doVertex(pPos[0] + vec4(-dir.x, dir.y, 0.0, 0.0));
- doVertex(pPos[0] + vec4( dir.x, -dir.y, 0.0, 0.0));
- doVertex(pPos[0] + vec4(-dir.x, -dir.y, 0.0, 0.0));
-
- EndPrimitive();
-}
diff --git a/source/blender/gpu/shaders/gpu_shader_edit_overlay_vert.glsl b/source/blender/gpu/shaders/gpu_shader_edit_overlay_vert.glsl
deleted file mode 100644
index 5bc9a8bef85..00000000000
--- a/source/blender/gpu/shaders/gpu_shader_edit_overlay_vert.glsl
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/* 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 ModelViewMatrix;
-uniform mat4 ModelViewProjectionMatrix;
-
-in vec3 pos;
-in ivec4 data;
-
-out vec4 vPos;
-out vec4 pPos;
-out ivec4 vData;
-
-void main()
-{
- vPos = ModelViewMatrix * vec4(pos, 1.0);
- pPos = ModelViewProjectionMatrix * vec4(pos, 1.0);
- vData = data;
-}