[Bf-blender-cvs] [b622b2caebb] lineart-bvh: LineArt: Use 2 way look up for global triangle index.
YimingWu
noreply at git.blender.org
Sat May 22 15:06:25 CEST 2021
Commit: b622b2caebbf5ece76cf0354d3b766dbabef5838
Author: YimingWu
Date: Sat May 22 20:44:50 2021 +0800
Branches: lineart-bvh
https://developer.blender.org/rBb622b2caebbf5ece76cf0354d3b766dbabef5838
LineArt: Use 2 way look up for global triangle index.
By Falk David
===================================================================
M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index ffed1ce5ba0..ed54120b4d7 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -3811,9 +3811,18 @@ static void lineart_main_add_triangles(LineartRenderBuffer *rb)
static LineartTriangle *lineart_get_triangle_from_index(LineartRenderBuffer *rb, int index)
{
- for (int i = 0; i < rb->bvh_inderxer_count; i++) {
- LineartTriangleBufferIndexer *tbi = &rb->bvh_triangle_indexer[i];
- if (index >= tbi->start_index && index < tbi->end_index) {
+ int left = 0;
+ int right = rb->bvh_inderxer_count - 1;
+ while (left <= right) {
+ int mid = (left + right) / 2;
+ LineartTriangleBufferIndexer *tbi = &rb->bvh_triangle_indexer[mid];
+ if (tbi->end_index <= index) {
+ left = mid + 1;
+ }
+ else if (tbi->start_index > index) {
+ right = mid - 1;
+ }
+ else {
return (LineartTriangle *)(((uint8_t *)tbi->eln->pointer) +
(rb->triangle_size * (index - tbi->start_index)));
}
More information about the Bf-blender-cvs
mailing list