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.SetData、GraphicsBuffer.UnlockBufferAfterWrite