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.