[Bf-blender-cvs] [09bfa9bb63e] temp-T73411-view-layer-lazy-cache: Introducing BKE_view_layer_object_bases_get(_const).
Monique
noreply at git.blender.org
Mon Sep 5 20:44:38 CEST 2022
Commit: 09bfa9bb63e2c93b4394af05a31ddeeae4a02fa4
Author: Monique
Date: Thu Aug 25 22:47:02 2022 +0200
Branches: temp-T73411-view-layer-lazy-cache
https://developer.blender.org/rB09bfa9bb63e2c93b4394af05a31ddeeae4a02fa4
Introducing BKE_view_layer_object_bases_get(_const).
===================================================================
M source/blender/blenkernel/BKE_layer.h
M source/blender/blenkernel/intern/layer.c
M source/blender/blenkernel/intern/layer_utils.c
M source/blender/blenkernel/intern/mball.cc
M source/blender/blenkernel/intern/object.cc
M source/blender/blenkernel/intern/scene.cc
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/versioning_280.c
M source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
M source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
M source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M source/blender/editors/animation/anim_channels_edit.c
M source/blender/editors/animation/anim_filter.c
M source/blender/editors/gpencil/gpencil_armature.c
M source/blender/editors/object/object_edit.c
M source/blender/editors/object/object_select.c
M source/blender/editors/object/object_utils.c
M source/blender/editors/render/render_internal.cc
M source/blender/editors/render/render_preview.cc
M source/blender/editors/screen/screen_context.c
M source/blender/editors/space_nla/nla_channels.c
M source/blender/editors/space_outliner/outliner_collections.cc
M source/blender/editors/space_outliner/outliner_tools.cc
M source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
M source/blender/editors/space_view3d/view3d_navigate.c
M source/blender/editors/space_view3d/view3d_select.cc
M source/blender/editors/transform/transform_convert_object.c
M source/blender/editors/transform/transform_gizmo_3d.c
M source/blender/editors/transform/transform_snap_object.cc
M source/blender/editors/undo/ed_undo.c
M source/blender/io/alembic/exporter/abc_subdiv_disabler.cc
M source/blender/io/collada/BlenderContext.cpp
M source/blender/io/gpencil/intern/gpencil_io_base.cc
M source/blender/makesrna/intern/rna_layer.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 49dc87629d6..9b3b7f4bfc1 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -425,7 +425,8 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
{ \
Object *_instance; \
Base *_base; \
- for (_base = (Base *)(view_layer)->object_bases.first; _base; _base = _base->next) { \
+ for (_base = (Base *)BKE_view_layer_object_bases_get(view_layer, __func__)->first; _base; \
+ _base = _base->next) { \
_instance = _base->object;
#define FOREACH_OBJECT_END \
@@ -546,6 +547,11 @@ struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(struct Vie
struct Object *BKE_view_layer_active_object_get(const struct ViewLayer *view_layer);
struct Object *BKE_view_layer_edit_object_get(const struct ViewLayer *view_layer);
+struct ListBase *BKE_view_layer_object_bases_get(struct ViewLayer *view_layer, const char *name);
+// This should not exist in the final solution.
+const struct ListBase *BKE_view_layer_object_bases_get_const(const struct ViewLayer *view_layer,
+ const char *name);
+
struct ViewLayerAOV *BKE_view_layer_add_aov(struct ViewLayer *view_layer);
void BKE_view_layer_remove_aov(struct ViewLayer *view_layer, struct ViewLayerAOV *aov);
void BKE_view_layer_set_active_aov(struct ViewLayer *view_layer, struct ViewLayerAOV *aov);
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 53a9b6d469d..4f5be581c6d 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -245,7 +245,7 @@ void BKE_view_layer_free_ex(ViewLayer *view_layer, const bool do_id_user)
{
view_layer->basact = NULL;
- BLI_freelistN(&view_layer->object_bases);
+ BLI_freelistN(BKE_view_layer_object_bases_get(view_layer, __func__));
if (view_layer->object_bases_hash) {
BLI_ghash_free(view_layer->object_bases_hash, NULL, NULL);
@@ -285,7 +285,7 @@ void BKE_view_layer_free_ex(ViewLayer *view_layer, const bool do_id_user)
void BKE_view_layer_selected_objects_tag(ViewLayer *view_layer, const int tag)
{
- LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
if ((base->flag & BASE_SELECTED) != 0) {
base->object->flag |= tag;
}
@@ -310,7 +310,7 @@ static bool find_scene_collection_in_scene_collections(ListBase *lb, const Layer
Object *BKE_view_layer_camera_find(ViewLayer *view_layer)
{
- LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
if (base->object->type == OB_CAMERA) {
return base->object;
}
@@ -342,7 +342,8 @@ static void view_layer_bases_hash_create(ViewLayer *view_layer, const bool do_ba
if (view_layer->object_bases_hash == NULL) {
GHash *hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
- LISTBASE_FOREACH_MUTABLE (Base *, base, &view_layer->object_bases) {
+ LISTBASE_FOREACH_MUTABLE (
+ Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
if (base->object) {
void **val_pp;
if (!BLI_ghash_ensure_p(hash, base->object, &val_pp)) {
@@ -358,7 +359,7 @@ static void view_layer_bases_hash_create(ViewLayer *view_layer, const bool do_ba
if (view_layer->basact == base) {
view_layer->basact = NULL;
}
- BLI_freelinkN(&view_layer->object_bases, base);
+ BLI_freelinkN(BKE_view_layer_object_bases_get(view_layer, __func__), base);
}
else {
CLOG_FATAL(&LOG,
@@ -387,9 +388,7 @@ Base *BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
void BKE_view_layer_base_deselect_all(ViewLayer *view_layer)
{
- Base *base;
-
- for (base = view_layer->object_bases.first; base; base = base->next) {
+ LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
base->flag &= ~BASE_SELECTED;
}
}
@@ -495,13 +494,15 @@ void BKE_view_layer_copy_data(Scene *scene_dst,
/* Clear temporary data. */
BLI_listbase_clear(&view_layer_dst->drawdata);
+ // TODO: BKE_view_layer_object_bases_get should we set tag the view_layer_dst here for rebuild.
view_layer_dst->object_bases_array = NULL;
view_layer_dst->object_bases_hash = NULL;
/* Copy layer collections and object bases. */
/* Inline 'BLI_duplicatelist' and update the active base. */
BLI_listbase_clear(&view_layer_dst->object_bases);
- LISTBASE_FOREACH (Base *, base_src, &view_layer_src->object_bases) {
+ LISTBASE_FOREACH (
+ const Base *, base_src, BKE_view_layer_object_bases_get_const(view_layer_src, __func__)) {
Base *base_dst = MEM_dupallocN(base_src);
BLI_addtail(&view_layer_dst->object_bases, base_dst);
if (view_layer_src->basact == base_src) {
@@ -985,7 +986,7 @@ static void layer_collection_objects_sync(ViewLayer *view_layer,
* case also works. */
base = *base_p;
if (!ELEM(base, r_lb_new_object_bases->first, r_lb_new_object_bases->last)) {
- BLI_remlink(&view_layer->object_bases, base);
+ BLI_remlink(BKE_view_layer_object_bases_get(view_layer, __func__), base);
BLI_addtail(r_lb_new_object_bases, base);
}
}
@@ -1269,7 +1270,7 @@ void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer)
}
/* Clear visible and selectable flags to be reset. */
- LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
base->flag &= ~g_base_collection_flags;
base->flag_from_collection &= ~g_base_collection_flags;
}
@@ -1298,7 +1299,7 @@ void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer)
master_layer_resync = NULL;
/* Any remaining object bases are to be removed. */
- LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
if (view_layer->basact == base) {
view_layer->basact = NULL;
}
@@ -1319,7 +1320,7 @@ void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer)
view_layer_objects_base_cache_validate(view_layer, NULL);
- LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
BKE_base_eval_flags(base);
}
@@ -1492,7 +1493,7 @@ void BKE_base_set_visible(Scene *scene, ViewLayer *view_layer, Base *base, bool
{
if (!extend) {
/* Make only one base visible. */
- LISTBASE_FOREACH (Base *, other, &view_layer->object_bases) {
+ LISTBASE_FOREACH (Base *, other, BKE_view_layer_object_bases_get(view_layer, __func__)) {
other->flag |= BASE_HIDDEN;
}
@@ -1684,7 +1685,7 @@ void BKE_layer_collection_local_sync(ViewLayer *view_layer, const View3D *v3d)
const unsigned short local_collections_uuid = v3d->local_collections_uuid;
/* Reset flags and set the bases visible by default. */
- LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
base->local_collections_bits &= ~local_collections_uuid;
}
@@ -1934,7 +1935,7 @@ static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in_v, con
ObjectsVisibleIteratorData *data_in = data_in_v;
ViewLayer *view_layer = data_in->view_layer;
const View3D *v3d = data_in->v3d;
- Base *base = view_layer->object_bases.first;
+ Base *base = BKE_view_layer_object_bases_get(view_layer, __func__)->first;
/* when there are no objects */
if (base == NULL) {
@@ -2166,6 +2167,8 @@ void BKE_view_layer_bases_in_mode_iterator_next(BLI_Iterator *iter)
if (base == data->base_active) {
/* first step */
+ // TODO: We should assure that the object_bases are valid. Adding
+ // BKE_view_layer_object_bases_get here seems not correct. this should happen by the caller.
base = data->view_layer->object_bases.first;
if ((base == data->base_active) && BKE_base_is_visible(data->v3d, base)) {
base = base->next;
@@ -2235,12 +2238,13 @@ static void layer_eval_view_layer(struct Depsgraph *depsgraph,
DEG_debug_print_eval(depsgraph, __func__, view_layer->name, view_layer);
/* Create array of bases, for fast index-based lookup. */
- const int num_object_bases = BLI_listbase_count(&view_layer->object_bases);
+ const int num_object_bases = BLI_listbase_count(
+ BKE_view_layer_object_bases_get(view_layer, __func__));
MEM_SAFE_FREE(view_layer->object_bases_array);
view_layer->object_bases_array = MEM_malloc_arrayN(
num_object_bases, sizeof(Base *), "view_layer->object_bases_array");
int base_index = 0;
- LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
view_layer->object_bases_array[base_index++] = base;
}
}
@@ -2273,7 +2277,7 @@ static void write_layer_collections(BlendWriter *writer, ListBase *lb)
void BKE_view_layer_blend_write(BlendWriter *writer, ViewLayer *view_layer)
{
BLO_write_struct(writer, ViewLayer, view_layer);
- BLO_write_struct_list(writer, Base, &view_layer->object_bases);
+ BLO_write_struct_list(writer, Base, BKE_view_layer_object_bases_get(view_layer, __func__));
if (view_layer->id_properties) {
IDP_BlendWrite(writer, view_layer->id_properties);
@@ -2315,7 +2319,7 @@ static void direct_link_layer_collections(BlendDataReader *reader, ListBase *lb,
void BKE_view_layer_blend_read_data(BlendDataReader *reader, ViewLayer *view_layer)
{
view_layer->stats = NULL;
- BLO_read_list(reader, &view_layer->object_bases);
+ BLO_read_list(reader, BKE_view_layer_object_bases_get(view_layer, __func__));
BLO_read_data_address(reader, &view_layer->basact);
direct_lin
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list