【发布时间】:2015-03-21 16:06:51
【问题描述】:
OpenGL-Wiki 声明 on the output limitations of geometry shaders:
由
GL_MAX_GEOMETRY_OUTPUT_VERTICES定义的第一个限制是可以提供给max_vertices输出布局限定符的最大数量。[...]
GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 定义的另一个限制是 [...] 输出值的总数(一个分量,在 GLSL 术语中,是向量的一个分量。所以浮点数是一个分量;一个 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 个此大小的顶点
有人可以向我解释发生了什么以及为什么这不像我预期的那样工作吗?
【问题讨论】:
标签: opengl glsl geometry-shader