Version: 2023.2

CommandBuffer.DrawProceduralIndirect

切换到手册
public void DrawProceduralIndirect (Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, ComputeBuffer bufferWithArgs, int argsOffset, MaterialPropertyBlock properties);
public void DrawProceduralIndirect (Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, ComputeBuffer bufferWithArgs, int argsOffset);
public void DrawProceduralIndirect (Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, ComputeBuffer bufferWithArgs);
public void DrawProceduralIndirect (Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, GraphicsBuffer bufferWithArgs, int argsOffset, MaterialPropertyBlock properties);
public void DrawProceduralIndirect (Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, GraphicsBuffer bufferWithArgs, int argsOffset);
public void DrawProceduralIndirect (Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, GraphicsBuffer bufferWithArgs);

参数

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

描述

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

当命令缓冲区执行时,将在 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


public void DrawProceduralIndirect (GraphicsBuffer indexBuffer, Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, ComputeBuffer bufferWithArgs, int argsOffset, MaterialPropertyBlock properties);
public void DrawProceduralIndirect (GraphicsBuffer indexBuffer, Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, ComputeBuffer bufferWithArgs, int argsOffset);
public void DrawProceduralIndirect (GraphicsBuffer indexBuffer, Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, ComputeBuffer bufferWithArgs);
public void DrawProceduralIndirect (GraphicsBuffer indexBuffer, Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, GraphicsBuffer bufferWithArgs, int argsOffset, MaterialPropertyBlock properties);
public void DrawProceduralIndirect (GraphicsBuffer indexBuffer, Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, GraphicsBuffer bufferWithArgs, int argsOffset);
public void DrawProceduralIndirect (GraphicsBuffer indexBuffer, Matrix4x4 matrix, Material material, int shaderPass, MeshTopology topology, GraphicsBuffer bufferWithArgs);

参数

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

描述

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

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

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

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

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

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