【问题标题】:GLSL vertex shader not compilingGLSL 顶点着色器未编译
【发布时间】:2016-07-20 18:11:00
【问题描述】:

我正在使用 LWJGL 尝试制作 3D 游戏,但我遇到了一个我无法自行解决的错误。每当我运行程序时,都会出现错误:

java.lang.Exception:编译着色器代码时出错:2

我自己设置了这个错误,以在着色器编译失败时提醒我,它似乎每次都在这样做,我不明白为什么。

public static String loadResource(String file) throws Exception{
    BufferedReader reader = new BufferedReader(new FileReader(new File(file)));
    String out = "";

    String s = reader.readLine();
    while (s != null){
        out += s + "\n";
        s = reader.readLine();
    }
    reader.close();
    return out;
}

这是我用来加载着色器代码文本并将其放入字符串的方法。我已经要求它事后打印出来,据我所知没有任何问题。

public void createVertexShader(String shaderCode) throws Exception{
    vertexShaderId = createShader(shaderCode, GL_VERTEX_SHADER);
}

public void createFragmentShader(String shaderCode) throws Exception {
    vertexShaderId = createShader(shaderCode, GL_FRAGMENT_SHADER);
}

以上这两种方法使用以下方法来创建顶点和片段着色器:

public int createShader(String shaderCode, int shaderType) throws Exception {
    int shaderId = glCreateShader(shaderType);
    if(shaderId == 0){
        throw new Exception("Error creating shader code: " + shaderId);
    }

    glShaderSource(shaderId, shaderCode);
    glCompileShader(shaderId);

    if(glGetShaderi(shaderId, GL_COMPILE_STATUS) == 0){
        throw new Exception("Error compiling shader code: " + shaderId);
    }

    glAttachShader(programId, shaderId);

    return shaderId;
}

着色器创建时没有错误,但是当我检查它是否已正确编译时,它会抛出异常并停止我的程序。这是我的顶点和片段着色器:

顶点.vs

#version 150

layout (location=0) in vec3 pos;

void main()
{
    gl_Position = vec4(position, 1.0);  
}

片段.fs

#version 150

out vec4 fragColor;

void main()
{
    fragColor = vec4(0.0, 0.5, 0.5, 1.0);
}

我已验证我在着色器中使用了正确的 GLSL 版本,但我从教程中获得了实际的着色器代码,所以我不知道语法是否严格正确。

【问题讨论】:

    标签: java opengl glsl lwjgl


    【解决方案1】:

    layout (location=0) in vec3 pos; 这一行会给你#version 150 或更低版本的语法错误。在顶点着色器中尝试#version 330 或更高版本。

    另外,在顶点着色器中posposition 是不同的符号,您未能提供position 的定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2022-01-04
      相关资源
      最近更新 更多