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