JOGL2 Using GLWindow

I have the following code that does display, but when I put the mouse cursor over the window it shows a busy cursor and I have no ability to interact with it:

package test;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;

import com.sun.javafx.newt.opengl.GLWindow;
import com.sun.opengl.util.Animator;

public class TestJOGL2 implements GLEventListener {
	private GLWindow window;
	
	public TestJOGL2() {
		window = GLWindow.create();
		window.setTitle("Testing");
		window.setSize(800, 600);
		window.addGLEventListener(this);
		Animator a = new Animator(window);
		a.setRunAsFastAsPossible(false);
		a.start();
		window.setAutoDrawableClient(true);
		window.setVisible(true);
	}
	
	public static void main(String[] args) throws Exception {
		new TestJOGL2();
	}

	public void display(GLAutoDrawable d) {
		d.getGL().getGL2().glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
	}

	public void dispose(GLAutoDrawable arg0) {
	}

	public void init(GLAutoDrawable arg0) {
	}

	public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
	}
}

I’m sure there’s something simple I’m missing here, but since there seems to be a great lack of information on JOGL2 I’m at a loss to figuring out what it is.

I have the same problem when I use the Animator object. In the code above I put the display method inside a loop. Well it isn’t the best solution for me. Any one knows if is possible to use the Animator object with GLWindow?

import javax.media.opengl.*;
import com.sun.javafx.newt.*;
import com.sun.javafx.newt.opengl.*;
import javax.media.opengl.glu.GLU;

/**
 * @author Brian Paul
 * converted to Java by Ron Cemer and Sven Goethel, ported to JOGL2 by Michael Bien
 *
 * This version is equal to Brian Paul's version 1.2 1999/10/21

 */
public class ExemploFullScreenGLWindow implements GLEventListener {

    int teclaPressionada;

    public ExemploFullScreenGLWindow() {
        GLCapabilities caps = new GLCapabilities(null);
        final GLWindow window = GLWindow.create(caps);
        
        window.addGLEventListener(this);
        window.addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(KeyEvent arg0) {
                teclaPressionada = arg0.getKeyCode();
            }

            @Override
            public void keyReleased(KeyEvent arg0) {            }

            @Override
            public void keyTyped(KeyEvent arg0) {            }
        });
        window.addWindowListener(new WindowListener() {
            @Override
            public void windowResized(WindowEvent arg0) {           }

            @Override
            public void windowMoved(WindowEvent arg0) {            }

            @Override
            public void windowDestroyNotify(WindowEvent arg0) {
                new Thread(new Runnable() {
                    public void run() {
 //                       animator.stop();

                        window.getFactory().shutdown();
                        System.exit(0);
                    }
                }).start();
            }

            @Override
            public void windowGainedFocus(WindowEvent arg0) {            }

            @Override
            public void windowLostFocus(WindowEvent arg0) {            }
        });

        window.enablePerfLog(true);
        // Size OpenGL to Video Surface
        window.setSize(800, 600);
        window.setFullscreen(true);
        window.setVisible(true);

        while (teclaPressionada!=KeyEvent.VK_ESCAPE) {
            window.display();
        }

        window.destroy();
        window.getFactory().shutdown();
    }

    public static void main(String[] args) {
        new ExemploFullScreenGLWindow();
    }

    public void init(GLAutoDrawable drawable) {
        GL2 gl = drawable.getGL().getGL2();
        System.err.println("INIT GL2 IS: " + gl.getClass().getName());

        // Enable VSync
        gl.setSwapInterval(1);

        // Setup the drawing area and shading mode
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        gl.glShadeModel(GL2.GL_SMOOTH); // try setting this to GL_FLAT and see what happens.
    }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL2 gl = drawable.getGL().getGL2();
        GLU glu = new GLU();

        // avoid a divide by zero error!

        if (height <= 0)
            height = 1;

        final float h = (float) width / (float) height;
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL2.GL_PROJECTION);
        gl.glLoadIdentity();


        glu.gluPerspective(45.0f, h, 1.0, 20.0);
        gl.glMatrixMode(GL2.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

    public void display(GLAutoDrawable drawable) {
        GL2 gl = drawable.getGL().getGL2();

        // Clear the drawing area
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
        // Reset the current matrix to the "identity"
        gl.glLoadIdentity();

        // Move the "drawing cursor" around

        gl.glTranslatef(-1.5f, 0.0f, -6.0f);

        // Drawing Using Triangles
        gl.glBegin(GL2.GL_TRIANGLES);
            gl.glColor3f(1.0f, 0.0f, 0.0f);    // Set the current drawing color to red

            gl.glVertex3f(0.0f, 1.0f, 0.0f);   // Top
            gl.glColor3f(0.0f, 1.0f, 0.0f);    // Set the current drawing color to green
            gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
            gl.glColor3f(0.0f, 0.0f, 1.0f);    // Set the current drawing color to blue

            gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
        // Finished Drawing The Triangle
        gl.glEnd();

        // Move the "drawing cursor" to another position
        gl.glTranslatef(3.0f, 0.0f, 0.0f);

        // Draw A Quad
        gl.glBegin(GL2.GL_QUADS);
            gl.glColor3f(0.5f, 0.5f, 1.0f);    // Set the current drawing color to light blue
            gl.glVertex3f(-1.0f, 1.0f, 0.0f);  // Top Left

            gl.glVertex3f(1.0f, 1.0f, 0.0f);   // Top Right
            gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
            gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
        // Done Drawing The Quad

        gl.glEnd();
    }

    public void dispose(GLAutoDrawable arg0) {    }
}

Best Regards.
Claudio Eduardo Goes

Ah, I had tried that but had originally forgotten to call setVisible(true) first…that made the window appear but was in a wacky state. :o

Thanks for your help.