当我尝试在OpenGL 4.0中编译此GLSL代码时,我收到错误1282
顶点着色器:
vec2 aPos中的layout(location = 0);
统一mat4模型[100];均匀的mat4投影;
out int …
uniform mat4 model[100];
这超出了规范所保证的范围。这里的限制是 GL_MAX_VERTEX_UNIFORM_COMPONENTS ,规格保证至少为1024. mat4 消耗16个组件,最多64个矩阵。现在你的特殊限制可能会更高,但你的程序中也有其他制服,比如 color[100] 。
GL_MAX_VERTEX_UNIFORM_COMPONENTS
mat4
color[100]
(来自评论):
它不会为片段和顶点着色器返回任何内容 glGetShaderiv(shader, GL_COMPILE_STATUS, &output); 两个着色器都返回true。
glGetShaderiv(shader, GL_COMPILE_STATUS, &output);
但这并不意味着 程序对象 成功链接。这种资源限制通常在链接期间强制执行。
我很确定程序是openGL成功创建的对象,但我并不确定其他程序。你看看我是否将片段着色器主函数更改为 FragColor = color[0]; 它会起作用所以问题就在于此 instanceID 我认为。
FragColor = color[0];
instanceID
这个结论并没有随之而来。如果你写 color[0] ,它会优化你的 vec4r[100] 数组到 vec4[1] ,你可能会低于你的特定限制。
color[0]
vec4r[100]
vec4[1]