2016-07-20 20 views
1

私はLWJGLを使用して3Dゲームを作成しようとしていますが、私自身は解決できないエラーに遭遇しました。私はプログラムを実行するたびに、私はエラーを取得する:GLSL頂点シェーダがコンパイルされない

java.lang.Exception: Error compiling shader code: 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); 
} 

使用上のこれらの2つの方法の頂点とフラグメントシェーダを作成するには、次の方法:

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

シェーダがエラーなしで作成されますが、私はそれが適切にコンパイルされていますかどうかを確認し、例外がスローされ、プログラムが停止します。ここに私の頂点とフラグメントシェーダです:

#version 150 

layout (location=0) in vec3 pos; 

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

fragment.fs

#version 150 

out vec4 fragColor; 

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

vertex.vs

私は私が私のシェーダで正しいGLSLバージョンを使用していますことを確認したが、私が得ましたチュートリアルの実際のシェーダコードです。したがって、構文が厳密に正しいかどうかわかりません。

答えて

2

layout (location=0) in vec3 pos;この行では、#version 150以下で構文エラーが発生します。頂点シェーダで#version 330以上を試してみてください。

また、頂点シェーダpospositionは異なるシンボルであり、positionの定義を提供できませんでした。

関連する問題