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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs