[Bf-blender-cvs] [dc61580638f] soc-2019-npr: LANPR: modifier controlled stroke generation is working. (only manual)

YimingWu noreply at git.blender.org
Sun Jun 23 12:02:39 CEST 2019


Commit: dc61580638ff5c9a3a91eaa03ffad56f01efc4e1
Author: YimingWu
Date:   Sun Jun 23 15:30:16 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBdc61580638ff5c9a3a91eaa03ffad56f01efc4e1

LANPR: modifier controlled stroke generation is working. (only manual)

===================================================================

M	source/blender/draw/engines/lanpr/lanpr_access.c
M	source/blender/draw/engines/lanpr/lanpr_chain.c
M	source/blender/draw/engines/lanpr/lanpr_data_types.h
M	source/blender/draw/engines/lanpr/lanpr_ops.c

===================================================================

diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c
index 95cfe3dd2e7..f8b844b58ba 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -264,6 +264,10 @@ void lanpr_generate_gpencil_from_chain(
   LANPR_RenderLineChainItem *rlci;
   for (rlc = rb->chains.first; rlc; rlc = (LANPR_RenderLineChain *)rlc->item.next) {
 
+    if(!rlc->object_ref) continue; //XXX: intersection lines are lost
+    
+    if(ob && ob!=rlc->object_ref->id.orig_id) continue;
+
     int array_idx = 0;
     int count = lanpr_count_chain(rlc);
     bGPDstroke *gps = BKE_gpencil_add_stroke(gpf, color_idx, count, thickness);
diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index 5dfad61089f..849b161c8dc 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -214,6 +214,8 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb)
 
     rlc = lanpr_create_render_line_chain(rb);
 
+    rlc->object_ref = rl->object_ref; // can only be the same object in a chain.
+
     int r1, r2, c1, c2, row, col;
     LANPR_RenderLine *new_rl = rl;
     LANPR_RenderVert *new_rv;
@@ -600,6 +602,7 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
         break;
       for (cre = ba->linked_chains.first; cre; cre = next_cre) {
         next_cre = (LANPR_ChainRegisterEntry *)cre->item.next;
+        if (cre->rlc->object_ref!=rlc) continue;
         if (cre->rlc == rlc ||
             ((LANPR_RenderLineChainItem *)cre->rlc->chain.first)->occlusion != occlusion)
           continue;
diff --git a/source/blender/draw/engines/lanpr/lanpr_data_types.h b/source/blender/draw/engines/lanpr/lanpr_data_types.h
index 4be69b0c156..7feee82b020 100644
--- a/source/blender/draw/engines/lanpr/lanpr_data_types.h
+++ b/source/blender/draw/engines/lanpr/lanpr_data_types.h
@@ -113,7 +113,10 @@ typedef struct LANPR_RenderLine {
   // *MaterialRef;
   char min_occ;
   char flags;  // also for line type determination on chainning
+  
+  // still need this entry because culled lines will not add to object reln node
   struct Object *object_ref;
+
   int edge_idx;  // for gpencil stroke modifier
 } LANPR_RenderLine;
 
@@ -123,6 +126,7 @@ typedef struct LANPR_RenderLineChain {
   // int         SegmentCount;  // we count before draw cmd.
   float length;  // calculated before draw cmd.
   char picked;   // used when re-connecting
+  struct Object* object_ref;
 } LANPR_RenderLineChain;
 
 typedef struct LANPR_RenderLineChainItem {
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index cc139152a17..79e675d67d0 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -1464,10 +1464,6 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
       if (rt->v[2]->fbcoord[3] < 0)
         In3 = 1;
 
-      rt->rl[0]->object_ref = o;
-      rt->rl[1]->object_ref = o;
-      rt->rl[2]->object_ref = o;
-
       if (v_count > 60) {
         veln->element_count = v_count;
         veln = lanpr_new_cull_point_space64(rb);
@@ -1542,6 +1538,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->r = &rv[0];
             rl->tl = rt1;
             rt1->rl[1] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1552,6 +1549,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             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 = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1562,6 +1560,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             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 = o;
 
             rt1->v[0] = rt->v[0];
             rt1->v[1] = &rv[1];
@@ -1609,6 +1608,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->r = &rv[1];
             rl->tl = rt1;
             rt1->rl[0] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1619,6 +1619,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             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 = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1629,6 +1630,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             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 = o;
 
             rt1->v[0] = &rv[1];
             rt1->v[1] = rt->v[2];
@@ -1676,6 +1678,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->r = &rv[0];
             rl->tl = rt1;
             rt1->rl[2] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1686,6 +1689,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             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 = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1696,6 +1700,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             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 = o;
 
             rt1->v[0] = rt->v[1];
             rt1->v[1] = &rv[1];
@@ -1744,6 +1749,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->r = &rv[0];
             rl->tl = rt1;
             rt1->rl[1] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1754,6 +1760,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->tl = rt1;
             rl->tr = rt->rl[0]->tr == rt ? rt->rl[0]->tl : rt->rl[0]->tr;
             rt1->rl[2] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1765,6 +1772,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->tr = rt2;
             rt1->rl[0] = rl;
             rt2->rl[0] = rl;
+            rl->object_ref = o;
 
             rt1->v[0] = rt->v[1];
             rt1->v[1] = &rv[1];
@@ -1780,6 +1788,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->tr = rt->rl[2]->tr == rt ? rt->rl[2]->tl : rt->rl[2]->tr;
             rt2->rl[2] = rl;
             rt2->rl[1] = rt->rl[1];
+            rl->object_ref = o;
 
             rt2->v[0] = &rv[1];
             rt2->v[1] = rt->v[1];
@@ -1827,6 +1836,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->r = &rv[0];
             rl->tl = rt1;
             rt1->rl[1] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1837,6 +1847,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->tl = rt1;
             rl->tr = rt->rl[1]->tl == rt ? rt->rl[1]->tr : rt->rl[1]->tl;
             rt1->rl[2] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1848,6 +1859,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->tr = rt2;
             rt1->rl[0] = rl;
             rt2->rl[0] = rl;
+            rl->object_ref = o;
 
             rt1->v[0] = rt->v[2];
             rt1->v[1] = &rv[1];
@@ -1863,6 +1875,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->tr = rt->rl[0]->tr == rt ? rt->rl[0]->tl : rt->rl[0]->tr;
             rt2->rl[2] = rl;
             rt2->rl[1] = rt->rl[2];
+            rl->object_ref = o;
 
             rt2->v[0] = &rv[1];
             rt2->v[1] = rt->v[2];
@@ -1910,6 +1923,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->r = &rv[0];
             rl->tl = rt1;
             rt1->rl[1] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLineSegment));
@@ -1920,6 +1934,7 @@ void lanpr_cull_triangles(LANPR_RenderBuffer *rb)
             rl->tl = rt1;
             rl->tr = rt->rl[2]->tl == rt ? rt->rl[2]->tr : rt->rl[2]->tl;
             rt1->rl[2] = rl;
+            rl->object_ref = o;
 
             rl = mem_static_aquire(&rb->render_data_pool, sizeof(LANPR_RenderLine));
             rls = mem_static_aquire(&rb->render_data_pool, sizeo

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list