[Bf-blender-cvs] [e6821d3d27b] soc-2018-npr: Drawing code moved in, but most parts need redo.

Nick Wu noreply at git.blender.org
Mon Jun 25 15:37:52 CEST 2018


Commit: e6821d3d27ba401e2aaaa1eff58fd86aa38c1b7c
Author: Nick Wu
Date:   Mon Jun 25 21:33:23 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBe6821d3d27ba401e2aaaa1eff58fd86aa38c1b7c

Drawing code moved in, but most parts need redo.

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

M	source/blender/draw/engines/lanpr/lanpr_all.h
M	source/blender/draw/engines/lanpr/lanpr_ops.c
M	source/blender/makesdna/DNA_lanpr_types.h

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 32012b66fa3..31960875e30 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -238,6 +238,14 @@ typedef struct LANPR_Data {
 #define TNS_CALCULATION_OCCLUTION    4
 #define TNS_CALCULATION_FINISHED     100
 
+#define TNS_OVERRIDE_DISPLAY_NULL 0
+#define TNS_OVERRIDE_DISPLAY_SHOW 1
+#define TNS_OVERRIDE_DISPLAY_HIDE 2
+#define TNS_OVERRIDE_DISPLAY_SWAP 3
+
+#define NUL_LINE_WIDTH_WARNING_TOO_WIDE   1
+#define NUL_LINE_WIDTH_WARNING_TOO_THIN   2
+
 typedef struct LANPR_RenderTaskInfo {
 	//thrd_t           ThreadHandle;
 
@@ -351,12 +359,12 @@ typedef struct LANPR_RenderBuffer {
 
 	nListHandle DrawCommands;
 
-	//tnsRenderBufferPreviewNode RenderPreview[32];
+	//LANPR_RenderBufferPreviewNode RenderPreview[32];
 
 	struct Scene *Scene;
 	struct Object *Camera;
 
-	//tnsRenderTriangles are in mesh object.
+	//LANPR_RenderTriangles are in mesh object.
 }LANPR_RenderBuffer;
 
 
@@ -405,7 +413,7 @@ typedef struct LANPR_RenderVert {
 	struct LANPR_RenderLine *IntersectingLine;
 	struct LANPR_RenderLine *IntersectintLine2;
 	struct LANPR_RenderTriangle *IntersectWith;     //   Positive 1         Negative 0
-	//tnsRenderTriangle* IntersectingOnFace;       //         <|               |>
+	//LANPR_RenderTriangle* IntersectingOnFace;       //         <|               |>
 	char Positive;                    //                 L---->|----->R	 L---->|----->R
 	char EdgeUsed;                    //                      <|		       |>
 }LANPR_RenderVert;
@@ -416,7 +424,7 @@ typedef struct LANPR_RenderLine {
 	struct LANPR_RenderTriangle *TL, *TR;
 	nListHandle Segments;
 	//tnsEdge*       Edge;//should be edge material
-	//tnsRenderTriangle* Testing;//Should Be tRT** Testing[NumOfThreads]
+	//LANPR_RenderTriangle* Testing;//Should Be tRT** Testing[NumOfThreads]
 	char MinOcclude;
 	struct Object *ObjectRef;
 	//char            IgnoreConnectedFace;
@@ -444,15 +452,20 @@ typedef struct LANPR_RenderSubPixel {
 	real Weight[3];                   //belongto->vp 1 2 3
 }LANPR_RenderSubPixel;
 
-typedef struct LANPR_RenderTile {
-	int Row, Column;
-	int SubX, SubY, SubXLim, SubYLim;               //lower Left Corner As 0
-	real FX, FY, FXLim, FYLim;                //ratio;
-	//LANPR_RenderSubPixel* FirstPixel;            //lower Left Corner As 0
-	nListHandle AssociatedTriangles;          //lstptrs
-	nListHandle AssociatedLines;              //lstptrs
-	char Rendered;
-}LANPR_RenderTile;
+
+#define TNS_COMMAND_LINE     0
+#define TNS_COMMAND_MATERIAL 1
+#define TNS_COMMAND_EDGE     2
+
+
+#define TNS_TRANSPARENCY_DRAW_SIMPLE  0
+#define TNS_TRANSPARENCY_DRAW_LAYERED 1
+
+#define TNS_OVERRIDE_ONLY                     0
+#define TNS_OVERRIDE_EXCLUDE                  1
+//#define TNS_OVERRIDE_ALL_OTHERS_OUTSIDE_GROUP 2
+//#define TNS_OVERRIDE_ALL_OTHERS_IN_GROUP      3
+//#define TNS_OVERRIDE_ALL_OTHERS               4
 
 
 extern RenderEngineType DRW_engine_viewport_lanpr_type;
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index ceedac9825d..e291a028b93 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -183,10 +183,6 @@ void lanpr_ConnectNewBoundingAreas(LANPR_RenderBuffer *rb, LANPR_BoundingArea *R
 void lanpr_AssociateTriangleWithBoundingArea(LANPR_RenderBuffer *rb, LANPR_BoundingArea *RootBoundingArea, LANPR_RenderTriangle *rt, real *LRUB, int Recursive);
 int lanpr_TriangleCalculateIntersectionsInTile(LANPR_RenderBuffer *rb, LANPR_RenderTriangle *rt, LANPR_BoundingArea *ba);
 
-int lanpr_GetRenderTriangleSize(LANPR_RenderBuffer *rb) {
-	return sizeof(LANPR_RenderTriangle) + (sizeof(LANPR_RenderLine *) * rb->ThreadCount);
-}
-
 void lanpr_SplitBoundingArea(LANPR_RenderBuffer *rb, LANPR_BoundingArea *Root) {
 	LANPR_BoundingArea *ba = memStaticAquire(&rb->RenderDataPool, sizeof(LANPR_BoundingArea) * 4);
 	LANPR_RenderTriangle *rt;
@@ -2508,11 +2504,361 @@ LANPR_RenderBuffer *lanpr_CreateRenderBuffer(SceneLANPR *lanpr) {
 	return rb;
 }
 
+void lanpr_RebuildRenderDrawCommand(LANPR_RenderBuffer *rb, LANPR_LineStyle *rdc);
 
+int lanpr_DrawEdgePreview(LANPR_RenderBuffer *rb, LANPR_LineStyle *OverrideLayer, Collection *OverrideGroup,
+                          real ThicknessScale, RenderEngine *e, GPUFrameBuffer *Off) {
+	//too many errors. later....
+}
 
-void lanpr_generate_geom_buffer(struct Object *ob){
+int lanpr_GetRenderTriangleSize(LANPR_RenderBuffer *rb) {
+	return sizeof(LANPR_RenderTriangle) + (sizeof(LANPR_RenderLine *) * rb->ThreadCount);
+}
+
+static char Message[] = "Please fill in these fields before exporting image:";
+static char MessageFolder[] = "    - Output folder";
+static char MessagePrefix[] = "    - File name prefix";
+static char MessageConnector[] = "    - File name connector";
+static char MessageLayerName[] = "    - One or more layers have empty/illegal names.";
+static char MessageSuccess[] = "Sucessfully Saved Image(s).";
+static char MessageHalfSuccess[] = "Some image(s) failed to save.";
+static char MessageFailed[] = "No saving action performed.";
+
+//int ACTINV_SaveRenderBufferPreview(nActuatorIntern* a, nEvent* e) {
+//	LANPR_RenderBuffer* rb = a->This->EndInstance;
+//	LANPR_LineStyle* rdc;
+//	char FullPath[1024] = "";
+//
+//	if (!rb) return;
+//
+//	tnsFrameBuffer *fb = rb->FrameBuffer;
+//
+//	if (fb->OutputMode == TNS_OUTPUT_MODE_COMBINED) {
+//		if ((!fb->OutputFolder || !fb->OutputFolder->Ptr) || (!fb->ImagePrefix || !fb->ImagePrefix->Ptr)) {
+//			nPanelMessageList List = {0};
+//			nulAddPanelMessage(&List, Message);
+//			if ((!fb->OutputFolder || !fb->OutputFolder->Ptr)) nulAddPanelMessage(&List, MessageFolder);
+//			if ((!fb->ImagePrefix || !fb->ImagePrefix->Ptr)) nulAddPanelMessage(&List, MessagePrefix);
+//			nulAddPanelMessage(&List, MessageFailed);
+//			nulEnableMultiMessagePanel(a, 0, "Caution", &List, e->x, e->y, 500, e);
+//			return NUL_FINISHED;
+//		}
+//		strcat(FullPath, fb->OutputFolder->Ptr);
+//		strcat(FullPath, fb->ImagePrefix->Ptr);
+//		lanpr_SaveRenderBufferPreviewAsImage(rb, FullPath, 0, 0);
+//	}elif(fb->OutputMode == TNS_OUTPUT_MODE_PER_LAYER) {
+//		nPanelMessageList List = { 0 };
+//		int unnamed = 0;
+//		if ((!fb->OutputFolder || !fb->OutputFolder->Ptr) || (!fb->ImagePrefix || !fb->ImagePrefix->Ptr)|| (!fb->ImageNameConnector || !fb->ImageNameConnector->Ptr)) {
+//			nulAddPanelMessage(&List, Message);
+//			if ((!fb->OutputFolder||!fb->OutputFolder->Ptr)) nulAddPanelMessage(&List, MessageFolder);
+//			if ((!fb->ImagePrefix|| !fb->ImagePrefix->Ptr)) nulAddPanelMessage(&List, MessagePrefix);
+//			if ((!fb->ImageNameConnector|| !fb->ImageNameConnector->Ptr)) nulAddPanelMessage(&List, MessageConnector);
+//			nulAddPanelMessage(&List, MessageFailed);
+//			nulEnableMultiMessagePanel(a, 0, "Caution", &List, e->x, e->y, 500, e);
+//			return NUL_FINISHED;
+//		}
+//		for (rdc = lanpr->line_style_layers.pFirst; rdc; rdc = rdc->Item.pNext) {
+//			FullPath[0] = 0;
+//			if ((!rdc->Name || !rdc->Name->Ptr) && !unnamed) {
+//				nulAddPanelMessage(&List, MessageHalfSuccess);
+//				nulAddPanelMessage(&List, MessageLayerName);
+//				unnamed = 1;
+//				continue;
+//			}
+//			strcat(FullPath, fb->OutputFolder->Ptr);
+//			strcat(FullPath, fb->ImagePrefix->Ptr);
+//			strcat(FullPath, fb->ImageNameConnector->Ptr);
+//			strcat(FullPath, rdc->Name->Ptr);
+//			lanpr_SaveRenderBufferPreviewAsImage(rb, FullPath, rdc, 0);
+//		}
+//		if(unnamed)nulEnableMultiMessagePanel(a, 0, "Caution", &List, e->x, e->y, 500, e);
+//	}
+//
+//	return NUL_FINISHED;
+//}
+//int ACTINV_SaveSingleLayer(nActuator* a, nEvent* e) {
+//	LANPR_LineStyle* rdc = a->This->EndInstance;
+//	char FullPath[1024] = "";
+//	int fail = 0;
+//
+//	if (!rdc)return;
+//
+//	tnsFrameBuffer* fb = rdc->ParentRB->FrameBuffer;
+//
+//	if (!fb) return;
+//
+//	nPanelMessageList List = { 0 };
+//
+//	if ((!fb->OutputFolder || !fb->OutputFolder->Ptr) || (!fb->ImagePrefix || !fb->ImagePrefix->Ptr) || (!fb->ImageNameConnector || !fb->ImageNameConnector->Ptr)) {
+//		nulAddPanelMessage(&List, Message);
+//		if ((!fb->OutputFolder || !fb->OutputFolder->Ptr)) nulAddPanelMessage(&List, MessageFolder);
+//		if ((!fb->ImagePrefix || !fb->ImagePrefix->Ptr)) nulAddPanelMessage(&List, MessagePrefix);
+//		if ((!fb->ImageNameConnector || !fb->ImageNameConnector->Ptr)) nulAddPanelMessage(&List, MessageConnector);
+//		fail = 1;
+//	}
+//	if (!rdc->Name || !rdc->Name->Ptr) {
+//		nulAddPanelMessage(&List, MessageHalfSuccess);
+//		nulAddPanelMessage(&List, MessageLayerName);
+//		fail = 1;
+//	}
+//	if (fail) {
+//		nulAddPanelMessage(&List, MessageFailed);
+//		nulEnableMultiMessagePanel(a, 0, "Caution", &List, e->x, e->y, 500, e);
+//		return NUL_FINISHED;
+//	}
+//
+//
+//	FullPath[0] = 0;
+//	strcat(FullPath, fb->OutputFolder->Ptr);
+//	strcat(FullPath, fb->ImagePrefix->Ptr);
+//	strcat(FullPath, fb->ImageNameConnector->Ptr);
+//	strcat(FullPath, rdc->Name->Ptr);
+//	lanpr_SaveRenderBufferPreviewAsImage(rdc->ParentRB, FullPath, rdc, 0);
+//
+//
+//	return NUL_FINISHED;
+//}
+
+
+
+long lanpr_CountLeveledEdgeSegmentCount(nListHandle *LineList, int OccludeLevel, Collection *OverrideGroup, int Exclusive) {
+	nListItemPointer *lip;
+	LANPR_RenderLine *rl;
+	LANPR_RenderLineSegment *rls;
+	Object *o;
+	int not = 0;
+	long Count = 0;
+	for (lip = LineList->pFirst; lip; lip = lip->pNext) {
+		rl = lip->p;
+		o = rl->ObjectRef;
+		for (rls = rl->Segments.pFirst; rls; rls = rls->Item.pNext) {
+			if (OverrideGroup) {
+				//if (CollectionHaveObject(OverrideGroup, rl->ObjectRef) && Exclusive) continue;
+				//if (!CollectionHaveObject(OverrideGroup, rl->ObjectRef) && !Exclusive) continue;
+			}
+			if (rls->OccludeLevel == OccludeLevel) Count++;
+		}
+	}
+	return Count;
+}
+long lanpr_CountIntersectionSegmentCount(LANPR_RenderBuffer *rb) {
+	LANPR_RenderLine *rl;
+	LANPR_RenderLineSegment *rls;
+	long Count = 0;
+	for (rl = rb->IntersectionLines.pFirst; rl; rl = rl->Item.pNext) {
+		Count++;
+	}
+	return Count;
+}
+void *lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, n

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list