Commit: 59d878aa5c184067a1a61d8ef1d338cc1eea81a6 Author: Nick Wu Date: Wed Jul 4 13:32:40 2018 +0800 Branches: soc-2018-npr https://developer.blender.org/rB59d878aa5c184067a1a61d8ef1d338cc1eea81a6
Fixed multithread RenderTriangle size error =================================================================== M source/blender/draw/engines/lanpr/lanpr_ops.c =================================================================== diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c index 84bbb609ef5..a9b58fa5136 100644 --- a/source/blender/draw/engines/lanpr/lanpr_ops.c +++ b/source/blender/draw/engines/lanpr/lanpr_ops.c @@ -729,38 +729,23 @@ void THREAD_CalculateLineOcclusion(TaskPool *__restrict pool, LANPR_RenderTaskIn for (lip = (void *)rti->Contour; lip && lip->pPrev != rti->ContourPointers.pLast; lip = lip->pNext) { lanpr_CalculateSingleLineOcclusion(rb, lip->p, rti->ThreadID); - - count++; } - //tnsset_PlusRenderContourProcessedCount(rb, count); - count = 0; for (lip = (void *)rti->Crease; lip && lip->pPrev != rti->CreasePointers.pLast; lip = lip->pNext) { lanpr_CalculateSingleLineOcclusion(rb, lip->p, rti->ThreadID); - count++; } - //tnsset_PlusRenderCreaseProcessedCount(rb, count); - count = 0; for (lip = (void *)rti->Intersection; lip && lip->pPrev != rti->IntersectionPointers.pLast; lip = lip->pNext) { lanpr_CalculateSingleLineOcclusion(rb, lip->p, rti->ThreadID); - count++; } - //tnsset_PlusRenderIntersectionProcessedCount(rb, count); - count = 0; for (lip = (void *)rti->Material; lip && lip->pPrev != rti->MaterialPointers.pLast; lip = lip->pNext) { lanpr_CalculateSingleLineOcclusion(rb, lip->p, rti->ThreadID); - count++; } - //tnsset_PlusRenderMaterialProcessedCount(rb, count); - count = 0; - } - //thrd_exit(0); } void THREAD_CalculateLineOcclusion_Begin(LANPR_RenderBuffer* rb) { - int ThreadCount = BKE_render_num_threads(&rb->Scene->r); + int ThreadCount = rb->ThreadCount; LANPR_RenderTaskInfo* rti = MEM_callocN(sizeof(LANPR_RenderTaskInfo)*ThreadCount, "render task info"); TaskScheduler *scheduler = BLI_task_scheduler_get(); int i; @@ -2569,15 +2554,15 @@ void lanpr_DestroyRenderData(LANPR_RenderBuffer *rb) { //tnsZeroGeomtryBuffers(rb->Scene); while (reln = lstPopItem(&rb->VertexBufferPointers)) { - FreeMem(reln->Pointer); + MEM_freeN(reln->Pointer); } while (reln = lstPopItem(&rb->LineBufferPointers)) { - FreeMem(reln->Pointer); + MEM_freeN(reln->Pointer); } while (reln = lstPopItem(&rb->TriangleBufferPointers)) { - FreeMem(reln->Pointer); + MEM_freeN(reln->Pointer); } BLI_spin_end(&rb->csData); @@ -2614,7 +2599,7 @@ int lanpr_DrawEdgePreview(LANPR_RenderBuffer *rb, LANPR_LineLayer *OverrideLayer } int lanpr_GetRenderTriangleSize(LANPR_RenderBuffer *rb) { - rb->ThreadCount = rb->ThreadCount == 0 ? 1 : rb->ThreadCount; + if(rb->ThreadCount==0) rb->ThreadCount = BKE_render_num_threads(&rb->Scene->r); return sizeof(LANPR_RenderTriangle) + (sizeof(LANPR_RenderLine *) * rb->ThreadCount); } @@ -2929,12 +2914,12 @@ static int lanpr_compute_feature_lines_exec(struct bContext *C, struct wmOperato /* need threading, later.... */ rb = lanpr_CreateRenderBuffer(lanpr); - - rb->TriangleSize = lanpr_GetRenderTriangleSize(rb); rb->Scene = scene; rb->W = scene->r.xsch; rb->H = scene->r.ysch; + rb->TriangleSize = lanpr_GetRenderTriangleSize(rb); + lanpr_MakeRenderGeometryBuffers(depsgraph, scene, scene->camera, rb); lanpr_CullTriangles(rb); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs