RadeonRaysContext.WriteBuffer
Declaration
public void WriteBuffer(BufferSlice<T> dst, NativeArray<T> src);public void WriteBuffer(BufferSlice<T> dst, NativeArray<T> src, LightTransport.EventID id);Параметры
| Параметр | Описание |
|---|---|
| дст | Буферный сегмент для записи. |
| сердце | Массив в памяти CPU, который должен быть записан в буфер. Массив должен оставаться действительным до завершения операции записи. |
| Идентификатор | ID события, которое будет использоваться для отслеживания завершения записи. |
Описание
Запись данных в буфер памяти, выделенный контекстом.
Это асинхронная операция. Передайте EventID, созданный с помощью IDeviceContext.CreateEvent для отслеживания состояния завершения, если это необходимо. Метод WriteBuffer возвращается сразу после очереди команды в контексте.
Примечание: EventID одноразовый. После того, как EventID был передан этой функции, он не может быть передан последующим вызовам IDeviceContext.WriteBuffer или IDeviceContext.ReadBuffer. Это приведет к неопределенному поведению.
using Unity.Collections; using UnityEngine; using UnityEngine.LightTransport;
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();