LWJGL顶点和片段着色器不会编译(错误CO206)

时间:2016-02-02 23:38:09

标签: java opengl glsl shader lwjgl

我一直对学习OpenGl感兴趣。但是每次我开始使用它时,编译着色器时都会出现同样的错误。这是吐出的错误代码。

0(1):错误C0206:版本行中的无效标记“invalid atom 483265304”

我已经尝试查找错误并且没有找到任何东西......当然没有任何内容可以解释如何解决问题。

我不知道C或C ++所以我使用的是LWJGL。

以下是我用来编译着色器的代码:

private static int loadShader(String file, int type){
    //System.out.println("Loading Shader.");
    StringBuilder shaderSource = new StringBuilder();
    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line;
        while((line = reader.readLine())!=null){
            //System.out.println(line);
            shaderSource.append(line).append("/n");
        }
        reader.close();
        //System.out.println("Closed Reader.");

    } catch (IOException e) {
        System.err.println("Could not read file!");
        e.printStackTrace();
        System.exit(-1);
    }
    //System.out.println("Creating Shader ID...");
    int shaderID = GL20.glCreateShader(type);
    //System.out.println("Created Shader ID, Compiling Shader.");
    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("Could not compile shader. Location: " + file);
        System.exit(-1);
    }
    return shaderID;
}

这是我的顶点着色器:

#version 400 core

in vec3 position;
out vec3 colour;

void main(void){

    gl_Position = vec4(position, 1.0);
    colour = vec3(position.x+0.5, 1.0, position.y+0.5);
}

这是我的片段着色器:

#version 400 core

in vec3 colour;
out vec4 out_Colour;

void main(void){
    out_Colour = vec4(colour, 1.0);
}

如果有人读到这个,请提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

基本错字 - 您正在追加" / n"而不是" \ n"当你读到每一行时。

@Nicol Bolas提出了一个很好的观点 - 有一个函数Files.readAllBytes(Path path),如果你使用它而不是重新实现这个功能,你就不会那么容易出现像这样的小错误。