Graphics.DrawProceduralIndirect
Declaration
public static void DrawProceduralIndirect(Material material, Bounds bounds, MeshTopology topology, GraphicsBuffer bufferWithArgs, int argsOffset, Camera camera, MaterialPropertyBlock properties, Rendering.ShadowCastingMode castShadows, bool receiveShadows, int layer);public static void DrawProceduralIndirect(Material material, Bounds bounds, MeshTopology topology, ComputeBuffer bufferWithArgs, int argsOffset, Camera camera, MaterialPropertyBlock properties, Rendering.ShadowCastingMode castShadows, bool receiveShadows, int layer);Параметры
| Параметр | Описание |
|---|---|
| материал | Material использовать. |
| границы | Ограничительный том, окружающий экземпляры, которые вы собираетесь нарисовать. |
| топология | Топология процедурной геометрии. |
| камера | Если null (по умолчанию), сетка будет рисоваться во всех камерах. В противном случае она будет отображаться только в заданной Camera. |
| bufferWithArgs | Буфер с аргументами отрисовки. |
| argsOffset | Смещение в байтах, по которому в буфере находятся аргументы отрисовки. |
| свойства | Дополнительные свойства материала, которые должны быть применены к материалу непосредственно перед рисованием этой сетки. См. MaterialPropertyBlock. |
| castShadows | Определяет, может ли сетка создавать тени. |
| receiveShadows | Определяет, может ли сетка получать тени. |
| слой | Слой для использования. |
Описание
Чертает процедурную геометрию на GPU.
Эта функция теперь устарела. Для неиндексированного отображения используйте RenderPrimitivesIndirect. Для индексированного отображения используйте RenderPrimitivesIndexedIndirect.
Эта функция работает только на платформах, поддерживающих вычислительные шейдеры.
DrawProceduralIndirect выполняет вызов отрисовки на GPU без каких-либо вершинных или индексных буферов. Если шейдеру требуются вершинные буферы, то в зависимости от платформы происходит одно из двух: если вершинный буфер объявлен, но компилятор может его оптимизировать, выполняется обычный вызов DrawProcedural; если компилятор не может оптимизировать объявление вершинного буфера, вызов будет преобразован в обычный вызов отрисовки меша с эмулированными вершинными буферами. Второй вариант обходится дороже по производительности, поэтому при использовании DrawProceduralIndirect вершинные входы в шейдерах объявлять не рекомендуется. Количество отрисовываемой геометрии считывается из ComputeBuffer. Типичным экземпляром использования является генерация произвольного количества данных из ComputeShader и затем рендеринг этих данных без необходимости обратного чтения в CPU.
Это в основном полезно на Shader Model 4.5 уровне оборудования, где шейдеры могут читать произвольные данные из ComputeBuffer буферов.
Буфер с аргументами, bufferWithArgs, должен иметь четыре целых числа на заданной argsOffset смещении: число вершин на экземпляр, число экземпляров, местоположение вершины начала и местоположение экземпляра начала. Это отображается на Direct3D11 DrawInstancedIndirect и эквивалентные функции на других графиках APIs. На OpenGL версиях до 4.2 и всех OpenGL ES версиях, поддерживающих косвенное рисование, последний аргумент зарезервирован и поэтому должен быть равен нулю.
Существует также аналогичная функциональность в CommandBuffers, см. CommandBuffer.DrawProceduralIndirect.
Дополнительные ресурсы: Graphics.RenderPrimitivesIndirect, Graphics.RenderPrimitivesIndexedIndirect, Graphics.DrawProcedural, ComputeBuffer.CopyCount, SystemInfo.supportsComputeShaders.
Declaration
public static void DrawProceduralIndirect(Material material, Bounds bounds, MeshTopology topology, GraphicsBuffer indexBuffer, GraphicsBuffer bufferWithArgs, int argsOffset, Camera camera, MaterialPropertyBlock properties, Rendering.ShadowCastingMode castShadows, bool receiveShadows, int layer);public static void DrawProceduralIndirect(Material material, Bounds bounds, MeshTopology topology, GraphicsBuffer indexBuffer, ComputeBuffer bufferWithArgs, int argsOffset, Camera camera, MaterialPropertyBlock properties, Rendering.ShadowCastingMode castShadows, bool receiveShadows, int layer);Параметры
| Параметр | Описание |
|---|---|
| материал | Material использовать. |
| границы | Ограничительный том, окружающий экземпляры, которые вы собираетесь нарисовать. |
| топология | Топология процедурной геометрии. |
| indexBuffer | Буфер индекса, используемый для представления вершин в GPU. |
| камера | Если null (по умолчанию), сетка будет рисоваться во всех камерах. В противном случае она будет отображаться только в заданной Camera. |
| bufferWithArgs | Буфер с аргументами отрисовки. |
| argsOffset | Смещение в байтах, по которому в буфере находятся аргументы отрисовки. |
| свойства | Дополнительные свойства материала, которые должны быть применены к материалу непосредственно перед рисованием этой сетки. См. MaterialPropertyBlock. |
| castShadows | Определяет, может ли сетка создавать тени. |
| receiveShadows | Определяет, может ли сетка получать тени. |
| слой | Слой для использования. |
Описание
Чертает процедурную геометрию на GPU.
DrawProceduralIndirect выполняет вызов отрисовки на GPU без вершинного буфера. Количество отрисовываемой геометрии считывается из ComputeBuffer. Типичным случаем использования является генерация произвольного количества данных из ComputeShader и затем рендеринг этих данных, без необходимости обратного чтения в CPU.
Это в основном полезно на Shader Model 4.5 уровне аппаратного обеспечения, где шейдеры могут читать произвольные данные из ComputeBuffer буферов.
Буфер с аргументами, bufferWithArgs, должен иметь пять целых чисел на заданной argsOffset смещении: число индексов на экземпляр, число экземпляров, начало индекса, место базовой вершины и начало экземпляра. Это отображается на Direct3D11 DrawIndexedInstancedIndirect и эквивалентные функции на других графиках APIs. На OpenGL версиях до 4.2 и всех OpenGL ES версиях, поддерживающих косвенное рисование, последний аргумент зарезервирован и поэтому должен быть равен нулю.
Аналогичная функциональность есть и в CommandBuffers, см. CommandBuffer.DrawProceduralIndirect.
Дополнительные ресурсы: Graphics.DrawProcedural, ComputeBuffer.CopyCount, SystemInfo.supportsComputeShaders.