示例#1
0
 // Use this for initialization
 void Start()
 {
     agentManager    = FindObjectOfType <AgentWorld>();
     phosphorManager = FindObjectOfType <PhosphorManager>();
 }
示例#2
0
    void Start()
    {
        // Grab phosphor manager
        phosphorManager = FindObjectOfType <PhosphorManager>();
        // Grab chat
        chat = FindObjectOfType <Chat>();

        // Create Kernels and Material
        KernelMain    = computeShader.FindKernel("KMain");
        KInit         = computeShader.FindKernel("KInit");
        KSpawn        = computeShader.FindKernel("KSpawn");
        KInstantiate  = computeShader.FindKernel("KInstantiate");
        KPhosphorFeed = computeShader.FindKernel("KPhosphorFeed");
        KReturn       = computeShader.FindKernel("KReturn");

        triMaterial = new Material(triShader);

        ///
        // Create Buffers
        // Agent Buffers
        agentBuffer0 = new ComputeBuffer(maxAgents, AgentData.size);
        agentBuffer1 = new ComputeBuffer(maxAgents, AgentData.size);

        // Spawn Buffer
        spawnBuffer    = new ComputeBuffer(BLOCK_SIZE * spawnerBlockCount, AgentData.size);
        spawningAgents = new List <AgentData>(BLOCK_SIZE * spawnerBlockCount);

        // Free Buffer
        freeBuffer = new ComputeBuffer(maxAgents, sizeof(int), ComputeBufferType.Append);
        freeBuffer.ClearAppendBuffer();

        // Triangle Instance Buffer
        agentInstanceBuffer = new ComputeBuffer(maxAgents, sizeof(int), ComputeBufferType.Append);
        agentInstanceBuffer.ClearAppendBuffer();

        // Args Buffer
        agentCountArgBuffer = new ComputeBuffer(4, sizeof(int), ComputeBufferType.DrawIndirect);
        int[] dArgs = new int[] { 0, 1, 0, 0 };
        agentCountArgBuffer.SetData(dArgs);

        // Targets Buffer
        targetsBuffer = new ComputeBuffer(phosphorManager.phosphorsToSpawn + 1, sizeof(float) * 4);
        targetsArray  = new Vector4[phosphorManager.phosphorsToSpawn + 1];
        // Set home target end of array to zero
        targetsArray[phosphorManager.phosphorsToSpawn] = Vector4.zero;

        // Return Buffer... awful way to do this?
        returnBuffer = new ComputeBuffer(maxAgents, sizeof(int), ComputeBufferType.Append);
        returnIds    = new int[maxAgents];
        returnBuffer.ClearAppendBuffer();


        // Run init shader on initial buffer
        computeShader.SetBuffer(KInit, "appendFreeBuffer", freeBuffer);
        computeShader.SetBuffer(KInit, "agentBufferOut", agentBuffer0);
        computeShader.Dispatch(KInit, maxAgents / BLOCK_SIZE, 1, 1);


        // Init constant uniforms
        computeShader.SetInt("maxAgents", maxAgents);
        computeShader.SetInt("maxPhosphors", phosphorManager.phosphorsToSpawn);
    }