23using namespace io::serialize;
36 if (*materials_num == 0) {
39 auto materials_list = std::make_unique<BakeMaterialsList>();
40 materials_list->resize(*materials_num);
41 for (
const int i : materials_list->index_range()) {
42 Material *material = (*materials)[i];
54 return materials_list;
63 mesh->attributes_for_write().remove_anonymous();
65 &
mesh->mat, &
mesh->totcol, data_block_map);
68 curves->geometry.wrap().attributes_for_write().remove_anonymous();
80 grease_pencil->attributes_for_write().remove_anonymous();
82 &grease_pencil->material_array, &grease_pencil->material_array_num, data_block_map);
85 pointcloud->attributes_for_write().remove_anonymous();
87 &pointcloud->mat, &pointcloud->totcol, data_block_map);
91 &volume->mat, &volume->totcol, data_block_map);
94 instances->attributes_for_write().remove_anonymous();
106 short *materials_num,
107 std::unique_ptr<BakeMaterialsList> materials_list,
110 if (!materials_list) {
114 *materials_num = materials_list->size();
115 *materials = MEM_cnew_array<Material *>(materials_list->size(), __func__);
116 if (!data_block_map) {
120 for (
const int i : materials_list->index_range()) {
121 const std::optional<BakeDataBlockID> &data_block_id = (*materials_list)[i];
123 (*materials)[i] =
reinterpret_cast<Material *
>(
135 &
mesh->mat, &
mesh->totcol, std::move(
mesh->runtime->bake_materials), data_block_map);
140 std::move(
curves->geometry.runtime->bake_materials),
145 &grease_pencil->material_array_num,
146 std::move(grease_pencil->runtime->bake_materials),
152 std::move(pointcloud->runtime->bake_materials),
158 std::move(volume->runtime->bake_materials),
165VolumeGridBakeItem::VolumeGridBakeItem(std::unique_ptr<GVolumeGrid> grid) : grid(std::move(grid))
169VolumeGridBakeItem::~VolumeGridBakeItem() =
default;
171void VolumeGridBakeItem::count_memory(
MemoryCounter &memory)
const
174 grid->get().count_memory(memory);
188 type_.destruct(value_);
196 memory.
add(value_.size());
203 this->
items_by_id.add_new(item.key, item.value.get());
209 for (
const std::unique_ptr<BakeItem> &item :
items_by_id.values()) {
211 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(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_mallocN_aligned(size_t len, size_t alignment, const char *str)
void MEM_freeN(void *vmemh)
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)
float wrap(float value, float max, float min)
void ensure_owns_all_data()
void modify_geometry_sets(ForeachSubGeometryCallback callback)
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