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

RadeonRaysContext.ReadBuffer

建议修改

成功!

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

关闭

提交失败

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

关闭

取消

声明

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

声明

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

参数

src 要从中读取的缓冲区切片。
dst 应该将缓冲区内容写入到的 CPU 内存中的数组。在读取操作完成之前,该数组必须保持有效。相关内容:IDeviceContext.Wait
id 用于跟踪读取完成情况的事件 ID。

说明

从上下文读取一个缓冲区的内容。

BufferSlice<T0> 指向的内存可被传输到 NativeArray<T0>。这是一个异步操作。如果需要,请传入使用 IDeviceContext.CreateEvent 创建的 EventID 来跟踪完成状态。此方法在将命令排队到上下文中后立即返回。

注意: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;
var output = new NativeArray<byte>((int)length, Allocator.Persistent);
BufferID id = ctx.CreateBuffer(8);
var writeEvent = ctx.CreateEvent();
ctx.WriteBuffer(id.Slice<byte>(), input, writeEvent);
var readEvent = ctx.CreateEvent();
ctx.ReadBuffer(id.Slice<byte>(), output, readEvent);
bool flushOk = ctx.Flush();
Assert.IsTrue(flushOk);
bool eventOk = ctx.Wait(writeEvent);
Assert.IsTrue(eventOk);

// Contents of the buffer is now available in the CPU side memory array output.

input.Dispose(); Assert.IsTrue(ctx.IsCompleted(readEvent)); ctx.DestroyEvent(readEvent); ctx.DestroyEvent(writeEvent); ctx.DestroyBuffer(id); for (int i = 0; i < length; ++i) Assert.AreEqual((byte)i, output[i]); output.Dispose(); ctx.Dispose();

如何回读缓冲区。