• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?php
2$static_title = 'OpenGL&reg; Application Binary Interface for Linux';
3$static_breadcrumb = array(
4    '/registry/' => 'Registry',
5    '/registry/OpenGL' => 'OpenGL',
6    'NOLINK' => 'ABI'
7);
8include_once("../../../assets/static_pages/khr_page_top.php");
9?>
10
11
12<h1 style="text-align:center">
13    OpenGL&reg; Application Binary Interface for Linux (OBSOLETE) <br/>
14    <span style="font-size:12px"> (formerly Linux/OpenGL Base) </span>
15</h1>
16
17<p> <b>NOTE:</b> this document is extremely old and of no relevance to modern
18    Linux systems, where the ABI is de-facto defined by the
19    <a href="https://docs.mesa3d.org/precompiled.html">Mesa libraries</a> as
20    shipped by distribution vendors. </p>
21
22<p style="text-align:center">Version 1.0<br/>
23   Approved June 20, 2000<br/>
24   Editor: Jon Leech, SGI </p>
25
26<hr/>
27
28<h6>Latest News</h6>
29
30<p> Version 1.0 is complete. It was approved on June 20, 2000; all
31    submitted votes were in favor. </p>
32
33<hr/>
34
35<h6>Index</h6>
36
37    <ul>
38    <li><a href="#1">1. Overview and Goals </a></li>
39    <li><a href="#2">2. Calling Conventions</a></li>
40    <li><a href="#3">3. Libraries</a></li>
41    <li><a href="#4">4. Header Files</a></li>
42    <li><a href="#5">5. Extension Headers</a></li>
43    <li><a href="#6">6. Feedback and Mailing Lists</a></li>
44    <li><a href="#app">Appendix: Open Issues</a></li>
45    <li><a href="#log">Change Log</a></li>
46    </ul>
47
48<p> <a name="1"></a></p>
49<h6>1. Overview and Goals </h6>
50
51<p> 1.1. This document is intended to solve two related problems. First,
52    defining the ABI and runtime environment for applications using
53    OpenGL under X11 on Linux. This will enable applications using the
54    OpenGL API for rendering to run on a variety of underlying
55    implementations transparently. The intent is to address all of open
56    source, commercial closed binary, OpenGL SI-based, and Mesa-based
57    implementations. </p>
58
59<p> Second, defining the SDK for developing apps using OpenGL. This
60    includes header file locations, conventions for use of extensions,
61    etc. </p>
62
63<p> It has similar goals to the <a href="https://www.linuxbase.org">Linux
64    Standard Base</a>, but focused much
65    more narrowly: on the OpenGL API. Representatives from LSB are
66    involved and ultimately this effort should be part of LSB. </p>
67
68<p> We do not exactly track all LSB practice (particularly naming
69    conventions for libraries) because LSB itself is not complete, and
70    because existing practice with other OpenGL implementations suggests
71    preferred methods which may differ from LSB. </p>
72
73<p> 1.2. Things we do <b>not</b> attempt to address include: </p>
74
75    <ul>
76    <li> Internal implementation dependent issues - details of direct
77        rendering, loadable driver modules, etc. Such details are
78        hidden from the public interfaces by the implementation,
79        and are irrelevant to applications using the ABI. </li>
80    <li> Operating systems other than Linux. Other platforms such as BSD
81        are welcome to use whatever comes out of this project, but we
82        are explicitly not trying to solve this problem for every free
83        OS in the world. </li>
84    <li> Changes to the OpenGL API. The definition of OpenGL is
85        controlled by the OpenGL Architecture Review Board, and we in no
86        way challenge this. A single GLX extension is required; this
87        extension has already been approved by the ARB. </li>
88    <li> Use of 3D outside the X11/GLX context. There are a variety of
89        approaches (fxMesa, GGI, etc.) that again are welcome to use
90        relevant parts of this project, but whose support is not part of
91        its goals. </li>
92    </ul>
93
94<p> 1.3. We believe all critical decisions have been made. Some
95    remaining comments (previously identified as open issues) of
96    interest are identified in the <a href="#app">appendix</a>. We
97    recognize that some decisions are largely arbitrary (filenames and
98    file locations, for example) and in those cases have been guided by
99    existing practice (<i>in other words, complaining about arbitrary
100    decisions is unlikely to change them</i>). </p>
101
102<p> 1.4. Participants in this effort to date include people working at
103    or involved with the following companies and open source projects
104    (as well as a large number of individuals with unknown
105    affiliations): </p>
106
107    <blockquote>
108    3Dfx, Alias/Wavefront, Apple, Avid, Compaq, Debian, HP, IBM, Intel,
109    Linux Standard Base, Loki Games, Mesa, Metro Link, NVIDIA, Nichimen,
110    Parametric Technology Corporation, Precision Insight, SGI, Sharp
111    Eye, Sun, XFree86, Xi Graphics.</blockquote>
112
113<p> <a name="2"></a></p>
114<h6>2. Calling Conventions</h6>
115
116<p> 2.1. OpenGL already includes its own datatypes (<tt>GLint,
117    GLshort,</tt> etc.) used in the API. Guaranteed minimum sizes are
118    stated (see table 2.2 of the OpenGL 1.2 Specification), but the
119    actual choice of C datatype is left to the implementation. For our
120    purposes, however, all implementations on a given binary
121    architecture must have common definitions of these datatypes. </p>
122
123<p> For the IA32 architecture, the definitions should be: </p>
124
125<table border="1" class="center-table">
126    <tr><td>GL datatype</td>
127        <td>Description</td>
128        <td>gcc equivalent for IA32</td></tr>
129    <tr><td><tt>GLboolean</tt></td>
130        <td>8-bit boolean</td>
131        <td><tt>unsigned char</tt></td></tr>
132    <tr><td><tt>GLbyte</tt></td>
133        <td>signed 8-bit 2's-complement integer</td>
134        <td><tt>signed char</tt></td></tr>
135    <tr><td><tt>GLubyte</tt></td>
136        <td>unsigned 8-bit integer</td>
137        <td><tt>unsigned char</tt></td></tr>
138    <tr><td><tt>GLshort</tt></td>
139        <td>signed 16-bit 2's-complement integer</td>
140        <td><tt>short</tt></td></tr>
141    <tr><td><tt>GLushort</tt></td>
142        <td>unsigned 16-bit integer</td>
143        <td><tt>unsigned short</tt></td></tr>
144    <tr><td><tt>GLint</tt></td>
145        <td>signed 32-bit 2's-complement integer</td>
146        <td><tt>int</tt></td></tr>
147    <tr><td><tt>GLuint</tt></td>
148        <td>unsigned 32-bit integer</td>
149        <td><tt>unsigned int</tt></td></tr>
150    <tr><td><tt>GLsizei</tt></td>
151        <td>non-negative 32-bit binary integer size</td>
152        <td><tt>int</tt></td></tr>
153    <tr><td><tt>GLenum</tt></td>
154        <td>enumerated 32-bit value</td>
155        <td><tt>unsigned int</tt></td></tr>
156    <tr><td><tt>GLbitfield</tt></td>
157        <td>32 bit bitfield</td>
158        <td><tt>unsigned int</tt></td></tr>
159    <tr><td><tt>GLfloat</tt></td>
160        <td>32-bit IEEE754 floating-point</td>
161        <td><tt>float</tt></td></tr>
162    <tr><td><tt>GLclampf</tt></td>
163        <td>Same as GLfloat, but in range [0, 1]</td>
164        <td><tt>float</tt></td></tr>
165    <tr><td><tt>GLdouble</tt></td>
166        <td>64-bit IEEE754 floating-point</td>
167        <td><tt>double</tt></td></tr>
168    <tr><td><tt>GLclampd</tt></td>
169        <td>Same as GLdouble, but in range [0, 1]</td>
170        <td><tt>double</tt></td></tr>
171</table>
172
173<p> <a href="#issue2.1">Issues</a></p>
174
175<p> 2.2. Assembly-level call conventions must be shared. Since the
176    OpenGL implementation may use C++ code internally (e.g. for GLU),
177    this is potentially a serious problem. Static linking of C++
178    libraries used by OpenGL libraries may be required of the
179    implementation (also see the <a href="#3">Libraries</a> section
180    below). </p>
181
182<p> <a href="#issue2.2">Issues</a> </p>
183
184<p> <a name="3"></a></p>
185<h6>3. Libraries</h6>
186
187<p> 3.1. There are two link-level libraries. <tt>libGL</tt> includes the
188    OpenGL and GLX entry points and in general depends on underlying
189    hardware and/or X server dependent code that may or may not be
190    incorporated into this library. <tt>libGLU</tt> includes the GLU
191    utility routines and should be hardware independent, using only the
192    OpenGL API. </p>
193
194<p> Each library has two names: the link name used
195    on the ld command line, and the <tt>DT_SONAME</tt> within that
196    library (specified by the <i>-soname</i> switch when linking the
197    library), defining where it's looked up at runtime. Both forms must
198    exist so that both linking and running will operate properly. The
199    library names are: </p>
200
201<table cellspacing="1" border="1" class="center-table">
202    <tr><td>Link name</td>
203        <td>Runtime name (<tt>DT_SONAME</tt>)</td>
204    </tr>
205    <tr><td><tt>libGL.so<tt></td>
206        <td><tt>libGL.so.1<tt></td>
207    </tr>
208    <tr><td><tt>libGLU.so<tt></td>
209        <td><tt>libGLU.so.1<tt></td>
210    </tr>
211</table>
212
213<p> <tt>libGL.so</tt> and <tt>libGLU.so</tt> should
214    be symbolic links pointing to the runtime names, so that
215    future versions of the standard can be implemented transparently
216    to applications by changing the link. </p>
217
218<p> <a href="#issue3.1">Issues</a> </p>
219
220<p> 3.2. These libraries must be located in <tt>/usr/lib</tt>. The
221    X-specific library direction (<tt>/usr/lib/X11</tt>) was also
222    considered, but existing practice on Linux and other platforms
223    indicates that <tt>/usr/lib</tt> is preferable. </p>
224
225<p> <a href="#issue3.2">Issues</a>
226
227<p> 3.3. C++ runtime environments are likely to be incompatible
228    cross-platform, including both the standard C++ library location and
229    entry points, and the semantics of issues such as static
230    constructors and destructors. The LSB apparently mandates static
231    linking of libraries which aren't already in LSB, but this could
232    lead to problems with multiple C++ RTLs present in the same app
233    using C++. We'll have to tread carefully here until this issue
234    is more completely understood. </p>
235
236<p> <a href="#issue3.3">Issues</a> </p>
237
238<p> 3.4. The libraries must export all OpenGL 1.2,
239    GLU 1.3, GLX 1.3, and <tt>ARB_multitexture</tt> entry points
240    statically. </p>
241
242<p> It's possible (but unlikely) that additional ARB or vendor
243    extensions will be mandated before the ABI is finalized.
244    Applications should not expect to link statically against any entry
245    points not specified here. </p>
246
247<p> 3.5. Because non-ARB extensions vary so widely and are constantly
248    increasing in number, it's infeasible to require that they all be
249    supported, and extensions can always be added to hardware drivers
250    after the base link libraries are released. These drivers are
251    dynamically loaded by <tt>libGL</tt>, so extensions not in the base
252    library must also be obtained dynamically. </p>
253
254<p> 3.6. To perform the dynamic query,
255    <tt>libGL</tt> also must export an entry point called </p>
256
257    <blockquote>
258        <tt>void (*glXGetProcAddressARB(const GLubyte *))();</tt>
259    </blockquote>
260
261<p> The <a href="https://registry.khronos.org/OpenGL/extensions/ARB/GLX_ARB_get_proc_address.txt">full specification</a>
262    of this function is available separately. It takes the string name
263    of a GL or GLX entry point and returns a pointer to a function
264    implementing that entry point. It is functionally identical to the
265    <tt>wglGetProcAddress</tt> query defined by the Windows OpenGL
266    library, except that the function pointers returned are <i>context
267    independent</i>, unlike the WGL query. </p>
268
269<p> All OpenGL and GLX entry points may be queried with this extension;
270    GLU extensions cannot, because GLU is a client-side library that
271    cannot easily be extended. </p>
272
273<p> <a href="#issue3.6">Issues</a> </p>
274
275<p> 3.7. Thread safety (the ability to issue OpenGL calls to different
276    graphics contexts from different application threads) is required.
277    Multithreaded applications must use <b>-lpthread</b>. </p>
278
279<p> 3.8. <tt>libGL</tt> and <tt>libGLU</tt> must be
280    transitively linked with any libraries they require in their own
281    internal implementation, so that applications don't fail on some
282    implementations due to not pulling in libraries needed not by the
283    app, but by the implementation. </p>
284
285<p> <a name="4"></a></p>
286<h6>4. Header Files</h6>
287
288<p> 4.1. The following header files are required: </p>
289
290    <ul>
291    <li> <tt>&lt;GL/gl.h&gt;</tt> - OpenGL </li>
292    <li> <tt>&lt;GL/glx.h&gt;</tt> - GLX </li>
293    <li> <tt>&lt;GL/glu.h&gt;</tt> - GLU </li>
294    <li> <tt>&lt;GL/glext.h&gt;</tt> - OpenGL Extensions </li>
295    <li> <tt>&lt;GL/glxext.h&gt;</tt> - GLX Extensions </li>
296    </ul>
297
298<p> These headers should properly define prototypes and enumerants for
299    use by applications written in either C or C++. Other language
300    bindings are not addressed at this time. </p>
301
302<p> 4.2. These header files must be located in <tt>/usr/include/GL</tt>.
303    <tt>/usr/include/X11/GL</tt> was considered and rejected for the
304    same reasons as library locations in section 3.2 above. </p>
305
306<p> 4.3. The required headers must not pull in
307    internal headers or headers from other packages where that would
308    cause unexpected namespace pollution (for example, on IRIX
309    <tt>glx.h</tt> pulls in <tt>&lt;X11/Xmd.h&gt;</tt>). Likewise the
310    required headers must be protected against multiple inclusion and
311    should not themselves include any headers that are not so protected.
312    However, <tt>glx.h</tt> is allowed to include
313    <tt>&lt;X11/Xlib.h&gt;</tt> and <tt>&lt;X11/Xutil.h&gt;</tt>. </p>
314
315<p> 4.4. <tt>glx.h</tt> must include the prototype of the
316    <tt>glXGetProcAddressARB</tt> extension described above. </p>
317
318<p> 4.5. All OpenGL 1.2 and <tt>ARB_multitexture</tt>, GLU 1.3, and GLX
319    1.3 entry points and enumerants must be present in the corresponding
320    header files <tt>gl.h</tt>, <tt>glu.h</tt>, and <tt>glx.h</tt>,
321    <b>even if</b> only OpenGL 1.1 is implemented at runtime by the
322    associated runtime libraries. </p>
323
324<p> <a href="#issue4.5">Issues</a> </p>
325
326<p> 4.6. Non-ARB OpenGL extensions are
327    defined in <tt>glext.h</tt>, and non-ARB GLX extensions in
328    <tt>glxext.h</tt>. If these extensions are also defined in one of
329    the other required headers, this must be done conditionally so that
330    multiple definition problems don't occur. </p>
331
332<p> <a href="#issue4.6">Issues</a> </p>
333
334<p> 4.7. Vendor-specific shortcuts, such as macros for higher
335    performance GL entry points, are intrinsically unportable. These
336    should <b>not</b> be present in the required header files, but
337    instead in a vendor-specific header file that requires explicit
338    effort to access, such as defining a vendor-specific preprocessor
339    symbol. Likewise vendors who are not willing to include their
340    extensions in <tt>glext.h</tt> must isolate those extensions in
341    vendor-specific headers. </p>
342
343<p> 4.8. <tt>gl.h</tt> must define the symbol
344    <tt>GL_OGLBASE_VERSION</tt>. This symbol must be an integer defining
345    the version of the ABI supported by the headers. Its value is
346    <i>1000 * major_version + minor_version</i> where
347    <i>major_version</i> and <i>minor_version</i> are the major and
348    minor revision numbers of this ABI standard. The primary purpose of
349    the symbol is to provide a compile-time test by which application
350    code knows whether the ABI guarantees are in force. </p>
351
352<p> <a href="#issue4.8">Issues</a> </p>
353
354<p> <a name="5"></a></p>
355<h6>5. Extension Headers</h6>
356
357<p> 5.1. Providing prototypes and enumerants for OpenGL extensions is
358    challenging because of the expected wide variety of hardware
359    drivers, continuing creation of extensions, and multiple sources of
360    header files on Linux OpenGL implementations. Some extensions will
361    be supported only for a specific implementation, and some will be
362    supported only for a specific hardware driver within that
363    implementation. This situation does not lend itself easily to
364    independent maintenance of header files definining the extensions.
365    </p>
366
367<p> Instead, we require a single header file defining <b>all</b> OpenGL
368    extensions be supplied from a central point and updated on a continuing
369    basis as new extensions are added to the OpenGL
370    <a href="https://registry.khronos.org/OpenGL/index_gl.php">extension
371    registry</a> (which is similarly centrally maintained). The central
372    point is in the registry. </p>
373
374<p> The <a href="https://registry.khronos.org/OpenGL/api/GL/glext.h">latest
375    version of <tt>glext.h</tt></a> is available in the registry. It is
376    automatically generated from the master OpenGL function and enumerant
377    registries, and is updated as new extensions are registered. The header
378    is intended to be useful on other platforms, particularly Windows. The
379    generator scripts and XML files used in generating <tt>glext.h</tt> are
380    also available. </p>
381
382<p> Likewise for GLX, a single header defining
383    all GLX extensions,
384    <a href="https://registry.khronos.org/OpenGL/api/GL/glxext.h"><tt>glxext.h</tt></a>,
385    is required and is maintained centrally. </p>
386
387<p> The registry also contains a header defining WGL
388    extensions,
389    <a href="https://registry.khronos.org/OpenGL/api/GL/wglext.h"><tt>wglext.h</tt></a>,
390    but this is only for use on Windows; <tt>wglext.h</tt> is <b>not</b>
391    required by or useful for the Linux ABI. </p>
392
393<p> <a href="#issue5.1">Issues</a> </p>
394
395<p> 5.2. The centrally maintained <tt>glext.h</tt> will be continually
396    updated, so version creep is expected. This could cause problems for
397    open source projects distributing source code. The proper solution
398    is for users to update glext.h to the latest version, but versioning
399    has proven helpful with other extensible aspects of OpenGL.
400    Therefore <tt>glext.h</tt> must include a preprocessor version
401    symbol <tt>GL_GLEXT_VERSION</tt>, enabling apps to do something
402    like: </p>
403
404<blockquote>
405    <tt>
406    #include &lt;GL/glext.h&gt;<br>
407    #if GL_GLEXT_VERSION &lt; 42<br>
408    #error "I need a newer &lt;GL/glext.h&gt;. Please download it from https://registry.khronos.org/OpenGL/index_gl.php"<br>
409    #endif
410    </tt>
411</blockquote>
412
413<p> <a href="#issue5.2">Issues</a> </p>
414
415<p> 5.3. Only extensions whose fully documented specifications have been
416    made available to the extension registry and whose authors have
417    committed to shipping them in their drivers will be included in
418    <tt>glext.h</tt> and <tt>glxext.h</tt>. The structure of each
419    extension defined in these headers should resemble: </p>
420
421<blockquote>
422    <tt>
423    #ifndef GL_EXT_<i>extensionname</i><br>
424    #define GL_EXT_<i>extensionname</i> 1<br>
425    <i> Define enumerants specific to this extension</i><br>
426    <i> Typedef function pointers for entry points specifically to
427        this extension, dynamically obtained
428        with glXGetProcAddressARB</i><br>
429    #ifdef GL_GLEXT_PROTOTYPES<br>
430    <i> Define prototypes specific to this extension</i><br>
431    #endif<br>
432    #endif
433    </tt>
434</blockquote>
435
436<p> Benign redefinition of the enumerants is allowable, so these may be
437    outside protective <tt>#ifndef</tt> statements (this structure
438    results from the generator scripts used in the OpenGL SI to build
439    <tt>glext.h</tt>, and also because some enums may be defined by
440    multiple different extensions, so it could make sense to segregate
441    them). </p>
442
443<p> Function pointer typedefs will use the Windows convention (e.g. the
444    typedef for a function <tt>glFooARB</tt> will be
445    <tt>PFNGLFOOARBPROC</tt>) for application source code portability.
446    </p>
447
448<p> Normally, prototypes are present in
449    the header files, but are not visible due to conditional compilation.
450    To define prototypes as well as typedefs, the application must
451    <tt>#define GL_GLEXT_PROTOTYPES</tt> prior to including
452    <tt>gl.h</tt> or <tt>glx.h</tt>. <i>(Note: consistency suggests
453    using <tt>GLX_GLXEXT_PROTOTYPES</tt> for <tt>glxext.h</tt> -
454    TBD)</i>. </p>
455
456<p> The preprocessor symbol protecting the extension declaration
457    must be the same as the name string identifying the extension at
458    runtime and in the extension registry. </p>
459
460<p> <b>All</b> OpenGL and GLX extensions that are shipping should have a
461    full extension specification in the master
462    <a href="https://registry.khronos.org/OpenGL/index_gl.php"> extension
463    registry</a>. Vendors failing to document and specify their on
464    extensions will not be allowed to incorporate the resulting inadequate
465    interfaces into the ABI. </p>
466
467<p> <a href="#issue5.3">Issues</a> </p>
468
469<p> 5.4. <tt>glext.h</tt> is normally
470    <tt>#include</tt>ed by <tt>gl.h</tt>. This inclusion can be
471    suppressed by the application defining the preprocessor symbol
472    <tt>GL_GLEXT_LEGACY</tt> prior to its <tt>#include
473    &lt;GL/gl.h&gt;</tt>. </p>
474
475<p> <img src="new.gif">Similarly, <tt>glxext.h</tt> is normally
476    <tt>#include</tt>ed by <tt>glx.h</tt>. This inclusion can be
477    suppressed by the application defining the preprocessor symbol
478    <tt>GLX_GLXEXT_LEGACY</tt> prior to its <tt>#include
479    &lt;GL/glx.h&gt;</tt>. </p>
480
481<p> <a href="#issue5.4">Issues</a> </p>
482
483<p> <a name="6"></a></p>
484<h6>6. Feedback and Mailing Lists</h6>
485
486<p> Since the ABI has been finalized, we are no longer maintaining the
487    oglbase-discuss mailing list used during its development. List
488    archives may still be available from
489    <a href="https://www.mail-archive.com/oglbase-discuss@corp.sgi.com/">
490    https://www.mail-archive.com/oglbase-discuss@corp.sgi.com/</a> </p>
491
492<hr/>
493
494<p> <a name="app"></a></p>
495<h6>Appendix: Open Issues</h6>
496
497<p> <a name="issue2.1"></a>
498    <b>Section 2.1</b>:
499    Define GL datatypes for other supported Linux architectures - Alpha,
500    PowerPC, MIPS, etc. (in general these will be identical to the IA32
501    types). Note: we may want to suggest <tt>GLlong</tt> and
502    <tt>GLulong</tt> as 64-bit datatypes for future OpenGL revisions. </p>
503
504<p> <a name="issue2.2"></a>
505    <b>Section 2.2</b>:
506    C++ libraries at runtime can be problematic - take the gcc/egcs
507    split, for example. Another potential problem area is static
508    constructor/destructor issues, e.g. when a C <tt>main()</tt> is
509    linked against GLU. Some tweaking may be required as apps running
510    against different ABI revisions start appearing. </p>
511
512<p> <a name="issue3.1"></a>
513    <b>Section 3.1</b>:
514    LSB uses a more complex naming convention for libraries; we're
515    avoiding this at least for now, because these conventions disagree
516    with common practice on virtually all other Unix OpenGL
517    implementations. </p>
518
519<p> <a name="issue3.2"></a>
520    <b>Section 3.2 (also Section 4.1)</b>:
521    Placing the headers and libraries in non-X11 specific locations
522    could impact non-GLX OpenGL implementations resident on the same
523    platform. It is also somewhat out of keeping with other X
524    extensions. However, this practice is so common on other platforms,
525    and non-X based OpenGL implementations are so rarely used, that we
526    chose to do so for build portability and "principle of least
527    surprise" purposes. </p>
528
529<p> Nothing prohibits the implementation from
530    placing the actual library files in other locations and implementing
531    the required library paths as links. </p>
532
533<p> <a name="issue3.3"></a>
534    <b>Section 3.3</b>:
535    The ABI should probably state requirements on GL libraries using C++
536    or other auxiliary libraries, such that no conflict will arise with
537    apps also using those libraries. </p>
538
539<p> <a name="issue3.6"></a>
540    <b>Section 3.6</b>:
541    The context-independence requirement was the subject of enormous
542    controversy, mostly because the consequences of this requirement on
543    the underlying link library and driver implementations can be
544    significant. It is impossible to briefly recap the many pro and con
545    arguments briefly; refer to the <a href="#6">mailing list
546    archive</a> to learn more. </p>
547
548<p> GLU does sometimes need to be extended to
549    properly support new GL extensions; in particular, new pixel formats
550    and types, or new targets for texture downloads, such as cube
551    mapping, should ideally be exposed through the GLU mipmap generation
552    routines. This is an unresolved problem, since GLU is client code
553    not specific to any GL driver and thus not dynamically loadable. The
554    best current option is for driver suppliers to make sure that
555    whatever GLU functionality they need is contributed to the OpenGL
556    Sample Implementation's GLU library. </p>
557
558<p> Portable applications should treat the pointers
559    as context-dependent. </p>
560
561<p> We haven't determined if any non-ARB extensions should be standard
562    entry points not requiring this dynamic lookup. As a reference
563    point, here are lists of GL, GLX, and GLU extensions supported by a
564    variety of OpenGL and Mesa implementations today (please send
565    additions for other platforms to the oglbase-discuss mailing list so
566    they can be added): </p>
567
568    <ul>
569    <li><a href="ext/3dlabs.txt">3Dlabs</a> </li>
570    <li><a href="ext/compaq.txt">Compaq</a> </li>
571    <li><a href="ext/intergraph.txt">Intergraph/Intense 3D</a> </li>
572    <li><a href="ext/mesa.txt">Mesa</a> </li>
573    <li><a href="ext/sgi.txt">SGI (multiple platforms)</a> </li>
574    <li><a href="ext/sun_ultra.txt">Sun Ultra</a> </li>
575    <li><a href="ext/xig.txt">Xi Graphics</a> </li>
576    </ul>
577
578<p> <a name="issue4.5"></a>
579    <b>Section 4.5</b>:
580    Implementations may still implement only OpenGL 1.1 functionality,
581    but the 1.2 header and link library material must still be provided.
582    Since applications must already check both compile and runtime
583    OpenGL version numbers, no problems due to lacking support for 1.2
584    are expected. The next version of this standard is anticipated to
585    require OpenGL 1.2 support. </p>
586
587<p> <a name="issue4.6"></a>
588    <b>Section 4.6</b>:
589    It's important that <tt>glext.h</tt> and <tt>glxext.h</tt> can be
590    updated from the extension registry without breaking <tt>gl.h</tt>
591    and <tt>glx.h</tt>. Making sure that all extension definitions are
592    properly protected helps to this end, as well as being good
593    programming practice. </p>
594
595<p> <a name="issue4.8"></a>
596    <b>Section 4.8</b>:
597    <tt>GL_OGLBASE_VERSION</tt> is mostly provided so that apps can
598    determine whether to use traditional static linking of extensions,
599    or to dynamically query them. Unlike GL/GLX versioning, the ABI
600    version is not dynamically queryable at runtime. Historical
601    experience suggests that not providing the runtime query to begin
602    with is a bad decision. </p>
603
604<p> <a name="issue5.1"></a>
605    <b>Section 5.1</b>:
606    <tt>glext.h</tt> is an exception to the Linux-centric nature of this
607    document, since it is already being used on other platforms. </p>
608
609<p> <a name="issue5.2"></a>
610    <b>Section 5.2</b>:
611    Applications should <b>not</b> use the version number in
612    <tt>glext.h</tt> to test for presence or absence of specific
613    extension prototypes; this is extremely unportable and dangerous.
614    Always use the extension-specific symbols described in section 5.3.
615    </p>
616
617<p> The header version symbol was changed from
618    <tt>GL_GLEXT_VERSION_EXT</tt> to <tt>GL_GLEXT_VERSION</tt> for
619    consistency with the <tt>GLEXT</tt> namespace the ABI group has
620    started using. </p>
621
622<p> <a name="issue5.3"></a>
623    <b>Section 5.3</b>:
624    Other structures for the extension prototypes have been suggested,
625    such as having separate header files for each extension. Having both
626    structures may be preferable, but it requires more work. </p>
627
628<p> <a name="issue5.4"></a>
629    <b>Section 5.4</b>:
630    It's important to be able to suppress automatic inclusion of
631    <tt>glext.h</tt> and <tt>glxext.h</tt> in order to support
632    compilation of legacy code not written to be ABI-aware (e.g.
633    assuming that extensions can be statically linked). </p>
634
635<p> <a name="log"></a></p>
636<h6>7. Change Log</h6>
637
638<ul>
639<li> 2/10/2024 - added an introductory paragraph to try and make clear that
640     this document is of historical interest only. Update old links.
641<li> 10/9/2006 - updated registry links to the new location on
642     opengl.org and cleaned up other dangling wording due to the move
643     from oss.sgi.com.
644<li> 6/20/2000 (version 1.0) - Linux ABI approved on the oglbase-discuss
645     mailing list. Corrected Windows function-pointer typedef convention
646     in section 5.3 by appending <tt>PROC</tt>, to match what glext.h
647     already does. </li>
648<li> 5/29/2000 (version 0.9.8) - <tt>glxext.h</tt> added to section 4.
649     Resolution reached on the structure of <tt>glext.h</tt> and
650     <tt>glxext.h</tt>, and how they are included from <tt>gl.h</tt> and
651     <tt>glx.h</tt>. In particular, <tt>GL_OGLBASE_VERSION</tt> symbol
652     defined, default inclusion of extension headers from core headers
653     mandated, <tt>GL_GLEXT_PROTOTYPES</tt> may be specified in order to
654     get extension prototypes as well as function pointer typedefs.
655     Renamed <tt>GL_GLEXT_VERSION_EXT</tt> to <tt>GL_GLEXT_VERSION</tt>.
656     </li>
657<li> 4/9/2000 (version 0.9.7) - <tt>glext.h</tt> is now available
658     together with the ABI specification. </li>
659<li> 2/22/2000 (version 0.9.6) - Revised for public comment period.
660     Moved open issues to the new appendix. </li>
661<li> 2/8/2000 (version 0.9.5) - Removed ellipses from prototype in
662     section 3.6, and simplified the lists of SGI supported extensions
663     into one file. Mandated threadsafety in section 3.7. Moved
664     glXGetProcAddressARB prototype from gl.h to glx.h in section 4.4,
665     since the function itself was moved from gl to glX during
666     standardization. Restructured the page to fit into the ogl-sample
667     site on oss.sgi.com, next to the extension registry. Pointed to the
668     updated extension registry on oss.sgi.com in several places. </li>
669<li> 12/9/99 (version 0.9.4) - Added Intergraph extension list in
670     section 3.6. </li>
671<li> 12/6/99 (version 0.9.3) - Added Compaq and 3Dlabs extension
672     lists in section 3.6. </li>
673<li> 11/23/99 (version 0.9.2) - Refined discussion of
674     glXGetProcAddressARB to specify that any GL or GLX function can be
675     queried. </li>
676<li> 11/23/99 (version 0.9.1) - Summing up lots of email discussion.
677     Expanded participant list in section 1.4. Pinned down library
678     naming scheme in section 3.1. Changed to require statically
679     exporting all GL 1.2 / GLX 1.3 / GLU 1.3 / ARB extension entry
680     points in section 3.4. Changed GetProcAddress from EXT to ARB and
681     from gl to glX(in anticipation of ARB approval) in section 3.5.
682     Does <b>not</b> require a context parameter. Require Windows naming
683     convention for <tt>glext.h</tt> function prototypes in section 5.3.
684     Added a link to the list archives in section 6. </li>
685<li> 9/16/1999 - Added Mesa, Sun, and Xi Graphics extension lists in
686     section 3.6. Added section 3.8 on transitive library dependencies
687     of the GL libraries. </li>
688<li> 9/10/1999 - Added initial list of GL/GLX/GLU extensions
689     for existing platforms in section 3.6.<br>
690     Specified text/link colors as well as background color. </li>
691<li> 9/7/1999 - Initial version. </li>
692</ul>
693
694<?php include_once("../../../assets/static_pages/khr_page_bottom.php"); ?>
695</body>
696</html>
697