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:
authorCampbell Barton <ideasman42@gmail.com>2019-01-21 15:51:34 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-21 15:55:53 +0300
commit9bc47ed0f6d0db9e43af30c741a7e5ac347cbecd (patch)
treeca8dbd6ce37e3529a3c5fe8c0bc944c535128ec3 /source/blender/draw/modes/overlay_mode.c
parent0c829e8240eebd7ce4ed9d61f8682c0d6bf534f4 (diff)
Fix clipping shaders with some AMD/Intel drivers
Caused: error: unsized array index must be constant Use hard coded number of clipping planes, copying the 4th to 5 & 6 when only 4 are used.
Diffstat (limited to 'source/blender/draw/modes/overlay_mode.c')
-rw-r--r--source/blender/draw/modes/overlay_mode.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index 2fc4cf3a765..16e008d349d 100644
--- a/source/blender/draw/modes/overlay_mode.c
+++ b/source/blender/draw/modes/overlay_mode.c
@@ -82,6 +82,8 @@ static struct {
OVERLAY_ShaderData sh_data[2];
} e_data = {NULL};
+extern char datatoc_common_world_clip_lib_glsl[];
+
/* Shaders */
extern char datatoc_overlay_face_orientation_frag_glsl[];
extern char datatoc_overlay_face_orientation_vert_glsl[];
@@ -112,7 +114,7 @@ static void overlay_engine_init(void *vedata)
const bool is_clip = (draw_ctx->rv3d->rflag & RV3D_CLIPPING) != 0;
if (is_clip) {
- DRW_state_clip_planes_len_set((draw_ctx->rv3d->viewlock & RV3D_BOXCLIP) ? 4 : 6);
+ DRW_state_clip_planes_set_from_rv3d(draw_ctx->rv3d);
}
if (!stl->g_data) {
@@ -123,30 +125,34 @@ static void overlay_engine_init(void *vedata)
if (!sh_data->face_orientation_sh) {
/* Face orientation */
- sh_data->face_orientation_sh = DRW_shader_create(
+ sh_data->face_orientation_sh = DRW_shader_create_with_lib(
datatoc_overlay_face_orientation_vert_glsl, NULL,
datatoc_overlay_face_orientation_frag_glsl,
+ datatoc_common_world_clip_lib_glsl,
is_clip ? NULL : DEF_WORLD_CLIP_STR);
}
if (!sh_data->face_wireframe_sh) {
- sh_data->select_wireframe_sh = DRW_shader_create(
+ sh_data->select_wireframe_sh = DRW_shader_create_with_lib(
datatoc_overlay_face_wireframe_vert_glsl,
datatoc_overlay_face_wireframe_geom_glsl,
datatoc_gpu_shader_depth_only_frag_glsl,
+ datatoc_common_world_clip_lib_glsl,
DEF_WORLD_CLIP_STR "#define SELECT_EDGES\n" +
(is_clip ? 0 : strlen(DEF_WORLD_CLIP_STR)));
- sh_data->face_wireframe_sh = DRW_shader_create(
+ sh_data->face_wireframe_sh = DRW_shader_create_with_lib(
datatoc_overlay_face_wireframe_vert_glsl,
NULL,
datatoc_overlay_face_wireframe_frag_glsl,
+ datatoc_common_world_clip_lib_glsl,
is_clip ? DEF_WORLD_CLIP_STR : NULL);
- sh_data->face_wireframe_sculpt_sh = DRW_shader_create(
+ sh_data->face_wireframe_sculpt_sh = DRW_shader_create_with_lib(
datatoc_overlay_face_wireframe_vert_glsl,
datatoc_overlay_face_wireframe_geom_glsl,
datatoc_overlay_face_wireframe_frag_glsl,
+ datatoc_common_world_clip_lib_glsl,
DEF_WORLD_CLIP_STR "#define USE_SCULPT\n" +
(is_clip ? 0 : strlen(DEF_WORLD_CLIP_STR)));
}