[Bf-blender-cvs] [ac74aa8d7f7] soc-2018-npr: Fix typo, added to cmake, compile ok.

Nick Wu noreply at git.blender.org
Wed Jul 18 17:49:54 CEST 2018


Commit: ac74aa8d7f711fcea5eb1315dca5b2b070dd68c2
Author: Nick Wu
Date:   Wed Jul 18 16:42:05 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBac74aa8d7f711fcea5eb1315dca5b2b070dd68c2

Fix typo, added to cmake, compile ok.

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/lanpr/lanpr_chain.c

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 44373b3768a..41a3eb73cfd 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -127,6 +127,7 @@ set(SRC
 	engines/lanpr/lanpr_snake.c
 	engines/lanpr/lanpr_ops.c
 	engines/lanpr/lanpr_util.c
+	engines/lanpr/lanpr_chain.c
 
 	DRW_engine.h
 	intern/DRW_render.h
diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index 6ee41f59f5e..6c1bd8f5f9b 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -29,22 +29,21 @@
 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, LANPR_RenderVert** NextV){
+LANPR_RenderLine* lanpr_GetConnectedRenderLine(LANPR_BoundingArea* ba, LANPR_RenderVert* rv){
     nListItemPointer* lip;
     LANPR_RenderLine* nrl;
     real cosine;
 
-    for(lip = ba->LinkedLines.pFirst; lip; lip=lip->Item.pNext){
+    for(lip = ba->LinkedLines.pFirst; lip; lip=lip->pNext){
         nrl = lip->p;
 
         if(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;
 
-        if(rv == nrl->L) *NextV = nrl->R;
-        elif(rv == nrl->R) *NextV = nrl->L;
-        else continue;
+        if(rv != nrl->L && rv != nrl->R) continue;
 
         return nrl;
     }
@@ -89,7 +88,7 @@ LANPR_RenderLineChainItem* lanpr_push_render_line_chain_point(LANPR_RenderBuffer
     return rlci;
 }
 
-
+// refer to http://karthaus.nl/rdp/ for description
 void lanpr_reduce_render_line_chain_recursive(LANPR_RenderLineChain* rlc, LANPR_RenderLineChainItem* from, LANPR_RenderLineChainItem* to, float dist_threshold){
     LANPR_RenderLineChainItem* rlci,*next_rlci;
     float l[2],r[2],c[2];
@@ -100,22 +99,22 @@ void lanpr_reduce_render_line_chain_recursive(LANPR_RenderLineChain* rlc, LANPR_
     for(rlci = from; rlci!= to->Item.pNext; rlci=next_rlci){
         next_rlci = rlci->Item.pNext;
 
-        if(next_rlci && (next_rlci->OccludeLevel!= rlci->OccludeLevel || next_rlci->LineType!= rlci->LineType) continue;
+        if(next_rlci && (next_rlci->OccludeLevel!= rlci->OccludeLevel || next_rlci->LineType!= rlci->LineType)) continue;
 
         float dist = dist_to_line_segment_v2(rlci->pos,from->pos,to->pos);
 
         if(dist>dist_threshold && dist>max_dist){ max_dist = dist; max_rlci=rlci; continue;}
 
-        if(dist<=dist_threshold) lstRemoveItem(&rlc->Chain, rlci);
+        if(dist<=dist_threshold) lstRemoveItem(&rlc->Chain, (void*)rlci);
     }
 
-    lanpr_reduce_render_line_chain_recursive(rlc, from, max_rlci, dist_threshold);
-    lanpr_reduce_render_line_chain_recursive(rlc, max_rlci, to, dist_threshold);
+    if (from->Item.pNext != max_rlci) lanpr_reduce_render_line_chain_recursive(rlc, from, max_rlci, dist_threshold);
+	if (to->Item.pPrev != max_rlci)   lanpr_reduce_render_line_chain_recursive(rlc, max_rlci, to, dist_threshold);
 }
 
 
-#define LANPR_OTHER_RV(rl,rv)\
-((rv) == (rl)->L?(rl)->R:(rl)->L) 
+#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;
@@ -146,7 +145,7 @@ void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer *rb, float dist_thresh
             int last_occlude;
             
             if(new_rv==new_rl->R){
-                for(rls = new_rl->Segments.pFirst; rls;rls=rsl->Item.pNext){
+                for(rls = new_rl->Segments.pFirst; rls;rls=rls->Item.pNext){
                     float px,py;
                     px = tnsLinearItp(rl->L->FrameBufferCoord[0], rl->R->FrameBufferCoord[0], rls->at);
                     py = tnsLinearItp(rl->L->FrameBufferCoord[1], rl->R->FrameBufferCoord[1], rls->at);
@@ -155,8 +154,8 @@ void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer *rb, float dist_thresh
             }elif(new_rv==new_rl->L){
                 rls = new_rl->Segments.pLast;
                 last_occlude = rls->OccludeLevel;
-                rls=rsl->Item.pPrev;
-                for(rls; rls; rls=rsl->Item.pPrev){
+                rls=rls->Item.pPrev;
+                for(rls; rls; rls= rls->Item.pPrev){
                     float px,py;
                     px = tnsLinearItp(rl->L->FrameBufferCoord[0], rl->R->FrameBufferCoord[0], rls->at);
                     py = tnsLinearItp(rl->L->FrameBufferCoord[1], rl->R->FrameBufferCoord[1], rls->at);
@@ -169,7 +168,7 @@ void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer *rb, float dist_thresh
         }
 
         // step 2: this line
-        for(rls = new_rl->Segments.pFirst; rls;rls=rsl->Item.pNext){
+        for(rls = new_rl->Segments.pFirst; rls;rls=rls->Item.pNext){
             float px,py;
             px = tnsLinearItp(rl->L->FrameBufferCoord[0], rl->R->FrameBufferCoord[0], rls->at);
             py = tnsLinearItp(rl->L->FrameBufferCoord[1], rl->R->FrameBufferCoord[1], rls->at);
@@ -188,7 +187,7 @@ void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer *rb, float dist_thresh
             int last_occlude;
             
             if(new_rv==new_rl->R){
-                for(rls = new_rl->Segments.pFirst; rls;rls=rsl->Item.pNext){
+                for(rls = new_rl->Segments.pFirst; rls;rls= rls->Item.pNext){
                     float px,py;
                     px = tnsLinearItp(rl->L->FrameBufferCoord[0], rl->R->FrameBufferCoord[0], rls->at);
                     py = tnsLinearItp(rl->L->FrameBufferCoord[1], rl->R->FrameBufferCoord[1], rls->at);
@@ -197,8 +196,8 @@ void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer *rb, float dist_thresh
             }elif(new_rv==new_rl->L){
                 rls = new_rl->Segments.pLast;
                 last_occlude = rls->OccludeLevel;
-                rls=rsl->Item.pPrev;
-                for(rls; rls; rls=rsl->Item.pPrev){
+                rls=rls->Item.pPrev;
+                for(rls; rls; rls= rls->Item.pPrev){
                     float px,py;
                     px = tnsLinearItp(rl->L->FrameBufferCoord[0], rl->R->FrameBufferCoord[0], rls->at);
                     py = tnsLinearItp(rl->L->FrameBufferCoord[1], rl->R->FrameBufferCoord[1], rls->at);
@@ -217,7 +216,7 @@ void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer *rb, float dist_thresh
 int lanpr_CountChainVertices(LANPR_RenderLineChain* rlc){
     LANPR_RenderLineChainItem* rlci;
     int Count = 0;
-    for(rlci = rlc->Chain.pFirst;rlci = rlci->Item.pNext){
+	for (rlci = rlc->Chain.pFirst; rlci; rlci = rlci->Item.pNext) {
         Count++;
     }
     return Count;
@@ -228,7 +227,6 @@ void lanpr_ChainGenerateDrawCommand(LANPR_RenderBuffer *rb){
     LANPR_RenderLineChainItem* rlci;
     int vert_count;
     int i=0;
-    float point[2];
     float last_point[2];
     float offset_accum=0;
 
@@ -249,15 +247,14 @@ void lanpr_ChainGenerateDrawCommand(LANPR_RenderBuffer *rb){
 
     GWN_vertbuf_data_alloc(vbo, vert_count);
 
-    for(rlc = rb->Chains.pFirst; rlc;rlc=rlc->Item.pNext){
-        for(rlci = rlc->Chain.pFirst;rlci = rlci->Item.pNext){
-            copy_v2fl_v2db(point,rlci->rv->FrameBufferCoord);
-            
-            GWN_vertbuf_attr_set(vbo, attr_id.pos, i, c);
+    for(rlc = rb->Chains.pFirst; rlc; rlc=rlc->Item.pNext){
+		for (rlci = rlc->Chain.pFirst; rlci;  rlci = rlci->Item.pNext) {
+
+            GWN_vertbuf_attr_set(vbo, attr_id.pos, i, rlci->pos);
             GWN_vertbuf_attr_set(vbo, attr_id.offset, i, &offset_accum);
 
-            offset_accum += len_v2v2(point,last_point);
-            copy_v2fl_v2db(last_point,point);
+            offset_accum += len_v2v2(rlci->pos,last_point);
+            copy_v2_v2(last_point, rlci->pos);
 
             i++;
         }



More information about the Bf-blender-cvs mailing list