[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