Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-06-05 15:41:42 +0300
committerJacques Lucke <jacques@blender.org>2020-06-05 15:41:42 +0300
commitf797a5406db435ea90c00a72c976fe4b023142f6 (patch)
tree0c5f50c53bb5a4506940b8d3ff3d8a00f56bbac8
parenta6cd77bad1c1266306dca4fd42d7856121b3dbc1 (diff)
Refactor: use new api for writing object, mesh and particlesettings
-rw-r--r--source/blender/blenloader/intern/writefile.c124
1 files changed, 65 insertions, 59 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 38ca23abc63..da350c6a480 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1445,28 +1445,30 @@ static void write_pointcaches(WriteData *wd, ListBase *ptcaches)
}
}
-static void write_particlesettings(WriteData *wd, ParticleSettings *part, const void *id_address)
+static void write_particlesettings(BlendWriter *writer,
+ ParticleSettings *part,
+ const void *id_address)
{
- if (part->id.us > 0 || wd->use_memfile) {
+ if (part->id.us > 0 || BLO_write_is_undo(writer)) {
/* write LibData */
- writestruct_at_address(wd, ID_PA, ParticleSettings, 1, id_address, part);
- write_iddata(wd, &part->id);
+ BLO_write_id_struct(writer, ParticleSettings, id_address, &part->id);
+ write_iddata(writer->wd, &part->id);
if (part->adt) {
- write_animdata(wd, part->adt);
+ write_animdata(writer->wd, part->adt);
}
- writestruct(wd, DATA, PartDeflect, 1, part->pd);
- writestruct(wd, DATA, PartDeflect, 1, part->pd2);
- writestruct(wd, DATA, EffectorWeights, 1, part->effector_weights);
+ BLO_write_struct(writer, PartDeflect, part->pd);
+ BLO_write_struct(writer, PartDeflect, part->pd2);
+ BLO_write_struct(writer, EffectorWeights, part->effector_weights);
if (part->clumpcurve) {
- write_curvemapping(wd, part->clumpcurve);
+ write_curvemapping(writer->wd, part->clumpcurve);
}
if (part->roughcurve) {
- write_curvemapping(wd, part->roughcurve);
+ write_curvemapping(writer->wd, part->roughcurve);
}
if (part->twistcurve) {
- write_curvemapping(wd, part->twistcurve);
+ write_curvemapping(writer->wd, part->twistcurve);
}
LISTBASE_FOREACH (ParticleDupliWeight *, dw, &part->instance_weights) {
@@ -1483,23 +1485,23 @@ static void write_particlesettings(WriteData *wd, ParticleSettings *part, const
FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
}
- writestruct(wd, DATA, ParticleDupliWeight, 1, dw);
+ BLO_write_struct(writer, ParticleDupliWeight, dw);
}
if (part->boids && part->phystype == PART_PHYS_BOIDS) {
- writestruct(wd, DATA, BoidSettings, 1, part->boids);
+ BLO_write_struct(writer, BoidSettings, part->boids);
LISTBASE_FOREACH (BoidState *, state, &part->boids->states) {
- write_boid_state(wd, state);
+ write_boid_state(writer->wd, state);
}
}
if (part->fluid && part->phystype == PART_PHYS_FLUID) {
- writestruct(wd, DATA, SPHFluidSettings, 1, part->fluid);
+ BLO_write_struct(writer, SPHFluidSettings, part->fluid);
}
for (int a = 0; a < MAX_MTEX; a++) {
if (part->mtex[a]) {
- writestruct(wd, DATA, MTex, 1, part->mtex[a]);
+ BLO_write_struct(writer, MTex, part->mtex[a]);
}
}
}
@@ -1954,24 +1956,23 @@ static void write_shaderfxs(WriteData *wd, ListBase *fxbase)
}
}
-static void write_object(WriteData *wd, Object *ob, const void *id_address)
+static void write_object(BlendWriter *writer, Object *ob, const void *id_address)
{
- if (ob->id.us > 0 || wd->use_memfile) {
+ if (ob->id.us > 0 || BLO_write_is_undo(writer)) {
/* Clean up, important in undo case to reduce false detection of changed datablocks. */
BKE_object_runtime_reset(ob);
/* write LibData */
- writestruct_at_address(wd, ID_OB, Object, 1, id_address, ob);
- write_iddata(wd, &ob->id);
+ BLO_write_id_struct(writer, Object, id_address, &ob->id);
+ write_iddata(writer->wd, &ob->id);
if (ob->adt) {
- write_animdata(wd, ob->adt);
+ write_animdata(writer->wd, ob->adt);
}
/* direct data */
- writedata(wd, DATA, sizeof(void *) * ob->totcol, ob->mat);
- writedata(wd, DATA, sizeof(char) * ob->totcol, ob->matbits);
- /* write_effects(wd, &ob->effect); */ /* not used anymore */
+ BLO_write_pointer_array(writer, ob->totcol, ob->mat);
+ BLO_write_raw(writer, sizeof(char) * ob->totcol, ob->matbits);
if (ob->type == OB_ARMATURE) {
bArmature *arm = ob->data;
@@ -1981,44 +1982,44 @@ static void write_object(WriteData *wd, Object *ob, const void *id_address)
}
}
- write_pose(wd, ob->pose);
- write_defgroups(wd, &ob->defbase);
- write_fmaps(wd, &ob->fmaps);
- write_constraints(wd, &ob->constraints);
- write_motionpath(wd, ob->mpath);
+ write_pose(writer->wd, ob->pose);
+ write_defgroups(writer->wd, &ob->defbase);
+ write_fmaps(writer->wd, &ob->fmaps);
+ write_constraints(writer->wd, &ob->constraints);
+ write_motionpath(writer->wd, ob->mpath);
- writestruct(wd, DATA, PartDeflect, 1, ob->pd);
+ BLO_write_struct(writer, PartDeflect, ob->pd);
if (ob->soft) {
/* Set deprecated pointers to prevent crashes of older Blenders */
ob->soft->pointcache = ob->soft->shared->pointcache;
ob->soft->ptcaches = ob->soft->shared->ptcaches;
- writestruct(wd, DATA, SoftBody, 1, ob->soft);
- writestruct(wd, DATA, SoftBody_Shared, 1, ob->soft->shared);
- write_pointcaches(wd, &(ob->soft->shared->ptcaches));
- writestruct(wd, DATA, EffectorWeights, 1, ob->soft->effector_weights);
+ BLO_write_struct(writer, SoftBody, ob->soft);
+ BLO_write_struct(writer, SoftBody_Shared, ob->soft->shared);
+ write_pointcaches(writer->wd, &(ob->soft->shared->ptcaches));
+ BLO_write_struct(writer, EffectorWeights, ob->soft->effector_weights);
}
if (ob->rigidbody_object) {
/* TODO: if any extra data is added to handle duplis, will need separate function then */
- writestruct(wd, DATA, RigidBodyOb, 1, ob->rigidbody_object);
+ BLO_write_struct(writer, RigidBodyOb, ob->rigidbody_object);
}
if (ob->rigidbody_constraint) {
- writestruct(wd, DATA, RigidBodyCon, 1, ob->rigidbody_constraint);
+ BLO_write_struct(writer, RigidBodyCon, ob->rigidbody_constraint);
}
if (ob->type == OB_EMPTY && ob->empty_drawtype == OB_EMPTY_IMAGE) {
- writestruct(wd, DATA, ImageUser, 1, ob->iuser);
+ BLO_write_struct(writer, ImageUser, ob->iuser);
}
- write_particlesystems(wd, &ob->particlesystem);
- write_modifiers(wd, &ob->modifiers);
- write_gpencil_modifiers(wd, &ob->greasepencil_modifiers);
- write_shaderfxs(wd, &ob->shader_fx);
+ write_particlesystems(writer->wd, &ob->particlesystem);
+ write_modifiers(writer->wd, &ob->modifiers);
+ write_gpencil_modifiers(writer->wd, &ob->greasepencil_modifiers);
+ write_shaderfxs(writer->wd, &ob->shader_fx);
- writelist(wd, DATA, LinkData, &ob->pc_ids);
- writelist(wd, DATA, LodLevel, &ob->lodlevels);
+ BLO_write_struct_list(writer, LinkData, &ob->pc_ids);
+ BLO_write_struct_list(writer, LodLevel, &ob->lodlevels);
- write_previews(wd, ob->preview);
+ write_previews(writer->wd, ob->preview);
}
}
@@ -2270,9 +2271,9 @@ static void write_customdata(WriteData *wd,
}
}
-static void write_mesh(WriteData *wd, Mesh *mesh, const void *id_address)
+static void write_mesh(BlendWriter *writer, Mesh *mesh, const void *id_address)
{
- if (mesh->id.us > 0 || wd->use_memfile) {
+ if (mesh->id.us > 0 || BLO_write_is_undo(writer)) {
/* cache only - don't write */
mesh->mface = NULL;
mesh->totface = 0;
@@ -2294,23 +2295,28 @@ static void write_mesh(WriteData *wd, Mesh *mesh, const void *id_address)
CustomData_file_write_prepare(&mesh->ldata, &llayers, llayers_buff, ARRAY_SIZE(llayers_buff));
CustomData_file_write_prepare(&mesh->pdata, &players, players_buff, ARRAY_SIZE(players_buff));
- writestruct_at_address(wd, ID_ME, Mesh, 1, id_address, mesh);
- write_iddata(wd, &mesh->id);
+ BLO_write_id_struct(writer, Mesh, id_address, &mesh->id);
+ write_iddata(writer->wd, &mesh->id);
/* direct data */
if (mesh->adt) {
- write_animdata(wd, mesh->adt);
+ write_animdata(writer->wd, mesh->adt);
}
- writedata(wd, DATA, sizeof(void *) * mesh->totcol, mesh->mat);
- writedata(wd, DATA, sizeof(MSelect) * mesh->totselect, mesh->mselect);
+ BLO_write_pointer_array(writer, mesh->totcol, mesh->mat);
+ BLO_write_raw(writer, sizeof(MSelect) * mesh->totselect, mesh->mselect);
- write_customdata(wd, &mesh->id, mesh->totvert, &mesh->vdata, vlayers, CD_MASK_MESH.vmask);
- write_customdata(wd, &mesh->id, mesh->totedge, &mesh->edata, elayers, CD_MASK_MESH.emask);
+ write_customdata(
+ writer->wd, &mesh->id, mesh->totvert, &mesh->vdata, vlayers, CD_MASK_MESH.vmask);
+ write_customdata(
+ writer->wd, &mesh->id, mesh->totedge, &mesh->edata, elayers, CD_MASK_MESH.emask);
/* fdata is really a dummy - written so slots align */
- write_customdata(wd, &mesh->id, mesh->totface, &mesh->fdata, flayers, CD_MASK_MESH.fmask);
- write_customdata(wd, &mesh->id, mesh->totloop, &mesh->ldata, llayers, CD_MASK_MESH.lmask);
- write_customdata(wd, &mesh->id, mesh->totpoly, &mesh->pdata, players, CD_MASK_MESH.pmask);
+ write_customdata(
+ writer->wd, &mesh->id, mesh->totface, &mesh->fdata, flayers, CD_MASK_MESH.fmask);
+ write_customdata(
+ writer->wd, &mesh->id, mesh->totloop, &mesh->ldata, llayers, CD_MASK_MESH.lmask);
+ write_customdata(
+ writer->wd, &mesh->id, mesh->totpoly, &mesh->pdata, players, CD_MASK_MESH.pmask);
/* free temporary data */
if (vlayers && vlayers != vlayers_buff) {
@@ -4272,7 +4278,7 @@ static bool write_file_handle(Main *mainvar,
write_action(&writer, (bAction *)id_buffer, id);
break;
case ID_OB:
- write_object(wd, (Object *)id_buffer, id);
+ write_object(&writer, (Object *)id_buffer, id);
break;
case ID_MA:
write_material(&writer, (Material *)id_buffer, id);
@@ -4281,10 +4287,10 @@ static bool write_file_handle(Main *mainvar,
write_texture(&writer, (Tex *)id_buffer, id);
break;
case ID_ME:
- write_mesh(wd, (Mesh *)id_buffer, id);
+ write_mesh(&writer, (Mesh *)id_buffer, id);
break;
case ID_PA:
- write_particlesettings(wd, (ParticleSettings *)id_buffer, id);
+ write_particlesettings(&writer, (ParticleSettings *)id_buffer, id);
break;
case ID_NT:
write_nodetree(&writer, (bNodeTree *)id_buffer, id);