Merged changes in the trunk up to revision 36408.
[blender.git] / source / blender / blenkernel / intern / material.c
index 000bdc138a4bcc5c1e155e6fe9c298d74e5825d6..a063458bdb5fbbb5395318ccc8aec3171f72300d 100644 (file)
@@ -268,6 +268,14 @@ Material *localize_material(Material *ma)
        return man;
 }
 
+static void extern_local_material(Material *ma)
+{
+       int i;
+       for(i=0; i < MAX_MTEX; i++) {
+               if(ma->mtex[i]) id_lib_extern((ID *)ma->mtex[i]->tex);
+       }
+}
+
 void make_local_material(Material *ma)
 {
        Main *bmain= G.main;
@@ -287,11 +295,9 @@ void make_local_material(Material *ma)
        if(ma->id.us==1) {
                ma->id.lib= NULL;
                ma->id.flag= LIB_LOCAL;
-               new_id(NULL, (ID *)ma, NULL);
-               for(a=0; a<MAX_MTEX; a++) {
-                       if(ma->mtex[a]) id_lib_extern((ID *)ma->mtex[a]->tex);
-               }
-               
+
+               new_id(&bmain->mat, (ID *)ma, NULL);
+               extern_local_material(ma);
                return;
        }
        
@@ -351,12 +357,9 @@ void make_local_material(Material *ma)
        if(local && lib==0) {
                ma->id.lib= NULL;
                ma->id.flag= LIB_LOCAL;
-               
-               for(a=0; a<MAX_MTEX; a++) {
-                       if(ma->mtex[a]) id_lib_extern((ID *)ma->mtex[a]->tex);
-               }
-               
-               new_id(NULL, (ID *)ma, NULL);
+
+               new_id(&bmain->mat, (ID *)ma, NULL);
+               extern_local_material(ma);
        }
        else if(local && lib) {
                
@@ -430,6 +433,15 @@ void make_local_material(Material *ma)
        }
 }
 
+/* for curve, mball, mesh types */
+void extern_local_matarar(struct Material **matar, short totcol)
+{
+       short i;
+       for(i= 0; i < totcol; i++) {
+               id_lib_extern((ID *)matar[i]);
+       }
+}
+
 Material ***give_matarar(Object *ob)
 {
        Mesh *me;