62 if (
Mesh *mesh = geometry.get_mesh_for_write()) {
63 mesh->attributes_for_write().remove_anonymous();
64 mesh->runtime->bake_materials = materials_to_weak_references(
65 &mesh->mat, &mesh->totcol, data_block_map);
67 if (
Curves *curves = geometry.get_curves_for_write()) {
68 curves->geometry.wrap().attributes_for_write().remove_anonymous();
69 curves->geometry.runtime->bake_materials = materials_to_weak_references(
70 &curves->mat, &curves->totcol, data_block_map);
72 if (
GreasePencil *grease_pencil = geometry.get_grease_pencil_for_write()) {
73 for (GreasePencilDrawingBase *base : grease_pencil->drawings()) {
74 if (base->type != GP_DRAWING) {
77 greasepencil::Drawing &drawing = reinterpret_cast<GreasePencilDrawing *>(base)->wrap();
78 drawing.strokes_for_write().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);
84 if (
PointCloud *pointcloud = geometry.get_pointcloud_for_write()) {
85 pointcloud->attributes_for_write().remove_anonymous();
87 &pointcloud->mat, &pointcloud->totcol, data_block_map);
89 if (
Volume *volume = geometry.get_volume_for_write()) {
91 &volume->mat, &volume->totcol, data_block_map);
93 if (
bke::Instances *instances = geometry.get_instances_for_write()) {
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 *
>(
129void GeometryBakeItem::try_restore_data_blocks(
GeometrySet &main_geometry,
133 if (
Mesh *mesh = geometry.get_mesh_for_write()) {
135 &mesh->mat, &mesh->totcol, std::move(mesh->runtime->bake_materials), data_block_map);
137 if (
Curves *curves = geometry.get_curves_for_write()) {
138 restore_materials(&curves->mat,
140 std::move(curves->geometry.runtime->bake_materials),
143 if (
GreasePencil *grease_pencil = geometry.get_grease_pencil_for_write()) {
144 restore_materials(&grease_pencil->material_array,
145 &grease_pencil->material_array_num,
146 std::move(grease_pencil->runtime->bake_materials),
149 if (
PointCloud *pointcloud = geometry.get_pointcloud_for_write()) {
150 restore_materials(&pointcloud->mat,
152 std::move(pointcloud->runtime->bake_materials),
155 if (
Volume *volume = geometry.get_volume_for_write()) {
156 restore_materials(&volume->mat,
158 std::move(volume->runtime->bake_materials),