我正在尝试使用OpenGL和LWJGL编译GLSL着色器。我使用的操作系统是macOS Sierra。
在尝试编译着色器时,我遇到了以下错误:
ERROR: 0:1: '' : version '400' is not supported
ERROR: 0:1: '' : syntax error: #version
这段着色器代码在Windows上可以工作,但在macOS上测试时无法正常运行。 以下为该着色器代码:
#version 400 core
in vec3 position;
in vec2 textureCoords;
out vec2 pass_textureCoords;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
void main(void)
{
gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0);
pass_textureCoords = textureCoords;
}
这是我如何加载着色器的过程...
private static int loadShader(String file, int type) throws IOException {
StringBuilder shaderSource = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(
ShaderProgram.class.getClassLoader().getResourceAsStream("shaders/" + file))
)) {
String line;
while ((line = reader.readLine()) != null) {
shaderSource.append(line).append('\n');
}
System.out.println(shaderSource.toString());
int shaderID = GL20.glCreateShader(type);
GL20.glShaderSource(shaderID, shaderSource);
GL20.glCompileShader(shaderID);
if (GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
System.err.println("Error compiling shader " + file);
System.exit(-1);
}
return shaderID;
}
}
打印语句返回了正确的输出结果,但仍然出现错误。
我在stackoverflow上搜索了很久,但每个人都说他们没有换行符而可以编译成功,而我也没有。我对此感到困惑。
glGetString(GL_SHADING_LANGUAGE_VERSION)
的值是什么(或在JWJGL中的等效函数)?也许上下文不支持GLSL 4.0? - MuertoExcobito