[Bf-blender-cvs] [817cf2a3173] blender2.8: Armature: Rename bone shaders and add 2 colors smooth blending.
Clément Foucault
noreply at git.blender.org
Sat May 5 21:14:00 CEST 2018
Commit: 817cf2a317388b8bfc29ddf27a49b0628eb8e1ab
Author: Clément Foucault
Date: Sat May 5 20:51:16 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB817cf2a317388b8bfc29ddf27a49b0628eb8e1ab
Armature: Rename bone shaders and add 2 colors smooth blending.
This will enable us to do more nice stuff in future commits.
This commit is a temporary commit, it will compile but will crash if
trying to display any armature. Next commit does work.
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/intern/draw_armature.c
M source/blender/draw/intern/draw_common.c
M source/blender/draw/intern/draw_common.h
A source/blender/draw/modes/shaders/armature_envelope_distance_frag.glsl
D source/blender/draw/modes/shaders/armature_envelope_frag.glsl
A source/blender/draw/modes/shaders/armature_envelope_solid_frag.glsl
R088 source/blender/draw/modes/shaders/armature_envelope_vert.glsl source/blender/draw/modes/shaders/armature_envelope_solid_vert.glsl
A source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl
A source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl
R087 source/blender/draw/modes/shaders/armature_sphere_frag.glsl source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl
R093 source/blender/draw/modes/shaders/armature_sphere_vert.glsl source/blender/draw/modes/shaders/armature_sphere_solid_vert.glsl
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 3c4d7da29fb..1550f48fec5 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -224,12 +224,15 @@ data_to_c_simple(modes/shaders/common_globals_lib.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/armature_sphere_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_sphere_frag.glsl SRC)
+data_to_c_simple(modes/shaders/armature_sphere_solid_vert.glsl SRC)
+data_to_c_simple(modes/shaders/armature_sphere_solid_frag.glsl SRC)
data_to_c_simple(modes/shaders/armature_sphere_outline_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_envelope_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_envelope_frag.glsl SRC)
+data_to_c_simple(modes/shaders/armature_envelope_solid_vert.glsl SRC)
+data_to_c_simple(modes/shaders/armature_envelope_solid_frag.glsl SRC)
data_to_c_simple(modes/shaders/armature_envelope_outline_vert.glsl SRC)
+data_to_c_simple(modes/shaders/armature_envelope_distance_frag.glsl SRC)
+data_to_c_simple(modes/shaders/armature_shape_solid_vert.glsl SRC)
+data_to_c_simple(modes/shaders/armature_shape_solid_frag.glsl SRC)
data_to_c_simple(modes/shaders/armature_shape_outline_vert.glsl SRC)
data_to_c_simple(modes/shaders/armature_shape_outline_geom.glsl SRC)
data_to_c_simple(modes/shaders/edit_mesh_overlay_frag.glsl SRC)
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index 7b29b213bec..9a293d28c81 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -260,7 +260,7 @@ static void drw_shgroup_bone_envelope_solid(
DRW_shgroup_state_enable(g_data.bone_envelope_solid, DRW_STATE_CULL_BACK);
}
if (g_data.bone_point_solid == NULL) {
- g_data.bone_point_solid = shgroup_instance_bone_sphere(g_data.pass_bone_solid);
+ g_data.bone_point_solid = shgroup_instance_bone_sphere_solid(g_data.pass_bone_solid);
}
drw_shgroup_bone_envelope(g_data.bone_point_solid,
@@ -350,7 +350,7 @@ static void drw_shgroup_bone_custom_wire(const float (*bone_mat)[4], const float
static void drw_shgroup_bone_point_solid(const float (*bone_mat)[4], const float color[4])
{
if (g_data.bone_point_solid == NULL) {
- g_data.bone_point_solid = shgroup_instance_bone_sphere(g_data.pass_bone_solid);
+ g_data.bone_point_solid = shgroup_instance_bone_sphere_solid(g_data.pass_bone_solid);
}
float final_bonemat[4][4];
mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index 363728c9a33..ac5d6b87f4b 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -153,12 +153,15 @@ void DRW_globals_update(void)
/* ********************************* SHGROUP ************************************* */
-extern char datatoc_armature_sphere_vert_glsl[];
-extern char datatoc_armature_sphere_frag_glsl[];
+extern char datatoc_armature_sphere_solid_vert_glsl[];
+extern char datatoc_armature_sphere_solid_frag_glsl[];
extern char datatoc_armature_sphere_outline_vert_glsl[];
-extern char datatoc_armature_envelope_vert_glsl[];
-extern char datatoc_armature_envelope_frag_glsl[];
+extern char datatoc_armature_envelope_solid_vert_glsl[];
+extern char datatoc_armature_envelope_solid_frag_glsl[];
extern char datatoc_armature_envelope_outline_vert_glsl[];
+extern char datatoc_armature_envelope_distance_frag_glsl[];
+extern char datatoc_armature_shape_solid_vert_glsl[];
+extern char datatoc_armature_shape_solid_frag_glsl[];
extern char datatoc_armature_shape_outline_vert_glsl[];
extern char datatoc_armature_shape_outline_geom_glsl[];
extern char datatoc_gpu_shader_flat_color_frag_glsl[];
@@ -167,6 +170,7 @@ extern char datatoc_object_mball_handles_vert_glsl[];
static struct {
struct GPUShader *shape_outline;
+ struct GPUShader *shape_solid;
struct GPUShader *bone_envelope;
struct GPUShader *bone_envelope_distance;
struct GPUShader *bone_envelope_outline;
@@ -187,8 +191,10 @@ static struct {
struct Gwn_VertFormat *instance_camera;
struct Gwn_VertFormat *instance_distance_lines;
struct Gwn_VertFormat *instance_spot;
+ struct Gwn_VertFormat *instance_bone;
struct Gwn_VertFormat *instance_bone_outline;
struct Gwn_VertFormat *instance_bone_envelope;
+ struct Gwn_VertFormat *instance_bone_envelope_distance;
struct Gwn_VertFormat *instance_bone_envelope_outline;
struct Gwn_VertFormat *instance_mball_handles;
} g_formats = {NULL};
@@ -456,20 +462,19 @@ DRWShadingGroup *shgroup_instance_bone_envelope_distance(DRWPass *pass)
{
if (g_shaders.bone_envelope_distance == NULL) {
g_shaders.bone_envelope_distance = DRW_shader_create(
- datatoc_armature_envelope_vert_glsl, NULL,
- datatoc_armature_envelope_frag_glsl, NULL);
+ datatoc_armature_envelope_solid_vert_glsl, NULL,
+ datatoc_armature_envelope_distance_frag_glsl, NULL);
}
- DRW_shgroup_instance_format(g_formats.instance_bone_envelope, {
+ DRW_shgroup_instance_format(g_formats.instance_bone_envelope_distance, {
{"headSphere" , DRW_ATTRIB_FLOAT, 4},
{"tailSphere" , DRW_ATTRIB_FLOAT, 4},
- {"color" , DRW_ATTRIB_FLOAT, 4},
{"xAxis" , DRW_ATTRIB_FLOAT, 3}
});
DRWShadingGroup *grp = DRW_shgroup_instance_create(g_shaders.bone_envelope_distance,
pass, DRW_cache_bone_envelope_solid_get(),
- g_formats.instance_bone_envelope);
+ g_formats.instance_bone_envelope_distance);
return grp;
}
@@ -478,14 +483,15 @@ DRWShadingGroup *shgroup_instance_bone_envelope_solid(DRWPass *pass)
{
if (g_shaders.bone_envelope == NULL) {
g_shaders.bone_envelope = DRW_shader_create(
- datatoc_armature_envelope_vert_glsl, NULL,
- datatoc_armature_envelope_frag_glsl, "#define SMOOTH_ENVELOPE\n");
+ datatoc_armature_envelope_solid_vert_glsl, NULL,
+ datatoc_armature_envelope_solid_frag_glsl, "#define SMOOTH_ENVELOPE\n");
}
DRW_shgroup_instance_format(g_formats.instance_bone_envelope, {
{"headSphere" , DRW_ATTRIB_FLOAT, 4},
{"tailSphere" , DRW_ATTRIB_FLOAT, 4},
- {"color" , DRW_ATTRIB_FLOAT, 4},
+ {"boneColor" , DRW_ATTRIB_FLOAT, 3},
+ {"stateColor" , DRW_ATTRIB_FLOAT, 3},
{"xAxis" , DRW_ATTRIB_FLOAT, 3}
});
@@ -541,22 +547,43 @@ DRWShadingGroup *shgroup_instance_bone_shape_outline(DRWPass *pass, struct Gwn_B
return grp;
}
-DRWShadingGroup *shgroup_instance_bone_sphere(DRWPass *pass)
+DRWShadingGroup *shgroup_instance_bone_shape_solid(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ if (g_shaders.shape_solid == NULL) {
+ g_shaders.shape_solid = DRW_shader_create(
+ datatoc_armature_shape_solid_vert_glsl, NULL,
+ datatoc_armature_shape_solid_frag_glsl, NULL);
+ }
+
+ DRW_shgroup_instance_format(g_formats.instance_bone, {
+ {"InstanceModelMatrix", DRW_ATTRIB_FLOAT, 16},
+ {"boneColor" , DRW_ATTRIB_FLOAT, 3},
+ {"stateColor" , DRW_ATTRIB_FLOAT, 3}
+ });
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(g_shaders.shape_solid,
+ pass, geom, g_formats.instance_bone);
+ DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 1);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_bone_sphere_solid(DRWPass *pass)
{
if (g_shaders.bone_sphere == NULL) {
g_shaders.bone_sphere = DRW_shader_create(
- datatoc_armature_sphere_vert_glsl, NULL,
- datatoc_armature_sphere_frag_glsl, NULL);
+ datatoc_armature_sphere_solid_vert_glsl, NULL,
+ datatoc_armature_sphere_solid_frag_glsl, NULL);
}
- /* TODO own format? */
- DRW_shgroup_instance_format(g_formats.instance_color, {
+ DRW_shgroup_instance_format(g_formats.instance_bone, {
{"InstanceModelMatrix", DRW_ATTRIB_FLOAT, 16},
- {"color" , DRW_ATTRIB_FLOAT, 4}
+ {"boneColor" , DRW_ATTRIB_FLOAT, 3},
+ {"stateColor" , DRW_ATTRIB_FLOAT, 3}
});
DRWShadingGroup *grp = DRW_shgroup_instance_create(g_shaders.bone_sphere,
- pass, DRW_cache_bone_point_get(), g_formats.instance_color);
+ pass, DRW_cache_bone_point_get(), g_formats.instance_bone);
return grp;
}
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
index fe781e2cc9a..0acd68dcd5d 100644
--- a/source/blender/draw/intern/draw_common.h
+++ b/source/blender/draw/intern/draw_common.h
@@ -115,13 +115,14 @@ struct DRWShadingGroup *shgroup_instance_outline(struct DRWPass *pass, struct Gw
struct DRWShadingGroup *shgroup_camera_instance(struct DRWPass *pass, struct Gwn_Batch *geom);
struct DRWShadingGroup *shgroup_distance_lines_instance(struct DRWPass *pass, struct Gwn_Batch *geom);
struct DRWShadingGroup *shgroup_spot_instance(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_mball_handles(struct DRWPass *pass);
struct DRWShadingGroup *shgroup_instance_bone_envelope_distance(struct DRWPass *pass);
struct DRWShadingGroup *shgroup_instance_bone_envelope_outline(struct DRWPass *pass);
struct DRWShadingGroup *shgroup_instance_bone_envelope_solid(struct DRWPass *pass);
-struct DRWShadingGroup *shgroup_instance_mball_handles(struct DRWPass *pass);
struct DRWShadingGroup *shgroup_instance_bone_shape_outline(struct DRWPass *pass, struct Gwn_Batch *geom);
-struct DRWShadingGroup *shgroup_instance_bone_sphere(struct DRWPass *pass);
+struct DRWShadingGroup *shgroup_instance_bone_shape_solid(struct DRWPass *pass, struct Gwn_Batch *geom);
struct DRWShadingGroup *shgroup_instance_bone_sphere_outline
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list