1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
<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>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>
|