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

ComputeBuffer.BeginWrite

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

声明

public NativeArray<T> BeginWrite(int computeBufferStartIndex, int count);

参数

computeBufferStartIndex 写入操作将发生的元素数量的偏移量
count 将写入的最大元素数量

返回值

NativeArray<T> 大小为 count 的 NativeArray

描述

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

使用此方法开始对缓冲区执行写入操作。使用此方法比使用 ComputeBuffer.SetData 导致更少的内存复制,因此速度更快。出于兼容性原因,您只能在 ComputeBufferModeComputeBufferMode.SubUpdates 的缓冲区上调用此方法。如果您在具有不同 ComputeBufferMode 的缓冲区上调用此方法,Unity 将抛出异常。

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

因此,返回数组的内容不保证反映 GPU 端缓冲区的数据内容。因此,您应该仅将返回的数组用于写入,而不是用于读取。

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

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

写入返回的本机数组的数据必须遵循所用图形 API 的数据布局规则。有关跨平台兼容性信息,请参阅 计算着色器

其他资源:ComputeBuffer.SetDataComputeBuffer.EndWrite