[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40382] trunk/blender: changes for materials to treat them as shorts not int/chars ( since they are stored as shorts intermally)

Campbell Barton ideasman42 at gmail.com
Tue Sep 20 08:25:15 CEST 2011


Revision: 40382
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40382
Author:   campbellbarton
Date:     2011-09-20 06:25:15 +0000 (Tue, 20 Sep 2011)
Log Message:
-----------
changes for materials to treat them as shorts not int/chars (since they are stored as shorts intermally)
- converting nurbs to mesh was casting the material to unsigned char.
- subsurf was casting to char, then int -> short in a loop.
- have material functions take & return shorts.

Modified Paths:
--------------
    trunk/blender/build_files/cmake/cmake_static_check_splint.py
    trunk/blender/source/blender/blenkernel/BKE_material.h
    trunk/blender/source/blender/blenkernel/BKE_mesh.h
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/collada/GeometryExporter.cpp
    trunk/blender/source/blender/collada/GeometryExporter.h
    trunk/blender/source/blender/collada/MeshImporter.cpp
    trunk/blender/source/blender/collada/MeshImporter.h
    trunk/blender/source/blender/editors/mesh/meshtools.c
    trunk/blender/source/blender/editors/space_view3d/drawmesh.c
    trunk/blender/source/blender/makesdna/DNA_material_types.h
    trunk/blender/source/blender/makesrna/intern/rna_curve.c
    trunk/blender/source/blender/render/intern/source/convertblender.c

Modified: trunk/blender/build_files/cmake/cmake_static_check_splint.py
===================================================================
--- trunk/blender/build_files/cmake/cmake_static_check_splint.py	2011-09-20 05:45:54 UTC (rev 40381)
+++ trunk/blender/build_files/cmake/cmake_static_check_splint.py	2011-09-20 06:25:15 UTC (rev 40382)
@@ -58,6 +58,10 @@
     # re-definitions, rna causes most of these
     "-redef",
     "-syntax",
+    
+    # dummy, witjout this splint complains with:
+    #  /usr/include/bits/confname.h:31:27: *** Internal Bug at cscannerHelp.c:2428: Unexpanded macro not function or constant: int _PC_MAX_CANON 
+    "-D_PC_MAX_CANON=0",
     ]
 
 

Modified: trunk/blender/source/blender/blenkernel/BKE_material.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_material.h	2011-09-20 05:45:54 UTC (rev 40381)
+++ trunk/blender/source/blender/blenkernel/BKE_material.h	2011-09-20 06:25:15 UTC (rev 40382)
@@ -69,19 +69,19 @@
 struct Material ***give_matarar_id(struct ID *id); /* same but for ID's */
 short *give_totcolp_id(struct ID *id);
 
-struct Material *give_current_material(struct Object *ob, int act);
-struct ID *material_from(struct Object *ob, int act);
-void assign_material(struct Object *ob, struct Material *ma, int act);
-void assign_matarar(struct Object *ob, struct Material ***matar, int totcol);
+struct Material *give_current_material(struct Object *ob, short act);
+struct ID *material_from(struct Object *ob, short act);
+void assign_material(struct Object *ob, struct Material *ma, short act);
+void assign_matarar(struct Object *ob, struct Material ***matar, short totcol);
 
-int find_material_index(struct Object *ob, struct Material *ma);
+short find_material_index(struct Object *ob, struct Material *ma);
 
 int object_add_material_slot(struct Object *ob);
 int object_remove_material_slot(struct Object *ob);
 
 /* rna api */
 void material_append_id(struct ID *id, struct Material *ma);
-struct Material *material_pop_id(struct ID *id, int index, int remove_material_slot);
+struct Material *material_pop_id(struct ID *id, int index, int remove_material_slot); /* index is an int because of RNA */
 
 /* rendering */
 

Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mesh.h	2011-09-20 05:45:54 UTC (rev 40381)
+++ trunk/blender/source/blender/blenkernel/BKE_mesh.h	2011-09-20 06:25:15 UTC (rev 40382)
@@ -84,7 +84,7 @@
 void mesh_to_curve(struct Scene *scene, struct Object *ob);
 void free_dverts(struct MDeformVert *dvert, int totvert);
 void copy_dverts(struct MDeformVert *dst, struct MDeformVert *src, int totvert); /* __NLA */
-void mesh_delete_material_index(struct Mesh *me, int index);
+void mesh_delete_material_index(struct Mesh *me, short index);
 void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
 
 struct BoundBox *mesh_get_bb(struct Object *ob);

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2011-09-20 05:45:54 UTC (rev 40381)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2011-09-20 06:25:15 UTC (rev 40382)
@@ -524,7 +524,7 @@
 	return NULL;
 }
 
