示例#1
0
        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();
        }
示例#2
0
        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);
        }
示例#3
0
 private static void OcclusCull(MCRSceneContext context)
 {
 }
示例#4
0
 private static void ResetCullResult(MCRSceneContext context)
 {
     PipelineContext.mainCmdBuffer.SetComputeBufferParam(cullShader, ClearKernel, MCRConstant._MCRCullInstanceCountBuffer, context.cullInstanceCountBuffer);
     //清理buffer
     PipelineContext.mainCmdBuffer.DispatchCompute(cullShader, ClearKernel, 1, 1, 1);
 }