Sil*_*lan 4 opengl glsl fragment-shader
我的片段着色器中有两个采样器数组:
uniform sampler2D shadowMaps[12];
uniform samplerCubeShadow shadowMapsCube[12];
Run Code Online (Sandbox Code Playgroud)
这在使用opengl 4.2的计算机上可以正常工作,但是在我的笔记本电脑(opengl 3.1)上,我收到错误消息“数组大小太大”。
如果将其设置为8,则可以正常工作。但是其他类型的数组可能更大,我可以添加更多最大大小为8的采样器数组,而不会出现问题。那么,如何确定此限制?
将数组大小减小到8后,编译工作成功,但是链接无提示失败(日志为空,并且glGetError()返回0)。
如果我分别声明每个采样器(统一sampler2D shadowMap1;统一sampler2D shadowMap2等),则不会发生这些错误。
您必须考虑两件事。
首先,请记住,根据您的OpenGL版本,不允许使用循环内的变量访问samplers数组。参见:https : //stackoverflow.com/a/12031821/988027
其次,引用OpenGL Wiki页面上的内容,可以同时使用最大数量的纹理单元:
OpenGL上下文具有最大数量的纹理图像单元,可从常量GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS?查询。