“ EROR:0:1:'':不支持'400版本'”在Mac上发生OpenGL错误

时间:2019-08-28 01:18:40

标签: java macos opengl shader lwjgl

我在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;
    }

}

1 个答案:

答案 0 :(得分:-1)

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

由于GPU驱动程序与MacOS版本相关联,因此OpenGL和GLSL版本也与之相关联,因此无法升级到#version 120或OpenGL 2.1以上

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