public static void Cull(MCRSceneContext context) { if (!bInit) { return; } PipelineContext.mainCmdBuffer.BeginSample("GPU-Cull"); ResetCullResult(context); FrustumCull(context); OcclusCull(context); PipelineContext.mainCmdBuffer.EndSample("GPU-Cull"); PipelineContext.ExecuteMainCommandBuffer(); }
private static void FrustumCull(MCRSceneContext context) { //设置buffer PipelineContext.mainCmdBuffer.SetComputeVectorArrayParam(cullShader, GPUCull.GPUCullConstant._FrustumPlanes, PipelineContext.gpuCamera.frustumPlane); PipelineContext.mainCmdBuffer.SetComputeBufferParam(cullShader, FrustumKernerl, MCRConstant._MCRClusterBuffer, context.clusterBuffer); PipelineContext.mainCmdBuffer.SetComputeBufferParam(cullShader, FrustumKernerl, MCRConstant._MCRCullResultBuffer, context.cullResultBuffer); PipelineContext.mainCmdBuffer.SetComputeBufferParam(cullShader, FrustumKernerl, MCRConstant._MCRCullInstanceCountBuffer, context.cullInstanceCountBuffer); int val = context.ClusterCount / GPUCullConstant.FrustmCullNumThreads; PipelineContext.mainCmdBuffer.DispatchCompute(cullShader, FrustumKernerl, val, 1, 1); //PipelineContext.mainCmdBuffer.DispatchCompute(cullShader, FrustumKernerl, val, 1, 1); }
private static void OcclusCull(MCRSceneContext context) { }
private static void ResetCullResult(MCRSceneContext context) { PipelineContext.mainCmdBuffer.SetComputeBufferParam(cullShader, ClearKernel, MCRConstant._MCRCullInstanceCountBuffer, context.cullInstanceCountBuffer); //清理buffer PipelineContext.mainCmdBuffer.DispatchCompute(cullShader, ClearKernel, 1, 1, 1); }