We’re got 3 displays being drawn to using Windows XP, and a mixture of Glut and OpenGL. We’ve got an NVidia Quadro 4 with each of the 3 displays being driven by it’s own dedicated channel. On two of the displays, we’re drawing 2D symbols. When we run the program, the task manager indicates that rendering the symbols on the two displays consumes only 0 - 3% of the CPU processing time. We’re drawing bitmapped text to the 3rd display using display lists. The 2d symbols plus the bitmapped text consume over 50%!
So it appears that rendering the bitmapped text to the 3rd display is a real hog. We assumed that when we got our NVidia card and stopped doing s/w rendering, our performance problems would be resolved. Performance has improved dramatically, to be sure, but is still not up to snuff.
So the questions are:
- How to drastically improve rendering bitmapped text to our 3rd display.
- What’s the best way to measure performance? I’ve heard complaints about using the Windows Task Manager to gauge performance, altho it appears to show the relative good or bad performance.
- Maybe we’ve not configured the NVidia Quadro 4 correctly?
Thanks in advance.
How is the the 3rd display attached to the computer? I have several quadros (750XL, 950XL, FX1200, FX3000G) at work and there are only 2 VGA/DVI connections on each. Have you tried changing the display upon which the bitmaps are rendered? Depending on how the 3rd display is connected it might be software rendered (a PCI video card for it?) Do you have the latest drivers from nvidia (I recommend NOT using the version you can get through Windows update)? Also, any inefficient loops in your code or accidentally reloading the bitmaps through each loop?
The NVidia card is one card with 4 outputs. On the control panel/system manager, it shows up as 2 ‘NVidia NVS’. When I query it programmatically for Vendor ID, it shows up as
The NVIDIA s/w comes with a Window Manager that I deactivated since we already use the Windows XP window manager. Using the Windows XP window manager, display device 4 is the Primary Display, device 1 is a symbology display, device 2 is a symbology display, and device 3 is the display for bitmapped text.
device 1 is positioned at 1024, 0
device 2 is positioned at 2048, 0
device 3 is positioned at 3072, 0
This morning, I realized the CPU usage problem might be occurring because we may be trying to display a full 640x480 screen of bitmapped text at a 30 Hz rate. i.e. performing Draw/Clear iterations 30 times each second, which is ridiculous because we certainly don’t need that type of performance. 5 Hz would be sufficient.
So what’s your opinion of the NVIDIA NVS/PCI/SSE2?
Forgot to mention:
We’re using the drivers that came on the CD with the card.
Here’s the code we’re using to execute display lists to draw the characters:
void WriteXY_Buffer(char* text, int x, int y)
glRasterPos2i( x, y );
glCallLists(strlen(text), GL_UNSIGNED_BYTE, (GLubyte *) text);
please update your drivers at www.nivida.com get the latest for your card. its the first thing you should do as cd drivers are always fairly oldie, drivers always gets updated with bug fixes and performace inprovements. so for sure youll see a change in performance, but maybe it wont fix your problem. but its the first step! having all up to date.