Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-05-30 20:34:54 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-30 20:34:54 +0300
commit846056de6b272d1da087c5ad133f612eecc722af (patch)
treeeb3e8d247d7827ab001a676fc1dbf46899f05065 /source/blender/draw/intern/draw_armature.c
parent493eaaf213dac66cb22b2c1c0b5400295afee6c3 (diff)
Fix T64510 Armature: Empty Not Visible as Bone custom shape
Diffstat (limited to 'source/blender/draw/intern/draw_armature.c')
-rw-r--r--source/blender/draw/intern/draw_armature.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index 3f651b27dd0..4f387de16a8 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -80,6 +80,8 @@ static struct {
DRWCallBuffer *lines_ik_no_target;
DRWCallBuffer *lines_ik_spline;
+ DRWEmptiesBufferList empties;
+
DRWArmaturePasses passes;
bool transparent;
@@ -435,6 +437,50 @@ static void drw_shgroup_bone_custom_wire(const float (*bone_mat)[4],
}
}
+static void drw_shgroup_bone_custom_empty(const float (*bone_mat)[4],
+ const float color[4],
+ const eGPUShaderConfig sh_cfg,
+ Object *custom)
+{
+ DRWEmptiesBufferList *buffers = &g_data.empties;
+ const float *draw_size = &custom->empty_drawsize;
+
+ if (g_data.empties.plain_axes == NULL) {
+ empties_callbuffers_create(g_data.passes.bone_wire, buffers, sh_cfg);
+ }
+
+ float final_color[4] = {color[0], color[1], color[2], 1.0f};
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+
+ switch (custom->empty_drawtype) {
+ case OB_PLAINAXES:
+ DRW_buffer_add_entry(buffers->plain_axes, final_color, draw_size, final_bonemat);
+ break;
+ case OB_SINGLE_ARROW:
+ DRW_buffer_add_entry(buffers->single_arrow, final_color, draw_size, final_bonemat);
+ DRW_buffer_add_entry(buffers->single_arrow_line, final_color, draw_size, final_bonemat);
+ break;
+ case OB_CUBE:
+ DRW_buffer_add_entry(buffers->cube, final_color, draw_size, final_bonemat);
+ break;
+ case OB_CIRCLE:
+ DRW_buffer_add_entry(buffers->circle, final_color, draw_size, final_bonemat);
+ break;
+ case OB_EMPTY_SPHERE:
+ DRW_buffer_add_entry(buffers->sphere, final_color, draw_size, final_bonemat);
+ break;
+ case OB_EMPTY_CONE:
+ DRW_buffer_add_entry(buffers->cone, final_color, draw_size, final_bonemat);
+ break;
+ case OB_ARROWS:
+ DRW_buffer_add_entry(buffers->empty_axes, final_color, draw_size, final_bonemat);
+ break;
+ case OB_EMPTY_IMAGE:
+ break;
+ }
+}
+
/* Head and tail sphere */
static void drw_shgroup_bone_point(const float (*bone_mat)[4],
const float bone_color[4],
@@ -1394,6 +1440,12 @@ static void draw_bone_custom_shape(EditBone *eBone,
DRW_select_load_id(select_id | BONESEL_BONE);
}
+ if (pchan->custom->type == OB_EMPTY) {
+ Object *ob = pchan->custom;
+ if (ob->empty_drawtype != OB_EMPTY_IMAGE) {
+ drw_shgroup_bone_custom_empty(disp_mat, col_wire, sh_cfg, pchan->custom);
+ }
+ }
if ((boneflag & BONE_DRAWWIRE) == 0) {
drw_shgroup_bone_custom_solid(disp_mat, col_solid, col_hint, col_wire, sh_cfg, pchan->custom);
}