[1648] | 1 | <!-- |
---|
| 2 | Copyright (C) 2002-2005, Milan Ikits <milan ikits[]ieee org> |
---|
| 3 | Copyright (C) 2002-2005, Marcelo E. Magallon <mmagallo[]debian org> |
---|
| 4 | This documentation may not be modified or redistributed in any |
---|
| 5 | form, except by the copyright holder. |
---|
| 6 | --> |
---|
| 7 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd"> |
---|
| 8 | <!-- <img src="new.png" height="12" alt="NEW!"> --> |
---|
| 9 | <html> |
---|
| 10 | <head> |
---|
| 11 | <title> |
---|
| 12 | GLEW: The OpenGL Extension Wrangler Library |
---|
| 13 | </title> |
---|
| 14 | <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> |
---|
| 15 | <link href="glew.css" type="text/css" rel="stylesheet"> |
---|
| 16 | </head> |
---|
| 17 | <body bgcolor="#fff0d0"> |
---|
| 18 | <table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%"> |
---|
| 19 | <tr> |
---|
| 20 | <td bgcolor="#ffffff" align="left" valign="top" width="200"> |
---|
| 21 | <table border="0" width="100%" cellpadding="0" cellspacing="0" align="left"> |
---|
| 22 | <tr> |
---|
| 23 | <td valign="top"> |
---|
| 24 | <table border="0" width="100%" cellpadding="0" cellspacing="0" align="left"> |
---|
| 25 | <tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=327647">1.3.3</a></i></td></tr> |
---|
| 26 | <tr><td align="center"><br></td></tr> |
---|
| 27 | <tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr> |
---|
| 28 | <tr><td align="center"><br></td></tr> |
---|
| 29 | <tr><td align="center"> |
---|
| 30 | <table border="0" cellpadding="0" cellspacing="0" align="center"> |
---|
| 31 | <tr><td align="center"><a href="index.html">Download</a></td></tr> |
---|
| 32 | <tr><td align="center"><a href="install.html">Installation</a></td></tr> |
---|
| 33 | <tr><td align="center"><a href="basic.html">Basic Usage</a></td></tr> |
---|
| 34 | <tr><td align="center"><b>Advanced Usage</b></td></tr> |
---|
| 35 | <tr><td align="center"><a href="credits.html">Credits & Copyright</a></td></tr> |
---|
| 36 | <tr><td align="center"><a href="log.html">Change Log</a></td></tr> |
---|
| 37 | <tr><td align="center"><a href="http://sourceforge.net/projects/glew/">Project Page</a></td></tr> |
---|
| 38 | <tr><td align="center"><a href="https://sourceforge.net/mail/?group_id=67586">Mailing Lists</a></td></tr> |
---|
| 39 | <tr><td align="center"><a href="http://sourceforge.net/tracker/?group_id=67586">Bug Tracker</a></td></tr> |
---|
| 40 | </table> |
---|
| 41 | <tr><td align="center"><br></tr> |
---|
| 42 | </table> |
---|
| 43 | </td> |
---|
| 44 | </tr> |
---|
| 45 | <tr> |
---|
| 46 | <td valign="bottom"> |
---|
| 47 | <table border="0" width="100%" cellpadding="5" cellspacing="0" align="left"> |
---|
| 48 | <tr><td align="center"><i>Last Update: 05-16-05</i></td></tr> |
---|
| 49 | <tr><td align="center"> |
---|
| 50 | <a href="http://www.opengl.org"> <img src="./ogl_sm.jpg" width="68" |
---|
| 51 | height="35" border="0" alt="OpenGL Logo"></a> |
---|
| 52 | <a href="http://sourceforge.net"> <img |
---|
| 53 | src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" |
---|
| 54 | width="88" height="31" border="0" alt="SourceForge Logo"></a> |
---|
| 55 | </td> |
---|
| 56 | </tr> |
---|
| 57 | </table> |
---|
| 58 | </td> |
---|
| 59 | </tr> |
---|
| 60 | </table> |
---|
| 61 | </td> |
---|
| 62 | |
---|
| 63 | <td bgcolor="#ffffff" align="left" valign="top"> |
---|
| 64 | |
---|
| 65 | <h1>The OpenGL Extension Wrangler Library</h1> |
---|
| 66 | |
---|
| 67 | <h2>Automatic Code Generation</h2> |
---|
| 68 | |
---|
| 69 | <p> |
---|
| 70 | Starting from release 1.1.0, the source code and parts of the |
---|
| 71 | documentation are automatically generated from the extension |
---|
| 72 | specifications in a two-step process. In the first step, |
---|
| 73 | specification files from the OpenGL registry are downloaded and |
---|
| 74 | parsed. Skeleton descriptors are created for each extension. These |
---|
| 75 | descriptors contain all necessary information for creating the source |
---|
| 76 | code and documentation in a simple and compact format, including the |
---|
| 77 | name of the extension, url link to the specification, tokens, function |
---|
| 78 | declarations, typedefs and struct definitions. In the second step, |
---|
| 79 | the header files as well as the library and glewinfo source are |
---|
| 80 | generated from the descriptor files. The code generation scripts are |
---|
| 81 | located in the <tt>auto</tt> subdirectory. |
---|
| 82 | </p> |
---|
| 83 | |
---|
| 84 | <p> |
---|
| 85 | The code generation scripts require GNU make, wget, and perl. On |
---|
| 86 | Windows, the simplest way to get access to these tools is to install |
---|
| 87 | <a href="http://www.cygwin.com/">Cygwin</a>, but make sure that the |
---|
| 88 | root directory is mounted in binary mode. The makefile in the |
---|
| 89 | <tt>auto</tt> directory provides the following build targets: |
---|
| 90 | </p> |
---|
| 91 | |
---|
| 92 | <center> |
---|
| 93 | <table border=0 cellpadding=0 cellspacing=0> <!-- bgcolor="#f0f0f0" --> |
---|
| 94 | <tr><td align="right" valign="top" width="25%"><tt>make</tt></td> |
---|
| 95 | <td> </td> |
---|
| 96 | <td align=left>Create the source files from the descriptors. If the |
---|
| 97 | descriptors do not exist, create them from the spec files. If the spec |
---|
| 98 | files do not exist, download them from the OpenGL repository.</td></tr> |
---|
| 99 | <tr><td align="right" valign="top"><tt>make clean</tt></td> |
---|
| 100 | <td> </td> |
---|
| 101 | <td align=left>Delete the source files.</td></tr> |
---|
| 102 | <tr><td align="right" valign="top"><tt>make clobber</tt></td> |
---|
| 103 | <td> </td> |
---|
| 104 | <td align=left>Delete the source files and the descriptors.</td></tr> |
---|
| 105 | <tr><td align="right" valign="top"><tt>make destroy</tt></td> |
---|
| 106 | <td> </td> |
---|
| 107 | <td align=left>Delete the source files, the descriptors, and the spec files.</td></tr> |
---|
| 108 | <tr><td align="right" valign="top"><tt>make custom</tt></td> |
---|
| 109 | <td> </td> |
---|
| 110 | <td align=left>Create the source files for the extensions |
---|
| 111 | listed in <tt>auto/custom.txt</tt>. See "Custom Code |
---|
| 112 | Generation" below for more details.</td></tr> |
---|
| 113 | </table> |
---|
| 114 | </center> |
---|
| 115 | |
---|
| 116 | <h3>Adding a New Extension</h3> |
---|
| 117 | |
---|
| 118 | <p> |
---|
| 119 | To add a new extension, create a descriptor file for the extension in |
---|
| 120 | <tt>auto/core</tt> and rerun the code generation scripts by typing |
---|
| 121 | <tt>make clean; make</tt> in the <tt>auto</tt> directory. |
---|
| 122 | </p> |
---|
| 123 | |
---|
| 124 | <p> |
---|
| 125 | The format of the descriptor file is given below. Items in |
---|
| 126 | brackets are optional. |
---|
| 127 | </p> |
---|
| 128 | |
---|
| 129 | <p class="pre"> |
---|
| 130 | <Extension Name><br> |
---|
| 131 | [<URL of Specification File>]<br> |
---|
| 132 | [<Token Name> <Token Value>]<br> |
---|
| 133 | [<Token Name> <Token Value>]<br> |
---|
| 134 | ...<br> |
---|
| 135 | [<Typedef>]<br> |
---|
| 136 | [<Typedef>]<br> |
---|
| 137 | ...<br> |
---|
| 138 | [<Function Signature>]<br> |
---|
| 139 | [<Function Signature>]<br> |
---|
| 140 | ...<br> |
---|
| 141 | <!-- [<Function Definition>]<br> |
---|
| 142 | [<Function Definition>]<br> |
---|
| 143 | ...<br> --> |
---|
| 144 | </p> |
---|
| 145 | |
---|
| 146 | <!-- |
---|
| 147 | <p> |
---|
| 148 | Note that <tt>Function Definitions</tt> are copied to the header files |
---|
| 149 | without changes and have to be terminated with a semicolon. In |
---|
| 150 | contrast, <tt>Tokens</tt>, <tt>Function signatures</tt>, and |
---|
| 151 | <tt>Typedefs</tt> should not be terminated with a semicolon. |
---|
| 152 | </p> |
---|
| 153 | --> |
---|
| 154 | |
---|
| 155 | <p> |
---|
| 156 | Take a look at one of the files in <tt>auto/core</tt> for an |
---|
| 157 | example. Note that typedefs and function signatures should not be |
---|
| 158 | terminated with a semicolon. |
---|
| 159 | </p> |
---|
| 160 | |
---|
| 161 | <h3>Custom Code Generation</h3> |
---|
| 162 | <p> |
---|
| 163 | Starting from GLEW 1.3.0, it is possible to control which extensions |
---|
| 164 | to include in the libarary by specifying a list in |
---|
| 165 | <tt>auto/custom.txt</tt>. This is useful when you do not need all the |
---|
| 166 | extensions and would like to reduce the size of the source files. |
---|
| 167 | Type <tt>make clean; make custom</tt> in the <tt>auto</tt> directory |
---|
| 168 | to rerun the scripts with the custom list of extensions. |
---|
| 169 | </p> |
---|
| 170 | |
---|
| 171 | <p> |
---|
| 172 | For example, the following is the list of extensions needed to get GLEW and the |
---|
| 173 | utilities to compile. |
---|
| 174 | </p> |
---|
| 175 | |
---|
| 176 | <p class="pre"> |
---|
| 177 | WGL_ARB_extensions_string<br> |
---|
| 178 | WGL_ARB_multisample<br> |
---|
| 179 | WGL_ARB_pixel_format<br> |
---|
| 180 | WGL_ARB_pbuffer<br> |
---|
| 181 | WGL_EXT_extensions_string<br> |
---|
| 182 | WGL_ATI_pixel_format_float<br> |
---|
| 183 | WGL_NV_float_buffer<br> |
---|
| 184 | </p> |
---|
| 185 | |
---|
| 186 | <h2>Multiple Rendering Contexts (GLEW MX)</h2> |
---|
| 187 | |
---|
| 188 | <p>Starting with release 1.2.0, thread-safe support for multiple |
---|
| 189 | rendering contexts, possibly with different capabilities, is |
---|
| 190 | available. Since this is not required by most users, it is not added |
---|
| 191 | to the binary releases to maintain compatibility between different |
---|
| 192 | versions. To include multi-context support, you have to do the |
---|
| 193 | following:</p> |
---|
| 194 | <ol> |
---|
| 195 | <li>Compile and use GLEW with the <tt>GLEW_MX</tt> preprocessor token |
---|
| 196 | defined.</li> |
---|
| 197 | <li>For each rendering context, create a <tt>GLEWContext</tt> object |
---|
| 198 | that will be available as long as the rendering context exists.</li> |
---|
| 199 | <li>Define a macro or function called <tt>glewGetContext()</tt> that |
---|
| 200 | returns a pointer to the <tt>GLEWContext</tt> object associated with |
---|
| 201 | the rendering context from which OpenGL/WGL/GLX calls are issued. This |
---|
| 202 | dispatch mechanism is primitive, but generic. |
---|
| 203 | <li>Make sure that you call <tt>glewInit()</tt> after creating the |
---|
| 204 | <tt>GLEWContext</tt> object in each rendering context. Note, that the |
---|
| 205 | <tt>GLEWContext</tt> pointer returned by <tt>glewGetContext()</tt> has |
---|
| 206 | to reside in global or thread-local memory. |
---|
| 207 | </ol> |
---|
| 208 | |
---|
| 209 | <p>Note that according to the <a |
---|
| 210 | href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/ntopnglr_6yer.asp">MSDN |
---|
| 211 | WGL documentation</a>, you have to initialize the entry points for |
---|
| 212 | every rendering context that use pixel formats with different |
---|
| 213 | capabilities For example, the pixel formats provided by the generic |
---|
| 214 | software OpenGL implementation by Microsoft vs. the hardware |
---|
| 215 | accelerated pixel formats have different capabilities. <b>GLEW by |
---|
| 216 | default ignores this requirement, and does not define per-context |
---|
| 217 | entry points (you can however do this using the steps described |
---|
| 218 | above).</b> Assuming a global namespace for the entry points works in |
---|
| 219 | most situations, because typically all hardware accelerated pixel |
---|
| 220 | formats provide the same entry points and capabilities. This means |
---|
| 221 | that unless you use the multi-context version of GLEW, you need to |
---|
| 222 | call <tt>glewInit()</tt> only once in your program, or more precisely, |
---|
| 223 | once per process.</p> |
---|
| 224 | |
---|
| 225 | <h2>Separate Namespace</h2> |
---|
| 226 | |
---|
| 227 | <p> |
---|
| 228 | To avoid name clashes when linking with libraries that include the |
---|
| 229 | same symbols, extension entry points are declared in a separate |
---|
| 230 | namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL |
---|
| 231 | function names to their GLEW equivalents. For instance, |
---|
| 232 | <tt>glFancyFunction</tt> is simply an alias to |
---|
| 233 | <tt>glewFancyFunction</tt>. The separate namespace does not effect |
---|
| 234 | token and function pointer definitions. |
---|
| 235 | </p> |
---|
| 236 | |
---|
| 237 | <h2>Known Issues</h2> |
---|
| 238 | |
---|
| 239 | <p> |
---|
| 240 | GLEW requires GLX 1.2 for compatibility with GLUT. |
---|
| 241 | </p> |
---|
| 242 | |
---|
| 243 | </td> |
---|
| 244 | </tr> |
---|
| 245 | |
---|
| 246 | </table> |
---|
| 247 | |
---|
| 248 | </body> |
---|