[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24227] branches/bmesh/blender/source/ blender/blenkernel/intern: test commit

Joseph Eagar joeedh at gmail.com
Mon Nov 2 07:31:24 CET 2009


Revision: 24227
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24227
Author:   joeedh
Date:     2009-11-02 07:31:23 +0100 (Mon, 02 Nov 2009)

Log Message:
-----------
test commit

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
    branches/bmesh/blender/source/blender/blenkernel/intern/key.c
    branches/bmesh/blender/source/blender/blenkernel/intern/node.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-11-02 00:30:52 UTC (rev 24226)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-11-02 06:31:23 UTC (rev 24227)
@@ -1989,67 +1989,74 @@
 		VECCOPY(vert->no, vertNormals[i]);
 }
 
-/* adapted from mesh_calc_normals */
 void CDDM_calc_normals(DerivedMesh *dm)
 {
 	CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
 	float (*temp_nors)[3];
 	float (*face_nors)[3];
-	int i;
+	float (*vert_nors)[3];
+	int i, j, *origIndex;
 	int numVerts = dm->numVertData;
 	int numFaces = dm->numFaceData;
 	MFace *mf;
+	MPoly *mp;
 	MVert *mv;
+	MLoop *ml;
 
 	if(numVerts == 0) return;
 
-	temp_nors = MEM_callocN(numVerts * sizeof(*temp_nors),
-	                        "CDDM_calc_normals temp_nors");
+	if (CustomData_has_layer(&dm->faceData, CD_NORMAL))
+		CustomData_free_layer(&dm->faceData, CD_NORMAL, dm->numFaceData, 0);
 
-	/* we don't want to overwrite any referenced layers */
-	mv = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT);
-	cddm->mvert = mv;
+	/*recalc tesselation to ensure we have valid origindex values
+	  for mface->mpoly lookups.*/
+	cdDM_recalcTesselation(dm);
 
-	/* make a face normal layer if not present */
-	face_nors = CustomData_get_layer(&dm->faceData, CD_NORMAL);
-	if(!face_nors)
-		face_nors = CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_CALLOC,
-		                                 NULL, dm->numFaceData);
+	numFaces = dm->numFaceData;
 
-	/* calculate face normals and add to vertex normals */
-	mf = CDDM_get_tessfaces(dm);
-	for(i = 0; i < numFaces; i++, mf++) {
-		float *f_no = face_nors[i];
+	/*first go through and calculate normals for all the polys*/
+	temp_nors = MEM_callocN(sizeof(float)*3*dm->numPolyData, "temp_nors cdderivedmesh.c");
+	vert_nors = MEM_callocN(sizeof(float)*3*dm->numVertData, "vert_nors cdderivedmesh.c");
+	
+	mp = cddm->mpoly;
+	for (i=0; i<dm->numPolyData; i++, mp++) {
+		mesh_calc_poly_normal(mp, cddm->mloop+mp->loopstart, cddm->mvert, temp_nors[i]);
 
-		if(mf->v4)
-			CalcNormFloat4(mv[mf->v1].co, mv[mf->v2].co,
-			               mv[mf->v3].co, mv[mf->v4].co, f_no);
-		else
-			CalcNormFloat(mv[mf->v1].co, mv[mf->v2].co,
-			              mv[mf->v3].co, f_no);
-		
-		VecAddf(temp_nors[mf->v1], temp_nors[mf->v1], f_no);
-		VecAddf(temp_nors[mf->v2], temp_nors[mf->v2], f_no);
-		VecAddf(temp_nors[mf->v3], temp_nors[mf->v3], f_no);
-		if(mf->v4)
-			VecAddf(temp_nors[mf->v4], temp_nors[mf->v4], f_no);
+		ml = cddm->mloop + mp->loopstart;
+		for (j=0; j<mp->totloop; j++, ml++) {
+			VECADD(vert_nors[ml->v], vert_nors[ml->v], temp_nors[i]);
+		}
 	}
 
-	/* normalize vertex normals and assign */
-	for(i = 0; i < numVerts; i++, mv++) {
-		float *no = temp_nors[i];
+	face_nors = MEM_callocN(sizeof(float)*3*dm->numFaceData, "face_nors cdderivedmesh.c");
+	CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_ASSIGN, face_nors, dm->numFaceData);
+	origIndex = CustomData_get_layer(&dm->faceData, CD_ORIGINDEX);
+
+	mf = cddm->mface;
+	for (i=0; i<dm->numFaceData; i++, mf++, origIndex++) {
+		VECCOPY(face_nors[i], temp_nors[*origIndex]);
+	}
+
+	mv = cddm->mvert;
+	for (i=0; i<dm->numVertData; i++, mv++) {
+		float *no = vert_nors[i];
 		
 		if (Normalize(no) == 0.0) {
 			VECCOPY(no, mv->co);
-			Normalize(no);
+			if (Normalize(no) == 0.0) {
+				no[0] = 0.0f;
+				no[1] = 0.0f;
+				no[2] = 1.0f;
+			}
 		}
 
-		mv->no[0] = (short)(no[0] * 32767.0);
-		mv->no[1] = (short)(no[1] * 32767.0);
-		mv->no[2] = (short)(no[2] * 32767.0);
+		mv->no[0] = (short)(no[0] * 32767.0f);
+		mv->no[1] = (short)(no[1] * 32767.0f);
+		mv->no[2] = (short)(no[2] * 32767.0f);
 	}
-	
+
 	MEM_freeN(temp_nors);
+	MEM_freeN(vert_nors);
 }
 
 void CDDM_calc_edges(DerivedMesh *dm)

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2009-11-02 00:30:52 UTC (rev 24226)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2009-11-02 06:31:23 UTC (rev 24227)
@@ -840,7 +840,6 @@
 
 	memset(co, 0, sizeof(float)*3);
 	
