对几何着色器的最大输出的困惑
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_VERTICES
和 GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
的值必须通过 glGetInteger
而不是仅仅评估这些宏来完成。
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 themax_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_VERTICES
和 GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
的值必须通过 glGetInteger
而不是仅仅评估这些宏来完成。