私はJavaを使って単純なOpenGLアプリケーションを書くことにしました。これは私の他の取り組みとどのように比較されているのか分かりませんし、シェイダーがコンパイルを拒否する問題に遭遇しています。OpenGLシェーダのコンパイルの問題 - 予期しないEOF
//Minimal vertex shader
#version 330
in vec3 in_Position;
in vec3 in_Color;
out vec3 var_Color;
void main(void)
{
gl_Position = vec4(in_Position, 1.0);
var_Color = in_Color;
}
フラグメントシェーダは、同じように簡単ですので、私は、誰かがそれを要求しない限り、それを掲示気にしないだろう。彼らは本当にここで私が何を意味するかを証明するために、私の頂点シェーダだ、はるかに簡単に得ることができませんでした。私は、ログをチェックすると、私は(両方のシェーダのために)、次のエラーを取り戻す:
(0) : error C0000: syntax error, unexpected $end at token "<EOF>"
私はこれが関連しているかわからない...しかし、私は、Javaを使用してLinux(Ubuntuの11.04)上で開発しています。私が使用している唯一のライブラリはJOGL(OpenGLバインディング用)と標準のJavaライブラリです(それが重要であれば...)私のグラフィックスカードはNvidia GeForce 9600M GSで、拡張機能をチェックしました。 OpenGL 3.3。
私がスタックオーバーフローを助けてください、あなたは私の唯一の希望です。
EDIT:
要求されたとして、ここではロードとシェーダのソースをコンパイルするための責任がある関数です。また、GLSLに関しては、私はスーパーn00bだから、OpenGLのために適切に書式が設定されているかどうかを確認するのは本当にわかりません。このテーマに関する最近の(すなわち、OpenGL 3.xを扱う)チュートリアルへのリンクが評価されます。余談として
private int CreateCompiledShader(File source, int shader, GL3 gl){
int shaderloc = gl.glCreateShader(shader);
BufferedReader input = null;
ArrayList<String> lines = new ArrayList<String>();
ArrayList<Integer> lengths = new ArrayList<Integer>();
try{
input = new BufferedReader(new FileReader(source));
String buffer;
while(input.ready()){
buffer = input.readLine();
lines.add(buffer);
lengths.add(buffer.length());
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(input != null){
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
int[] iLengths = new int[lengths.size()];
for(int i = 0; i < lengths.size(); i++){
iLengths[i] = lengths.get(i).intValue();
}
gl.glShaderSource(shaderloc, lines.size(), lines.toArray(new String[0]), iLengths, 0);
gl.glCompileShader(shaderloc);
int error = gl.glGetError();
if(error != GL3.GL_NO_ERROR){
Logger.log(new GLU().gluErrorString(error), Logger.ERROR, "Shader compilation");
}
return shaderloc;
}
、私はglGetErrorを(チェック終わりに向かってif文)は、エラーが呼び出し元の関数に実行戻るまで起こると私は確認されませんので、引っ掛かり実際にどこではありませんシェーダーログ。関連性があるかもしれませんが、再び私は散歩することもできます。
最後の括弧の後に空行を追加してみてください。 – Kromster
これは私が試した最初のものの1つでしたが、コードを投稿したときには表示されませんでした。 – rjacks