private static void DispatchCulling(ref PipelineBaseBuffer baseBuffer, ComputeShader computeShader, ref RenderObject obj, int index)
 {
     computeShader.SetVector(ShaderIDs._Extent, obj.extent);
     computeShader.SetInt(ShaderIDs._IndirectIndex, index);
     computeShader.SetBuffer(0, ShaderIDs.objBuffer, obj.objBuffer);
     ComputeShaderUtility.Dispatch(computeShader, 0, obj.objBuffer.count, 128);
 }
Esempio n. 2
0
 public static void DispatchLodCalculate(ref LodBuffers buffers, Vector3 cameraPosition)
 {
     buffers.sizeBuffer.SetData(ComputeShaderUtility.zero);
     buffers.lodShader.SetVector(ShaderIDs._CameraPos, cameraPosition);
     buffers.lodShader.SetBuffer(buffers.calculateKernel, ShaderIDs.lodGroupBuffer, buffers.lodGroupBuffer);
     buffers.lodShader.SetBuffer(buffers.calculateKernel, ShaderIDs.sizeBuffer, buffers.sizeBuffer);
     buffers.lodShader.SetBuffer(buffers.calculateKernel, ShaderIDs.changedBuffer, buffers.changedBuffer);
     ComputeShaderUtility.Dispatch(buffers.lodShader, buffers.calculateKernel, buffers.lodGroupBuffer.count, LodBuffers.CALCULATETHREADGROUP);
 }
 public static void SetLastFrameMatrix(ref CullingBuffers cullingBuffers, ref Matrix4x4 lastVP)
 {
     if (cullingBuffers.currentCullingResult > 0)
     {
         cullingBuffers.cullingShader.SetMatrix(ShaderIDs.LAST_VP_MATRIX, lastVP);
         cullingBuffers.cullingShader.SetBuffer(cullingBuffers.lastMatricesKernel, ShaderIDs.Transforms, cullingBuffers.resultBuffer);
         cullingBuffers.cullingShader.SetBuffer(cullingBuffers.lastMatricesKernel, ShaderIDs.lastFrameMatrices, cullingBuffers.lastFrameMatricesBuffer);
         ComputeShaderUtility.Dispatch(cullingBuffers.cullingShader, cullingBuffers.lastMatricesKernel, cullingBuffers.currentCullingResult, THREADGROUPCOUNT);
     }
 }
        /// <summary>
        /// Run Culling With Compute Shader
        /// </summary>
        /// <param name="view"></param> World To View Matrix
        /// <param name="proj"></param> View To NDC Matrix
        /// <param name="buffers"></param> Buffers
        public static void RunCulling(ref Matrix4x4 view, ref Matrix4x4 proj, ref Matrix4x4 rtProj, ref CullingBuffers buffers)
        {
            Matrix4x4 vp = proj * view;

            buffers.cullingShader.SetMatrix(ShaderIDs._VPMatrix, rtProj * view);
            GetCullingPlanes(ref vp, planes);
            for (int i = 0; i < 6; ++i)
            {
                Vector3 normal   = planes[i].normal;
                float   distance = planes[i].distance;
                planesVector[i] = new Vector4(normal.x, normal.y, normal.z, distance);
            }
            buffers.cullingShader.SetVectorArray(ShaderIDs.planes, planesVector);
            ComputeShaderUtility.Dispatch(buffers.cullingShader, buffers.csmainKernel, buffers.count, THREADGROUPCOUNT);
            buffers.currentCullingResult = (int)GetCullingBufferResult(ref buffers);
        }
 public static void RunCullDispatching(ref PipelineBaseBuffer baseBuffer, ComputeShader computeShader)
 {
     computeShader.Dispatch(1, 1, 1, 1);
     ComputeShaderUtility.Dispatch(computeShader, 0, baseBuffer.clusterCount, 64);
 }
Esempio n. 6
0
 private static void Dispatch(ref RainData data)
 {
     ComputeShaderUtility.Dispatch(data.settingData.randomDrawShader, 0, data.shaderData.instancingBuffer.count, THREADGROUPCOUNT);
 }