OpenGL extensions
From DmWiki
OpenGL has what is called an extension mechanism. This means that it has two sets of functions (and associated constants) - the core and the extensions. This is one main difference from Direct3D.
As with Direct3D, OpenGL has updates to the core. This is when a new version is created - 1.2, 1.3, ... up to the latest, 2.1. Again, as with Direct3D, as soon as you have updated your library to the latest version, you can use all these functions in the core as you would use any other function. For example you can just as easily use the normal texture coordinate function, glTexCoord2f, or the multitexture coordinate function, glMultiTexCoord2f.
However, it takes time for the OpenGL ARB to standardise functions. What if you want to experiment with new features of your graphics card before they are standardised - which could take many months? In Direct3D there is no way to to do this, but in OpenGL the extensions mechanism means that applications can access functions provided in the drivers that the core library doesn't know about. The upshot of this is that you can call a function to request extensions - GetExtension("glMultiTexCoord2f"), for example. If the driver supports the requested extension, you will receive a function pointer back so you can call glMultiTexCoord2f.
Often these vendor-specific - e.g. nVidia or ATI - extensions are very similar to the final version, because both companies have a part in creating the ARB version.
When using extensions, care must be taken if you use them in an actual program. Only ARB extensions are likely to be supported on any graphics card that supports a certain level of features. However, an NV extension will very likely not be supported on an ATI card and vice-versa. (However ATI does implement some NV extensions). The other category is EXT, which includes extensions that are almost at ARB status, but haven't been officially approved. This means most cards will support them, but some might not.
Extensions and the Core on Windows
Unfortunately for Windows developers, Microsoft haven't released a new library for OpenGL since version 1.1. This means that any features that were made core in versions 1.2 onwards can't be used as core on Windows - they have to be accessed via the extension mechanism.
Because this is often quite a hassle (version 1.1 is rather old, and many many useful additions have been made since) there have been several libraries, including glew (http://glew.sourceforge.net/) and GLee (http://elf-stone.com/glee.php), created to perform the extension loading transparently so that you can use the functions "as if" they were core, when in reality they are contained in the display drivers provided by the graphics card vendor.
