Commit: 48e17cea96b786e037914418c2d39a7efbe8454a
Author: Nick Wu
Date:   Tue Jun 19 11:27:53 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB48e17cea96b786e037914418c2d39a7efbe8454a

Adding software render functions. don't compile!

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

M       source/blender/draw/engines/lanpr/lanpr_all.h
A       source/blender/draw/engines/lanpr/lanpr_software_render.c
M       source/blender/editors/render/render_intern.h
M       source/blender/editors/render/render_ops.c
M       source/blender/makesdna/DNA_lanpr_types.h
M       source/blender/makesdna/DNA_scene_types.h

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h 
b/source/blender/draw/engines/lanpr/lanpr_all.h
index 64fc27b7407..f1cde2176cf 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -222,11 +222,110 @@ typedef struct tnsRenderTaskInfo {
 
 } tnsRenderTaskInfo;
 
+/* Below ported from NUL_TNS.h */
+
+struct LANPR_RenderBuffer {
+       LANPR_RenderBuffer *prev, *next;
+
+       nSafeString*       Name;
+
+       tnsFrameBuffer*    FrameBuffer;
+
+       tnsBoundingArea*   InitialBoundingAreas;
+       //u32bit             BoundingAreaCount;
+       //u32bit             BaVBO;
+       //u32bit           BaFillVBO;
+
+       ListBase           VertexBufferPointers;
+       ListBase           TriangleBufferPointers;
+       
+       ListBase           AllRenderLines;
+
+       //nListHandle     IntersectingVertexBuffer;
+
+    /* BLI_xx equ? */
+       nStaticMemoryPool  RenderDataPool;
+
+       //render status
+
+       real            ViewVector[3];
+
+       int             TriangleSize;
+
+       u32bit          ContourCount;
+       u32bit          ContourProcessed;
+       nListItemPointer* ContourManaged;
+       ListBase        Contours;
+
+       u32bit          IntersectionCount;
+       u32bit          IntersectionProcessed;
+       nListItemPointer* IntersectionManaged;
+       ListBase        IntersectionLines;
+
+       u32bit          CreaseCount;
+       u32bit          CreaseProcessed;
+       nListItemPointer* CreaseManaged;
+       ListBase        CreaseLines;
+
+       u32bit          MaterialLineCount;
+       u32bit          MaterialProcessed;
+       nListItemPointer* MaterialManaged;
+       ListBase        MaterialLines;
+
+       //CRITICAL_SECTION csInfo;
+       //CRITICAL_SECTION csData;
+       //CRITICAL_SECTION csManagement;
+
+       //settings
+
+       //int             OutputTransparent;
+       //real            BackgroundColor[4];
+
+       int             MaxOccludeLevel;
+       real            CreaseAngle;
+       real            CreaseCos;
+       int             CreaseAllowOverride;
+       int             ThreadCount;
+       
+       real            OverallProgress;
+       int             CalculationStatus;
+
+       int             DrawMaterialPreview;
+       real            MaterialTransparency;
+
+       int             ShowLine;
+       int             ShowFast;
+       int             ShowMaterial;
+       int             OverrideDisplay;
+
+       ListBase        DrawCommands;
+
+       //tnsRenderBufferPreviewNode RenderPreview[32];
+
+       Scene*          Scene;
+       //tnsCamera* Camera;
+
+       //tnsRenderTriangles are in mesh object.
+}LANPR_RenderBuffer;
+
 
 extern RenderEngineType DRW_engine_viewport_lanpr_type;
 
 
 
+#define LANPR_MASTER_MODE_DPIX         0
+#define LANPR_MASTER_MODE_SNAKE        1
+
+#define LANPR_POST_PROCESSING_DISABLED 0
+#define LANPR_POST_PROCESSING_ENABLED  1
+
+#define LANPR_USE_DIFFERENT_TAPER      0
+#define LANPR_USE_SAME_TAPER           1
+
+#define LANPR_DISABLE_TIP_EXTEND       0
+#define LANPR_ENABLE_TIP_EXTEND        1
+
+
 
 #define TNS_TILE(tile,r,c,CCount)\
 tile[r*CCount+c]
