[Bf-blender-cvs] [d4bdf9a3484] temp-lineart-contained: LineArt: Clipping handling multi type edges.
YimingWu
noreply at git.blender.org
Sun May 9 03:11:55 CEST 2021
Commit: d4bdf9a348454995505c6e9ee65d7252744308ad
Author: YimingWu
Date: Sun May 9 09:11:39 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rBd4bdf9a348454995505c6e9ee65d7252744308ad
LineArt: Clipping handling multi type edges.
===================================================================
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 dc063d5b1e9..54451235421 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -714,6 +714,8 @@ static void lineart_triangle_post(LineartTriangle *rt, LineartTriangle *orig)
/* Just re-assign normal and set cull flag. */
copy_v3_v3_db(rt->gn, orig->gn);
rt->flags = LRT_CULL_GENERATED;
+ rt->intersection_mask = orig->intersection_mask;
+ rt->transparency_mask = orig->transparency_mask;
}
static void lineart_triangle_set_cull_flag(LineartTriangle *rt, uchar flag)
@@ -729,6 +731,16 @@ static bool lineart_edge_match(LineartTriangle *rt, LineartEdge *e, int v1, int
(rt->v[v2] == e->v1 && rt->v[v1] == e->v2));
}
+static void lineart_discard_duplicated_edges(LineartEdge *old_e, int v1id, int v2id)
+{
+ LineartEdge *e = old_e;
+ e++;
+ while (e->v1_obindex == v1id && e->v2_obindex == v2id) {
+ e->flags |= LRT_EDGE_FLAG_CHAIN_PICKED;
+ e++;
+ }
+}
+
/**
* Does near-plane cut on 1 triangle only. When cutting with far-plane, the camera vectors gets
* reversed by the caller so don't need to implement one in a different direction.
@@ -794,6 +806,7 @@ static void lineart_triangle_cull_single(LineartRenderBuffer *rb,
old_e = rta->e[e_num]; \
new_flag = old_e->flags; \
old_e->flags = LRT_EDGE_FLAG_CHAIN_PICKED; \
+ lineart_discard_duplicated_edges(old_e, old_e->v1_obindex, old_e->v2_obindex); \
INCREASE_RL \
e->v1 = (v1_link); \
e->v2 = (v2_link); \
@@ -814,12 +827,15 @@ static void lineart_triangle_cull_single(LineartRenderBuffer *rb,
#define REMOVE_TRIANGLE_RL \
if (rta->e[0]) { \
rta->e[0]->flags = LRT_EDGE_FLAG_CHAIN_PICKED; \
+ lineart_discard_duplicated_edges(rta->e[0], rta->e[0]->v1_obindex, rta->e[0]->v2_obindex); \
} \
if (rta->e[1]) { \
rta->e[1]->flags = LRT_EDGE_FLAG_CHAIN_PICKED; \
+ lineart_discard_duplicated_edges(rta->e[1], rta->e[1]->v1_obindex, rta->e[1]->v2_obindex); \
} \
if (rta->e[2]) { \
rta->e[2]->flags = LRT_EDGE_FLAG_CHAIN_PICKED; \
+ lineart_discard_duplicated_edges(rta->e[2], rta->e[2]->v1_obindex, rta->e[2]->v2_obindex); \
}
switch (in0 + in1 + in2) {
More information about the Bf-blender-cvs
mailing list