[Bf-blender-cvs] [24aeb479be2] master: Overlay Mode: Use common_view_lib
Clément Foucault
noreply at git.blender.org
Wed May 8 22:09:34 CEST 2019
Commit: 24aeb479be2b87d406196240c1a4c20e1688514e
Author: Clément Foucault
Date: Wed May 8 19:30:03 2019 +0200
Branches: master
https://developer.blender.org/rB24aeb479be2b87d406196240c1a4c20e1688514e
Overlay Mode: Use common_view_lib
This is in order to centralize all matrices transformations.
===================================================================
M source/blender/draw/modes/overlay_mode.c
M source/blender/draw/modes/shaders/common_view_lib.glsl
M source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
===================================================================
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index fe4bb2db18e..ce49eb0e688 100644
--- a/source/blender/draw/modes/overlay_mode.c
+++ b/source/blender/draw/modes/overlay_mode.c
@@ -100,6 +100,8 @@ extern char datatoc_overlay_face_wireframe_geom_glsl[];
extern char datatoc_overlay_face_wireframe_frag_glsl[];
extern char datatoc_gpu_shader_depth_only_frag_glsl[];
+extern char datatoc_common_view_lib_glsl[];
+
/* Functions */
static void overlay_engine_init(void *vedata)
{
@@ -133,7 +135,10 @@ static void overlay_engine_init(void *vedata)
if (!sh_data->face_wireframe) {
sh_data->select_wireframe = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg_data->lib, datatoc_overlay_face_wireframe_vert_glsl, NULL},
+ .vert = (const char *[]){sh_cfg_data->lib,
+ datatoc_common_view_lib_glsl,
+ datatoc_overlay_face_wireframe_vert_glsl,
+ NULL},
.geom = (const char *[]){sh_cfg_data->lib, datatoc_overlay_face_wireframe_geom_glsl, NULL},
.frag = (const char *[]){datatoc_gpu_shader_depth_only_frag_glsl, NULL},
.defs = (const char *[]){sh_cfg_data->def, "#define SELECT_EDGES\n", NULL},
@@ -141,14 +146,20 @@ static void overlay_engine_init(void *vedata)
#if USE_GEOM_SHADER_WORKAROUND
/* Apple drivers does not support wide wires. Use geometry shader as a workaround. */
sh_data->face_wireframe = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg_data->lib, datatoc_overlay_face_wireframe_vert_glsl, NULL},
+ .vert = (const char *[]){sh_cfg_data->lib,
+ datatoc_common_view_lib_glsl,
+ datatoc_overlay_face_wireframe_vert_glsl,
+ NULL},
.geom = (const char *[]){sh_cfg_data->lib, datatoc_overlay_face_wireframe_geom_glsl, NULL},
.frag = (const char *[]){datatoc_overlay_face_wireframe_frag_glsl, NULL},
.defs = (const char *[]){sh_cfg_data->def, "#define USE_GEOM\n", NULL},
});
#else
sh_data->face_wireframe = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg_data->lib, datatoc_overlay_face_wireframe_vert_glsl, NULL},
+ .vert = (const char *[]){sh_cfg_data->lib,
+ datatoc_common_view_lib_glsl,
+ datatoc_overlay_face_wireframe_vert_glsl,
+ NULL},
.frag = (const char *[]){datatoc_overlay_face_wireframe_frag_glsl, NULL},
.defs = (const char *[]){sh_cfg_data->def, NULL},
});
diff --git a/source/blender/draw/modes/shaders/common_view_lib.glsl b/source/blender/draw/modes/shaders/common_view_lib.glsl
index de9c4e2a96e..25aa8e19474 100644
--- a/source/blender/draw/modes/shaders/common_view_lib.glsl
+++ b/source/blender/draw/modes/shaders/common_view_lib.glsl
@@ -13,3 +13,9 @@ layout(std140) uniform viewBlock
vec4 clipPlanes[2];
};
+
+/* Transform shortcuts. */
+#define transform_normal_object_to_world(nor) (transpose(mat3(ModelMatrixInverse)) * nor)
+#define transform_normal_world_to_object(nor) (transpose(mat3(ModelMatrix)) * nor)
+#define transform_point_view_to_object(point) \
+ ((ModelMatrixInverse * (ViewMatrixInverse * vec4(point, 1.0))).xyz)
diff --git a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
index d73f0bdb609..0d5b4390402 100644
--- a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
+++ b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
@@ -1,8 +1,4 @@
-uniform mat4 ProjectionMatrix;
-uniform mat4 ViewMatrix;
-uniform mat4 ViewMatrixInverse;
-
uniform mat4 ModelMatrix;
uniform mat4 ModelMatrixInverse;
@@ -22,8 +18,6 @@ float get_edge_sharpness(float wd)
#endif
}
-#define transform_normal_to_world(nor) (transpose(mat3(ModelMatrixInverse)) * nor)
-
/* Geometry shader version */
#if defined(SELECT_EDGES) || defined(USE_GEOM)
out float facing_g;
@@ -45,7 +39,7 @@ void main()
vec4 wpos = ModelMatrix * vec4(pos, 1.0);
gl_Position = projmat * (ViewMatrix * wpos);
- vec3 wnor = normalize(transform_normal_to_world(nor));
+ vec3 wnor = normalize(transform_normal_object_to_world(nor));
facing_g = dot(wnor, ViewMatrixInverse[2].xyz);
edgeSharpness_g = get_edge_sharpness(wd);
More information about the Bf-blender-cvs
mailing list