Basically there's a little rule of thumb to decide what to use. First, never ever use both, putting a vertex array inside a display list could actually slow things down. Basically, you need to decide, does your data change? In the case of a pool game, it seems like it would not. You are rendering some spheres, or the pool table, or the pool cue. None of these things are animated, the same vertex/texcoord/color/etc data will always be used. Thus, the easiest and fastest way to render would be using Display Lists. If the data were to change, you would have to recompile the Display List which can be pretty slow. As an example of when to use Vertex Arrays, I use them for skeletal animation, because the vertex data is updated every frame based on the time passed and animation data. It's faster to create a buffer for all of the updated vertices, and upload them to OpenGL all with one call using vertex arrays, rather then the potentially large amount of calls it would take to recompile the display list.