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

RadeonRaysContext.WriteBuffer

建议更改

成功!

感谢您帮助我们提升 Unity 文档的质量。尽管我们无法接受所有提交的内容,但我们会阅读用户建议的每一项更改,并且会在适用范围内进行更新。

关闭

提交失败

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

关闭

取消

声明

public void WriteBuffer(BufferSlice<T> dst, NativeArray<T> src);

声明

public void WriteBuffer(BufferSlice<T> dst, NativeArray<T> src, LightTransport.EventID id);

参数

dst 写入的缓冲区切片。
src 应写入缓冲区的 CPU 内存中的数组。该数组必须保持有效,直到写入操作完成。
id 用于跟踪写入完成情况的事件的 ID。

说明

将数据写入由上下文分配的内存缓冲区。

这是一个异步操作。根据需要,传递一个使用IDeviceContext.CreateEvent创建的EventID以跟踪完成状态。在将命令排入上下文后,WriteBuffer 方法会立即返回。

注意:EventID是单次使用的。一旦EventID传递给该函数,就不能传递给后续IDeviceContext.WriteBufferIDeviceContext.ReadBuffer调用。这样做会导致未定义的行为。

          IDeviceContext ctx = new RadeonRaysContext();
ctx.Initialize();
uint length = 8;
var input = new NativeArray<byte>((int)length, Allocator.Persistent);
for (int i = 0; i < length; ++i)
    input[i] = (byte)i;
BufferID id = ctx.CreateBuffer(8);
var writeEvent = ctx.CreateEvent();
ctx.WriteBuffer(id.Slice<byte>(), input, writeEvent);
bool flushOk = ctx.Flush();
Assert.IsTrue(flushOk);
bool eventOk = ctx.Wait(writeEvent);
Assert.IsTrue(eventOk);
ctx.DestroyEvent(writeEvent);

// The contents of the input buffer has now been transferred into the buffer allocated by the context.

input.Dispose(); ctx.DestroyBuffer(id); ctx.Dispose();