OpenGL VBOs vs Display Lists: Data Types
Vertex Buffer Objects (VBOs) are a mechanism to cache vertex data on the video memory. They are provided by the OpenGL extension ARB_vertex_buffer_object, and are part of OpenGL 1.5.
Display lists store OpenGL commands which are stored and executed on the graphics card. The display lists used in this benchmark contain vertex arrays rendered using glDrawElements().
The scene is made of 1M triangles rendered with 200 glDrawElements() calls. The vertices and their associated normals and colors are stored in separate vertex arrays. No other vertex attributes are used. The source of the benchmark is available here.
GeForce 6800 GT under Linux
Driver: IA32 1.0-7676 (August 9, 2005)
VBO Size: 82 KB (7,000 vertices)
$ ./grass_benchmark.linux -colors -normals -batches 200 -method VBO -it 500
GL Types 3f Normals
4ub Colors4b Normals
4ub Colors3b Normals
4ub Colors3f Normals
4f Colors4b Normals
4f Colors3b Normals
4f ColorsVBOs 48.9 fps 20.8 fps 21.0 fps 38.5 fps 15.0 fps 15.2 fps DL 47.8 fps 47.8 fps 47.8 fps 47.8 fps 47.8 fps 47.8 fps VBO Size: 1,640 KB (140,000 vertices)
$ ./grass_benchmark.linux -colors -normals -batches 10 -method VBO -it 500
GL Types 3f Normals
4ub Colors4b Normals
4ub Colors3b Normals
4ub Colors3f Normals
4f Colors4b Normals
4f Colors3b Normals
4f ColorsVBOs 52.7 fps 17.1 fps 17.2 fps 38.9 fps 11.4 fps 11.5 fps DL 26.4 fps 26.4 fps 26.4 fps 26.4 fps 26.4 fps 26.4 fps GeForce 6800 GT under Windows
Driver: ForceWare 81.85 (October 20, 2005)
VBO Size: 82 KB (7,000 vertices)
GL Types 3f Normals
4ub Colors4b Normals
4ub Colors3b Normals
4ub Colors3f Normals
4f Colors4b Normals
4f Colors3b Normals
4f ColorsVBOs 57.0 fps 21.3 fps 21.5 fps 45.8 fps 14.9 fps 15.0 fps DL 55.8 fps 55.7 fps 55.8 fps 55.7 fps 55.8 fps 55.9 fps VBO Size: 1,640 KB (140,000 vertices)
GL Types 3f Normals
4ub Colors4b Normals
4ub Colors3b Normals
4ub Colors3f Normals
4f Colors4b Normals
4f Colors3b Normals
4f ColorsVBOs 59.3 fps 16.8 fps 17.0 fps 45.7 fps 11.2 fps 11.2 fps DL 28.4 fps 28.4 fps 28.4 fps 28.4 fps 28.4 fps 28.4 fps DL = Display List
VBO = Vertex Buffer Object3f = 3-component GL_FLOAT (packed)
3b = 3-component GL_BYTE (packed)
4b = 4-component GL_BYTE with stride 4
4ub = 4-component GL_UNSIGNED_BYTE (packed)
Louis Bavoil