<!-- begin header.html --> <!-- The OpenGL Extension Wrangler Library Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org> Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org> Copyright (C) 2002, Lev Povalahev All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * The name of the author may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd"> <!-- <img src="new.png" height="12" alt="NEW!"> --> <html> <head> <title>GLEW: The OpenGL Extension Wrangler Library</title> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <link href="glew.css" type="text/css" rel="stylesheet"> </head> <body bgcolor="#fff0d0"> <table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%"> <tr> <td bgcolor="#ffffff" align="left" valign="top" width="200"> <table border="0" width="100%" cellpadding="0" cellspacing="0" align="left"> <tr> <td valign="top"> <table border="0" width="100%" cellpadding="0" cellspacing="0" align="left"> <tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/1.10.0/">1.10.0</a></i></td></tr> <tr><td align="center"><br></td></tr> <tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr> <tr><td align="center"><br></td></tr> <tr><td align="center"> <table border="0" cellpadding="0" cellspacing="0" align="center"> <tr><td align="center"><a href="index.html">Download</a></td></tr> <tr><td align="center"><a href="basic.html">Usage</a></td></tr> <tr><td align="center"><a href="build.html">Building</a></td></tr> <tr><td align="center"><a href="install.html">Installation</a></td></tr> <tr><td align="center">Source Generation</td></tr> <tr><td align="center"><a href="credits.html">Credits & Copyright</a></td></tr> <tr><td align="center"><a href="log.html">Change Log</a></td></tr> <tr><td align="center"><a href="https://sourceforge.net/projects/glew">Project Page</a></td></tr> <tr><td align="center"><a href="https://sourceforge.net/p/glew/mailman">Mailing Lists</a></td></tr> <tr><td align="center"><a href="https://sourceforge.net/p/glew/_list/tickets">Bug Tracker</a></td></tr> </table> <tr><td align="center"><br></tr> </table> </td> </tr> <tr> <td valign="bottom"> <table border="0" width="100%" cellpadding="5" cellspacing="0" align="left"> <tr><td align="center"><i>Last Update: 07-22-13</i></td></tr> <tr><td align="center"> <a href="http://www.opengl.org"> <img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a> <a href="http://sourceforge.net"> <img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a> </td> </tr> <!--- <tr><td align="center"><a href="http://sourceforge.net/donate/index.php?group_id=67586"><img src="http://images.sourceforge.net/images/project-support.jpg" width="88" height="32" border="0" alt="Support This Project"></a></td></tr> --> </table> </td> </tr> </table> </td> <td bgcolor="#ffffff" align="left" valign="top"> <h1>The OpenGL Extension Wrangler Library</h1> <!-- end header.html --> <h2>Automatic Code Generation</h2> <p> 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 <tt>auto</tt> subdirectory. </p> <p> The code generation scripts require GNU make, wget, and perl. On Windows, the simplest way to get access to these tools is to install <a href="http://www.cygwin.com/">Cygwin</a>, but make sure that the root directory is mounted in binary mode. The makefile in the <tt>auto</tt> directory provides the following build targets: </p> <table border=0 cellpadding=0 cellspacing=5> <tr><td align="left" valign="top"><tt>make</tt></td> <td align=left>Create the source files from the descriptors.<br/> If the descriptors do not exist, create them from the spec files.<br/> If the spec files do not exist, download them from the OpenGL repository.</td></tr> <tr><td align="left" valign="top"><tt>make clean</tt></td> <td align=left>Delete the source files.</td></tr> <tr><td align="left" valign="top"><tt>make clobber</tt></td> <td align=left>Delete the source files and the descriptors.</td></tr> <tr><td align="left" valign="top"><tt>make destroy</tt></td> <td align=left>Delete the source files, the descriptors, and the spec files.</td></tr> <tr><td align="left" valign="top"><tt>make custom</tt></td> <td align=left>Create the source files for the extensions listed in <tt>auto/custom.txt</tt>.<br/> See "Custom Code Generation" below for more details.</td></tr> </table> <h3>Adding a New Extension</h3> <p> To add a new extension, create a descriptor file for the extension in <tt>auto/core</tt> and rerun the code generation scripts by typing <tt>make clean; make</tt> in the <tt>auto</tt> directory. </p> <p> The format of the descriptor file is given below. Items in brackets are optional. </p> <p class="pre"> <Extension Name><br> [<URL of Specification File>]<br> [<Token Name> <Token Value>]<br> [<Token Name> <Token Value>]<br> ...<br> [<Typedef>]<br> [<Typedef>]<br> ...<br> [<Function Signature>]<br> [<Function Signature>]<br> ...<br> <!-- [<Function Definition>]<br> [<Function Definition>]<br> ...<br> --> </p> <!-- <p> Note that <tt>Function Definitions</tt> are copied to the header files without changes and have to be terminated with a semicolon. In contrast, <tt>Tokens</tt>, <tt>Function signatures</tt>, and <tt>Typedefs</tt> should not be terminated with a semicolon. </p> --> <p> Take a look at one of the files in <tt>auto/core</tt> for an example. Note that typedefs and function signatures should not be terminated with a semicolon. </p> <h3>Custom Code Generation</h3> <p> Starting from GLEW 1.3.0, it is possible to control which extensions to include in the libarary by specifying a list in <tt>auto/custom.txt</tt>. This is useful when you do not need all the extensions and would like to reduce the size of the source files. Type <tt>make clean; make custom</tt> in the <tt>auto</tt> directory to rerun the scripts with the custom list of extensions. </p> <p> For example, the following is the list of extensions needed to get GLEW and the utilities to compile. </p> <p class="pre"> WGL_ARB_extensions_string<br> WGL_ARB_multisample<br> WGL_ARB_pixel_format<br> WGL_ARB_pbuffer<br> WGL_EXT_extensions_string<br> WGL_ATI_pixel_format_float<br> WGL_NV_float_buffer<br> </p> <h2>Multiple Rendering Contexts (GLEW MX)</h2> <p>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:</p> <ol> <li>Compile and use GLEW with the <tt>GLEW_MX</tt> preprocessor token defined.</li> <li>For each rendering context, create a <tt>GLEWContext</tt> object that will be available as long as the rendering context exists.</li> <li>Define a macro or function called <tt>glewGetContext()</tt> that returns a pointer to the <tt>GLEWContext</tt> object associated with the rendering context from which OpenGL/WGL/GLX calls are issued. This dispatch mechanism is primitive, but generic. <li>Make sure that you call <tt>glewInit()</tt> after creating the <tt>GLEWContext</tt> object in each rendering context. Note, that the <tt>GLEWContext</tt> pointer returned by <tt>glewGetContext()</tt> has to reside in global or thread-local memory. </ol> <p>Note that according to the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/ntopnglr_6yer.asp">MSDN WGL documentation</a>, 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. <b>GLEW by default ignores this requirement, and does not define per-context entry points (you can however do this using the steps described above).</b> 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 <tt>glewInit()</tt> only once in your program, or more precisely, once per process.</p> <h2>Separate Namespace</h2> <p> 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, <tt>glFancyFunction</tt> is simply an alias to <tt>glewFancyFunction</tt>. The separate namespace does not effect token and function pointer definitions. </p> <h2>Known Issues</h2> <p> GLEW requires GLX 1.2 for compatibility with GLUT. </p> <!-- begin footer.html --> </td></tr></table></body> <!-- end footer.html -->