[Bf-blender-cvs] [98b868c399] id_override_static: Make write code theorically fully compatible with static override.
Bastien Montagne
noreply at git.blender.org
Tue Feb 7 20:18:18 CET 2017
Commit: 98b868c399dd02e6b7ebcee1bb1c2f7ecb212ff8
Author: Bastien Montagne
Date: Mon Feb 6 21:39:22 2017 +0100
Branches: id_override_static
https://developer.blender.org/rB98b868c399dd02e6b7ebcee1bb1c2f7ecb212ff8
Make write code theorically fully compatible with static override.
Readfile.c already was, since it's more generic code there (ID level).
===================================================================
M source/blender/blenloader/intern/writefile.c
===================================================================
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index ed6b119b4a..cdacb64bbf 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -821,6 +821,8 @@ static void write_actions(WriteData *wd, ListBase *idbase)
{
for (bAction *act = idbase->first; act; act = act->id.next) {
if (act->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && act->id.override && BKE_override_operations_store_start(&act->id);
+
writestruct(wd, ID_AC, bAction, 1, act);
write_iddata(wd, &act->id);
@@ -833,6 +835,10 @@ static void write_actions(WriteData *wd, ListBase *idbase)
for (TimeMarker *marker = act->markers.first; marker; marker = marker->next) {
writestruct(wd, DATA, TimeMarker, 1, marker);
}
+
+ if (do_override) {
+ BKE_override_operations_store_end(&act->id);
+ }
}
}
@@ -1298,6 +1304,8 @@ static void write_particlesettings(WriteData *wd, ListBase *idbase)
{
for (ParticleSettings *part = idbase->first; part; part = part->id.next) {
if (part->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && part->id.override && BKE_override_operations_store_start(&part->id);
+
/* write LibData */
writestruct(wd, ID_PA, ParticleSettings, 1, part);
write_iddata(wd, &part->id);
@@ -1345,6 +1353,10 @@ static void write_particlesettings(WriteData *wd, ListBase *idbase)
writestruct(wd, DATA, MTex, 1, part->mtex[a]);
}
}
+
+ if (do_override) {
+ BKE_override_operations_store_end(&part->id);
+ }
}
}
}
@@ -1918,6 +1930,8 @@ static void write_vfonts(WriteData *wd, ListBase *idbase)
{
for (VFont *vf = idbase->first; vf; vf = vf->id.next) {
if (vf->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && vf->id.override && BKE_override_operations_store_start(&vf->id);
+
/* write LibData */
writestruct(wd, ID_VF, VFont, 1, vf);
write_iddata(wd, &vf->id);
@@ -1928,6 +1942,10 @@ static void write_vfonts(WriteData *wd, ListBase *idbase)
writestruct(wd, DATA, PackedFile, 1, pf);
writedata(wd, DATA, pf->size, pf->data);
}
+
+ if (do_override) {
+ BKE_override_operations_store_end(&vf->id);
+ }
}
}
@@ -1939,6 +1957,8 @@ static void write_keys(WriteData *wd, ListBase *idbase)
{
for (Key *key = idbase->first; key; key = key->id.next) {
if (key->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && key->id.override && BKE_override_operations_store_start(&key->id);
+
/* write LibData */
writestruct(wd, ID_KE, Key, 1, key);
write_iddata(wd, &key->id);
@@ -1954,6 +1974,10 @@ static void write_keys(WriteData *wd, ListBase *idbase)
writedata(wd, DATA, kb->totelem * key->elemsize, kb->data);
}
}
+
+ if (do_override) {
+ BKE_override_operations_store_end(&key->id);
+ }
}
}
@@ -1964,6 +1988,8 @@ static void write_cameras(WriteData *wd, ListBase *idbase)
{
for (Camera *cam = idbase->first; cam; cam = cam->id.next) {
if (cam->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && cam->id.override && BKE_override_operations_store_start(&cam->id);
+
/* write LibData */
writestruct(wd, ID_CA, Camera, 1, cam);
write_iddata(wd, &cam->id);
@@ -1971,6 +1997,10 @@ static void write_cameras(WriteData *wd, ListBase *idbase)
if (cam->adt) {
write_animdata(wd, cam->adt);
}
+
+ if (do_override) {
+ BKE_override_operations_store_end(&cam->id);
+ }
}
}
}
@@ -1979,6 +2009,8 @@ static void write_mballs(WriteData *wd, ListBase *idbase)
{
for (MetaBall *mb = idbase->first; mb; mb = mb->id.next) {
if (mb->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && mb->id.override && BKE_override_operations_store_start(&mb->id);
+
/* write LibData */
writestruct(wd, ID_MB, MetaBall, 1, mb);
write_iddata(wd, &mb->id);
@@ -1992,6 +2024,10 @@ static void write_mballs(WriteData *wd, ListBase *idbase)
for (MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
writestruct(wd, DATA, MetaElem, 1, ml);
}
+
+ if (do_override) {
+ BKE_override_operations_store_end(&mb->id);
+ }
}
}
}
@@ -2000,6 +2036,8 @@ static void write_curves(WriteData *wd, ListBase *idbase)
{
for (Curve *cu = idbase->first; cu; cu = cu->id.next) {
if (cu->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && cu->id.override && BKE_override_operations_store_start(&cu->id);
+
/* write LibData */
writestruct(wd, ID_CU, Curve, 1, cu);
write_iddata(wd, &cu->id);
@@ -2035,6 +2073,10 @@ static void write_curves(WriteData *wd, ListBase *idbase)
}
}
}
+
+ if (do_override) {
+ BKE_override_operations_store_end(&cu->id);
+ }
}
}
@@ -2171,6 +2213,8 @@ static void write_meshes(WriteData *wd, ListBase *idbase)
CustomDataLayer *players = NULL, players_buff[CD_TEMP_CHUNK_SIZE];
if (mesh->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && mesh->id.override && BKE_override_operations_store_start(&mesh->id);
+
/* write LibData */
if (!save_for_old_blender) {
/* write a copy of the mesh, don't modify in place because it is
@@ -2290,6 +2334,10 @@ static void write_meshes(WriteData *wd, ListBase *idbase)
mesh = old_mesh;
#endif /* USE_BMESH_SAVE_AS_COMPAT */
}
+
+ if (do_override) {
+ BKE_override_operations_store_end(&mesh->id);
+ }
}
if (vlayers && vlayers != vlayers_buff) {
@@ -2316,6 +2364,8 @@ static void write_lattices(WriteData *wd, ListBase *idbase)
{
for (Lattice *lt = idbase->first; lt; lt = lt->id.next) {
if (lt->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && lt->id.override && BKE_override_operations_store_start(<->id);
+
/* write LibData */
writestruct(wd, ID_LT, Lattice, 1, lt);
write_iddata(wd, <->id);
@@ -2329,6 +2379,10 @@ static void write_lattices(WriteData *wd, ListBase *idbase)
writestruct(wd, DATA, BPoint, lt->pntsu * lt->pntsv * lt->pntsw, lt->def);
write_dverts(wd, lt->pntsu * lt->pntsv * lt->pntsw, lt->dvert);
+
+ if (do_override) {
+ BKE_override_operations_store_end(<->id);
+ }
}
}
@@ -2340,6 +2394,7 @@ static void write_images(WriteData *wd, ListBase *idbase)
for (Image *ima = idbase->first; ima; ima = ima->id.next) {
if (ima->id.us > 0 || wd->current) {
ImagePackedFile *imapf;
+ const bool do_override = !wd->current && ima->id.override && BKE_override_operations_store_start(&ima->id);
/* Some trickery to keep forward compatibility of packed images. */
BLI_assert(ima->packedfile == NULL);
@@ -2369,6 +2424,10 @@ static void write_images(WriteData *wd, ListBase *idbase)
writestruct(wd, DATA, Stereo3dFormat, 1, ima->stereo3d_format);
ima->packedfile = NULL;
+
+ if (do_override) {
+ BKE_override_operations_store_end(&ima->id);
+ }
}
}
@@ -2379,6 +2438,8 @@ static void write_textures(WriteData *wd, ListBase *idbase)
{
for (Tex *tex = idbase->first; tex; tex = tex->id.next) {
if (tex->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && tex->id.override && BKE_override_operations_store_start(&tex->id);
+
/* write LibData */
writestruct(wd, ID_TE, Tex, 1, tex);
write_iddata(wd, &tex->id);
@@ -2417,6 +2478,10 @@ static void write_textures(WriteData *wd, ListBase *idbase)
}
write_previews(wd, tex->preview);
+
+ if (do_override) {
+ BKE_override_operations_store_end(&tex->id);
+ }
}
}
@@ -2427,6 +2492,8 @@ static void write_materials(WriteData *wd, ListBase *idbase)
{
for (Material *ma = idbase->first; ma; ma = ma->id.next) {
if (ma->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && ma->id.override && BKE_override_operations_store_start(&ma->id);
+
/* write LibData */
writestruct(wd, ID_MA, Material, 1, ma);
write_iddata(wd, &ma->id);
@@ -2455,6 +2522,10 @@ static void write_materials(WriteData *wd, ListBase *idbase)
}
write_previews(wd, ma->preview);
+
+ if (do_override) {
+ BKE_override_operations_store_end(&ma->id);
+ }
}
}
}
@@ -2463,6 +2534,8 @@ static void write_worlds(WriteData *wd, ListBase *idbase)
{
for (World *wrld = idbase->first; wrld; wrld = wrld->id.next) {
if (wrld->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && wrld->id.override && BKE_override_operations_store_start(&wrld->id);
+
/* write LibData */
writestruct(wd, ID_WO, World, 1, wrld);
write_iddata(wd, &wrld->id);
@@ -2484,6 +2557,10 @@ static void write_worlds(WriteData *wd, ListBase *idbase)
}
write_previews(wd, wrld->preview);
+
+ if (do_override) {
+ BKE_override_operations_store_end(&wrld->id);
+ }
}
}
}
@@ -2492,6 +2569,8 @@ static void write_lamps(WriteData *wd, ListBase *idbase)
{
for (Lamp *la = idbase->first; la; la = la->id.next) {
if (la->id.us > 0 || wd->current) {
+ const bool do_override = !wd->current && la->id.override && BKE_override_operations_store_start(&la->id);
+
/* write LibData */
writestruct(wd, ID_LA, Lamp, 1, la);
write_iddata(wd, &la->id);
@@ -2518,6 +2597,10 @@ static void write_lamps(WriteData *wd, ListBase *idbase)
}
write_previews(wd, la->preview);
+
+ if (do_override) {
+ BKE_override_operations_store_end(&la->id);
+ }
}
}
@@ -2568,6 +2651,8 @@ static void write_paint(WriteData *wd, Paint *p)
static void write_scenes(WriteData *wd, ListBase *scebase)
{
for (Scene *sce = scebase->first; sce; sce = sce->id.next) {
+ const bool do_override = !wd->current && sce->id.override && BKE_override_operations_store_start(&sce->id);
+
/* write LibData */
writestruct(wd, ID_SCE, Scene, 1, sce);
write_iddata(wd, &sce->id);
@@ -2769,6 +2854,10 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
write_previews(wd, sce->preview);
write_curvemapping_curves(wd, &sce->r.mblur_shutter_curve);
+
+ if (do_override) {
+ BKE_override_operations_store_end(&sce->id);
+ }
}
mywrite_flush(wd);
@@ -2778,6 +2867,8 @@ static void write_gpencils(WriteData *wd, ListBase *lb)
{
for (bGPdata *gpd = lb->
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list