[Bf-blender-cvs] [fd2036333b7] soc-2018-npr: redo-ing draw code for offline rendering

Nick Wu noreply at git.blender.org
Tue Jun 26 12:33:00 CEST 2018


Commit: fd2036333b7fdc978bdd5c363a1642e2f58826d0
Author: Nick Wu
Date:   Tue Jun 26 14:03:52 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBfd2036333b7fdc978bdd5c363a1642e2f58826d0

redo-ing draw code for offline rendering

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

M	source/blender/draw/engines/lanpr/lanpr_all.h
M	source/blender/draw/engines/lanpr/lanpr_ops.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
M	source/blender/makesrna/intern/rna_lanpr.c
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index b6d24e044ca..6c6c921b7dc 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -323,6 +323,11 @@ typedef struct LANPR_RenderBuffer {
 	nListItemPointer *MaterialManaged;
 	nListHandle MaterialLines;
 
+	u32bit EdgeMarkCount;
+	u32bit EdgeMarkProcessed;
+	nListItemPointer *EdgeMarkManaged;
+	nListHandle EdgeMarks;
+
 	SpinLock csInfo;
 	SpinLock csData;
 	SpinLock csManagement;
@@ -349,7 +354,7 @@ typedef struct LANPR_RenderBuffer {
 	int ShowMaterial;
 	int OverrideDisplay;
 
-	nListHandle DrawCommands;
+	//nListHandle DrawCommands; /* not used now */
 
 	//tnsRenderBufferPreviewNode RenderPreview[32];
 
@@ -459,71 +464,10 @@ typedef struct LANPR_RenderSubPixel {
 //#define TNS_OVERRIDE_ALL_OTHERS_IN_GROUP      3
 //#define TNS_OVERRIDE_ALL_OTHERS               4
 
-typedef struct LANPR_RenderDrawCommand {
-	nListItem           Item;
-	LANPR_RenderBuffer* ParentRB;
-
-	int              Type;
-
-	nSafeString*     Name;
-
-	tnsVector4d Color;
-	real        Thickness;
-	int         OccludeBegin, OccludeEnd;
-
-	int         UseStipple;
-	u16bit      StipplePattern;
-	u8bit       StippleSize;
-	int         DrawThisCommand;
-
-	int         DrawContour;
-	int         DrawCrease;
-	int         DrawIntersections;
-	int         DrawMaterialLines;
-
-	GLuint      VBO;
-	GLuint      NBO;
-	int         VertCount;
-
-	int          OverrideColor;
-	Material*    MaterialRef;
-	nSafeString* ReadMaterialName;
-
-	Collection*  OverrideGroup; // I'll correct the name to "collection" later.
-	nSafeString* ReadGroupName;
-	int          ExcludeGroup;
-
-	real         NormalEdgeClamp;
-	real         NormalEdgeStrength;
-	real         DepthEdgeClamp;
-	real         DepthEdgeStrength;
-
-	int          ClearDepthBuffer;
-	
-	int          DepthTest;
-
-	int          TransparencyMode;
-	real         Transparency;
-}LANPR_RenderDrawCommand;
-
-
 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 tnsLinearItp(L, R, T) \
 	((L) * (1.0f - (T)) + (R)*(T))
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 92c6c87c925..da5d2f7ea28 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -17,6 +17,7 @@
 #include "BKE_customdata.h"
 #include "DEG_depsgraph_query.h"
 #include "BKE_camera.h"
+#include "BKE_collection.h"
 #include "GPU_draw.h"
 
 #include "GPU_batch.h"
@@ -2504,7 +2505,7 @@ LANPR_RenderBuffer *lanpr_CreateRenderBuffer(SceneLANPR *lanpr) {
 	return rb;
 }
 
-void lanpr_RebuildRenderDrawCommand(LANPR_RenderBuffer *rb, LANPR_LineLayer *rdc);
+void lanpr_RebuildRenderDrawCommand(LANPR_RenderBuffer *rb, LANPR_LineLayer *ll);
 
 int lanpr_DrawEdgePreview(LANPR_RenderBuffer *rb, LANPR_LineLayer *OverrideLayer, Collection *OverrideGroup,
                           real ThicknessScale, RenderEngine *e, GPUFrameBuffer *Off) {
@@ -2526,7 +2527,7 @@ static char MessageFailed[] = "No saving action performed.";
 
 //int ACTINV_SaveRenderBufferPreview(nActuatorIntern* a, nEvent* e) {
 //	LANPR_RenderBuffer* rb = a->This->EndInstance;
-//	LANPR_LineStyle* rdc;
+//	LANPR_LineStyle* ll;
 //	char FullPath[1024] = "";
 //
 //	if (!rb) return;
@@ -2558,9 +2559,9 @@ static char MessageFailed[] = "No saving action performed.";
 //			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) {
+//		for (ll = lanpr->line_layers.pFirst; ll; ll = ll->Item.pNext) {
 //			FullPath[0] = 0;
-//			if ((!rdc->Name || !rdc->Name->Ptr) && !unnamed) {
+//			if ((!ll->Name || !ll->Name->Ptr) && !unnamed) {
 //				nulAddPanelMessage(&List, MessageHalfSuccess);
 //				nulAddPanelMessage(&List, MessageLayerName);
 //				unnamed = 1;
@@ -2569,8 +2570,8 @@ static char MessageFailed[] = "No saving action performed.";
 //			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);
+//			strcat(FullPath, ll->Name->Ptr);
+//			lanpr_SaveRenderBufferPreviewAsImage(rb, FullPath, ll, 0);
 //		}
 //		if(unnamed)nulEnableMultiMessagePanel(a, 0, "Caution", &List, e->x, e->y, 500, e);
 //	}
@@ -2578,13 +2579,13 @@ static char MessageFailed[] = "No saving action performed.";
 //	return NUL_FINISHED;
 //}
 //int ACTINV_SaveSingleLayer(nActuator* a, nEvent* e) {
-//	LANPR_LineStyle* rdc = a->This->EndInstance;
+//	LANPR_LineStyle* ll = a->This->EndInstance;
 //	char FullPath[1024] = "";
 //	int fail = 0;
 //
-//	if (!rdc)return;
+//	if (!ll)return;
 //
-//	tnsFrameBuffer* fb = rdc->ParentRB->FrameBuffer;
+//	tnsFrameBuffer* fb = ll->ParentRB->FrameBuffer;
 //
 //	if (!fb) return;
 //
@@ -2597,7 +2598,7 @@ static char MessageFailed[] = "No saving action performed.";
 //		if ((!fb->ImageNameConnector || !fb->ImageNameConnector->Ptr)) nulAddPanelMessage(&List, MessageConnector);
 //		fail = 1;
 //	}
-//	if (!rdc->Name || !rdc->Name->Ptr) {
+//	if (!ll->Name || !ll->Name->Ptr) {
 //		nulAddPanelMessage(&List, MessageHalfSuccess);
 //		nulAddPanelMessage(&List, MessageLayerName);
 //		fail = 1;
@@ -2613,8 +2614,8 @@ static char MessageFailed[] = "No saving action performed.";
 //	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);
+//	strcat(FullPath, ll->Name->Ptr);
+//	lanpr_SaveRenderBufferPreviewAsImage(ll->ParentRB, FullPath, ll, 0);
 //
 //
 //	return NUL_FINISHED;
@@ -2622,7 +2623,7 @@ static char MessageFailed[] = "No saving action performed.";
 
 
 
-long lanpr_CountLeveledEdgeSegmentCount(nListHandle *LineList, int OccludeLevel, Collection *OverrideGroup, int Exclusive) {
+long lanpr_CountLeveledEdgeSegmentCount(nListHandle *LineList, int qi_begin, int qi_end) {
 	nListItemPointer *lip;
 	LANPR_RenderLine *rl;
 	LANPR_RenderLineSegment *rls;
@@ -2633,11 +2634,11 @@ long lanpr_CountLeveledEdgeSegmentCount(nListHandle *LineList, int OccludeLevel,
 		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++;
+			//if (OverrideGroup) {
+			//	if (Exclusive && BKE_collection_has_object(OverrideGroup, rl->ObjectRef)) continue;
+			//	if (!Exclusive && !BKE_collection_has_object(OverrideGroup, rl->ObjectRef)) continue;
+			//}
+			if (rls->OccludeLevel >= qi_begin && rls->OccludeLevel<= qi_end) Count++;
 		}
 	}
 	return Count;
@@ -2651,7 +2652,7 @@ long lanpr_CountIntersectionSegmentCount(LANPR_RenderBuffer *rb) {
 	}
 	return Count;
 }
-void *lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, nListHandle *LineList, float *VertexArray, int OccludeLevel, Collection *OverrideGroup, int Exclusive) {
+void *lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, nListHandle *LineList, float *VertexArray, int qi_begin, int qi_end) {
 	nListItemPointer *lip;
 	LANPR_RenderLine *rl;
 	LANPR_RenderLineSegment *rls, *irls;
@@ -2662,14 +2663,13 @@ void *lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, nListHandle *Line
 	for (lip = LineList->pFirst; lip; lip = lip->pNext) {
 		rl = lip->p;
 		o = rl->ObjectRef;
-		if (OverrideGroup) {
-			//if (CollectionHaveObject(OverrideGroup, rl->ObjectRef) && Exclusive) continue;
-			//if (!CollectionHaveObject(OverrideGroup, rl->ObjectRef) && !Exclusive) continue;
-		}
+		//if (OverrideGroup) {
+		//	if (Exclusive && BKE_collection_has_object(OverrideGroup, rl->ObjectRef)) continue;
+		//	if (!Exclusive && !BKE_collection_has_object(OverrideGroup, rl->ObjectRef)) continue;
+		//}
 
-		//if(o) o->LineRenderingDone = 1;
 		for (rls = rl->Segments.pFirst; rls; rls = rls->Item.pNext) {
-			if (rls->OccludeLevel == OccludeLevel) {
+			if (rls->OccludeLevel >= qi_begin && rls->OccludeLevel<= qi_end) {
 				*V = tnsLinearItp(rl->L->FrameBufferCoord[0], rl->R->FrameBufferCoord[0], rls->at) * W;
 				V++;
 				*V = tnsLinearItp(rl->L->FrameBufferCoord[1], rl->R->FrameBufferCoord[1], rls->at) * H;
@@ -2767,93 +2767,88 @@ u32bit lanpr_MakeBoundingAreaVBORecursive(float *V, u32bit Begin, LANPR_Bounding
 //}
 
 
-void lanpr_RebuildRenderDrawCommand(LANPR_RenderBuffer *rb, LANPR_LineLayer *rdc) {
+/* ============================================ viewport display ================================================= */
+
+void lanpr_RebuildRenderDrawCommand(LANPR_RenderBuffer *rb, LANPR_LineLayer *ll) {
 	int Count = 0;
 	int level;
 	float *V, *tv, *N;;
 
-	if (!rb || !rb->Scene) return;
+	if (ll->type == TNS_COMMAND_LINE) {
+		glGenBuffers(1, &ll->VBO);
+		glBindBuffer(GL_ARRAY_BUFFER, ll->VBO);
 
-	if (rdc->VBO) {
-		glBindBuffer(GL_ARRAY_BUFFER, 0);
-		glDeleteBuffers(1, &rdc->VBO);
-	}
-	if (rdc->NBO) {
-		glBindBuffer(GL_ARRAY_BUFFER, 0);
-		glDeleteBuffers(1, &rdc->NBO);
-	}
+		if (ll->enable_contour)           Count += lanpr_CountLeveledEdgeSegmentCount(&rb->Contours, ll->qi_begin, ll->qi_end);
+		if (ll->enable_crease)            Count += lanpr_CountLeveledEdgeSegmentCount(&rb->CreaseLines, ll->qi_begin, ll->qi_end);
+		if (ll->enable_intersection)      Count += lanpr_CountLeveledEdgeSegmentCount(&rb->IntersectionLines, ll->qi_begin, ll->qi_end);
+		if (ll->enable_edge_mark)         Count += lanpr_CountLeveledEdgeSegmentCount(&rb->EdgeMarks, ll->qi_be

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list