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-01-17 01:09:54 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-01-17 01:09:54 +0400
commit5ddc7d64a85d6e01e7eae1ed904bda635478a24e (patch)
tree50d1481f1eaf8ffba354ffebe9ac89c5f42ade55 /source/blender/gpu
parent7f513023d4fc730c63a26a445b5523498f554710 (diff)
optimize bmesh operations that use triangle BMFace's (dyn-topo and mesh conversion).
Diffstat (limited to 'source/blender/gpu')
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 5f9f68e9c99..c1eb7bdbbac 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -1925,15 +1925,17 @@ static int gpu_bmesh_vert_visible_count(GHash *bm_unique_verts,
/* Return TRUE if all vertices in the face are visible, FALSE otherwise */
static int gpu_bmesh_face_visible(BMFace *f)
{
- BMIter bm_iter;
- BMVert *v;
+ BMLoop *l_iter;
+ BMLoop *l_first;
- BM_ITER_ELEM (v, &bm_iter, f, BM_VERTS_OF_FACE) {
- if (BM_elem_flag_test(v, BM_ELEM_HIDDEN))
- return FALSE;
- }
+ l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+ do {
+ if (BM_elem_flag_test(l_iter->v, BM_ELEM_HIDDEN)) {
+ return false;
+ }
+ } while ((l_iter = l_iter->next) != l_first);
- return TRUE;
+ return true;
}
/* Return the total number of visible faces */
@@ -2017,19 +2019,20 @@ void GPU_update_bmesh_buffers(GPU_Buffers *buffers,
float fmask = 0;
int i;
- BM_iter_as_array(bm, BM_VERTS_OF_FACE, f, (void**)v, 3);
+ // BM_iter_as_array(bm, BM_VERTS_OF_FACE, f, (void**)v, 3);
+ BM_face_as_array_vert_tri(f, v);
/* Average mask value */
for (i = 0; i < 3; i++) {
fmask += *((float*)CustomData_bmesh_get(&bm->vdata,
- v[i]->head.data,
- CD_PAINT_MASK));
+ v[i]->head.data,
+ CD_PAINT_MASK));
}
fmask /= 3.0f;
for (i = 0; i < 3; i++) {
gpu_bmesh_vert_to_buffer_copy(v[i], bm, vert_data,
- &v_index, f->no, &fmask);
+ &v_index, f->no, &fmask);
}
}
}
@@ -2063,12 +2066,15 @@ void GPU_update_bmesh_buffers(GPU_Buffers *buffers,
GHashIterator gh_iter;
GHASH_ITER (gh_iter, bm_faces) {
- BMIter bm_iter;
BMFace *f = BLI_ghashIterator_getKey(&gh_iter);
- BMVert *v;
if (gpu_bmesh_face_visible(f)) {
- BM_ITER_ELEM (v, &bm_iter, f, BM_VERTS_OF_FACE) {
+ BMLoop *l_iter;
+ BMLoop *l_first;
+
+ l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+ do {
+ BMVert *v = l_iter->v;
if (use_short) {
unsigned short *elem = tri_data;
(*elem) = BM_elem_index_get(v);
@@ -2081,7 +2087,7 @@ void GPU_update_bmesh_buffers(GPU_Buffers *buffers,
elem++;
tri_data = elem;
}
- }
+ } while ((l_iter = l_iter->next) != l_first);
}
}