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:
authorMike Erwin <significant.bit@gmail.com>2016-11-05 20:56:57 +0300
committerMike Erwin <significant.bit@gmail.com>2016-11-05 20:56:57 +0300
commita85f68e9c75680fe997c561bf62efd06fdd465ef (patch)
treed6b455b1fa4c52e4361776a23bc57822390fe906 /source/blender/gpu/intern
parentc25c3bb6cbb2c9562bb60af7fd494b4376e39048 (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.c20
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: