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

GraphicsBuffer.LockBufferForWrite

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

声明

public NativeArray<T> LockBufferForWrite(int bufferStartIndex, int count);

参数

bufferStartIndex 写入操作开始的元素索引。
count 将要写入的最大元素数量

返回值

NativeArray<T> 大小为 count 的 NativeArray

描述

开始对缓冲区进行写入操作

使用此方法开始对缓冲区进行写入操作。使用此方法比使用 GraphicsBuffer.SetData 导致更少的内存复制,因此速度更快。出于兼容性原因,您只能在使用 GraphicsBuffer.UsageFlag.LockBufferForWrite 标志创建的缓冲区上调用此方法。如果在创建时未传递此标志的缓冲区上调用此方法,Unity 将抛出异常。

如果可能,返回的本机数组将直接指向 GPU 内存。如果无法直接写入 GPU 内存,则返回的本机数组将指向 CPU 内存中的临时缓冲区。是否可以直接写入 GPU 内存取决于许多因素,包括缓冲区用法、活动图形设备和硬件支持。

因此,返回数组的内容未定义。它们可能反映 GPU 上的数据,但没有保证。因此,您只能将返回的数组用于写入 GPU,而不能用于读取 GPU。

写入数组后,调用 GraphicsBuffer.UnlockBufferAfterWrite 以完成操作并将返回的 NativeArray 标记为不可用。

此方法的性能将根据它是否可以直接写入 GPU 内存而有所不同,但它始终会导致比使用 SetData 更少的内存复制。

写入返回的本机数组的数据必须遵循正在使用的图形 API 的数据布局规则。有关跨平台兼容性信息,请参阅 [[Compute Shaders]]。建议进行线性写入且不进行读取,因为缓冲区可能指向写入组合内存。

其他资源:GraphicsBuffer.SetDataGraphicsBuffer.UnlockBufferAfterWrite