[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56127] trunk/blender/source/blender: Make freestyle use local Main for temporary objects

Sergey Sharybin sergey.vfx at gmail.com
Thu Apr 18 10:58:23 CEST 2013


Revision: 56127
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56127
Author:   nazgul
Date:     2013-04-18 08:58:21 +0000 (Thu, 18 Apr 2013)
Log Message:
-----------
Make freestyle use local Main for temporary objects

This means main database is no longer pollutes with
temporary scene and objects needed for freestyle
render.

Actually, there're few of separated temporary mains
now. Ideally it's better to use single one, but it's
not so much trivial to pass it to all classes. Not
so big deal actually.

Required some changes to blender kernel, to make it
possible to add object to a given main, also to
check on mesh materials for objects in given main.
This is all straightforward changes.

As an additional, solved issue with main database
being infinitely polluted with text blocks created
by create_lineset_handler function.

This fixes:
- #35003: Freestyle crashes if user expands objects in FRS1_Scene
- #35012: ctrl+f12 rendering crashes when using Freestyle

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_material.h
    trunk/blender/source/blender/blenkernel/BKE_object.h
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/collada/collada_utils.cpp
    trunk/blender/source/blender/editors/curve/editfont.c
    trunk/blender/source/blender/editors/mesh/meshtools.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_constraint.c
    trunk/blender/source/blender/editors/object/object_hook.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/object/object_relations.c
    trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
    trunk/blender/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
    trunk/blender/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
    trunk/blender/source/blender/freestyle/intern/system/PythonInterpreter.h
    trunk/blender/source/blender/makesrna/intern/rna_main_api.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/blenkernel/BKE_material.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_material.h	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/blenkernel/BKE_material.h	2013-04-18 08:58:21 UTC (rev 56127)
@@ -49,7 +49,7 @@
 void init_def_material(void);
 void BKE_material_free(struct Material *sc); 
 void BKE_material_free_ex(struct Material *ma, int do_id_user);
-void test_object_materials(struct ID *id);
+void test_object_materials(struct Main *bmain, struct ID *id);
 void resize_object_material(struct Object *ob, const short totcol);
 void init_material(struct Material *ma);
 struct Material *BKE_material_add(struct Main *bmain, const char *name);

Modified: trunk/blender/source/blender/blenkernel/BKE_object.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_object.h	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/blenkernel/BKE_object.h	2013-04-18 08:58:21 UTC (rev 56127)
@@ -81,8 +81,8 @@
 bool BKE_object_is_in_editmode(struct Object *ob);
 
 struct Object *BKE_object_add_only_object(struct Main *bmain, int type, const char *name);
-struct Object *BKE_object_add(struct Scene *scene, int type);
-void *BKE_object_obdata_add_from_type(int type);
+struct Object *BKE_object_add(struct Main *bmain, struct Scene *scene, int type);
+void *BKE_object_obdata_add_from_type(struct Main *bmain, int type);
 
 struct Object *BKE_object_copy_ex(struct Main *bmain, struct Object *ob, int copy_caches);
 struct Object *BKE_object_copy(struct Object *ob);

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2013-04-18 08:58:21 UTC (rev 56127)
@@ -568,7 +568,7 @@
 		(*matar)[(*totcol)++] = ma;
 
 		id_us_plus((ID *)ma);
-		test_object_materials(id);
+		test_object_materials(G.main, id);
 	}
 }
 
@@ -601,7 +601,7 @@
 					MEM_freeN(*matar);
 
 					*matar = mat;
-					test_object_materials(id);
+					test_object_materials(G.main, id);
 				}
 
 				/* decrease mat_nr index */
@@ -712,7 +712,7 @@
 	if (ob->actcol > ob->totcol) ob->actcol = ob->totcol;
 }
 
-void test_object_materials(ID *id)
+void test_object_materials(Main *bmain, ID *id)
 {
 	/* make the ob mat-array same size as 'ob->data' mat-array */
 	Object *ob;
@@ -722,7 +722,7 @@
 		return;
 	}
 
