diff options
6 files changed, 11 insertions, 13 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_query_iter.cc b/source/blender/depsgraph/intern/depsgraph_query_iter.cc index 7d47e1fb541..dd5c998466b 100644 --- a/source/blender/depsgraph/intern/depsgraph_query_iter.cc +++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc @@ -154,6 +154,7 @@ bool deg_objects_dupli_iterator_next(BLI_Iterator *iter) dupli_parent->runtime.local_collections_bits; temp_dupli_object->dt = MIN2(temp_dupli_object->dt, dupli_parent->dt); copy_v4_v4(temp_dupli_object->color, dupli_parent->color); + temp_dupli_object->runtime.select_id = dupli_parent->runtime.select_id; /* Duplicated elements shouldn't care whether their original collection is visible or not. */ temp_dupli_object->base_flag |= BASE_VISIBLE_DEPSGRAPH; @@ -224,6 +225,7 @@ void deg_iterator_objects_step(BLI_Iterator *iter, deg::IDNode *id_node) } } + object->runtime.select_id = DEG_get_original_object(object)->runtime.select_id; if (ob_visibility & OB_VISIBLE_INSTANCES) { if ((data->flag & DEG_ITER_OBJECT_FLAG_DUPLI) && (object->transflag & OB_DUPLI)) { data->dupli_parent = object; diff --git a/source/blender/draw/engines/overlay/overlay_armature.c b/source/blender/draw/engines/overlay/overlay_armature.c index cbd2589f20f..1f95eec4486 100644 --- a/source/blender/draw/engines/overlay/overlay_armature.c +++ b/source/blender/draw/engines/overlay/overlay_armature.c @@ -1910,7 +1910,7 @@ static void draw_armature_edit(ArmatureDrawContext *ctx) edbo_compute_bbone_child(arm); - for (eBone = arm->edbo->first, index = ob_orig->runtime.select_id; eBone; + for (eBone = arm->edbo->first, index = ob->runtime.select_id; eBone; eBone = eBone->next, index += 0x10000) { if (eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A) == 0) { @@ -2005,8 +2005,7 @@ static void draw_armature_pose(ArmatureDrawContext *ctx) DRW_state_is_select(); if (is_pose_select) { - const Object *ob_orig = DEG_get_original_object(ob); - index = ob_orig->runtime.select_id; + index = ob->runtime.select_id; } } diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c index 4ca7ee42f8d..39f17581e0d 100644 --- a/source/blender/draw/engines/overlay/overlay_extra.c +++ b/source/blender/draw/engines/overlay/overlay_extra.c @@ -871,7 +871,6 @@ static void camera_view3d_reconstruction(OVERLAY_ExtraCallBuffers *cb, { const DRWContextState *draw_ctx = DRW_context_state_get(); const bool is_select = DRW_state_is_select(); - const Object *orig_camera_object = DEG_get_original_object(camera_object); MovieClip *clip = BKE_object_movieclip_get(scene, ob, false); if (clip == NULL) { @@ -945,7 +944,7 @@ static void camera_view3d_reconstruction(OVERLAY_ExtraCallBuffers *cb, } if (is_select) { - DRW_select_load_id(orig_camera_object->runtime.select_id | (track_index << 16)); + DRW_select_load_id(camera_object->runtime.select_id | (track_index << 16)); track_index++; } diff --git a/source/blender/draw/engines/overlay/overlay_metaball.c b/source/blender/draw/engines/overlay/overlay_metaball.c index c10c0a84247..f973c1eda8a 100644 --- a/source/blender/draw/engines/overlay/overlay_metaball.c +++ b/source/blender/draw/engines/overlay/overlay_metaball.c @@ -82,8 +82,7 @@ void OVERLAY_edit_metaball_cache_populate(OVERLAY_Data *vedata, Object *ob) int select_id = 0; if (is_select) { - const Object *orig_object = DEG_get_original_object(ob); - select_id = orig_object->runtime.select_id; + select_id = ob->runtime.select_id; } LISTBASE_FOREACH (MetaElem *, ml, mb->editelems) { diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index c5edf9577a4..99f102680e5 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -2422,11 +2422,7 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph, } } - /* This relies on dupli instances being after their instancing object. */ - if ((ob->base_flag & BASE_FROM_DUPLI) == 0) { - Object *ob_orig = DEG_get_original_object(ob); - DRW_select_load_id(ob_orig->runtime.select_id); - } + DRW_select_load_id(ob->runtime.select_id); DST.dupli_parent = data_.dupli_parent; DST.dupli_source = data_.dupli_object_current; drw_duplidata_load(DST.dupli_source); diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 345d1287ab1..5a00b6479d5 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -126,7 +126,10 @@ typedef struct Object_Runtime { /** Only used for drawing the parent/child help-line. */ float parent_display_origin[3]; - /** Selection id of this object; only available in the original object */ + /** + * Selection id of this object. It might differ between an evaluated and its original object, + * when the object is being instanced. + */ int select_id; char _pad1[3]; |