Blender V4.3
bake.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/bake.h"
6#include "scene/integrator.h"
7#include "scene/mesh.h"
8#include "scene/object.h"
9#include "scene/shader.h"
10#include "scene/stats.h"
11#include "session/buffers.h"
12
13#include "util/foreach.h"
14
16
18{
19 need_update_ = true;
20 use_camera_ = false;
21}
22
24
26{
27 return !object_name.empty();
28}
29
30void BakeManager::set(Scene *scene, const std::string &object_name_)
31{
32 object_name = object_name_;
33
34 /* create device and update scene */
35 scene->film->tag_modified();
36 scene->integrator->tag_update(scene, Integrator::UPDATE_ALL);
37
38 need_update_ = true;
39}
40
41void BakeManager::set_use_camera(const bool use_camera)
42{
43 if (use_camera_ != use_camera) {
44 use_camera_ = use_camera;
45 need_update_ = true;
46 }
47}
48
49void BakeManager::set_use_seed(const bool use_seed)
50{
51 use_seed_ = use_seed;
52}
53
55{
56 return use_seed_;
57}
58
60 DeviceScene *dscene,
61 Scene *scene,
62 Progress & /* progress */)
63{
64 if (!need_update()) {
65 return;
66 }
67
68 KernelBake *kbake = &dscene->data.bake;
69 memset(kbake, 0, sizeof(*kbake));
70
71 kbake->use_camera = use_camera_;
72
73 if (!object_name.empty()) {
74 scoped_callback_timer timer([scene](double time) {
75 if (scene->update_stats) {
76 scene->update_stats->bake.times.add_entry({"device_update", time});
77 }
78 });
79
80 kbake->use = true;
81
82 int object_index = 0;
83 foreach (Object *object, scene->objects) {
84 const Geometry *geom = object->get_geometry();
85 if (object->name == object_name && geom->geometry_type == Geometry::MESH) {
86 kbake->object_index = object_index;
87 kbake->tri_offset = geom->prim_offset;
88 break;
89 }
90
91 object_index++;
92 }
93 }
94
95 need_update_ = false;
96}
97
98void BakeManager::device_free(Device * /*device*/, DeviceScene * /*dscene*/) {}
99
101{
102 need_update_ = true;
103}
104
106{
107 return need_update_;
108}
109
void set_use_camera(bool use_camera)
Definition bake.cpp:41
~BakeManager()
Definition bake.cpp:23
BakeManager()
Definition bake.cpp:17
void set_use_seed(bool use_seed)
Definition bake.cpp:49
bool need_update() const
Definition bake.cpp:105
void set(Scene *scene, const std::string &object_name)
Definition bake.cpp:30
bool get_use_seed() const
Definition bake.cpp:54
void device_free(Device *device, DeviceScene *dscene)
Definition bake.cpp:98
bool get_baking() const
Definition bake.cpp:25
void tag_update()
Definition bake.cpp:100
void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
Definition bake.cpp:59
KernelData data
Definition devicescene.h:95
Type geometry_type
size_t prim_offset
#define CCL_NAMESPACE_END
wmTimer * timer