diff --git a/source/blender/draw/engines/lanpr/lanpr_software_render.c 
b/source/blender/draw/engines/lanpr/lanpr_software_render.c
new file mode 100644
index 00000000000..9986b922af2
--- /dev/null
+++ b/source/blender/draw/engines/lanpr/lanpr_software_render.c
@@ -0,0 +1,158 @@
+#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 - [email protected]
+
+*/
+
+void lanpr_make_render_buffers_recursive(tns3DObject* o,real* MVMat,real* 
MVPMat,tnsRenderBuffer* rb, real HeightMultiply){
+       tns3DObject* oc;
+       tnsMeshObject* mo;
+       tnsVert* v;
+       tnsFace* f;
+       tnsEdge* e;
+       tnsRenderTriangle* rt;
+       tnsMatrix44d NewMVP;
+       tnsMatrix44d NewMV;
+       tnsFrameBuffer* fb = rb->FrameBuffer;
+       tnsRenderElementLinkNode* reln;
+       tnsCamera* c = rb->Scene->ActiveCamera;
+       tnsMaterial* m;
+
+       //if (o->RenderTriangles) FreeMem(o->RenderTriangles);
+       //if (o->RenderVertices) FreeMem(o->RenderVertices);
+
+       tMatMultiply44d(NewMVP, MVPMat, o->SelfTransform);
+       tMatMultiply44d(NewMV, MVMat, o->SelfTransform);
+
+       if (o->Type == TNS_OBJECT_MESH) {
+               mo = o;
+               o->RenderVertices = CreateNewBuffer(tnsRenderVert, mo->numV);
+               o->RenderTriangles = calloc(mo->TriangleCount, 
rb->TriangleSize);//CreateNewBuffer(tnsRenderTriangle, mo->TriangleCount);
+               //o->RenderLines = CreateNewBuffer(tnsRenderLine, 
mo->TriangulatedEdgeCount);
+
+               reln = lstAppendPointerStaticSized(&rb->VertexBufferPointers, 
&rb->RenderDataPool, o->RenderVertices,
+                       sizeof(tnsRenderElementLinkNode));
+               reln->ElementCount = mo->numV;
+               reln->ObjectRef = mo;
+
+               reln = lstAppendPointerStaticSized(&rb->TriangleBufferPointers, 
&rb->RenderDataPool, o->RenderTriangles,
+                       sizeof(tnsRenderElementLinkNode));
+               reln->ElementCount = mo->TriangleCount;
+               reln->ObjectRef = mo;
+
+               for (v = mo->V.pFirst; v; v = v->Item.pNext) {
+                       tRdrTransformRenderVert(v, o->RenderVertices, NewMV, 
NewMVP,c);//,HeightMultiply,c->ZMin,c->ZMax);
+                       tObjRecalculateVertNormal(v);
+               }
+
+               for (e = mo->E.pFirst; e; e = e->Item.pNext) {
+                       tnsRenderLine* rl = 
memStaticAquire(&rb->RenderDataPool, sizeof(tnsRenderLine));
+                       rl->L = e->VL->RV;
+                       rl->R = e->VR->RV;
+                       e->RenderLine = rl;
+                       tnsRenderLineSegment* rls = 
memStaticAquire(&rb->RenderDataPool, sizeof(tnsRenderLineSegment));
+                       lstAppendItem(&rl->Segments, rls);
+                       lstAppendItem(&rb->AllRenderLines, rl);
+               }
+
+
+               rt = o->RenderTriangles;
+               for (f = mo->F.pFirst; f; f = f->Item.pNext) {
+                       tObjRecalculateFaceAverageNormal(f);
+                       tObjSimpleTriangulateRender(f, rt, rb->TriangleSize, 
o->RenderVertices, &rb->AllRenderLines, &rt, &rb->RenderDataPool);
+                       // already done in the func above. 
tRdrCalculateRenderTriangleNormal(rt);
+                       tMatApplyNormalTransform43d(f->GNormal, MVMat, 
f->FaceNormal);
+                       tMatNormalizeSelf3d(f->GNormal);
+                       m = tnsGetIndexedMaterial(rb->Scene, f->MaterialID);
+                       //if(m) m->PreviewVCount += (f->TriangleCount*3);
+               }
+       }
+
+       for (oc = o->ChildObjects.pFirst; oc; oc = oc->Item.pNext) {
+               tRdrMakeRenderGeometryBuffersRecursive(oc, NewMV, NewMVP, rb, 
HeightMultiply);
+       }
+}
+void lanpr_make_render_buffers(tnsScene* s,tnsCamera* c, tnsRenderBuffer* rb, 
int HeightMultiply) {
+       tns3DObject* o;
+       tnsMatrixStackItem* tmsi = tKnlGetCurrentMatStackItem();
+       tnsShader* current_shader = 0;
+       tnsMatrix44d proj,view,result, inv;
+       tnsFrameBuffer* fb = rb->FrameBuffer;
+
+       if (!c) return;
+
+       memset(rb->Scene->MaterialPointers, 0, sizeof(void*) * 2048);
+
+       real asp = ((real)fb->W / (real)fb->H);
+
+       if (c->CameraType == TNS_CAMERA_PERSPECTIVE) {
+               tMatMakePerspectiveMatrix44d(proj, c->FOV, asp, c->ZMin, 
c->ZMax);
+       }elif(c->CameraType == TNS_CAMERA_ORTHO) {
+               real w = c->OrthScale;
+               tMatMakeOrthographicMatrix44d(proj, -w, w, -w / asp, w / asp, 
c->ZMin, c->ZMax);
+       }
+
+       tMatLoadIdentity44d(view);
+
+       tObjApplySelfTransformMatrix(c, 0);
+       tObjApplyGlobalTransformMatrixReverted(c);
+       tMatInverse44d(inv, c->Base.GlobalTransform);
+       tMatMultiply44d(result, proj, inv);
+       memcpy(proj, result, sizeof(tnsMatrix44d));
+       memcpy(fb->ViewProjection, proj, sizeof(tnsMatrix44d));
+
+       tMatInverse44d(fb->VPInverse, fb->ViewProjection);
+
+       void* a;
+       while (a = lstPopPointer(&rb->TriangleBufferPointers)) FreeMem(a);
+       while (a = lstPopPointer(&rb->VertexBufferPointers)) FreeMem(a);
+
+       for (o = s->Objects.pFirst; o; o = o->Item.pNext) {
+               //tObjApplyGlobalTransformMatrixRecursive(o);
+               lanpr_make_render_buffers_recursive(o, view, proj, rb, 
(real)HeightMultiply);
+       }
+}
+
+static int lanpr_compute_feature_lines_exec(bContext *C, wmOperator *op, const 
wmEvent *event){
+       tnsRenderBuffer* rb = a->This->EndInstance;
+       thrd_t SeperateThread;
+
+       if (!rb || !rb->Scene || !rb->Scene->ActiveCamera) {
+               return OPERATOR_CANCELLED;
+       }
+
+       rb->TriangleSize = tRdrGetRenderTriangleSize(rb);
+
+       thrd_create(&SeperateThread, THREAD_ComputeFeatureLines, rb);
+
+       return OPERATOR_FINISHED;
+}
+
+static void lanpr_compute_feature_lines_cancel(bContext *C, wmOperator *op){
+    return;
+}
+
+
+void SCENE_OT_lanpr_calculate_feature_lines(struct wmOperatorType* ot){
+
+       /* identifiers */
+       ot->name = "Calculate Feature Lines";
+       ot->description = "LANPR calculates feature line in current scene";
+       ot->idname = "SCENE_OT_lanpr_calculate";
+
+       /* api callbacks */
+       //ot->invoke = screen_render_invoke; /* why we need both invoke and 
exec? */
+       //ot->modal = screen_render_modal;
+       ot->cancel = lanpr_compute_feature_lines_cancel;
+       ot->exec = lanpr_compute_feature_lines;
+}
\ No newline at end of file
diff --git a/source/blender/editors/render/render_intern.h 
b/source/blender/editors/render/render_intern.h
index d7b92c00ed4..b2a2ecaf9b5 100644
--- a/source/blender/editors/render/render_intern.h
+++ b/source/blender/editors/render/render_intern.h
@@ -79,6 +79,9 @@ void SCENE_OT_freestyle_modifier_copy(struct wmOperatorType 
*ot);
 void SCENE_OT_freestyle_stroke_material_create(struct wmOperatorType *ot);
 #endif
 
