[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