Blender V5.0
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
14
16{
17 return use_baking_;
18}
19
20void BakeManager::set_baking(Scene *scene, const bool use)
21{
22 if (use_baking_ == use) {
23 return;
24 }
25
26 use_baking_ = use;
27
28 /* create device and update scene */
29 scene->film->tag_modified();
31
32 need_update_ = true;
33}
34
35void BakeManager::set_use_camera(const bool use_camera)
36{
37 if (use_camera_ != use_camera) {
38 use_camera_ = use_camera;
39 need_update_ = true;
40 }
41}
42
43void BakeManager::set_use_seed(const bool use_seed)
44{
45 use_seed_ = use_seed;
46}
47
49{
50 return use_seed_;
51}
52
54 DeviceScene *dscene,
55 Scene *scene,
56 Progress & /* progress */)
57{
58 if (!need_update()) {
59 return;
60 }
61
62 KernelBake *kbake = &dscene->data.bake;
63 memset(kbake, 0, sizeof(*kbake));
64
65 kbake->use_camera = use_camera_;
66
67 if (use_baking_) {
68 const scoped_callback_timer timer([scene](double time) {
69 if (scene->update_stats) {
70 scene->update_stats->bake.times.add_entry({"device_update", time});
71 }
72 });
73
74 kbake->use = true;
75
76 int object_index = 0;
77 for (Object *object : scene->objects) {
78 const Geometry *geom = object->get_geometry();
79 if (object->get_is_bake_target() && geom->is_mesh()) {
80 kbake->object_index = object_index;
81 kbake->tri_offset = geom->prim_offset;
82 break;
83 }
84
85 object_index++;
86 }
87 }
88
89 need_update_ = false;
90}
91
92void BakeManager::device_free(Device * /*device*/, DeviceScene * /*dscene*/) {}
93
95{
96 need_update_ = true;
97}
98
100{
101 return need_update_;
102}
103
void set_use_camera(bool use_camera)
Definition bake.cpp:35
void set_use_seed(bool use_seed)
Definition bake.cpp:43
bool need_update() const
Definition bake.cpp:99
void set_baking(Scene *scene, const bool use)
Definition bake.cpp:20
bool get_use_seed() const
Definition bake.cpp:48
bool get_baking() const
Definition bake.cpp:15
void device_free(Device *device, DeviceScene *dscene)
Definition bake.cpp:92
void tag_update()
Definition bake.cpp:94
void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
Definition bake.cpp:53
KernelData data
Definition devicescene.h:94
size_t prim_offset
bool is_mesh() const
void tag_update(Scene *scene, const uint32_t flag)
#define CCL_NAMESPACE_END
void tag_modified()
Film * film
Definition scene.h:128
unique_ptr< SceneUpdateStats > update_stats
Definition scene.h:175
unique_ptr_vector< Object > objects
Definition scene.h:141
Integrator * integrator
Definition scene.h:130
wmTimer * timer