[Bf-blender-cvs] [4069c157594] soc-2018-npr: Implementing software result chaining. Do NOT compile!
Nick Wu
noreply at git.blender.org
Tue Jul 17 17:24:07 CEST 2018
Commit: 4069c157594e206c0d3b1dc8809bdd045c5df279
Author: Nick Wu
Date: Tue Jul 17 17:26:30 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB4069c157594e206c0d3b1dc8809bdd045c5df279
Implementing software result chaining. Do NOT compile!
===================================================================
M source/blender/draw/engines/lanpr/lanpr_all.h
A 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
M source/blender/draw/engines/lanpr/lanpr_snake.c
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 5c0f3e6c031..20c22663025 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -438,7 +438,8 @@ typedef struct LANPR_RenderVert {
char EdgeUsed; // <| |>
}LANPR_RenderVert;
-#define LANPR_EDGE_FLAG_EDGE_MARK 1
+#define LANPR_EDGE_FLAG_EDGE_MARK 1
+#define LANPR_EDGE_FLAG_CHAIN_PICKED 64
typedef struct LANPR_RenderLine {
nListItem Item;
@@ -450,10 +451,14 @@ typedef struct LANPR_RenderLine {
char MinOcclude;
char Flags;
struct Object *ObjectRef;
- //char IgnoreConnectedFace;
- //char CullStatus;
}LANPR_RenderLine;
+typedef struct LANPR_RenderLineChain {
+ nListItem Item;
+ nListHandle Chain;
+ int SegmentCount;
+}LANPR_RenderLineChain;
+
typedef struct LANPR_BoundingArea {
real L, R, U, B;
real CX, CY;
@@ -466,21 +471,16 @@ typedef struct LANPR_BoundingArea {
nListHandle BP;
int TriangleCount;
- nListHandle AssociatedTriangles;
+ nListHandle LinkedTriangles;
+ nListHandle LinkedLines;
+ nListHandle LinkedChains;//reserved for multithread chainning
}LANPR_BoundingArea;
-typedef struct LANPR_RenderSubPixel {
- real Depth;
- struct LANPR_RenderTriangle *BelongTo;
- real Weight[3]; //belongto->vp 1 2 3
-}LANPR_RenderSubPixel;
-
#define TNS_COMMAND_LINE 0
#define TNS_COMMAND_MATERIAL 1
#define TNS_COMMAND_EDGE 2
-
#define TNS_TRANSPARENCY_DRAW_SIMPLE 0
#define TNS_TRANSPARENCY_DRAW_LAYERED 1
diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
new file mode 100644
index 00000000000..8d61ff60313
--- /dev/null
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -0,0 +1,102 @@
+#include "DRW_engine.h"
+#include "DRW_render.h"
+#include "BLI_listbase.h"
+#include "BLI_linklist.h"
+#include "lanpr_all.h"
+#include "DRW_render.h"
+#include "BKE_object.h"
+#include "DNA_mesh_types.h"
+#include "DNA_camera_types.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_framebuffer.h"
+#include "DNA_lanpr_types.h"
+#include "DNA_meshdata_types.h"
+#include "BKE_customdata.h"
+#include "DEG_depsgraph_query.h"
+#include "GPU_draw.h"
+
+#include "GPU_batch.h"
+#include "GPU_framebuffer.h"
+#include "GPU_shader.h"
+#include "GPU_uniformbuffer.h"
+#include "GPU_viewport.h"
+#include "bmesh.h"
+
+#include <math.h>
+
+int lanpr_GetLineBoundingAreas(LANPR_RenderBuffer *rb, LANPR_RenderLine *rl, int *RowBegin, int *RowEnd, int *ColBegin, int *ColEnd) ;
+
+real lanpr_ThreePointCosine(LANPR_RenderVert* l,LANPR_RenderVert* c, LANPR_RenderVert* r){
+
+}
+
+LANPR_RenderLine* lanpr_GetConnectedRenderLine(LANPR_BoundingArea* ba, LANPR_RenderVert* rv, LANPR_RenderVert** NextV){
+ nListItemPointer* lip;
+ LANPR_RenderLine* nrl;
+ real cosine;
+
+ for(lip = ba->LinkedLines.pFirst; lip; lip=lip->Item.pNext){
+ nrl = lip->p;
+
+ if(nrl->Flags & LANPR_EDGE_FLAG_CHAIN_PICKED) continue;
+
+ // always chain connected lines for now.
+ // if(cosine whatever) continue;
+
+ if(rv == nrl->L) *NextV = nrl->R;
+ elif(rv == nrl->R) *NextV = nrl->L;
+ else continue;
+
+ return nrl;
+ }
+
+ return 0;
+}
+
+int lanpr_GetNearByRenderLine(LANPR_BoundingArea* ba, LANPR_RenderLine* rl){
+ // hold on
+}
+
+#define LANPR_OTHER_RV(rl,rv)\
+((rv) == (rl)->L?(rl)->R:(rl)->L)
+
+void lanpr_ChainFeatureLines_NO_THREAD(LANPR_RenderBuffer *rb){
+ LANPR_RenderLineChain* rlc;
+ LANPR_RenderLine* rl;
+
+ for(rl = rb->AllRenderLines.pFirst; rl;rl=rl->Item.pNext){
+
+ if(rl->Flags & LANPR_EDGE_FLAG_CHAIN_PICKED) continue;
+
+ int r1, r2, c1, c2, row, col;
+ LANPR_RenderLine* new_rl = rl;
+ LANPR_RenderVert* new_rv = rl->L;
+ if (lanpr_GetLineBoundingAreas(rb, rl, &r1, &r2, &c1, &c2)) {
+ for (row = r1; row != r2 + 1; row++) {
+ for (col = c1, col != c2 + 1; col++) {
+
+ //grow left side
+ while(new_rl = lanpr_GetConnectedRenderLine(&rb->InitialBoundingAreas[row * 20 + col],&new_rv)){
+ new_rl->Flags |= LANPR_EDGE_FLAG_CHAIN_PICKED;
+ new_rv = LANPR_OTHER_RV(new_rl,new_rv);
+ }
+
+ //grow right side
+ new_rv = rl->R;
+ while(new_rl = lanpr_GetConnectedRenderLine(&rb->InitialBoundingAreas[row * 20 + col],&new_rv)){
+ new_rl->Flags |= LANPR_EDGE_FLAG_CHAIN_PICKED;
+ new_rv = LANPR_OTHER_RV(new_rl,new_rv);
+ }
+
+ //simplification
+ while(new_rl = lanpr_GetNearByRenderLine(&rb->InitialBoundingAreas[row * 20 + col],new_rl)){
+ new_rl->Flags |= LANPR_EDGE_FLAG_CHAIN_PICKED;
+ }
+ }
+ }
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index fa8cad44e43..623519d649d 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -635,4 +635,5 @@ RenderEngineType DRW_engine_viewport_lanpr_type = {
NULL,// update in render pass
&draw_engine_lanpr_type,
{NULL, NULL, NULL}
-};
\ No newline at end of file
+};
+
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index bc393956127..1c2b959f7de 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -186,7 +186,7 @@ void lanpr_ConnectNewBoundingAreas(LANPR_RenderBuffer *rb, LANPR_BoundingArea *R
while (lstPopPointerNoFree(&Root->UP));
while (lstPopPointerNoFree(&Root->BP));
}
-void lanpr_AssociateTriangleWithBoundingArea(LANPR_RenderBuffer *rb, LANPR_BoundingArea *RootBoundingArea, LANPR_RenderTriangle *rt, real *LRUB, int Recursive);
+void lanpr_LinkTriangleWithBoundingArea(LANPR_RenderBuffer *rb, LANPR_BoundingArea *RootBoundingArea, LANPR_RenderTriangle *rt, real *LRUB, int Recursive);
int lanpr_TriangleCalculateIntersectionsInTile(LANPR_RenderBuffer *rb, LANPR_RenderTriangle *rt, LANPR_BoundingArea *ba);
void lanpr_SplitBoundingArea(LANPR_RenderBuffer *rb, LANPR_BoundingArea *Root) {
@@ -225,17 +225,17 @@ void lanpr_SplitBoundingArea(LANPR_RenderBuffer *rb, LANPR_BoundingArea *Root) {
lanpr_ConnectNewBoundingAreas(rb, Root);
- while (rt = lstPopPointerNoFree(&Root->AssociatedTriangles)) {
+ while (rt = lstPopPointerNoFree(&Root->LinkedTriangles)) {
LANPR_BoundingArea *ba = Root->Child;
real B[4];
B[0] = MIN3(rt->V[0]->FrameBufferCoord[0], rt->V[1]->FrameBufferCoord[0], rt->V[2]->FrameBufferCoord[0]);
B[1] = MAX3(rt->V[0]->FrameBufferCoord[0], rt->V[1]->FrameBufferCoord[0], rt->V[2]->FrameBufferCoord[0]);
B[2] = MAX3(rt->V[0]->FrameBufferCoord[1], rt->V[1]->FrameBufferCoord[1], rt->V[2]->FrameBufferCoord[1]);
B[3] = MIN3(rt->V[0]->FrameBufferCoord[1], rt->V[1]->FrameBufferCoord[1], rt->V[2]->FrameBufferCoord[1]);
- if (TNS_BOUND_AREA_CROSSES(B, &ba[0].L)) lanpr_AssociateTriangleWithBoundingArea(rb, &ba[0], rt, B, 0);
- if (TNS_BOUND_AREA_CROSSES(B, &ba[1].L)) lanpr_AssociateTriangleWithBoundingArea(rb, &ba[1], rt, B, 0);
- if (TNS_BOUND_AREA_CROSSES(B, &ba[2].L)) lanpr_AssociateTriangleWithBoundingArea(rb, &ba[2], rt, B, 0);
- if (TNS_BOUND_AREA_CROSSES(B, &ba[3].L)) lanpr_AssociateTriangleWithBoundingArea(rb, &ba[3], rt, B, 0);
+ if (TNS_BOUND_AREA_CROSSES(B, &ba[0].L)) lanpr_LinkTriangleWithBoundingArea(rb, &ba[0], rt, B, 0);
+ if (TNS_BOUND_AREA_CROSSES(B, &ba[1].L)) lanpr_LinkTriangleWithBoundingArea(rb, &ba[1], rt, B, 0);
+ if (TNS_BOUND_AREA_CROSSES(B, &ba[2].L)) lanpr_LinkTriangleWithBoundingArea(rb, &ba[2], rt, B, 0);
+ if (TNS_BOUND_AREA_CROSSES(B, &ba[3].L)) lanpr_LinkTriangleWithBoundingArea(rb, &ba[3], rt, B, 0);
}
rb->BoundingAreaCount += 3;
@@ -297,10 +297,10 @@ int lanpr_TriangleCoversBoundingArea(LANPR_RenderBuffer *fb, LANPR_RenderTriangl
return 0;
}
-void lanpr_AssociateTriangleWithBoundingArea(LANPR_RenderBuffer *rb, LANPR_BoundingArea *RootBoundingArea, LANPR_RenderTriangle *rt, real *LRUB, int Recursive) {
+void lanpr_LinkTriangleWithBoundingArea(LANPR_RenderBuffer *rb, LANPR_BoundingArea *RootBoundingArea, LANPR_RenderTriangle *rt, real *LRUB, int Recursive) {
if (!lanpr_TriangleCoversBoundingArea(rb, rt, RootBoundingArea)) return;
if (!RootBoundingArea->Child) {
- lstAppendPointerStaticPool(&rb->RenderDataPool, &RootBoundingArea->AssociatedTriangles, rt);
+ lstAppendPointerStaticPool(&rb->RenderDataPool, &RootBoundingArea->LinkedTriangles, rt);
RootBoundingArea->TriangleCount++;
if (RootBoundingArea->TriangleCount > 200 && Recursive) {
lanpr_SplitBoundingArea(rb, RootBoundingArea);
@@ -318,13 +318,16 @@ void lanpr_AssociateTriangleWithBoundingArea(LANPR_RenderBuffer *rb, LANPR_Bound
B[3] = MIN3(rt->V[0]->FrameBufferCoord[1], rt->V[1]->FrameBufferCoord[1], rt->V[2]->FrameBufferCoord[1]);
B1 = B;
}
- if (TNS_BOUND_AREA_CROSSES(B1, &ba[0].L)) lanpr_AssociateTriangleWithBoundingArea(rb, &ba[0], rt, B1, Recursive);
- if (TNS_BOUND_AREA_CROSSES(B1, &ba[1].L)) lanpr_AssociateTriangleWithBoundingArea(rb, &ba[1], rt, B1, Recursive);
- if (TNS_BOUND_AREA_CROSSES(B1, &ba[2].L)) lanpr_AssociateTriangleWithBoundingArea(rb, &ba[2], rt, B1, Recursive);
- if (TNS_BOUND_AREA_CROSSES(B1, &ba[3].L)) lanpr_AssociateTriangleWithBoundingArea(rb, &ba[3], rt, B1, Recursive);
+ if (TNS_BOUND_AREA_CROSSES(B1, &ba[0].L)) lanpr_LinkTriangleWithBoundingArea(rb, &ba[0], rt, B1, Recursive);
+ if (TNS_BOUND_AREA_CROSSES(B1, &ba[1].L)) lanpr_LinkTriangleWithBoundingArea(rb, &ba[1], rt, B1, Recursive);
+ if (TNS_BOUND_AREA_CROSSES(B1, &ba[2].L)) lanpr_LinkTriangleWithBoundingArea(rb, &ba[2], rt, B1, Recursive);
+ if (TNS_BOUND_AREA_CROSSES(B1, &ba[3].L)) lanpr_LinkTriangleWithBoundingArea(rb, &ba[3], rt, B1, Recursive);
}
}
-int lanpr_GetTriangleBou
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list