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

网格.GetIndexBuffer

建议更改

成功!

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

关闭

提交失败

由于某些原因,无法提交您建议的更改。请在几分钟后<;a>;重试</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

public 图形缓冲区 GetIndexBuffer();

返回

图形缓冲区 网格索引缓冲区作为图形缓冲区

说明

检索到 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(); } }

其他资源:GetVertexBufferindexBufferTarget