Commit: aceecd17499c854f34689e65ccd322e19e54055e
Author: Nick Wu
Date:   Thu Jul 19 23:44:30 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBaceecd17499c854f34689e65ccd322e19e54055e

Intersection chain now ok. (occlude level debug wait until tomorrow)

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

M       source/blender/draw/engines/lanpr/lanpr_chain.c
M       source/blender/draw/engines/lanpr/lanpr_engine.c
M       source/blender/draw/engines/lanpr/lanpr_ops.c

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c 
b/source/blender/draw/engines/lanpr/lanpr_chain.c
index dd19ee80204..c592c373cc1 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -26,25 +26,39 @@
 
 #include <math.h>
 
-int lanpr_GetLineBoundingAreas(LANPR_RenderBuffer *rb, LANPR_RenderLine *rl, 
int *RowBegin, int *RowEnd, int *ColBegin, int *ColEnd) ;
-LANPR_BoundingArea* lanpr_GetPointBoundingArea(LANPR_RenderBuffer *rb, real x, 
real y) ;
+int lanpr_GetLineBoundingAreas(LANPR_RenderBuffer *rb, LANPR_RenderLine *rl, 
int *RowBegin, int *RowEnd, int *ColBegin, int *ColEnd);
+LANPR_BoundingArea* lanpr_GetPointBoundingArea(LANPR_RenderBuffer *rb, real x, 
real y);
 