+/* lanpr: lanpr_software_render.c */
+void SCENE_OT_lanpr_calculate_feature_lines(struct wmOperatorType* ot);
+
 
 void TEXTURE_OT_slot_copy(struct wmOperatorType *ot);
 void TEXTURE_OT_slot_paste(struct wmOperatorType *ot);
diff --git a/source/blender/editors/render/render_ops.c 
b/source/blender/editors/render/render_ops.c
index dd5ed5b78f1..b466e9e1277 100644
--- a/source/blender/editors/render/render_ops.c
+++ b/source/blender/editors/render/render_ops.c
@@ -82,6 +82,9 @@ void ED_operatortypes_render(void)
        WM_operatortype_append(SCENE_OT_freestyle_stroke_material_create);
 #endif
 
+    /* lanpr:  */
+    WM_operatortype_append(SCENE_OT_lanpr_calculate_feature_lines);
+
        WM_operatortype_append(TEXTURE_OT_slot_copy);
        WM_operatortype_append(TEXTURE_OT_slot_paste);
        WM_operatortype_append(TEXTURE_OT_slot_move);
diff --git a/source/blender/makesdna/DNA_lanpr_types.h 
b/source/blender/makesdna/DNA_lanpr_types.h
index 0db9b999e92..e35311039ab 100644
--- a/source/blender/makesdna/DNA_lanpr_types.h
+++ b/source/blender/makesdna/DNA_lanpr_types.h
@@ -35,29 +35,39 @@
 //#include "DNA_listBase.h"
 //#include "DNA_ID.h"
 
-#define LANPR_MASTER_MODE_DPIX         0
-#define LANPR_MASTER_MODE_SNAKE        1
+struct Object;
+struct Material;
+struct Collection;
 
-#define LANPR_POST_PROCESSING_DISABLED 0
-#define LANPR_POST_PROCESSING_ENABLED  1
+typedef struct LANP

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to