private BufferPair SetupComputeBuffer(int shaderHandler, ComputeShader shader, string arrayName, int arraySize)
    {
        BufferPair result = new BufferPair();

        result.array  = new float[arraySize];
        result.buffer = new ComputeBuffer(result.array.Length, sizeof(float));
        shader.SetBuffer(shaderHandler, arrayName, result.buffer);
        return(result);
    }
    public PrecomputedChunkCollection PrecomputeChunk()
    {
        ///---Shader setup---
        //--Kernals
        int sampleHandler     = samplerShader.FindKernel("PrecomputeChunkSampler");
        int caseShaderHandler = caseShader.FindKernel("PrecomputeChunkCase");

        //--Textures
        //-Lerp
        sampler_texture = CreateTexture(18, 18 * 18);
        samplerShader.SetTexture(sampleHandler, "DebugImage", sampler_texture);

        //-Case
        caseNumber_texture = CreateTexture(16, 16 * 16);
        caseShader.SetTexture(caseShaderHandler, "CaseNumber_Texture", caseNumber_texture);

        //--Float Arrays
        //-Lerp
        BufferPair samples = SetupComputeBuffer(sampleHandler, samplerShader, "SampleField", 18 * 18 * 18);

        //-Case
        BufferPair caseNumbers = SetupComputeBuffer(caseShaderHandler, caseShader, "CaseNumber_Floats", 16 * 16 * 16);

        //--Setting Offsets
        SetupShaderOffsets(samplerShader);
        SetupShaderOffsets(caseShader);

        //--Dispatch
        samplerShader.Dispatch(sampleHandler, 18 / 6, 18 / 6, 18 / 6);
        caseShader.Dispatch(caseShaderHandler, 16 / 8, 16 / 8, 16 / 8);

        //--Returning Textures
        sampler_material.mainTexture    = sampler_texture;
        caseNumber_material.mainTexture = caseNumber_texture;

        //--Fetch data for method return
        FetchArrayData(samples);
        FetchArrayData(caseNumbers);
        PrecomputedChunkCollection collection = new PrecomputedChunkCollection();

        collection.samples     = samples.array;
        collection.caseNumbers = caseNumbers.array;

        return(collection);
    }
 private static float[] FetchArrayData(BufferPair pair)
 {
     pair.buffer.GetData(pair.array);
     pair.buffer.Dispose();
     return(pair.array);
 }