The OpenGL Extension Wrangler Library
Automatic Code Generation
Starting from release 1.1.0, the source code and parts of the documentation are automatically generated from the extension specifications in a two-step process. In the first step, specification files from the OpenGL registry are downloaded and parsed. Skeleton descriptors are created for each extension. These descriptors contain all necessary information for creating the source code and documentation in a simple and compact format, including the name of the extension, url link to the specification, tokens, function declarations, typedefs and struct definitions. In the second step, the header files as well as the library and glewinfo source are generated from the descriptor files. The code generation scripts are located in the auto subdirectory.
The code generation scripts require GNU make, wget, and perl. On Windows, the simplest way to get access to these tools is to install Cygwin, but make sure that the root directory is mounted in binary mode. The makefile in the auto directory provides the following build targets:
Adding a New Extension
To add a new extension, create a descriptor file for the extension in auto/core and rerun the code generation scripts by typing make clean; make in the auto directory.
The format of the descriptor file is given below. Items in brackets are optional.
Take a look at one of the files in auto/core for an example. Note that typedefs and function signatures should not be terminated with a semicolon.
Custom Code Generation
Starting from GLEW 1.3.0, it is possible to control which extensions to include in the libarary by specifying a list in auto/custom.txt. This is useful when you do not need all the extensions and would like to reduce the size of the source files. Type make clean; make custom in the auto directory to rerun the scripts with the custom list of extensions.
For example, the following is the list of extensions needed to get GLEW and the utilities to compile.
Multiple Rendering Contexts (GLEW MX)
Starting with release 1.2.0, thread-safe support for multiple rendering contexts, possibly with different capabilities, is available. Since this is not required by most users, it is not added to the binary releases to maintain compatibility between different versions. To include multi-context support, you have to do the following:
Note that according to the MSDN WGL documentation, you have to initialize the entry points for every rendering context that use pixel formats with different capabilities For example, the pixel formats provided by the generic software OpenGL implementation by Microsoft vs. the hardware accelerated pixel formats have different capabilities. GLEW by default ignores this requirement, and does not define per-context entry points (you can however do this using the steps described above). Assuming a global namespace for the entry points works in most situations, because typically all hardware accelerated pixel formats provide the same entry points and capabilities. This means that unless you use the multi-context version of GLEW, you need to call glewInit() only once in your program, or more precisely, once per process.
To avoid name clashes when linking with libraries that include the same symbols, extension entry points are declared in a separate namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL function names to their GLEW equivalents. For instance, glFancyFunction is simply an alias to glewFancyFunction. The separate namespace does not effect token and function pointer definitions.
GLEW requires GLX 1.2 for compatibility with GLUT.