我的片段着色器中有两个采样器数组:
uniform sampler2D shadowMaps[12];
uniform samplerCubeShadow shadowMapsCube[12];
这在我的电脑上使用opengl 4.2工作正常,但在我的笔记本电脑上(opengl 3.1)我收到错误'数组太大'。
如果我将它设置为8,它可以正常工作。但是,其他类型的数组可以大得多,我可以添加更多的采样器数组,最大大小为8而没有问题。那么,这个限制是如何确定的?
将数组大小降低到8后,编译工作正常,但链接无声地失败(日志为空,glGetError()返回0)。
如果我单独声明每个采样器(uniform sampler2D shadowMap1; uniform sampler2D shadowMap2;等等),则不会发生这些错误。
答案 0 :(得分:5)
你必须考虑两件事。
首先,请记住,根据您的OpenGL版本,不允许使用循环内的变量访问采样器数组。请参阅:https://stackoverflow.com/a/12031821/988027
其次,引用OpenGL wiki page,您可以同时使用最大数量的纹理单位:
OpenGL上下文具有最大数量的纹理图像单元,可从常量GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS中查询。
可能this answer会帮助你。特别是,请查看着色器resource limitations。