使用仅存储在GPU内存中的'count'参数调用glDrawArray

问题描述 投票:2回答:1

我在绘制调用#1期间在片段着色器中生成缓冲区(作为SSBO访问)。然后我想使用该缓冲区(作为VBO访问)作为绘制调用#2的输入。

问题是,使用函数void glDrawArrays(GLenum mode, GLint first, GLsizei count),我应该知道CPU上的count值。但在CPU上我不知道这个价值。该值仅作为原子计数器存储器存储在GPU存储器中。

有没有办法使用count参数作为存储在GPU内存中的值进行绘制调用?

我知道我可以从GPU中检索值,然后在CPU中使用它,但由于同步,这会降低程序的速度。

opengl opengl-4
1个回答
6
投票

对于这种情况,可以使用glDrawArraysIndirectGL_INDIRECT_DRAW_BUFFER的组合。

您可以使用现有的SSBO作为间接绘制缓冲区,但必须确保遵循DrawArraysIndirectCommand结构并确保计数存储在SSBO的前四个字节中。所有其他数据可以设置一次,不必通过SSBO访问。

typedef  struct {
   GLuint  count;
   GLuint  instanceCount;
   GLuint  first;
   GLuint  baseInstance;
} DrawArraysIndirectCommand;
© www.soinside.com 2019 - 2024. All rights reserved.