Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-05-27 16:42:48 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-05-27 16:42:48 +0400
commit083115c5e790d5c6e87a7a4a42daea70da1ded1b (patch)
tree75314e71ff24b7de4a8508e76662b3afbc3e5ddf /source/blender/blenkernel/intern/editderivedmesh.c
parente51ee75e826846d44dcbb7028ee44e8f3e7b6858 (diff)
bmesh optimization: use offsets for deform-vert lookups to avoid customdata layer lookups within loops.
Diffstat (limited to 'source/blender/blenkernel/intern/editderivedmesh.c')
-rw-r--r--source/blender/blenkernel/intern/editderivedmesh.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index 13ee9328cf6..794e6481d34 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -1428,6 +1428,8 @@ DerivedMesh *getEditDerivedBMesh(BMEditMesh *em,
{
EditDerivedBMesh *bmdm = MEM_callocN(sizeof(*bmdm), __func__);
BMesh *bm = em->bm;
+ const int cd_dvert_offset = CustomData_get_offset(&bm->vdata, CD_MDEFORMVERT);
+ const int cd_skin_offset = CustomData_get_offset(&bm->vdata, CD_MVERT_SKIN);
bmdm->em = em;
@@ -1485,7 +1487,7 @@ DerivedMesh *getEditDerivedBMesh(BMEditMesh *em,
bmdm->vertexCos = vertexCos;
- if (CustomData_has_layer(&bm->vdata, CD_MDEFORMVERT)) {
+ if (cd_dvert_offset != -1) {
BMIter iter;
BMVert *eve;
int i;
@@ -1494,11 +1496,11 @@ DerivedMesh *getEditDerivedBMesh(BMEditMesh *em,
BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) {
DM_set_vert_data(&bmdm->dm, i, CD_MDEFORMVERT,
- CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MDEFORMVERT));
+ BM_ELEM_CD_GET_VOID_P(eve, cd_dvert_offset));
}
}
- if (CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) {
+ if (cd_skin_offset != -1) {
BMIter iter;
BMVert *eve;
int i;
@@ -1507,8 +1509,7 @@ DerivedMesh *getEditDerivedBMesh(BMEditMesh *em,
BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) {
DM_set_vert_data(&bmdm->dm, i, CD_MVERT_SKIN,
- CustomData_bmesh_get(&bm->vdata, eve->head.data,
- CD_MVERT_SKIN));
+ BM_ELEM_CD_GET_VOID_P(eve, cd_skin_offset));
}
}
@@ -1538,9 +1539,8 @@ DerivedMesh *getEditDerivedBMesh(BMEditMesh *em,
/* following Mesh convention; we use vertex coordinate itself
* for normal in this case */
- if (normalize_v3(no) == 0.0f) {
- copy_v3_v3(no, vertexCos[i]);
- normalize_v3(no);
+ if (UNLIKELY(normalize_v3(no) == 0.0f)) {
+ normalize_v3_v3(no, vertexCos[i]);
}
}
}