[Bf-blender-cvs] [af1c35eeee9] temp-lineart-contained: Lineart: Fix problems in edge array.
YimingWu
noreply at git.blender.org
Tue Apr 5 16:59:52 CEST 2022
Commit: af1c35eeee9a242645632fd119a3aee0e84f9250
Author: YimingWu
Date: Tue Apr 5 22:22:49 2022 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rBaf1c35eeee9a242645632fd119a3aee0e84f9250
Lineart: Fix problems in edge array.
===================================================================
M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index a7153e7abde..88cb5471781 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -934,7 +934,7 @@ static void lineart_triangle_cull_single(LineartRenderBuffer *rb,
INCREASE_EDGE
if (allow_boundaries) {
e->flags = LRT_EDGE_FLAG_CONTOUR;
- lineart_add_edge_to_list(&rb->pending_edges.array, e);
+ lineart_add_edge_to_list(&rb->pending_edges, e);
}
/* NOTE: inverting `e->v1/v2` (left/right point) doesn't matter as long as
* `tri->edge` and `tri->v` has the same sequence. and the winding direction
@@ -983,7 +983,7 @@ static void lineart_triangle_cull_single(LineartRenderBuffer *rb,
INCREASE_EDGE
if (allow_boundaries) {
e->flags = LRT_EDGE_FLAG_CONTOUR;
- lineart_add_edge_to_list(&rb->pending_edges.array, e);
+ lineart_add_edge_to_list(&rb->pending_edges, e);
}
e->v1 = &vt[0];
e->v2 = &vt[1];
@@ -1024,7 +1024,7 @@ static void lineart_triangle_cull_single(LineartRenderBuffer *rb,
INCREASE_EDGE
if (allow_boundaries) {
e->flags = LRT_EDGE_FLAG_CONTOUR;
- lineart_add_edge_to_list(&rb->pending_edges.array, e);
+ lineart_add_edge_to_list(&rb->pending_edges, e);
}
e->v1 = &vt[1];
e->v2 = &vt[0];
@@ -1099,7 +1099,7 @@ static void lineart_triangle_cull_single(LineartRenderBuffer *rb,
INCREASE_EDGE
if (allow_boundaries) {
e->flags = LRT_EDGE_FLAG_CONTOUR;
- lineart_add_edge_to_list(&rb->pending_edges.array, e);
+ lineart_add_edge_to_list(&rb->pending_edges, e);
}
e->v1 = &vt[1];
e->v2 = &vt[0];
@@ -1151,7 +1151,7 @@ static void lineart_triangle_cull_single(LineartRenderBuffer *rb,
INCREASE_EDGE
if (allow_boundaries) {
e->flags = LRT_EDGE_FLAG_CONTOUR;
- lineart_add_edge_to_list(&rb->pending_edges.array, e);
+ lineart_add_edge_to_list(&rb->pending_edges, e);
}
e->v1 = &vt[1];
e->v2 = &vt[0];
@@ -1199,7 +1199,7 @@ static void lineart_triangle_cull_single(LineartRenderBuffer *rb,
INCREASE_EDGE
if (allow_boundaries) {
e->flags = LRT_EDGE_FLAG_CONTOUR;
- lineart_add_edge_to_list(&rb->pending_edges.array, e);
+ lineart_add_edge_to_list(&rb->pending_edges, e);
}
e->v1 = &vt[1];
e->v2 = &vt[0];
@@ -1886,6 +1886,9 @@ static void lineart_finalize_object_edge_list_reserve(LineartPendingEdges *pe, i
static void lineart_finalize_object_edge_list(LineartPendingEdges *pe, LineartObjectInfo *obi)
{
+ if (!obi->pending_edges.array) {
+ return;
+ }
memcpy(&pe->array[pe->next],
obi->pending_edges.array,
sizeof(LineartEdge *) * obi->pending_edges.next);
@@ -2690,8 +2693,8 @@ static void lineart_object_load_worker(TaskPool *__restrict UNUSED(pool),
//- Assign the number of objects instead of number of threads
printf("thread start: %d\n", olti->thread_id);
for (LineartObjectInfo *obi = olti->pending; obi; obi = obi->next) {
- lineart_geometry_object_load_no_bmesh(obi, olti->rb);
- // lineart_geometry_object_load(obi, olti->rb);
+ // lineart_geometry_object_load_no_bmesh(obi, olti->rb);
+ lineart_geometry_object_load(obi, olti->rb);
printf("thread id: %d processed: %d\n", olti->thread_id, obi->original_me->totpoly);
}
printf("thread end: %d\n", olti->thread_id);
@@ -4738,7 +4741,7 @@ static void lineart_create_edges_from_isec_data(LineartIsecData *d)
e->intersection_mask = (is->tri1->intersection_mask | is->tri2->intersection_mask);
BLI_addtail(&e->segments, es);
- lineart_add_edge_to_list(&rb->pending_edges.array, e);
+ lineart_add_edge_to_list(&rb->pending_edges, e);
v += 2;
e++;
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
index 44d962e20f2..660f12340e8 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h
@@ -69,14 +69,16 @@ int lineart_count_intersection_segment_count(struct LineartRenderBuffer *rb);
void lineart_count_and_print_render_buffer_memory(struct LineartRenderBuffer *rb);
#define LRT_ITER_ALL_LINES_BEGIN \
- LineartEdge *e; \
- for (int i = 0; i < rb->pending_edges.next; i++) { \
- e = rb->pending_edges.array[i];
+ { \
+ LineartEdge *e; \
+ for (int __i = 0; __i < rb->pending_edges.next; __i++) { \
+ e = rb->pending_edges.array[__i];
#define LRT_ITER_ALL_LINES_NEXT ; /* Doesn't do anything now with new array setup. */
#define LRT_ITER_ALL_LINES_END \
LRT_ITER_ALL_LINES_NEXT \
+ } \
}
#define LRT_BOUND_AREA_CROSSES(b1, b2) \
More information about the Bf-blender-cvs
mailing list