[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