Blender  V3.3
deg_builder_nodes_view_layer.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2013 Blender Foundation. All rights reserved. */
3 
11 
12 #include <cstdio>
13 #include <cstdlib>
14 
15 #include "MEM_guardedalloc.h"
16 
17 #include "BLI_blenlib.h"
18 #include "BLI_string.h"
19 #include "BLI_utildefines.h"
20 
21 #include "DNA_collection_types.h"
22 #include "DNA_freestyle_types.h"
23 #include "DNA_layer_types.h"
24 #include "DNA_linestyle_types.h"
25 #include "DNA_node_types.h"
26 #include "DNA_object_types.h"
27 #include "DNA_scene_types.h"
28 
29 #include "BKE_layer.h"
30 #include "BKE_main.h"
31 #include "BKE_node.h"
32 
33 #include "DEG_depsgraph.h"
34 #include "DEG_depsgraph_build.h"
35 
37 #include "intern/depsgraph.h"
38 #include "intern/depsgraph_type.h"
39 #include "intern/node/deg_node.h"
42 
43 namespace blender::deg {
44 
46 {
47  const int visibility_flag = (graph_->mode == DAG_EVAL_VIEWPORT) ? COLLECTION_HIDE_VIEWPORT :
49 
50  for (LayerCollection *lc = (LayerCollection *)lb->first; lc; lc = lc->next) {
51  if (lc->collection->flag & visibility_flag) {
52  continue;
53  }
54  if ((lc->flag & LAYER_COLLECTION_EXCLUDE) == 0) {
55  build_collection(lc, lc->collection);
56  }
57  build_layer_collections(&lc->layer_collections);
58  }
59 }
60 
62 {
63  if (fls->group != nullptr) {
64  build_collection(nullptr, fls->group);
65  }
66  if (fls->linestyle != nullptr) {
68  }
69 }
70 
72  ViewLayer *view_layer,
73  eDepsNode_LinkedState_Type linked_state)
74 {
75  /* NOTE: Pass view layer index of 0 since after scene CoW there is
76  * only one view layer in there. */
78  /* Scene ID block. */
80  id_node->linked_state = linked_state;
81  /* Time source. */
83  /* Setup currently building context. */
84  scene_ = scene;
85  view_layer_ = view_layer;
86  /* Get pointer to a CoW version of scene ID. */
87  Scene *scene_cow = get_cow_datablock(scene);
88  /* Scene objects. */
89  /* NOTE: Base is used for function bindings as-is, so need to pass CoW base,
90  * but object is expected to be an original one. Hence we go into some
91  * tricks here iterating over the view layer. */
92  int base_index = 0;
93  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
94  /* object itself */
95  if (!need_pull_base_into_graph(base)) {
96  continue;
97  }
98 
99  /* NOTE: We consider object visible even if it's currently
100  * restricted by the base/restriction flags. Otherwise its drivers
101  * will never be evaluated.
102  *
103  * TODO(sergey): Need to go more granular on visibility checks. */
104  build_object(base_index, base->object, linked_state, true);
105  base_index++;
106 
109  }
110  }
112  if (scene->camera != nullptr) {
114  }
115  /* Rigidbody. */
116  if (scene->rigidbody_world != nullptr) {
118  }
119  /* Scene's animation and drivers. */
120  if (scene->adt != nullptr) {
122  }
123  /* World. */
124  if (scene->world != nullptr) {
126  }
127  /* Cache file. */
128  LISTBASE_FOREACH (CacheFile *, cachefile, &bmain_->cachefiles) {
129  build_cachefile(cachefile);
130  }
131  /* Masks. */
133  build_mask(mask);
134  }
135  /* Movie clips. */
137  build_movieclip(clip);
138  }
139  /* Material override. */
140  if (view_layer->mat_override != nullptr) {
141  build_material(view_layer->mat_override);
142  }
143  /* Freestyle linesets. */
146  }
147  /* Sequencer. */
148  if (linked_state == DEG_ID_LINKED_DIRECTLY) {
151  }
152  /* Collections. */
156  [view_layer_index = view_layer_index_, scene_cow](::Depsgraph *depsgraph) {
157  BKE_layer_eval_view_layer_indexed(depsgraph, scene_cow, view_layer_index);
158  });
159  /* Parameters evaluation for scene relations mainly. */
162  /* Build all set scenes. */
163  if (scene->set != nullptr) {
164  ViewLayer *set_view_layer = BKE_view_layer_default_render(scene->set);
165  build_view_layer(scene->set, set_view_layer, DEG_ID_LINKED_VIA_SET);
166  }
167 }
168 
169 } // namespace blender::deg
struct ViewLayer * BKE_view_layer_default_render(const struct Scene *scene)
#define LISTBASE_FOREACH(type, var, list)
Definition: BLI_listbase.h:336
@ DAG_EVAL_VIEWPORT
Definition: DEG_depsgraph.h:45
Object groups, one object can be in many groups at once.
@ COLLECTION_HIDE_RENDER
@ COLLECTION_HIDE_VIEWPORT
@ LAYER_COLLECTION_EXCLUDE
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
virtual bool need_pull_base_into_graph(const Base *base)
Definition: deg_builder.cc:67
virtual bool is_object_visibility_animated(const Object *object)
Definition: deg_builder.cc:82
virtual void build_scene_parameters(Scene *scene)
virtual void build_scene_sequencer(Scene *scene)
virtual void build_world(World *world)
virtual void build_object(int base_index, Object *object, eDepsNode_LinkedState_Type linked_state, bool is_visible)
virtual void build_freestyle_linestyle(FreestyleLineStyle *linestyle)
virtual void build_cachefile(CacheFile *cache_file)
OperationNode * add_operation_node(ComponentNode *comp_node, OperationCode opcode, const DepsEvalOperationCb &op=nullptr, const char *name="", int name_tag=-1)
virtual void build_scene_audio(Scene *scene)
virtual void build_material(Material *ma)
virtual void build_collection(LayerCollection *from_layer_collection, Collection *collection)
virtual void build_rigidbody(Scene *scene)
virtual void build_freestyle_lineset(FreestyleLineSet *fls)
virtual void build_movieclip(MovieClip *clip)
virtual void build_layer_collections(ListBase *lb)
virtual void build_view_layer(Scene *scene, ViewLayer *view_layer, eDepsNode_LinkedState_Type linked_state)
virtual void build_scene_compositor(Scene *scene)
T * get_cow_datablock(const T *orig) const
const IDNode * id_node
Scene scene
const Depsgraph * depsgraph
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
Definition: math_float4.h:513
eDepsNode_LinkedState_Type
Definition: deg_node_id.h:23
@ DEG_ID_LINKED_INDIRECTLY
Definition: deg_node_id.h:25
@ DEG_ID_LINKED_VIA_SET
Definition: deg_node_id.h:27
@ DEG_ID_LINKED_DIRECTLY
Definition: deg_node_id.h:29
struct Collection * group
struct FreestyleLineStyle * linestyle
void * first
Definition: DNA_listBase.h:31
ListBase masks
Definition: BKE_main.h:200
ListBase movieclips
Definition: BKE_main.h:199
ListBase cachefiles
Definition: BKE_main.h:202
struct RigidBodyWorld * rigidbody_world
struct AnimData * adt
struct Object * camera
struct World * world
struct Scene * set
struct FreestyleConfig freestyle_config
ListBase layer_collections
ListBase object_bases
struct Material * mat_override
eEvaluationMode mode
Definition: depsgraph.h:130