glew-cmake/doc/README.html

612 lines
18 KiB
HTML
Raw Normal View History

<!--
Copyright (C) 2003, 2002, Milan Ikits <milan.ikits@ieee.org>
Copyright (C) 2003, 2002, Marcelo E. Magallon <mmagallo@debian.org>
This documentation may not be modified or redistributed in any
form, except by the copyright holder.
-->
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/TR/html/4/loose.dtd">
<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">
<center>
<table border=0 width="60%" cellpadding="5" cellspacing="5">
<tr>
<td bgcolor="#ffffff" align=center><br><p><img src="./glew.png" alt="glew" width="97" height="75">
<p>
<h1>The OpenGL Extension Wrangler Library</h1>
<p>
<table border=0 cellpadding=0 cellspacing=0 align=center>
<tr><td align=center><a href="#Introduction"><small>Introduction</small></a></td></tr>
<tr><td align=center><a href="#Download"><small>Obtaining GLEW</small></a></td></tr>
<tr><td align=center><a href="#Supported"><small>Supported Extensions</small></a></td></tr>
<tr><td align=center><a href="#Build"><small>How to Build Your Project with GLEW</small></a></td></tr>
<tr><td align=center><a href="#Install"><small>How to Install GLEW</small></a></td></tr>
<tr><td align=center><a href="#Use"><small>How to Use GLEW</small></a></td></tr>
<tr><td align=center><a href="#Utilities"><small>Utilities</small></a></td></tr>
<tr><td align=center>
<a href="#Auto"><small>Automatic Code Generation</small></a>
</td></tr>
<tr><td align=center>
<a href="#Namespace"><small>Separate Namespace</small></a>
</td></tr>
<tr><td align=center><a href="#Issues"><small>Known Issues</small></a></td></tr>
<tr><td align=center><a href="#Credits"><small>Credits, Copyright</small></a></td></tr>
<tr><td align=center><a href="#Log"><small>Change Log</small></a></td></tr>
<tr><td align=center><a href="http://sourceforge.net/tracker/?group_id=67586">
<tr><td align=center><br></td></tr>
</table>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Introduction"><h2>Introduction</h2></a></center>
<p>
The goal of the OpenGL Extension Wrangler Library (GLEW) is to assist
C/C++ OpenGL developers with two tedious tasks: initializing and
using extensions and writing portable applications. GLEW provides
an efficient run-time mechanism to determine whether a certain
extension is supported by the driver or not. OpenGL core and
extension functionality is exposed via a single header file. GLEW
currently supports SGI systems and PCs with commodity graphics cards
on three operating systems: Windows, Linux, and IRIX.
<p>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Download"><h2>Obtaining GLEW</h2></a></center>
<p>
Source and precompiled binaries are available at the <a
href="http://glew.sourceforge.net/">project website</a>.
<p>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Supported"><h2>Supported Extensions</h2></a></center>
<p>
GLEW currently supports the following extensions:
<ul>
<li><a href="glew.html">OpenGL extensions</a>
<li><a href="wglew.html">WGL extensions</a>
<li><a href="glxew.html">GLX extensions</a>
</ul>
<p>
Useful links about OpenGL extensions:
<ul>
<li><a
href="http://www.opengl.org/developers/code/features/OGLextensions/OGLextensions.html">
All About OpenGL Extensions</a>
<li><a href="http://oss.sgi.com/projects/ogl-sample/registry/">OpenGL Extension Registry</a>
<li><a
href="http://www.ati.com/developer/sdk/radeonSDK/html/info/Prog3D.html">ATI
OpenGL Extension Specifications</a>
<li><a
href="http://developer.nvidia.com/view.asp?IO=nvidia_opengl_specs">NVIDIA
OpenGL Extension Specifications</a>
</ul>
<p>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Build"><h2>How to Build Your Project with GLEW</h2></a></center>
<p>
There are two ways to build your project with GLEW.
<p>
<h3>Including the source files / project file</h3>
<p>
The simpler but less flexible way is to include <tt>glew.h</tt> and
<tt>glew.c</tt> into your project and define the <tt>GLEW_STATIC</tt>
preprocessor constant for the static library or executable you are
building together with GLEW (Windows only). You also need to replace
<tt>&lt;GL/gl.h&gt;</tt> and <tt>&lt;GL/glu.h&gt;</tt> with
<tt>&lt;glew.h&gt;</tt> in your code and set the appropriate include
flag (<tt>-I</tt>) to tell the compiler where to look for it. For
example:
<blockquote><pre>#include &lt;glew.h&gt;
#include &lt;GL/glut.h&gt;
&lt;gl, glu, and glut functionality is available here&gt;
</pre></blockquote>
Depending on where you put <tt>glew.h</tt> you may also need to change
the include directives in <tt>glew.c</tt>. Note that if you are using
GLEW together with GLUT, you have to include <tt>glew.h</tt> first.
In addition, <tt>glew.h</tt> includes <tt>glu.h</tt>, so you don't
need to include it separately.
<p>
On Windows you also have the option of adding the supplied project
file <tt>glew_static.dsp</tt> to your workspace (solution) and compile
it together with your other projects. In this case you need to change
the <tt>GLEW_BUILD</tt> preprocessor constant to <tt>GLEW_STATIC</tt>,
otherwise you get build errors. <b>Note that GLEW does not use the C
runtime library, so it does not matter which version (single-threaded,
multi-threaded or multi-threaded DLL) it is linked with (without
debugging information). It is, however, always a good idea to compile all
your projects including GLEW with the same C runtime settings.</b>
<p>
<h3>Using GLEW as a shared library</h3>
<p>
Alternatively, you can use the provided project files / makefile to
build a separate shared library you can link your projects with later.
In this case the best practice is to install <tt>glew.h</tt>,
<tt>glew32.lib</tt>, and <tt>glew32.dll</tt> / <tt>libGLEW.so</tt> to
where the OpenGL equivalents <tt>gl.h</tt>, <tt>opengl32.lib</tt>, and
<tt>opengl32.dll</tt> / <tt>libGL.so</tt> are located. Note that you
need administrative privileges to do this. If you do not have
administrator access and your system administrator will not do it for
you, you can install GLEW into your own lib and include subdirectories
and tell the compiler where to find it. Then you can just replace
<tt>&lt;GL/gl.h&gt;</tt> with <tt>&lt;GL/glew.h&gt;</tt> in your
program:
<blockquote><pre>#include &lt;GL/glew.h&gt;
#include &lt;GL/glut.h&gt;
&lt;gl, glu, and glut functionality is available here&gt;
</pre></blockquote>
or:
<blockquote><pre>#include &lt;GL/glew.h&gt;
&lt;gl and glu functionality is available here&gt;
</pre></blockquote>
<p>
Don't forget to link your project with <tt>glew32.lib</tt>,
<tt>glu32.lib</tt>, and <tt>opengl32.lib</tt> on Windows and
<tt>libGLEW.so</tt>, <tt>libGLU.so</tt>, and <tt>libGL.so</tt> on
Linux and IRIX (<tt>-lGLEW -lGLU -lGL</tt>).
<p>
It is important to keep in mind that <tt>glew.h</tt> includes neither
<tt>windows.h</tt> nor <tt>gl.h</tt>. Also, GLEW will warn you by
issuing a preprocessor error in case you have included <tt>gl.h</tt>,
<tt>glext.h</tt>, or <tt>glATI.h</tt> before <tt>glew.h</tt>.
<p>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Install"><h2>How to Install GLEW</h2></a></center>
<p>
To install the shared library version of GLEW you need to copy the
headers and libraries into their destination directories. On Windows
this boils down to copying (no, we will not write a Windows installer
for you).
<p>
<center>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td><tt>lib/glew32.dll</tt></td><td>&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><tt>%SystemRoot%/system32</tt></td></tr>
<tr><td><tt>lib/glew32.lib</tt></td><td>&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><tt>{VC Root}/Lib</tt></td></tr>
<tr><td><tt>include/GL/glew.h</tt></td><td>&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><tt>{VC Root}/Include/GL</tt></td></tr>
<tr><td><tt>include/GL/wglew.h</tt></td><td>&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><tt>{VC Root}/Include/GL</tt></td></tr>
</table>
</center>
<p>
where <tt>{VC Root}</tt> is your Visual C++ directory, typically
<tt>C:/Program Files/Microsoft Visual Studio/VC98</tt> for Visual
Studio 6.0 or <tt>C:/Program Files/Microsoft Visual
Studio/Vc7/PlatformSDK</tt> for Visual Studio .NET.
<p>
On Linux and IRIX, typing <tt>"make install"</tt> will attempt to install GLEW
into <tt>/usr/include/GL</tt> and <tt>/usr/lib</tt>. You can
customize the installation target via the <tt>GLEW_DEST</tt>
environment variable if you do not have write access
to these directories.
<p>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Use"><h2>How to Use GLEW</h2></a></center>
<p>
<h3>Initializing GLEW</h3>
<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:
<blockquote><pre>#include &lt;GL/glew.h&gt;
#include &lt;GL/glut.h&gt;
...
glutInit(&amp;argc, argv);
glutCreateWindow("GLEW Test");
GLenum err = glewInit();
if (GLEW_OK != err)
{
/* problem: glewInit failed, something is seriously wrong */
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
...
}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
</pre></blockquote>
<p>
<h3>Querying the available OpenGL extensions</h3>
<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>:
<blockquote><pre>if (GLEW_ARB_vertex_program)
{
/* it is safe to use the ARB_vertex_program extension here */
glGenProgramsARB(...);
}
</pre></blockquote>
<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>
You can also check for core OpenGL functionality. For example, to
see if OpenGL 1.3 is supported:
<blockquote><pre>if (GLEW_VERSION_1_3)
{
/* Yay! OpenGL 1.3 is supported! */
}
</pre></blockquote>
In general, you can check if <tt>GLEW_{extension_name}</tt> or
<tt>GLEW_VERSION_{version}</tt> is set or not.
<p>
For extensions <tt>glewGetExtension</tt> provides a slower alternative:
<blockquote><pre>if (GL_TRUE == glewGetExtension("GL_ARB_fragment_program"))
{
/* Looks like ARB_fragment_program is supported. */
}
</pre></blockquote>
<p>
<h3>Experimental drivers</h3>
<p>
GLEW works by querying the supported extensions from the graphics
driver. Experimental 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>. This makes
sure that all extensions with valid entry points will be exposed.
<p>
<h3>Platform specific extensions</h3>
<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:
<blockquote><pre>#include &lt;GL/wglew.h&gt;
if (WGLEW_ARB_pbuffer)
{
/* OK, we can use pbuffers */
}
else
{
/* Sorry, pbuffers will not work on this platform */
}
</pre></blockquote>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Utilities"><h2>Utilities</h2></a></center>
<p>
GLEW provides two command line tools: one for creating a list of
available extensions and visuals; and another for verifying extension
entry points.
<p>
<h3>wglinfo: extensions and visuals on Windows</h3>
<p>
<tt>wglinfo</tt> is the Windows version of <tt>glxinfo</tt>. By
default it creates a file called <tt>wglinfo.txt</tt> that contains a
list of available OpenGL, WGL, and GLU extensions as well as a table
of visuals aka. pixel formats. Pbuffer and multiple output capable
visuals are also included. The format of the table is described <a
href="wglinfo.txt">here</a>. For additional usage information, type
<tt>wglinfo -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. It uses GLEW to find out which
extensions and entry points are available. On Windows it reports the
results to a text file called <tt>glewinfo.txt</tt>, on Linux and IRIX
it prints them to <tt>stdout</tt>.
<p>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Auto"><h2>Automatic Code Generation</h2></a></center>
<p>
Starting from release 1.1.0, the source code and parts of the
documentation are automatically generated from the extension
specifications via a two-step process. In the first step,
specification files from the OpenGL registry are parsed and 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, 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>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Namespace"><h2>Separate Namespace</h2></a></center>
<p>
To avoid name clashes when linking with libraries that include the
same symbol, 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>. Note that the separate namespace doesn't
effect token and function pointer definitions.
<p>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Issues"><h2>Known Issues</h2></a></center>
<p>
GLEW requires GLX 1.2 to assure compatibility with GLUT. In addition,
the SGI GLX video extensions are currently not supported.
<p>
Note that according to <a
href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/ntopnglr_6yer.asp">WGL documentation</a> you have to initialize the entry points
for every rendering context you create. <b>GLEW ignores this
requirement, and does not define per-context entry points.</b> This means
that you need to call <tt>glewInit()</tt> only once in your program,
or more precisely, once per process. We have not noticed any problems
so far from ignoring the specification.
<p>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Credits"><h2>Credits, Copyright</h2></a></center>
<p>
GLEW was developed by Milan Ikits and Marcelo Magallon. They also
perform occasional maintainance to make sure that GLEW stays in mint
condition. Aaron Lefohn, Joe Kniss, and Chris Wyman were the first
users and also assisted with the design and debugging process. The
acronym GLEW originates from Aaron Lefohn. Pasi K&auml;rkk&auml;inen
identified and fixed several problems with GLX and SDL. The RPM
packages are maintained by Karol Pietrzak. Nate Robins created the
<tt>wglinfo</tt> utility, to which modifications were added by Michael
Wimmer.
<p>
<p>
GLEW is originally derived from the <a
href="http://www.levp.de/3d/">EXTGL</a> project by Lev Povalahev. The
source code is licensed under the modified BSD license, the <a
href="sgi.txt">SGI Free Software License B</a>, and the <a
href="glx.txt">GLX Public License</a>. The automatic code
generation scripts are released under the <a href="gpl.txt">GPL</a>.
<blockquote><pre></pre></blockquote>
</td>
</tr>
<tr><td bgcolor="#fff0d0" align="center"></td></tr>
<tr>
<td bgcolor="#ffffff">
<center><a name="Log"><h2>Change Log</h2></a></center>
<p>
<ul class="none">
<li><b>1.1.4</b> [12-15-03]
<ul>
<li> Added GL_APPLE_float_pixels, GL_EXT_texture_cube_map,
GL_EXT_texture_edge_clamp, GLX_ATI_pixel_format_float, and
GLX_ATI_render_texture
<li> Bug fixes
</ul>
<li><b>1.1.3</b> [10-28-03]
<ul>
<li> Added Solaris and Darwin support
<li> Added GL_ARB_fragment_shader, GL_ARB_shader_objects, and
GL_ARB_vertex_shader
<li> Fixed bug in GL_WIN_swap_hint
<li> Removed <tt>glewinfo</tt>'s dependency on <tt>GLUT</tt>
</ul>
<p>
<li><b>1.1.2</b> [09-15-03]
<ul>
<li> Removed dependency on WGL_{ARB,EXT}_extensions_string
<li> Added glewGetString for querying GLEW version string
</ul>
<p>
<li><b>1.1.1</b> [08-11-03]
<ul>
<li> Added GLX_NV_float_buffer
<li> Fixed bug in GL_ARB_vertex_buffer_object
<li> Minor updates in documentation
</ul>
<p>
<li><b>1.1.0</b> [07-08-03]
<ul>
<li> Added automatic code generation
<li> Added almost every extension in the registry
<li> Added separate namespace
<li> Added IRIX support
<li> Updated documentation
</ul>
<p>
<li><b>1.0.7</b> [06-29-03]
<ul>
<li> Added GL_EXT_depth_bounds_test
<li> Fixed typos
</ul>
<p>
<li><b>1.0.6</b> [05-05-03]
<ul>
<li> Added ARB_vertex_buffer_object and NV_half_float
<li> Updated <tt>wglinfo</tt>
<li> Temporary Linux bug fixes (problems with SDL and MESA)
</ul>
<p>
<li><b>1.0.5</b> [02-17-03]
<ul>
<li> Bug fixes
<li> Added <tt>wglinfo</tt>
<li> Updated documentation
</ul>
<p>
<li><b>1.0.4</b> [02-02-03]
<ul>
<li> Added NV_texture_expand_normal
<li> Added mingw support
<li> Updated documentation
</ul>
<p>
<li><b>1.0.3</b> [01-09-03]
<ul>
<li> Cleaned up ATI extensions
<li> Changed function prototypes to match glext.h
<li> Added EXT_texture3D
<li> Fixed typos in ATI_vertex_attrib_array_object and ATI_draw_buffers
</ul>
<p>
<li><b>1.0.2</b> [12-21-02]
<ul>
<li> Added list of supported extensions to documentation
<li> Added NV_half_float and NV_texgen_emboss
</ul>
<p>
<li><b>1.0.1</b> [12-17-02]
<ul>
<li> Bug fixes
<li> Added glewGetExtension
</ul>
<p>
<li><b>1.0.0</b> [12-12-02]
<ul>
<li> Initial release
</ul>
</ul>
</td>
</tr>
<tr>
<td bgcolor="#FFF0D0">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="right">
<i>Last update: 12-15-03</i></td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</body>