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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to