[Bf-blender-cvs] [aceecd17499] soc-2018-npr: Intersection chain now ok. (occlude level debug wait until tomorrow)

Nick Wu noreply at git.blender.org
Thu Jul 19 17:45:25 CEST 2018


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);
 					}
 				}
-
 			}
 		}



More information about the Bf-blender-cvs mailing list