22using namespace io::serialize;
35 if (*materials_num == 0) {
38 auto materials_list = std::make_unique<BakeMaterialsList>();
39 materials_list->resize(*materials_num);
40 for (
const int i : materials_list->index_range()) {
53 return materials_list;
60 mesh->attributes_for_write().remove_anonymous();
62 &
mesh->mat, &
mesh->totcol, data_block_map);
65 curves->geometry.wrap().attributes_for_write().remove_anonymous();
77 grease_pencil->attributes_for_write().remove_anonymous();
79 &grease_pencil->material_array, &grease_pencil->material_array_num, data_block_map);
82 pointcloud->attributes_for_write().remove_anonymous();
84 &pointcloud->mat, &pointcloud->totcol, data_block_map);
88 &volume->mat, &volume->totcol, data_block_map);
91 instances->attributes_for_write().remove_anonymous();
92 instances->ensure_geometry_instances();
113 short *materials_num,
114 std::unique_ptr<BakeMaterialsList> materials_list,
117 if (!materials_list) {
121 *materials_num = materials_list->size();
123 if (!data_block_map) {
127 for (
const int i : materials_list->index_range()) {
128 const std::optional<BakeDataBlockID> &data_block_id = (*materials_list)[
i];
130 (*materials)[
i] =
reinterpret_cast<Material *
>(
140 &
mesh->mat, &
mesh->totcol, std::move(
mesh->runtime->bake_materials), data_block_map);
145 std::move(
curves->geometry.runtime->bake_materials),
150 &grease_pencil->material_array_num,
151 std::move(grease_pencil->runtime->bake_materials),
157 std::move(pointcloud->runtime->bake_materials),
162 &volume->mat, &volume->totcol, std::move(volume->runtime->bake_materials), data_block_map);
180VolumeGridBakeItem::VolumeGridBakeItem(std::unique_ptr<GVolumeGrid> grid) : grid(std::move(grid))
184VolumeGridBakeItem::~VolumeGridBakeItem() =
default;
186void VolumeGridBakeItem::count_memory(
MemoryCounter &memory)
const
189 grid->get().count_memory(memory);
203 type_.destruct(value_);
211 memory.
add(value_.size());
218 this->
items_by_id.add_new(item.key, item.value.get());
224 for (
const std::unique_ptr<BakeItem> &item :
items_by_id.values()) {
226 item->count_memory(memory);
Low-level operations for curves.
Low-level operations for grease pencil.
General operations for point clouds.
MutableAttributeAccessor attributes_for_write()
virtual void count_memory(MemoryCounter &memory) const
static void prepare_geometry_for_bake(GeometrySet &geometry, BakeDataBlockMap *data_block_map)
GeometryBakeItem(GeometrySet geometry)
void count_memory(MemoryCounter &memory) const override
static void try_restore_data_blocks(GeometrySet &geometry, BakeDataBlockMap *data_block_map)
const CPPType & type() const
const void * value() const
~PrimitiveBakeItem() override
PrimitiveBakeItem(const CPPType &type, const void *value)
void count_memory(MemoryCounter &memory) const override
StringRefNull value() const
StringBakeItem(std::string value)
bke::CurvesGeometry & strokes_for_write()
void add(const int64_t bytes)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_mallocN_aligned(size_t len, size_t alignment, const char *str)
void MEM_freeN(void *vmemh)
static void restore_data_blocks_recursive(GeometrySet &geometry, BakeDataBlockMap *data_block_map)
std::shared_ptr< DictionaryValue > DictionaryValuePtr
static std::unique_ptr< BakeMaterialsList > materials_to_weak_references(Material ***materials, short *materials_num, BakeDataBlockMap *data_block_map)
static void restore_materials(Material ***materials, short *materials_num, std::unique_ptr< BakeMaterialsList > materials_list, BakeDataBlockMap *data_block_map)
static void prepare_geometry_for_bake_recursive(GeometrySet &geometry, BakeDataBlockMap *data_block_map)
float wrap(float value, float max, float min)
void ensure_owns_all_data()
virtual void try_add(ID &id)=0
virtual ID * lookup_or_remember_missing(const BakeDataBlockID &key)=0
Map< int, const BakeItem * > items_by_id
Map< int, std::unique_ptr< BakeItem > > items_by_id
void count_memory(MemoryCounter &memory) const