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:
authorJacques Lucke <jacques@blender.org>2020-11-24 19:32:40 +0300
committerJacques Lucke <jacques@blender.org>2020-11-24 19:32:56 +0300
commite922dd7d8a307c54d49bc01649a12610b022192b (patch)
tree21ab3edb04efa7eb95aec6f8df0868acd820ea1c /source/blender/draw
parent256a9d983d4862560071393f7ddf44bcbd34ad74 (diff)
Viewport: cannot select object by clicking on its instances
Selecting an object by clicking on its instances only worked, when the object itself is visible. However, it is possible to hide the object and still keep the instances visible. The solution is to give every object the correct `select_id` in the depsgraph object iterator right before rendering. Reviewers: fclem, brecht Differential Revision: https://developer.blender.org/D9640
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/overlay/overlay_armature.c5
-rw-r--r--source/blender/draw/engines/overlay/overlay_extra.c3
-rw-r--r--source/blender/draw/engines/overlay/overlay_metaball.c3
-rw-r--r--source/blender/draw/intern/draw_manager.c6
4 files changed, 5 insertions, 12 deletions
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);