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 Colors
4b Normals
4ub Colors
3b Normals
4ub Colors
3f Normals
4f Colors
4b Normals
4f Colors
3b Normals
4f Colors
VBOs 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 Colors
4b Normals
4ub Colors
3b Normals
4ub Colors
3f Normals
4f Colors
4b Normals
4f Colors
3b Normals
4f Colors
VBOs 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 Colors
4b Normals
4ub Colors
3b Normals
4ub Colors
3f Normals
4f Colors
4b Normals
4f Colors
3b Normals
4f Colors
VBOs 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 Colors
4b Normals
4ub Colors
3b Normals
4ub Colors
3f Normals
4f Colors
4b Normals
4f Colors
3b Normals
4f Colors
VBOs 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 Object

3f = 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