/* slot -1 for first free ID */ MTex *BKE_texture_mtex_add_id(ID *id, int slot) { MTex **mtex_ar; short act; give_active_mtex(id, &mtex_ar, &act); if (mtex_ar == NULL) { return NULL; } if (slot == -1) { /* find first free */ int i; for (i = 0; i < MAX_MTEX; i++) { if (!mtex_ar[i]) { slot = i; break; } } if (slot == -1) { return NULL; } } else { /* make sure slot is valid */ if (slot < 0 || slot >= MAX_MTEX) { return NULL; } } if (mtex_ar[slot]) { id_us_min((ID *)mtex_ar[slot]->tex); MEM_freeN(mtex_ar[slot]); mtex_ar[slot] = NULL; } else if (GS(id->name) == ID_MA) { /* Reset this slot's ON/OFF toggle, for materials, when slot was empty. */ ((Material *)id)->septex &= ~(1 << slot); } mtex_ar[slot] = BKE_texture_mtex_add(); return mtex_ar[slot]; }
/* slot -1 for first free ID */ MTex *add_mtex_id(ID *id, int slot) { MTex **mtex_ar; short act; give_active_mtex(id, &mtex_ar, &act); if (mtex_ar == NULL) { return NULL; } if (slot == -1) { /* find first free */ int i; for (i = 0; i < MAX_MTEX; i++) { if (!mtex_ar[i]) { slot = i; break; } } if (slot == -1) { return NULL; } } else { /* make sure slot is valid */ if (slot < 0 || slot >= MAX_MTEX) { return NULL; } } if (mtex_ar[slot]) { id_us_min((ID *)mtex_ar[slot]->tex); MEM_freeN(mtex_ar[slot]); mtex_ar[slot] = NULL; } mtex_ar[slot] = add_mtex(); return mtex_ar[slot]; }