diff options
author | Mike Erwin <significant.bit@gmail.com> | 2016-11-05 20:56:57 +0300 |
---|---|---|
committer | Mike Erwin <significant.bit@gmail.com> | 2016-11-05 20:56:57 +0300 |
commit | a85f68e9c75680fe997c561bf62efd06fdd465ef (patch) | |
tree | d6b455b1fa4c52e4361776a23bc57822390fe906 /source/blender/gpu/intern | |
parent | c25c3bb6cbb2c9562bb60af7fd494b4376e39048 (diff) |
OpenGL: further wireframe shaders
As seen at #bcon16
Geometry shader version is automatically used on modern GL runtimes. Legacy version is used on pre-3.2 systems (Mac, Mesa compat profile). They have the same inputs and visual result.
TODO: specialized versions that are less flexible -- draw ALL edges or draw JUST silhouette edges.
Part of T49165
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_shader.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c index 699028d6570..39cdbbccd8b 100644 --- a/source/blender/gpu/intern/gpu_shader.c +++ b/source/blender/gpu/intern/gpu_shader.c @@ -79,6 +79,8 @@ extern char datatoc_gpu_shader_2D_point_uniform_size_outline_smooth_vert_glsl[]; extern char datatoc_gpu_shader_2D_point_uniform_size_varying_color_outline_smooth_vert_glsl[]; extern char datatoc_gpu_shader_edges_front_back_persp_vert_glsl[]; +extern char datatoc_gpu_shader_edges_front_back_persp_geom_glsl[]; +extern char datatoc_gpu_shader_edges_front_back_persp_legacy_vert_glsl[]; extern char datatoc_gpu_shader_edges_front_back_ortho_vert_glsl[]; extern char datatoc_gpu_shader_text_vert_glsl[]; extern char datatoc_gpu_shader_text_frag_glsl[]; @@ -671,10 +673,20 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader) break; case GPU_SHADER_EDGES_FRONT_BACK_PERSP: 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_alpha_test_0_frag_glsl, - NULL, NULL, NULL, 0, 0, 0); + if (GLEW_VERSION_3_2) { + /* this version is magical but slooow */ + 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_edges_front_back_persp_geom_glsl, + NULL, NULL, 0, 0, 0); + } + else { + GG.shaders.edges_front_back_persp = GPU_shader_create( + datatoc_gpu_shader_edges_front_back_persp_legacy_vert_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; case GPU_SHADER_EDGES_FRONT_BACK_ORTHO: |