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

Graphics.DrawProceduralIndirectNow

Declaration

public static void DrawProceduralIndirectNow(MeshTopology topology, ComputeBuffer bufferWithArgs, int argsOffset);
public static void DrawProceduralIndirectNow(MeshTopology topology, GraphicsBuffer bufferWithArgs, int argsOffset);

Параметры

Параметр Описание
топология Топология процедурной геометрии.
bufferWithArgs Буфер с аргументами отрисовки.
argsOffset Смещение в байтах, по которому в буфере находятся аргументы отрисовки.

Описание

Чертает процедурную геометрию на GPU.

DrawProceduralIndirectNow выполняет вызов отрисовки на GPU без каких-либо вершинных или индексных буферов. Если шейдеру требуются вершинные буферы, то в зависимости от платформы происходит одно из двух: — если вершинный буфер объявлен, но компилятор может его оптимизировать, выполняется обычный вызов DrawProcedural; — если компилятор не может оптимизировать объявление вершинного буфера, вызов отрисовки будет преобразован в обычный вызов отрисовки меша с эмулированными вершинными буферами.

Последняя опция имеет дополнительную нагрузку на производительность, поэтому рекомендуется не объявлять вершинные входы в шейдеры при использовании DrawProceduralIndirectNow.

Эта функция работает только на платформах, поддерживающих вычислительные шейдеры.

Количество геометрии для рисования читается из ComputeBuffer. Типичным экземпляром использования является генерация произвольного количества данных из ComputeShader и затем рендеринг этих данных без необходимости обратного чтения в CPU.

Это в основном полезно на Shader Model 4.5 уровне оборудования, где шейдеры могут читать произвольные данные из ComputeBuffer буферов.

Буфер с аргументами, bufferWithArgs, должен иметь четыре целых числа на заданной argsOffset смещении: число вершин на экземпляр, число экземпляров, местоположение стартовой вершины и местоположение стартовой экземпляра. Это отображается на Direct3D11 DrawInstancedIndirect и эквивалентные функции на других графиках APIs. На OpenGL версиях до 4.2 и всех OpenGL ES версиях, поддерживающих косвенное рисование, последний аргумент зарезервирован и поэтому должен быть равен нулю.

Обратите внимание, что этот вызов выполняется немедленно, подобно Graphics.DrawMeshNow. Он использует текущую заданную цель рендеринга, матрицы преобразования и проход шейдера.

Аналогичная функциональность есть и в CommandBuffers, см. CommandBuffer.DrawProceduralIndirect.

Дополнительные ресурсы: Graphics.DrawProceduralNow, ComputeBuffer.CopyCount, SystemInfo.supportsComputeShaders.

Declaration

public static void DrawProceduralIndirectNow(MeshTopology topology, GraphicsBuffer indexBuffer, ComputeBuffer bufferWithArgs, int argsOffset);
public static void DrawProceduralIndirectNow(MeshTopology topology, GraphicsBuffer indexBuffer, GraphicsBuffer bufferWithArgs, int argsOffset);

Параметры

Параметр Описание
топология Топология процедурной геометрии.
indexBuffer Буфер индекса, используемый для представления вершин в GPU.
bufferWithArgs Буфер с аргументами отрисовки.
argsOffset Смещение в байтах, по которому в буфере находятся аргументы отрисовки.

Описание

Чертает процедурную геометрию на GPU.

DrawProceduralIndirectNow выполняет вызов отрисовки на GPU без вершинного буфера. Если шейдеру требуются вершинные буферы, то в зависимости от платформы происходит одно из двух: — если вершинный буфер объявлен, но компилятор может его оптимизировать, выполняется обычный вызов DrawProcedural; — если компилятор не может оптимизировать объявление вершинного буфера, вызов отрисовки будет преобразован в обычный вызов отрисовки меша с эмулированными вершинными буферами.

Последняя опция имеет дополнительную нагрузку на производительность, поэтому рекомендуется не объявлять вершинные входы в шейдерах при использовании DrawProceduralIndirectNow. Объем геометрии для рисования читается из ComputeBuffer. Типичный случай использования — генерация произвольного количества данных из ComputeShader и затем рендеринг, без необходимости обратного чтения в CPU.

Это в основном полезно на аппаратном уровне Shader Model 4.5, где шейдеры могут читать произвольные данные из ComputeBuffer буферов.

Буфер с аргументами, bufferWithArgs, должен иметь пять целых чисел на заданной argsOffset смещении: число индексов на экземпляр, число экземпляров, местоположение стартового индекса, местоположение базовой вершины и местоположение стартового экземпляра. Это отображается на Direct3D11 DrawIndexedInstancedIndirect и эквивалентные функции на других графиках APIs. На OpenGL версиях до 4.2 и всех OpenGL ES версиях, которые поддерживают косвенное рисование, последний аргумент зарезервирован и поэтому должен быть равен нулю.

Обратите внимание, что этот вызов выполняется немедленно, подобно Graphics.DrawMeshNow. Он использует текущее задание рендеринга, матрицы преобразования и проход шейдера.

Существует также аналогичная функциональность в CommandBuffers, см. CommandBuffer.DrawProceduralIndirect.

Дополнительные ресурсы: Graphics.DrawProceduralNow, ComputeBuffer.CopyCount, SystemInfo.supportsComputeShaders.