-LANPR_RenderLine* lanpr_GetConnectedRenderLine(LANPR_BoundingArea* ba, 
LANPR_RenderVert* rv){
-    nListItemPointer* lip;
-    LANPR_RenderLine* nrl;
-    real cosine;
+#define LANPR_OTHER_RV(rl,rv) ((rv) == (rl)->L?(rl)->R:(rl)->L) 
+
+LANPR_RenderLine* lanpr_GetConnectedRenderLine(LANPR_BoundingArea* ba, 
LANPR_RenderVert* rv, LANPR_RenderVert** new_rv) {
+       nListItemPointer* lip;
+       LANPR_RenderLine* nrl;
+       real cosine;
 
-    for(lip = ba->LinkedLines.pFirst; lip; lip=lip->pNext){
-        nrl = lip->p;
+       for (lip = ba->LinkedLines.pFirst; lip; lip = lip->pNext) {
+               nrl = lip->p;
 
-        if((!(nrl->Flags&LANPR_EDGE_FLAG_ALL_TYPE)) || (nrl->Flags & 
LANPR_EDGE_FLAG_CHAIN_PICKED)) continue;
+               if ((!(nrl->Flags&LANPR_EDGE_FLAG_ALL_TYPE)) || (nrl->Flags & 
LANPR_EDGE_FLAG_CHAIN_PICKED)) continue;
 
-        // always chain connected lines for now.
-        // simplification will take care of the sharp points.
-        // if(cosine whatever) continue;
+               // always chain connected lines for now.
+               // simplification will take care of the sharp points.
+               // if(cosine whatever) continue;
 
-        if(rv != nrl->L && rv != nrl->R) continue;
+               if (rv != nrl->L && rv != nrl->R) {
+                       if (nrl->Flags&LANPR_EDGE_FLAG_INTERSECTION) {
+                               if (rv->FrameBufferCoord[0] == 
nrl->L->FrameBufferCoord[0] && rv->FrameBufferCoord[1] == 
nrl->L->FrameBufferCoord[1]) {
+                                       *new_rv = LANPR_OTHER_RV(nrl, nrl->L);
+                                       return nrl;
+                               }elif(rv->FrameBufferCoord[0] == 
nrl->R->FrameBufferCoord[0] && rv->FrameBufferCoord[1] == 
nrl->R->FrameBufferCoord[1]){
+                                       *new_rv = LANPR_OTHER_RV(nrl, nrl->R);
+                                       return nrl;
+                               }
+                       }
+                       continue;
+               }
 
+               *new_rv = LANPR_OTHER_RV(nrl, rv);
         return nrl;
     }
 
@@ -119,9 +133,6 @@ void 
lanpr_reduce_render_line_chain_recursive(LANPR_RenderLineChain* rlc, LANPR_
 }
 
 
-#define LANPR_OTHER_RV(rl,rv) ((rv) == (rl)->L?(rl)->R:(rl)->L) 
-
-
 void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer *rb, float 
dist_threshold){
     LANPR_RenderLineChain* rlc;
     LANPR_RenderLine* rl;
@@ -144,9 +155,8 @@ void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer 
*rb, float dist_thresh
         ba = lanpr_GetPointBoundingArea(rb,rl->L->FrameBufferCoord[0], 
rl->L->FrameBufferCoord[1]);
         new_rv = rl->L;
         
lanpr_push_render_line_chain_point(rb,rlc,new_rv->FrameBufferCoord[0],new_rv->FrameBufferCoord[1],rl->Flags,0);
-        while(new_rl = lanpr_GetConnectedRenderLine(ba,new_rv)){
+        while(new_rl = lanpr_GetConnectedRenderLine(ba,new_rv,&new_rv)){
             new_rl->Flags |= LANPR_EDGE_FLAG_CHAIN_PICKED;
-            new_rv = LANPR_OTHER_RV(new_rl,new_rv);
 
             int last_occlude;
             
@@ -188,9 +198,8 @@ void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer 
*rb, float dist_thresh
         new_rv = rl->R;
         // below already done in step 2
         // 
lanpr_push_render_line_chain_point(rb,rlc,new_rv->FrameBufferCoord[0],new_rv->FrameBufferCoord[1],rl->Flags,0);
-        while(new_rl = lanpr_GetConnectedRenderLine(ba,new_rv)){
+        while(new_rl = lanpr_GetConnectedRenderLine(ba,new_rv,&new_rv)){
             new_rl->Flags |= LANPR_EDGE_FLAG_CHAIN_PICKED;
-            new_rv = LANPR_OTHER_RV(new_rl,new_rv);
 
             int last_occlude;
             
@@ -250,7 +259,9 @@ void lanpr_ChainGenerateDrawCommand(LANPR_RenderBuffer *rb){
        Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
 
     for(rlc = rb->Chains.pFirst; rlc;rlc=rlc->Item.pNext){
-        vert_count += lanpr_CountChainVertices(rlc);
+               int count = lanpr_CountChainVertices(rlc);
+               printf("seg contains %d verts\n", count);
+               vert_count += count;
     }
 
     GWN_vertbuf_data_alloc(vbo, vert_count);
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c 
b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 6e8e8392fe0..e2576d691af 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -349,8 +349,8 @@ static void lanpr_cache_init(void *vedata){
        } elif(lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE)
        {
                psl->software_pass = DRW_pass_create("Software Render Preview", 
 DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL);
-               //lanpr->render_buffer->ChainShgrp = 
DRW_shgroup_create(OneTime.software_shader, psl->software_pass);
-               /*if (lanpr->render_buffer->ChainDrawBatch){
+               lanpr->render_buffer->ChainShgrp = 
DRW_shgroup_create(OneTime.software_shader, psl->software_pass);
+               if (lanpr->render_buffer->ChainDrawBatch){
                        LANPR_LineLayer *ll;
                        for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
                                ll->shgrp = 
DRW_shgroup_create(OneTime.software_shader, psl->software_pass);
@@ -368,8 +368,8 @@ static void lanpr_cache_init(void *vedata){
                                DRW_shgroup_uniform_float(ll->shgrp, 
"thickness", &ll->thickness, 1);
                                DRW_shgroup_call_add(ll->shgrp, 
lanpr->render_buffer->ChainDrawBatch, NULL);
                        }
-               }*/
-               LANPR_LineLayer *ll;
+               }
+               /*LANPR_LineLayer *ll;
                for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
                        ll->shgrp = DRW_shgroup_create(OneTime.software_shader, 
psl->software_pass);
                        DRW_shgroup_uniform_vec4(ll->shgrp, "color", ll->color, 
1);
@@ -385,7 +385,7 @@ static void lanpr_cache_init(void *vedata){
                        DRW_shgroup_uniform_vec4(ll->shgrp, "preview_viewport", 
stl->g_data->dpix_viewport, 1);
                        DRW_shgroup_uniform_vec4(ll->shgrp, "output_viewport", 
stl->g_data->output_viewport, 1);
                        if (ll->batch) DRW_shgroup_call_add(ll->shgrp, 
ll->batch, NULL);
-               }
+               }*/
        }
 
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c 
b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 1d7c1b9e1ac..6c271c7b1c2 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -2402,6 +2402,14 @@ LANPR_RenderLine 
*lanpr_TriangleGenerateIntersectionLineOnly(LANPR_RenderBuffer
        lstAppendItem(&rb->AllRenderLines, Result);
        Result->Flags |= LANPR_EDGE_FLAG_INTERSECTION;
        lstAppendPointerStatic(&rb->IntersectionLines, &rb->RenderDataPool, 
Result);
+       int r1, r2, c1, c2, row, col;
+       if (lanpr_GetLineBoundingAreas(rb, Result, &r1, &r2, &c1, &c2)) {
+               for (row = r1; row != r2 + 1; row++) {
+                       for (col = c1; col != c2 + 1; col++) {
+                               lanpr_LinkLineWithBoundingArea(rb, 
&rb->InitialBoundingAreas[row * 20 + col], Result);
+                       }
+               }
+       }
 
        //tnsglobal_TriangleIntersectionCount++;
 
@@ -2568,7 +2576,6 @@ void lanpr_ComputeSceneContours(LANPR_RenderBuffer *rb) {
                                                
lanpr_LinkLineWithBoundingArea(rb, &rb->InitialBoundingAreas[row * 20 + col], 
rl);
                                        }
                                }
-
                        }
                }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to