// Use this for initialization void Start() { agentManager = FindObjectOfType <AgentWorld>(); phosphorManager = FindObjectOfType <PhosphorManager>(); }
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); }