matrix | Transformation matrix to use. |
material | Material to use. |
shaderPass | Which pass of the shader to use (or -1 for all passes). |
topology | Topology of the procedural geometry. |
properties | Additional material properties to apply just before rendering. See MaterialPropertyBlock. |
bufferWithArgs | Buffer with draw arguments. |
argsOffset | Byte offset where in the buffer the draw arguments are. |
Add a "draw procedural geometry" command.
When the command buffer executes, this will do a draw call on the GPU, without any vertex or index buffers.
The amount of geometry to draw is read from a ComputeBuffer. Typical use case is generating arbitrary amount
of data from a ComputeShader and then rendering that, without requiring a readback to the CPU.
This is only useful on DirectX 11 level hardware where shaders can read arbitrary data from ComputeBuffer buffers.
Buffer with arguments, bufferWithArgs
, has to have four integer numbers at given argsOffset
offset:
vertex count per instance, instance count, start vertex location, start instance location.
This very much maps to Direct3D11 DrawInstancedIndirect / OpenGL ES 3.1 glDrawArraysIndirect function (on OpenGL ES 3.1 the last argument is reserved and therefore not used).
In the vertex shader, you'd typically use SV_VertexID and SV_InstanceID input variables to fetch data from some buffers.
See Also: DrawProcedural, MaterialPropertyBlock, Graphics.DrawProceduralIndirect, ComputeBuffer.CopyCount, SystemInfo.supportsComputeShaders.