-	sub_weight = sub_weights;
 	for(i = 0; i < count; ++i) {
 		float weight = weights ? weights[i] : 1.0f;
 		
@@ -896,7 +895,7 @@
 	{sizeof(MCol)*4, "MCol", 4, "TextureCol", NULL, NULL, layerInterp_mcol,
 	 layerSwap_mcol, layerDefault_mcol},
 	{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
-	{sizeof(float), "", 3, "ShapeKey", layerInterp_shapekey},
+	{sizeof(float)*3, "", 0, "ShapeKey", NULL, NULL, layerInterp_shapekey},
 };
 
 const char *LAYERTYPENAMES[CD_NUMTYPES] = {
@@ -904,7 +903,7 @@
 	"CDMCol", "CDOrigIndex", "CDNormal", "CDFlags","CDMFloatProperty",
 	"CDMIntProperty","CDMStringProperty", "CDOrigSpace", "CDOrco", "CDMTexPoly", "CDMLoopUV",
 	"CDMloopCol", "CDTangent", "CDMDisps", "CDWeightMCol", "CDMPoly", 
-	"CDMLoop", "CDMLoopCol", "CDIDCol", "CDTextureCol", "CDShapeKeyIndex"};
+	"CDMLoop", "CDMLoopCol", "CDIDCol", "CDTextureCol", "CDShapeKeyIndex", "CDShapeKey"};
 
 const CustomDataMask CD_MASK_BAREMESH =
 	CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE | CD_MASK_MLOOP | CD_MASK_MPOLY;
@@ -913,7 +912,7 @@
 	CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MCOL |
 	CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
 	CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MPOLY | CD_MASK_MLOOP |
-	CD_MASK_MTEXPOLY;
+	CD_MASK_MTEXPOLY | CD_MASK_NORMAL;
 const CustomDataMask CD_MASK_EDITMESH =
 	CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MLOOPUV |
 	CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_SHAPE_KEYINDEX |
@@ -923,7 +922,8 @@
 	CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
 	CD_MASK_MCOL | CD_MASK_ORIGINDEX | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
 	CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_WEIGHT_MLOOPCOL |
-	CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_TANGENT | CD_MASK_WEIGHT_MCOL;
+	CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_TANGENT | 
+	CD_MASK_WEIGHT_MCOL | CD_MASK_NORMAL;
 const CustomDataMask CD_MASK_BMESH = CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
 	CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | 
 	CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX;
@@ -1075,6 +1075,17 @@
 	return -1;
 }
 
