[Bf-blender-cvs] [7bd6590594d] temp-dynamic-overrides: Merge remote-tracking branch 'origin/blender2.8' into temp-dynamic-overrides
Dalai Felinto
noreply at git.blender.org
Fri May 25 18:04:25 CEST 2018
Commit: 7bd6590594d578c4700fbc3d61019770098a57ec
Author: Dalai Felinto
Date: Fri May 25 17:37:52 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rB7bd6590594d578c4700fbc3d61019770098a57ec
Merge remote-tracking branch 'origin/blender2.8' into temp-dynamic-overrides
Big merge, this addresses all the conflicts due to the Group > Collection change.
===================================================================
===================================================================
diff --cc source/blender/blenkernel/BKE_layer.h
index 56bfdc26c80,60204d177f2..813f737e582
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@@ -42,21 -43,16 +43,20 @@@ extern "C"
#define ROOT_PROP "root"
struct Base;
+ struct Collection;
struct Depsgraph;
+struct DynamicOverrideProperty;
- struct Group;
struct ID;
struct IDProperty;
struct LayerCollection;
struct ListBase;
struct Main;
struct Object;
+struct OverrideSet;
+struct PointerRNA;
+struct PropertyRNA;
struct RenderEngine;
struct Scene;
- struct SceneCollection;
struct ViewLayer;
struct WorkSpace;
@@@ -75,9 -70,7 +74,8 @@@ void BKE_view_layer_free_ex(struct View
void BKE_view_layer_selected_objects_tag(struct ViewLayer *view_layer, const int tag);
struct Object *BKE_view_layer_camera_find(struct ViewLayer *view_layer);
- struct ViewLayer *BKE_view_layer_first_from_id(const struct ID *owner_id);
- struct ViewLayer *BKE_view_layer_find_from_collection(const struct ID *owner_id, struct LayerCollection *lc);
- struct ViewLayer *BKE_view_layer_find_from_override_set(const struct ID *owner_id, struct OverrideSet *override_set);
++struct ViewLayer *BKE_view_layer_find_from_override_set(const struct Scene *scene, struct OverrideSet *override_set);
+ struct ViewLayer *BKE_view_layer_find_from_collection(const struct Scene *scene, struct LayerCollection *lc);
struct Base *BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob);
void BKE_view_layer_base_deselect_all(struct ViewLayer *view_layer);
void BKE_view_layer_base_select(struct ViewLayer *view_layer, struct Base *selbase);
@@@ -130,28 -109,14 +114,33 @@@ bool BKE_layer_collection_objects_selec
/* override */
- void BKE_override_view_layer_datablock_add(struct ViewLayer *view_layer, int id_type, const char *data_path, const struct ID *owner_id);
- void BKE_override_view_layer_int_add(struct ViewLayer *view_layer, int id_type, const char *data_path, const int value);
+ void BKE_override_view_layer_datablock_add(
+ struct ViewLayer *view_layer, int id_type, const char *data_path, const struct ID *owner_id);
+ void BKE_override_view_layer_int_add(
+ struct ViewLayer *view_layer, int id_type, const char *data_path, const int value);
- void BKE_override_layer_collection_boolean_add(struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value);
+ void BKE_override_layer_collection_boolean_add(
+ struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value);
+/* Dynamic override. */
+
+struct OverrideSet *BKE_view_layer_override_set_add(struct ViewLayer *view_layer, const char *name);
+bool BKE_view_layer_override_set_remove(struct ViewLayer *view_layer, struct OverrideSet *override_set);
- bool BKE_view_layer_override_set_collection_link(struct OverrideSet *override_set, struct SceneCollection *collection);
- bool BKE_view_layer_override_set_collection_unlink(struct OverrideSet *override_set, struct SceneCollection *collection);
++bool BKE_view_layer_override_set_collection_link(struct OverrideSet *override_set, struct Collection *collection);
++bool BKE_view_layer_override_set_collection_unlink(struct OverrideSet *override_set, struct Collection *collection);
++
++void BKE_dynamic_overrides_remove_collection(struct Main *bmain, struct Collection *old_collection);
+
+struct DynamicOverrideProperty *BKE_view_layer_override_property_add(
+ struct OverrideSet *override_set,
+ struct PointerRNA *ptr,
+ struct PropertyRNA *prop,
+ const int index);
+
+bool BKE_view_layer_override_property_remove(
+ struct OverrideSet *override_set,
+ struct DynamicOverrideProperty *dyn_prop);
+
/* evaluation */
void BKE_layer_eval_view_layer(
diff --cc source/blender/blenkernel/intern/layer.c
index 70145754140,3a6d599ccd3..b5a350a6234
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@@ -59,21 -60,47 +60,51 @@@
#include "DRW_engine.h"
+#include "RNA_access.h"
+
#include "MEM_guardedalloc.h"
+
/* prototype */
- struct EngineSettingsCB_Type;
- static void layer_collections_sync_flags(ListBase *layer_collections_dst, const ListBase *layer_collections_src);
- static void layer_collection_free(ViewLayer *view_layer, LayerCollection *lc);
- static void layer_collection_objects_populate(ViewLayer *view_layer, LayerCollection *lc, ListBase *objects);
- static LayerCollection *layer_collection_add(ViewLayer *view_layer, LayerCollection *parent, SceneCollection *sc);
- static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc);
+static void override_set_copy_data(struct OverrideSet *override_set_dst, struct OverrideSet *override_set_src);
+static void override_set_free(struct OverrideSet *override_set);
static void object_bases_iterator_next(BLI_Iterator *iter, const int flag);
+
+ /*********************** Layer Collections and bases *************************/
+
+ static LayerCollection *layer_collection_add(ListBase *lb_parent, Collection *collection)
+ {
+ LayerCollection *lc = MEM_callocN(sizeof(LayerCollection), "Collection Base");
+ lc->collection = collection;
+ BLI_addtail(lb_parent, lc);
+
+ return lc;
+ }
+
+ static void layer_collection_free(ViewLayer *view_layer, LayerCollection *lc)
+ {
+ if (lc == view_layer->active_collection) {
+ view_layer->active_collection = view_layer->layer_collections.first;
+ }
+
+ for (LayerCollection *nlc = lc->layer_collections.first; nlc; nlc = nlc->next) {
+ layer_collection_free(view_layer, nlc);
+ }
+
+ BLI_freelistN(&lc->layer_collections);
+ }
+
+ static Base *object_base_new(Object *ob)
+ {
+ Base *base = MEM_callocN(sizeof(Base), "Object Base");
+ base->object = ob;
+ return base;
+ }
+
+ /********************************* View Layer ********************************/
+
+
/* RenderLayer */
/* Returns the default view layer to view in workspaces if there is
@@@ -294,54 -284,43 +293,56 @@@ Object *BKE_view_layer_camera_find(View
/**
* Find the ViewLayer a LayerCollection belongs to
*/
- ViewLayer *BKE_view_layer_find_from_collection(const ID *owner_id, LayerCollection *lc)
+ ViewLayer *BKE_view_layer_find_from_collection(const Scene *scene, LayerCollection *lc)
{
- switch (GS(owner_id->name)) {
- case ID_GR:
- return ((Group *)owner_id)->view_layer;
- case ID_SCE:
- {
- Scene *scene = (Scene *)owner_id;
- for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
- if (find_scene_collection_in_scene_collections(&view_layer->layer_collections, lc)) {
- return view_layer;
- }
- }
- return NULL;
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ if (find_scene_collection_in_scene_collections(&view_layer->layer_collections, lc)) {
+ return view_layer;
}
- default:
- BLI_assert(!"ID doesn't support scene layers");
- return NULL;
}
+
+ return NULL;
}
+/**
+ * Return the view layer that owns the override set
+ */
- ViewLayer *BKE_view_layer_find_from_override_set(const ID *owner_id, OverrideSet *override_set)
++ViewLayer *BKE_view_layer_find_from_override_set(const Scene *scene, OverrideSet *override_set)
+{
- switch (GS(owner_id->name)) {
- case ID_SCE:
- {
- Scene *scene = (Scene *)owner_id;
- for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
- if (BLI_findindex(&view_layer->override_sets, override_set) != -1) {
- return view_layer;
- }
- }
- return NULL;
++ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
++ if (BLI_findindex(&view_layer->override_sets, override_set) != -1) {
++ return view_layer;
+ }
- default:
- BLI_assert(!"ID doesn't support override sets");
- return NULL;
+ }
++ return NULL;
+}
+
/* Base */
+ static void view_layer_bases_hash_create(ViewLayer *view_layer)
+ {
+ static ThreadMutex hash_lock = BLI_MUTEX_INITIALIZER;
+
+ if (!view_layer->object_bases_hash) {
+ BLI_mutex_lock(&hash_lock);
+
+ view_layer->object_bases_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ BLI_ghash_insert(view_layer->object_bases_hash, base->object, base);
+ }
+
+ BLI_mutex_unlock(&hash_lock);
+ }
+ }
+
Base *BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
{
- return BLI_findptr(&view_layer->object_bases, ob, offsetof(Base, object));
+ if (!view_layer->object_bases_hash) {
+ view_layer_bases_hash_create(view_layer);
+ }
+
+ return BLI_ghash_lookup(view_layer->object_bases_hash, ob);
}
void BKE_view_layer_base_deselect_all(ViewLayer *view_layer)
@@@ -522,85 -392,28 +414,38 @@@ void BKE_view_layer_copy_data
}
}
+ BLI_duplicatelist(&view_layer_dst->override_sets, &view_layer_src->override_sets);
+ OverrideSet *override_set_dst, *override_set_src;
+ for (override_set_dst = view_layer_dst->override_sets.first,
+ override_set_src = view_layer_src->override_sets.first;
+ override_set_dst != NULL;
+ override_set_dst = override_set_dst->next, override_set_src = override_set_src->next)
+ {
+ override_set_copy_data(override_set_dst, override_set_src);
+ }
+
- view_layer_dst->object_bases_array = NULL;
- }
-
- /**
- * Find and return the ListBase of LayerCollection that has \a lc_child as one of its directly
- * nested LayerCollection.
- *
- * \param lb_parent Initial ListBase of LayerCollection to look into recursively
- * usually the view layer's collection list
- */
- static ListBase *find_layer_collection_parent_list_base(ListBase *lb_parent, const LayerCollection *lc_child)
- {
- for (LayerCollection *lc_nested = lb_parent->first; lc_nested; lc_nested = lc_nested->next) {
- if (lc_nested == lc_child) {
- return lb_parent;
- }
+ layer_collections_copy_data(&view_layer_dst->layer_collections, &v
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list