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 - xp8...@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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs