Unity 6.3
0 онлайн 71 гостей 3 в системе
Вход

RadeonRaysContext.ReadBuffer

Declaration

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

Параметры

Параметр Описание
сердце Срез буфера для чтения.
дст Массив в памяти CPU, в который должно быть записано содержимое буфера. Массив должен оставаться действительным до завершения операции чтения. Связанное содержимое: IDeviceContext.Wait.
Идентификатор ID события, которое будет использоваться для отслеживания завершения чтения.

Описание

Чтение содержимого буфера из контекста.

Память, на которую указывают BufferSlice<T0>, может быть перенесена в NativeArray<T0>. Это асинхронная операция. Передайте EventID, созданный с помощью IDeviceContext.CreateEvent, чтобы отслеживать состояние завершения, если это необходимо. Этот метод возвращается сразу после очереди команды в контексте.

Примечание: EventID одноразового использования. После того, как EventID был передан этой функции, он не может быть передан последующим вызовам IDeviceContext.WriteBuffer или IDeviceContext.ReadBuffer. Это приведет к неопределенному поведению.

using Unity.Collections;
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; 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();

Как читать обратно буфер.