示例#1
0
    /// <summary>
    ///
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="buffer"></param>
    /// <param name="data"></param>
    /// <param name="stride"></param>
    void CreateOrBindDataToComputeBuffer <T>(ref ComputeBuffer buffer,
                                             List <T> data,
                                             int stride)
        where T : struct
    {
        // check if we already have a compute buffer.
        if (!buffer.Null())
        {
            // If no data or buffer doesn't match the given condition, release it.
            if (data.Count == 0 ||
                buffer.count != data.Count ||
                buffer.stride != stride)
            {
                buffer.Release();
                buffer = null;
            }
        }

        if (data.Count != 0)
        {
            // If the buffer has been released or wasn't there to begin with, create it.
            if (buffer.Null())
            {
                buffer = new ComputeBuffer(data.Count, stride);
            }
            // Set data on the buffer.
            buffer.SetData(data);
        }
    }
示例#2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="shader"></param>
 /// <param name="name"></param>
 /// <param name="buffer"></param>
 public static void SetComputeBuffer(ref ComputeShader shader, string name, ComputeBuffer buffer)
 {
     if (!buffer.Null())
     {
         shader.SetBuffer(0, name, buffer);
     }
 }
示例#3
0
 void OnDisable()
 {
     if (!SpheresComputeBuf.Null())
     {
         SpheresComputeBuf.Release();
         SpheresComputeBuf = null;
     }
 }
示例#4
0
 /// <summary>
 /// Check the compute buffer are still valid and release it!
 /// </summary>
 /// <param name="buf"></param>
 void DisposeComputeBuffers(ref ComputeBuffer buf)
 {
     if (!buf.Null())
     {
         buf.Release();
         buf = null;
     }
 }
示例#5
0
    void CreateComputeBufferOnly(ref ComputeBuffer buffer, int count, int stride)
    {
        if (!buffer.Null())
        {
            if (buffer.count != count || buffer.stride != stride)
            {
                buffer.Release();
                buffer = null;
            }
        }

        if (count > 0)
        {
            if (buffer.Null())
            {
                buffer = new ComputeBuffer(count, stride);
            }
        }
    }