Blender V4.3
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/foreach.h"
10#include "util/progress.h"
11
13
15{
16 NodeType *type = NodeType::add("procedural_base", NULL);
17 return type;
18}
19
20Procedural::Procedural(const NodeType *type) : Node(type) {}
21
23
25{
26 need_update_ = true;
27}
28
30
32{
33 if (!need_update()) {
34 return;
35 }
36
37 progress.set_status("Updating Procedurals");
38
39 scoped_callback_timer timer([scene](double time) {
40 if (scene->update_stats) {
41 scene->update_stats->procedurals.times.add_entry({"update", time});
42 }
43 });
44
45 foreach (Procedural *procedural, scene->procedurals) {
46 if (progress.get_cancel()) {
47 return;
48 }
49
50 procedural->generate(scene, progress);
51 }
52
53 if (progress.get_cancel()) {
54 return;
55 }
56
57 need_update_ = false;
58}
59
61{
62 need_update_ = true;
63}
64
66{
67 return need_update_;
68}
69
bool need_update() const
void update(Scene *scene, Progress &progress)
virtual ~Procedural()
virtual void generate(Scene *scene, Progress &progress)=0
NODE_ABSTRACT_DECLARE Procedural(const NodeType *type)
void set_status(const string &status_, const string &substatus_="")
Definition progress.h:263
#define CCL_NAMESPACE_END
#define NULL
#define NODE_ABSTRACT_DEFINE(structname)
Definition node_type.h:164
static NodeType * add(const char *name, CreateFunc create, Type type=NONE, const NodeType *base=NULL)
wmTimer * timer