我知道我可以用glGet
和GL_MAX_VARYING_VECTORS
来获得四分量向量的数目,我可以用它作为变量。其他大小向量、矩阵和所述类型的数组怎么办?这些限制究竟有多大?
我偶然发现这个问题有一个很好的答案。然而,我对桌面OpenGL感兴趣,而不是OpenGL ES。这个案子有什么不同吗?我简短地搜索了这个规格,但没有发现任何有用的东西。
除了对变体是如何包装的普遍兴趣,我有一个着色程序,其唯一的变化是一个数组的vec2
s。我想通过编程获得最大的大小,这个数组可以是。我怎样才能从GL_MAX_VARYING_VECTORS
中得到它呢?
在我的计算机上,GL_MAX_VARYING_VECTORS
是16
,我可以在数组无法编译之前将数组大小调整到62
。
此外,我还应该使用varying
吗?我知道更新版本的GLSL使用in
/out
语法;我应该切换吗?您知道有什么资源可以让我开始吗?
发布于 2016-08-17 05:36:15
对于桌面OpenGL的所有版本(在重要的地方),着色器级之间接口的限制是由“组件”的数量而不是“向量”的数量来定义的。例如,GL_MAX_VERTEX_OUTPUT_COMPONENTS
定义了VS可以生成的输出组件的最大数量。
“组件”是浮点数、整数值或布尔值。一个vec3
需要3个组件。一个vec2[4]
需要8个组件。
所以:
我想以编程的方式获得这个数组的最大大小。我如何从GL_MAX_VARYING_VECTORS中得出这个结论呢?
没有,而是从实际的组件计数中得到的。在现代桌面GL 3.2+中,这是由每个阶段的值定义的.对于顶点着色器,这是GL_MAX_VERTEX_OUTPUT_COMPONENTS
。对于几何着色器,这是GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
。
如果组件的数量是64 (GL4.x实现将返回的最小值),那么您可以有32个vec2
。
至少按照标准。在实践中,实现有随这些事情的工作方式而变化的趋势。特别是在早期,几乎可以保证实现会将数组的每个单独元素都扩展为vec4
。
他们现在这么做了吗?如果手动将vec2
数组打包到vec4
的数组中,那么跨平台工作的可能性要大得多。因此,如果您不愿意/不能在许多实现上进行测试,这就是我要做的。
是的,如果您使用的是现代OpenGL实现,那么您应该使用in
/out
语法。但这不会改变这方面的任何变化;这只是语法而已。
https://stackoverflow.com/questions/38990073
复制相似问题