card rec and forced software rendering

I have three questions. First, running the same code on 4 Windows computers, I consistenly get an exception (Method “wglChoosePixelFormatARB” not available) on two of them when trying to create PBuffers. On the other two it works fine. The graphics cards are all different. Should I assume that the cards are causing the problem?

Apropos, can someone recommend a really good card for JOGL/OpenGL? I’ve heard good things about the NVidia chip sets. How about the GeForce4? I’ve been very unhappy with my ATI cards, especially the old ones.

Finally, is there a way to force the rendering to be done in software mode? In other words, can I take the graphics card out of the equation? How would I do this?

Thanks,
Daniel

1)If you intend to distribute your app at all, you need to determine the minimum range of graphics cards you want to support. Some library functions (including wgl* extensions) may not be present on older cards, especially when they do not have updated drivers. In those instances, you need to either fall back on something else or just not support those cards at all. wglChoosePixelFormatARB is an extension which may not always be available.

  1. In theory, the chipset on the graphics card has little to do with the performance/stability of OpenGL alone - the chipset affects any API implementation, including D3D. The bigger concern is the vendor’s implementation of OpenGL in the drivers. My experience has been that Nvidia generally has more stable OpenGL drivers than ATI, and that they are also more performant. ATI on the other hand tends to outperform Nvidia with their D3D drivers, but again the drivers are often a bit dodgy.

  2. In JOGL, you should be able to get a non-hardware accelerated pixel format by setting setting hardware accleration enabled to false in the GLCapabilities object you use when you create your GLCanvas. However, because the default capabilities chooser is documented to prefer hardware accelerated pixel formats, I don’t know if it would respect your wishes. If not, it would be trivial to implement your own capabilities chooser to do what you want.

That was very informative, thank you.

I tried turning off the hardware acceleration in the GLCapabilities object. As you suggested, this did not seem to work. My performance numbers came out exactly the same, so I’m guessing it is still using the hardware.

Implementing a CLCapabilitiesChooser is about to be my next step, but I have one concern: I don’t see how to specify a chooser when creating an offscreen drawable. When creating a GLCanvas, I just pass my chooser to the factory method. The createOffscreenDrawable does not have this option. Will the PBuffer inherit the same chooser as the GLCanvas I create it from?

I can only speak for windows but turning off hardware acceleration via GLCapabilites won’t actually do anything. You either get a fully accelerated context or you get nothing. You can turn off hardware acceleration by using Mesa or by getting rid of the OpenGL dll provided by your cards manufacturer, ie nvoglnt.dll. To find out what pbuffer formats are supported by your cards download GLEW from sourceforge. It will list all the formats and extensions supported by your cards. People with nvidia cards seem to have the fewest number of problems.