Mesh.GetVertexBuffer
Declaration
public GraphicsBuffer GetVertexBuffer(int index);Параметры
| Параметр | Описание |
|---|---|
| индекс | Индекс потока данных вершины, для которого будет получен буфер. |
Возвращаемое значение
GraphicsBuffer Буфер вершин сетки как GraphicsBuffer.
Описание
Получает GraphicsBuffer, который предоставляет прямой доступ к буферу вершин GPU.
Большинство методов Mesh работают с CPU копией данных сетки, которую Unity затем загружает в GPU. Например, SetIndexBufferData модифицирует CPU копию данных, а UploadMeshData отправляет CPU копию данных в GPU.
Вы можете получить доступ к GPU копии вершинного буфера непосредственно с помощью GetVertexBuffer. Это позволяет более непосредственно манипулировать данными индекса сетки на 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(); } }
Дополнительные ресурсы: ,GetIndexBuffer,, ,vertexBufferTarget,.