Blender V4.3
deg_builder_nodes_view_layer.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2013 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
12
13#include <cstdio>
14#include <cstdlib>
15
16#include "MEM_guardedalloc.h"
17
18#include "BLI_blenlib.h"
19#include "BLI_string.h"
20#include "BLI_utildefines.h"
21
23#include "DNA_freestyle_types.h"
24#include "DNA_layer_types.h"
25#include "DNA_linestyle_types.h"
26#include "DNA_node_types.h"
27#include "DNA_object_types.h"
28#include "DNA_scene_types.h"
29
30#include "BKE_layer.hh"
31#include "BKE_main.hh"
32#include "BKE_node.hh"
33
34#include "DEG_depsgraph.hh"
36
38#include "intern/depsgraph.hh"
43
44namespace blender::deg {
45
47{
48 const int visibility_flag = (graph_->mode == DAG_EVAL_VIEWPORT) ? COLLECTION_HIDE_VIEWPORT :
50
52 if (lc->collection->flag & visibility_flag) {
53 continue;
54 }
55 if ((lc->flag & LAYER_COLLECTION_EXCLUDE) == 0) {
56 build_collection(lc, lc->collection);
57 }
58 build_layer_collections(&lc->layer_collections);
59 }
60}
61
63{
64 if (fls->group != nullptr) {
65 build_collection(nullptr, fls->group);
66 }
67 if (fls->linestyle != nullptr) {
69 }
70}
71
73 ViewLayer *view_layer,
74 eDepsNode_LinkedState_Type linked_state)
75{
76 /* NOTE: Pass view layer index of 0 since after scene evaluated copy there is
77 * only one view layer in there. */
79 /* Scene ID block. */
80 IDNode *id_node = add_id_node(&scene->id);
81 id_node->linked_state = linked_state;
82
84
85 /* Time source. */
87 /* Setup currently building context. */
88 scene_ = scene;
89 view_layer_ = view_layer;
90 /* Get pointer to an evaluated version of scene ID. */
91 Scene *scene_cow = get_cow_datablock(scene);
92 /* Scene objects. */
93 /* NOTE: Base is used for function bindings as-is, so need to pass evaluated base,
94 * but object is expected to be an original one. Hence we go into some
95 * tricks here iterating over the view layer. */
96 int base_index = 0;
97 BKE_view_layer_synced_ensure(scene, view_layer);
99 /* object itself */
100 if (!need_pull_base_into_graph(base)) {
101 continue;
102 }
103
104 /* NOTE: We consider object visible even if it's currently
105 * restricted by the base/restriction flags. Otherwise its drivers
106 * will never be evaluated.
107 *
108 * TODO(sergey): Need to go more granular on visibility checks. */
109 build_object(base_index, base->object, linked_state, true);
110 base_index++;
111
114 }
115 }
117 build_scene_camera(scene);
118 /* Rigidbody. */
119 if (scene->rigidbody_world != nullptr) {
120 build_rigidbody(scene);
121 }
122 /* Scene's animation and drivers. */
123 if (scene->adt != nullptr) {
124 build_animdata(&scene->id);
125 }
126 /* World. */
127 if (scene->world != nullptr) {
128 build_world(scene->world);
129 }
130 /* Cache file. */
131 LISTBASE_FOREACH (CacheFile *, cachefile, &bmain_->cachefiles) {
132 build_cachefile(cachefile);
133 }
134 /* Masks. */
135 LISTBASE_FOREACH (Mask *, mask, &bmain_->masks) {
136 build_mask(mask);
137 }
138 /* Movie clips. */
140 build_movieclip(clip);
141 }
142 /* Material override. */
143 if (view_layer->mat_override != nullptr) {
144 build_material(view_layer->mat_override);
145 }
146 /* World override */
147 if (view_layer->world_override != nullptr) {
148 build_world(view_layer->world_override);
149 }
150 /* Freestyle linesets. */
153 }
154 /* Sequencer. */
155 if (linked_state == DEG_ID_LINKED_DIRECTLY) {
156 build_scene_audio(scene);
158 }
159 /* Collections. */
160 add_operation_node(&scene->id,
163 [view_layer_index = view_layer_index_, scene_cow](::Depsgraph *depsgraph) {
164 BKE_layer_eval_view_layer_indexed(depsgraph, scene_cow, view_layer_index);
165 });
166 /* Parameters evaluation for scene relations mainly. */
169 /* Build all set scenes. */
170 if (scene->set != nullptr) {
171 ViewLayer *set_view_layer = BKE_view_layer_default_render(scene->set);
172 build_view_layer(scene->set, set_view_layer, DEG_ID_LINKED_VIA_SET);
173 }
174}
175
176} // namespace blender::deg
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
ViewLayer * BKE_view_layer_default_render(const Scene *scene)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
#define LISTBASE_FOREACH(type, var, list)
@ DAG_EVAL_VIEWPORT
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)
virtual bool is_object_visibility_animated(const Object *object)
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_camera(Scene *scene)
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)
T * get_cow_datablock(const T *orig) const
virtual void build_view_layer(Scene *scene, ViewLayer *view_layer, eDepsNode_LinkedState_Type linked_state)
virtual void build_scene_compositor(Scene *scene)
const IDNode * id_node
const Depsgraph * depsgraph
struct Collection * group
struct FreestyleLineStyle * linestyle
ListBase masks
Definition BKE_main.hh:243
ListBase movieclips
Definition BKE_main.hh:242
ListBase cachefiles
Definition BKE_main.hh:245
struct FreestyleConfig freestyle_config
ListBase layer_collections
struct World * world_override
struct Material * mat_override
eEvaluationMode mode
Definition depsgraph.hh:136