OpenGL-采样器阵列限制



我的片段着色器中有两个采样器数组:

uniform sampler2D shadowMaps[12];
uniform samplerCubeShadow shadowMapsCube[12];

这在我的PC上使用OpenGL 4.2正常工作,但是在我的笔记本电脑(OpenGL 3.1)上,我会遇到错误"数组尺寸太大"。

如果将其设置为8,则可以正常工作。但是,其他类型的数组可能会更大,但是我可以添加更多的采样器阵列,最大尺寸为8,而没有问题。那么,如何确定此限制?

将数组大小降低到8后,汇编有效,但是链接会默默失败(日志为空,glgetError()返回0)。

如果我单独声明每个采样器(统一Sampler2d Shadowmap1;统一Sampler2d Shadowmap2;等),这些错误均未发生。

您必须考虑两件事。

首先,请记住,根据您的OpenGL版本,不允许使用循环内部变量访问采样器数组。请参阅:https://stackoverflow.com/a/12031821/988027

其次,引用 OpenGL Wiki页面,您可以同时使用的最大纹理单元:

OpenGL上下文具有最大数量的纹理图像单元,可从常数gl_max_combined_texture_image_units中查询。

可能,此答案将为您提供帮助。特别是,请查看着色器资源限制

最新更新