[Bf-blender-cvs] [b08a5d1e57] id_override_static: Merge branch 'writefile_rework' into id_override_static.

Bastien Montagne noreply at git.blender.org
Mon Feb 27 14:52:21 CET 2017


Commit: b08a5d1e57293ff10ccd0a66bdd61c3bd5e92f0c
Author: Bastien Montagne
Date:   Mon Feb 27 14:50:21 2017 +0100
Branches: id_override_static
https://developer.blender.org/rBb08a5d1e57293ff10ccd0a66bdd61c3bd5e92f0c

Merge branch 'writefile_rework' into id_override_static.

That way we don't have to add the same stupid few lines to *all*
datatypes writers! Obvious gain on efficiency and security from coding PoV.

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

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



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

diff --cc source/blender/blenloader/intern/writefile.c
index 9ebc2702f2,a96e569d68..005ee02ff5
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@@ -4110,38 -3801,127 +3823,133 @@@ static bool write_file_handle
  	 * avoid thumbnail detecting changes because of this. */
  	mywrite_flush(wd);
  
- 	write_windowmanagers(wd, &mainvar->wm);
- 	write_screens(wd, &mainvar->screen);
- 	write_movieclips(wd, &mainvar->movieclip);
- 	write_masks(wd, &mainvar->mask);
- 	write_scenes(wd, &mainvar->scene);
- 	write_curves(wd, &mainvar->curve);
- 	write_mballs(wd, &mainvar->mball);
- 	write_images(wd, &mainvar->image);
- 	write_cameras(wd, &mainvar->camera);
- 	write_lamps(wd, &mainvar->lamp);
- 	write_lattices(wd, &mainvar->latt);
- 	write_vfonts(wd, &mainvar->vfont);
- 	write_keys(wd, &mainvar->key);
- 	write_worlds(wd, &mainvar->world);
- 	write_texts(wd, &mainvar->text);
- 	write_speakers(wd, &mainvar->speaker);
- 	write_sounds(wd, &mainvar->sound);
- 	write_groups(wd, &mainvar->group);
- 	write_armatures(wd, &mainvar->armature);
- 	write_actions(wd, &mainvar->action);
- 	write_objects(wd, &mainvar->object);
- 	write_materials(wd, &mainvar->mat);
- 	write_textures(wd, &mainvar->tex);
- 	write_meshes(wd, &mainvar->mesh);
- 	write_particlesettings(wd, &mainvar->particle);
- 	write_nodetrees(wd, &mainvar->nodetree);
- 	write_brushes(wd, &mainvar->brush);
- 	write_palettes(wd, &mainvar->palettes);
- 	write_paintcurves(wd, &mainvar->paintcurves);
- 	write_gpencils(wd, &mainvar->gpencil);
- 	write_linestyles(wd, &mainvar->linestyle);
- 	write_cachefiles(wd, &mainvar->cachefiles);
+ 	ListBase *lbarray[MAX_LIBARRAY];
+ 	int a = set_listbasepointers(mainvar, lbarray);
+ 	while (a--) {
+ 		ID *id = lbarray[a]->first;
+ 
+ 		if (id && GS(id->name) == ID_LI) {
+ 			continue;  /* Libraries are handled separately below. */
+ 		}
+ 
+ 		for (; id; id = id->next) {
++			const bool do_override = !wd->current && id->override && BKE_override_operations_store_start(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;
+ 			}
++
++			if (do_override) {
++				BKE_override_operations_store_end(id);
++			}
+ 		}
+ 
+ 		mywrite_flush(wd);
+ 	}
+ 
+ 	/* Special handling, operating over split Mains... */
  	write_libraries(wd,  mainvar->next);
  
  	/* So changes above don't cause a 'DNA1' to be detected as changed on undo. */




More information about the Bf-blender-cvs mailing list