[Bf-blender-cvs] [41f2393e0e] id_override_static: Merge branch 'master' into id_override_static

Bastien Montagne noreply at git.blender.org
Mon Mar 20 12:49:13 CET 2017


Commit: 41f2393e0eb859f65309d5d810fb1e5387e6c308
Author: Bastien Montagne
Date:   Mon Mar 20 12:49:00 2017 +0100
Branches: id_override_static
https://developer.blender.org/rB41f2393e0eb859f65309d5d810fb1e5387e6c308

Merge branch 'master' into id_override_static

Conflicts:
	source/blender/blenloader/intern/writefile.c

===================================================================



===================================================================

diff --cc source/blender/blenloader/intern/writefile.c
index f76e9a2e20,57be237be6..addcf198fe
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@@ -3849,144 -3827,128 +3849,148 @@@ static bool write_file_handle
  	 * avoid thumbnail detecting changes because of this. */
  	mywrite_flush(wd);
  
 -	ListBase *lbarray[MAX_LIBARRAY];
 -	int a = set_listbasepointers(mainvar, lbarray);
 -	while (a--) {
 -		ID *id = lbarray[a]->first;
 +	OverrideStorage *override_storage = !wd->current ? BKE_override_operations_store_initialize() : NULL;
  
 -		if (id && GS(id->name) == ID_LI) {
 -			continue;  /* Libraries are handled separately below. */
 -		}
 +	/* This outer loop allows to save first datablocks from real mainvar, then the temp ones from override process,
 +	 * if needed, without duplicating whole code. */
 +	Main *main = mainvar;
 +	do {
 +		ListBase *lbarray[MAX_LIBARRAY];
 +		int a = set_listbasepointers(main, lbarray);
 +		while (a--) {
 +			ID *id = lbarray[a]->first;
  
 -		for (; id; id = id->next) {
 -			switch ((ID_Type)GS(id->name)) {
 -				case ID_WM:
 -					write_windowmanager(wd, (wmWindowManager *)id);
 -					break;
 -				case ID_SCR:
 -					write_screen(wd, (bScreen *)id);
 -					break;
 -				case ID_MC:
 -					write_movieclip(wd, (MovieClip *)id);
 -					break;
 -				case ID_MSK:
 -					write_mask(wd, (Mask *)id);
 -					break;
 -				case ID_SCE:
 -					write_scene(wd, (Scene *)id);
 -					break;
 -				case ID_CU:
 -					write_curve(wd,(Curve *)id);
 -					break;
 -				case ID_MB:
 -					write_mball(wd, (MetaBall *)id);
 -					break;
 -				case ID_IM:
 -					write_image(wd, (Image *)id);
 -					break;
 -				case ID_CA:
 -					write_camera(wd, (Camera *)id);
 -					break;
 -				case ID_LA:
 -					write_lamp(wd, (Lamp *)id);
 -					break;
 -				case ID_LT:
 -					write_lattice(wd, (Lattice *)id);
 -					break;
 -				case ID_VF:
 -					write_vfont(wd, (VFont *)id);
 -					break;
 -				case ID_KE:
 -					write_key(wd, (Key *)id);
 -					break;
 -				case ID_WO:
 -					write_world(wd, (World *)id);
 -					break;
 -				case ID_TXT:
 -					write_text(wd, (Text *)id);
 -					break;
 -				case ID_SPK:
 -					write_speaker(wd, (Speaker *)id);
 -					break;
 -				case ID_SO:
 -					write_sound(wd, (bSound *)id);
 -					break;
 -				case ID_GR:
 -					write_group(wd, (Group *)id);
 -					break;
 -				case ID_AR:
 -					write_armature(wd, (bArmature *)id);
 -					break;
 -				case ID_AC:
 -					write_action(wd, (bAction *)id);
 -					break;
 -				case ID_OB:
 -					write_object(wd, (Object *)id);
 -					break;
 -				case ID_MA:
 -					write_material(wd, (Material *)id);
 -					break;
 -				case ID_TE:
 -					write_texture(wd, (Tex *)id);
 -					break;
 -				case ID_ME:
 -					write_mesh(wd, (Mesh *)id);
 -					break;
 -				case ID_PA:
 -					write_particlesettings(wd, (ParticleSettings *)id);
 -					break;
 -				case ID_NT:
 -					write_nodetree(wd, (bNodeTree *)id);
 -					break;
 -				case ID_BR:
 -					write_brush(wd, (Brush *)id);
 -					break;
 -				case ID_PAL:
 -					write_palette(wd, (Palette *)id);
 -					break;
 -				case ID_PC:
 -					write_paintcurve(wd, (PaintCurve *)id);
 -					break;
 -				case ID_GD:
 -					write_gpencil(wd, (bGPdata *)id);
 -					break;
 -				case ID_LS:
 -					write_linestyle(wd, (FreestyleLineStyle *)id);
 -					break;
 -				case ID_CF:
 -					write_cachefile(wd, (CacheFile *)id);
 -					break;
 -				case ID_LI:
 -					/* Do nothing, handled below - and should never be reached. */
 -					BLI_assert(0);
 -					break;
 -				case ID_IP:
 -					/* Do nothing, deprecated. */
 -					break;
 -				default:
 -					/* Should never be reached. */
 -					BLI_assert(0);
 -					break;
 +			if (id && GS(id->name) == ID_LI) {
 +				continue;  /* Libraries are handled separately below. */
 +			}
 +
 +			for (; id; id = id->next) {
 +				if (!ELEM(override_storage, NULL, main) && id->override) {
 +					BKE_override_operations_store_start(override_storage, id);
 +				}
 +
 +				switch ((ID_Type)GS(id->name)) {
 +					case ID_WM:
 +						write_windowmanager(wd, (wmWindowManager *)id);
 +						break;
 +					case ID_SCR:
 +						write_screen(wd, (bScreen *)id);
 +						break;
 +					case ID_MC:
 +						write_movieclip(wd, (MovieClip *)id);
 +						break;
 +					case ID_MSK:
 +						write_mask(wd, (Mask *)id);
 +						break;
 +					case ID_SCE:
 +						write_scene(wd, (Scene *)id);
 +						break;
 +					case ID_CU:
 +						write_curve(wd,(Curve *)id);
 +						break;
 +					case ID_MB:
 +						write_mball(wd, (MetaBall *)id);
 +						break;
 +					case ID_IM:
 +						write_image(wd, (Image *)id);
 +						break;
 +					case ID_CA:
 +						write_camera(wd, (Camera *)id);
 +						break;
 +					case ID_LA:
 +						write_lamp(wd, (Lamp *)id);
 +						break;
 +					case ID_LT:
 +						write_lattice(wd, (Lattice *)id);
 +						break;
 +					case ID_VF:
 +						write_vfont(wd, (VFont *)id);
 +						break;
 +					case ID_KE:
 +						write_key(wd, (Key *)id);
 +						break;
 +					case ID_WO:
 +						write_world(wd, (World *)id);
 +						break;
 +					case ID_TXT:
 +						write_text(wd, (Text *)id);
 +						break;
 +					case ID_SPK:
 +						write_speaker(wd, (Speaker *)id);
 +						break;
 +					case ID_SO:
 +						write_sound(wd, (bSound *)id);
 +						break;
 +					case ID_GR:
 +						write_group(wd, (Group *)id);
 +						break;
 +					case ID_AR:
 +						write_armature(wd, (bArmature *)id);
 +						break;
 +					case ID_AC:
 +						write_action(wd, (bAction *)id);
 +						break;
 +					case ID_OB:
 +						write_object(wd, (Object *)id);
 +						break;
 +					case ID_MA:
 +						write_material(wd, (Material *)id);
 +						break;
 +					case ID_TE:
 +						write_texture(wd, (Tex *)id);
 +						break;
 +					case ID_ME:
 +						write_mesh(wd, (Mesh *)id);
 +						break;
 +					case ID_PA:
 +						write_particlesettings(wd, (ParticleSettings *)id);
 +						break;
 +					case ID_NT:
 +						write_nodetree(wd, (bNodeTree *)id);
 +						break;
 +					case ID_BR:
 +						write_brush(wd, (Brush *)id);
 +						break;
 +					case ID_PAL:
 +						write_palette(wd, (Palette *)id);
 +						break;
 +					case ID_PC:
 +						write_paintcurve(wd, (PaintCurve *)id);
 +						break;
 +					case ID_GD:
 +						write_gpencil(wd, (bGPdata *)id);
 +						break;
 +					case ID_LS:
 +						write_linestyle(wd, (FreestyleLineStyle *)id);
 +						break;
 +					case ID_CF:
 +						write_cachefile(wd, (CacheFile *)id);
 +						break;
 +					case ID_LI:
 +						/* Do nothing, handled below - and should never be reached. */
 +						BLI_assert(0);
 +						break;
 +					case ID_IP:
 +						/* Do nothing, deprecated. */
 +						break;
++					default:
++						/* Should never be reached. */
++						BLI_assert(0);
++						break;
 +				}
 +
 +				if (!ELEM(override_storage, NULL, main) && id->override) {
 +					BKE_override_operations_store_end(override_storage, id);
 +				}
  			}
 +
 +			mywrite_flush(wd);
  		}
 +	} while ((main != override_storage) && (main = override_storage));
  
 -		mywrite_flush(wd);
 +	if (override_storage) {
 +		BKE_override_operations_store_finalize(override_storage);
 +		override_storage = NULL;
  	}
  
  	/* Special handling, operating over split Mains... */




More information about the Bf-blender-cvs mailing list