[Bf-blender-cvs] [9ec833266c6] lanpr-under-gp: LineArt: Removed rt->rl.
YimingWu
noreply at git.blender.org
Wed Oct 21 11:11:55 CEST 2020
Commit: 9ec833266c697e9c80d3fc9493a0b13bc9623d4f
Author: YimingWu
Date: Wed Oct 21 15:38:32 2020 +0800
Branches: lanpr-under-gp
https://developer.blender.org/rB9ec833266c697e9c80d3fc9493a0b13bc9623d4f
LineArt: Removed rt->rl.
===================================================================
M source/blender/editors/include/ED_lineart.h
M source/blender/editors/lineart/lineart_cpu.c
===================================================================
diff --git a/source/blender/editors/include/ED_lineart.h b/source/blender/editors/include/ED_lineart.h
index 53196e23994..0f14b63e917 100644
--- a/source/blender/editors/include/ED_lineart.h
+++ b/source/blender/editors/include/ED_lineart.h
@@ -52,13 +52,17 @@ typedef struct LineartStaticMemPool {
typedef struct LineartRenderTriangle {
struct LineartRenderVert *v[3];
- struct LineartRenderLine *rl[3];
+ //struct LineartRenderLine *rl[3];
+ /* first culled in line list to use adjacent triangle info, then go through triangle list. */
double gn[3];
- /* struct BMFace *F; */
- short material_id;
- ListBase intersecting_verts;
+
+ /* Material flag is removed to save space. */
unsigned char transparency_mask;
unsigned char flags; /* eLineartTriangleFlags */
+
+ /* These two should only be allocated when intersection is enabled, using a pointer. */
+ ListBase intersecting_verts;
+ struct Object* object_ref;
} LineartRenderTriangle;
typedef struct LineartRenderTriangleThread {
@@ -117,8 +121,7 @@ typedef struct LineartRenderVert {
/** Used as "r" when intersecting */
struct BMVert *v;
- struct LineartRenderLine *intersecting_line;
- struct LineartRenderLine *intersecting_line2;
+ struct LineartRenderVert *isec1,*isec2;
struct LineartRenderTriangle *intersecting_with;
} LineartRenderVert;
diff --git a/source/blender/editors/lineart/lineart_cpu.c b/source/blender/editors/lineart/lineart_cpu.c
index 8c68d43f6f9..58add1a99b3 100644
--- a/source/blender/editors/lineart/lineart_cpu.c
+++ b/source/blender/editors/lineart/lineart_cpu.c
@@ -431,15 +431,6 @@ static void lineart_occlusion_single_line(LineartRenderBuffer *rb,
&l,
&r)) {
lineart_render_line_cut(rb, rl, l, r, rt->base.transparency_mask);
- if (G.debug_value == 4000 && (rl->flags & LRT_EDGE_FLAG_INTERSECTION)) {
- printf("l,r %f %f against %s(%d)` this rl is from %s(%d)\n",
- l,
- r,
- ((Object *)rt->base.rl[0]->object_ref)->id.name,
- (int)rt->base.rl[0]->object_ref,
- ((Object *)rl->object_ref)->id.name,
- (int)rl->object_ref);
- }
if (rl->min_occ > rb->max_occlusion_level) {
return; /* No need to caluclate any longer. */
}
@@ -726,30 +717,6 @@ static LineartRenderElementLinkNode *lineart_memory_get_line_space(LineartRender
return reln;
}
-static void lineart_render_line_assign_with_triangle(LineartRenderTriangle *rt)
-{
- if (rt->rl[0]->tl == NULL) {
- rt->rl[0]->tl = rt;
- }
- else if (rt->rl[0]->tr == NULL) {
- rt->rl[0]->tr = rt;
- }
-
- if (rt->rl[1]->tl == NULL) {
- rt->rl[1]->tl = rt;
- }
- else if (rt->rl[1]->tr == NULL) {
- rt->rl[1]->tr = rt;
- }
-
- if (rt->rl[2]->tl == NULL) {
- rt->rl[2]->tl = rt;
- }
- else if (rt->rl[2]->tr == NULL) {
- rt->rl[2]->tr = rt;
- }
-}
-
static void lineart_triangle_post(LineartRenderTriangle *rt, LineartRenderTriangle *orig)
{
copy_v3_v3_db(rt->gn, orig->gn);
@@ -763,45 +730,11 @@ static void lineart_triangle_set_cull_flag(LineartRenderTriangle *rt, unsigned c
rt->flags |= intersection_only;
}
-static bool lineart_triangle_adjacent_line_set(LineartRenderTriangle *rt,
- LineartRenderTriangle *search_in,
- LineartRenderTriangle *replace_with)
-{
- if (!search_in) {
- return false;
- }
- if (search_in->rl[0]->tl == rt) {
- search_in->rl[0]->tl = replace_with;
- return (search_in->rl[0]->flags & LRT_EDGE_FLAG_CLIPPED) != 0;
- }
- if (search_in->rl[0]->tr == rt) {
- search_in->rl[0]->tr = replace_with;
- return (search_in->rl[0]->flags & LRT_EDGE_FLAG_CLIPPED) != 0;
- }
- if (search_in->rl[1]->tl == rt) {
- search_in->rl[1]->tl = replace_with;
- return (search_in->rl[1]->flags & LRT_EDGE_FLAG_CLIPPED) != 0;
- }
- if (search_in->rl[1]->tr == rt) {
- search_in->rl[1]->tr = replace_with;
- return (search_in->rl[1]->flags & LRT_EDGE_FLAG_CLIPPED) != 0;
- }
- if (search_in->rl[2]->tl == rt) {
- search_in->rl[2]->tl = replace_with;
- return (search_in->rl[2]->flags & LRT_EDGE_FLAG_CLIPPED) != 0;
- }
- if (search_in->rl[2]->tr == rt) {
- search_in->rl[2]->tr = replace_with;
- return (search_in->rl[2]->flags & LRT_EDGE_FLAG_CLIPPED) != 0;
- }
- return false;
-}
-
/** This function cuts triangles that are (partially or fully) behind near clipping plane.
* for triangles that crossing the near plane, it will generate new 1 or 2 triangles with
* new topology that represents the trimmed triangle. (which then became a triangle or square)
*/
-static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
+static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far, LineartRenderLine* given_line)
{
LineartRenderLine *rl, *new_rl;
LineartRenderTriangle *rt, *rt1, *rt2, *rt_next_to;
@@ -918,17 +851,6 @@ static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
double vv1[3], vv2[3], dot1, dot2;
-#define REMOVE_ORIGINAL_LINES \
- BLI_remlink(&rb->all_render_lines, (void *)rt->rl[0]); \
- rt->rl[0]->next = rt->rl[0]->prev = 0; \
- rt->rl[0]->flags |= LRT_EDGE_FLAG_CHAIN_PICKED; \
- BLI_remlink(&rb->all_render_lines, (void *)rt->rl[1]); \
- rt->rl[1]->next = rt->rl[1]->prev = 0; \
- rt->rl[1]->flags |= LRT_EDGE_FLAG_CHAIN_PICKED; \
- BLI_remlink(&rb->all_render_lines, (void *)rt->rl[2]); \
- rt->rl[2]->next = rt->rl[2]->prev = 0; \
- rt->rl[2]->flags |= LRT_EDGE_FLAG_CHAIN_PICKED;
-
switch (in0 + in1 + in2) {
case 0: /* ignore this triangle. */
continue;
@@ -938,8 +860,6 @@ static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
*/
lineart_triangle_set_cull_flag(rt, LRT_CULL_DISCARD);
- REMOVE_ORIGINAL_LINES
-
continue;
case 2:
/** Two points behind near plane, cut those and
@@ -984,8 +904,6 @@ static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
interp_v3_v3v3_db(rv[1].gloc, rt->v[0]->gloc, rt->v[1]->gloc, a);
mul_v4_m4v3_db(rv[1].fbcoord, vp, rv[1].gloc);
- REMOVE_ORIGINAL_LINES
-
/* New line connecting two new points */
INCREASE_RL
if (allow_boundaries) {
@@ -1000,7 +918,6 @@ static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
/* only one adjacent triangle, because the other side is the near plane */
/* use tl or tr doesn't matter. */
rl->tl = rt1;
- rt1->rl[1] = rl;
rl->object_ref = ob;
/* new line connecting original point 0 and a new point */
@@ -1008,32 +925,14 @@ static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
rl->l = &rv[1];
rl->r = rt->v[0];
rl->flags |= LRT_EDGE_FLAG_CLIPPED;
- /* restore adjacent triangle data. */
- rl->tl = rt->rl[0]->tl == rt ? rt1 : rt->rl[0]->tl;
- rl->tr = rt->rl[0]->tr == rt ? rt1 : rt->rl[0]->tr;
- rt1->rl[0] = rl;
rl->object_ref = ob;
- rt_next_to = rt->rl[0]->tl == rt ? rt->rl[0]->tr : rt->rl[0]->tl;
- added = lineart_triangle_adjacent_line_set(rt, rt_next_to, rt1);
- if (!added) {
- BLI_addtail(&rb->all_render_lines, rl);
- }
/* new line connecting original point 0 and another new point */
INCREASE_RL
rl->l = rt->v[0];
rl->r = &rv[0];
rl->flags |= LRT_EDGE_FLAG_CLIPPED;
- /* restore adjacent triangle data. */
- rl->tl = rt->rl[2]->tl == rt ? rt1 : rt->rl[2]->tl;
- rl->tr = rt->rl[2]->tr == rt ? rt1 : rt->rl[2]->tr;
- rt1->rl[2] = rl;
rl->object_ref = ob;
- rt_next_to = rt->rl[2]->tl == rt ? rt->rl[2]->tr : rt->rl[2]->tl;
- added = lineart_triangle_adjacent_line_set(rt, rt_next_to, rt1);
- if (!added) {
- BLI_addtail(&rb->all_render_lines, rl);
- }
/* re-assign triangle point array to two new points. */
rt1->v[0] = rt->v[0];
@@ -1063,8 +962,6 @@ static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
interp_v3_v3v3_db(rv[1].gloc, rt->v[2]->gloc, rt->v[1]->gloc, a);
mul_v4_m4v3_db(rv[1].fbcoord, vp, rv[1].gloc);
- REMOVE_ORIGINAL_LINES
-
INCREASE_RL
if (allow_boundaries) {
BLI_addtail(&rb->all_render_lines, rl);
@@ -1072,36 +969,19 @@ static void lineart_main_cull_triangles(LineartRenderBuffer *rb, bool clip_far)
rl->l = &rv[0];
rl->r = &rv[1];
rl->tl = rt1;
- rt1->rl[0] = rl;
rl->object_ref = ob;
INCREASE_RL
rl->l = &rv[1];
rl->r = rt->v[2];
rl->flags |= LRT_EDGE_FLAG_CLIPPED;
- rl->tl = rt->rl[1]->tl == rt ? rt1 : rt->rl[1]->tl;
- rl->tr = rt->rl[1]->tr == rt ? rt1 : rt->rl[1]->tr;
- rt1->rl[1] = rl;
rl->object_ref = ob;
- rt_next_to = rt->rl[1]->tl == rt ? rt->rl[1]->tr : rt->rl[1]->tl;
- added = lineart_triangle_adjacent_line_set(rt, rt_next_to, rt1);
- if (!added) {
- BLI_addtail(&rb->all_render_lines, rl);
- }
INCREASE_RL
rl->l = rt->v[2];
rl->r = &rv[0];
rl->flags |= LRT_EDGE_FLAG_CLIPPED;
- rl->tl = rt->rl[2]->tl == rt ? rt1 : rt->rl[2]->tl;
- rl->tr = rt->rl[2]->tr == rt ? rt1 : rt->rl[2]->tr;
- rt1->rl[2] = rl;
rl->object_ref = ob;
- rt_next_to = rt->rl[2]->tl == rt ? rt->rl[2]->tr : rt->rl[2]->tl;
- added = lineart_triangle_adjacent_line_set(rt, rt_next_to, rt1);
- if (!added
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list