[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(&lt->id);
+
 			/* write LibData */
 			writestruct(wd, ID_LT, Lattice, 1, lt);
 			write_iddata(wd, &lt->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(&lt->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