2014-10-25 2 views
0

Я пытаюсь загрузить VBO с проекцией, следуя руководству «Квадрат с проекцией» на веб-сайте LWJGL.LWJGL не удалось скомпилировать шейдеры

Вот моя функция загрузки шейдеров.

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); 
} 

Вот мой код шейдера:

Vertex:

#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); 
} 

Спасибо за вашу помощь.

+0

Ну, если шейдер не компилируется, вы должны проверить журнал компиляции шейдеров. Кроме того, вы должны опубликовать шейдерный код. – derhass

+0

Как я могу получить журнал компиляции шейдеров? – irishpatrick

+0

Для этого используйте ['glGetShaderInfoLog()'] (https://www.opengl.org/sdk/docs/man/html/glGetShaderInfoLog.xhtml). – derhass

ответ

1

Ваш фейдер-шейдер недействителен, функция texture2D недоступна в ядре GLSL 1.50. Просто используйте функцию texture(). Компилятор выводит тип текстуры в образец из типа сэмплера, с которым он вызывается.

Смежные вопросы