我知道这听起来像是一个奇怪的“问题”,但坚持下去。
我有一张支持 OpenGL 3.3 的显卡。
但是,我正在编写针对 OpenGL 2.0 的代码,因此针对 GLSL 1.1 版。
我有以下 GLSL 代码:
#version 110
in vec4 position; // x,y,z,w (ignores w)
uniform mat4 mvpMatrix;
void main() {
gl_Position = mvpMatrix * position;
}
如您所见,我已将 GLSL 版本指定为#version 110。
您可能还会注意到我对 vec4 位置使用了“in”关键字。
此关键字在指定的 GLSL 版本中不可用,但它在我的显卡(同样支持 OpenGL 3.3)上编译时没有错误。
正确的关键词应该是'attribute'。
在只有 OpenGL 2.1 的计算机上测试时,着色器代码出现编译错误。
为什么我的编译器没有编译错误?它不应该编译符合版本 110 的着色器并报告相应的错误吗?
无论如何要检查这个?也许这是一个警告或什么?我不知道。求助!
此外,我正在使用 LWJGL 在 Java 中进行编程。如果这有帮助,但我认为这与问题无关。
编辑:
我添加了代码以在着色器编译后始终检查信息日志,但在使用“in”关键字时它仍然不报告任何内容。
最佳答案
不同的编译器在接受什么 GLSL 方面有很大的。即使您的着色器编译成功,也值得查看编译日志。日志可以包含警告和错误。
在LWJGL it looks like查看日志的方式是:
private static String getLogInfo(int obj) {
return ARBShaderObjects.glGetInfoLogARB(obj,
ARBShaderObjects.glGetObjectParameteriARB(obj,
ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB));
}
(代码在Box.java的第129行)
关于java - OpenGL GLSL 代码在不该编译的时候编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26436804/