示例#1
0
    void DispatchShaders()
    {
        traversalShader.SetFloat("radius", diameter / 2);
        traversalShader.SetFloat("speed", speed);
        traversalShader.SetFloat("gravity", gravityMul);
        traversalShader.SetVector("gravityVec", gravityVec);
        traversalShader.SetFloat("angularSpeed", angularSpeed);
        traversalShader.SetFloat("viscosity", viscosity);

        traversalShader.SetFloat("DeltaTime", simulationTimeStep);
        if (sphereCollider != null)
        {
            traversalShader.SetVector("sphereColliderPos", sphereCollider.transform.position);
            traversalShader.SetFloat("sphereRadius", sphereCollider.transform.lossyScale.y / 2);
        }



        sortShader.Dispatch(sortingKernelHandler, count / sortMergeGroupSize, 1, 1);
        mergeShader.Dispatch(mergeKernelHandler, count / sortMergeGroupSize, 1, 1);
        traversalShader.Dispatch(writeNodeDataKernelHandler, count / groupSize, 1, 1);
        bvhShader.Dispatch(treeConstructionKernelhandler, count / groupSize, 1, 1);
        AABBShader.Dispatch(boundingSphereKernelHandler, count / groupSize, 1, 1);

        //Cpu AABB implementation here
        //boundingInternalNodeBuffer.GetData(nodeData);
        //boundingLeafNodeBuffer.GetData(leafData);
        //CreateBoundingBoxes(ref nodeData,ref leafData);
        //boundingInternalNodeBuffer.SetData(nodeData);

        traversalShader.Dispatch(traversalKernelKernelHandler, count / mainKernelGroupSize, 1, 1);
        traversalShader.Dispatch(mainKernelHandler, count / mainKernelGroupSize, 1, 1);
    }