Page MenuHome

material.patch

material.patch

Index: material.c
===================================================================
--- material.c (revision 33560)
+++ material.c (working copy)
@@ -528,11 +528,14 @@
/* if object cannot have material, totcolp==NULL */
totcolp= give_totcolp(ob);
+
if(totcolp==NULL || ob->totcol==0) return NULL;
+ matarar= give_matarar(ob);
+ ob->mat = *matarar;
if(act>ob->totcol) act= ob->totcol;
else if(act<=0) act= 1;
-
+
if(ob->matbits && ob->matbits[act-1]) { /* in object */
ma= ob->mat[act-1];
}
@@ -650,34 +653,29 @@
totcolp= give_totcolp(ob);
matarar= give_matarar(ob);
-
+
if(totcolp==0 || matarar==0) return;
if(act > *totcolp) {
matar= MEM_callocN(sizeof(void *)*act, "matarray1");
+ matbits= MEM_callocN(sizeof(char)*act, "matbits1");
if(*totcolp) {
memcpy(matar, *matarar, sizeof(void *)*(*totcolp));
+ memcpy(matbits, ob->matbits, sizeof(char)*(*totcolp));
+
MEM_freeN(*matarar);
+ MEM_freeN(ob->matbits);
}
*matarar= matar;
*totcolp= act;
}
-
if(act > ob->totcol) {
- matar= MEM_callocN(sizeof(void *)*act, "matarray2");
- matbits= MEM_callocN(sizeof(char)*act, "matbits1");
- if( ob->totcol) {
- memcpy(matar, ob->mat, sizeof(void *)*( ob->totcol ));
- memcpy(matbits, ob->matbits, sizeof(char)*(*totcolp));
- MEM_freeN(ob->mat);
- MEM_freeN(ob->matbits);
- }
+
ob->mat= matar;
ob->matbits= matbits;
ob->totcol= act;
-
/* copy object/mesh linking, or assign based on userpref */
if(ob->actcol)
ob->matbits[act-1]= ob->matbits[ob->actcol-1];
@@ -700,6 +698,7 @@
if(ma)
id_us_plus((ID *)ma);
+
test_object_materials(ob->data);
}
@@ -994,30 +993,23 @@
mao= (*matarar)[ob->actcol-1];
if(mao) mao->id.us--;
}
-
- for(a=ob->actcol; a<ob->totcol; a++)
+ for(a=ob->actcol; a<ob->totcol; a++)
(*matarar)[a-1]= (*matarar)[a];
+
(*totcolp)--;
+ ob->mat = (*matarar);
- if(*totcolp==0) {
- MEM_freeN(*matarar);
- *matarar= 0;
- }
-
+
+
actcol= ob->actcol;
obt= G.main->object.first;
while(obt) {
if(obt->data==ob->data) {
-
/* WATCH IT: do not use actcol from ob or from obt (can become zero) */
mao= obt->mat[actcol-1];
- if(mao) mao->id.us--;
- for(a=actcol; a<obt->totcol; a++) {
- obt->mat[a-1]= obt->mat[a];
- obt->matbits[a-1]= obt->matbits[a];
- }
+
obt->totcol--;
if(obt->actcol > obt->totcol) obt->actcol= obt->totcol;

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
f4/84/65d8743864b1d6892437373a0c34

Event Timeline