Blender  V3.3
bake.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
4 #include "scene/bake.h"
5 #include "scene/integrator.h"
6 #include "scene/mesh.h"
7 #include "scene/object.h"
8 #include "scene/shader.h"
9 #include "scene/stats.h"
10 #include "session/buffers.h"
11 
12 #include "util/foreach.h"
13 
15 
17 {
18  need_update_ = true;
19 }
20 
22 {
23 }
24 
26 {
27  return !object_name.empty();
28 }
29 
30 void BakeManager::set(Scene *scene, const std::string &object_name_)
31 {
32  object_name = object_name_;
33 
34  /* create device and update scene */
37 
38  need_update_ = true;
39 }
40 
42  DeviceScene *dscene,
43  Scene *scene,
44  Progress & /* progress */)
45 {
46  if (!need_update())
47  return;
48 
49  KernelBake *kbake = &dscene->data.bake;
50  memset(kbake, 0, sizeof(*kbake));
51 
52  if (!object_name.empty()) {
53  scoped_callback_timer timer([scene](double time) {
54  if (scene->update_stats) {
55  scene->update_stats->bake.times.add_entry({"device_update", time});
56  }
57  });
58 
59  kbake->use = true;
60 
61  int object_index = 0;
62  foreach (Object *object, scene->objects) {
63  const Geometry *geom = object->get_geometry();
64  if (object->name == object_name && geom->geometry_type == Geometry::MESH) {
65  kbake->object_index = object_index;
66  kbake->tri_offset = geom->prim_offset;
67  break;
68  }
69 
70  object_index++;
71  }
72  }
73 
74  need_update_ = false;
75 }
76 
77 void BakeManager::device_free(Device * /*device*/, DeviceScene * /*dscene*/)
78 {
79 }
80 
82 {
83  need_update_ = true;
84 }
85 
87 {
88  return need_update_;
89 }
90 
~BakeManager()
Definition: bake.cpp:21
BakeManager()
Definition: bake.cpp:16
bool need_update() const
Definition: bake.cpp:86
void set(Scene *scene, const std::string &object_name)
Definition: bake.cpp:30
void device_free(Device *device, DeviceScene *dscene)
Definition: bake.cpp:77
bool get_baking() const
Definition: bake.cpp:25
void tag_update()
Definition: bake.cpp:81
void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
Definition: bake.cpp:41
KernelData data
Definition: scene.h:130
Type geometry_type
size_t prim_offset
void tag_update(Scene *scene, uint32_t flag)
Definition: integrator.cpp:291
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
double time
Scene scene
KernelBake bake
ustring name
Definition: graph/node.h:174
void tag_modified()
Definition: graph/node.cpp:809
Film * film
Definition: scene.h:208
vector< Object * > objects
Definition: scene.h:213
Integrator * integrator
Definition: scene.h:210
SceneUpdateStats * update_stats
Definition: scene.h:249