Ich bastle gerade an ein paar Hilfsklassen für (mein) JOGL-Rendering-Zeug (Shader, RenderableObject, BufferObject...) und versuche, das ganze mit reinem Core-GL3.2, also mit JOGL2 zu machen.
Dazu ein paar Fragen... teilweise vielleicht ein bißchen schwammig aber auch subjektive Antworten darauf könnten interessant sein...
1.
Im Hinblick auf http://www.java-forum.org/spiele-mu...098-jogl-button-klick-problem.html#post597369 stellt sich mir die Frage, ob es legitim ist, in der "init"-Methode das GL zwischenzuspeichern, und in der "display" zu verwenden. Kann man davon ausgehen, dass das GL, das man sich beim display vom Drawable abholt, IMMER dasselbe ist, wie das, was man sich schon beim init abholen konnte? Der Doku nach müßte es eigentlich so sein, aber es ist nirgendwo verbindlich gesagt ???:L Könnte es da krachen, wenn man z.B. das Fenster vergrößert, während er gerade anfängt, "display" aufzurufen, und dort noch das "alte" GL vom vorigen init-Aufruf verwendet wird?
2.
Das GLJPanel war wohl bisher immer noch "ein bißchen beta", aber kann es sein, dass es bei JOGL2 (was ja selbst noch beta ist) dort noch größere Probleme gibt, und tendenziell häufiger mal nur ein graues Fenster zu sehen ist?
3.
Wenn ich bei JOGL2 einen Animator verwende, sehe ich nur flackernde, halb-gemalte Bilder ... ist das noch ein generelles Problem von JOGL2 (was ja noch beta ist ), oder kann man davon ausgehen, dass ich da irgendwo ein glFlush oder irgendein vSync vergessen/falsch eingestellt habe?
4.
Ich hab' zwar gerade die (400seitige :autsch OpenGL3.2 Spez offen, aber ... es ist für mich nicht ganz ersichtlich, ob es für das Binden und Setzen von Attributen Beschränkungen in bezug auf den Zeitpunkt bzw. den Kontext gibt, wo das passsieren darf. Im speziellen: Muss das Binden und Aktivieren (bei JOGL2) immer auf dem "aktuellen" GL durchgeführt werden, oder reicht es, das EINmal auf "irgendeinem" GL durchzuführen. Also, MUSS man das Zeichnen nach diesem Muster machen
oder könnte man auch sowas machen wie
?
Ich könnte mir vorstellen, dass letzteres NICHT geht, aber darf man das dann z.B. machen wenn man ein VAO verwendet, DAS dann in der init-Methode (unter verwendung eines bestimmten GL) füllt, und in der draw dann (mit einem anderen GL) sowas macht wie
?
(Ein präventives "Danke" an "Guest2" )
Dazu ein paar Fragen... teilweise vielleicht ein bißchen schwammig aber auch subjektive Antworten darauf könnten interessant sein...
1.
Im Hinblick auf http://www.java-forum.org/spiele-mu...098-jogl-button-klick-problem.html#post597369 stellt sich mir die Frage, ob es legitim ist, in der "init"-Methode das GL zwischenzuspeichern, und in der "display" zu verwenden. Kann man davon ausgehen, dass das GL, das man sich beim display vom Drawable abholt, IMMER dasselbe ist, wie das, was man sich schon beim init abholen konnte? Der Doku nach müßte es eigentlich so sein, aber es ist nirgendwo verbindlich gesagt ???:L Könnte es da krachen, wenn man z.B. das Fenster vergrößert, während er gerade anfängt, "display" aufzurufen, und dort noch das "alte" GL vom vorigen init-Aufruf verwendet wird?
2.
Das GLJPanel war wohl bisher immer noch "ein bißchen beta", aber kann es sein, dass es bei JOGL2 (was ja selbst noch beta ist) dort noch größere Probleme gibt, und tendenziell häufiger mal nur ein graues Fenster zu sehen ist?
3.
Wenn ich bei JOGL2 einen Animator verwende, sehe ich nur flackernde, halb-gemalte Bilder ... ist das noch ein generelles Problem von JOGL2 (was ja noch beta ist ), oder kann man davon ausgehen, dass ich da irgendwo ein glFlush oder irgendein vSync vergessen/falsch eingestellt habe?
4.
Ich hab' zwar gerade die (400seitige :autsch OpenGL3.2 Spez offen, aber ... es ist für mich nicht ganz ersichtlich, ob es für das Binden und Setzen von Attributen Beschränkungen in bezug auf den Zeitpunkt bzw. den Kontext gibt, wo das passsieren darf. Im speziellen: Muss das Binden und Aktivieren (bei JOGL2) immer auf dem "aktuellen" GL durchgeführt werden, oder reicht es, das EINmal auf "irgendeinem" GL durchzuführen. Also, MUSS man das Zeichnen nach diesem Muster machen
Java:
void draw(GL3 gl)
{
int x = gl.glGetAttribLocation(id, "x");
gl.glEnableVertexAttribArray(x);
gl.glVertexAttribPointer(x, ...);
gl.glDrawArrays(GL.GL_TRIANGLES, 0, n);
}
Java:
void init(GL3 gl)
{
int x = gl.glGetAttribLocation(id, "x");
gl.glEnableVertexAttribArray(x);
gl.glVertexAttribPointer(x, ...);
}
void draw(GL3 gl) // Aufruf ggf. mit anderem GL als 'init'....
{
gl.glDrawArrays(GL.GL_TRIANGLES, 0, n);
}
Ich könnte mir vorstellen, dass letzteres NICHT geht, aber darf man das dann z.B. machen wenn man ein VAO verwendet, DAS dann in der init-Methode (unter verwendung eines bestimmten GL) füllt, und in der draw dann (mit einem anderen GL) sowas macht wie
Java:
void draw(GL3 gl) // Aufruf ggf. mit anderem GL als 'init'....
{
gl.glBindVertexArray(vao);
gl.glDrawArrays(GL.GL_TRIANGLES, 0, n);
}
(Ein präventives "Danke" an "Guest2" )