I *think* that is caused by the way you are using display()...that's actually not the way it's meant to be used when using the AWTGLRenderer. The painting of the canvas happens magically (you might have to call repaint(); on it to actually make it happen). display() doesn't draw anything when used in combination with the AWTGLRenderer. All it does, is to create and buffer the render commands, so that the canvas itself can access them asynchronously in the AWT EDT. In your case, you are making render() and display() asynchronous, which is asking for trouble anyway. Try to remove the call to display() from paintComponent and move it into the render()-method instead. As said, you might have to add a canvas.repaint(); too. Have a look at the AWT-HelloWorld for a simple example.