图形缓冲区 网格索引缓冲区作为图形缓冲区。
检索到 GPU 索引缓冲区的图形缓冲区。
大多数的网格
方法是在网格数据的 CPU 副本上工作的,然后由 Unity 上传到 GPU。例如,SetIndexBufferData修改数据的 CPU 副本,而UploadMeshData将数据的 CPU 副本发送到 GPU。
可以使用GetIndexBuffer
直接访问索引缓冲区的 GPU 副本。这允许在 GPU 上更直接地操作网格索引数据,这可能会提高性能。但是,通过这种方式对索引数据所做的任何修改都将不会反映在网格数据的 CPU 副本中。
您还可以使用此方法让索引缓冲区可供计算着色器读取或写入。为此,请首先通过indexBufferTarget请求一个合适的缓冲区绑定目标,再使用GetIndexBuffer
获取网格数据,然后使用 ComputeBuffer.SetBuffer、Material.SetBuffer以及类似的方法将其设置为着色器的参数。
如果您修改了数据的 CPU 副本,这可能会导致重新创建 GPU 索引缓冲区;在这种情况下,您必须再次调用GetIndexBuffer
。
using UnityEngine;
public class ExampleScript : MonoBehaviour { public Mesh mesh; public ComputeShader computeShader; void Start() { // Mark the index buffer as needing "Raw" // (ByteAddressBuffer, RWByteAddressBuffer in HLSL shaders) // access. mesh.indexBufferTarget |= GraphicsBuffer.Target.Raw; // Get the index buffer of the Mesh, and set it up // as a buffer parameter to a compute shader. var indexBuffer = mesh.GetIndexBuffer(); computeShader.SetBuffer(0, "MeshIndexBuffer", indexBuffer); indexBuffer.Dispose(); } }