PDA

View Full Version : Rendering speed with Qt, Coin3D, VSG OIV and SGI



martinb0820
09-19-2009, 08:06 AM
I'm developing an application for Windows that uses Qt and Open Inventor. On some PCs, complex objects or large scene graphs slow the frame rate to a frame every few seconds. These PC are mostly Core 2 Dells with NVidea graphics cards and dual monitors. OTOH, on my development PC (Core 2 Dell, ATI graphics card, dual monitors) the frame rate is acceptable with these scene graphs.

The interesting thing is that the slowdown happens with both VSG Open Inventor and Coin3D + Qt 4.5, but there is a very old legacy application that can display the same scene graphs which was built on SGI Open Inventor and FLTK; this works fine on all the PCs!

I'm not sure what I'm looking for. Do VSG OIV/Coin3D handle OpenGL differently than the legacy SGI library, or could SoQt and its libraries/DLLs be the difference?

Thanks in advance for any information!
Martin

mikeheck
09-21-2009, 12:07 PM
I'm not sure what I'm looking for. Do VSG OIV/Coin3D handle OpenGL differently than the legacy SGI library, or could SoQt and its libraries/DLLs be the difference?

Yes, internally there are many differences between the old SGI code and current Open Inventor. Some possibly related changes are when/if display lists are built, use of vertex arrays, use of VBO's, etc. These changes generally produce better performance, but because some of them involve OpenGL extensions there is always a small possibility of a bad interaction with a particular board and/or driver. I would first check that the slow machines are using the latest Nvidia driver (could be a driver bug since you see a difference between Nv and Ati). If that doesn't help, let us know what version of OIV you're using and what kind of geometry you're rendering.

-Mike

martinb0820
09-21-2009, 12:47 PM
One new data point - it looks like the problem may be specific to 64-bit Windows. I loaded XP64 on my development PC, ran the application and experienced the slow frame rate. The application was not thrashing virtual memory, but the utilization of one of the CPU's looked like an amplifier being driven into clipping. This is very different from how it looks on 32-bit Windows, where it uses much less CPU.

I'm using OIV 7.1 and am evaluating Coin3D 3.1.0, both with Qt 4.5. Both OIV and Coin3D seem to run about the same.

An example of a geometry that causes problems includes:
Coordinate3 { point (78045 values) }
IndexedFaceSet { coordIndex (611276 values) }

Although it might be possible to make the geometry easier to render, the fact that the legacy s/w works fine indicates that doint that shouldn't be necessary.

Thanks,
Martin

martinb0820
09-22-2009, 10:45 AM
I profiled the code on 32- and 64-bit XP. Exactly the same code was running, animating the exact same scene graph. On XP64, the application was spending 74% of its time in wglChoosePixelFormat() in the OPENGL32 module. This routine didn't even appear in the 32-bit profile.

Any ideas?

Thanks,
Martin

martinb0820
10-02-2009, 10:39 AM
The problem appears to have been incorrect DLLs.