[Bf-blender-cvs] [f4ebf2133b3] lineart-bvh: LineArt: global look up list for bvh
YimingWu
noreply at git.blender.org
Tue Jun 22 14:57:47 CEST 2021
Commit: f4ebf2133b36051b49ebd85857f2e636cbeb042a
Author: YimingWu
Date: Tue Jun 22 20:57:31 2021 +0800
Branches: lineart-bvh
https://developer.blender.org/rBf4ebf2133b36051b49ebd85857f2e636cbeb042a
LineArt: global look up list for bvh
===================================================================
M source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
===================================================================
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) {
More information about the Bf-blender-cvs
mailing list