From 722bcb554f9c2bb26c9abde5d8a3a16c5e3075bc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 11 May 2017 07:34:56 +1000 Subject: Sculpt Drawing: reduce redundant color conversion Also replace macro with for loop. --- source/blender/gpu/intern/gpu_buffers.c | 52 ++++++++++++++------------------- 1 file changed, 22 insertions(+), 30 deletions(-) (limited to 'source/blender/gpu') diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 3325240a2d1..6a2aa106f6a 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -1036,7 +1036,7 @@ void GPU_update_mesh_pbvh_buffers( const int (*face_vert_indices)[3], bool show_diffuse_color) { VertexBufferFormat *vert_data; - int i, j; + int i; buffers->vmask = vmask; buffers->show_diffuse_color = show_diffuse_color; @@ -1057,6 +1057,9 @@ void GPU_update_mesh_pbvh_buffers( copy_v4_v4(buffers->diffuse_color, diffuse_color); + uchar diffuse_color_ub[4]; + rgba_float_to_uchar(diffuse_color_ub, diffuse_color); + /* Build VBO */ if (buffers->vert_buf) GPU_buffer_free(buffers->vert_buf); @@ -1076,28 +1079,20 @@ void GPU_update_mesh_pbvh_buffers( memcpy(out->no, v->no, sizeof(short) * 3); } -#define UPDATE_VERTEX(face, vertex, index, diffuse_color) \ - { \ - VertexBufferFormat *out = vert_data + face_vert_indices[face][index]; \ - if (vmask) \ - gpu_color_from_mask_copy(vmask[vertex], diffuse_color, out->color); \ - else \ - rgb_float_to_uchar(out->color, diffuse_color); \ - } (void)0 - for (i = 0; i < buffers->face_indices_len; i++) { const MLoopTri *lt = &buffers->looptri[buffers->face_indices[i]]; - const unsigned int vtri[3] = { - buffers->mloop[lt->tri[0]].v, - buffers->mloop[lt->tri[1]].v, - buffers->mloop[lt->tri[2]].v, - }; + for (uint j = 0; j < 3; j++) { + VertexBufferFormat *out = vert_data + face_vert_indices[i][j]; - UPDATE_VERTEX(i, vtri[0], 0, diffuse_color); - UPDATE_VERTEX(i, vtri[1], 1, diffuse_color); - UPDATE_VERTEX(i, vtri[2], 2, diffuse_color); + if (vmask) { + uint v_index = buffers->mloop[lt->tri[j]].v; + gpu_color_from_mask_copy(vmask[v_index], diffuse_color, out->color); + } + else { + copy_v3_v3_uchar(out->color, diffuse_color_ub); + } + } } -#undef UPDATE_VERTEX } else { /* calculate normal for each polygon only once */ @@ -1112,8 +1107,6 @@ void GPU_update_mesh_pbvh_buffers( buffers->mloop[lt->tri[2]].v, }; - float fmask; - if (paint_is_face_hidden(lt, mvert, buffers->mloop)) continue; @@ -1126,23 +1119,22 @@ void GPU_update_mesh_pbvh_buffers( mpoly_prev = lt->poly; } + uchar color_ub[3]; if (vmask) { - fmask = (vmask[vtri[0]] + - vmask[vtri[1]] + - vmask[vtri[2]]) / 3.0f; + float fmask = (vmask[vtri[0]] + vmask[vtri[1]] + vmask[vtri[2]]) / 3.0f; + gpu_color_from_mask_copy(fmask, diffuse_color, color_ub); + } + else { + copy_v3_v3_uchar(color_ub, diffuse_color_ub); } - for (j = 0; j < 3; j++) { + for (uint j = 0; j < 3; j++) { const MVert *v = &mvert[vtri[j]]; VertexBufferFormat *out = vert_data; copy_v3_v3(out->co, v->co); copy_v3_v3_short(out->no, no); - - if (vmask) - gpu_color_from_mask_copy(fmask, diffuse_color, out->color); - else - rgb_float_to_uchar(out->color, diffuse_color); + copy_v3_v3_uchar(out->color, color_ub); vert_data++; } -- cgit v1.2.3