When using the Open Graphics Library® (OpenGL®) computer graphics libraries for computer programming, a vertex buffer object (VBO) is a data structure that allows a three-dimensional (3D) object to be constructed and stored in the memory of the graphics card or graphics hardware. This allows an OpenGL® VBO to be rendered very quickly and to use far fewer system resources than other techniques that use immediate mode drawing. In addition to the gains in speed and the reduction in graphics overhead, an OpenGL® VBO also is a dynamic data structure — unlike an OpenGL® display list — that can be changed once it is in memory. The concept of an OpenGL® VBO actually started with hardware manufacturers who originally included — under different names — a similar type of functionality as an extension of the OpenGL® libraries that later was standardized by the OpenGL® Architecture Review Board (ARB).
An OpenGL® VBO basically is a combination of two other types of OpenGL® data structures. It encompasses the basic functionality of a vertex array, because the information for the geometry — including the vertex coordinates, normals, and color — can all be stored in a structured array that can be passed to OpenGL® for processing. Unlike a vertex array, however, an OpenGL® VBO is stored on the server side of the renderer and does not need to constantly access the client side for the vertex information.
By allowing the VBO to be stored in graphics memory, it also takes on some of the properties of a display list. The major difference is that an OpenGL® VBO can be modified and a display list cannot. Additionally, the VBO is not necessarily copied into the graphics memory as a display list would be, so only one data structure needs to be present in memory.
When an OpenGL® VBO is finally rendered, the distance from the graphics memory in which it is stored and the graphics processing unit (GPU) is very small, allowing for very fast rasterization without the need to move through slower system hardware first. In some instances, however, the use of VBOs is not supported by graphics card hardware. This can lead to programming problems that remove any added benefits from using a VBO, or a program that will be incompatible with some graphics cards.
There are some methods that can help to optimize how an OpenGL® VBO is treated when used. One of these is to provide hints to the graphics card, or to OpenGL®, to help determine where the VBO should be located in memory. Depending on the hints provided, the VBO can be stored directly in graphics memory on the graphics card, or might be stored in the main random access memory (RAM) of the system, if deemed necessary.