+int CustomData_get_layer_index_n(const struct CustomData *data, int type, int n)
+{
+	int i; 
+
+	for(i=0; i < data->totlayer; ++i)
+		if(data->layers[i].type == type)
+			return i + n;
+
+	return -1;	
+}
+
 int CustomData_get_named_layer_index(const CustomData *data, int type, char *name)
 {
 	int i;

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/key.c	2009-11-02 00:30:52 UTC (rev 24226)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/key.c	2009-11-02 06:31:23 UTC (rev 24227)
@@ -118,6 +118,8 @@
 	
 	key->type= KEY_NORMAL;
 	key->from= id;
+
+	key->uidgen = 1;
 	
 	// XXX the code here uses some defines which will soon be depreceated...
 	if( GS(id->name)==ID_ME) {

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/node.c	2009-11-02 00:30:52 UTC (rev 24226)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/node.c	2009-11-02 06:31:23 UTC (rev 24227)
@@ -1927,1248 +1927,4 @@
 	bNode *node;
 	bNodeSocket *sock;
 	
-	for(node= ntree->nodes.first; node; node= node->next) {
-		
-		/* initialize needed for groups */
-		node->exec= 0;	
-		
-		if(is_group==0) {
-			for(sock= node->outputs.first; sock; sock= sock->next) {
-				bNodeStack *ns= ntree->stack + sock->stack_index;
-				
-				if(sock->ns.data) {
-					ns->data= sock->ns.data;
-					sock->ns.data= NULL;
-				}
-			}
-		}
-		/* cannot initialize them while using in threads */
-		if(ELEM3(node->type, CMP_NODE_TIME, CMP_NODE_CURVE_VEC, CMP_NODE_CURVE_RGB)) {
-			curvemapping_initialize(node->storage);
-			if(node->type==CMP_NODE_CURVE_RGB)
-				curvemapping_premultiply(node->storage, 0);
-		}
-		if(node->type==NODE_GROUP)
-			composit_begin_exec((bNodeTree *)node->id, 1);
-
-	}
-}
-
-/* copy stack compbufs to sockets */
-static void composit_end_exec(bNodeTree *ntree, int is_group)
-{
-	extern void print_compbuf(char *str, struct CompBuf *cbuf);
-	bNode *node;
-	bNodeStack *ns;
-	int a;
-
-	for(node= ntree->nodes.first; node; node= node->next) {
-		if(is_group==0) {
-			bNodeSocket *sock;
-		
-			for(sock= node->outputs.first; sock; sock= sock->next) {
-				ns= ntree->stack + sock->stack_index;
-				if(ns->data) {
-					sock->ns.data= ns->data;
-					ns->data= NULL;
-				}
-			}
-		}
-		if(node->type==CMP_NODE_CURVE_RGB)
-			curvemapping_premultiply(node->storage, 1);
-		
-		if(node->type==NODE_GROUP)
-			composit_end_exec((bNodeTree *)node->id, 1);
-
-		node->need_exec= 0;
-	}
-	
-	if(is_group==0) {
-		/* internally, group buffers are not stored */
-		for(ns= ntree->stack, a=0; a<ntree->stacksize; a++, ns++) {
-			if(ns->data) {
-				printf("freed leftover buffer from stack\n");
-				free_compbuf(ns->data);
-				ns->data= NULL;
-			}
-		}
-	}
-}
-
-static void group_tag_used_outputs(bNode *gnode, bNodeStack *stack)
-{
-	bNodeTree *ntree= (bNodeTree *)gnode->id;
-	bNode *node;
-	
-	stack+= gnode->stack_index;
-	
-	for(node= ntree->nodes.first; node; node= node->next) {
-		if(node->typeinfo->execfunc) {
-			bNodeSocket *sock;
-			
-			for(sock= node->inputs.first; sock; sock= sock->next) {
-				if(sock->intern) {
-					if(sock->link) {
-						bNodeStack *ns= stack + sock->link->fromsock->stack_index;
-						ns->hasoutput= 1;
-						ns->sockettype= sock->link->fromsock->type;
-					}
-					else
-						sock->ns.sockettype= sock->type;
-				}
-			}
-		}
-	}
-}
-
-/* notes below are ancient! (ton) */
-/* stack indices make sure all nodes only write in allocated data, for making it thread safe */
-/* only root tree gets the stack, to enable instances to have own stack entries */
-/* per tree (and per group) unique indices are created */
-/* the index_ext we need to be able to map from groups to the group-node own stack */
-

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list