[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