[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