-	for (ob = G.main->object.first; ob; ob = ob->id.next) {
+	for (ob = bmain->object.first; ob; ob = ob->id.next) {
 		if (ob->data == id) {
 			resize_object_material(ob, *totcol);
 		}
@@ -768,7 +768,7 @@
 	if (ma)
 		id_us_plus((ID *)ma);
 
-	test_object_materials(id);
+	test_object_materials(G.main, id);
 }
 
 void assign_material(Object *ob, Material *ma, short act, int assign_type)
@@ -855,7 +855,7 @@
 
 	if (ma)
 		id_us_plus((ID *)ma);
-	test_object_materials(ob->data);
+	test_object_materials(G.main, ob->data);
 }
 
 /* XXX - this calls many more update calls per object then are needed, could be optimized */

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-04-18 08:58:21 UTC (rev 56127)
@@ -841,7 +841,7 @@
 		id_us_plus((ID *)me);
 	}
 	
-	test_object_materials((ID *)me);
+	test_object_materials(G.main, (ID *)me);
 
 	test_object_modifiers(ob);
 }

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2013-04-18 08:58:21 UTC (rev 56127)
@@ -845,19 +845,19 @@
 
 /* *************************************************** */
 
-void *BKE_object_obdata_add_from_type(int type)
+void *BKE_object_obdata_add_from_type(Main *bmain, int type)
 {
 	switch (type) {
-		case OB_MESH:      return BKE_mesh_add(G.main, "Mesh");
-		case OB_CURVE:     return BKE_curve_add(G.main, "Curve", OB_CURVE);
-		case OB_SURF:      return BKE_curve_add(G.main, "Surf", OB_SURF);
-		case OB_FONT:      return BKE_curve_add(G.main, "Text", OB_FONT);
-		case OB_MBALL:     return BKE_mball_add(G.main, "Meta");
-		case OB_CAMERA:    return BKE_camera_add(G.main, "Camera");
-		case OB_LAMP:      return BKE_lamp_add(G.main, "Lamp");
-		case OB_LATTICE:   return BKE_lattice_add(G.main, "Lattice");
-		case OB_ARMATURE:  return BKE_armature_add(G.main, "Armature");
-		case OB_SPEAKER:   return BKE_speaker_add(G.main, "Speaker");
+		case OB_MESH:      return BKE_mesh_add(bmain, "Mesh");
+		case OB_CURVE:     return BKE_curve_add(bmain, "Curve", OB_CURVE);
+		case OB_SURF:      return BKE_curve_add(bmain, "Surf", OB_SURF);
+		case OB_FONT:      return BKE_curve_add(bmain, "Text", OB_FONT);
+		case OB_MBALL:     return BKE_mball_add(bmain, "Meta");
+		case OB_CAMERA:    return BKE_camera_add(bmain, "Camera");
+		case OB_LAMP:      return BKE_lamp_add(bmain, "Lamp");
+		case OB_LATTICE:   return BKE_lattice_add(bmain, "Lattice");
+		case OB_ARMATURE:  return BKE_armature_add(bmain, "Armature");
+		case OB_SPEAKER:   return BKE_speaker_add(bmain, "Speaker");
 		case OB_EMPTY:     return NULL;
 		default:
 			printf("BKE_object_obdata_add_from_type: Internal error, bad type: %d\n", type);
@@ -972,16 +972,16 @@
 
 /* general add: to scene, with layer from area and default name */
 /* creates minimum required data, but without vertices etc. */
-Object *BKE_object_add(struct Scene *scene, int type)
+Object *BKE_object_add(Main *bmain, Scene *scene, int type)
 {
 	Object *ob;
 	Base *base;
 	char name[MAX_ID_NAME];
 
 	BLI_strncpy(name, get_obdata_defname(type), sizeof(name));
-	ob = BKE_object_add_only_object(G.main, type, name);
+	ob = BKE_object_add_only_object(bmain, type, name);
 
-	ob->data = BKE_object_obdata_add_from_type(type);
+	ob->data = BKE_object_obdata_add_from_type(bmain, type);
 
 	ob->lay = scene->lay;
 	

Modified: trunk/blender/source/blender/collada/collada_utils.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_utils.cpp	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/collada/collada_utils.cpp	2013-04-18 08:58:21 UTC (rev 56127)
@@ -129,7 +129,7 @@
 {
 	Object *ob = BKE_object_add_only_object(G.main, type, name);
 
-	ob->data = BKE_object_obdata_add_from_type(type);
+	ob->data = BKE_object_obdata_add_from_type(G.main, type);
 	ob->lay = scene->lay;
 	DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 

Modified: trunk/blender/source/blender/editors/curve/editfont.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editfont.c	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/editors/curve/editfont.c	2013-04-18 08:58:21 UTC (rev 56127)
@@ -56,6 +56,7 @@
 #include "BKE_depsgraph.h"
 #include "BKE_font.h"
 #include "BKE_library.h"
+#include "BKE_main.h"
 #include "BKE_object.h"
 #include "BKE_report.h"
 
@@ -439,6 +440,7 @@
 
 static void txt_add_object(bContext *C, TextLine *firstline, int totline, float offset[3])
 {
+	Main *bmain = CTX_data_main(C);
 	Scene *scene = CTX_data_scene(C);
 	Curve *cu;
 	Object *obedit;
@@ -447,7 +449,7 @@
 	int nchars = 0, a;
 	float rot[3] = {0.f, 0.f, 0.f};
 	
-	obedit = BKE_object_add(scene, OB_FONT);
+	obedit = BKE_object_add(bmain, scene, OB_FONT);
 	base = scene->basact;
 
 	/* seems to assume view align ? TODO - look into this, could be an operator option */

Modified: trunk/blender/source/blender/editors/mesh/meshtools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/meshtools.c	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/editors/mesh/meshtools.c	2013-04-18 08:58:21 UTC (rev 56127)
@@ -537,7 +537,7 @@
 	if (matmap) MEM_freeN(matmap);
 	
 	/* other mesh users */
-	test_object_materials((ID *)me);
+	test_object_materials(bmain, (ID *)me);
 	
 	/* free temp copy of destination shapekeys (if applicable) */
 	if (nkey) {

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/editors/object/object_add.c	2013-04-18 08:58:21 UTC (rev 56127)
@@ -376,7 +376,7 @@
 		ED_object_editmode_exit(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR | EM_DO_UNDO);  /* freedata, and undo */
 
 	/* deselects all, sets scene->basact */
-	ob = BKE_object_add(scene, type);
+	ob = BKE_object_add(bmain, scene, type);
 	BASACT->lay = ob->lay = layer;
 	/* editor level activate, notifiers */
 	ED_base_object_activate(C, BASACT);

Modified: trunk/blender/source/blender/editors/object/object_constraint.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_constraint.c	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/editors/object/object_constraint.c	2013-04-18 08:58:21 UTC (rev 56127)
@@ -1572,12 +1572,13 @@
 	
 	/* if still not found, add a new empty to act as a target (if allowed) */
 	if ((found == 0) && (add)) {
+		Main *bmain = CTX_data_main(C);
 		Scene *scene = CTX_data_scene(C);
 		Base *base = BASACT, *newbase = NULL;
 		Object *obt;
 		
 		/* add new target object */
-		obt = BKE_object_add(scene, OB_EMPTY);
+		obt = BKE_object_add(bmain, scene, OB_EMPTY);
 		
 		/* set layers OK */
 		newbase = BASACT;

Modified: trunk/blender/source/blender/editors/object/object_hook.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_hook.c	2013-04-18 08:51:07 UTC (rev 56126)
+++ trunk/blender/source/blender/editors/object/object_hook.c	2013-04-18 08:58:21 UTC (rev 56127)
@@ -438,12 +438,12 @@
 	return 0;
 }
 
-static Object *add_hook_object_new(Scene *scene, Object *obedit)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list