diff options
author | YimingWu <xp8110@outlook.com> | 2021-06-22 15:57:31 +0300 |
---|---|---|
committer | YimingWu <xp8110@outlook.com> | 2021-06-22 15:57:31 +0300 |
commit | f4ebf2133b36051b49ebd85857f2e636cbeb042a (patch) | |
tree | cd8a31a8ebe4f3943913d312c29cc3e2b9289f4a | |
parent | ee7e06d9b2d176b261c8c794635b08627fe1e3fe (diff) |
LineArt: global look up list for bvh
-rw-r--r-- | source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h | 1 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c | 20 |
2 files changed, 20 insertions, 1 deletions
diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h index 344c7069fe0..da9d628dbda 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h +++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h @@ -257,6 +257,7 @@ typedef struct LineartRenderBuffer { ListBase vertex_buffer_pointers; ListBase line_buffer_pointers; ListBase triangle_buffer_pointers; + LineartTriangle **triangle_lookup; /** This one's memory is not from main pool and is free()ed after culling stage. */ ListBase triangle_adjacent_pointers; diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c index f27c89661d8..dc9d994beb4 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c @@ -67,7 +67,7 @@ #define LINEART_WITH_BVH #define LINEART_WITH_BVH_THREAD -//#define LINEART_BVH_OWN_ISEC +#define LINEART_BVH_OWN_ISEC static LineartBoundingArea *lineart_edge_first_bounding_area(LineartRenderBuffer *rb, LineartEdge *e); @@ -2258,6 +2258,23 @@ static void lineart_main_load_geometries( } } + int tri_count = 0; + int global_tri_i = 0; + LineartTriangle *tri; + LISTBASE_FOREACH (LineartElementLinkNode *, eln, &rb->triangle_buffer_pointers) { + tri_count += eln->element_count; + } + + rb->triangle_lookup = lineart_mem_acquire(&rb->render_data_pool, sizeof(void *) * tri_count); + + LISTBASE_FOREACH (LineartElementLinkNode *, eln, &rb->triangle_buffer_pointers) { + for (int i = 0; i < eln->element_count; i++) { + tri = (void *)(((uchar *)eln->pointer) + rb->triangle_size * i); + rb->triangle_lookup[global_tri_i] = tri; + global_tri_i++; + } + } + if (G.debug_value == 4000) { double t_elapsed = PIL_check_seconds_timer() - t_start; printf("Line art loading time: %lf\n", t_elapsed); @@ -3891,6 +3908,7 @@ static void lineart_main_add_triangles(LineartRenderBuffer *rb) static LineartTriangle *lineart_get_triangle_from_index(LineartRenderBuffer *rb, int index) { + return rb->triangle_lookup[index]; int left = 0; int right = rb->bvh_inderxer_count - 1; while (left <= right) { |