If you don't want to use vertex shaders, you can always transform the vertices in software and use a dynamic VBO. A better method is allow each vertex to be affected by several bones. You group your vertices by sets of bones, and each vertex contain weights. So if a vertex is affected by two bones, it will have a weight of 1/2 for each. You put the bone's matrices in the vertex shader constants, and the weights in per-vertex attributes. This method allows for a smoother look. === GL_ARB_fragment_shader This extension adds functionality to define fragment shader objects. A fragment shader object is a shader object that, when attached to a program object, can be compiled and linked to produce an executable that runs on the fragment processor in OpenGL. The fragment processor is a programmable unit that replaces the OpenGL 1.4 fixed-function texturing, color sum and fog stages. This extension also defines how such an executable interacts with the fixed functionality fragment processing of OpenGL 1.4. GL_ARB_vertex_shader This extension adds programmable vertex level processing to OpenGL. A vertex shader replaces the transformation, texture coordinate generation and lighting parts of OpenGL, and it also adds texture access at the vertex level. Furthermore, management of vertex shader objects and loading generic attributes are discussed. A vertex shader object, attached to a program object, can be compiled and linked to produce an executable that runs on the vertex processor in OpenGL. This extension also defines how such an executable interacts with the fixed functionality vertex processing of OpenGL 1.4. GL_ARB_shader_object This extension adds API calls that are necessary to manage shader objects and program objects. GL_ARB_shading_language_100 This extension string indicates that the OpenGL Shading Language, version 1.00, is supported. (There are no function pointers or definitions actually related to this extension, it shows that the Language Version "1.0.0" is supported) === Useful Extensions At the time of writing, there are 269 extensions listed in the Extension Registry. Even if I focused on the ones actually being used, I couldn't hope to cover them all, even briefly. Instead, I'll focus on a few that seem to be the most important for use in games. Programmable Vertex and Pixel Shaders It's generally agreed that shaders are the future of graphics, so let's start with them. First of all, the terms "vertex shader" and "pixel shader" are in common usage because of the attention they received with the launch of DirectX 8. However, the OpenGL extensions that you use for them have different names. On NVIDIA cards, vertex shaders are called vertex programs, which are available through the NV_vertex_program extension. Pixel shaders are called register combiners, and are available through the NV_register_combiners and NV_texture_shader extensions. On ATI cards, vertex shaders are still called vertex shaders, and are available through the EXT_vertex_shader extension. Pixel shaders are called fragment shaders, and are available through the ATI_fragment_shader extension. If you're unfamiliar with shaders, then a quick overview is in order. Vertex shaders allow you to customize the geometry transformation pipeline. Pixel shaders work later in the pipeline, and allow you to control how the final pixel color is determined. Together, the two provide incredible functionality. I recommend that you download NVIDIA's Effects Browser to see examples of the things you can do with shaders. Using shaders can be somewhat problematic right now due to the fact that NVIDIA and ATI both handle them very differently. If you want your game to take advantage of shaders, you'll have to write a lot of special case code to use each vendor's method. At the ARB's last several meetings, this has been a major discussion point. There is a great deal of pressure to create a common shader interface. In fact, it is at the core of 3D Labs' OpenGL 2.0 proposal. Hopefully, the 1.4 specification will address this issue, but the ARB seems to be split as to whether a common shader interface should be a necessary component of 1.4.