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
This commit is contained in:
Tom Edwards 2014-01-15 16:37:03 +01:00 committed by Brecht Van Lommel
parent 8c444958fc
commit 1f2136b329
40 changed files with 134 additions and 130 deletions

@ -47,7 +47,7 @@ struct bContext;
struct PointerRNA;
struct PropertyRNA;
void *BKE_libblock_alloc(struct ListBase *lb, short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
void *BKE_libblock_alloc(struct Main *bmain, short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
void *BKE_libblock_copy_ex(struct Main *bmain, struct ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
void *BKE_libblock_copy(struct ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
void BKE_libblock_copy_data(struct ID *id, const struct ID *id_from, const bool do_action);
@ -73,9 +73,9 @@ struct ListBase *which_libbase(struct Main *mainlib, short type);
#define MAX_LIBARRAY 41
int set_listbasepointers(struct Main *main, struct ListBase **lb);
void BKE_libblock_free(struct ListBase *lb, void *idv);
void BKE_libblock_free_ex(struct ListBase *lb, void *idv, bool do_id_user);
void BKE_libblock_free_us(struct ListBase *lb, void *idv);
void BKE_libblock_free(struct Main *bmain, void *idv);
void BKE_libblock_free_ex(struct Main *bmain, void *idv, bool do_id_user);
void BKE_libblock_free_us(struct Main *bmain, void *idv);
void BKE_libblock_free_data(struct ID *id);

@ -84,7 +84,7 @@ bAction *add_empty_action(Main *bmain, const char name[])
{
bAction *act;
act = BKE_libblock_alloc(&bmain->action, ID_AC, name);
act = BKE_libblock_alloc(bmain, ID_AC, name);
return act;
}

@ -78,7 +78,7 @@ bArmature *BKE_armature_add(Main *bmain, const char *name)
{
bArmature *arm;
arm = BKE_libblock_alloc(&bmain->armature, ID_AR, name);
arm = BKE_libblock_alloc(bmain, ID_AR, name);
arm->deformflag = ARM_DEF_VGROUP | ARM_DEF_ENVELOPE;
arm->flag = ARM_COL_CUSTOM; /* custom bone-group colors */
arm->layer = 1;

@ -488,9 +488,9 @@ int BKE_read_file_from_memfile(bContext *C, MemFile *memfile, ReportList *report
if (bfd) {
/* remove the unused screens and wm */
while (bfd->main->wm.first)
BKE_libblock_free(&bfd->main->wm, bfd->main->wm.first);
BKE_libblock_free_ex(bfd->main, bfd->main->wm.first, true);
while (bfd->main->screen.first)
BKE_libblock_free(&bfd->main->screen, bfd->main->screen.first);
BKE_libblock_free_ex(bfd->main, bfd->main->screen.first, true);
setup_app_data(C, bfd, "<memory1>");
}

@ -135,7 +135,7 @@ Brush *BKE_brush_add(Main *bmain, const char *name)
{
Brush *brush;
brush = BKE_libblock_alloc(&bmain->brush, ID_BR, name);
brush = BKE_libblock_alloc(bmain, ID_BR, name);
/* enable fake user by default */
brush->id.flag |= LIB_FAKEUSER;

@ -54,7 +54,7 @@ void *BKE_camera_add(Main *bmain, const char *name)
{
Camera *cam;
cam = BKE_libblock_alloc(&bmain->camera, ID_CA, name);
cam = BKE_libblock_alloc(bmain, ID_CA, name);
cam->lens = 35.0f;
cam->sensor_x = DEFAULT_SENSOR_WIDTH;

@ -165,7 +165,7 @@ Curve *BKE_curve_add(Main *bmain, const char *name, int type)
{
Curve *cu;
cu = BKE_libblock_alloc(&bmain->curve, ID_CU, name);
cu = BKE_libblock_alloc(bmain, ID_CU, name);
copy_v3_fl(cu->size, 1.0f);
cu->flag = CU_FRONT | CU_BACK | CU_DEFORM_BOUNDS_OFF | CU_PATH_RADIUS;
cu->pathlen = 100;

@ -232,7 +232,7 @@ VFont *BKE_vfont_load(Main *bmain, const char *name)
vfd = BLI_vfontdata_from_freetypefont(pf);
if (vfd) {
vfont = BKE_libblock_alloc(&bmain->vfont, ID_VF, filename);
vfont = BKE_libblock_alloc(bmain, ID_VF, filename);
vfont->data = vfd;
/* if there's a font name, use it for the ID name */

@ -204,7 +204,7 @@ bGPdata *gpencil_data_addnew(const char name[])
bGPdata *gpd;
/* allocate memory for a new block */
gpd = BKE_libblock_alloc(&G.main->gpencil, ID_GD, name);
gpd = BKE_libblock_alloc(G.main, ID_GD, name);
/* initial settings */
gpd->flag = (GP_DATA_DISPINFO | GP_DATA_EXPAND);

@ -138,7 +138,7 @@ Group *BKE_group_add(Main *bmain, const char *name)
{
Group *group;
group = BKE_libblock_alloc(&bmain->group, ID_GR, name);
group = BKE_libblock_alloc(bmain, ID_GR, name);
group->layer = (1 << 20) - 1;
return group;
}

@ -295,7 +295,7 @@ static Image *image_alloc(Main *bmain, const char *name, short source, short typ
{
Image *ima;
ima = BKE_libblock_alloc(&bmain->image, ID_IM, name);
ima = BKE_libblock_alloc(bmain, ID_IM, name);
if (ima) {
ima->ok = IMA_OK;
@ -555,7 +555,7 @@ void BKE_image_merge(Image *dest, Image *source)
}
BLI_spin_unlock(&image_spin);
BKE_libblock_free(&G.main->image, source);
BKE_libblock_free(G.main, source);
}
}

@ -109,7 +109,7 @@ Key *BKE_key_add(ID *id) /* common function */
Key *key;
char *el;
key = BKE_libblock_alloc(&G.main->key, ID_KE, "Key");
key = BKE_libblock_alloc(G.main, ID_KE, "Key");
key->type = KEY_NORMAL;
key->from = id;

@ -58,7 +58,7 @@ Lamp *BKE_lamp_add(Main *bmain, const char *name)
{
Lamp *la;
la = BKE_libblock_alloc(&bmain->lamp, ID_LA, name);
la = BKE_libblock_alloc(bmain, ID_LA, name);
la->r = la->g = la->b = la->k = 1.0f;
la->haint = la->energy = 1.0f;

@ -249,7 +249,7 @@ Lattice *BKE_lattice_add(Main *bmain, const char *name)
{
Lattice *lt;
lt = BKE_libblock_alloc(&bmain->latt, ID_LT, name);
lt = BKE_libblock_alloc(bmain, ID_LT, name);
lt->flag = LT_GRID;

@ -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;

@ -107,7 +107,7 @@ FreestyleLineStyle *BKE_new_linestyle(const char *name, struct Main *main)
if (!main)
main = G.main;
linestyle = (FreestyleLineStyle *)BKE_libblock_alloc(&main->linestyle, ID_LS, name);
linestyle = (FreestyleLineStyle *)BKE_libblock_alloc(main, ID_LS, name);
default_linestyle_settings(linestyle);

@ -701,7 +701,7 @@ static Mask *mask_alloc(Main *bmain, const char *name)
{
Mask *mask;
mask = BKE_libblock_alloc(&bmain->mask, ID_MSK, name);
mask = BKE_libblock_alloc(bmain, ID_MSK, name);
mask->id.flag |= LIB_FAKEUSER;

@ -211,7 +211,7 @@ Material *BKE_material_add(Main *bmain, const char *name)
{
Material *ma;
ma = BKE_libblock_alloc(&bmain->mat, ID_MA, name);
ma = BKE_libblock_alloc(bmain, ID_MA, name);
init_material(ma);

@ -209,7 +209,7 @@ MetaBall *BKE_mball_add(Main *bmain, const char *name)
{
MetaBall *mb;
mb = BKE_libblock_alloc(&bmain->mball, ID_MB, name);
mb = BKE_libblock_alloc(bmain, ID_MB, name);
mb->size[0] = mb->size[1] = mb->size[2] = 1.0;
mb->texflag = MB_AUTOSPACE;

@ -444,7 +444,7 @@ Mesh *BKE_mesh_add(Main *bmain, const char *name)
{
Mesh *me;
me = BKE_libblock_alloc(&bmain->mesh, ID_ME, name);
me = BKE_libblock_alloc(bmain, ID_ME, name);
me->size[0] = me->size[1] = me->size[2] = 1.0;
me->smoothresh = 30;
@ -1456,7 +1456,7 @@ void BKE_mesh_from_nurbs_displist(Object *ob, ListBase *dispbase, const bool use
cu->totcol = 0;
if (ob->data) {
BKE_libblock_free(&bmain->curve, ob->data);
BKE_libblock_free(bmain, ob->data);
}
ob->data = me;
ob->type = OB_MESH;

@ -553,7 +553,7 @@ static MovieClip *movieclip_alloc(Main *bmain, const char *name)
{
MovieClip *clip;
clip = BKE_libblock_alloc(&bmain->movieclip, ID_MC, name);
clip = BKE_libblock_alloc(bmain, ID_MC, name);
clip->aspx = clip->aspy = 1.0f;

@ -1078,7 +1078,7 @@ bNodeTree *ntreeAddTree(Main *bmain, const char *name, const char *idname)
* node groups and other tree types are created as library data.
*/
if (bmain) {
ntree = BKE_libblock_alloc(&bmain->nodetree, ID_NT, name);
ntree = BKE_libblock_alloc(bmain, ID_NT, name);
}
else {
ntree = MEM_callocN(sizeof(bNodeTree), "new node tree");

@ -945,7 +945,7 @@ Object *BKE_object_add_only_object(Main *bmain, int type, const char *name)
if (!name)
name = get_obdata_defname(type);
ob = BKE_libblock_alloc(&bmain->object, ID_OB, name);
ob = BKE_libblock_alloc(bmain, ID_OB, name);
/* default object vars */
ob->type = type;

@ -3664,7 +3664,7 @@ ParticleSettings *psys_new_settings(const char *name, Main *main)
if (main == NULL)
main = G.main;
part = BKE_libblock_alloc(&main->particle, ID_PA, name);
part = BKE_libblock_alloc(main, ID_PA, name);
default_particle_settings(part);

@ -419,7 +419,7 @@ Scene *BKE_scene_add(Main *bmain, const char *name)
int a;
const char *colorspace_name;
sce = BKE_libblock_alloc(&bmain->scene, ID_SCE, name);
sce = BKE_libblock_alloc(bmain, ID_SCE, name);
sce->lay = sce->layact = 1;
sce->r.mode = R_GAMMA | R_OSA | R_SHADOW | R_SSS | R_ENVMAP | R_RAYTRACE;
@ -733,7 +733,7 @@ void BKE_scene_unlink(Main *bmain, Scene *sce, Scene *newsce)
if (sc->scene == sce)
sc->scene = newsce;
BKE_libblock_free(&bmain->scene, sce);
BKE_libblock_free(bmain, sce);
}
/* used by metaballs

@ -84,14 +84,14 @@ bSound *sound_new_file(struct Main *bmain, const char *filename)
while (len > 0 && filename[len - 1] != '/' && filename[len - 1] != '\\')
len--;
sound = BKE_libblock_alloc(&bmain->sound, ID_SO, filename + len);
sound = BKE_libblock_alloc(bmain, ID_SO, filename + len);
BLI_strncpy(sound->name, filename, FILE_MAX);
// XXX unused currently sound->type = SOUND_TYPE_FILE;
sound_load(bmain, sound);
if (!sound->playback_handle) {
BKE_libblock_free(&bmain->sound, sound);
BKE_libblock_free(bmain, sound);
sound = NULL;
}
@ -233,7 +233,7 @@ bSound *sound_new_buffer(struct Main *bmain, bSound *source)
strcpy(name, "buf_");
strcpy(name + 4, source->id.name);
sound = BKE_libblock_alloc(&bmain->sound, ID_SO, name);
sound = BKE_libblock_alloc(bmain, ID_SO, name);
sound->child_sound = source;
sound->type = SOUND_TYPE_BUFFER;
@ -242,7 +242,7 @@ bSound *sound_new_buffer(struct Main *bmain, bSound *source)
if (!sound->playback_handle)
{
BKE_libblock_free(&bmain->sound, sound);
BKE_libblock_free(bmain, sound);
sound = NULL;
}
@ -257,7 +257,7 @@ bSound *sound_new_limiter(struct Main *bmain, bSound *source, float start, float
strcpy(name, "lim_");
strcpy(name + 4, source->id.name);
sound = BKE_libblock_alloc(&bmain->sound, ID_SO, name);
sound = BKE_libblock_alloc(bmain, ID_SO, name);
sound->child_sound = source;
sound->start = start;
@ -268,7 +268,7 @@ bSound *sound_new_limiter(struct Main *bmain, bSound *source, float start, float
if (!sound->playback_handle)
{
BKE_libblock_free(&bmain->sound, sound);
BKE_libblock_free(bmain, sound);
sound = NULL;
}
@ -281,7 +281,7 @@ void sound_delete(struct Main *bmain, bSound *sound)
if (sound) {
BKE_sound_free(sound);
BKE_libblock_free(&bmain->sound, sound);
BKE_libblock_free(bmain, sound);
}
}

@ -41,7 +41,7 @@ void *BKE_speaker_add(Main *bmain, const char *name)
{
Speaker *spk;
spk = BKE_libblock_alloc(&bmain->speaker, ID_SPK, name);
spk = BKE_libblock_alloc(bmain, ID_SPK, name);
spk->attenuation = 1.0f;
spk->cone_angle_inner = 360.0f;

@ -176,7 +176,7 @@ Text *BKE_text_add(Main *bmain, const char *name)
Text *ta;
TextLine *tmp;
ta = BKE_libblock_alloc(&bmain->text, ID_TXT, name);
ta = BKE_libblock_alloc(bmain, ID_TXT, name);
ta->id.us = 1;
ta->name = NULL;
@ -379,7 +379,7 @@ Text *BKE_text_load_ex(Main *bmain, const char *file, const char *relpath, const
fp = BLI_fopen(str, "r");
if (fp == NULL) return NULL;
ta = BKE_libblock_alloc(&bmain->text, ID_TXT, BLI_path_basename(str));
ta = BKE_libblock_alloc(bmain, ID_TXT, BLI_path_basename(str));
ta->id.us = 1;
ta->lines.first = ta->lines.last = NULL;

@ -582,7 +582,7 @@ Tex *add_texture(Main *bmain, const char *name)
{
Tex *tex;
tex = BKE_libblock_alloc(&bmain->tex, ID_TE, name);
tex = BKE_libblock_alloc(bmain, ID_TE, name);
default_tex(tex);

@ -83,7 +83,7 @@ World *add_world(Main *bmain, const char *name)
{
World *wrld;
wrld = BKE_libblock_alloc(&bmain->world, ID_WO, name);
wrld = BKE_libblock_alloc(bmain, ID_WO, name);
wrld->horr = 0.05f;
wrld->horg = 0.05f;

@ -549,7 +549,7 @@ static Main *blo_find_main(FileData *fd, const char *filepath, const char *relab
m = BKE_main_new();
BLI_addtail(mainlist, m);
lib = BKE_libblock_alloc(&m->library, ID_LI, "lib");
lib = BKE_libblock_alloc(m, ID_LI, "lib");
BLI_strncpy(lib->name, filepath, sizeof(lib->name));
BLI_strncpy(lib->filepath, name1, sizeof(lib->filepath));
@ -7302,7 +7302,7 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
oldnewmap_clear(fd->datamap);
if (wrong_id) {
BKE_libblock_free(lb, id);
BKE_libblock_free(main, id);
}
return (bhead);

@ -1047,7 +1047,7 @@ void ED_base_object_free_and_unlink(Main *bmain, Scene *scene, Base *base)
DAG_id_type_tag(bmain, ID_OB);
BKE_scene_base_unlink(scene, base);
object_delete_check_glsl_update(base->object);
BKE_libblock_free_us(&bmain->object, base->object);
BKE_libblock_free_us(bmain, base->object);
if (scene->basact == base) scene->basact = NULL;
MEM_freeN(base);
}

@ -103,7 +103,7 @@ static bool ED_object_shape_key_remove_all(Main *bmain, Object *ob)
case ID_LT: ((Lattice *)key->from)->key = NULL; break;
}
BKE_libblock_free_us(&(bmain->key), key);
BKE_libblock_free_us(bmain, key);
return true;
}
@ -161,7 +161,7 @@ static bool ED_object_shape_key_remove(Main *bmain, Object *ob)
case ID_LT: ((Lattice *)key->from)->key = NULL; break;
}
BKE_libblock_free_us(&(bmain->key), key);
BKE_libblock_free_us(bmain, key);
}
return true;

@ -466,7 +466,7 @@ bScreen *ED_screen_add(wmWindow *win, Scene *scene, const char *name)
bScreen *sc;
ScrVert *sv1, *sv2, *sv3, *sv4;
sc = BKE_libblock_alloc(&G.main->screen, ID_SCR, name);
sc = BKE_libblock_alloc(G.main, ID_SCR, name);
sc->scene = scene;
sc->do_refresh = TRUE;
sc->redraws_flag = TIME_ALL_3D_WIN | TIME_ALL_ANIM_WIN;
@ -1596,7 +1596,7 @@ void ED_screen_delete(bContext *C, bScreen *sc)
ED_screen_set(C, newsc);
if (delete && win->screen != sc)
BKE_libblock_free(&bmain->screen, sc);
BKE_libblock_free(bmain, sc);
}
static void ed_screen_set_3dview_camera(Scene *scene, bScreen *sc, ScrArea *sa, View3D *v3d)
@ -1834,7 +1834,7 @@ ScrArea *ED_screen_full_toggle(bContext *C, wmWindow *win, ScrArea *sa)
ED_screen_set(C, sc);
BKE_screen_free(oldscreen);
BKE_libblock_free(&CTX_data_main(C)->screen, oldscreen);
BKE_libblock_free(CTX_data_main(C), oldscreen);
}
else {

@ -275,12 +275,12 @@ static int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
/* free temp action too */
if (waction) {
BKE_libblock_free(&G.main->action, waction);
BKE_libblock_free(G.main, waction);
}
}
/* free the group tree (takes care of user count) */
BKE_libblock_free(&G.main->nodetree, wgroup);
BKE_libblock_free(G.main, wgroup);
/* restore external links to and from the gnode */
/* note: the nodes have been copied to intermediate wgroup first (so need to use new_node),

@ -385,7 +385,7 @@ static int text_unlink_exec(bContext *C, wmOperator *UNUSED(op))
}
BKE_text_unlink(bmain, text);
BKE_libblock_free(&bmain->text, text);
BKE_libblock_free(bmain, text);
text_drawcache_tag_update(st, 1);
WM_event_add_notifier(C, NC_TEXT | NA_REMOVED, NULL);

@ -114,7 +114,7 @@ static void rna_Main_cameras_remove(Main *bmain, ReportList *reports, PointerRNA
{
Camera *camera = camera_ptr->data;
if (ID_REAL_USERS(camera) <= 0) {
BKE_libblock_free(&bmain->camera, camera);
BKE_libblock_free(bmain, camera);
RNA_POINTER_INVALIDATE(camera_ptr);
}
else {
@ -208,7 +208,7 @@ static void rna_Main_objects_remove(Main *bmain, ReportList *reports, PointerRNA
Object *object = object_ptr->data;
if (ID_REAL_USERS(object) <= 0) {
BKE_object_unlink(object); /* needed or ID pointers to this are not cleared */
BKE_libblock_free(&bmain->object, object);
BKE_libblock_free(bmain, object);
RNA_POINTER_INVALIDATE(object_ptr);
}
else {
@ -227,7 +227,7 @@ static void rna_Main_materials_remove(Main *bmain, ReportList *reports, PointerR
{
Material *material = material_ptr->data;
if (ID_REAL_USERS(material) <= 0) {
BKE_libblock_free(&bmain->mat, material);
BKE_libblock_free(bmain, material);
RNA_POINTER_INVALIDATE(material_ptr);
}
else {
@ -256,7 +256,7 @@ static void rna_Main_nodetree_remove(Main *bmain, ReportList *reports, PointerRN
{
bNodeTree *ntree = ntree_ptr->data;
if (ID_REAL_USERS(ntree) <= 0) {
BKE_libblock_free(&bmain->nodetree, ntree);
BKE_libblock_free(bmain, ntree);
RNA_POINTER_INVALIDATE(ntree_ptr);
}
else {
@ -332,13 +332,13 @@ Mesh *rna_Main_meshes_new_from_object(
* if it didn't the curve did not have any segments or otherwise
* would have generated an empty mesh */
if (tmpobj->type != OB_MESH) {
BKE_libblock_free_us(&(G.main->object), tmpobj);
BKE_libblock_free_us(G.main, tmpobj);
return NULL;
}
BKE_mesh_texspace_copy_from_object(tmpmesh, ob);
BKE_libblock_free_us(&bmain->object, tmpobj);
BKE_libblock_free_us(bmain, tmpobj);
break;
}
@ -493,7 +493,7 @@ static void rna_Main_meshes_remove(Main *bmain, ReportList *reports, PointerRNA
{
Mesh *mesh = mesh_ptr->data;
if (ID_REAL_USERS(mesh) <= 0) {
BKE_libblock_free(&bmain->mesh, mesh);
BKE_libblock_free(bmain, mesh);
RNA_POINTER_INVALIDATE(mesh_ptr);
}
else {
@ -513,7 +513,7 @@ static void rna_Main_lamps_remove(Main *bmain, ReportList *reports, PointerRNA *
{
Lamp *lamp = lamp_ptr->data;
if (ID_REAL_USERS(lamp) <= 0) {
BKE_libblock_free(&bmain->lamp, lamp);
BKE_libblock_free(bmain, lamp);
RNA_POINTER_INVALIDATE(lamp_ptr);
}
else {
@ -547,7 +547,7 @@ static void rna_Main_images_remove(Main *bmain, ReportList *reports, PointerRNA
{
Image *image = image_ptr->data;
if (ID_REAL_USERS(image) <= 0) {
BKE_libblock_free(&bmain->image, image);
BKE_libblock_free(bmain, image);
RNA_POINTER_INVALIDATE(image_ptr);
}
else {
@ -566,7 +566,7 @@ static void rna_Main_lattices_remove(Main *bmain, ReportList *reports, PointerRN
{
Lattice *lt = lt_ptr->data;
if (ID_REAL_USERS(lt) <= 0) {
BKE_libblock_free(&bmain->latt, lt);
BKE_libblock_free(bmain, lt);
RNA_POINTER_INVALIDATE(lt_ptr);
}
else {
@ -585,7 +585,7 @@ static void rna_Main_curves_remove(Main *bmain, ReportList *reports, PointerRNA
{
Curve *cu = cu_ptr->data;
if (ID_REAL_USERS(cu) <= 0) {
BKE_libblock_free(&bmain->curve, cu);
BKE_libblock_free(bmain, cu);
RNA_POINTER_INVALIDATE(cu_ptr);
}
else {
@ -604,7 +604,7 @@ static void rna_Main_metaballs_remove(Main *bmain, ReportList *reports, PointerR
{
MetaBall *mb = mb_ptr->data;
if (ID_REAL_USERS(mb) <= 0) {
BKE_libblock_free(&bmain->mball, mb);
BKE_libblock_free(bmain, mb);
RNA_POINTER_INVALIDATE(mb_ptr);
}
else {
@ -631,7 +631,7 @@ static void rna_Main_fonts_remove(Main *bmain, ReportList *reports, PointerRNA *
{
VFont *vfont = vfont_ptr->data;
if (ID_REAL_USERS(vfont) <= 0) {
BKE_libblock_free(&bmain->vfont, vfont);
BKE_libblock_free(bmain, vfont);
RNA_POINTER_INVALIDATE(vfont_ptr);
}
else {
@ -651,7 +651,7 @@ static void rna_Main_textures_remove(Main *bmain, ReportList *reports, PointerRN
{
Tex *tex = tex_ptr->data;
if (ID_REAL_USERS(tex) <= 0) {
BKE_libblock_free(&bmain->tex, tex);
BKE_libblock_free(bmain, tex);
RNA_POINTER_INVALIDATE(tex_ptr);
}
else {
@ -670,7 +670,7 @@ static void rna_Main_brushes_remove(Main *bmain, ReportList *reports, PointerRNA
{
Brush *brush = brush_ptr->data;
if (ID_REAL_USERS(brush) <= 0) {
BKE_libblock_free(&bmain->brush, brush);
BKE_libblock_free(bmain, brush);
RNA_POINTER_INVALIDATE(brush_ptr);
}
else {
@ -689,7 +689,7 @@ static void rna_Main_worlds_remove(Main *bmain, ReportList *reports, PointerRNA
{
Group *world = world_ptr->data;
if (ID_REAL_USERS(world) <= 0) {
BKE_libblock_free(&bmain->world, world);
BKE_libblock_free(bmain, world);
RNA_POINTER_INVALIDATE(world_ptr);
}
else {
@ -706,7 +706,7 @@ static void rna_Main_groups_remove(Main *bmain, PointerRNA *group_ptr)
{
Group *group = group_ptr->data;
BKE_group_unlink(group);
BKE_libblock_free(&bmain->group, group);
BKE_libblock_free(bmain, group);
RNA_POINTER_INVALIDATE(group_ptr);
}
@ -720,7 +720,7 @@ static void rna_Main_speakers_remove(Main *bmain, ReportList *reports, PointerRN
{
Speaker *speaker = speaker_ptr->data;
if (ID_REAL_USERS(speaker) <= 0) {
BKE_libblock_free(&bmain->speaker, speaker);
BKE_libblock_free(bmain, speaker);
RNA_POINTER_INVALIDATE(speaker_ptr);
}
else {
@ -737,7 +737,7 @@ static void rna_Main_texts_remove(Main *bmain, PointerRNA *text_ptr)
{
Text *text = text_ptr->data;
BKE_text_unlink(bmain, text);
BKE_libblock_free(&bmain->text, text);
BKE_libblock_free(bmain, text);
RNA_POINTER_INVALIDATE(text_ptr);
}
@ -765,7 +765,7 @@ static void rna_Main_armatures_remove(Main *bmain, ReportList *reports, PointerR
{
bArmature *arm = arm_ptr->data;
if (ID_REAL_USERS(arm) <= 0) {
BKE_libblock_free(&bmain->armature, arm);
BKE_libblock_free(bmain, arm);
RNA_POINTER_INVALIDATE(arm_ptr);
}
else {
@ -785,7 +785,7 @@ static void rna_Main_actions_remove(Main *bmain, ReportList *reports, PointerRNA
{
bAction *act = act_ptr->data;
if (ID_REAL_USERS(act) <= 0) {
BKE_libblock_free(&bmain->action, act);
BKE_libblock_free(bmain, act);
RNA_POINTER_INVALIDATE(act_ptr);
}
else {
@ -804,7 +804,7 @@ static void rna_Main_particles_remove(Main *bmain, ReportList *reports, PointerR
{
ParticleSettings *part = part_ptr->data;
if (ID_REAL_USERS(part) <= 0) {
BKE_libblock_free(&bmain->particle, part);
BKE_libblock_free(bmain, part);
RNA_POINTER_INVALIDATE(part_ptr);
}
else {
@ -831,7 +831,7 @@ static void rna_Main_movieclips_remove(Main *bmain, PointerRNA *clip_ptr)
{
MovieClip *clip = clip_ptr->data;
BKE_movieclip_unlink(bmain, clip);
BKE_libblock_free(&bmain->movieclip, clip);
BKE_libblock_free(bmain, clip);
RNA_POINTER_INVALIDATE(clip_ptr);
}
@ -848,7 +848,7 @@ static void rna_Main_masks_remove(Main *bmain, PointerRNA *mask_ptr)
{
Mask *mask = mask_ptr->data;
BKE_mask_free(bmain, mask);
BKE_libblock_free(&bmain->mask, mask);
BKE_libblock_free(bmain, mask);
RNA_POINTER_INVALIDATE(mask_ptr);
}
@ -857,7 +857,7 @@ static void rna_Main_grease_pencil_remove(Main *bmain, ReportList *reports, Poin
bGPdata *gpd = gpd_ptr->data;
if (ID_REAL_USERS(gpd) <= 0) {
BKE_gpencil_free(gpd);
BKE_libblock_free(&bmain->gpencil, gpd);
BKE_libblock_free(bmain, gpd);
RNA_POINTER_INVALIDATE(gpd_ptr);
}
else
@ -875,7 +875,7 @@ FreestyleLineStyle *rna_Main_linestyles_new(Main *bmain, const char *name)
void rna_Main_linestyles_remove(Main *bmain, ReportList *reports, FreestyleLineStyle *linestyle)
{
if (ID_REAL_USERS(linestyle) <= 0)
BKE_libblock_free(&bmain->linestyle, linestyle);
BKE_libblock_free(bmain, linestyle);
else
BKE_reportf(reports, RPT_ERROR, "Line style '%s' must have zero users to be removed, found %d",
linestyle->id.name + 2, ID_REAL_USERS(linestyle));

@ -402,7 +402,7 @@ void wm_clear_default_size(bContext *C)
/* on startup, it adds all data, for matching */
void wm_add_default(bContext *C)
{
wmWindowManager *wm = BKE_libblock_alloc(&CTX_data_main(C)->wm, ID_WM, "WinMan");
wmWindowManager *wm = BKE_libblock_alloc(CTX_data_main(C), ID_WM, "WinMan");
wmWindow *win;
bScreen *screen = CTX_wm_screen(C); /* XXX from file read hrmf */

@ -306,7 +306,7 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
/* if temp screen, delete it after window free (it stops jobs that can access it) */
if (screen->temp) {
Main *bmain = CTX_data_main(C);
BKE_libblock_free(&bmain->screen, screen);
BKE_libblock_free(bmain, screen);
}
}
}

@ -97,7 +97,7 @@ BL_ShapeDeformer::~BL_ShapeDeformer()
{
if (m_key)
{
BKE_libblock_free(&G.main->key, m_key);
BKE_libblock_free(G.main, m_key);
m_key = NULL;
}
};