[Bf-blender-cvs] [48e17cea96b] soc-2018-npr: Adding software render functions. don't compile!
Nick Wu
noreply at git.blender.org
Tue Jun 19 05:29:08 CEST 2018
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 - xp8110 at outlook.com
+
+*/
+
+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. @@
More information about the Bf-blender-cvs
mailing list