【问题标题】:LWJGL Could Not Compile ShadersLWJGL 无法编译着色器
【发布时间】:2014-10-25 15:40:19
【问题描述】:

我正在尝试按照 LWJGL 网站上的“带投影的四边形”教程来加载带投影的 VBO。

这是我加载着色器的函数。

private int loadShader(String filename, int type) {
    StringBuilder shaderSource = new StringBuilder();
    int shaderID = 0;

    try {
        try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
            String line;
            while ((line = reader.readLine()) != null) {
                shaderSource.append(line).append("\n");
            }
        }
    } catch (IOException e) {
        System.err.println("Could not read file.");
        e.printStackTrace();
        System.exit(-1);
    }

    shaderID = GL20.glCreateShader(type);
    GL20.glShaderSource(shaderID, shaderSource);
    GL20.glCompileShader(shaderID);

    if (GL20.glGetShader(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
        System.err.println("Could not compile shader.");
        System.exit(-1);
    }

    this.exitOnGLError("loadShader");

    return shaderID;
}

当我运行程序时,出现这个错误。

if (GL20.glGetShader(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
    System.err.println("Could not compile shader.");
    System.exit(-1);
}

这是我的着色器代码:

顶点:

#version 150 core

uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;

in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;

out vec4 pass_Color;
out vec2 pass_TextureCoord;

void main(void) {
    gl_Position = in_Position;
    // Override gl_Position with our new calculated position
    gl_Position = projectionMatrix * viewMatrix * modelMatrix * in_Position;

    pass_Color = in_Color;
    pass_TextureCoord = in_TextureCoord;
}

片段:

#version 150 core

uniform sampler2D texture_diffuse;

in vec4 pass_Color;
in vec2 pass_TextureCoord;

out vec4 out_Color;

void main(void) {
    out_Color = pass_Color;
    // Override out_Color with our texture pixel
    out_Color = texture2D(texture_diffuse, pass_TextureCoord);
}

感谢您的帮助。

【问题讨论】:

  • 好吧,如果着色器没有编译,你应该检查着色器编译日志。此外,您应该发布着色器代码。
  • 如何获取着色器编译日志?

标签: java opengl glsl shader lwjgl


【解决方案1】:

您的片段着色器无效,函数texture2D 在 GLSL 1.50 核心中不可用。只需使用函数texture()。编译器从调用它的采样器制服的类型派生要采样的纹理类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多