关于几何着色器的最大输出的混淆

时间:2015-03-21 16:06:51

标签: opengl glsl geometry-shader

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

  

GL_MAX_GEOMETRY_OUTPUT_VERTICES定义的第一个限制是可以提供给max_vertices输出布局限定符的最大数量。

     

[...]

     

GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS定义的另一个限制是[...]输出值的总数(GLSL术语中的一个组件是向量的一个组件。所以float是一个组件; vec3是3个组成部分。)

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

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.所以应该一切正常,对吗?

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

  

错误C6033:达到硬件限制,只能发出128个此大小的顶点

有人可以向我解释发生了什么以及为什么这不能像我预期的那样起作用?

1 个答案:

答案 0 :(得分:2)

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