版本: Unity 6 (6000.0)
语言English
  • C#

Mesh.GetVertexBuffer

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们会阅读用户提出的每一项更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

public GraphicsBuffer GetVertexBuffer(int index);

参数

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 等方法将其设置为着色器的参数。

GetVertexBufferStrideGetVertexAttributeOffset 和相关方法可用于查询精确的网格顶点数据布局和格式,以便计算着色器可以正确访问它。

如果修改数据的 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(); } }

其他资源:GetIndexBuffervertexBufferTarget