java - LWJGL 无法编译着色器

标签 java opengl glsl shader lwjgl

我正在尝试按照 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);
}

感谢您的帮助。

最佳答案

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

关于java - LWJGL 无法编译着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26564143/

相关文章:

java - Java的排序算法是什么

c++ - OpenGL - 水波(有噪音)

glsl - 鱼眼天空盒着色器

java - 文件textFile.txt未找到异常

java - 配置 Jersey 1.x 项目以生成 swagger 文档

java - 无法使用 java sdk 在 aws s3 上使用预签名 url 上传

c++ - OpenGL glVertexAttribPointer 正常

opengl - 无限魔方世界引擎(如Minecraft)优化建议?

c - 为什么我的顶点法线会随着相机旋转而旋转?

javascript - WebGL 片段着色器不透明度