[Bf-blender-cvs] [7f004860b99] temp-lineart-contained: LineArt: Use safe remove_duplicated_edges
YimingWu
noreply at git.blender.org
Wed May 18 09:44:19 CEST 2022
Commit: 7f004860b993e739d40c049485c9479d3cd6571c
Author: YimingWu
Date: Tue May 10 15:06:31 2022 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB7f004860b993e739d40c049485c9479d3cd6571c
LineArt: Use safe remove_duplicated_edges
===================================================================
M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M source/blender/makesdna/DNA_lineart_types.h
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 7761b1201fe..c7d06b1ae7c 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -766,10 +766,9 @@ static bool lineart_edge_match(LineartTriangle *tri, LineartEdge *e, int v1, int
static void lineart_discard_duplicated_edges(LineartEdge *old_e, int v1id, int v2id)
{
LineartEdge *e = old_e;
- e++;
- while (e->v1 && e->v2 && e->v1->index == v1id && e->v2->index == v2id) {
- e->flags |= LRT_EDGE_FLAG_CHAIN_PICKED;
+ while (e->flags & LRT_EDGE_FLAG_NEXT_IS_DUPLICATION) {
e++;
+ e->flags |= LRT_EDGE_FLAG_CHAIN_PICKED;
}
}
@@ -2171,7 +2170,7 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, LineartRend
continue;
}
- bool edge_added = false;
+ LineartEdge *edge_added = NULL;
/* See eLineartEdgeFlag for details. */
for (int flag_bit = 0; flag_bit < LRT_EDGE_FLAG_TYPE_MAX_BITS; flag_bit++) {
@@ -2202,7 +2201,11 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, LineartRend
lineart_add_edge_to_list_thread(ob_info, la_edge);
}
- edge_added = true;
+ if (edge_added) {
+ edge_added->flags |= LRT_EDGE_FLAG_NEXT_IS_DUPLICATION;
+ }
+
+ edge_added = la_edge;
la_edge++;
la_seg++;
@@ -2244,14 +2247,14 @@ static void lineart_object_load_worker(TaskPool *__restrict UNUSED(pool),
//- Print size of pending objects.
//- Try to feed this with an array instead of via the pool instead of a custom list
//- Assign the number of objects instead of number of threads
- printf("thread start: %d\n", olti->thread_id);
+ // printf("thread start: %d\n", olti->thread_id);
for (LineartObjectInfo *obi = olti->pending; obi; obi = obi->next) {
lineart_geometry_object_load(obi, olti->rb);
if (G.debug_value == 4000) {
- printf("thread id: %d processed: %d\n", olti->thread_id, obi->original_me->totpoly);
+ // printf("thread id: %d processed: %d\n", olti->thread_id, obi->original_me->totpoly);
}
}
- printf("thread end: %d\n", olti->thread_id);
+ // printf("thread end: %d\n", olti->thread_id);
}
static uchar lineart_intersection_mask_check(Collection *c, Object *ob)
diff --git a/source/blender/makesdna/DNA_lineart_types.h b/source/blender/makesdna/DNA_lineart_types.h
index e3aa6eb1156..3b0f2baa310 100644
--- a/source/blender/makesdna/DNA_lineart_types.h
+++ b/source/blender/makesdna/DNA_lineart_types.h
@@ -59,6 +59,8 @@ typedef enum eLineartEdgeFlag {
/** For object loading code to use only. */
LRT_EDGE_FLAG_INHIBIT = (1 << 14),
+ /** For discarding duplicated edge types in culling stage. */
+ LRT_EDGE_FLAG_NEXT_IS_DUPLICATION = (1 << 15),
} eLineartEdgeFlag;
#define LRT_EDGE_FLAG_ALL_TYPE 0x7f
More information about the Bf-blender-cvs
mailing list