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-02 10:09:05 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-05-02 10:09:05 +0400
commit0408684763c469bf675b4f374a034957cc71a3bc (patch)
tree2d04866def7df468095f4bee0701bdca76462459 /source/blender/gpu
parentd5b36bf0274da3139d283f5ebb29d6ed345685de (diff)
avoid per-vertex mask layer lookups for dyntopo.
Diffstat (limited to 'source/blender/gpu')
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 5bef7a8ae0b..ff48e273619 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -1872,26 +1872,28 @@ GPU_Buffers *GPU_build_grid_buffers(int *grid_indices, int totgrid,
* index '*v_index' in the 'vert_data' array and '*v_index' is
* incremented.
*/
-static void gpu_bmesh_vert_to_buffer_copy(BMVert *v, BMesh *bm,
- VertexBufferFormat *vert_data,
- int *v_index,
- const float fno[3],
- const float *fmask)
+static void gpu_bmesh_vert_to_buffer_copy(BMVert *v,
+ VertexBufferFormat *vert_data,
+ int *v_index,
+ const float fno[3],
+ const float *fmask,
+ const int cd_vert_mask_offset)
{
- VertexBufferFormat *vd = &vert_data[*v_index];
- float *mask;
-
if (!BM_elem_flag_test(v, BM_ELEM_HIDDEN)) {
+ VertexBufferFormat *vd = &vert_data[*v_index];
+
/* TODO: should use material color */
float diffuse_color[4] = {0.8f, 0.8f, 0.8f, 1.0f};
/* Set coord, normal, and mask */
copy_v3_v3(vd->co, v->co);
normal_float_to_short_v3(vd->no, fno ? fno : v->no);
- mask = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_PAINT_MASK);
- gpu_color_from_mask_copy(fmask ? *fmask : *mask,
- diffuse_color,
- vd->color);
+
+ gpu_color_from_mask_copy(
+ fmask ? *fmask :
+ BM_ELEM_CD_GET_FLOAT(v, cd_vert_mask_offset),
+ diffuse_color,
+ vd->color);
/* Assign index for use in the triangle index buffer */
@@ -1950,6 +1952,9 @@ void GPU_update_bmesh_buffers(GPU_Buffers *buffers,
void *tri_data;
int tottri, totvert, maxvert = 0;
+ /* TODO, make mask layer optional for bmesh buffer */
+ const int cd_vert_mask_offset = CustomData_get_offset(&bm->vdata, CD_PAINT_MASK);
+
if (!buffers->vert_buf || (buffers->smooth && !buffers->index_buf))
return;
@@ -1982,12 +1987,14 @@ void GPU_update_bmesh_buffers(GPU_Buffers *buffers,
GHASH_ITER (gh_iter, bm_unique_verts) {
gpu_bmesh_vert_to_buffer_copy(BLI_ghashIterator_getKey(&gh_iter),
- bm, vert_data, &v_index, NULL, NULL);
+ vert_data, &v_index, NULL, NULL,
+ cd_vert_mask_offset);
}
GHASH_ITER (gh_iter, bm_other_verts) {
gpu_bmesh_vert_to_buffer_copy(BLI_ghashIterator_getKey(&gh_iter),
- bm, vert_data, &v_index, NULL, NULL);
+ vert_data, &v_index, NULL, NULL,
+ cd_vert_mask_offset);
}
maxvert = v_index;
@@ -2008,15 +2015,14 @@ void GPU_update_bmesh_buffers(GPU_Buffers *buffers,
/* Average mask value */
for (i = 0; i < 3; i++) {
- fmask += *((float*)CustomData_bmesh_get(&bm->vdata,
- v[i]->head.data,
- CD_PAINT_MASK));
+ fmask += BM_ELEM_CD_GET_FLOAT(v[i], cd_vert_mask_offset);
}
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);
+ gpu_bmesh_vert_to_buffer_copy(v[i], vert_data,
+ &v_index, f->no, &fmask,
+ cd_vert_mask_offset);
}
}
}