我在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;
}
}
答案 0 :(得分:-1)
在Mac上根本无法使用#version 400
,因为GPU驱动程序与MacOS版本绑定,并且无法更新它们。另外,苹果不建议使用OpenGL,因此对它的支持在Mac上很糟糕。
由于GPU驱动程序与MacOS版本相关联,因此OpenGL和GLSL版本也与之相关联,因此无法升级到#version 120
或OpenGL 2.1以上
您需要切换计算机/操作系统或坚持使用GLSL #version 120