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