[Bf-blender-cvs] [f8230df5538] lineart-bvh: LineArt: BVH reduction
YimingWu
noreply at git.blender.org
Wed Jun 16 16:28:31 CEST 2021
Commit: f8230df553873055ba2d52549f1e84fd07bd5b05
Author: YimingWu
Date: Tue Jun 15 17:23:37 2021 +0800
Branches: lineart-bvh
https://developer.blender.org/rBf8230df553873055ba2d52549f1e84fd07bd5b05
LineArt: BVH reduction
===================================================================
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 cf283c0f691..80d0bd09e59 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -65,7 +65,7 @@
#include "lineart_intern.h"
-// #define LINEART_WITH_BVH
+#define LINEART_WITH_BVH
static LineartBoundingArea *lineart_edge_first_bounding_area(LineartRenderBuffer *rb,
LineartEdge *e);
@@ -3868,8 +3868,10 @@ static void lineart_main_add_triangles(LineartRenderBuffer *rb)
#ifdef LINEART_WITH_BVH
float bounding[6];
- lineart_triangle_bbox(rt, bounding);
- BLI_bvhtree_insert(rb->bvh_main, i_triangle + i, bounding, 2);
+ lineart_triangle_bbox(tri, bounding);
+ if (!(tri->flags & LRT_TRIANGLE_NO_INTERSECTION)) {
+ BLI_bvhtree_insert(rb->bvh_main, i_triangle + i, bounding, 2);
+ }
#endif
if (lineart_get_triangle_bounding_areas(rb, tri, &y1, &y2, &x1, &x2)) {
@@ -3927,31 +3929,12 @@ static void lineart_do_intersections(LineartRenderBuffer *rb)
continue;
}
- double *G0 = rt1->v[0]->gloc, *G1 = rt1->v[1]->gloc, *G2 = rt1->v[2]->gloc;
-
- LineartTriangleThread *rtt = (LineartTriangleThread *)rt2;
-
- if (rt2 == rt1 || rtt->testing_e[0] == (LineartEdge *)rt1) {
+ if ((rt2->flags & LRT_TRIANGLE_INTERSECTION_ONLY) &&
+ (rt1->flags & LRT_TRIANGLE_INTERSECTION_ONLY)) {
continue;
}
- rtt->testing_e[0] = (LineartEdge *)rt1;
-
- if ((rt2->flags & LRT_TRIANGLE_NO_INTERSECTION) ||
- ((rt2->flags & LRT_TRIANGLE_INTERSECTION_ONLY) &&
- (rt1->flags & LRT_TRIANGLE_INTERSECTION_ONLY))) {
- continue;
- }
-
- double *RG0 = rt2->v[0]->gloc, *RG1 = rt2->v[1]->gloc, *RG2 = rt2->v[2]->gloc;
-
/* Bounding box not overlapping or triangles share edges, not potential of intersecting. */
- if ((MIN3(G0[2], G1[2], G2[2]) > MAX3(RG0[2], RG1[2], RG2[2])) ||
- (MAX3(G0[2], G1[2], G2[2]) < MIN3(RG0[2], RG1[2], RG2[2])) ||
- (MIN3(G0[0], G1[0], G2[0]) > MAX3(RG0[0], RG1[0], RG2[0])) ||
- (MAX3(G0[0], G1[0], G2[0]) < MIN3(RG0[0], RG1[0], RG2[0])) ||
- (MIN3(G0[1], G1[1], G2[1]) > MAX3(RG0[1], RG1[1], RG2[1])) ||
- (MAX3(G0[1], G1[1], G2[1]) < MIN3(RG0[1], RG1[1], RG2[1])) ||
- lineart_triangle_share_edge(rt1, rt2)) {
+ if (lineart_triangle_share_edge(rt1, rt2)) {
continue;
}
More information about the Bf-blender-cvs
mailing list