[Bf-blender-cvs] [bd14352a01] render-layers: object/base iterator refactor + add FOREACH_VISIBLE_BASE
Dalai Felinto
noreply at git.blender.org
Thu Jan 19 18:28:19 CET 2017
Commit: bd14352a01e5573d13e089b5957e8cd60a07c0e7
Author: Dalai Felinto
Date: Thu Jan 19 12:07:12 2017 +0100
Branches: render-layers
https://developer.blender.org/rBbd14352a01e5573d13e089b5957e8cd60a07c0e7
object/base iterator refactor + add FOREACH_VISIBLE_BASE
===================================================================
M source/blender/blenkernel/BKE_layer.h
M source/blender/blenkernel/intern/layer.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 9ae9cdb3e3..b92624e0f0 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -101,6 +101,10 @@ void BKE_visible_objects_Iterator_begin(Iterator *iter, void *data_in);
void BKE_visible_objects_Iterator_next(Iterator *iter);
void BKE_visible_objects_Iterator_end(Iterator *iter);
+void BKE_visible_bases_Iterator_begin(Iterator *iter, void *data_in);
+void BKE_visible_bases_Iterator_next(Iterator *iter);
+void BKE_visible_bases_Iterator_end(Iterator *iter);
+
#define FOREACH_SELECTED_OBJECT(sl, _ob) \
ITER_BEGIN(BKE_selected_objects_Iterator_begin, \
BKE_selected_objects_Iterator_next, \
@@ -119,6 +123,17 @@ void BKE_visible_objects_Iterator_end(Iterator *iter);
#define FOREACH_VISIBLE_OBJECT_END \
ITER_END
+
+#define FOREACH_VISIBLE_BASE(sl, _object_base) \
+ ITER_BEGIN(BKE_visible_bases_Iterator_begin, \
+ BKE_visible_bases_Iterator_next, \
+ BKE_visible_bases_Iterator_end, \
+ sl, _object_base)
+
+#define FOREACH_VISIBLE_BASE_END \
+ ITER_END
+
+
#define FOREACH_OBJECT(sl, _ob) \
{ \
ObjectBase *base; \
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index d93d7526c6..40cba30437 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -47,6 +47,7 @@
static void layer_collection_free(SceneLayer *sl, LayerCollection *lc);
static LayerCollection *layer_collection_add(SceneLayer *sl, ListBase *lb, SceneCollection *sc);
static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc);
+static void object_bases_Iterator_next(Iterator *iter, const int flag);
/* RenderLayer */
@@ -570,7 +571,7 @@ void BKE_collection_override_datablock_add(LayerCollection *UNUSED(lc), const ch
/* ---------------------------------------------------------------------- */
/* Iterators */
-void BKE_selected_objects_Iterator_begin(Iterator *iter, void *data_in)
+static void object_bases_Iterator_begin(Iterator *iter, void *data_in, const int flag)
{
SceneLayer *sl = data_in;
ObjectBase *base = sl->object_bases.first;
@@ -584,76 +585,90 @@ void BKE_selected_objects_Iterator_begin(Iterator *iter, void *data_in)
iter->valid = true;
iter->data = base;
- if ((base->flag & BASE_SELECTED) == 0) {
- BKE_selected_objects_Iterator_next(iter);
+ if ((base->flag & flag) == 0) {
+ object_bases_Iterator_next(iter, flag);
}
else {
- iter->current = base->object;
+ iter->current = base;
}
}
-void BKE_selected_objects_Iterator_next(Iterator *iter)
+static void object_bases_Iterator_next(Iterator *iter, const int flag)
{
ObjectBase *base = ((ObjectBase *)iter->data)->next;
while (base) {
- if ((base->flag & BASE_SELECTED) != 0) {
- iter->current = base->object;
+ if ((base->flag & flag) != 0) {
+ iter->current = base;
iter->data = base;
return;
}
base = base->next;
- };
+ }
iter->current = NULL;
iter->valid = false;
}
-void BKE_selected_objects_Iterator_end(Iterator *UNUSED(iter))
+static void objects_Iterator_begin(Iterator *iter, void *data_in, const int flag)
{
- /* do nothing */
+ object_bases_Iterator_begin(iter, data_in, flag);
+
+ if (iter->valid) {
+ iter->current = ((ObjectBase *)iter->current)->object;
+ }
}
-void BKE_visible_objects_Iterator_begin(Iterator *iter, void *data_in)
+static void objects_Iterator_next(Iterator *iter, const int flag)
{
- SceneLayer *sl = data_in;
- ObjectBase *base = sl->object_bases.first;
+ object_bases_Iterator_next(iter, flag);
- /* when there are no objects */
- if (base == NULL) {
- iter->valid = false;
- return;
+ if (iter->valid) {
+ iter->current = ((ObjectBase *)iter->current)->object;
}
+}
- iter->valid = true;
- iter->data = base;
+void BKE_selected_objects_Iterator_begin(Iterator *iter, void *data_in)
+{
+ objects_Iterator_begin(iter, data_in, BASE_SELECTED);
+}
- if ((base->flag & BASE_VISIBLED) == 0) {
- BKE_selected_objects_Iterator_next(iter);
- }
- else {
- iter->current = base->object;
- }
+void BKE_selected_objects_Iterator_next(Iterator *iter)
+{
+ object_bases_Iterator_next(iter, BASE_SELECTED);
}
-void BKE_visible_objects_Iterator_next(Iterator *iter)
+void BKE_selected_objects_Iterator_end(Iterator *UNUSED(iter))
{
- ObjectBase *base = ((ObjectBase *)iter->data)->next;
+ /* do nothing */
+}
- while (base) {
- if ((base->flag & BASE_VISIBLED) != 0) {
- iter->current = base->object;
- iter->data = base;
- return;
- }
- base = base->next;
- };
+void BKE_visible_objects_Iterator_begin(Iterator *iter, void *data_in)
+{
+ objects_Iterator_begin(iter, data_in, BASE_VISIBLED);
+}
- iter->current = NULL;
- iter->valid = false;
+void BKE_visible_objects_Iterator_next(Iterator *iter)
+{
+ objects_Iterator_next(iter, BASE_VISIBLED);
}
void BKE_visible_objects_Iterator_end(Iterator *UNUSED(iter))
{
/* do nothing */
}
+
+void BKE_visible_bases_Iterator_begin(Iterator *iter, void *data_in)
+{
+ object_bases_Iterator_begin(iter, data_in, BASE_VISIBLED);
+}
+
+void BKE_visible_bases_Iterator_next(Iterator *iter)
+{
+ object_bases_Iterator_next(iter, BASE_VISIBLED);
+}
+
+void BKE_visible_bases_Iterator_end(Iterator *UNUSED(iter))
+{
+ /* do nothing */
+}
More information about the Bf-blender-cvs
mailing list