"EROR:0:1::不支持版本'400'"在 Mac 上出现错误 OpenGL



我在MacOS Mojave上使用LWJGL 3,但我无法编译具有 #version 400内核的着色器,我不断收到错误。错误:0:1:":":不支持版本"400"。我必须添加哪些代码才能使此版本的 GLSL 正常工作。

我试图补充,

GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MAJOR, 3);
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MAJOR, 2);
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_FORWARD_COMPAT, GL30.GL_TRUE);
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_PROFILE, GLFW.GLFW_OPENGL_CORE_PROFILE);

但它似乎并没有解决问题。

这是我当前的着色器类,

public class Shader {
private int id;
public Shader(String vertDir, String fragDir) {
id = glCreateProgram();
int vertex = loadShader("assets/shaders/" + vertDir, GL_VERTEX_SHADER);
int fragment = loadShader("assets/shaders/" + fragDir, GL_FRAGMENT_SHADER);
glAttachShader(id, vertex);
glAttachShader(id, fragment);
glLinkProgram(id);
glValidateProgram(id);
}
public void enable() {
GL20.glUseProgram(id);
}
public void disable() {
GL20.glUseProgram(0);
}
private static int loadShader(String file, int type){
StringBuilder shaderSource = new StringBuilder();
try{
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while((line = reader.readLine())!=null){
shaderSource.append(line).append("//n");
}
reader.close();
}catch(IOException e){
e.printStackTrace();
System.exit(-1);
}
int shaderID = glCreateShader(type);
glShaderSource(shaderID, shaderSource);
glCompileShader(shaderID);
if(glGetShaderi(shaderID, GL_COMPILE_STATUS )== GL11.GL_FALSE){
System.out.println(glGetShaderInfoLog(shaderID, 500));
System.err.println("Could not compile shader!");
System.exit(-1);
}
return shaderID;
}
}

根本无法在 Mac 上使用#version 400,因为 GPU 驱动程序与 MacOS 版本绑定,并且无法更新它们。此外,苹果已经弃用了OpenGL,所以在Mac上对它的支持很糟糕。

由于GPU驱动程序绑定到MacOS版本,OpenGL和GLSL版本也绑定到它,并且没有办法升级到#version 120或OpenGL 2.1之外

。您要么需要切换计算机/操作系统,要么坚持使用 GLSL#version 120

最新更新