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;
    }