diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-11-25 16:11:44 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-11-25 16:11:44 +0300 |
commit | a1bf207be31f4bb578e920bc472cc3471a6554ca (patch) | |
tree | 4c8eafd32e190c9d3292c0edf3ce27bb5bd5e31b /source/blender/blenkernel/intern/cdderivedmesh.c | |
parent | 90cc7c8abd7b4c36002031edba8b75207fb98086 (diff) |
Sculpt: Subsurf
* Now uses the CCG DerivedMesh also in object mode, used to be edit mode only.
* Create CD_ORIGINDEX layer on demand, to save memory.
* Removed ss_to_cdderivedmesh function, and instead create ccgdm and then
convert that to cddm, to avoid code duplication.
* Added and implement DerivedMesh interface functions to obtain face grids.
* Store edge/face flags more memory efficient.
* Export CCGDerivedMesh struct in BKE_subsurf.h
Diffstat (limited to 'source/blender/blenkernel/intern/cdderivedmesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/cdderivedmesh.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index a07965c2a58..e64d8a24934 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -184,21 +184,21 @@ static ListBase *cdDM_getFaceMap(DerivedMesh *dm) if(!cddm->fmap) { create_vert_face_map(&cddm->fmap, &cddm->fmap_mem, cddm->mface, dm->getNumVerts(dm), dm->getNumFaces(dm)); - printf("rebuild fmap\n"); } return cddm->fmap; } -static struct PBVH *cdDM_getPBVH(DerivedMesh *dm) +static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm) { CDDerivedMesh *cddm = (CDDerivedMesh*) dm; - if(!cddm->pbvh) { + if(!cddm->pbvh && ob->type == OB_MESH) { + Mesh *me= ob->data; + cddm->pbvh = BLI_pbvh_new(); - BLI_pbvh_build(cddm->pbvh, cddm->mface, cddm->mvert, - dm->getNumFaces(dm), dm->getNumVerts(dm)); - printf("rebuild pbvh\n"); + BLI_pbvh_build(cddm->pbvh, me->mface, me->mvert, + me->totface, me->totvert); } return cddm->pbvh; @@ -1627,6 +1627,11 @@ DerivedMesh *CDDM_copy(DerivedMesh *source) int numEdges = source->numEdgeData; int numFaces = source->numFaceData; + /* ensure these are created if they are made on demand */ + source->getVertDataArray(source, CD_ORIGINDEX); + source->getEdgeDataArray(source, CD_ORIGINDEX); + source->getFaceDataArray(source, CD_ORIGINDEX); + /* this initializes dm, and copies all non mvert/medge/mface layers */ DM_from_template(dm, source, numVerts, numEdges, numFaces); dm->deformedOnly = source->deformedOnly; |