public void InitializeBuffers(TrainerRenderManager.strokeStruct[] brushstrokeArray) { critterBrushstrokesArray = brushstrokeArray; // ??? This Array actually 'lives' inside TrainerCritterMarchingCubes instance... initPositionsBuffer = new ComputeBuffer(critterBrushstrokesArray.Length, sizeof(float) * (3 + 3 + 3 + 3 + 3 + 2) + sizeof(int) * 1); // pos = 3, color = 4, normal = 3 initPositionsBuffer.SetData(critterBrushstrokesArray); //procMaterial.SetBuffer("buf_decorations", outputBuffer); //procMaterial.SetColor("_Color", color); //procMaterial.SetTexture("_Sprite", sprite); //procMaterial.SetVector("_Size", size); //procMaterial.SetVector("_SizeRandom", sizeRandom); //procMaterial.SetFloat("_BodyColorAmount", bodyColorAmount); //procMaterial.SetFloat("_OrientForwardTangent", orientForwardTangent); //procMaterial.SetFloat("_OrientRandom", orientRandom); //procMaterial.SetInt("_Type", type); //procMaterial.SetInt("_NumRibbonSegments", numRibbonSegments); //procMaterial.SetInt("_StaticCylinderSpherical", billboardType); int kernelID = skinningComputeShader.FindKernel("CSMain"); skinningComputeShader.SetBuffer(kernelID, "buf_CritterBrushstrokeData", initPositionsBuffer); skinningBuffer = new ComputeBuffer(initPositionsBuffer.count, sizeof(float) * 2 + sizeof(int) * 2); bindPosesArray = new bindPoseStruct[critter.critterSegmentList.Count]; bindPoseBuffer = new ComputeBuffer(critter.critterSegmentList.Count, sizeof(float) * 16); segmentBuffer = new ComputeBuffer(critter.critterSegmentList.Count, sizeof(float) * 26); critterSegmentXforms = new SegmentXform[critter.critterSegmentList.Count]; // grab numSegments from Critter InitBindPose(); }
public void TurnOn(TrainerRenderManager.strokeStruct[] brushstrokeArray) { InitializeBuffers(brushstrokeArray); isOn = true; }