Blender V5.0
procedural.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "scene/procedural.h"
6#include "scene/scene.h"
7#include "scene/stats.h"
8
9#include "util/progress.h"
10
12
14{
15 NodeType *type = NodeType::add("procedural_base", nullptr);
16 return type;
17}
18
20
21Procedural::~Procedural() = default;
22
24{
25 need_update_ = true;
26}
27
29
31{
32 if (!need_update()) {
33 return;
34 }
35
36 progress.set_status("Updating Procedurals");
37
38 const scoped_callback_timer timer([scene](double time) {
39 if (scene->update_stats) {
40 scene->update_stats->procedurals.times.add_entry({"update", time});
41 }
42 });
43
44 for (Procedural *procedural : scene->procedurals) {
45 if (progress.get_cancel()) {
46 return;
47 }
48
49 procedural->generate(scene, progress);
50 }
51
52 if (progress.get_cancel()) {
53 return;
54 }
55
56 need_update_ = false;
57}
58
60{
61 need_update_ = true;
62}
63
65{
66 return need_update_;
67}
68
bool need_update() const
void update(Scene *scene, Progress &progress)
~Procedural() override
virtual void generate(Scene *scene, Progress &progress)=0
NODE_ABSTRACT_DECLARE Procedural(const NodeType *type)
bool get_cancel() const
Definition progress.h:77
void set_status(const string &status_, const string &substatus_="")
Definition progress.h:248
#define CCL_NAMESPACE_END
#define NODE_ABSTRACT_DEFINE(structname)
Definition node_type.h:175
static NodeType * add(const char *name, CreateFunc create, Type type=NONE, const NodeType *base=nullptr)
const NodeType * type
Definition graph/node.h:178
Node(const NodeType *type, ustring name=ustring())
unique_ptr_vector< Procedural > procedurals
Definition scene.h:142
unique_ptr< SceneUpdateStats > update_stats
Definition scene.h:175
wmTimer * timer