[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