Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-04-18 12:58:21 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-04-18 12:58:21 +0400
commit4df0c46f838f7c316b10a6667705c093f067cadd (patch)
tree9620cb8dbe215e30a3738509bed50408bca2452d /source/blender/blenkernel
parent093f95afaa4a08d2cf194b88803a35ef16cfec58 (diff)
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
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_material.h2
-rw-r--r--source/blender/blenkernel/BKE_object.h4
-rw-r--r--source/blender/blenkernel/intern/material.c12
-rw-r--r--source/blender/blenkernel/intern/mesh.c2
-rw-r--r--source/blender/blenkernel/intern/object.c28
5 files changed, 24 insertions, 24 deletions
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 0bcbbb8576a..7c47380f838 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -49,7 +49,7 @@ struct Scene;
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);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index da5fa3e8195..8870355a919 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -81,8 +81,8 @@ bool BKE_object_exists_check(struct Object *obtest);
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);
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index a4f147a4fac..7e70b9d9cd5 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -568,7 +568,7 @@ void material_append_id(ID *id, Material *ma)
(*matar)[(*totcol)++] = ma;
id_us_plus((ID *)ma);
- test_object_materials(id);
+ test_object_materials(G.main, id);
}
}
@@ -601,7 +601,7 @@ Material *material_pop_id(ID *id, int index_i, int remove_material_slot)
MEM_freeN(*matar);
*matar = mat;
- test_object_materials(id);
+ test_object_materials(G.main, id);
}
/* decrease mat_nr index */
@@ -712,7 +712,7 @@ void resize_object_material(Object *ob, const short totcol)
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 @@ void test_object_materials(ID *id)
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 @@ void assign_material_id(ID *id, Material *ma, short act)
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 @@ void assign_material(Object *ob, Material *ma, short act, int assign_type)
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 */
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 31c2758795d..0d662711df0 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -841,7 +841,7 @@ void BKE_mesh_assign_object(Object *ob, Mesh *me)
id_us_plus((ID *)me);
}
- test_object_materials((ID *)me);
+ test_object_materials(G.main, (ID *)me);
test_object_modifiers(ob);
}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 538cead5d5b..fb950b180a9 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -845,19 +845,19 @@ bool BKE_object_exists_check(Object *obtest)
/* *************************************************** */
-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 @@ Object *BKE_object_add_only_object(Main *bmain, int type, const char *name)
/* 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;