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