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-01 16:08:58 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-03-02 03:08:32 +0300
commit043c90fdcda7631edf6464ed86041d1cf62444fc (patch)
tree2138251554569a9d106b2e8d865c2df23806f122 /source/blender/gpu
parent26fc6c71c411e9ba3650a8f5dbb16167a528f984 (diff)
Edit Mode overlay: fast navigate
Diffstat (limited to 'source/blender/gpu')
-rw-r--r--source/blender/gpu/GPU_shader.h1
-rw-r--r--source/blender/gpu/intern/gpu_shader.c4
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edit_overlay_frag.glsl5
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_tri.glsl1
4 files changed, 9 insertions, 2 deletions
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index 55fa4749221..2488d265834 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -101,6 +101,7 @@ typedef enum GPUBuiltinShader {
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,
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index c633fd0835e..2e590302227 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -675,6 +675,9 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
[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 },
@@ -775,6 +778,7 @@ 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
index dcee761650b..e784c5eabaf 100644
--- a/source/blender/gpu/shaders/gpu_shader_edit_overlay_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_edit_overlay_frag.glsl
@@ -99,7 +99,7 @@ float getVertexSize(int v)
void colorDist(vec4 color, float width, inout float dist)
{
- FragColor = mix(color, FragColor, smoothstep(0.0, transitionWidth, dist));
+ FragColor = (dist - transitionWidth < 0) ? color : FragColor;
dist += width;
}
@@ -191,4 +191,7 @@ void main()
else
colorDist(vec4(0.0, 0.0, 0.0, 1.0), vertexWidth, 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_tri.glsl b/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_tri.glsl
index f3966b40a6b..a6f4a11db5f 100644
--- a/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_tri.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_edit_overlay_geom_tri.glsl
@@ -5,7 +5,6 @@
/* This shader follows the principles of
* http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
-//#define EDGE_FIX
layout(triangles) in;
#ifdef EDGE_FIX