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;
62 mesh->attributes_for_write().remove_anonymous();
64 &
mesh->mat, &
mesh->totcol, data_block_map);
67 curves->geometry.wrap().attributes_for_write().remove_anonymous();
79 grease_pencil->attributes_for_write().remove_anonymous();
81 &grease_pencil->material_array, &grease_pencil->material_array_num, data_block_map);
84 pointcloud->attributes_for_write().remove_anonymous();
86 &pointcloud->mat, &pointcloud->totcol, data_block_map);
90 &volume->mat, &volume->totcol, data_block_map);
93 instances->attributes_for_write().remove_anonymous();
105 short *materials_num,
106 std::unique_ptr<BakeMaterialsList> materials_list,
109 if (!materials_list) {
113 *materials_num = materials_list->size();
115 if (!data_block_map) {
119 for (
const int i : materials_list->index_range()) {
120 const std::optional<BakeDataBlockID> &data_block_id = (*materials_list)[
i];
122 (*materials)[
i] =
reinterpret_cast<Material *
>(
134 &
mesh->mat, &
mesh->totcol, std::move(
mesh->runtime->bake_materials), data_block_map);
139 std::move(
curves->geometry.runtime->bake_materials),
144 &grease_pencil->material_array_num,
145 std::move(grease_pencil->runtime->bake_materials),
151 std::move(pointcloud->runtime->bake_materials),
157 std::move(volume->runtime->bake_materials),
164VolumeGridBakeItem::VolumeGridBakeItem(std::unique_ptr<GVolumeGrid> grid) : grid(std::move(grid))
168VolumeGridBakeItem::~VolumeGridBakeItem() =
default;
170void VolumeGridBakeItem::count_memory(
MemoryCounter &memory)
const
173 grid->get().count_memory(memory);
187 type_.destruct(value_);
195 memory.
add(value_.size());
202 this->
items_by_id.add_new(item.key, item.value.get());
208 for (
const std::unique_ptr<BakeItem> &item :
items_by_id.values()) {
210 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)
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