/// <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); } }
/// <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); } }
void OnDisable() { if (!SpheresComputeBuf.Null()) { SpheresComputeBuf.Release(); SpheresComputeBuf = null; } }
/// <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; } }
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); } } }