-static void data_delete_material_index_id(ID *id, int index)
+static void data_delete_material_index_id(ID *id, short index)
 {
 	switch(GS(id->name)) {
 	case ID_ME:
@@ -556,8 +556,9 @@
 	}
 }
 
-Material *material_pop_id(ID *id, int index, int remove_material_slot)
+Material *material_pop_id(ID *id, int index_i, int remove_material_slot)
 {
+	short index= (short)index_i;
 	Material *ret= NULL;
 	Material ***matar;
 	if((matar= give_matarar_id(id))) {
@@ -600,7 +601,7 @@
 	return ret;
 }
 
-Material *give_current_material(Object *ob, int act)
+Material *give_current_material(Object *ob, short act)
 {
 	Material ***matarar, *ma;
 	short *totcolp;
@@ -638,7 +639,7 @@
 	return ma;
 }
 
-ID *material_from(Object *ob, int act)
+ID *material_from(Object *ob, short act)
 {
 
 	if(ob==NULL) return NULL;
@@ -722,7 +723,7 @@
 	}
 }
 
-void assign_material(Object *ob, Material *ma, int act)
+void assign_material(Object *ob, Material *ma, short act)
 {
 	Material *mao, **matar, ***matarar;
 	char *matbits;
@@ -793,9 +794,10 @@
 }
 
 /* XXX - this calls many more update calls per object then are needed, could be optimized */
-void assign_matarar(struct Object *ob, struct Material ***matar, int totcol)
+void assign_matarar(struct Object *ob, struct Material ***matar, short totcol)
 {
-	int i, actcol_orig= ob->actcol;
+	int actcol_orig= ob->actcol;
+	short i;
 
 	while(object_remove_material_slot(ob)) {};
 
@@ -810,7 +812,7 @@
 }
 
 
-int find_material_index(Object *ob, Material *ma)
+short find_material_index(Object *ob, Material *ma)
 {
 	Material ***matarar;
 	short a, *totcolp;
@@ -1062,7 +1064,7 @@
 	Material *mao, ***matarar;
 	Object *obt;
 	short *totcolp;
-	int a, actcol;
+	short a, actcol;
 	
 	if(ob==NULL || ob->totcol==0) return FALSE;
 	
@@ -1600,18 +1602,21 @@
 }
 
 /* returns -1 if no match */
