summaryrefslogtreecommitdiff
path: root/auto/doc/basic.html
blob: 693575ba5a5f055647efb060f4ac51c5cd52e661 (plain)
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<h2>Initializing GLEW</h2>
<p>
First you need to create a valid OpenGL rendering context and call
<tt>glewInit()</tt> to initialize the extension entry points.  If
<tt>glewInit()</tt> returns <tt>GLEW_OK</tt>, the initialization
succeeded and you can use the available extensions as well as core
OpenGL functionality. For example:
</p>

<p class="pre">
#include &lt;GL/glew.h&gt;<br>
#include &lt;GL/glut.h&gt;<br>
...<br>
glutInit(&amp;argc, argv);<br>
glutCreateWindow("GLEW Test");<br>
GLenum err = glewInit();<br>
if (GLEW_OK != err)<br>
{<br>
&nbsp;&nbsp;/* Problem: glewInit failed, something is seriously wrong. */<br>
&nbsp;&nbsp;fprintf(stderr, "Error: %s\n", glewGetErrorString(err));<br>
&nbsp;&nbsp;...<br>
}<br>
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));<br>
</p>

<h2>Checking for Extensions</h2>

<p>
Starting from GLEW 1.1.0, you can find out if a particular extension
is available on your platform by querying globally defined variables
of the form <tt>GLEW_{extension_name}</tt>:
</p>

<p class="pre">
if (GLEW_ARB_vertex_program)<br>
{<br>
&nbsp;&nbsp;/* It is safe to use the ARB_vertex_program extension here. */<br>
&nbsp;&nbsp;glGenProgramsARB(...);<br>
}<br>
</p>

<p>
<b>In GLEW 1.0.x, a global structure was used for this task. To ensure
binary compatibility between releases, the struct was replaced with a
set of variables.</b>
</p>

<p>
You can also check for core OpenGL functionality.  For example, to
see if OpenGL 1.3 is supported, do the following:
</p>

<p class="pre">
if (GLEW_VERSION_1_3)<br>
{<br>
&nbsp;&nbsp;/* Yay! OpenGL 1.3 is supported! */<br>
}<br>
</p>

<p>
In general, you can check if <tt>GLEW_{extension_name}</tt> or
<tt>GLEW_VERSION_{version}</tt> is true or false.
</p>

<p>
It is also possible to perform extension checks from string
input. Starting from the 1.3.0 release, use <tt>glewIsSupported</tt>
to check if the required core or extension functionality is
available:
</p>

<p class="pre">
if (glewIsSupported("GL_VERSION_1_4&nbsp;&nbsp;GL_ARB_point_sprite"))<br>
{<br>
&nbsp;&nbsp;/* Great, we have OpenGL 1.4 + point sprites. */<br>
}<br>
</p>

<p>
For extensions only, <tt>glewGetExtension</tt> provides a slower alternative
(GLEW 1.0.x-1.2.x). <b>Note that in the 1.3.0 release </b>
<tt>glewGetExtension</tt> <b>was replaced with </b>
<tt>glewIsSupported</tt>.
</p>

<p class="pre">
if (glewGetExtension("GL_ARB_fragment_program"))<br>
{<br>
&nbsp;&nbsp;/* Looks like ARB_fragment_program is supported. */<br>
}<br>
</p>

<h2>Experimental Drivers</h2>

<p>
GLEW obtains information on the supported extensions from the graphics
driver.  Experimental or pre-release drivers, however, might not
report every available extension through the standard mechanism, in
which case GLEW will report it unsupported.  To circumvent this
situation, the <tt>glewExperimental</tt> global switch can be turned
on by setting it to <tt>GL_TRUE</tt> before calling
<tt>glewInit()</tt>, which ensures that all extensions with valid
entry points will be exposed.
</p>

<h2>Platform Specific Extensions</h2>

<p>
Platform specific extensions are separated into two header files:
<tt>wglew.h</tt> and <tt>glxew.h</tt>, which define the available
<tt>WGL</tt> and <tt>GLX</tt> extensions.  To determine if a certain
extension is supported, query <tt>WGLEW_{extension name}</tt> or
<tt>GLXEW_{extension_name}</tt>.  For example:
</p>

<p class="pre">
#include &lt;GL/wglew.h&gt;<br>
<br>
if (WGLEW_ARB_pbuffer)<br>
{<br>
&nbsp;&nbsp;/* OK, we can use pbuffers. */<br>
}<br>
else<br>
{<br>
&nbsp;&nbsp;/* Sorry, pbuffers will not work on this platform. */<br>
}<br>
</p>

<p>
Alternatively, use <tt>wglewIsSupported</tt> or
<tt>glxewIsSupported</tt> to check for extensions from a string:
</p>

<p class="pre">
if (wglewIsSupported("WGL_ARB_pbuffer"))<br>
{<br>
&nbsp;&nbsp;/* OK, we can use pbuffers. */<br>
}<br>
</p>

<h2>Utilities</h2>

<p>
GLEW provides two command-line utilities: one for creating a list of
available extensions and visuals; and another for verifying extension
entry points.
</p>

<h3>visualinfo: extensions and visuals</h3>

<p>
<tt>visualinfo</tt> is an extended version of <tt>glxinfo</tt>. The
Windows version creates a file called <tt>visualinfo.txt</tt>, which
contains a list of available OpenGL, WGL, and GLU extensions as well
as a table of visuals aka. pixel formats. Pbuffer and MRT capable
visuals are also included. For additional usage information, type
<tt>visualinfo -h</tt>.
</p>

<h3>glewinfo: extension verification utility</h3>

<p>
<tt>glewinfo</tt> allows you to verify the entry points for the
extensions supported on your platform. The Windows version
reports the results to a text file called <tt>glewinfo.txt</tt>. The
Unix version prints the results to <tt>stdout</tt>.
</p>

<p>Windows usage:</p>
 <blockquote><pre>glewinfo [-pf &lt;id&gt;]</pre></blockquote>

<p>where <tt>&lt;id&gt;</tt> is the pixel format id for which the
capabilities are displayed.</p>

<p>Unix usage:</p>
<blockquote><pre>glewinfo [-display &lt;dpy&gt;] [-visual &lt;id&gt;]</pre></blockquote>

<p>where <tt>&lt;dpy&gt;</tt> is the X11 display and <tt>&lt;id&gt;</tt> is
the visual id for which the capabilities are displayed.</p>