对几何着色器的最大输出的困惑

Confusion about maximum output from Geometry Shaders

OpenGL-Wiki 声明 on the output limitations of geometry shaders

The first limit, defined by GL_MAX_GEOMETRY_OUTPUT_VERTICES​, is the maximum number that can be provided to the max_vertices​ output layout qualifier.

[...]

The other limit, defined by GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS​ is [...] the total number of output values (a component, in GLSL terms, is a component of a vector. So a float​ is one component; a vec3​ is 3 components).

这就是我的几何着色器的声明部分的样子:

layout( triangles ) in;
layout( triangle_strip, max_vertices = 300 ) out;
out vec4 var1;

我的顶点格式仅由 4 个浮点数组成。 所以我相信有来自不同 var1 的 4 个组件加上来自位置的 4 个组件,即总共 8 个。

我已经查询了上述常量的以下值:

GL_MAX_GEOMETRY_OUTPUT_VERTICES = 36320
GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 36321

max_vertices设置为300,总共写入8*300 = 2400个组件。不用说这个值远低于36321,max_vertices的300也远低于36320,所以应该没问题吧?

但是,当我构建着色器时,链接 失败:

error C6033: Hardware limitation reached, can only emit 128 vertices of this size

谁能给我解释一下这是怎么回事,为什么这不像我预期的那样有效?

我犯了一个非常愚蠢的错误。作为记录,如果其他人遇到同样的问题:查询 GL_MAX_GEOMETRY_OUTPUT_VERTICESGL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 的值必须通过 glGetInteger 而不是仅仅评估这些宏来完成。