指定 GLSL 版本会在使用 LWJGL 时出现语法错误。我没有尝试在 LWJGL 之外重现这个问题。这发生在多台运行 Lion 的 Mac 上。
我已经让顶点和片段着色器在不使用 #version
的情况下工作。但是我即将使用texture
函数,这似乎需要一个#version
指令。
这是最简单的失败示例:
#version 120
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
编译此片段着色器并调用 glGetShaderInfoLog
会出现此错误:
ERROR: 0:1: '' : syntax error #version
将 120
替换为任何其他内容(例如 110
)也会出错。但奇怪的是,如果我使用 130 或更高版本,它会给出相同的错误以及关于版本不受支持的投诉。 (我知道我的系统没有 GLSL 1.3,但是当编译器表现得好像它不理解版本标签时显示这个错误仍然很奇怪。)
我在 Mac 上使用 ATI Radeon HD 4670。GL_VERSION
是 2.1 ATI-7.12.9
和 GL_SHADING_LANGUAGE_VERSION
是 1.20
。
鉴于此,我看不出 GLSL 1.20 不可用的任何原因。对我来说真的很奇怪,它说 #version
是一个语法错误,而不是说一些不受支持的 GLSL 版本。
最佳答案
解决了!它与 OpenGL 无关。我的文件阅读器代码删除了所有换行符。这在着色器的主体中很好,它有分号。但是预处理器指令没有分号来防止出现此错误。
因此对于遇到此问题的任何人,请确保您实际传递给 glShaderSource 的代码仍然有换行符。
关于java - GLSL #version 给出语法错误(Mac 上的 LWJGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8540489/