Hey Leute. Das ist ein “Cross Post”, da ich die gleiche Frage bereits bei Stackoverflow gepostet habe. Normalerweise mach ich das nicht, aber da hat wohl keiner Lust sich die Frage durchzulesen, bzw
keiner nen Plan… jedenfalls ich hoffe ihr verzeiht mir, und hier der link, (http://stackoverflow.com/questions/23975232/trouble-debugging-my-opengl-library) und ich sag auch sofort bescheid wenn sich da doch einer meldet!
Nun zum Problem…
Ich schreib ja gerade meine kleine Mini-Lwjgl-Library. Nun hab ich ein Problem dabei, wenn ich mehr als eine Sache in einer View zeichnen lassen will. Ich versteh nur nicht warum.
In einem Kskb, das ich langsam versucht hab in die lib einzubauen, sieht das ganze so aus:
firstTexture.bind();
new Matrix4f().translate(...).store(buffer);
buffer.flip();
GL20.glUniformMatrix4(id, false, buffer);
GL11.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, 4);
secondTexture.bind();
new Matrix4f().translate(...).store(buffer);
buffer.flip();
GL20.glUniformMatrix4(id, false, buffer);
GL11.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, 4);
Das ganze funktioniert auch wie es soll. Nur in meiner Library nicht. Das Ergebniss, wenn ich versuche das ganze mit der Lib umzusetzen, könnt ihr euch hier anschauen: [http://tinypic.com/player.php?v=2ntfuys>&s=8#.U4pe8XJ_uRM] (Qualität unten wegen der Größe, aber es geht um das flackern der Objekte, die ich mit der Maus bewege).
Ich versuch mal zu erklären warum ich nichts verstehe, bzw nicht weiß wo ich den Fehler suchen sollte:
Der wichtigste Teil, quasi der Global Rendering Code im AGLRenderController sieht so aus:
for(AGLView view : activeViews){
view.render(activeTexture);
}
Der Controller geht durch alle views (~scenes) und ruft deren render code auf. Ich hab nur eine Szene, also weiter:
(Ich habe übrigens herausgefunden, das das ganze funktioniert wenn ich 2 Shader Programme benutze. (für jedes Objekt eins), das heißt
wohl der Fehler liegt irgendwo bei der Uniform…??)
Jedenfalls, Der wichtigste Teil von dem View render code:
for(AGLRenderable r : renderObjects){
r.beforeRenderUpdate();
r.render(r.getDrawMode());
}
Die Render objekte werden durchlaufen, dann beforeRenderUpdate und render aufgerufen. Nun beginnt der spannende Teil.
beforeRenderUpdate():
updateUniform();
Da ist noch ein bisschen mehr, aber das ist an dieser Stelle nicht wichtig. updateUniform sieht so aus: (wieder nur das wichtigste)
modelUniform.putData(getModel());
modelUniform.updateData();
Wenn man das ausschreibt sieht es so aus:
protected void putData(Matrix4f matrix){
matrix.store(super.data);
super.data.flip();
}
protected void updateData(){
GL20.glUniformMatrix4(super.id, false, super.data);
}
Genau gleich wie die Zeilen 2 - 4 im Kskb!
Weiter, der render code der render objects:
mesh.getVao().bind();
GL11.glDrawArrays(mode.getRawMode(), 0, mesh.getVbo().getRowCount());
So, das ganze zusammen ergibt also genau den gleichen Code wie im Kskb, nur das das Vao hier 2 mal gebindet wird. (Was aber eigentlich keinen Unterschied machen sollte?..).
Ich versteh also absolut nicht wo hier der Fehler liegen könnte. Hat jemand eine idee?
Danke fürs lesen ( = zeitnehmen), und nochmal sorry fürs crossposting !