[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36191] branches/bmesh/blender/source/ blender: =bmesh= build modifier works now, also made scanfill thread-safe

Joseph Eagar joeedh at gmail.com
Sun Apr 17 01:58:50 CEST 2011


Revision: 36191
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36191
Author:   joeedh
Date:     2011-04-16 23:58:49 +0000 (Sat, 16 Apr 2011)
Log Message:
-----------
=bmesh= build modifier works now, also made scanfill thread-safe

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/displist.c
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/blenlib/BLI_scanfill.h
    branches/bmesh/blender/source/blender/blenlib/BLI_threads.h
    branches/bmesh/blender/source/blender/blenlib/intern/scanfill.c
    branches/bmesh/blender/source/blender/blenlib/intern/threads.c
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
    branches/bmesh/blender/source/blender/editors/mesh/knifetool.c
    branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    branches/bmesh/blender/source/blender/makesdna/DNA_modifier_types.h
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_build.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_displace.c
    branches/bmesh/blender/source/blender/windowmanager/intern/wm_gesture.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/displist.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/displist.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -946,6 +946,8 @@
 		totvert= 0;
 		nextcol= 0;
 		
+		BLI_begin_edgefill();
+		
 		dl= dispbase->first;
 		while(dl) {
 	

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -182,6 +182,7 @@
 		/*don't consider two-edged faces*/
 		if (f->len < 3) continue;
 		
+		BLI_begin_edgefill();
 		/*scanfill time*/
 		l = BMIter_New(&liter, bm, BM_LOOPS_OF_FACE, f);
 		for (j=0; l; l=BMIter_Step(&liter), j++) {

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -2265,7 +2265,8 @@
 	for (i=0; i<totpoly; i++, mp++) {
 		if (mp->totloop > 2) {		
 			ml = mloop + mp->loopstart;
-
+			
+			BLI_begin_edgefill();
 			firstv = NULL;
 			lastv = NULL;
 			for (j=0; j<mp->totloop; j++, ml++) {

Modified: branches/bmesh/blender/source/blender/blenlib/BLI_scanfill.h
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/BLI_scanfill.h	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/blenlib/BLI_scanfill.h	2011-04-16 23:58:49 UTC (rev 36191)
@@ -53,6 +53,8 @@
 /* scanfill.c: used in displist only... */
 struct EditVert *BLI_addfillvert(float *vec);
 struct EditEdge *BLI_addfilledge(struct EditVert *v1, struct EditVert *v2);
+
+int BLI_begin_edgefill(void);
 int BLI_edgefill(int mat_nr);
 void BLI_end_edgefill(void);
 

Modified: branches/bmesh/blender/source/blender/blenlib/BLI_threads.h
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/BLI_threads.h	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/blenlib/BLI_threads.h	2011-04-16 23:58:49 UTC (rev 36191)
@@ -71,6 +71,7 @@
 #define LOCK_CUSTOM1	3
 #define LOCK_RCACHE		4
 #define LOCK_OPENGL		5
+#define LOCK_SCANFILL	6
 
 void	BLI_lock_thread(int type);
 void	BLI_unlock_thread(int type);

Modified: branches/bmesh/blender/source/blender/blenlib/intern/scanfill.c
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/intern/scanfill.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/blenlib/intern/scanfill.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -44,6 +44,7 @@
 #include "BLI_math.h"
 #include "BLI_scanfill.h"
 #include "BLI_utildefines.h"
+#include "BLI_threads.h"
 
 /* callbacks for errors and interrupts and some goo */
 static void (*BLI_localErrorCallBack)(const char*) = NULL;
@@ -202,6 +203,8 @@
 	fillvertbase.first= fillvertbase.last= 0;
 	filledgebase.first= filledgebase.last= 0;
 	fillfacebase.first= fillfacebase.last= 0;
+	
+	BLI_unlock_thread(LOCK_SCANFILL);	
 }
 
 /* ****  FILL ROUTINES *************************** */
@@ -765,7 +768,13 @@
 }
 
 
+int BLI_begin_edgefill(void)
+{
+	BLI_lock_thread(LOCK_SCANFILL);
 
+	return 1;
+}
+
 int BLI_edgefill(int mat_nr)
 {
 	/*
@@ -804,7 +813,7 @@
 
 		eve = fillvertbase.first;
 		
-		if (1) { //BMESH_TODO) {
+		if (1 && eve->next && eve->next->next && eve->next->next->next) { //BMESH_TODO) {
 			/*use shortest diagonal for quad*/
 			sub_v3_v3v3(vec1, eve->co, eve->next->next->co);
 			sub_v3_v3v3(vec2, eve->next->co, eve->next->next->next->co);

Modified: branches/bmesh/blender/source/blender/blenlib/intern/threads.c
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/intern/threads.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/blenlib/intern/threads.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -114,6 +114,7 @@
 static pthread_mutex_t _custom1_lock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t _rcache_lock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t _opengl_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t _scanfill_lock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_t mainid;
 static int thread_levels= 0;	/* threads can be invoked inside threads */
 
@@ -349,6 +350,8 @@
 		pthread_mutex_lock(&_rcache_lock);
 	else if (type==LOCK_OPENGL)
 		pthread_mutex_lock(&_opengl_lock);
+	else if (type == LOCK_SCANFILL) 
+		pthread_mutex_lock(&_scanfill_lock);
 }
 
 void BLI_unlock_thread(int type)
@@ -365,6 +368,8 @@
 		pthread_mutex_unlock(&_rcache_lock);
 	else if(type==LOCK_OPENGL)
 		pthread_mutex_unlock(&_opengl_lock);
+	else if(type == LOCK_SCANFILL)
+		pthread_mutex_unlock(&_scanfill_lock);
 }
 
 /* Mutex Locks */

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -431,6 +431,7 @@
 			EditVert *eve, *lasteve = NULL, *firsteve = NULL;
 			EditFace *efa;
 			
+			BLI_begin_edgefill();
 			i = 0;
 			BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
 				eve = BLI_addfillvert(l->v->co);
@@ -478,6 +479,7 @@
 			EditFace *efa;
 			BMLoop *ls[3];
 			
+			BLI_begin_edgefill();
 			BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
 				eve = BLI_addfillvert(l->v->co);
 				eve->tmp.p = l;

Modified: branches/bmesh/blender/source/blender/editors/mesh/knifetool.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/knifetool.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/editors/mesh/knifetool.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -1451,6 +1451,8 @@
 		if (face_nets[i].first)
 			BMO_SetFlag(bm, f, DEL);
 		
+		BLI_begin_edgefill();
+		
 		for (entry=face_nets[i].first; entry; entry=entry->next) {
 			if (!BLI_smallhash_haskey(hash, (intptr_t)entry->kfe->v1)) {
 				eve = BLI_addfillvert(entry->kfe->v1->v->co);

Modified: branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -207,6 +207,8 @@
 		key = (ParamKey)efa;
 
 		/*scanfill time!*/
+		BLI_begin_edgefill();
+		
 		firstv = lastv = NULL;
 		BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
 			int i;

Modified: branches/bmesh/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- branches/bmesh/blender/source/blender/makesdna/DNA_modifier_types.h	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/makesdna/DNA_modifier_types.h	2011-04-16 23:58:49 UTC (rev 36191)
@@ -311,6 +311,7 @@
 	MOD_DISP_DIR_Z,
 	MOD_DISP_DIR_NOR,
 	MOD_DISP_DIR_RGB_XYZ,
+	MOD_DISP_TANGENT,
 };
 
 /* DisplaceModifierData->texmapping */

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_build.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_build.c	2011-04-16 21:23:05 UTC (rev 36190)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_build.c	2011-04-16 23:58:49 UTC (rev 36191)
@@ -85,10 +85,12 @@
 	DerivedMesh *dm = derivedData;
 	DerivedMesh *result;
 	BuildModifierData *bmd = (BuildModifierData*) md;
-	int i;
-	int numFaces, numEdges;
+	int i, j, k;
+	int numFaces, numEdges, numLoops;
 	int *vertMap, *edgeMap, *faceMap;
 	float frac;
+	MPoly *mpoly, *mpolys, *mpolyd;
+	MLoop *mld, *mloops, *mls, *mloopd;
 	GHashIterator *hashIter;
 	/* maps vert indices in old mesh to indices in new mesh */
 	GHash *vertHash = BLI_ghash_new(BLI_ghashutil_inthash,
@@ -96,11 +98,18 @@
 	/* maps edge indices in new mesh to indices in old mesh */
 	GHash *edgeHash = BLI_ghash_new(BLI_ghashutil_inthash,
 					BLI_ghashutil_intcmp, "build ed apply gh");
+	GHash *edgeHash2 = BLI_ghash_new(BLI_ghashutil_inthash,
+					BLI_ghashutil_intcmp, "build ed apply gh");
 
 	const int maxVerts= dm->getNumVerts(dm);
 	const int maxEdges= dm->getNumEdges(dm);
-	const int maxFaces= dm->getNumTessFaces(dm);
-
+	const int maxFaces= dm->getNumFaces(dm);
+	
+	if (!CDDM_Check(dm)) {
+		result = CDDM_copy(dm, 0);
+		dm = result;
+	}
+	
 	vertMap = MEM_callocN(sizeof(*vertMap) * maxVerts, "build modifier vertMap");
 	for(i = 0; i < maxVerts; ++i) vertMap[i] = i;
 	edgeMap = MEM_callocN(sizeof(*edgeMap) * maxEdges, "build modifier edgeMap");
@@ -116,11 +125,15 @@
 	}
 	CLAMP(frac, 0.0f, 1.0f);
 
-	numFaces = dm->getNumTessFaces(dm) * frac;
+	numFaces = dm->getNumFaces(dm) * frac;
 	numEdges = dm->getNumEdges(dm) * frac;
 
 	/* if there's at least one face, build based on faces */
 	if(numFaces) {
+		MPoly *mpoly, *mp;
+		MLoop *ml, *mloop;
+		MEdge *medge;
+		
 		if(bmd->randomize)
 			BLI_array_randomize(faceMap, sizeof(*faceMap),
 						maxFaces, bmd->seed);
@@ -128,37 +141,41 @@
 		/* get the set of all vert indices that will be in the final mesh,
 		* mapped to the new indices
 		*/
+		numLoops = 0;
+		mpoly = CDDM_get_polys(dm);
+		mloop = CDDM_get_loops(dm);
 		for(i = 0; i < numFaces; ++i) {
-			MFace mf;
-			dm->getTessFace(dm, faceMap[i], &mf);
+			mp = mpoly + faceMap[i];
+			ml = mloop + mp->loopstart;
 
-			if(!BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(mf.v1)))
-				BLI_ghash_insert(vertHash, SET_INT_IN_POINTER(mf.v1),
-					SET_INT_IN_POINTER(BLI_ghash_size(vertHash)));
-			if(!BLI_ghash_haskey(vertHash, SET_INT_IN_POINTER(mf.v2)))

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list