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:
Diffstat (limited to 'source/blender/depsgraph/DEG_depsgraph_query.h')
-rw-r--r--source/blender/depsgraph/DEG_depsgraph_query.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/source/blender/depsgraph/DEG_depsgraph_query.h b/source/blender/depsgraph/DEG_depsgraph_query.h
index ccd204a2083..674389ddd6c 100644
--- a/source/blender/depsgraph/DEG_depsgraph_query.h
+++ b/source/blender/depsgraph/DEG_depsgraph_query.h
@@ -33,9 +33,17 @@
#ifndef __DEG_DEPSGRAPH_QUERY_H__
#define __DEG_DEPSGRAPH_QUERY_H__
+#include "DEG_depsgraph.h"
+
struct ID;
+struct Base;
+struct BLI_Iterator;
struct Depsgraph;
+struct DupliObject;
+struct ListBase;
+struct Scene;
+struct SceneLayer;
#ifdef __cplusplus
extern "C" {
@@ -47,6 +55,76 @@ bool DEG_id_type_tagged(struct Main *bmain, short idtype);
/* Get additional evaluation flags for the given ID. */
short DEG_get_eval_flags_for_id(struct Depsgraph *graph, struct ID *id);
+/* Get scene the despgraph is created for. */
+struct Scene *DEG_get_scene(struct Depsgraph *graph);
+
+/* Get scene layer the despgraph is created for. */
+struct SceneLayer *DEG_get_scene_layer(struct Depsgraph *graph);
+
+/* Get the object as properly evaluated by depsgraph. */
+struct Object *DEG_get_object(struct Depsgraph *depsgraph, struct Object *ob);
+
+/* Get evaluated version of given ID datablock. */
+struct ID *DEG_get_evaluated_id(struct Depsgraph *depsgraph, struct ID *id);
+
+/* ************************ DAG iterators ********************* */
+
+enum {
+ DEG_OBJECT_ITER_FLAG_SET = (1 << 0),
+ DEG_OBJECT_ITER_FLAG_DUPLI = (1 << 1),
+};
+
+#define DEG_OBJECT_ITER_FLAG_ALL (DEG_OBJECT_ITER_FLAG_SET | DEG_OBJECT_ITER_FLAG_DUPLI)
+
+typedef struct DEGObjectsIteratorData {
+ struct Depsgraph *graph;
+ struct Scene *scene;
+ struct EvaluationContext eval_ctx;
+
+ /* TODO(sergey): Base should never be a thing coming FROM depsgraph. */
+ struct Base *base;
+ int base_flag;
+ int flag;
+
+ /* **** Iteration over dupli-list. *** */
+
+ /* Object which created the dupli-list. */
+ struct Object *dupli_parent;
+ /* List of duplicated objects. */
+ struct ListBase *dupli_list;
+ /* Next duplicated object to step into. */
+ struct DupliObject *dupli_object_next;
+ /* Corresponds to current object: current iterator object is evaluated from
+ * this duplicated object.
+ */
+ struct DupliObject *dupli_object_current;
+ /* Temporary storage to report fully populated DNA to the render engine or
+ * other users of the iterator.
+ */
+ struct Object temp_dupli_object;
+} DEGObjectsIteratorData;
+
+void DEG_objects_iterator_begin(struct BLI_Iterator *iter, DEGObjectsIteratorData *data);
+void DEG_objects_iterator_next(struct BLI_Iterator *iter);
+void DEG_objects_iterator_end(struct BLI_Iterator *iter);
+
+/* Temporary hacky solution waiting for cow depsgraph implementation. */
+#define DEG_OBJECT_ITER(graph_, instance_, flag_) \
+ { \
+ DEGObjectsIteratorData data_ = { \
+ .graph = (graph_), \
+ .flag = (flag_), \
+ }; \
+ \
+ ITER_BEGIN(DEG_objects_iterator_begin, \
+ DEG_objects_iterator_next, \
+ DEG_objects_iterator_end, \
+ &data_, Object *, instance_)
+
+#define DEG_OBJECT_ITER_END \
+ ITER_END \
+ }
+
#ifdef __cplusplus
} /* extern "C" */
#endif