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

GraphicsBuffer.LockBufferForWrite

Declaration

public NativeArray<T> LockBufferForWrite(int bufferStartIndex, int count);

Параметры

Параметр Описание
bufferStartIndex Индекс элемента, в котором начинается операция записи.
Количество Максимальное число элементов, которые будут записаны

Возвращаемое значение

NativeArray<T> А NativeArray счета размера

Описание

Начинает операцию записи в буфер

Используйте этот метод для начала операции записи в буфер. Использование этого метода приводит к меньшему количеству копий памяти, чем использование GraphicsBuffer.SetData, и, следовательно, является более быстрым. По причинам совместимости, вы можете вызвать этот метод только на буферах, где буфер был создан с установленным флагом GraphicsBuffer.UsageFlag.LockBufferForWrite. Unity вызовет исключение, если будет вызван на буфере, где этот флаг не был передан при создании.

Возвращаемый основной массив указывает непосредственно на память GPU, если это возможно. Если невозможно записать непосредственно в память GPU, возвращаемый основной массив указывает на временный буфер в памяти CPU. Возможность записи непосредственно в память GPU зависит от многих факторов, включая использование буфера, активное графическое устройство и поддержку аппаратуры.

Из-за этого содержимое возвращаемого массива не определено. Они могут отражать данные на массиве GPU, но не гарантируется. Поэтому вы можете использовать возвращаемый массив только для записи в, а не для чтения из, массива GPU.

После записи в массив вызовите GraphicsBuffer.UnlockBufferAfterWrite для завершения операции и помечайте возвращаемый NativeArray как непригодный.

Производительность этого метода будет зависеть от того, может ли он записывать непосредственно в память GPU или нет, но он всегда приведет к меньшему количеству копий памяти, чем использование SetData.

Данные, записанные в возвращаемый нативный массив, должны следовать правилам расположения данных используемой графики API. См. [[Compute Shaders]] для информации о межплатформенной совместимости. Рекомендуется использовать линейные записи и не читать, так как буфер может указывать на запись в объединенную память.

Дополнительные ресурсы: GraphicsBuffer.SetData, GraphicsBuffer.UnlockBufferAfterWrite