[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22472] branches/bmesh/blender/source/ blender: made the crash handler disabled by a command line flag, insted of being #ifdef'd out on release builds.
Joseph Eagar
joeedh at gmail.com
Sat Aug 15 19:31:28 CEST 2009
Revision: 22472
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22472
Author: joeedh
Date: 2009-08-15 19:31:28 +0200 (Sat, 15 Aug 2009)
Log Message:
-----------
made the crash handler disabled by a command line flag, insted of being #ifdef'd out on release builds. also did little bit of work on subsurf. and face select can now deselect again, and fixed some other bugs with it (and subsurf).
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h
branches/bmesh/blender/source/blender/blenkernel/intern/CCGSubSurf.c
branches/bmesh/blender/source/blender/blenkernel/intern/CCGSubSurf.h
branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
branches/bmesh/blender/source/blender/blenkernel/intern/particle_system.c
branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c
Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h 2009-08-15 16:43:03 UTC (rev 22471)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h 2009-08-15 17:31:28 UTC (rev 22472)
@@ -124,6 +124,19 @@
loop refers to per-face-vertex data.*/
void *(*getLoopCDData)(void *self, int type, int layer);
void *(*getVertCDData)(void *self, int type, int layer);
+
+/* derivedmesh 2.0 interface ideas (will likely never be implemented ;):
+ void (*interpLoopData)(void *self, void **src_blocks,
+ float *weights, float *sub_weights, int count);
+
+ //a generic handle for a loop
+ intptr_t lhandle;
+
+ inside DerivedMesh itself:
+ //
+ //void (*interpLoopData)(DerivedMesh *dm, DMLoopIter *destloop,
+ // intptr_t *loop_handles, int totloop);
+*/
} DMLoopIter;
typedef struct DMFaceIter {
@@ -227,7 +240,7 @@
void (*copyFromVertCData)(DerivedMesh *dm, int source, CustomData *dst, int dest);
void (*copyFromEdgeCData)(DerivedMesh *dm, int source, CustomData *dst, int dest);
void (*copyFromFaceCData)(DerivedMesh *dm, int source, CustomData *dst, int dest);
-
+
/* Iterate over each mapped vertex in the derived mesh, calling the
* given function with the original vert and the mapped vert's new
* coordinate and normal. For historical reasons the normal can be
@@ -431,6 +444,8 @@
void *layer);
void DM_add_edge_layer(struct DerivedMesh *dm, int type, int alloctype,
void *layer);
+void DM_add_tessface_layer(struct DerivedMesh *dm, int type, int alloctype,
+ void *layer);
void DM_add_face_layer(struct DerivedMesh *dm, int type, int alloctype,
void *layer);
@@ -450,6 +465,7 @@
*/
void *DM_get_vert_data_layer(struct DerivedMesh *dm, int type);
void *DM_get_edge_data_layer(struct DerivedMesh *dm, int type);
+void *DM_get_tessface_data_layer(struct DerivedMesh *dm, int type);
void *DM_get_face_data_layer(struct DerivedMesh *dm, int type);
/* custom data setting functions
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/CCGSubSurf.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/CCGSubSurf.c 2009-08-15 16:43:03 UTC (rev 22471)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/CCGSubSurf.c 2009-08-15 17:31:28 UTC (rev 22472)
@@ -31,7 +31,7 @@
int numEntries, curSize, curSizeIdx;
CCGAllocatorIFC allocatorIFC;
- CCGAllocatorHDL allocator;
+ CCAllocHDL allocator;
} EHash;
#define EHASH_alloc(eh, nb) ((eh)->allocatorIFC.alloc((eh)->allocator, nb))
@@ -39,7 +39,7 @@
#define EHASH_hash(eh, item) (((uintptr_t) (item))%((unsigned int) (eh)->curSize))
-static EHash *_ehash_new(int estimatedNumEntries, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator) {
+static EHash *_ehash_new(int estimatedNumEntries, CCGAllocatorIFC *allocatorIFC, CCAllocHDL allocator) {
EHash *eh = allocatorIFC->alloc(allocator, sizeof(*eh));
eh->allocatorIFC = *allocatorIFC;
eh->allocator = allocator;
@@ -175,13 +175,13 @@
/***/
-static void *_stdAllocator_alloc(CCGAllocatorHDL a, int numBytes) {
+static void *_stdAllocator_alloc(CCAllocHDL a, int numBytes) {
return malloc(numBytes);
}
-static void *_stdAllocator_realloc(CCGAllocatorHDL a, void *ptr, int newSize, int oldSize) {
+static void *_stdAllocator_realloc(CCAllocHDL a, void *ptr, int newSize, int oldSize) {
return realloc(ptr, newSize);
}
-static void _stdAllocator_free(CCGAllocatorHDL a, void *ptr) {
+static void _stdAllocator_free(CCAllocHDL a, void *ptr) {
free(ptr);
}
@@ -218,7 +218,7 @@
#define NormAdd(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; }
-static int _edge_isBoundary(CCGEdge *e);
+static int _edge_isBoundary(CCEdge *e);
/***/
@@ -229,53 +229,53 @@
} VertFlags;
enum {
Edge_eEffected= (1<<0),
-} CCGEdgeFlags;
+} CCEdgeFlags;
enum {
Face_eEffected= (1<<0),
} FaceFlags;
-struct _CCGVert {
- CCGVert *next; /* EHData.next */
- CCGVertHDL vHDL; /* EHData.key */
+struct _CCVert {
+ CCVert *next; /* EHData.next */
+ CCVertHDL vHDL; /* EHData.key */
short numEdges, numFaces, flags, pad;
- CCGEdge **edges;
- CCGFace **faces;
+ CCEdge **edges;
+ CCFace **faces;
// byte *levelData;
// byte *userData;
};
#define VERT_getLevelData(v) ((byte*) &(v)[1])
-struct _CCGEdge {
- CCGEdge *next; /* EHData.next */
- CCGEdgeHDL eHDL; /* EHData.key */
+struct _CCEdge {
+ CCEdge *next; /* EHData.next */
+ CCEdgeHDL eHDL; /* EHData.key */
short numFaces, flags;
float crease;
- CCGVert *v0,*v1;
- CCGFace **faces;
+ CCVert *v0,*v1;
+ CCFace **faces;
// byte *levelData;
// byte *userData;
};
#define EDGE_getLevelData(e) ((byte*) &(e)[1])
-struct _CCGFace {
- CCGFace *next; /* EHData.next */
- CCGFaceHDL fHDL; /* EHData.key */
+struct _CCFace {
+ CCFace *next; /* EHData.next */
+ CCFaceHDL fHDL; /* EHData.key */
short numVerts, flags, pad1, pad2;
-// CCGVert **verts;
-// CCGEdge **edges;
+// CCVert **verts;
+// CCEdge **edges;
// byte *centerData;
// byte **gridData;
// byte *userData;
};
-#define FACE_getVerts(f) ((CCGVert**) &(f)[1])
-#define FACE_getEdges(f) ((CCGEdge**) &(FACE_getVerts(f)[(f)->numVerts]))
+#define FACE_getVerts(f) ((CCVert**) &(f)[1])
+#define FACE_getEdges(f) ((CCEdge**) &(FACE_getVerts(f)[(f)->numVerts]))
#define FACE_getCenterData(f) ((byte*) &(FACE_getEdges(f)[(f)->numVerts]))
typedef enum {
@@ -286,15 +286,15 @@
eSyncState_Partial,
} SyncState;
-struct _CCGSubSurf {
- EHash *vMap; /* map of CCGVertHDL -> Vert */
- EHash *eMap; /* map of CCGEdgeHDL -> Edge */
- EHash *fMap; /* map of CCGFaceHDL -> Face */
+struct _CSubSurf {
+ EHash *vMap; /* map of CCVertHDL -> Vert */
+ EHash *eMap; /* map of CCEdgeHDL -> Edge */
+ EHash *fMap; /* map of CCFaceHDL -> Face */
CCGMeshIFC meshIFC;
CCGAllocatorIFC allocatorIFC;
- CCGAllocatorHDL allocator;
+ CCAllocHDL allocator;
int subdivLevels;
int numGrids;
@@ -320,8 +320,8 @@
EHash *oldVMap, *oldEMap, *oldFMap;
int lenTempArrays;
- CCGVert **tempVerts;
- CCGEdge **tempEdges;
+ CCVert **tempVerts;
+ CCEdge **tempEdges;
};
#define CCGSUBSURF_alloc(ss, nb) ((ss)->allocatorIFC.alloc((ss)->allocator, nb))
@@ -330,8 +330,8 @@
/***/
-static CCGVert *_vert_new(CCGVertHDL vHDL, CCGSubSurf *ss) {
- CCGVert *v = CCGSUBSURF_alloc(ss, sizeof(CCGVert) + ss->meshIFC.vertDataSize * (ss->subdivLevels+1) + ss->meshIFC.vertUserSize);
+static CCVert *_vert_new(CCVertHDL vHDL, CSubSurf *ss) {
+ CCVert *v = CCGSUBSURF_alloc(ss, sizeof(CCVert) + ss->meshIFC.vertDataSize * (ss->subdivLevels+1) + ss->meshIFC.vertUserSize);
byte *userData;
v->vHDL = vHDL;
@@ -340,13 +340,13 @@
v->numEdges = v->numFaces = 0;
v->flags = 0;
- userData = ccgSubSurf_getVertUserData(ss, v);
+ userData = CCS_getVertUserData(ss, v);
memset(userData, 0, ss->meshIFC.vertUserSize);
if (ss->useAgeCounts) *((int*) &userData[ss->vertUserAgeOffset]) = ss->currentAge;
return v;
}
-static void _vert_remEdge(CCGVert *v, CCGEdge *e) {
+static void _vert_remEdge(CCVert *v, CCEdge *e) {
int i;
for (i=0; i<v->numEdges; i++) {
if (v->edges[i]==e) {
@@ -355,7 +355,7 @@
}
}
}
-static void _vert_remFace(CCGVert *v, CCGFace *f) {
+static void _vert_remFace(CCVert *v, CCFace *f) {
int i;
for (i=0; i<v->numFaces; i++) {
if (v->faces[i]==f) {
@@ -364,25 +364,25 @@
}
}
}
-static void _vert_addEdge(CCGVert *v, CCGEdge *e, CCGSubSurf *ss) {
+static void _vert_addEdge(CCVert *v, CCEdge *e, CSubSurf *ss) {
v->edges = CCGSUBSURF_realloc(ss, v->edges, (v->numEdges+1)*sizeof(*v->edges), v->numEdges*sizeof(*v->edges));
v->edges[v->numEdges++] = e;
}
-static void _vert_addFace(CCGVert *v, CCGFace *f, CCGSubSurf *ss) {
+static void _vert_addFace(CCVert *v, CCFace *f, CSubSurf *ss) {
v->faces = CCGSUBSURF_realloc(ss, v->faces, (v->numFaces+1)*sizeof(*v->faces), v->numFaces*sizeof(*v->faces));
v->faces[v->numFaces++] = f;
}
-static CCGEdge *_vert_findEdgeTo(CCGVert *v, CCGVert *vQ) {
+static CCEdge *_vert_findEdgeTo(CCVert *v, CCVert *vQ) {
int i;
for (i=0; i<v->numEdges; i++) {
- CCGEdge *e = v->edges[v->numEdges-1-i]; // XXX, note reverse
+ CCEdge *e = v->edges[v->numEdges-1-i]; // XXX, note reverse
if ( (e->v0==v && e->v1==vQ) ||
(e->v1==v && e->v0==vQ))
return e;
}
return 0;
}
-static int _vert_isBoundary(CCGVert *v) {
+static int _vert_isBoundary(CCVert *v) {
int i;
for (i=0; i<v->numEdges; i++)
if (_edge_isBoundary(v->edges[i]))
@@ -390,27 +390,27 @@
return 0;
}
-static void *_vert_getCo(CCGVert *v, int lvl, int dataSize) {
+static void *_vert_getCo(CCVert *v, int lvl, int dataSize) {
return &VERT_getLevelData(v)[lvl*dataSize];
}
-static float *_vert_getNo(CCGVert *v, int lvl, int dataSize, int normalDataOffset) {
+static float *_vert_getNo(CCVert *v, int lvl, int dataSize, int normalDataOffset) {
return (float*) &VERT_getLevelData(v)[lvl*dataSize + normalDataOffset];
}
-static void _vert_free(CCGVert *v, CCGSubSurf *ss) {
+static void _vert_free(CCVert *v, CSubSurf *ss) {
CCGSUBSURF_free(ss, v->edges);
CCGSUBSURF_free(ss, v->faces);
CCGSUBSURF_free(ss, v);
}
-static int VERT_seam(CCGVert *v) {
+static int VERT_seam(CCVert *v) {
return ((v->flags & Vert_eSeam) != 0);
}
/***/
-static CCGEdge *_edge_new(CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float crease, CCGSubSurf *ss) {
- CCGEdge *e = CCGSUBSURF_alloc(ss, sizeof(CCGEdge) + ss->meshIFC.vertDataSize *((ss->subdivLevels+1) + (1<<(ss->subdivLevels+1))-1) + ss->meshIFC.edgeUserSize);
+static CCEdge *_edge_new(CCEdgeHDL eHDL, CCVert *v0, CCVert *v1, float crease, CSubSurf *ss) {
+ CCEdge *e = CCGSUBSURF_alloc(ss, sizeof(CCEdge) + ss->meshIFC.vertDataSize *((ss->subdivLevels+1) + (1<<(ss->subdivLevels+1))-1) + ss->meshIFC.edgeUserSize);
byte *userData;
e->eHDL = eHDL;
@@ -423,13 +423,13 @@
_vert_addEdge(v0, e, ss);
_vert_addEdge(v1, e, ss);
- userData = ccgSubSurf_getEdgeUserData(ss, e);
+ userData = CCS_getEdgeUserData(ss, e);
memset(userData, 0, ss->meshIFC.edgeUserSize);
if (ss->useAgeCounts) *((int*) &userData[ss->edgeUserAgeOffset]) = ss->currentAge;
return e;
}
-static void _edge_remFace(CCGEdge *e, CCGFace *f) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list