Объявление
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 | Материал для использования. |
bounds | Ограничивающий объем, окружающий экземпляры, которые вы собираетесь рисовать. |
topology | Топология процедурной геометрии. |
camera | Если null (по умолчанию), сетка будет отрисовываться во всех камерах. В противном случае он будет отображаться только в данной камере. |
bufferWithArgs | Буфер с аргументами отрисовки. |
argsOffset | Байтовое смещение, где в буфере находятся аргументы отрисовки. |
properties | Дополнительные свойства материала, применяемые к материалу непосредственно перед отрисовкой этой сетки. См. MaterialPropertyBlock. |
castShadows | Определяет, может ли сетка отбрасывать тени. |
receiveShadows | Определяет, может ли сетка получать тени. |
layer | Слой для использования. |
Описание
Рисует процедурную геометрию на GPU.
DrawProceduralIndirect выполняет вызов отрисовки на графическом процессоре без каких-либо буферов вершин или индексов. Объем геометрии для рисования считывается из ComputeBuffer. Типичный пример использования — генерация произвольного объема данных из ComputeShader и последующая их визуализация без необходимости обратного считывания в ЦП.
В основном это полезно на оборудовании уровня Shader Model 4.5, где шейдеры могут считывать произвольные данные из ComputeBuffer буферы.
Буфер с аргументами, bufferWithArgs
, должен содержать четыре целых числа при заданном смещении argsOffset
: количество вершин на экземпляр, экземпляр количество, начальное местоположение вершины и начальное местоположение экземпляра. Это соответствует Direct3D11 DrawInstancedIndirect и эквивалентным функциям в других графических API. В версиях OpenGL до 4.2 и во всех версиях OpenGL ES, поддерживающих косвенную отрисовку, последний аргумент зарезервирован и поэтому должен быть равен нулю.
Подобные функции есть и в CommandBuffers, см. CommandBuffer.DrawProceduralIndirect.
Смотрите так же: Graphics.DrawProcedural, ComputeBuffer.CopyCount, SystemInfo.supportsComputeShaders.
Объявление
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 | Материал для использования. |
bounds | Ограничивающий объем, окружающий экземпляры, которые вы собираетесь рисовать. |
topology | Топология процедурной геометрии. |
indexBuffer | Индексный буфер, используемый для отправки вершин в GPU.. |
camera | Если null (по умолчанию), сетка будет отрисовываться во всех камерах. В противном случае он будет отображаться только в данной камере. |
bufferWithArgs | Буфер с аргументами отрисовки. |
argsOffset | Байтовое смещение, где в буфере находятся аргументы отрисовки. |
properties | Дополнительные свойства материала, применяемые к материалу непосредственно перед отрисовкой этой сетки. См. MaterialPropertyBlock. |
castShadows | Определяет, может ли сетка отбрасывать тени. |
receiveShadows | Определяет, может ли сетка получать тени. |
layer | Слой для использования. |
Описание
Рисует процедурную геометрию на GPU.
DrawProceduralIndirect выполняет вызов отрисовки на графическом процессоре без буфера вершин. Объем геометрии для рисования считывается из ComputeBuffer. Типичный пример использования — генерация произвольного объема данных из ComputeShader и последующая их визуализация без необходимости обратного считывания в ЦП.
В основном это полезно на оборудовании уровня Shader Model 4.5, где шейдеры могут считывать произвольные данные из ComputeBuffer буферы.
Буфер с аргументами, bufferWithArgs
, должен содержать пять целых чисел с заданным смещением argsOffset
: число индексов на экземпляр, экземпляр количество, начальное положение индекса, базовое положение вершины и начальное положение экземпляра. Это соответствует Direct3D11 DrawIndexedInstancedIndirect и эквивалентным функциям в других графических API. В версиях OpenGL до 4.2 и во всех версиях OpenGL ES, поддерживающих косвенную отрисовку, последний аргумент зарезервирован и поэтому должен быть равен нулю.
Подобные функции есть и в CommandBuffers, см. CommandBuffer.DrawProceduralIndirect.
Смотрите так же: Graphics.DrawProcedural, ComputeBuffer.CopyCount, SystemInfo.supportsComputeShaders.