Lwjgl Shaders赢得';t链接,但没有显示错误

Lwjgl Shaders赢得';t链接,但没有显示错误,lwjgl,Lwjgl,好吧,标题几乎说明了一切,我的着色器不会链接 输出: [INFO|2016-01-06 18:21:27|Renderer Thread (Test window)] Shader compile status is 1, log: [INFO|2016-01-06 18:21:27|Renderer Thread (Test window)] Shader compile status is 1, log: [INFO|2016-01-06 18:21:27|Renderer Thr

好吧,标题几乎说明了一切,我的着色器不会链接

输出:

 [INFO|2016-01-06 18:21:27|Renderer Thread (Test window)] Shader compile status is 1, log: 
 [INFO|2016-01-06 18:21:27|Renderer Thread (Test window)] Shader compile status is 1, log: 
 [INFO|2016-01-06 18:21:27|Renderer Thread (Test window)] Link status: 0
 [INFO|2016-01-06 18:21:27|Renderer Thread (Test window)] Link errors:
链接状态0显然意味着它失败。但是为什么呢?显然glUseProgram失败,错误为1282,因为程序链接失败

链接代码:

    int vshId = this.loadShader(this.getClass().getResource("/shaders/blocks.vsh"), GL20.GL_VERTEX_SHADER);
    int fshId = this.loadShader(this.getClass().getResource("/shaders/blocks.fsh"), GL20.GL_FRAGMENT_SHADER);
    int programId = GL20.glCreateProgram();
    GL20.glAttachShader(programId, vshId);
    GL20.glAttachShader(programId, fshId);
    GL20.glLinkProgram(programId);
    GL20.glValidateProgram(programId);
    IntBuffer buf = BufferUtils.createIntBuffer(1);
    GL20.glGetProgramiv(programId, GL20.GL_LINK_STATUS, buf);
    int linkStatus = buf.get();
    Logger.getInstance().logf("Link status: %s", linkStatus);
    Logger.getInstance().logf("Link errors: %s", GL20.glGetProgramInfoLog(programId));
loadShader函数:

public int loadShader(URL resource, int type) {
    InputStream stream;
    try {
        stream = resource.openStream();
    } catch (IOException e) {
        e.printStackTrace();
        return -1;
    }

    String s = "";
    byte[] b = new byte[256];
    try {
        while (stream.read(b) > -1) {
            s += new String(b);
        }
    } catch (IOException e) {
        e.printStackTrace();
        return -2;
    }
    String shaderSrc = s;
    int shaderID = GL20.glCreateShader(type);
    GL20.glShaderSource(shaderID, shaderSrc);
    GL20.glCompileShader(shaderID);
    int status = GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS);
    Logger.getInstance().logf("Shader compile status is %s, log: %s", status, GL20.glGetShaderInfoLog(shaderID));
    return shaderID;
}
这两个代码段是SpriteManager()类的一部分

片段着色器:

#version 130

in vec2 tex_coord;
uniform sampler2D tex;

void main(void) {
  gl_FragColor = texture(tex, tex_coord);
}
顶点着色器:

#version 130

in vec2 position;

void main(void) {
  gl_Position = vec4(position, 0.0, 1.0);
}
#version 130

in vec2 position;
out vec2 tex_coord;

void main(void) {
  gl_Position = vec4(position, 0.0, 1.0);
  tex_coord = position;
}
为什么会这样?我没有看到任何错误。当我将垃圾行放入着色器源时,它会显示
0:3(1):错误:语法错误,意外的新\u标识符
。我知道为什么不能成功编译,但是我不知道为什么正确的着色器不能工作。。。请帮忙


整个项目都可以在

上查看,我现在觉得自己很笨。首先,在glValidateProgam出现错误之前调用glGetProgrami,即顶点着色器中缺少
out vec2 tex_coord
。德普。现在它开始工作了。 我将把固定版本放在这里:

顶点着色器:

#version 130

in vec2 position;

void main(void) {
  gl_Position = vec4(position, 0.0, 1.0);
}
#version 130

in vec2 position;
out vec2 tex_coord;

void main(void) {
  gl_Position = vec4(position, 0.0, 1.0);
  tex_coord = position;
}
链接着色器代码:

int vshId = this.loadShader(this.getClass().getResource("/shaders/blocks.vsh"), GL20.GL_VERTEX_SHADER);
int fshId = this.loadShader(this.getClass().getResource("/shaders/blocks.fsh"), GL20.GL_FRAGMENT_SHADER);
int programId = GL20.glCreateProgram();
GL20.glAttachShader(programId, vshId);
GL20.glAttachShader(programId, fshId);
GL20.glLinkProgram(programId);
int linkStatus = GL20.glGetProgrami(programId, GL20.GL_LINK_STATUS);
GL20.glValidateProgram(programId);
Logger.getInstance().logf("Link status: %s", linkStatus);
Logger.getInstance().logf("Link errors: %s", GL20.glGetProgramInfoLog(programId));

我现在觉得自己很笨。首先,在glValidateProgam出现错误之前调用glGetProgrami,即顶点着色器中缺少
out vec2 tex_coord
。德普。现在它开始工作了。 我将把固定版本放在这里:

顶点着色器:

#version 130

in vec2 position;

void main(void) {
  gl_Position = vec4(position, 0.0, 1.0);
}
#version 130

in vec2 position;
out vec2 tex_coord;

void main(void) {
  gl_Position = vec4(position, 0.0, 1.0);
  tex_coord = position;
}
链接着色器代码:

int vshId = this.loadShader(this.getClass().getResource("/shaders/blocks.vsh"), GL20.GL_VERTEX_SHADER);
int fshId = this.loadShader(this.getClass().getResource("/shaders/blocks.fsh"), GL20.GL_FRAGMENT_SHADER);
int programId = GL20.glCreateProgram();
GL20.glAttachShader(programId, vshId);
GL20.glAttachShader(programId, fshId);
GL20.glLinkProgram(programId);
int linkStatus = GL20.glGetProgrami(programId, GL20.GL_LINK_STATUS);
GL20.glValidateProgram(programId);
Logger.getInstance().logf("Link status: %s", linkStatus);
Logger.getInstance().logf("Link errors: %s", GL20.glGetProgramInfoLog(programId));