[Bf-blender-cvs] [626f6a05499] temp-gpu-clip-fix: Temp fix
Campbell Barton
noreply at git.blender.org
Mon Jan 21 13:19:24 CET 2019
Commit: 626f6a05499094243773f32e6b2b46586f5dc2e8
Author: Campbell Barton
Date: Mon Jan 21 23:16:27 2019 +1100
Branches: temp-gpu-clip-fix
https://developer.blender.org/rB626f6a05499094243773f32e6b2b46586f5dc2e8
Temp fix
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
M source/blender/draw/engines/workbench/workbench_deferred.c
M source/blender/draw/engines/workbench/workbench_forward.c
M source/blender/draw/engines/workbench/workbench_materials.c
M source/blender/draw/intern/draw_common.c
M source/blender/draw/modes/edit_mesh_mode.c
M source/blender/draw/modes/overlay_mode.c
A source/blender/draw/modes/shaders/common_world_clip_lib.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_vert.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
M source/blender/draw/modes/shaders/edit_normals_geom.glsl
M source/blender/draw/modes/shaders/edit_normals_vert.glsl
M source/blender/draw/modes/shaders/overlay_face_orientation_vert.glsl
M source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
M source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
M source/blender/draw/modes/shaders/paint_weight_vert.glsl
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 8ba9058f210..a305d18a592 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -249,6 +249,7 @@ data_to_c_simple(modes/shaders/common_hair_refine_vert.glsl SRC)
data_to_c_simple(modes/shaders/common_view_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_fxaa_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_fullscreen_vert.glsl SRC)
+data_to_c_simple(modes/shaders/common_world_clip_lib.glsl SRC)
data_to_c_simple(modes/shaders/animviz_mpath_lines_vert.glsl SRC)
data_to_c_simple(modes/shaders/animviz_mpath_lines_geom.glsl SRC)
data_to_c_simple(modes/shaders/animviz_mpath_points_vert.glsl SRC)
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
index e821581298d..65ac0cade3a 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
@@ -6,11 +6,6 @@ uniform mat4 ViewProjectionMatrix;
uniform mat4 ViewMatrixInverse;
uniform mat3 NormalMatrix;
-#ifdef USE_WORLD_CLIP_PLANES
-uniform vec4 WorldClipPlanes[6];
-uniform int WorldClipPlanesLen;
-#endif
-
#ifndef HAIR_SHADER
in vec3 pos;
in vec3 nor;
@@ -76,12 +71,7 @@ void main()
#endif
#ifdef USE_WORLD_CLIP_PLANES
- {
- vec3 worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz;
- for (int i = 0; i < WorldClipPlanesLen; i++) {
- gl_ClipDistance[i] = dot(WorldClipPlanes[i].xyz, worldPosition) + WorldClipPlanes[i].w;
- }
- }
+ world_clip_planes_set_clip_distance((ModelMatrix * vec4(pos, 1.0)).xyz);
#endif
}
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index 3f537f6c6d0..dce30a7056b 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -90,6 +90,7 @@ static struct {
/* Shaders */
extern char datatoc_common_hair_lib_glsl[];
+extern char datatoc_common_world_clip_lib_glsl[];
extern char datatoc_workbench_prepass_vert_glsl[];
extern char datatoc_workbench_prepass_frag_glsl[];
@@ -159,12 +160,15 @@ static char *workbench_build_prepass_vert(bool is_hair)
{
char *str = NULL;
if (!is_hair) {
- return BLI_strdup(datatoc_workbench_prepass_vert_glsl);
+ return BLI_string_joinN(
+ datatoc_common_world_clip_lib_glsl,
+ datatoc_workbench_prepass_vert_glsl);
}
DynStr *ds = BLI_dynstr_new();
BLI_dynstr_append(ds, datatoc_common_hair_lib_glsl);
+ BLI_dynstr_append(ds, datatoc_common_world_clip_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_prepass_vert_glsl);
str = BLI_dynstr_get_cstring(ds);
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c
index 94cbb20ef5f..485348f65f3 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -29,6 +29,7 @@
#include "BLI_alloca.h"
#include "BLI_dynstr.h"
+#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BKE_node.h"
@@ -66,6 +67,7 @@ static struct {
} e_data = {{NULL}};
/* Shaders */
+extern char datatoc_common_world_clip_lib_glsl[];
extern char datatoc_common_hair_lib_glsl[];
extern char datatoc_workbench_forward_composite_frag_glsl[];
@@ -85,12 +87,15 @@ static char *workbench_build_forward_vert(bool is_hair)
{
char *str = NULL;
if (!is_hair) {
- return BLI_strdup(datatoc_workbench_prepass_vert_glsl);
+ return BLI_string_joinN(
+ datatoc_common_world_clip_lib_glsl,
+ datatoc_workbench_prepass_vert_glsl);
}
DynStr *ds = BLI_dynstr_new();
BLI_dynstr_append(ds, datatoc_common_hair_lib_glsl);
+ BLI_dynstr_append(ds, datatoc_common_world_clip_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_prepass_vert_glsl);
str = BLI_dynstr_get_cstring(ds);
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index ce71189f344..6658877ef7d 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -243,7 +243,6 @@ void workbench_material_shgroup_uniform(
if (wpd->world_clip_planes_len) {
DRW_shgroup_uniform_vec4(grp, "WorldClipPlanes", wpd->world_clip_planes[0], wpd->world_clip_planes_len);
- DRW_shgroup_uniform_int(grp, "WorldClipPlanesLen", &wpd->world_clip_planes_len, 1);
DRW_shgroup_state_enable(grp, DRW_STATE_CLIP_PLANES);
}
}
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index 250b0a1f1ab..bb247832d44 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -302,7 +302,6 @@ void DRW_shgroup_world_clip_planes_from_rv3d(DRWShadingGroup *shgrp, const Regio
{
int world_clip_planes_len = (rv3d->viewlock & RV3D_BOXCLIP) ? 4 : 6;
DRW_shgroup_uniform_vec4(shgrp, "WorldClipPlanes", rv3d->clip[0], world_clip_planes_len);
- DRW_shgroup_uniform_int_copy(shgrp, "WorldClipPlanesLen", world_clip_planes_len);
DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES);
}
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index 1a3d7fb4cb4..a5dea9b2db0 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -42,6 +42,7 @@
#include "BKE_object.h"
#include "BLI_dynstr.h"
+#include "BLI_string_utils.h"
extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
@@ -49,6 +50,8 @@ extern struct GlobalsUboStorage ts; /* draw_common.c */
extern struct GPUTexture *globals_weight_ramp; /* draw_common.c */
+extern char datatoc_common_world_clip_lib_glsl[];
+
extern char datatoc_paint_weight_vert_glsl[];
extern char datatoc_paint_weight_frag_glsl[];
@@ -229,6 +232,7 @@ static char *EDIT_MESH_sh_lib(void)
BLI_dynstr_append(ds, datatoc_common_globals_lib_glsl);
BLI_dynstr_append(ds, datatoc_edit_mesh_overlay_common_lib_glsl);
+ BLI_dynstr_append(ds, datatoc_common_world_clip_lib_glsl);
str = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
@@ -299,11 +303,15 @@ static void EDIT_MESH_engine_init(void *vedata)
}
if (!sh_data->weight_face) {
+ char *lib = BLI_string_joinN(
+ datatoc_common_world_clip_lib_glsl,
+ datatoc_common_globals_lib_glsl);
sh_data->weight_face = DRW_shader_create_with_lib(
datatoc_paint_weight_vert_glsl, NULL,
datatoc_paint_weight_frag_glsl,
- datatoc_common_globals_lib_glsl,
+ lib,
is_clip ? DEF_WORLD_CLIP_STR : NULL);
+ MEM_freeN(lib);
}
if (!sh_data->overlay_vert) {
@@ -322,50 +330,61 @@ static void EDIT_MESH_engine_init(void *vedata)
MEM_freeN(lib);
}
if (!sh_data->overlay_facedot) {
+ char *lib = BLI_string_joinN(
+ datatoc_common_world_clip_lib_glsl,
+ datatoc_common_globals_lib_glsl);
const char *defs =
DEF_WORLD_CLIP_STR
"#define VERTEX_FACING\n" ;
sh_data->overlay_facedot = DRW_shader_create_with_lib(
datatoc_edit_mesh_overlay_facedot_vert_glsl, NULL,
datatoc_edit_mesh_overlay_facedot_frag_glsl,
- datatoc_common_globals_lib_glsl,
+ lib,
defs + (is_clip ? 0 : strlen(DEF_WORLD_CLIP_STR)));
+ MEM_freeN(lib);
}
if (!sh_data->overlay_mix) {
sh_data->overlay_mix = DRW_shader_create_fullscreen(datatoc_edit_mesh_overlay_mix_frag_glsl, NULL);
}
if (!sh_data->overlay_facefill) {
+ char *lib = BLI_string_joinN(
+ datatoc_common_world_clip_lib_glsl,
+ datatoc_common_globals_lib_glsl);
sh_data->overlay_facefill = DRW_shader_create_with_lib(
datatoc_edit_mesh_overlay_facefill_vert_glsl, NULL,
datatoc_edit_mesh_overlay_facefill_frag_glsl,
- datatoc_common_globals_lib_glsl,
+ lib,
is_clip ? DEF_WORLD_CLIP_STR : NULL);
+ MEM_freeN(lib);
}
if (!sh_data->normals_face) {
const char *defs =
DEF_WORLD_CLIP_STR
"#define FACE_NORMALS\n";
- sh_data->normals_face = DRW_shader_create(
+ sh_data->normals_face = DRW_shader_create_with_lib(
datatoc_edit_normals_vert_glsl,
datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl,
+ datatoc_common_world_clip_lib_glsl,
defs + (is_clip ? 0 : strlen(DEF_WORLD_CLIP_STR)));
}
if (!sh_data->normals_loop) {
const char *defs =
DEF_WORLD_CLIP_STR
"#define LOOP_NORMALS\n";
- sh_data->normals_loop = DRW_shader_create(
+ sh_data->normals_loop = DRW_shader_create_with_lib(
datatoc_edit_normals_vert_glsl,
datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl,
+ datatoc_common_world_clip_lib_glsl,
defs + (is_clip ? 0 : strlen(DEF_WORLD_CLIP_STR)));
}
if (!sh_data->normals) {
- sh_data->normals = DRW_shader_create(
+ sh_data->normals = DRW_shader_create_with_lib(
datatoc_edit_normals_vert_glsl,
datatoc_edit_normals_geom_glsl,
datatoc_gpu_shader_uniform_color_frag_glsl,
+ datatoc_common_world_clip_lib_glsl,
is_clip ? DEF_WORLD_CLIP_STR : NULL);
}
if (!sh_data->depth) {
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index 2fc4cf3a765..bdae377e166 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[];
@@ -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_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list