Back when I first started openGL 8 years ago, I had the naive:
glBegin(GL_TRIANGLES);
for(int i = 0; i < vertices; i++)
{
glNormal(); glTexCoord2f();glVertex();
}
glEnd();
I used to do this with some models that were 10,000 verts or so, I remember running gDebugger and having 100,000 + openGL function calls.
Now I was doing a test on a scene with 4000 objects (the same six objects duplicated 800 times). I internally track redundant state changes and I only bind the objects once, and draw them all. My test case there isn't much pixel overdraw. Here I have only 5000 openGL function calls.
Anyway, back on that old video card I still used to get like 60FPS or so from what I remember, Now I may have only had 50 objects in my scene back then and I now have 4000, but my total openGL calls today per frame is 5,000. Back then it was 100,000+.
Clearly I have a much better motherboard, much faster bandwidth, and way less openGL function calls (but I do have a lot more draw calls). So if it isn't a bandwidth issue, what is slowing down the GPU so much? What is going on internally, clearly doesn't seem to be a bandwidth issue. What happens when the draw() command hits that destroys everything?