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:
authorTom Edwards <contact@steamreview.org>2014-01-15 19:37:03 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-01-15 19:47:53 +0400
commit1f2136b329c1c457f8f2a77c26d0fdffc635e7a2 (patch)
tree53d91bba6000bea9d9aaf683261936167ab6627b /source/blender/blenkernel/intern/library.c
parent8c444958fcba92135b22893ae5da53bc31e96eb6 (diff)
Python/Depsgraph: bpy.data.*.is_updated now detects add/remove of any datablock.
Previously this only worked for some datablocks relevant to rendering, now it can be used to detect if any type of datablock was added or removed (but not yet to detect if it was modified, we need many more depsgraph tags for that). Most of the changes are some function parameter changes, the important parts are the DAG_id_type_tag calls. Reviewed By: sergey, brecht Differential Revision: https://developer.blender.org/D195
Diffstat (limited to 'source/blender/blenkernel/intern/library.c')
-rw-r--r--source/blender/blenkernel/intern/library.c98
1 files changed, 51 insertions, 47 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index f2264190a5c..ac5c387efca 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -393,9 +393,9 @@ bool id_copy(ID *id, ID **newid, bool test)
bool id_unlink(ID *id, int test)
{
Main *mainlib = G.main;
- ListBase *lb;
+ short type = GS(id->name);
- switch (GS(id->name)) {
+ switch (type) {
case ID_TXT:
if (test) return true;
BKE_text_unlink(mainlib, (Text *)id);
@@ -413,8 +413,7 @@ bool id_unlink(ID *id, int test)
if (id->us == 0) {
if (test) return true;
- lb = which_libbase(mainlib, GS(id->name));
- BKE_libblock_free(lb, id);
+ BKE_libblock_free(mainlib, id);
return true;
}
@@ -743,9 +742,10 @@ static ID *alloc_libblock_notest(short type)
* The user count is set to 1, all other content (apart from name and links) being
* initialized to zero.
*/
-void *BKE_libblock_alloc(ListBase *lb, short type, const char *name)
+void *BKE_libblock_alloc(Main *bmain, short type, const char *name)
{
ID *id = NULL;
+ ListBase *lb = which_libbase(bmain, type);
id = alloc_libblock_notest(type);
if (id) {
@@ -756,6 +756,7 @@ void *BKE_libblock_alloc(ListBase *lb, short type, const char *name)
new_id(lb, id, name);
/* alphabetic insertion: is in new_id */
}
+ DAG_id_type_tag(bmain, type);
return id;
}
@@ -789,7 +790,7 @@ void *BKE_libblock_copy_ex(Main *bmain, ID *id)
size_t idn_len;
lb = which_libbase(bmain, GS(id->name));
- idn = BKE_libblock_alloc(lb, GS(id->name), id->name + 2);
+ idn = BKE_libblock_alloc(bmain, GS(id->name), id->name + 2);
assert(idn != NULL);
@@ -872,16 +873,19 @@ void BKE_libblock_free_data(ID *id)
}
/* used in headerbuttons.c image.c mesh.c screen.c sound.c and library.c */
-void BKE_libblock_free_ex(ListBase *lb, void *idv, bool do_id_user)
+void BKE_libblock_free_ex(Main *bmain, void *idv, bool do_id_user)
{
- Main *bmain = G.main; /* should eventually be an arg */
ID *id = idv;
+ short type = GS(id->name);
+ ListBase *lb = which_libbase(bmain, type);
+
+ DAG_id_type_tag(bmain, type);
#ifdef WITH_PYTHON
BPY_id_release(id);
#endif
- switch (GS(id->name) ) { /* GetShort from util.h */
+ switch (type) { /* GetShort from util.h */
case ID_SCE:
BKE_scene_free((Scene *)id);
break;
@@ -992,12 +996,12 @@ void BKE_libblock_free_ex(ListBase *lb, void *idv, bool do_id_user)
MEM_freeN(id);
}
-void BKE_libblock_free(ListBase *lb, void *idv)
+void BKE_libblock_free(Main *bmain, void *idv)
{
- BKE_libblock_free_ex(lb, idv, true);
+ BKE_libblock_free_ex(bmain, idv, true);
}
-void BKE_libblock_free_us(ListBase *lb, void *idv) /* test users */
+void BKE_libblock_free_us(Main *bmain, void *idv) /* test users */
{
ID *id = idv;
@@ -1010,7 +1014,7 @@ void BKE_libblock_free_us(ListBase *lb, void *idv) /* test users */
if (id->us == 0) {
if (GS(id->name) == ID_OB) BKE_object_unlink((Object *)id);
- BKE_libblock_free(lb, id);
+ BKE_libblock_free(bmain, id);
}
}
@@ -1034,44 +1038,44 @@ void BKE_main_free(Main *mainvar)
while ( (id = lb->first) ) {
#if 1
- BKE_libblock_free_ex(lb, id, false);
+ BKE_libblock_free_ex(mainvar, id, false);
#else
/* errors freeing ID's can be hard to track down,
* enable this so valgrind will give the line number in its error log */
switch (a) {
- case 0: BKE_libblock_free_ex(lb, id, false); break;
- case 1: BKE_libblock_free_ex(lb, id, false); break;
- case 2: BKE_libblock_free_ex(lb, id, false); break;
- case 3: BKE_libblock_free_ex(lb, id, false); break;
- case 4: BKE_libblock_free_ex(lb, id, false); break;
- case 5: BKE_libblock_free_ex(lb, id, false); break;
- case 6: BKE_libblock_free_ex(lb, id, false); break;
- case 7: BKE_libblock_free_ex(lb, id, false); break;
- case 8: BKE_libblock_free_ex(lb, id, false); break;
- case 9: BKE_libblock_free_ex(lb, id, false); break;
- case 10: BKE_libblock_free_ex(lb, id, false); break;
- case 11: BKE_libblock_free_ex(lb, id, false); break;
- case 12: BKE_libblock_free_ex(lb, id, false); break;
- case 13: BKE_libblock_free_ex(lb, id, false); break;
- case 14: BKE_libblock_free_ex(lb, id, false); break;
- case 15: BKE_libblock_free_ex(lb, id, false); break;
- case 16: BKE_libblock_free_ex(lb, id, false); break;
- case 17: BKE_libblock_free_ex(lb, id, false); break;
- case 18: BKE_libblock_free_ex(lb, id, false); break;
- case 19: BKE_libblock_free_ex(lb, id, false); break;
- case 20: BKE_libblock_free_ex(lb, id, false); break;
- case 21: BKE_libblock_free_ex(lb, id, false); break;
- case 22: BKE_libblock_free_ex(lb, id, false); break;
- case 23: BKE_libblock_free_ex(lb, id, false); break;
- case 24: BKE_libblock_free_ex(lb, id, false); break;
- case 25: BKE_libblock_free_ex(lb, id, false); break;
- case 26: BKE_libblock_free_ex(lb, id, false); break;
- case 27: BKE_libblock_free_ex(lb, id, false); break;
- case 28: BKE_libblock_free_ex(lb, id, false); break;
- case 29: BKE_libblock_free_ex(lb, id, false); break;
- case 30: BKE_libblock_free_ex(lb, id, false); break;
- case 31: BKE_libblock_free_ex(lb, id, false); break;
- case 32: BKE_libblock_free_ex(lb, id, false); break;
+ case 0: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 1: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 2: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 3: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 4: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 5: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 6: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 7: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 8: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 9: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 10: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 11: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 12: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 13: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 14: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 15: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 16: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 17: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 18: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 19: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 20: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 21: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 22: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 23: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 24: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 25: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 26: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 27: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 28: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 29: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 30: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 31: BKE_libblock_free_ex(mainvar, id, false); break;
+ case 32: BKE_libblock_free_ex(mainvar, id, false); break;
default:
BLI_assert(0);
break;