[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