[Bf-blender-cvs] [4e014727f6e] blender2.8: Armature: Fix missing loose edges on custom bone shapes.

Clément Foucault noreply at git.blender.org
Thu Jun 7 13:00:34 CEST 2018


Commit: 4e014727f6ed1652fd922ba25ec00b0f9df694f9
Author: Clément Foucault
Date:   Thu Jun 7 12:58:14 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB4e014727f6ed1652fd922ba25ec00b0f9df694f9

Armature: Fix missing loose edges on custom bone shapes.

===================================================================

M	source/blender/draw/intern/draw_armature.c

===================================================================

diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index ed9bb6f8ca9..a736f0a31fb 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -319,21 +319,32 @@ static void drw_shgroup_bone_custom_solid(
         Object *custom)
 {
 	/* grr, not re-using instances! */
-	struct Gwn_Batch *geom = DRW_cache_object_surface_get(custom);
-	if (geom) {
-		DRWShadingGroup *shgrp_geom_solid = shgroup_instance_bone_shape_solid(g_data.passes.bone_solid, geom);
-		float final_bonemat[4][4];
+	struct Gwn_Batch *surf = DRW_cache_object_surface_get(custom);
+	struct Gwn_Batch *edges = DRW_cache_object_edge_detection_get(custom, NULL);
+	struct Gwn_Batch *ledges = DRW_cache_object_loose_edges_get(custom);
+	float final_bonemat[4][4];
+
+	if (surf || edges || ledges) {
 		mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+	}
+
+	if (surf) {
+		DRWShadingGroup *shgrp_geom_solid = shgroup_instance_bone_shape_solid(g_data.passes.bone_solid, surf);
 		DRW_shgroup_call_dynamic_add(shgrp_geom_solid, final_bonemat, bone_color, hint_color);
 	}
 
-	geom = DRW_cache_object_edge_detection_get(custom, NULL);
-	if (geom && outline_color[3] > 0.0f) {
-		DRWShadingGroup *shgrp_geom_wire = shgroup_instance_bone_shape_outline(g_data.passes.bone_outline, geom);
-		float final_bonemat[4][4];
-		mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+	if (edges && outline_color[3] > 0.0f) {
+		DRWShadingGroup *shgrp_geom_wire = shgroup_instance_bone_shape_outline(g_data.passes.bone_outline, edges);
 		DRW_shgroup_call_dynamic_add(shgrp_geom_wire, final_bonemat, outline_color);
 	}
+
+	if (ledges) {
+		DRWShadingGroup *shgrp_geom_ledges = shgroup_instance_wire(g_data.passes.bone_wire, ledges);
+		float final_color[4];
+		copy_v3_v3(final_color, outline_color);
+		final_color[3] = 1.0f; /* hack */
+		DRW_shgroup_call_dynamic_add(shgrp_geom_ledges, final_bonemat, final_color);
+	}
 }
 
 static void drw_shgroup_bone_custom_wire(



More information about the Bf-blender-cvs mailing list