diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-01-10 08:43:31 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-01-10 08:43:31 +0400 |
commit | ceb9701507848865434557af4ec89ce9b6560446 (patch) | |
tree | f0374162d6ab4d7536cca7bfffb9c2eb399a4935 /source/blender/blenkernel/intern/editderivedmesh.c | |
parent | 8cf374d4012e193a50a58f1e2abcdae306ae33cd (diff) |
don't store bevel weights or edge crease customdata layers in editmode unless they are needed.
configurable in 'Geometry Data' panel, will be added when running crease edges transform for example.
Diffstat (limited to 'source/blender/blenkernel/intern/editderivedmesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/editderivedmesh.c | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index c3587f6b188..fd7c3f55bb0 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -1402,7 +1402,7 @@ static void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r) BMesh *bm = bmdm->tc->bm; BMVert *eve; BMIter iter; - const int has_bweight = CustomData_has_layer(&bm->vdata, CD_BWEIGHT); + const int cd_vert_bweight_offset = CustomData_get_offset(&bm->vdata, CD_BWEIGHT); if (bmdm->vertexCos) { int i; @@ -1412,9 +1412,8 @@ static void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r) normal_float_to_short_v3(vert_r->no, eve->no); vert_r->flag = BM_vert_flag_to_mflag(eve); - if (has_bweight) { - vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, eve, CD_BWEIGHT) * 255.0f); - } + if (cd_vert_bweight_offset != -1) vert_r->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset); + vert_r++; } } @@ -1424,9 +1423,8 @@ static void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r) normal_float_to_short_v3(vert_r->no, eve->no); vert_r->flag = BM_vert_flag_to_mflag(eve); - if (has_bweight) { - vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, eve, CD_BWEIGHT) * 255.0f); - } + if (cd_vert_bweight_offset != -1) vert_r->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset); + vert_r++; } } @@ -1437,24 +1435,20 @@ static void emDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r) BMesh *bm = ((EditDerivedBMesh *)dm)->tc->bm; BMEdge *eed; BMIter iter; - const int has_bweight = CustomData_has_layer(&bm->edata, CD_BWEIGHT); - const int has_crease = CustomData_has_layer(&bm->edata, CD_CREASE); + + const int cd_edge_bweight_offset = CustomData_get_offset(&bm->edata, CD_BWEIGHT); + const int cd_edge_crease_offset = CustomData_get_offset(&bm->edata, CD_CREASE); BM_mesh_elem_index_ensure(bm, BM_VERT); BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) { - if (has_bweight) { - edge_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->edata, eed, CD_BWEIGHT) * 255.0f); - } - - if (has_crease) { - edge_r->crease = (unsigned char) (BM_elem_float_data_get(&bm->edata, eed, CD_CREASE) * 255.0f); - } + edge_r->v1 = BM_elem_index_get(eed->v1); + edge_r->v2 = BM_elem_index_get(eed->v2); edge_r->flag = BM_edge_flag_to_mflag(eed); - edge_r->v1 = BM_elem_index_get(eed->v1); - edge_r->v2 = BM_elem_index_get(eed->v2); + if (cd_edge_crease_offset != -1) edge_r->crease = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eed, cd_edge_crease_offset); + if (cd_edge_bweight_offset != -1) edge_r->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eed, cd_edge_bweight_offset); edge_r++; } @@ -1662,6 +1656,9 @@ DerivedMesh *getEditDerivedBMesh(BMEditMesh *em, DM_init((DerivedMesh *)bmdm, DM_TYPE_EDITBMESH, em->bm->totvert, em->bm->totedge, em->tottri, em->bm->totloop, em->bm->totface); + /* could also get from the objects mesh directly */ + bmdm->dm.cd_flag = BM_mesh_cd_flag_from_bmesh(bm); + bmdm->dm.getVertCos = emDM_getVertCos; bmdm->dm.getMinMax = emDM_getMinMax; |