[Bf-blender-cvs] [57d52826f62] soc-2018-npr: Added almost all offline render code. adaptation pending, don't compile!

Nick Wu noreply at git.blender.org
Thu Jun 21 09:57:43 CEST 2018


Commit: 57d52826f62c52bdd49ab9dab19f87a11936dfa0
Author: Nick Wu
Date:   Thu Jun 21 15:56:49 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB57d52826f62c52bdd49ab9dab19f87a11936dfa0

Added almost all offline render code. adaptation pending, don't compile!

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

M	source/blender/draw/CMakeLists.txt
D	source/blender/draw/engines/lanpr/NUL_TNS_SoftwareRender.c
D	source/blender/draw/engines/lanpr/NUL_Util.h
M	source/blender/draw/engines/lanpr/lanpr_all.h
M	source/blender/draw/engines/lanpr/lanpr_ops.c
R061	source/blender/draw/engines/lanpr/NUL_Util.c	source/blender/draw/engines/lanpr/lanpr_util.c
A	source/blender/draw/engines/lanpr/lanpr_util.h
M	source/blender/makesdna/DNA_scene_types.h

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 21d5ec7ad81..b47346e5617 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -121,6 +121,7 @@ set(SRC
 	engines/lanpr/lanpr_engine.c
 	engines/lanpr/lanpr_snake.c
 	engines/lanpr/lanpr_ops.c
+	engines/lanpr/lanpr_util.c
 
 	DRW_engine.h
 	intern/DRW_render.h
@@ -142,8 +143,7 @@ set(SRC
 	engines/eevee/eevee_private.h
 	engines/external/external_engine.h
 
-	#engines/lanpr/NUL_TNS.h
-	engines/lanpr/NUL_Util.h
+	engines/lanpr/lanpr_util.h
 	engines/lanpr/lanpr_all.h
 )
 
diff --git a/source/blender/draw/engines/lanpr/NUL_TNS_SoftwareRender.c b/source/blender/draw/engines/lanpr/NUL_TNS_SoftwareRender.c
deleted file mode 100644
index 8a8f0911797..00000000000
--- a/source/blender/draw/engines/lanpr/NUL_TNS_SoftwareRender.c
+++ /dev/null
@@ -1,3994 +0,0 @@
-#include "NUL4.h"
-#include "NUL_Util.h"
-#include "NUL_TNS.h"
-#include "tinycthread.h"
-#include "png.h"
-
-#include <math.h>
-
-/*
-
-Ported from NUL4.0
-
-Author(s):WuYiming - xp8110 at outlook.com
-
-*/
-
-extern tnsMain* T;
-extern NUL MAIN;
-
-static int tnsglobal_TriangleIntersectionCount;
-
-
-void tnsset_RenderOverallProgress(tnsRenderBuffer* rb, real value);
-void tnsset_PlusRenderContourCount(tnsRenderBuffer* rb, int value);
-void tnsset_PlusRenderCreaseCount(tnsRenderBuffer* rb, int value);
-void tnsset_PlusRenderMaterialCount(tnsRenderBuffer* rb, int value);
-void tnsset_PlusRenderIntersectionCount(tnsRenderBuffer* rb, int value);
-void tnsset_PlusRenderContourProcessedCount(tnsRenderBuffer* rb, int value);
-void tnsset_PlusRenderCreaseProcessedCount(tnsRenderBuffer* rb, int value);
-void tnsset_PlusRenderMaterialProcessedCount(tnsRenderBuffer* rb, int value);
-void tnsset_PlusRenderIntersectionProcessedCount(tnsRenderBuffer* rb, int value);
-
-
-
-void tRdrMakeFakeFrameBuffer(tnsRenderBuffer* rb, int W, int H, int Samples) {
-	tnsFrameBuffer* fb = memAquireOnly(sizeof(tnsFrameBuffer));
-	fb->SubPixelSample = Samples;
-	fb->W = W;
-	fb->H = H;
-	rb->FrameBuffer = fb;
-	fb->OutputAALevel = TNS_OUTPUT_AA_16;
-}
-void tRdrMakeFrameBuffer(tnsRenderBuffer* rb,int W,int H,int Samples) {
-	tnsFrameBuffer* fb = memAquireOnly(sizeof(tnsFrameBuffer));
-	//fb->Pixels = CreateNewBuffer(tnsRenderSubPixel, W*H*Samples*Samples);
-
-	//if (!fb->Pixels) MessageBox(0, "�ڴ�ը��", "�ڴ�ը��", 0);
-
-	fb->SubPixelSample = Samples;
-	fb->W = W;
-	fb->H = H;
-	rb->FrameBuffer = fb;
-}
-void tRdrMakeRenderTiles(tnsRenderBuffer* rb,int TileW,int TileH) {
-	tnsRenderTile* rt;
-	tnsRenderTile* m;
-	tnsFrameBuffer* fb = rb->FrameBuffer;
-	int fbw=fb->W, fbh=fb->H;
-	char sample = fb->SubPixelSample;
-	int Rows = fbh / TileH;
-	int Colums = fbw / TileW;
-	int r, c;
-
-	//if (!(rb->State & TNS_RENDERBUFFER_RASTERIZER_COMPLETE))return;
-
-	if (Rows*TileH < fbh) 
-		Rows += 1;
-	if (Colums*TileW < fbw) 
-		Colums += 1;
-
-	rb->FrameBuffer->TileCountX = Colums;
-	rb->FrameBuffer->TileCountY = Rows;
-	rb->FrameBuffer->TileSizeW = TileW;
-	rb->FrameBuffer->TileSizeH = TileH;
-
-	rt = CreateNewBuffer(tnsRenderTile, Rows*Colums);
-	rb->FrameBuffer->Tiles = rt;
-	for (r = 0; r < Rows; r++) {
-		for (c = 0; c < Colums; c++) {
-			m = &TNS_TILE(rt,r,c,Colums);
-			m->Row = r;
-			m->Column = c;
-			m->FirstPixel = TNS_FRAMEBUFFER_PIXEL((rb->FrameBuffer), r, c);
-			m->SubX = c*TileW;
-			m->SubY = r*TileH; 
-			if (c != Colums - 1)m->SubXLim = m->SubX+TileW; else m->SubXLim = fbw;
-			if (r != Rows - 1)m->SubYLim = m->SubY+TileH; else m->SubYLim = fbh;
-			m->FX = (real)m->SubX / (real)fbw;
-			m->FXLim = (real)m->SubXLim / (real)fbw;
-			m->FY = (real)m->SubY / (real)fbh;
-			m->FYLim = (real)m->SubYLim / (real)fbh;
-			if (c == Colums - 1) m->FXLim = 1.0f;
-			if (r == Rows - 1) m->FYLim = 1.0f;
-		}
-	}
-}
-void tRdrClearRenderTiles(tnsRenderBuffer* rb, int TileW, int TileH) {
-	tnsRenderTile* rt;
-	tnsRenderTile* m;
-	tnsFrameBuffer* fb = rb->FrameBuffer;
-	FreeMem(fb->Tiles);
-}
-
-
-void tRdrCutLineIntegrated(tnsRenderBuffer* rb, tnsRenderLine* rl, real Begin, real End) {
-	tnsRenderLineSegment* rls = rl->Segments.pFirst, *irls;
-	tnsRenderLineSegment *BeginSegment = 0, *EndSegment = 0;
-	tnsRenderLineSegment *ns = 0, *ns2 = 0;
-	tnsRenderLineSegment *BeforeBegin, *AfterEnd;
-	tnsRenderLineSegment *Next;
-
-	if (TNS_DOUBLE_CLOSE_ENOUGH(Begin, End)) return;
-
-	if (Begin != Begin)
-		Begin = 0;
-	if (End != End)
-		End = 0;
-
-	if (Begin > End) {
-		real t = Begin;
-		Begin = End;
-		End = t;
-	}
-
-	for (rls = rl->Segments.pFirst; rls; rls = rls->Item.pNext) {
-		if (TNS_DOUBLE_CLOSE_ENOUGH(rls->at, Begin)) {
-			BeginSegment = rls;
-			ns = BeginSegment;
-			break;
-		}
-		if (!rls->Item.pNext) {
-			break;
-		}
-		irls = rls->Item.pNext;
-		if (irls->at > Begin && Begin > rls->at) {
-			BeginSegment = irls;
-			ns = memStaticAquireThread(&rb->RenderDataPool,sizeof(tnsRenderLineSegment));
-			break;
-		}
-	}
-	for (rls = BeginSegment; rls; rls = rls->Item.pNext) {
-		if (TNS_DOUBLE_CLOSE_ENOUGH(rls->at, End)) {
-			EndSegment = rls;
-			ns2 = EndSegment;
-			break;
-		}
-		//irls = rls->Item.pNext;
-		if (rls->at > End) {
-			EndSegment = rls;
-			ns2 = memStaticAquireThread(&rb->RenderDataPool,sizeof(tnsRenderLineSegment));
-			break;
-		}
-	}
-
-	if (!ns) ns = memStaticAquireThread(&rb->RenderDataPool,sizeof(tnsRenderLineSegment));
-	if (!ns2) ns2 = memStaticAquireThread(&rb->RenderDataPool,sizeof(tnsRenderLineSegment));
-
-	if (BeginSegment) {
-		if (BeginSegment != ns) {
-			ns->OccludeLevel = BeginSegment->Item.pPrev ? (irls = BeginSegment->Item.pPrev)->OccludeLevel : 0;
-			lstInsertItemBefore(&rl->Segments, ns, BeginSegment);
-		}
-	}
-	else {
-		ns->OccludeLevel = (irls = rl->Segments.pLast)->OccludeLevel;
-		lstAppendItem(&rl->Segments, ns);
-	}
-	if (EndSegment) {
-		if (EndSegment != ns2) {
-			ns2->OccludeLevel = EndSegment->Item.pPrev ? (irls = EndSegment->Item.pPrev)->OccludeLevel : 0;
-			lstInsertItemBefore(&rl->Segments, ns2, EndSegment);
-		}
-	}
-	else {
-		ns2->OccludeLevel = (irls = rl->Segments.pLast)->OccludeLevel;
-		lstAppendItem(&rl->Segments, ns2);
-	}
-
-	ns->at = Begin;
-	ns2->at = End;
-
-	for (rls = ns; rls && rls != ns2; rls = rls->Item.pNext) {
-		rls->OccludeLevel++;
-	}
-
-	//for (rls = rl->Segments.pFirst; rls; rls = rls->Item.pNext) {
-	//	if ((irls = rls->Item.pNext) && irls->at < rls->at) {
-	//		tnsRenderLineSegment* deb;
-	//		printf("WRONG!\n");
-	//		for (deb = rl->Segments.pFirst; deb; deb = deb->Item.pNext) {
-	//			printf("[%d-%d] ", deb->at, deb->OccludeLevel);
-	//		}
-	//		printf("\n");
-	//		break;
-	//	}
-	//}
-}
-
-
-#define TNS_BOUND_AREA_CROSSES(b1,b2)\
-((b1)[0]<(b2)[1] && (b1)[1]>(b2)[0] && (b1)[3]<(b2)[2] && (b1)[2]>(b2)[3])
-void tRdrMakeInitialBoundingAreas(tnsRenderBuffer* rb) {
-	int SpW = 20;
-	int SpH = rb->FrameBuffer->H / (rb->FrameBuffer->W / SpW);
-	int Row, Col;
-	tnsBoundingArea* ba;
-	real W = (real)rb->FrameBuffer->W;
-	real H = (real)rb->FrameBuffer->H;
-	real SpanW = (real)1 / SpW * 2.0;
-	real SpanH = (real)1 / SpH * 2.0;
-
-	rb->FrameBuffer->TileCountX = SpW;
-	rb->FrameBuffer->TileCountY = SpH;
-	rb->FrameBuffer->WidthPerTile = SpanW;
-	rb->FrameBuffer->HeightPerTile = SpanH;
-
-	rb->BoundingAreaCount = SpW * SpH;
-	rb->InitialBoundingAreas = memStaticAquire(&rb->RenderDataPool, sizeof(tnsBoundingArea) * rb->BoundingAreaCount);
-
-	for (Row = 0; Row < SpH; Row++) {
-		for (Col = 0; Col < SpW; Col++) {
-			ba = &rb->InitialBoundingAreas[Row * 20 + Col];
-
-			ba->L = SpanW * Col - 1.0;
-			ba->R = (Col == SpW - 1) ? 1.0 : (SpanW * (Col + 1) - 1.0);
-			ba->U = 1.0 - SpanH * Row;
-			ba->B = (Row == SpH - 1) ? -1.0 : (1.0 - SpanH * (Row + 1));
-
-			ba->CX = (ba->L + ba->R) / 2;
-			ba->CY = (ba->U + ba->B) / 2;
-
-			if (Row) {
-				lstAppendPointerStatic(&ba->UP, &rb->RenderDataPool, &rb->InitialBoundingAreas[(Row - 1) * 20 + Col]);
-			}
-			if (Col) {
-				lstAppendPointerStatic(&ba->LP, &rb->RenderDataPool, &rb->InitialBoundingAreas[Row * 20 + Col - 1]);
-			}
-			if (Row != SpH -1) {
-				lstAppendPointerStatic(&ba->BP, &rb->RenderDataPool, &rb->InitialBoundingAreas[(Row + 1) * 20 + Col]);
-			}
-			if (Col != SpW - 1) {
-				lstAppendPointerStatic(&ba->RP, &rb->RenderDataPool, &rb->InitialBoundingAreas[Row * 20 + Col + 1]);
-			}
-		}
-	}
-}
-void tRdrConnectNewBoundingAreas(tnsRenderBuffer* rb, tnsBoundingArea* Root) {
-	tnsBoundingArea* ba = Root->Child, *tba;
-	nListItemPointer* lip,*lip2,*lip3,*NextLip;
-	nMemoryPool* mph= &rb->RenderDataPool;
-
-	lstAppendPointerStaticPool(mph, &ba[1].RP, &ba[0]);
-	lstAppendPointerStaticPool(mph, &ba[0].LP, &ba[1]);
-	lstAppendPointerStaticPool(mph, &ba[1].BP, &ba[2]);
-	lstAppendPointerStaticPool(mph, &ba[2].UP, &ba[1]);
-	lstAppendPointerStaticPool(mph, &ba[2].RP, &ba[3]);
-	lstAppendPointerStaticPool(mph, &ba[3].LP, &ba[2]);
-	lstAppendPointerStaticPool(mph, &ba[3].UP, &ba[0]);
-	lstAppendPointerStaticPool(mph, &ba[0].BP, &ba[3]);
-
-	for (lip = Root->LP.pFirst; lip; lip = lip->pNext) {
-		tba = lip->p;
-		if (ba[1].U > tba->B && ba[1].B < tba->U) { lstAppendPointerStaticPool(mph, &ba[1].LP, tba); lstAppendPointerStaticPool(mph, &tba->RP, &ba[1]); }
-		if (ba[2].U > tba->B && ba[2].B < tba->U) { lstAppendPointerStaticPool(mph, &ba[2].LP, tba); lstAppendPointerStaticPool(mph, &tba->RP, &ba[2]); }
-	}
-	for (lip = Root->RP.pFirst; lip; lip = lip->pNext) {
-		tba = lip->p;
-		if (ba[0].U > tba->B && ba[0].B < tba->U) { lstAppendPointerStaticPool(mph, &ba[0].RP, tba); lstAppendPointerStaticPool(mph, &tba->LP, &ba[0]); }
-		if (ba[3].U > tba->B && ba[3].B < tba->U) { lstAppendPointerStaticPool(mph, &ba[3].RP, tba); lstAppendPointerStaticPool(mph, &tba->LP, &ba[3]); }
-	}
-	for (lip = Root->UP.pFirst; lip; lip = lip->pNext) {
-		tba = lip->p;
-		if (ba[0].R > tba->L && ba[0].L < tba->R) { lstAppendPointerStaticPool(mph, &ba[0].UP, tba); lstAppendPointerStaticPool(mph, &tba->BP, &ba[0]); }
-		if (ba[1].R > tba->L && ba[1].L < tba->R) { lstAppendPointerStaticPool(mph, &ba[1].UP, tba); lstAppendPointerStaticPool(mph, &tba->BP, &ba[1]); }
-	}
-	for (lip = Root->BP.pFirst; lip; lip = lip->pNext) {
-		tba = lip->p;
-		if (ba[2].R > tba->L && ba[2].L < tba->R) { ls

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list