Параметры
index | Индекс потока данных вершины, для которого требуется получить буфер. |
Возвращает
GraphicsBuffer Буфер вершин сетки как GraphicsBuffer.
Описание
Получает GraphicsBuffer, обеспечивающий прямой доступ к буферу вершин графического процессора.
Большинство методов Mesh
работают с копией данных сетки ЦП, которую Unity затем загружает в графический процессор. Например, SetIndexBufferData изменяет копию данных ЦП, а UploadMeshData отправляет копию данных ЦП в GPU.
Вы можете получить доступ к копии графического процессора буфера вершин напрямую, используя GetVertexBuff
. Это позволяет более прямо манипулировать данными индекса сетки на графическом процессоре, что потенциально может повысить производительность. Однако любые изменения, внесенные вами в данные индекса таким образом, не будут отражены в копии данных меша на ЦП.
Вы также можете использовать этот метод, чтобы сделать буфер вершин доступным для чтения или записи в ComputeShader. Для этого сначала запросите соответствующую цель привязки буфера через vertexBufferTarget, затем получите данные меша с помощью GetVertexBuffer
, а затем установите его как параметр для ваших шейдеров, используя ComputeBuffer.SetBuffer, Material.SetBuffer и подобные методы.
GetVertexBufferStride, GetVertexAttributeOffset и связанные с ними методы могут использоваться для запроса точного расположения и формата данных вершин сетки. , чтобы вычислительный шейдер мог правильно получить к нему доступ.
Если вы измените копию данных ЦП, это может привести к повторному созданию буферов вершин графического процессора; в этом случае вы должны снова вызвать 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.