[Bf-blender-cvs] [e9c8e616b59] temp-lineart-embree: LineArt: Embree wip.

YimingWu noreply at git.blender.org
Tue Mar 15 14:53:57 CET 2022


Commit: e9c8e616b59cf5c086d7758806b0a121dc8a43cc
Author: YimingWu
Date:   Mon Mar 14 22:51:23 2022 +0800
Branches: temp-lineart-embree
https://developer.blender.org/rBe9c8e616b59cf5c086d7758806b0a121dc8a43cc

LineArt: Embree wip.

===================================================================

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 cd53f21ff99..ae5a5a6393a 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -1854,7 +1854,7 @@ static void lineart_geometry_object_load(LineartObjectInfo *obi, LineartRenderBu
 
 #ifdef LINEART_USE_EMBREE
   RTCGeometry geom = rtcGetGeometry(rb->rtcscene_geom, obi->embree_geom_id);
-  rtcSetGeometryUserData(geom, eln);
+  rb->mesh_record.array[obi->embree_geom_id].eln_triangle = eln;
 #endif
 
   /* Note this memory is not from pool, will be deleted after culling. */
@@ -2228,6 +2228,7 @@ static void lineart_embree_virtual_bounds_func(const struct RTCBoundsFunctionArg
   /* XXX: This doesn't actually take into account of LRT_CULL_DISCARD. */
   LineartElementLinkNode *eln = args->geometryUserPtr;
   LineartEdge *e = eln->pointer;
+  /* XXX: Every E is 0. */
   double *p0 = e[args->primID].v1->gloc;
   double *p1 = e[args->primID].v2->gloc;
   double *p2 = eln->cam_pos;
@@ -2599,8 +2600,11 @@ OcclusionCollideFunc(void *userPtr, struct RTCCollision *collisions, unsigned in
       continue;
     }
     /* Continue from here. */
-    LineartElementLinkNode *eln_edge = rtcGetGeometryUserData(collisions[i].geomID0);
-    LineartElementLinkNode *eln_triangle = rtcGetGeometryUserData(collisions[i].geomID1);
+    RTCGeometry g_edge = rtcGetGeometry(rb->rtcscene_geom, collisions[i].geomID0);
+    RTCGeometry g_triangle = rtcGetGeometry(rb->rtcscene_view, collisions[i].geomID1);
+
+    LineartElementLinkNode *eln_edge = rtcGetGeometryUserData(g_edge);
+    LineartElementLinkNode *eln_triangle = rtcGetGeometryUserData(g_triangle);
     if (eln_triangle->flags & LRT_ELEMENT_IS_EDGE) {
       SWAP(LineartElementLinkNode *, eln_edge, eln_triangle);
     }
@@ -2680,7 +2684,7 @@ static void lineart_embree_do_intersections(LineartRenderBuffer *rb)
   for (int32_t i = 0; i < rb->mesh_record.next; i++) {
     LineartPointArrayFinal *rec = &rb->mesh_record.array[i];
     RTCGeometry geom = rtcGetGeometry(rb->rtcscene_geom, i);
-    rtcSetGeometryUserData(geom, rec->eln_triangle);
+    rtcSetGeometryUserData(geom, rec);
     rtcSetGeometryBoundsFunction(geom, lineart_embree_mesh_bounds_func, rec);
     rtcCommitGeometry(geom);
   }



More information about the Bf-blender-cvs mailing list