I am using VBOs for large Triangle Data with GL_DRAW_STATIC. The vertex array is interleaved with normal and position: NX,NY,NZ X,Y,Z.
The strange think is, I get very different performance on two computers:
Intel Pentium 4 2,8 GHz
512 MB RAM
NVIDIA Quadro4 750 XGL 128 MB Driver: 85.96
Windows XP SP2
AMD Athlon 64 FX-60 Dual-Core 2,61 GHz
3072 MB RAM
NVIDIA GeForce 7900 GTX 512 MB Driver: 85.96
Windows XP SP2
The rendered scene has 1.789.819 Triangles which are drawn indexed with glDrawElements. Number of Patches/VBOs: 9168. Total VBO size: 26,24 MB
I also tried a scene with 384.219 Triangles, 70 VBOs with total size of 4,81 MB.
On computer A the speed-up gained from VBOs is 250% compared to Vertex Arrays.
The performance gain on computer B is just 10% or in some cases 0%! I checked for failures with NV PerfKit 2.0 but no results. The new driver version 91.31 (?) has no effect. NV PerfKit also shows, that the VBOs on computer B are stored in the video memory. So there should be a huge performance gain. I stored the triangle index array also in a VBO - nothing. Is the PCI-Express of computer B so fast, that no performance gain with video mem VBOs is reached? No!:
Another test showed, that another PC with the same Quadro card as computer A and the newest driver has the same frame rates as computer A - 250% gain. On a PC with GeForce 5200 FX and 6X.XX driver the performance gain is also very good. But a GeForce 5950 Ultra with 84.21 driver does not render faster with VBOs. All no PCI-E
So it has to be the card? What is wrong with the VBO implementation on the different cards? Or what could be the reason?
My VBO code does the following:
glBufferDataARB(GL_ARRAY_BUFFER_ARB, nVertz*vertexSize, pVertz, GL_STATIC_DRAW_ARB);
glInterleavedArrays(GL_N3F_V3F, stride, (CHAR*)NULL);
glDrawElements(GL_TRIANGLES, nIndices, GL_UNSIGNED_INT, pIndices);
Any suggestions or comments for this problem?
Thanks in advance!