GLSL #version提供语法错误(Mac上的LWJGL)

rlk*_*024 8 java opengl glsl lwjgl

使用LWJGL时,指定GLSL版本会出现语法错误.我没有尝试在LWJGL之外重现这个问题.这是在运行Lion的多台Mac上发生的.

我已经使顶点和片段着色器无需使用即可工作#version.但我即将使用该texture函数,这似乎需要一个#version指令.

这是最简单的失败示例:

#version 120

void main() {
  gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

编译此片段着色器并调用glGetShaderInfoLog会出现此错误:

ERROR: 0:1: '' : syntax error #version
Run Code Online (Sandbox Code Playgroud)

替换120其他任何东西,例如110,也会出错.但奇怪的是,如果我使用130或更高,它会给出相同的错误以及对不支持的版本的抱怨.(我知道我的系统没有GLSL 1.3,但是当编译器表现得像它不理解版本标签时,显示此错误仍然很奇怪.)

我在Mac上使用ATI的Radeon HD 4670. GL_VERSION2.1 ATI-7.12.9GL_SHADING_LANGUAGE_VERSION1.20.

鉴于此,我认为没有任何理由说明为什么GLSL 1.20不可用.对我来说,这#version是一个非常奇怪的说它是一个语法错误,而不是说一个不受支持的GLSL版本.

rlk*_*024 17

解决了!它与OpenGL无关.我的文件阅读器代码丢弃了所有换行符.这在着色器的主体中很好,它有分号.但是预处理程序指令没有分号来保护它免受此错误的影响.

因此对于有此问题的任何人,请确保您实际传递给glShaderSource的代码仍然具有其换行符.