ComputeShader programs often need to read or write arbitrary data from or to memory buffers, and some rendering algorithms need a lower level access or control over geometry data than what is provided by the Mesh class. You can use GraphicsBuffer
for these cases. You create the buffers from C# scripts, and then fill them with data using either C# scripts or compute shader programs.
A graphics buffer is similar to an array in C#, in that it has a number of elements (count) of the same size (stride). You must supply the intended buffer usage (target) when you create a GraphicsBuffer; for example, you must pass GraphicsBuffer.Target.Index for the buffer to be usable as a geometry index buffer.
When you have finished working with the buffer, you must manually release the GPU memory. You can do this using C# dispose pattern, or by calling Release.
Additional resources: Graphics.DrawProcedural, Graphics.CopyBuffer, ComputeShader, Shader.SetGlobalBuffer, Material.SetBuffer.