From 804e90b42d728ecb1073af8d0bae15a91b13a469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 11 Feb 2020 15:18:55 +0100 Subject: DRW: Color Management improvement Reviewed By: brecht sergey jbakker Differential Revision: http://developer.blender.org/D6729 --- source/blender/draw/intern/draw_cache.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'source/blender/draw/intern/draw_cache.c') diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c index 22fd22e4818..8057d167e2f 100644 --- a/source/blender/draw/intern/draw_cache.c +++ b/source/blender/draw/intern/draw_cache.c @@ -679,20 +679,30 @@ GPUBatch *DRW_cache_cube_get(void) if (!SHC.drw_cube) { GPUVertFormat format = extra_vert_format(); + const int tri_len = ARRAY_SIZE(bone_box_solid_tris); + const int vert_len = ARRAY_SIZE(bone_box_verts); + GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - GPU_vertbuf_data_alloc(vbo, ARRAY_SIZE(bone_box_solid_tris) * 3); + GPU_vertbuf_data_alloc(vbo, vert_len); + + GPUIndexBufBuilder elb; + GPU_indexbuf_init(&elb, GPU_PRIM_TRIS, tri_len, vert_len); int v = 0; - for (int i = 0; i < ARRAY_SIZE(bone_box_solid_tris); i++) { - for (int a = 0; a < 3; a++) { - float x = bone_box_verts[bone_box_solid_tris[i][a]][0]; - float y = bone_box_verts[bone_box_solid_tris[i][a]][1] * 2.0f - 1.0f; - float z = bone_box_verts[bone_box_solid_tris[i][a]][2]; - GPU_vertbuf_vert_set(vbo, v++, &(Vert){{x, y, z}, VCLASS_EMPTY_SCALED}); - } + for (int i = 0; i < vert_len; i++) { + float x = bone_box_verts[i][0]; + float y = bone_box_verts[i][1] * 2.0f - 1.0f; + float z = bone_box_verts[i][2]; + GPU_vertbuf_vert_set(vbo, v++, &(Vert){{x, y, z}, VCLASS_EMPTY_SCALED}); + } + + for (int i = 0; i < tri_len; i++) { + const uint *tri_indices = bone_box_solid_tris[i]; + GPU_indexbuf_add_tri_verts(&elb, tri_indices[0], tri_indices[1], tri_indices[2]); } - SHC.drw_cube = GPU_batch_create_ex(GPU_PRIM_TRIS, vbo, NULL, GPU_BATCH_OWNS_VBO); + SHC.drw_cube = GPU_batch_create_ex( + GPU_PRIM_TRIS, vbo, GPU_indexbuf_build(&elb), GPU_BATCH_OWNS_VBO | GPU_BATCH_OWNS_INDEX); } return SHC.drw_cube; } -- cgit v1.2.3