-static int mesh_getmaterialnumber(Mesh *me, Material *ma) {
-	int a;
+static short mesh_getmaterialnumber(Mesh *me, Material *ma)
+{
+	short a;
 
-	for (a=0; a<me->totcol; a++)
-		if (me->mat[a] == ma)
+	for (a=0; a<me->totcol; a++) {
+		if (me->mat[a] == ma) {
 			return a;
+		}
+	}
 
 	return -1;
 }
 
 /* append material */
-static int mesh_addmaterial(Mesh *me, Material *ma)
+static short mesh_addmaterial(Mesh *me, Material *ma)
 {
 	material_append_id(&me->id, NULL);
 	me->mat[me->totcol-1]= ma;
@@ -1633,11 +1638,11 @@
 }
 
 /* returns material number */
-static int convert_tfacenomaterial(Main *main, Mesh *me, MTFace *tf, int flag)
+static short convert_tfacenomaterial(Main *main, Mesh *me, MTFace *tf, int flag)
 {
 	Material *ma;
 	char idname[MAX_ID_NAME];
-	int mat_nr= -1;
+	short mat_nr= -1;
 	
 	/* new material, the name uses the flag*/
 	sprintf(idname, "MAMaterial.TF.%0*d", integer_getdigits(flag), flag);
@@ -1684,7 +1689,8 @@
 	MFace *mf;
 	MTFace *tf;
 	int flag, index;
-	int a, mat_nr;
+	int a;
+	short mat_nr;
 	CustomDataLayer *cdl;
 	char idname[MAX_ID_NAME];
 
@@ -1703,7 +1709,7 @@
 
 		/* loop over all the faces and stop at the ones that use the material*/
 		for(a=0, mf=me->mface; a<me->totface; a++, mf++) {
-			if(me->mat[(int)mf->mat_nr] != ma) continue;
+			if(me->mat[mf->mat_nr] != ma) continue;
 
 			/* texface data for this face */
 			tf = ((MTFace*)cdl->data) + a;
@@ -1752,6 +1758,9 @@
 	}
 }
 
+
+#define MAT_BGE_DISPUTED -99999
+
 int do_version_tface(Main *main, int fileload)
 {
 	Mesh *me;
@@ -1807,15 +1816,16 @@
 				flag = encode_tfaceflag(tf, 1);
 				
 				/* create/find a new material and assign to the face */
-				if (check_tfaceneedmaterial(flag))
+				if (check_tfaceneedmaterial(flag)) {
 					mf->mat_nr= convert_tfacenomaterial(main, me, tf, flag);
-					
-			/* else mark them as no-material to be reverted to 0 later */
-				else
+				}
+				/* else mark them as no-material to be reverted to 0 later */
+				else {
 					mf->mat_nr = -1;
+				}
 			}
 			else if(mf->mat_nr < me->totcol) {
-				ma= me->mat[(int)mf->mat_nr];
+				ma= me->mat[mf->mat_nr];
 				
 				/* no material create one if necessary */
 				if(!ma) {
@@ -1837,7 +1847,7 @@
 					continue;
 				
 				/* material already marked as disputed */
-				else if(ma->game.flag == -99999)
+				else if(ma->game.flag == MAT_BGE_DISPUTED)
 					continue;
 
 				/* found a material */
@@ -1850,7 +1860,7 @@
 			
 					/* mark material as disputed */
 					else if (ma->game.flag != -flag) {
-						ma->game.flag = -99999;
+						ma->game.flag = MAT_BGE_DISPUTED;
 						continue;
 					}
 			
@@ -1882,9 +1892,11 @@
 						mf->mat_nr= convert_tfacenomaterial(main, me, tf, encode_tfaceflag(tf, 1));
 					}
 				}
-			} else {
-				for(a=0, mf=me->mface; a<me->totface; a++, mf++)
+			}
+			else {
+				for(a=0, mf=me->mface; a<me->totface; a++, mf++) {
 					mf->mat_nr=0;
+				}
 			}
 		}
 
@@ -1898,7 +1910,7 @@
 		if (ma->id.lib) continue;
 
 		/* disputed material */
-		if (ma->game.flag == -99999) {
+		if (ma->game.flag == MAT_BGE_DISPUTED) {
 			ma->game.flag = 0;
 			if (fileload) {
 				printf("Warning: material \"%s\" skipped - to convert old game texface to material go to the Help menu.\n", ma->id.name+2);
@@ -1911,7 +1923,7 @@
 	
 		/* no conflicts in this material - 90% of cases
 		 * convert from tface system to material */
-		else if (ma->game.flag < 0){
+		else if (ma->game.flag < 0) {
 			decode_tfaceflag(ma, -(ma->game.flag), 1);
 
 			/* material is good make sure all faces using
@@ -1932,8 +1944,7 @@
 			
 					/* loop over all the faces and stop at the ones that use the material*/
 					for (a=0, mf=me->mface; a<me->totface; a++, mf++) {
-						if (me->mat[(int)mf->mat_nr] != ma) continue;
-						else {
+						if (me->mat[mf->mat_nr] == ma) {
 							/* texface data for this face */
 							tf = ((MTFace*)cdl->data) + a;
 							tf->mode |= TF_CONVERTED;

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2011-09-20 05:45:54 UTC (rev 40381)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2011-09-20 06:25:15 UTC (rev 40382)
@@ -917,7 +917,7 @@
 				mface->v2= startvert+index[2];
 				mface->v3= startvert+index[1];
 				mface->v4= 0;
-				mface->mat_nr= (unsigned char)dl->col;
+				mface->mat_nr= dl->col;
 				test_index_face(mface, NULL, 0, 3);
 
 				if(smooth) mface->flag |= ME_SMOOTH;
@@ -966,7 +966,7 @@
 					mface->v2= p3;
 					mface->v3= p4;
 					mface->v4= p2;
-					mface->mat_nr= (unsigned char)dl->col;
+					mface->mat_nr= dl->col;
 					test_index_face(mface, NULL, 0, 4);
 
 					if(smooth) mface->flag |= ME_SMOOTH;
@@ -1252,7 +1252,7 @@
 	}
 }
 
-void mesh_delete_material_index(Mesh *me, int index)
+void mesh_delete_material_index(Mesh *me, short index)
 {
 	MFace *mf;
 	int i;

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2011-09-20 05:45:54 UTC (rev 40381)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2011-09-20 06:25:15 UTC (rev 40382)
@@ -968,8 +968,9 @@

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list