Unable to set pixel format

Hi

I get a Unable to set pixel format exception when I try to create add a GLCanvas() to a frame after I have done some some swing work.

This is the setup:


JFrame glframe ;
 DefaultDockableBarDockableHolder dock = new DefaultDockableBarDockableHolder("Hi");
 glframe = new JFrame("1");
 glframe.setSize(100, 100);
 glframe.add(new GLCanvas());
 glframe.setVisible(true);


… if I change it to first init the Frame with the canvas it works:


JFrame glframe ;
 
 glframe = new JFrame("1");
 glframe.setSize(100, 100);
 glframe.add(new GLCanvas());
 glframe.setVisible(true);
DefaultDockableBarDockableHolder dock = new DefaultDockableBarDockableHolder("Hi");


Then it works, the problem is that I realy need to create the canvas later.

The reported error is:


Exception in thread "AWT-EventQueue-0" javax.media.opengl.GLException: Unable to set pixel format 5 for device context 0xffffffffa0012f43: error code 0
	at com.sun.opengl.impl.windows.WindowsGLDrawable.choosePixelFormat(WindowsGLDrawable.java:288)
	at com.sun.opengl.impl.windows.WindowsOnscreenGLDrawable.lockSurface(WindowsOnscreenGLDrawable.java:203)
	at com.sun.opengl.impl.windows.WindowsOnscreenGLContext.makeCurrentImpl(WindowsOnscreenGLContext.java:57)
	at com.sun.opengl.impl.GLContextImpl.makeCurrent(GLContextImpl.java:134)
	at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:182)
	at javax.media.opengl.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:265)
	at javax.media.opengl.GLCanvas.display(GLCanvas.java:130)
	at javax.media.opengl.GLCanvas.paint(GLCanvas.java:142)
	at sun.awt.RepaintArea.paintComponent(Unknown Source)
	at sun.awt.RepaintArea.paint(Unknown Source)
	at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

I’m running a Acer ferrari 5000 with ATI Mobility X1600, JOGL Feb14, and Java6 and I’m using the JIDE Docking Framework

Any ideas ?

// Tomas

When you add the GLCanvas to the frame, are you using EventQueue.invokeAndWait() if you aren’t already on the Event Dispatch Thread? For robustness it’s probably necessary to do this work on the EDT if the containing component is already visible.

Does the same problem occur on NVidia hardware? If not, could you please file a bug with ATI and provide them a test case?

It doesn’t crasch on nvidia hardware. Although I couldn’t find where to add sumbit bugs to ATI.

Thanks for the quick responce
// Tomas