OpenGL: edge shader discards fragments of unused edges

Discarded edges should not update depth buffer or blend with color buffer.

Geometry shader version will make this obsolete.
This commit is contained in:
Mike Erwin 2016-10-26 03:57:14 -04:00
parent 222ba0247f
commit a394f4e545
3 changed files with 19 additions and 1 deletions

View File

@ -129,6 +129,7 @@ set(SRC
data_to_c_simple(shaders/gpu_shader_depth_only_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_uniform_color_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_flat_color_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_flat_color_alpha_test_0_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_flat_color_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_2D_smooth_color_vert.glsl SRC)

View File

@ -49,6 +49,7 @@
extern char datatoc_gpu_shader_depth_only_frag_glsl[];
extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
extern char datatoc_gpu_shader_flat_color_frag_glsl[];
extern char datatoc_gpu_shader_flat_color_alpha_test_0_frag_glsl[];
extern char datatoc_gpu_shader_2D_vert_glsl[];
extern char datatoc_gpu_shader_2D_flat_color_vert_glsl[];
extern char datatoc_gpu_shader_2D_smooth_color_vert_glsl[];
@ -664,7 +665,7 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
if (!GG.shaders.edges_front_back_persp)
GG.shaders.edges_front_back_persp = GPU_shader_create(
datatoc_gpu_shader_edges_front_back_persp_vert_glsl,
datatoc_gpu_shader_flat_color_frag_glsl,
datatoc_gpu_shader_flat_color_alpha_test_0_frag_glsl,
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.edges_front_back_persp;
break;

View File

@ -0,0 +1,16 @@
#if __VERSION__ == 120
flat varying vec4 finalColor;
#define fragColor gl_FragColor
#else
flat in vec4 finalColor;
out vec4 fragColor;
#endif
void main()
{
if (finalColor.a > 0.0)
fragColor = finalColor;
else
discard;
}