Hallo
- Ich versuche in OpenGL 4.X für Java Einzug zu finden. Was anscheinend nur mit JOGL funktioniert, jedenfalls habe ich nichts anderes gefunden gehabt.
Tipp am Rande: Nicht JOGL verwenden wenn möglich.
Da ich keine OpenGL 4 JOGL Tutorials finde - habe ich mich an ein C++ Tutorial geheftet und so gut wie möglich versucht den Code in Java zu übersetzen.
- Kurz und gut: Der Code funktioniert nicht.
- Frage: Darf ich mich dabei an solche Tutorials wenden? Oder sind das Welten zwischen JOGL und dem echten OpenGL?
- Nebenbei hier ein kleines compilierbares Beispiel meines Codes (1zu1 übersetzt aus diesem Tutorial)
Vieleicht hat ja jemand mal Lust sich das anzuschauen.
- Ich versuche in OpenGL 4.X für Java Einzug zu finden. Was anscheinend nur mit JOGL funktioniert, jedenfalls habe ich nichts anderes gefunden gehabt.
Tipp am Rande: Nicht JOGL verwenden wenn möglich.
Da ich keine OpenGL 4 JOGL Tutorials finde - habe ich mich an ein C++ Tutorial geheftet und so gut wie möglich versucht den Code in Java zu übersetzen.
- Kurz und gut: Der Code funktioniert nicht.
- Frage: Darf ich mich dabei an solche Tutorials wenden? Oder sind das Welten zwischen JOGL und dem echten OpenGL?
- Nebenbei hier ein kleines compilierbares Beispiel meines Codes (1zu1 übersetzt aus diesem Tutorial)
Vieleicht hat ja jemand mal Lust sich das anzuschauen.
Der Code wurde mit zusätzlichem Code ergänzt im Konstruktor der Main-Klasse (So beschrieben auf der offiziellen JOGL-Website)
Java:
public class Main implements GLEventListener {
private int triangleID;
public Main() {
JFrame jFrame = new JFrame();
// Init
GLProfile glp = GLProfile.getDefault(); // Result: GL4bc
GLProfile.initSingleton();
GLCapabilities glcaps = new GLCapabilities(glp);
GLCanvas glc = new GLCanvas(glcaps);
jFrame.add(glc);
glc.addGLEventListener(this);
FPSAnimator animator = new FPSAnimator(glc, 60);
animator.add(glc);
animator.start();
// End
jFrame.setTitle("JOGL");
jFrame.setSize(500, 500);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
public static void main(String[] args) {
new Main();
}
@Override
public void init(GLAutoDrawable drawable) {
System.out.println("Init");
GL4 gl = drawable.getGL().getGL4();
// VAO
int vertexArrayID[] = new int[1];
gl.glGenVertexArrays(1, vertexArrayID, 0);
gl.glBindVertexArray(vertexArrayID[0]);
// Init Triangle
float triangle[] = { -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f,
0.0f };
FloatBuffer fb = FloatBuffer.allocate(triangle.length);
fb.position(0);
fb.put(triangle);
fb.position(0);
int array[] = new int[1];
gl.glGenBuffers(1, array, 0);
triangleID = array[0];
gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, triangleID);
gl.glBufferData(GL4.GL_ARRAY_BUFFER, fb.capacity(), fb,
GL4.GL_STATIC_DRAW);
}
@Override
public void dispose(GLAutoDrawable drawable) {
}
@Override
public void display(GLAutoDrawable drawable) {
System.out.println("Display");
GL4 gl = drawable.getGL().getGL4();
gl.glEnableVertexAttribArray(0);
gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, triangleID);
gl.glVertexAttribPointer(0, 3, GL4.GL_FLOAT, false, 0, 0);
gl.glDrawArrays(GL4.GL_TRIANGLES, 0, 3);
gl.glDisableVertexAttribArray(0);
}
@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int width,
int height) {
}
}