Cleanup: Get rid of G.main in BKE_material.

Note that in some cases, this only moves the G.main case to somne other
places - in particular, RNA getters/setters are becoming annoying here...
This commit is contained in:
2018-05-29 15:49:21 +02:00
parent c72a204001
commit f7af08b5fe
17 changed files with 87 additions and 83 deletions

View File

@@ -667,7 +667,7 @@ static void assign_materials(Main *bmain, Object *ob, const std::map<std::string
int matcount = 0; int matcount = 0;
for (; it != mat_index_map.end(); ++it, ++matcount) { for (; it != mat_index_map.end(); ++it, ++matcount) {
if (!BKE_object_material_slot_add(ob)) { if (!BKE_object_material_slot_add(bmain, ob)) {
can_assign = false; can_assign = false;
break; break;
} }
@@ -696,7 +696,7 @@ static void assign_materials(Main *bmain, Object *ob, const std::map<std::string
assigned_mat = mat_iter->second; assigned_mat = mat_iter->second;
} }
assign_material(ob, assigned_mat, it->second, BKE_MAT_ASSIGN_OBDATA); assign_material(bmain, ob, assigned_mat, it->second, BKE_MAT_ASSIGN_OBDATA);
} }
} }
} }

View File

@@ -47,7 +47,7 @@ struct Scene;
void init_def_material(void); void init_def_material(void);
void BKE_material_free(struct Material *ma); void BKE_material_free(struct Material *ma);
void BKE_material_free_ex(struct Material *ma, bool do_id_user); void BKE_material_free_ex(struct Material *ma, bool do_id_user);
void test_object_materials(struct Object *ob, struct ID *id); void test_object_materials(struct Main *bmain, struct Object *ob, struct ID *id);
void test_all_objects_materials(struct Main *bmain, struct ID *id); void test_all_objects_materials(struct Main *bmain, struct ID *id);
void BKE_material_resize_object(struct Main *bmain, struct Object *ob, const short totcol, bool do_id_user); void BKE_material_resize_object(struct Main *bmain, struct Object *ob, const short totcol, bool do_id_user);
void BKE_material_init(struct Material *ma); void BKE_material_init(struct Material *ma);
@@ -79,13 +79,13 @@ enum {
}; };
struct Material *give_current_material(struct Object *ob, short act); struct Material *give_current_material(struct Object *ob, short act);
void assign_material_id(struct ID *id, struct Material *ma, short act); void assign_material_id(struct Main *bmain, struct ID *id, struct Material *ma, short act);
void assign_material(struct Object *ob, struct Material *ma, short act, int assign_type); void assign_material(struct Main *bmain, struct Object *ob, struct Material *ma, short act, int assign_type);
void assign_matarar(struct Object *ob, struct Material ***matar, short totcol); void assign_matarar(struct Main *bmain, struct Object *ob, struct Material ***matar, short totcol);
short BKE_object_material_slot_find_index(struct Object *ob, struct Material *ma); short BKE_object_material_slot_find_index(struct Object *ob, struct Material *ma);
bool BKE_object_material_slot_add(struct Object *ob); bool BKE_object_material_slot_add(struct Main *bmain, struct Object *ob);
bool BKE_object_material_slot_remove(struct Object *ob); bool BKE_object_material_slot_remove(struct Main *bmain, struct Object *ob);
void BKE_texpaint_slot_refresh_cache(struct Scene *scene, struct Material *ma); void BKE_texpaint_slot_refresh_cache(struct Scene *scene, struct Material *ma);
void BKE_texpaint_slots_refresh_object(struct Scene *scene, struct Object *ob); void BKE_texpaint_slots_refresh_object(struct Scene *scene, struct Object *ob);
@@ -97,7 +97,7 @@ struct Material *BKE_material_pop_id(struct Main *bmain, struct ID *id, int inde
void BKE_material_clear_id(struct Main *bmain, struct ID *id, bool update_data); void BKE_material_clear_id(struct Main *bmain, struct ID *id, bool update_data);
/* rendering */ /* rendering */
void init_render_material(struct Material *, int, float *); void init_render_material(struct Main *bmain, struct Material *, int, float *);
void init_render_materials(struct Main *, int r_mode, float *amd, bool do_default_material); void init_render_materials(struct Main *, int r_mode, float *amd, bool do_default_material);
void end_render_material(struct Material *); void end_render_material(struct Material *);
void end_render_materials(struct Main *); void end_render_materials(struct Main *);
@@ -112,8 +112,8 @@ void material_drivers_update(struct Scene *scene, struct Material *mat, float ct
/* copy/paste */ /* copy/paste */
void clear_matcopybuf(void); void clear_matcopybuf(void);
void free_matcopybuf(void); void free_matcopybuf(void);
void copy_matcopybuf(struct Material *ma); void copy_matcopybuf(struct Main *bmain, struct Material *ma);
void paste_matcopybuf(struct Material *ma); void paste_matcopybuf(struct Main *bmain, struct Material *ma);
/* handle backward compatibility for tface/materials called from doversion */ /* handle backward compatibility for tface/materials called from doversion */
int do_version_tface(struct Main *main); int do_version_tface(struct Main *main);

View File

@@ -99,7 +99,7 @@ float (*BKE_mesh_orco_verts_get(struct Object *ob))[3];
void BKE_mesh_orco_verts_transform(struct Mesh *me, float (*orco)[3], int totvert, int invert); void BKE_mesh_orco_verts_transform(struct Mesh *me, float (*orco)[3], int totvert, int invert);
int test_index_face(struct MFace *mface, struct CustomData *mfdata, int mfindex, int nr); int test_index_face(struct MFace *mface, struct CustomData *mfdata, int mfindex, int nr);
struct Mesh *BKE_mesh_from_object(struct Object *ob); struct Mesh *BKE_mesh_from_object(struct Object *ob);
void BKE_mesh_assign_object(struct Object *ob, struct Mesh *me); void BKE_mesh_assign_object(struct Main *bmain, struct Object *ob, struct Mesh *me);
void BKE_mesh_material_index_remove(struct Mesh *me, short index); void BKE_mesh_material_index_remove(struct Mesh *me, short index);
void BKE_mesh_material_index_clear(struct Mesh *me); void BKE_mesh_material_index_clear(struct Mesh *me);
void BKE_mesh_material_remap(struct Mesh *me, const unsigned int *remap, unsigned int remap_len); void BKE_mesh_material_remap(struct Mesh *me, const unsigned int *remap, unsigned int remap_len);

View File

@@ -382,7 +382,7 @@ static void libblock_remap_data_postprocess_group_scene_unlink(Main *UNUSED(bmai
} }
} }
static void libblock_remap_data_postprocess_obdata_relink(Main *UNUSED(bmain), Object *ob, ID *new_id) static void libblock_remap_data_postprocess_obdata_relink(Main *bmain, Object *ob, ID *new_id)
{ {
if (ob->data == new_id) { if (ob->data == new_id) {
switch (GS(new_id->name)) { switch (GS(new_id->name)) {
@@ -396,7 +396,7 @@ static void libblock_remap_data_postprocess_obdata_relink(Main *UNUSED(bmain), O
break; break;
} }
test_object_modifiers(ob); test_object_modifiers(ob);
test_object_materials(ob, new_id); test_object_materials(bmain, ob, new_id);
} }
} }

View File

@@ -501,7 +501,7 @@ Material *BKE_material_pop_id(Main *bmain, ID *id, int index_i, bool update_data
(*totcol)--; (*totcol)--;
*matar = MEM_reallocN(*matar, sizeof(void *) * (*totcol)); *matar = MEM_reallocN(*matar, sizeof(void *) * (*totcol));
test_all_objects_materials(G.main, id); test_all_objects_materials(bmain, id);
} }
if (update_data) { if (update_data) {
@@ -634,7 +634,7 @@ void BKE_material_resize_object(Main *bmain, Object *ob, const short totcol, boo
DAG_relations_tag_update(bmain); DAG_relations_tag_update(bmain);
} }
void test_object_materials(Object *ob, ID *id) void test_object_materials(Main *bmain, Object *ob, ID *id)
{ {
/* make the ob mat-array same size as 'ob->data' mat-array */ /* make the ob mat-array same size as 'ob->data' mat-array */
const short *totcol; const short *totcol;
@@ -643,7 +643,7 @@ void test_object_materials(Object *ob, ID *id)
return; return;
} }
BKE_material_resize_object(G.main, ob, *totcol, false); BKE_material_resize_object(bmain, ob, *totcol, false);
} }
void test_all_objects_materials(Main *bmain, ID *id) void test_all_objects_materials(Main *bmain, ID *id)
@@ -665,7 +665,7 @@ void test_all_objects_materials(Main *bmain, ID *id)
BKE_main_unlock(bmain); BKE_main_unlock(bmain);
} }
void assign_material_id(ID *id, Material *ma, short act) void assign_material_id(Main *bmain, ID *id, Material *ma, short act)
{ {
Material *mao, **matar, ***matarar; Material *mao, **matar, ***matarar;
short *totcolp; short *totcolp;
@@ -709,10 +709,10 @@ void assign_material_id(ID *id, Material *ma, short act)
if (ma) if (ma)
id_us_plus(&ma->id); id_us_plus(&ma->id);
test_all_objects_materials(G.main, id); test_all_objects_materials(bmain, id);
} }
void assign_material(Object *ob, Material *ma, short act, int assign_type) void assign_material(Main *bmain, Object *ob, Material *ma, short act, int assign_type)
{ {
Material *mao, **matar, ***matarar; Material *mao, **matar, ***matarar;
short *totcolp; short *totcolp;
@@ -784,14 +784,14 @@ void assign_material(Object *ob, Material *ma, short act, int assign_type)
if (mao) if (mao)
id_us_min(&mao->id); id_us_min(&mao->id);
ob->mat[act - 1] = ma; ob->mat[act - 1] = ma;
test_object_materials(ob, ob->data); test_object_materials(bmain, ob, ob->data);
} }
else { /* in data */ else { /* in data */
mao = (*matarar)[act - 1]; mao = (*matarar)[act - 1];
if (mao) if (mao)
id_us_min(&mao->id); id_us_min(&mao->id);
(*matarar)[act - 1] = ma; (*matarar)[act - 1] = ma;
test_all_objects_materials(G.main, ob->data); /* Data may be used by several objects... */ test_all_objects_materials(bmain, ob->data); /* Data may be used by several objects... */
} }
if (ma) if (ma)
@@ -884,20 +884,20 @@ void BKE_material_remap_object_calc(
/* XXX - this calls many more update calls per object then are needed, could be optimized */ /* XXX - this calls many more update calls per object then are needed, could be optimized */
void assign_matarar(struct Object *ob, struct Material ***matar, short totcol) void assign_matarar(Main *bmain, struct Object *ob, struct Material ***matar, short totcol)
{ {
int actcol_orig = ob->actcol; int actcol_orig = ob->actcol;
short i; short i;
while ((ob->totcol > totcol) && while ((ob->totcol > totcol) &&
BKE_object_material_slot_remove(ob)) BKE_object_material_slot_remove(bmain, ob))
{ {
/* pass */ /* pass */
} }
/* now we have the right number of slots */ /* now we have the right number of slots */
for (i = 0; i < totcol; i++) for (i = 0; i < totcol; i++)
assign_material(ob, (*matar)[i], i + 1, BKE_MAT_ASSIGN_USERPREF); assign_material(bmain, ob, (*matar)[i], i + 1, BKE_MAT_ASSIGN_USERPREF);
if (actcol_orig > ob->totcol) if (actcol_orig > ob->totcol)
actcol_orig = ob->totcol; actcol_orig = ob->totcol;
@@ -926,17 +926,17 @@ short BKE_object_material_slot_find_index(Object *ob, Material *ma)
return 0; return 0;
} }
bool BKE_object_material_slot_add(Object *ob) bool BKE_object_material_slot_add(Main *bmain, Object *ob)
{ {
if (ob == NULL) return false; if (ob == NULL) return false;
if (ob->totcol >= MAXMAT) return false; if (ob->totcol >= MAXMAT) return false;
assign_material(ob, NULL, ob->totcol + 1, BKE_MAT_ASSIGN_USERPREF); assign_material(bmain, ob, NULL, ob->totcol + 1, BKE_MAT_ASSIGN_USERPREF);
ob->actcol = ob->totcol; ob->actcol = ob->totcol;
return true; return true;
} }
static void do_init_render_material(Material *ma, int r_mode, float *amb) static void do_init_render_material(Main *bmain, Material *ma, int r_mode, float *amb)
{ {
MTex *mtex; MTex *mtex;
int a, needuv = 0, needtang = 0; int a, needuv = 0, needtang = 0;
@@ -995,7 +995,7 @@ static void do_init_render_material(Material *ma, int r_mode, float *amb)
if ((ma->shade_flag & MA_GROUP_LOCAL) && ma->id.lib && ma->group && ma->group->id.lib) { if ((ma->shade_flag & MA_GROUP_LOCAL) && ma->id.lib && ma->group && ma->group->id.lib) {
Group *group; Group *group;
for (group = G.main->group.first; group; group = group->id.next) { for (group = bmain->group.first; group; group = group->id.next) {
if (!ID_IS_LINKED(group) && STREQ(group->id.name, ma->group->id.name)) { if (!ID_IS_LINKED(group) && STREQ(group->id.name, ma->group->id.name)) {
ma->group = group; ma->group = group;
} }
@@ -1003,7 +1003,7 @@ static void do_init_render_material(Material *ma, int r_mode, float *amb)
} }
} }
static void init_render_nodetree(bNodeTree *ntree, Material *basemat, int r_mode, float *amb) static void init_render_nodetree(Main *bmain, bNodeTree *ntree, Material *basemat, int r_mode, float *amb)
{ {
bNode *node; bNode *node;
@@ -1014,7 +1014,7 @@ static void init_render_nodetree(bNodeTree *ntree, Material *basemat, int r_mode
if (GS(node->id->name) == ID_MA) { if (GS(node->id->name) == ID_MA) {
Material *ma = (Material *)node->id; Material *ma = (Material *)node->id;
if (ma != basemat) { if (ma != basemat) {
do_init_render_material(ma, r_mode, amb); do_init_render_material(bmain, ma, r_mode, amb);
basemat->texco |= ma->texco; basemat->texco |= ma->texco;
} }
@@ -1028,7 +1028,7 @@ static void init_render_nodetree(bNodeTree *ntree, Material *basemat, int r_mode
basemat->mode_l |= MA_STR_SURFDIFF; basemat->mode_l |= MA_STR_SURFDIFF;
} }
else if (node->type == NODE_GROUP) else if (node->type == NODE_GROUP)
init_render_nodetree((bNodeTree *)node->id, basemat, r_mode, amb); init_render_nodetree(bmain, (bNodeTree *)node->id, basemat, r_mode, amb);
} }
else if (node->typeinfo->type == SH_NODE_NORMAL_MAP) { else if (node->typeinfo->type == SH_NODE_NORMAL_MAP) {
basemat->mode2_l |= MA_TANGENT_CONCRETE; basemat->mode2_l |= MA_TANGENT_CONCRETE;
@@ -1048,10 +1048,10 @@ static void init_render_nodetree(bNodeTree *ntree, Material *basemat, int r_mode
} }
} }
void init_render_material(Material *mat, int r_mode, float *amb) void init_render_material(Main *bmain, Material *mat, int r_mode, float *amb)
{ {
do_init_render_material(mat, r_mode, amb); do_init_render_material(bmain, mat, r_mode, amb);
if (mat->nodetree && mat->use_nodes) { if (mat->nodetree && mat->use_nodes) {
/* mode_l will take the pipeline options from the main material, and the or-ed /* mode_l will take the pipeline options from the main material, and the or-ed
@@ -1060,7 +1060,7 @@ void init_render_material(Material *mat, int r_mode, float *amb)
mat->mode_l = (mat->mode & MA_MODE_PIPELINE) | MA_SHLESS; mat->mode_l = (mat->mode & MA_MODE_PIPELINE) | MA_SHLESS;
mat->mode2_l = mat->mode2 & MA_MODE2_PIPELINE; mat->mode2_l = mat->mode2 & MA_MODE2_PIPELINE;
mat->nmap_tangent_names_count = 0; mat->nmap_tangent_names_count = 0;
init_render_nodetree(mat->nodetree, mat, r_mode, amb); init_render_nodetree(bmain, mat->nodetree, mat, r_mode, amb);
if (!mat->nodetree->execdata) if (!mat->nodetree->execdata)
mat->nodetree->execdata = ntreeShaderBeginExecTree(mat->nodetree); mat->nodetree->execdata = ntreeShaderBeginExecTree(mat->nodetree);
@@ -1093,11 +1093,11 @@ void init_render_materials(Main *bmain, int r_mode, float *amb, bool do_default_
/* is_used flag comes back in convertblender.c */ /* is_used flag comes back in convertblender.c */
ma->flag &= ~MA_IS_USED; ma->flag &= ~MA_IS_USED;
if (ma->id.us) if (ma->id.us)
init_render_material(ma, r_mode, amb); init_render_material(bmain, ma, r_mode, amb);
} }
if (do_default_material) { if (do_default_material) {
init_render_material(&defmaterial, r_mode, amb); init_render_material(bmain, &defmaterial, r_mode, amb);
} }
} }
@@ -1208,7 +1208,7 @@ void material_drivers_update(Scene *scene, Material *ma, float ctime)
ma->id.tag &= ~LIB_TAG_DOIT; ma->id.tag &= ~LIB_TAG_DOIT;
} }
bool BKE_object_material_slot_remove(Object *ob) bool BKE_object_material_slot_remove(Main *bmain, Object *ob)
{ {
Material *mao, ***matarar; Material *mao, ***matarar;
short *totcolp; short *totcolp;
@@ -1259,7 +1259,7 @@ bool BKE_object_material_slot_remove(Object *ob)
actcol = ob->actcol; actcol = ob->actcol;
for (Object *obt = G.main->object.first; obt; obt = obt->id.next) { for (Object *obt = bmain->object.first; obt; obt = obt->id.next) {
if (obt->data == ob->data) { if (obt->data == ob->data) {
/* Can happen when object material lists are used, see: T52953 */ /* Can happen when object material lists are used, see: T52953 */
if (actcol > obt->totcol) { if (actcol > obt->totcol) {
@@ -1709,7 +1709,7 @@ void free_matcopybuf(void)
matcopied = 0; matcopied = 0;
} }
void copy_matcopybuf(Material *ma) void copy_matcopybuf(Main *bmain, Material *ma)
{ {
int a; int a;
MTex *mtex; MTex *mtex;
@@ -1727,13 +1727,13 @@ void copy_matcopybuf(Material *ma)
matcopybuf.mtex[a] = MEM_dupallocN(mtex); matcopybuf.mtex[a] = MEM_dupallocN(mtex);
} }
} }
matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, G.main, false); matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, bmain, false);
matcopybuf.preview = NULL; matcopybuf.preview = NULL;
BLI_listbase_clear(&matcopybuf.gpumaterial); BLI_listbase_clear(&matcopybuf.gpumaterial);
matcopied = 1; matcopied = 1;
} }
void paste_matcopybuf(Material *ma) void paste_matcopybuf(Main *bmain, Material *ma)
{ {
int a; int a;
MTex *mtex; MTex *mtex;
@@ -1772,7 +1772,7 @@ void paste_matcopybuf(Material *ma)
ma->mtex[a] = MEM_dupallocN(mtex); ma->mtex[a] = MEM_dupallocN(mtex);
if (mtex->tex) { if (mtex->tex) {
/* first check this is in main (we may have loaded another file) [#35500] */ /* first check this is in main (we may have loaded another file) [#35500] */
if (BLI_findindex(&G.main->tex, mtex->tex) != -1) { if (BLI_findindex(&bmain->tex, mtex->tex) != -1) {
id_us_plus((ID *)mtex->tex); id_us_plus((ID *)mtex->tex);
} }
else { else {
@@ -1782,7 +1782,7 @@ void paste_matcopybuf(Material *ma)
} }
} }
ma->nodetree = ntreeCopyTree_ex(matcopybuf.nodetree, G.main, false); ma->nodetree = ntreeCopyTree_ex(matcopybuf.nodetree, bmain, false);
} }
@@ -1921,9 +1921,9 @@ static short mesh_getmaterialnumber(Mesh *me, Material *ma)
} }
/* append material */ /* append material */
static short mesh_addmaterial(Mesh *me, Material *ma) static short mesh_addmaterial(Main *bmain, Mesh *me, Material *ma)
{ {
BKE_material_append_id(G.main, &me->id, NULL); BKE_material_append_id(bmain, &me->id, NULL);
me->mat[me->totcol - 1] = ma; me->mat[me->totcol - 1] = ma;
id_us_plus(&ma->id); id_us_plus(&ma->id);
@@ -1943,7 +1943,7 @@ static void set_facetexture_flags(Material *ma, Image *image)
} }
/* returns material number */ /* returns material number */
static short convert_tfacenomaterial(Main *main, Mesh *me, MTFace *tf, int flag) static short convert_tfacenomaterial(Main *bmain, Mesh *me, MTFace *tf, int flag)
{ {
Material *ma; Material *ma;
char idname[MAX_ID_NAME]; char idname[MAX_ID_NAME];
@@ -1952,21 +1952,21 @@ static short convert_tfacenomaterial(Main *main, Mesh *me, MTFace *tf, int flag)
/* new material, the name uses the flag*/ /* new material, the name uses the flag*/
BLI_snprintf(idname, sizeof(idname), "MAMaterial.TF.%0*d", integer_getdigits(flag), flag); BLI_snprintf(idname, sizeof(idname), "MAMaterial.TF.%0*d", integer_getdigits(flag), flag);
if ((ma = BLI_findstring(&main->mat, idname + 2, offsetof(ID, name) + 2))) { if ((ma = BLI_findstring(&bmain->mat, idname + 2, offsetof(ID, name) + 2))) {
mat_nr = mesh_getmaterialnumber(me, ma); mat_nr = mesh_getmaterialnumber(me, ma);
/* assign the material to the mesh */ /* assign the material to the mesh */
if (mat_nr == -1) mat_nr = mesh_addmaterial(me, ma); if (mat_nr == -1) mat_nr = mesh_addmaterial(bmain, me, ma);
/* if needed set "Face Textures [Alpha]" Material options */ /* if needed set "Face Textures [Alpha]" Material options */
set_facetexture_flags(ma, tf->tpage); set_facetexture_flags(ma, tf->tpage);
} }
/* create a new material */ /* create a new material */
else { else {
ma = BKE_material_add(main, idname + 2); ma = BKE_material_add(bmain, idname + 2);
if (ma) { if (ma) {
printf("TexFace Convert: Material \"%s\" created.\n", idname + 2); printf("TexFace Convert: Material \"%s\" created.\n", idname + 2);
mat_nr = mesh_addmaterial(me, ma); mat_nr = mesh_addmaterial(bmain, me, ma);
/* if needed set "Face Textures [Alpha]" Material options */ /* if needed set "Face Textures [Alpha]" Material options */
set_facetexture_flags(ma, tf->tpage); set_facetexture_flags(ma, tf->tpage);
@@ -1989,7 +1989,7 @@ static short convert_tfacenomaterial(Main *main, Mesh *me, MTFace *tf, int flag)
} }
/* Function to fully convert materials */ /* Function to fully convert materials */
static void convert_tfacematerial(Main *main, Material *ma) static void convert_tfacematerial(Main *bmain, Material *ma)
{ {
Mesh *me; Mesh *me;
Material *mat_new; Material *mat_new;
@@ -2001,7 +2001,7 @@ static void convert_tfacematerial(Main *main, Material *ma)
CustomDataLayer *cdl; CustomDataLayer *cdl;
char idname[MAX_ID_NAME]; char idname[MAX_ID_NAME];
for (me = main->mesh.first; me; me = me->id.next) { for (me = bmain->mesh.first; me; me = me->id.next) {
/* check if this mesh uses this material */ /* check if this mesh uses this material */
for (a = 0; a < me->totcol; a++) for (a = 0; a < me->totcol; a++)
if (me->mat[a] == ma) break; if (me->mat[a] == ma) break;
@@ -2025,21 +2025,21 @@ static void convert_tfacematerial(Main *main, Material *ma)
/* the name of the new material */ /* the name of the new material */
calculate_tface_materialname(ma->id.name, (char *)&idname, flag); calculate_tface_materialname(ma->id.name, (char *)&idname, flag);
if ((mat_new = BLI_findstring(&main->mat, idname + 2, offsetof(ID, name) + 2))) { if ((mat_new = BLI_findstring(&bmain->mat, idname + 2, offsetof(ID, name) + 2))) {
/* material already existent, see if the mesh has it */ /* material already existent, see if the mesh has it */
mat_nr = mesh_getmaterialnumber(me, mat_new); mat_nr = mesh_getmaterialnumber(me, mat_new);
/* material is not in the mesh, add it */ /* material is not in the mesh, add it */
if (mat_nr == -1) mat_nr = mesh_addmaterial(me, mat_new); if (mat_nr == -1) mat_nr = mesh_addmaterial(bmain, me, mat_new);
} }
/* create a new material */ /* create a new material */
else { else {
mat_new = BKE_material_copy(main, ma); mat_new = BKE_material_copy(bmain, ma);
if (mat_new) { if (mat_new) {
/* rename the material*/ /* rename the material*/
BLI_strncpy(mat_new->id.name, idname, sizeof(mat_new->id.name)); BLI_strncpy(mat_new->id.name, idname, sizeof(mat_new->id.name));
id_us_min((ID *)mat_new); id_us_min((ID *)mat_new);
mat_nr = mesh_addmaterial(me, mat_new); mat_nr = mesh_addmaterial(bmain, me, mat_new);
decode_tfaceflag(mat_new, flag, 1); decode_tfaceflag(mat_new, flag, 1);
} }
else { else {
@@ -2062,7 +2062,7 @@ static void convert_tfacematerial(Main *main, Material *ma)
/* remove material from mesh */ /* remove material from mesh */
for (a = 0; a < me->totcol; ) { for (a = 0; a < me->totcol; ) {
if (me->mat[a] == ma) { if (me->mat[a] == ma) {
BKE_material_pop_id(main, &me->id, a, true); BKE_material_pop_id(bmain, &me->id, a, true);
} }
else { else {
a++; a++;

View File

@@ -880,7 +880,7 @@ Mesh *BKE_mesh_from_object(Object *ob)
else return NULL; else return NULL;
} }
void BKE_mesh_assign_object(Object *ob, Mesh *me) void BKE_mesh_assign_object(Main *bmain, Object *ob, Mesh *me)
{ {
Mesh *old = NULL; Mesh *old = NULL;
@@ -896,7 +896,7 @@ void BKE_mesh_assign_object(Object *ob, Mesh *me)
id_us_plus((ID *)me); id_us_plus((ID *)me);
} }
test_object_materials(ob, (ID *)me); test_object_materials(bmain, ob, (ID *)me);
test_object_modifiers(ob); test_object_modifiers(ob);
} }

View File

@@ -1077,7 +1077,7 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri
// Attention! This temporaly assigns material to object on purpose! // Attention! This temporaly assigns material to object on purpose!
// See note above. // See note above.
ob->actcol=0; ob->actcol=0;
assign_material(ob, ma, mat_index + 1, BKE_MAT_ASSIGN_OBJECT); assign_material(G.main, ob, ma, mat_index + 1, BKE_MAT_ASSIGN_OBJECT);
COLLADAFW::TextureCoordinateBindingArray& tex_array = COLLADAFW::TextureCoordinateBindingArray& tex_array =
cmaterial.getTextureCoordinateBindingArray(); cmaterial.getTextureCoordinateBindingArray();
@@ -1172,7 +1172,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
Mesh *old_mesh = (Mesh *)ob->data; Mesh *old_mesh = (Mesh *)ob->data;
Mesh *new_mesh = uid_mesh_map[*geom_uid]; Mesh *new_mesh = uid_mesh_map[*geom_uid];
BKE_mesh_assign_object(ob, new_mesh); BKE_mesh_assign_object(G.main, ob, new_mesh);
BKE_mesh_calc_normals(new_mesh); BKE_mesh_calc_normals(new_mesh);
id_us_plus(&old_mesh->id); /* Because BKE_mesh_assign_object would have already decreased it... */ id_us_plus(&old_mesh->id); /* Because BKE_mesh_assign_object would have already decreased it... */

View File

@@ -3207,7 +3207,7 @@ static Base *mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMe
base_new = ED_object_add_duplicate(bmain, scene, base_old, USER_DUP_MESH); base_new = ED_object_add_duplicate(bmain, scene, base_old, USER_DUP_MESH);
/* DAG_relations_tag_update(bmain); */ /* normally would call directly after but in this case delay recalc */ /* DAG_relations_tag_update(bmain); */ /* normally would call directly after but in this case delay recalc */
assign_matarar(base_new->object, give_matarar(obedit), *give_totcolp(obedit)); /* new in 2.5 */ assign_matarar(bmain, base_new->object, give_matarar(obedit), *give_totcolp(obedit)); /* new in 2.5 */
ED_base_object_select(base_new, BA_SELECT); ED_base_object_select(base_new, BA_SELECT);

View File

@@ -1570,7 +1570,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
ob_dst->data = obdata_id; ob_dst->data = obdata_id;
/* if amount of material indices changed: */ /* if amount of material indices changed: */
test_object_materials(ob_dst, ob_dst->data); test_object_materials(bmain, ob_dst, ob_dst->data);
DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA); DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
break; break;
@@ -1578,7 +1578,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
/* new approach, using functions from kernel */ /* new approach, using functions from kernel */
for (a = 0; a < ob_src->totcol; a++) { for (a = 0; a < ob_src->totcol; a++) {
Material *ma = give_current_material(ob_src, a + 1); Material *ma = give_current_material(ob_src, a + 1);
assign_material(ob_dst, ma, a + 1, BKE_MAT_ASSIGN_USERPREF); /* also works with ma==NULL */ assign_material(bmain, ob_dst, ma, a + 1, BKE_MAT_ASSIGN_USERPREF); /* also works with ma==NULL */
} }
DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA); DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
break; break;
@@ -1978,7 +1978,7 @@ static void single_mat_users(Main *bmain, Scene *scene, const int flag, const bo
BKE_animdata_copy_id_action(&man->id, false); BKE_animdata_copy_id_action(&man->id, false);
man->id.us = 0; man->id.us = 0;
assign_material(ob, man, a, BKE_MAT_ASSIGN_USERPREF); assign_material(bmain, ob, man, a, BKE_MAT_ASSIGN_USERPREF);
if (do_textures) { if (do_textures) {
for (b = 0; b < MAX_MTEX; b++) { for (b = 0; b < MAX_MTEX; b++) {
@@ -2494,7 +2494,7 @@ static int drop_named_material_invoke(bContext *C, wmOperator *op, const wmEvent
if (base == NULL || ma == NULL) if (base == NULL || ma == NULL)
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;
assign_material(base->object, ma, 1, BKE_MAT_ASSIGN_USERPREF); assign_material(CTX_data_main(C), base->object, ma, 1, BKE_MAT_ASSIGN_USERPREF);
DAG_id_tag_update(&base->object->id, OB_RECALC_OB); DAG_id_tag_update(&base->object->id, OB_RECALC_OB);

View File

@@ -336,7 +336,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
BLI_addtail(&pr_main->mat, mat); BLI_addtail(&pr_main->mat, mat);
if (!BKE_scene_use_new_shading_nodes(scene)) { if (!BKE_scene_use_new_shading_nodes(scene)) {
init_render_material(mat, 0, NULL); /* call that retrieves mode_l */ init_render_material(bmain, mat, 0, NULL); /* call that retrieves mode_l */
end_render_material(mat); end_render_material(mat);
/* un-useful option */ /* un-useful option */

View File

@@ -97,12 +97,13 @@
static int material_slot_add_exec(bContext *C, wmOperator *UNUSED(op)) static int material_slot_add_exec(bContext *C, wmOperator *UNUSED(op))
{ {
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C); Object *ob = ED_object_context(C);
if (!ob) if (!ob)
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;
BKE_object_material_slot_add(ob); BKE_object_material_slot_add(bmain, ob);
if (ob->mode & OB_MODE_TEXTURE_PAINT) { if (ob->mode & OB_MODE_TEXTURE_PAINT) {
Scene *scene = CTX_data_scene(C); Scene *scene = CTX_data_scene(C);
@@ -145,7 +146,7 @@ static int material_slot_remove_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;
} }
BKE_object_material_slot_remove(ob); BKE_object_material_slot_remove(CTX_data_main(C), ob);
if (ob->mode & OB_MODE_TEXTURE_PAINT) { if (ob->mode & OB_MODE_TEXTURE_PAINT) {
Scene *scene = CTX_data_scene(C); Scene *scene = CTX_data_scene(C);
@@ -345,6 +346,7 @@ void OBJECT_OT_material_slot_deselect(wmOperatorType *ot)
static int material_slot_copy_exec(bContext *C, wmOperator *UNUSED(op)) static int material_slot_copy_exec(bContext *C, wmOperator *UNUSED(op))
{ {
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C); Object *ob = ED_object_context(C);
Material ***matar; Material ***matar;
@@ -355,7 +357,7 @@ static int material_slot_copy_exec(bContext *C, wmOperator *UNUSED(op))
{ {
if (ob != ob_iter && give_matarar(ob_iter)) { if (ob != ob_iter && give_matarar(ob_iter)) {
if (ob->data != ob_iter->data) if (ob->data != ob_iter->data)
assign_matarar(ob_iter, matar, ob->totcol); assign_matarar(bmain, ob_iter, matar, ob->totcol);
if (ob_iter->totcol == ob->totcol) { if (ob_iter->totcol == ob->totcol) {
ob_iter->actcol = ob->actcol; ob_iter->actcol = ob->actcol;
@@ -1704,7 +1706,7 @@ static int copy_material_exec(bContext *C, wmOperator *UNUSED(op))
if (ma == NULL) if (ma == NULL)
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;
copy_matcopybuf(ma); copy_matcopybuf(CTX_data_main(C), ma);
return OPERATOR_FINISHED; return OPERATOR_FINISHED;
} }
@@ -1730,7 +1732,7 @@ static int paste_material_exec(bContext *C, wmOperator *UNUSED(op))
if (ma == NULL) if (ma == NULL)
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;
paste_matcopybuf(ma); paste_matcopybuf(CTX_data_main(C), ma);
WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma); WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma);

View File

@@ -5769,14 +5769,15 @@ static int texture_paint_add_texture_paint_slot_exec(bContext *C, wmOperator *op
static int texture_paint_add_texture_paint_slot_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) static int texture_paint_add_texture_paint_slot_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{ {
char imagename[MAX_ID_NAME - 2]; char imagename[MAX_ID_NAME - 2];
Main *bmain = CTX_data_main(C);
Object *ob = CTX_data_active_object(C); Object *ob = CTX_data_active_object(C);
Material *ma = give_current_material(ob, ob->actcol); Material *ma = give_current_material(ob, ob->actcol);
int type = RNA_enum_get(op->ptr, "type"); int type = RNA_enum_get(op->ptr, "type");
if (!ma) { if (!ma) {
ma = BKE_material_add(CTX_data_main(C), "Material"); ma = BKE_material_add(bmain, "Material");
/* no material found, just assign to first slot */ /* no material found, just assign to first slot */
assign_material(ob, ma, ob->actcol, BKE_MAT_ASSIGN_USERPREF); assign_material(bmain, ob, ma, ob->actcol, BKE_MAT_ASSIGN_USERPREF);
} }
type = RNA_enum_from_value(layer_type_items, type); type = RNA_enum_from_value(layer_type_items, type);

View File

@@ -2291,6 +2291,7 @@ static int material_drop_invoke(bContext *C, wmOperator *op, const wmEvent *even
{ {
Material *ma = NULL; Material *ma = NULL;
Object *ob = NULL; Object *ob = NULL;
Main *bmain = CTX_data_main(C);
SpaceOops *soops = CTX_wm_space_outliner(C); SpaceOops *soops = CTX_wm_space_outliner(C);
ARegion *ar = CTX_wm_region(C); ARegion *ar = CTX_wm_region(C);
TreeElement *te = NULL; TreeElement *te = NULL;
@@ -2313,7 +2314,7 @@ static int material_drop_invoke(bContext *C, wmOperator *op, const wmEvent *even
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;
} }
assign_material(ob, ma, ob->totcol + 1, BKE_MAT_ASSIGN_USERPREF); assign_material(bmain, ob, ma, ob->totcol + 1, BKE_MAT_ASSIGN_USERPREF);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C)); WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma); WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma);

View File

@@ -907,7 +907,7 @@ void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex)
material_index++; material_index++;
} // loop over strokes } // loop over strokes
test_object_materials(object_mesh, (ID *)mesh); test_object_materials(freestyle_bmain, object_mesh, (ID *)mesh);
#if 0 // XXX #if 0 // XXX
BLI_assert(mesh->totvert == vertex_index); BLI_assert(mesh->totvert == vertex_index);

View File

@@ -414,7 +414,7 @@ int rna_IDMaterials_assign_int(PointerRNA *ptr, int key, const PointerRNA *assig
short *totcol = give_totcolp_id(id); short *totcol = give_totcolp_id(id);
Material *mat_id = assign_ptr->id.data; Material *mat_id = assign_ptr->id.data;
if (totcol && (key >= 0 && key < *totcol)) { if (totcol && (key >= 0 && key < *totcol)) {
assign_material_id(id, mat_id, key + 1); assign_material_id(G.main, id, mat_id, key + 1);
return 1; return 1;
} }
else { else {

View File

@@ -244,7 +244,7 @@ static Object *rna_Main_objects_new(Main *bmain, ReportList *reports, const char
id_us_min(&ob->id); id_us_min(&ob->id);
ob->data = data; ob->data = data;
test_object_materials(ob, ob->data); test_object_materials(bmain, ob, ob->data);
return ob; return ob;
} }

View File

@@ -393,7 +393,7 @@ static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value)
} }
} }
else if (ob->type == OB_MESH) { else if (ob->type == OB_MESH) {
BKE_mesh_assign_object(ob, (Mesh *)id); BKE_mesh_assign_object(G.main, ob, (Mesh *)id);
} }
else { else {
if (ob->data) { if (ob->data) {
@@ -405,7 +405,7 @@ static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value)
id_us_plus(id); id_us_plus(id);
ob->data = id; ob->data = id;
test_object_materials(ob, id); test_object_materials(G.main, ob, id);
if (GS(id->name) == ID_CU) if (GS(id->name) == ID_CU)
BKE_curve_type_test(ob); BKE_curve_type_test(ob);
@@ -713,7 +713,7 @@ static void rna_Object_active_material_set(PointerRNA *ptr, PointerRNA value)
Object *ob = (Object *)ptr->id.data; Object *ob = (Object *)ptr->id.data;
DAG_id_tag_update(value.data, 0); DAG_id_tag_update(value.data, 0);
assign_material(ob, value.data, ob->actcol, BKE_MAT_ASSIGN_EXISTING); assign_material(G.main, ob, value.data, ob->actcol, BKE_MAT_ASSIGN_EXISTING);
} }
static int rna_Object_active_material_editable(PointerRNA *ptr, const char **UNUSED(r_info)) static int rna_Object_active_material_editable(PointerRNA *ptr, const char **UNUSED(r_info))
@@ -885,7 +885,7 @@ static void rna_MaterialSlot_material_set(PointerRNA *ptr, PointerRNA value)
Object *ob = (Object *)ptr->id.data; Object *ob = (Object *)ptr->id.data;
int index = (Material **)ptr->data - ob->mat; int index = (Material **)ptr->data - ob->mat;
assign_material(ob, value.data, index + 1, BKE_MAT_ASSIGN_EXISTING); assign_material(G.main, ob, value.data, index + 1, BKE_MAT_ASSIGN_EXISTING);
} }
static int rna_MaterialSlot_link_get(PointerRNA *ptr) static int rna_MaterialSlot_link_get(PointerRNA *ptr)