CommandBuffer.DrawProceduralIndirect

Switch to Manual
public void DrawProceduralIndirect (Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, ComputeBuffer bufferWithArgs, int argsOffset= 0, MaterialPropertyBlock properties= null);

Parameters

matrix 要使用的变换矩阵。
material 要使用的材质。
shaderPass 要使用着色器的哪个通道(或选择 -1,表示所有通道)。
topology 程序化几何体的拓扑。
properties 在渲染之前应用的其他材质属性。请参阅 MaterialPropertyBlock
bufferWithArgs 具有绘制参数的缓冲区。
argsOffset 缓冲区中的字节偏移,绘制参数所在位置。

Description

添加“绘制程序化几何体”命令。

当命令缓冲区执行时,将在 GPU 中执行绘制调用,没有任何顶点或索引缓冲区。 要绘制的几何体数量可从 ComputeBuffer 中读取。典型的用例是 从 ComputeShader 中生成任意数量的数据,然后渲染该数据,无需回读 CPU。

这只在 Shader Model 4.5 级别的硬件中有用,其中着色器可以从 ComputeBuffer 缓冲区读取任意数据。

带参数的缓冲区 bufferWithArgs 必须在给定的 argsOffset 偏移处具有四个整数: 每个实例的顶点数、实例数、起始顶点位置、起始实例位置。 这会映射到 Direct3D11 DrawInstancedIndirect 和其他图形 API 中的等效函数。在 OpenGL 4.2 之前的版本和支持间接绘制的所有 OpenGL ES 版本中,最后一个参数保留,因此必须为零。

在顶点着色器中,您通常使用 SV_VertexID 和 SV_InstanceID 输入变量以从一些缓冲区提取数据。

另请参阅:DrawProceduralMaterialPropertyBlockGraphics.DrawProceduralIndirectComputeBuffer.CopyCountSystemInfo.supportsComputeShaders