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) { _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs