15bd8deadSopenharmony_ci<?php
25bd8deadSopenharmony_ci$static_title = 'OpenGL&reg; Application Binary Interface for Linux';
35bd8deadSopenharmony_ci$static_breadcrumb = array(
45bd8deadSopenharmony_ci    '/registry/' => 'Registry',
55bd8deadSopenharmony_ci    '/registry/OpenGL' => 'OpenGL',
65bd8deadSopenharmony_ci    'NOLINK' => 'ABI'
75bd8deadSopenharmony_ci);
85bd8deadSopenharmony_ciinclude_once("../../../assets/static_pages/khr_page_top.php");
95bd8deadSopenharmony_ci?>
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci
125bd8deadSopenharmony_ci<h1 style="text-align:center">
135bd8deadSopenharmony_ci    OpenGL&reg; Application Binary Interface for Linux <br/>
145bd8deadSopenharmony_ci    <span style="font-size:12px"> (formerly Linux/OpenGL Base) </span>
155bd8deadSopenharmony_ci</h1>
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ci<p style="text-align:center">Version 1.0<br/>
185bd8deadSopenharmony_ci   Approved June 20, 2000<br/>
195bd8deadSopenharmony_ci   Editor: Jon Leech, SGI </p>
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci<hr/>
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ci<h6>Latest News</h6>
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ci<p> Version 1.0 is complete. It was approved on June 20, 2000; all
265bd8deadSopenharmony_ci    submitted votes were in favor. </p>
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ci<hr/>
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ci<h6>Index</h6>
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ci    <ul>
335bd8deadSopenharmony_ci    <li><a href="#1">1. Overview and Goals </a></li>
345bd8deadSopenharmony_ci    <li><a href="#2">2. Calling Conventions</a></li>
355bd8deadSopenharmony_ci    <li><a href="#3">3. Libraries</a></li>
365bd8deadSopenharmony_ci    <li><a href="#4">4. Header Files</a></li>
375bd8deadSopenharmony_ci    <li><a href="#5">5. Extension Headers</a></li>
385bd8deadSopenharmony_ci    <li><a href="#6">6. Feedback and Mailing Lists</a></li>
395bd8deadSopenharmony_ci    <li><a href="#app">Appendix: Open Issues</a></li>
405bd8deadSopenharmony_ci    <li><a href="#log">Change Log</a></li>
415bd8deadSopenharmony_ci    </ul>
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ci<p> <a name="1"></a></p>
445bd8deadSopenharmony_ci<h6>1. Overview and Goals </h6>
455bd8deadSopenharmony_ci
465bd8deadSopenharmony_ci<p> 1.1. This document is intended to solve two related problems. First,
475bd8deadSopenharmony_ci    defining the ABI and runtime environment for applications using
485bd8deadSopenharmony_ci    OpenGL under X11 on Linux. This will enable applications using the
495bd8deadSopenharmony_ci    OpenGL API for rendering to run on a variety of underlying
505bd8deadSopenharmony_ci    implementations transparently. The intent is to address all of open
515bd8deadSopenharmony_ci    source, commercial closed binary, OpenGL SI-based, and Mesa-based
525bd8deadSopenharmony_ci    implementations. </p>
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci<p> Second, defining the SDK for developing apps using OpenGL. This
555bd8deadSopenharmony_ci    includes header file locations, conventions for use of extensions,
565bd8deadSopenharmony_ci    etc. </p>
575bd8deadSopenharmony_ci
585bd8deadSopenharmony_ci<p> It has similar goals to the <a href="http://www.linuxbase.org">Linux
595bd8deadSopenharmony_ci    Standard Base</a>, but focused much
605bd8deadSopenharmony_ci    more narrowly: on the OpenGL API. Representatives from LSB are
615bd8deadSopenharmony_ci    involved and ultimately this effort should be part of LSB. </p>
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ci<p> We do not exactly track all LSB practice (particularly naming
645bd8deadSopenharmony_ci    conventions for libraries) because LSB itself is not complete, and
655bd8deadSopenharmony_ci    because existing practice with other OpenGL implementations suggests
665bd8deadSopenharmony_ci    preferred methods which may differ from LSB. </p>
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ci<p> 1.2. Things we do <b>not</b> attempt to address include: </p>
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    <ul>
715bd8deadSopenharmony_ci    <li> Internal implementation dependent issues - details of direct
725bd8deadSopenharmony_ci        rendering, loadable driver modules, etc. Such details are
735bd8deadSopenharmony_ci        hidden from the public interfaces by the implementation,
745bd8deadSopenharmony_ci        and are irrelevant to applications using the ABI. </li>
755bd8deadSopenharmony_ci    <li> Operating systems other than Linux. Other platforms such as BSD
765bd8deadSopenharmony_ci        are welcome to use whatever comes out of this project, but we
775bd8deadSopenharmony_ci        are explicitly not trying to solve this problem for every free
785bd8deadSopenharmony_ci        OS in the world. </li>
795bd8deadSopenharmony_ci    <li> Changes to the OpenGL API. The definition of OpenGL is
805bd8deadSopenharmony_ci        controlled by the OpenGL Architecture Review Board, and we in no
815bd8deadSopenharmony_ci        way challenge this. A single GLX extension is required; this
825bd8deadSopenharmony_ci        extension has already been approved by the ARB. </li>
835bd8deadSopenharmony_ci    <li> Use of 3D outside the X11/GLX context. There are a variety of
845bd8deadSopenharmony_ci        approaches (fxMesa, GGI, etc.) that again are welcome to use
855bd8deadSopenharmony_ci        relevant parts of this project, but whose support is not part of
865bd8deadSopenharmony_ci        its goals. </li>
875bd8deadSopenharmony_ci    </ul>
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ci<p> 1.3. We believe all critical decisions have been made. Some
905bd8deadSopenharmony_ci    remaining comments (previously identified as open issues) of
915bd8deadSopenharmony_ci    interest are identified in the <a href="#app">appendix</a>. We
925bd8deadSopenharmony_ci    recognize that some decisions are largely arbitrary (filenames and
935bd8deadSopenharmony_ci    file locations, for example) and in those cases have been guided by
945bd8deadSopenharmony_ci    existing practice (<i>in other words, complaining about arbitrary
955bd8deadSopenharmony_ci    decisions is unlikely to change them</i>). </p>
965bd8deadSopenharmony_ci
975bd8deadSopenharmony_ci<p> 1.4. Participants in this effort to date include people working at
985bd8deadSopenharmony_ci    or involved with the following companies and open source projects
995bd8deadSopenharmony_ci    (as well as a large number of individuals with unknown
1005bd8deadSopenharmony_ci    affiliations): </p>
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ci    <blockquote>
1035bd8deadSopenharmony_ci    3Dfx, Alias/Wavefront, Apple, Avid, Compaq, Debian, HP, IBM, Intel,
1045bd8deadSopenharmony_ci    Linux Standard Base, Loki Games, Mesa, Metro Link, NVIDIA, Nichimen,
1055bd8deadSopenharmony_ci    Parametric Technology Corporation, Precision Insight, SGI, Sharp
1065bd8deadSopenharmony_ci    Eye, Sun, XFree86, Xi Graphics.</blockquote>
1075bd8deadSopenharmony_ci
1085bd8deadSopenharmony_ci<p> <a name="2"></a></p>
1095bd8deadSopenharmony_ci<h6>2. Calling Conventions</h6>
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci<p> 2.1. OpenGL already includes its own datatypes (<tt>GLint,
1125bd8deadSopenharmony_ci    GLshort,</tt> etc.) used in the API. Guaranteed minimum sizes are
1135bd8deadSopenharmony_ci    stated (see table 2.2 of the OpenGL 1.2 Specification), but the
1145bd8deadSopenharmony_ci    actual choice of C datatype is left to the implementation. For our
1155bd8deadSopenharmony_ci    purposes, however, all implementations on a given binary
1165bd8deadSopenharmony_ci    architecture must have common definitions of these datatypes. </p>
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci<p> For the IA32 architecture, the definitions should be: </p>
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci<table border="1" class="center-table">
1215bd8deadSopenharmony_ci    <tr><td>GL datatype</td>
1225bd8deadSopenharmony_ci        <td>Description</td>
1235bd8deadSopenharmony_ci        <td>gcc equivalent for IA32</td></tr>
1245bd8deadSopenharmony_ci    <tr><td><tt>GLboolean</tt></td>
1255bd8deadSopenharmony_ci        <td>8-bit boolean</td>
1265bd8deadSopenharmony_ci        <td><tt>unsigned char</tt></td></tr>
1275bd8deadSopenharmony_ci    <tr><td><tt>GLbyte</tt></td>
1285bd8deadSopenharmony_ci        <td>signed 8-bit 2's-complement integer</td>
1295bd8deadSopenharmony_ci        <td><tt>signed char</tt></td></tr>
1305bd8deadSopenharmony_ci    <tr><td><tt>GLubyte</tt></td>
1315bd8deadSopenharmony_ci        <td>unsigned 8-bit integer</td>
1325bd8deadSopenharmony_ci        <td><tt>unsigned char</tt></td></tr>
1335bd8deadSopenharmony_ci    <tr><td><tt>GLshort</tt></td>
1345bd8deadSopenharmony_ci        <td>signed 16-bit 2's-complement integer</td>
1355bd8deadSopenharmony_ci        <td><tt>short</tt></td></tr>
1365bd8deadSopenharmony_ci    <tr><td><tt>GLushort</tt></td>
1375bd8deadSopenharmony_ci        <td>unsigned 16-bit integer</td>
1385bd8deadSopenharmony_ci        <td><tt>unsigned short</tt></td></tr>
1395bd8deadSopenharmony_ci    <tr><td><tt>GLint</tt></td>
1405bd8deadSopenharmony_ci        <td>signed 32-bit 2's-complement integer</td>
1415bd8deadSopenharmony_ci        <td><tt>int</tt></td></tr>
1425bd8deadSopenharmony_ci    <tr><td><tt>GLuint</tt></td>
1435bd8deadSopenharmony_ci        <td>unsigned 32-bit integer</td>
1445bd8deadSopenharmony_ci        <td><tt>unsigned int</tt></td></tr>
1455bd8deadSopenharmony_ci    <tr><td><tt>GLsizei</tt></td>
1465bd8deadSopenharmony_ci        <td>non-negative 32-bit binary integer size</td>
1475bd8deadSopenharmony_ci        <td><tt>int</tt></td></tr>
1485bd8deadSopenharmony_ci    <tr><td><tt>GLenum</tt></td>
1495bd8deadSopenharmony_ci        <td>enumerated 32-bit value</td>
1505bd8deadSopenharmony_ci        <td><tt>unsigned int</tt></td></tr>
1515bd8deadSopenharmony_ci    <tr><td><tt>GLbitfield</tt></td>
1525bd8deadSopenharmony_ci        <td>32 bit bitfield</td>
1535bd8deadSopenharmony_ci        <td><tt>unsigned int</tt></td></tr>
1545bd8deadSopenharmony_ci    <tr><td><tt>GLfloat</tt></td>
1555bd8deadSopenharmony_ci        <td>32-bit IEEE754 floating-point</td>
1565bd8deadSopenharmony_ci        <td><tt>float</tt></td></tr>
1575bd8deadSopenharmony_ci    <tr><td><tt>GLclampf</tt></td>
1585bd8deadSopenharmony_ci        <td>Same as GLfloat, but in range [0, 1]</td>
1595bd8deadSopenharmony_ci        <td><tt>float</tt></td></tr>
1605bd8deadSopenharmony_ci    <tr><td><tt>GLdouble</tt></td>
1615bd8deadSopenharmony_ci        <td>64-bit IEEE754 floating-point</td>
1625bd8deadSopenharmony_ci        <td><tt>double</tt></td></tr>
1635bd8deadSopenharmony_ci    <tr><td><tt>GLclampd</tt></td>
1645bd8deadSopenharmony_ci        <td>Same as GLdouble, but in range [0, 1]</td>
1655bd8deadSopenharmony_ci        <td><tt>double</tt></td></tr>
1665bd8deadSopenharmony_ci</table>
1675bd8deadSopenharmony_ci
1685bd8deadSopenharmony_ci<p> <a href="#issue2.1">Issues</a></p>
1695bd8deadSopenharmony_ci
1705bd8deadSopenharmony_ci<p> 2.2. Assembly-level call conventions must be shared. Since the
1715bd8deadSopenharmony_ci    OpenGL implementation may use C++ code internally (e.g. for GLU),
1725bd8deadSopenharmony_ci    this is potentially a serious problem. Static linking of C++
1735bd8deadSopenharmony_ci    libraries used by OpenGL libraries may be required of the
1745bd8deadSopenharmony_ci    implementation (also see the <a href="#3">Libraries</a> section
1755bd8deadSopenharmony_ci    below). </p>
1765bd8deadSopenharmony_ci
1775bd8deadSopenharmony_ci<p> <a href="#issue2.2">Issues</a> </p>
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci<p> <a name="3"></a></p>
1805bd8deadSopenharmony_ci<h6>3. Libraries</h6>
1815bd8deadSopenharmony_ci
1825bd8deadSopenharmony_ci<p> 3.1. There are two link-level libraries. <tt>libGL</tt> includes the
1835bd8deadSopenharmony_ci    OpenGL and GLX entry points and in general depends on underlying
1845bd8deadSopenharmony_ci    hardware and/or X server dependent code that may or may not be
1855bd8deadSopenharmony_ci    incorporated into this library. <tt>libGLU</tt> includes the GLU
1865bd8deadSopenharmony_ci    utility routines and should be hardware independent, using only the
1875bd8deadSopenharmony_ci    OpenGL API. </p>
1885bd8deadSopenharmony_ci
1895bd8deadSopenharmony_ci<p> Each library has two names: the link name used
1905bd8deadSopenharmony_ci    on the ld command line, and the <tt>DT_SONAME</tt> within that
1915bd8deadSopenharmony_ci    library (specified by the <i>-soname</i> switch when linking the
1925bd8deadSopenharmony_ci    library), defining where it's looked up at runtime. Both forms must
1935bd8deadSopenharmony_ci    exist so that both linking and running will operate properly. The
1945bd8deadSopenharmony_ci    library names are: </p>
1955bd8deadSopenharmony_ci
1965bd8deadSopenharmony_ci<table cellspacing="1" border="1" class="center-table">
1975bd8deadSopenharmony_ci    <tr><td>Link name</td>
1985bd8deadSopenharmony_ci        <td>Runtime name (<tt>DT_SONAME</tt>)</td>
1995bd8deadSopenharmony_ci    </tr>
2005bd8deadSopenharmony_ci    <tr><td><tt>libGL.so<tt></td>
2015bd8deadSopenharmony_ci        <td><tt>libGL.so.1<tt></td>
2025bd8deadSopenharmony_ci    </tr>
2035bd8deadSopenharmony_ci    <tr><td><tt>libGLU.so<tt></td>
2045bd8deadSopenharmony_ci        <td><tt>libGLU.so.1<tt></td>
2055bd8deadSopenharmony_ci    </tr>
2065bd8deadSopenharmony_ci</table>
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci<p> <tt>libGL.so</tt> and <tt>libGLU.so</tt> should
2095bd8deadSopenharmony_ci    be symbolic links pointing to the runtime names, so that
2105bd8deadSopenharmony_ci    future versions of the standard can be implemented transparently
2115bd8deadSopenharmony_ci    to applications by changing the link. </p>
2125bd8deadSopenharmony_ci
2135bd8deadSopenharmony_ci<p> <a href="#issue3.1">Issues</a> </p>
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci<p> 3.2. These libraries must be located in <tt>/usr/lib</tt>. The
2165bd8deadSopenharmony_ci    X-specific library direction (<tt>/usr/lib/X11</tt>) was also
2175bd8deadSopenharmony_ci    considered, but existing practice on Linux and other platforms
2185bd8deadSopenharmony_ci    indicates that <tt>/usr/lib</tt> is preferable. </p>
2195bd8deadSopenharmony_ci
2205bd8deadSopenharmony_ci<p> <a href="#issue3.2">Issues</a>
2215bd8deadSopenharmony_ci
2225bd8deadSopenharmony_ci<p> 3.3. C++ runtime environments are likely to be incompatible
2235bd8deadSopenharmony_ci    cross-platform, including both the standard C++ library location and
2245bd8deadSopenharmony_ci    entry points, and the semantics of issues such as static
2255bd8deadSopenharmony_ci    constructors and destructors. The LSB apparently mandates static
2265bd8deadSopenharmony_ci    linking of libraries which aren't already in LSB, but this could
2275bd8deadSopenharmony_ci    lead to problems with multiple C++ RTLs present in the same app
2285bd8deadSopenharmony_ci    using C++. We'll have to tread carefully here until this issue
2295bd8deadSopenharmony_ci    is more completely understood. </p>
2305bd8deadSopenharmony_ci
2315bd8deadSopenharmony_ci<p> <a href="#issue3.3">Issues</a> </p>
2325bd8deadSopenharmony_ci
2335bd8deadSopenharmony_ci<p> 3.4. The libraries must export all OpenGL 1.2,
2345bd8deadSopenharmony_ci    GLU 1.3, GLX 1.3, and <tt>ARB_multitexture</tt> entry points
2355bd8deadSopenharmony_ci    statically. </p>
2365bd8deadSopenharmony_ci
2375bd8deadSopenharmony_ci<p> It's possible (but unlikely) that additional ARB or vendor
2385bd8deadSopenharmony_ci    extensions will be mandated before the ABI is finalized.
2395bd8deadSopenharmony_ci    Applications should not expect to link statically against any entry
2405bd8deadSopenharmony_ci    points not specified here. </p>
2415bd8deadSopenharmony_ci
2425bd8deadSopenharmony_ci<p> 3.5. Because non-ARB extensions vary so widely and are constantly
2435bd8deadSopenharmony_ci    increasing in number, it's infeasible to require that they all be
2445bd8deadSopenharmony_ci    supported, and extensions can always be added to hardware drivers
2455bd8deadSopenharmony_ci    after the base link libraries are released. These drivers are
2465bd8deadSopenharmony_ci    dynamically loaded by <tt>libGL</tt>, so extensions not in the base
2475bd8deadSopenharmony_ci    library must also be obtained dynamically. </p>
2485bd8deadSopenharmony_ci
2495bd8deadSopenharmony_ci<p> 3.6. To perform the dynamic query,
2505bd8deadSopenharmony_ci    <tt>libGL</tt> also must export an entry point called </p>
2515bd8deadSopenharmony_ci
2525bd8deadSopenharmony_ci    <blockquote>
2535bd8deadSopenharmony_ci        <tt>void (*glXGetProcAddressARB(const GLubyte *))();</tt>
2545bd8deadSopenharmony_ci    </blockquote>
2555bd8deadSopenharmony_ci
2565bd8deadSopenharmony_ci<p> The <a href="http://www.opengl.org/registry/specs/ARB/get_proc_address.txt">full specification</a>
2575bd8deadSopenharmony_ci    of this function is available separately. It takes the string name
2585bd8deadSopenharmony_ci    of a GL or GLX entry point and returns a pointer to a function
2595bd8deadSopenharmony_ci    implementing that entry point. It is functionally identical to the
2605bd8deadSopenharmony_ci    <tt>wglGetProcAddress</tt> query defined by the Windows OpenGL
2615bd8deadSopenharmony_ci    library, except that the function pointers returned are <i>context
2625bd8deadSopenharmony_ci    independent</i>, unlike the WGL query. </p>
2635bd8deadSopenharmony_ci
2645bd8deadSopenharmony_ci<p> All OpenGL and GLX entry points may be queried with this extension;
2655bd8deadSopenharmony_ci    GLU extensions cannot, because GLU is a client-side library that
2665bd8deadSopenharmony_ci    cannot easily be extended. </p>
2675bd8deadSopenharmony_ci
2685bd8deadSopenharmony_ci<p> <a href="#issue3.6">Issues</a> </p>
2695bd8deadSopenharmony_ci
2705bd8deadSopenharmony_ci<p> 3.7. Thread safety (the ability to issue OpenGL calls to different
2715bd8deadSopenharmony_ci    graphics contexts from different application threads) is required.
2725bd8deadSopenharmony_ci    Multithreaded applications must use <b>-lpthread</b>. </p>
2735bd8deadSopenharmony_ci
2745bd8deadSopenharmony_ci<p> 3.8. <tt>libGL</tt> and <tt>libGLU</tt> must be
2755bd8deadSopenharmony_ci    transitively linked with any libraries they require in their own
2765bd8deadSopenharmony_ci    internal implementation, so that applications don't fail on some
2775bd8deadSopenharmony_ci    implementations due to not pulling in libraries needed not by the
2785bd8deadSopenharmony_ci    app, but by the implementation. </p>
2795bd8deadSopenharmony_ci
2805bd8deadSopenharmony_ci<p> <a name="4"></a></p>
2815bd8deadSopenharmony_ci<h6>4. Header Files</h6>
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci<p> 4.1. The following header files are required: </p>
2845bd8deadSopenharmony_ci
2855bd8deadSopenharmony_ci    <ul>
2865bd8deadSopenharmony_ci    <li> <tt>&lt;GL/gl.h&gt;</tt> - OpenGL </li>
2875bd8deadSopenharmony_ci    <li> <tt>&lt;GL/glx.h&gt;</tt> - GLX </li>
2885bd8deadSopenharmony_ci    <li> <tt>&lt;GL/glu.h&gt;</tt> - GLU </li>
2895bd8deadSopenharmony_ci    <li> <tt>&lt;GL/glext.h&gt;</tt> - OpenGL Extensions </li>
2905bd8deadSopenharmony_ci    <li> <tt>&lt;GL/glxext.h&gt;</tt> - GLX Extensions </li>
2915bd8deadSopenharmony_ci    </ul>
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci<p> These headers should properly define prototypes and enumerants for
2945bd8deadSopenharmony_ci    use by applications written in either C or C++. Other language
2955bd8deadSopenharmony_ci    bindings are not addressed at this time. </p>
2965bd8deadSopenharmony_ci
2975bd8deadSopenharmony_ci<p> 4.2. These header files must be located in <tt>/usr/include/GL</tt>.
2985bd8deadSopenharmony_ci    <tt>/usr/include/X11/GL</tt> was considered and rejected for the
2995bd8deadSopenharmony_ci    same reasons as library locations in section 3.2 above. </p>
3005bd8deadSopenharmony_ci
3015bd8deadSopenharmony_ci<p> 4.3. The required headers must not pull in
3025bd8deadSopenharmony_ci    internal headers or headers from other packages where that would
3035bd8deadSopenharmony_ci    cause unexpected namespace pollution (for example, on IRIX
3045bd8deadSopenharmony_ci    <tt>glx.h</tt> pulls in <tt>&lt;X11/Xmd.h&gt;</tt>). Likewise the
3055bd8deadSopenharmony_ci    required headers must be protected against multiple inclusion and
3065bd8deadSopenharmony_ci    should not themselves include any headers that are not so protected.
3075bd8deadSopenharmony_ci    However, <tt>glx.h</tt> is allowed to include
3085bd8deadSopenharmony_ci    <tt>&lt;X11/Xlib.h&gt;</tt> and <tt>&lt;X11/Xutil.h&gt;</tt>. </p>
3095bd8deadSopenharmony_ci
3105bd8deadSopenharmony_ci<p> 4.4. <tt>glx.h</tt> must include the prototype of the
3115bd8deadSopenharmony_ci    <tt>glXGetProcAddressARB</tt> extension described above. </p>
3125bd8deadSopenharmony_ci
3135bd8deadSopenharmony_ci<p> 4.5. All OpenGL 1.2 and <tt>ARB_multitexture</tt>, GLU 1.3, and GLX
3145bd8deadSopenharmony_ci    1.3 entry points and enumerants must be present in the corresponding
3155bd8deadSopenharmony_ci    header files <tt>gl.h</tt>, <tt>glu.h</tt>, and <tt>glx.h</tt>,
3165bd8deadSopenharmony_ci    <b>even if</b> only OpenGL 1.1 is implemented at runtime by the
3175bd8deadSopenharmony_ci    associated runtime libraries. </p>
3185bd8deadSopenharmony_ci
3195bd8deadSopenharmony_ci<p> <a href="#issue4.5">Issues</a> </p>
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci<p> 4.6. Non-ARB OpenGL extensions are
3225bd8deadSopenharmony_ci    defined in <tt>glext.h</tt>, and non-ARB GLX extensions in
3235bd8deadSopenharmony_ci    <tt>glxext.h</tt>. If these extensions are also defined in one of
3245bd8deadSopenharmony_ci    the other required headers, this must be done conditionally so that
3255bd8deadSopenharmony_ci    multiple definition problems don't occur. </p>
3265bd8deadSopenharmony_ci
3275bd8deadSopenharmony_ci<p> <a href="#issue4.6">Issues</a> </p>
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci<p> 4.7. Vendor-specific shortcuts, such as macros for higher
3305bd8deadSopenharmony_ci    performance GL entry points, are intrinsically unportable. These
3315bd8deadSopenharmony_ci    should <b>not</b> be present in the required header files, but
3325bd8deadSopenharmony_ci    instead in a vendor-specific header file that requires explicit
3335bd8deadSopenharmony_ci    effort to access, such as defining a vendor-specific preprocessor
3345bd8deadSopenharmony_ci    symbol. Likewise vendors who are not willing to include their
3355bd8deadSopenharmony_ci    extensions in <tt>glext.h</tt> must isolate those extensions in
3365bd8deadSopenharmony_ci    vendor-specific headers. </p>
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ci<p> 4.8. <tt>gl.h</tt> must define the symbol
3395bd8deadSopenharmony_ci    <tt>GL_OGLBASE_VERSION</tt>. This symbol must be an integer defining
3405bd8deadSopenharmony_ci    the version of the ABI supported by the headers. Its value is
3415bd8deadSopenharmony_ci    <i>1000 * major_version + minor_version</i> where
3425bd8deadSopenharmony_ci    <i>major_version</i> and <i>minor_version</i> are the major and
3435bd8deadSopenharmony_ci    minor revision numbers of this ABI standard. The primary purpose of
3445bd8deadSopenharmony_ci    the symbol is to provide a compile-time test by which application
3455bd8deadSopenharmony_ci    code knows whether the ABI guarantees are in force. </p>
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ci<p> <a href="#issue4.8">Issues</a> </p>
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ci<p> <a name="5"></a></p>
3505bd8deadSopenharmony_ci<h6>5. Extension Headers</h6>
3515bd8deadSopenharmony_ci
3525bd8deadSopenharmony_ci<p> 5.1. Providing prototypes and enumerants for OpenGL extensions is
3535bd8deadSopenharmony_ci    challenging because of the expected wide variety of hardware
3545bd8deadSopenharmony_ci    drivers, continuing creation of extensions, and multiple sources of
3555bd8deadSopenharmony_ci    header files on Linux OpenGL implementations. Some extensions will
3565bd8deadSopenharmony_ci    be supported only for a specific implementation, and some will be
3575bd8deadSopenharmony_ci    supported only for a specific hardware driver within that
3585bd8deadSopenharmony_ci    implementation. This situation does not lend itself easily to
3595bd8deadSopenharmony_ci    independent maintenance of header files definining the extensions.
3605bd8deadSopenharmony_ci    </p>
3615bd8deadSopenharmony_ci
3625bd8deadSopenharmony_ci<p> Instead, we require a single header file defining <b>all</b> OpenGL
3635bd8deadSopenharmony_ci    extensions be supplied from a central point and updated on a
3645bd8deadSopenharmony_ci    continuing basis as new extensions are added to the OpenGL <a
3655bd8deadSopenharmony_ci    href="http://www.opengl.org/registry/">extension registry</a> (which
3665bd8deadSopenharmony_ci    is similarly centrally maintained). The central point is in the
3675bd8deadSopenharmony_ci    registry at <a href="http://www.opengl.org/registry/">
3685bd8deadSopenharmony_ci    http://www.opengl.org/registry/</a>. </p>
3695bd8deadSopenharmony_ci
3705bd8deadSopenharmony_ci<p> The <a href="../api/GL/glext.h">latest version of
3715bd8deadSopenharmony_ci    <tt>glext.h</tt></a> is available in the registry. It is
3725bd8deadSopenharmony_ci    automatically generated from the master OpenGL function and
3735bd8deadSopenharmony_ci    enumerant registries, and is updated as new extensions are
3745bd8deadSopenharmony_ci    registered. The header is intended to be useful on other platforms
3755bd8deadSopenharmony_ci    than Linux, particularly Windows; please let us know (via feedback
3765bd8deadSopenharmony_ci    to OpenGL.org forums) if it needs enhancement for use on another
3775bd8deadSopenharmony_ci    platform. The generator scripts and &quot;.spec&quot; files used in
3785bd8deadSopenharmony_ci    generating glext.h are also available. </p>
3795bd8deadSopenharmony_ci
3805bd8deadSopenharmony_ci<p> Likewise for GLX, a single header defining
3815bd8deadSopenharmony_ci    all GLX extensions, <a href="../api/GL/glxext.h"><tt>glxext.h</tt></a>,
3825bd8deadSopenharmony_ci    is required and is maintained centrally. </p>
3835bd8deadSopenharmony_ci
3845bd8deadSopenharmony_ci<p> The registry also contains a header defining WGL
3855bd8deadSopenharmony_ci    extensions, <a href="../api/GL/wglext.h"><tt>wglext.h</tt></a>, but this is
3865bd8deadSopenharmony_ci    only for use on Windows; <tt>wglext.h</tt> is <b>not</b> required by
3875bd8deadSopenharmony_ci    or useful for the Linux ABI. </p>
3885bd8deadSopenharmony_ci
3895bd8deadSopenharmony_ci<p> <a href="#issue5.1">Issues</a> </p>
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ci<p> 5.2. The centrally maintained <tt>glext.h</tt> will be continually
3925bd8deadSopenharmony_ci    updated, so version creep is expected. This could cause problems for
3935bd8deadSopenharmony_ci    open source projects distributing source code. The proper solution
3945bd8deadSopenharmony_ci    is for users to update glext.h to the latest version, but versioning
3955bd8deadSopenharmony_ci    has proven helpful with other extensible aspects of OpenGL.
3965bd8deadSopenharmony_ci    Therefore <tt>glext.h</tt> must include a preprocessor version
3975bd8deadSopenharmony_ci    symbol <tt>GL_GLEXT_VERSION</tt>, enabling apps to do something
3985bd8deadSopenharmony_ci    like: </p>
3995bd8deadSopenharmony_ci
4005bd8deadSopenharmony_ci<blockquote>
4015bd8deadSopenharmony_ci    <tt>
4025bd8deadSopenharmony_ci    #include &lt;GL/glext.h&gt;<br>
4035bd8deadSopenharmony_ci    #if GL_GLEXT_VERSION &lt; 42<br>
4045bd8deadSopenharmony_ci    #error "I need a newer &lt;GL/glext.h&gt;. Please download it from http://www.opengl.org/registry/ABI/"<br>
4055bd8deadSopenharmony_ci    #endif
4065bd8deadSopenharmony_ci    </tt>
4075bd8deadSopenharmony_ci</blockquote>
4085bd8deadSopenharmony_ci
4095bd8deadSopenharmony_ci<p> <a href="#issue5.2">Issues</a> </p>
4105bd8deadSopenharmony_ci
4115bd8deadSopenharmony_ci<p> 5.3. Only extensions whose fully documented specifications have been
4125bd8deadSopenharmony_ci    made available to the extension registry and whose authors have
4135bd8deadSopenharmony_ci    committed to shipping them in their drivers will be included in
4145bd8deadSopenharmony_ci    <tt>glext.h</tt> and <tt>glxext.h</tt>. The structure of each
4155bd8deadSopenharmony_ci    extension defined in these headers should resemble: </p>
4165bd8deadSopenharmony_ci
4175bd8deadSopenharmony_ci<blockquote>
4185bd8deadSopenharmony_ci    <tt>
4195bd8deadSopenharmony_ci    #ifndef GL_EXT_<i>extensionname</i><br>
4205bd8deadSopenharmony_ci    #define GL_EXT_<i>extensionname</i> 1<br>
4215bd8deadSopenharmony_ci    <i> Define enumerants specific to this extension</i><br>
4225bd8deadSopenharmony_ci    <i> Typedef function pointers for entry points specifically to
4235bd8deadSopenharmony_ci        this extension, dynamically obtained
4245bd8deadSopenharmony_ci        with glXGetProcAddressARB</i><br>
4255bd8deadSopenharmony_ci    #ifdef GL_GLEXT_PROTOTYPES<br>
4265bd8deadSopenharmony_ci    <i> Define prototypes specific to this extension</i><br>
4275bd8deadSopenharmony_ci    #endif<br>
4285bd8deadSopenharmony_ci    #endif
4295bd8deadSopenharmony_ci    </tt>
4305bd8deadSopenharmony_ci</blockquote>
4315bd8deadSopenharmony_ci
4325bd8deadSopenharmony_ci<p> Benign redefinition of the enumerants is allowable, so these may be
4335bd8deadSopenharmony_ci    outside protective <tt>#ifndef</tt> statements (this structure
4345bd8deadSopenharmony_ci    results from the generator scripts used in the OpenGL SI to build
4355bd8deadSopenharmony_ci    <tt>glext.h</tt>, and also because some enums may be defined by
4365bd8deadSopenharmony_ci    multiple different extensions, so it could make sense to segregate
4375bd8deadSopenharmony_ci    them). </p>
4385bd8deadSopenharmony_ci
4395bd8deadSopenharmony_ci<p> Function pointer typedefs will use the Windows convention (e.g. the
4405bd8deadSopenharmony_ci    typedef for a function <tt>glFooARB</tt> will be
4415bd8deadSopenharmony_ci    <tt>PFNGLFOOARBPROC</tt>) for application source code portability.
4425bd8deadSopenharmony_ci    </p>
4435bd8deadSopenharmony_ci
4445bd8deadSopenharmony_ci<p> Normally, prototypes are present in
4455bd8deadSopenharmony_ci    the header files, but are not visible due to conditional compilation.
4465bd8deadSopenharmony_ci    To define prototypes as well as typedefs, the application must
4475bd8deadSopenharmony_ci    <tt>#define GL_GLEXT_PROTOTYPES</tt> prior to including
4485bd8deadSopenharmony_ci    <tt>gl.h</tt> or <tt>glx.h</tt>. <i>(Note: consistency suggests
4495bd8deadSopenharmony_ci    using <tt>GLX_GLXEXT_PROTOTYPES</tt> for <tt>glxext.h</tt> -
4505bd8deadSopenharmony_ci    TBD)</i>. </p>
4515bd8deadSopenharmony_ci
4525bd8deadSopenharmony_ci<p> The preprocessor symbol protecting the extension declaration
4535bd8deadSopenharmony_ci    must be the same as the name string identifying the extension at
4545bd8deadSopenharmony_ci    runtime and in the extension registry. </p>
4555bd8deadSopenharmony_ci
4565bd8deadSopenharmony_ci<p> <b>All</b> OpenGL and GLX extensions that are shipping should have a
4575bd8deadSopenharmony_ci    full extension specification in the master
4585bd8deadSopenharmony_ci    <a href="http://www.opengl.org/registry">
4595bd8deadSopenharmony_ci    extension registry</a> on www.opengl.org. Vendors failing to document
4605bd8deadSopenharmony_ci    and specify their on extensions will not be allowed to incorporate
4615bd8deadSopenharmony_ci    the resulting inadequate interfaces into the ABI. </p>
4625bd8deadSopenharmony_ci
4635bd8deadSopenharmony_ci<p> <a href="#issue5.3">Issues</a> </p>
4645bd8deadSopenharmony_ci
4655bd8deadSopenharmony_ci<p> 5.4. <tt>glext.h</tt> is normally
4665bd8deadSopenharmony_ci    <tt>#include</tt>ed by <tt>gl.h</tt>. This inclusion can be
4675bd8deadSopenharmony_ci    suppressed by the application defining the preprocessor symbol
4685bd8deadSopenharmony_ci    <tt>GL_GLEXT_LEGACY</tt> prior to its <tt>#include
4695bd8deadSopenharmony_ci    &lt;GL/gl.h&gt;</tt>. </p>
4705bd8deadSopenharmony_ci
4715bd8deadSopenharmony_ci<p> <img src="new.gif">Similarly, <tt>glxext.h</tt> is normally
4725bd8deadSopenharmony_ci    <tt>#include</tt>ed by <tt>glx.h</tt>. This inclusion can be
4735bd8deadSopenharmony_ci    suppressed by the application defining the preprocessor symbol
4745bd8deadSopenharmony_ci    <tt>GLX_GLXEXT_LEGACY</tt> prior to its <tt>#include
4755bd8deadSopenharmony_ci    &lt;GL/glx.h&gt;</tt>. </p>
4765bd8deadSopenharmony_ci
4775bd8deadSopenharmony_ci<p> <a href="#issue5.4">Issues</a> </p>
4785bd8deadSopenharmony_ci
4795bd8deadSopenharmony_ci<p> <a name="6"></a></p>
4805bd8deadSopenharmony_ci<h6>6. Feedback and Mailing Lists</h6>
4815bd8deadSopenharmony_ci
4825bd8deadSopenharmony_ci<p> Since the ABI has been finalized, we are no longer maintaining the
4835bd8deadSopenharmony_ci    oglbase-discuss mailing list used during its development. List
4845bd8deadSopenharmony_ci    archives may still be available from
4855bd8deadSopenharmony_ci    <a href="http://www.mail-archive.com/oglbase-discuss@corp.sgi.com/">
4865bd8deadSopenharmony_ci    http://www.mail-archive.com/oglbase-discuss@corp.sgi.com/</a> </p>
4875bd8deadSopenharmony_ci
4885bd8deadSopenharmony_ci<hr/>
4895bd8deadSopenharmony_ci
4905bd8deadSopenharmony_ci<p> <a name="app"></a></p>
4915bd8deadSopenharmony_ci<h6>Appendix: Open Issues</h6>
4925bd8deadSopenharmony_ci
4935bd8deadSopenharmony_ci<p> <a name="issue2.1"></a>
4945bd8deadSopenharmony_ci    <b>Section 2.1</b>:
4955bd8deadSopenharmony_ci    Define GL datatypes for other supported Linux architectures - Alpha,
4965bd8deadSopenharmony_ci    PowerPC, MIPS, etc. (in general these will be identical to the IA32
4975bd8deadSopenharmony_ci    types). Note: we may want to suggest <tt>GLlong</tt> and
4985bd8deadSopenharmony_ci    <tt>GLulong</tt> as 64-bit datatypes for future OpenGL revisions. </p>
4995bd8deadSopenharmony_ci
5005bd8deadSopenharmony_ci<p> <a name="issue2.2"></a>
5015bd8deadSopenharmony_ci    <b>Section 2.2</b>:
5025bd8deadSopenharmony_ci    C++ libraries at runtime can be problematic - take the gcc/egcs
5035bd8deadSopenharmony_ci    split, for example. Another potential problem area is static
5045bd8deadSopenharmony_ci    constructor/destructor issues, e.g. when a C <tt>main()</tt> is
5055bd8deadSopenharmony_ci    linked against GLU. Some tweaking may be required as apps running
5065bd8deadSopenharmony_ci    against different ABI revisions start appearing. </p>
5075bd8deadSopenharmony_ci
5085bd8deadSopenharmony_ci<p> <a name="issue3.1"></a>
5095bd8deadSopenharmony_ci    <b>Section 3.1</b>:
5105bd8deadSopenharmony_ci    LSB uses a more complex naming convention for libraries; we're
5115bd8deadSopenharmony_ci    avoiding this at least for now, because these conventions disagree
5125bd8deadSopenharmony_ci    with common practice on virtually all other Unix OpenGL
5135bd8deadSopenharmony_ci    implementations. </p>
5145bd8deadSopenharmony_ci
5155bd8deadSopenharmony_ci<p> <a name="issue3.2"></a>
5165bd8deadSopenharmony_ci    <b>Section 3.2 (also Section 4.1)</b>:
5175bd8deadSopenharmony_ci    Placing the headers and libraries in non-X11 specific locations
5185bd8deadSopenharmony_ci    could impact non-GLX OpenGL implementations resident on the same
5195bd8deadSopenharmony_ci    platform. It is also somewhat out of keeping with other X
5205bd8deadSopenharmony_ci    extensions. However, this practice is so common on other platforms,
5215bd8deadSopenharmony_ci    and non-X based OpenGL implementations are so rarely used, that we
5225bd8deadSopenharmony_ci    chose to do so for build portability and "principle of least
5235bd8deadSopenharmony_ci    surprise" purposes. </p>
5245bd8deadSopenharmony_ci
5255bd8deadSopenharmony_ci<p> Nothing prohibits the implementation from
5265bd8deadSopenharmony_ci    placing the actual library files in other locations and implementing
5275bd8deadSopenharmony_ci    the required library paths as links. </p>
5285bd8deadSopenharmony_ci
5295bd8deadSopenharmony_ci<p> <a name="issue3.3"></a>
5305bd8deadSopenharmony_ci    <b>Section 3.3</b>:
5315bd8deadSopenharmony_ci    The ABI should probably state requirements on GL libraries using C++
5325bd8deadSopenharmony_ci    or other auxiliary libraries, such that no conflict will arise with
5335bd8deadSopenharmony_ci    apps also using those libraries. </p>
5345bd8deadSopenharmony_ci
5355bd8deadSopenharmony_ci<p> <a name="issue3.6"></a>
5365bd8deadSopenharmony_ci    <b>Section 3.6</b>:
5375bd8deadSopenharmony_ci    The context-independence requirement was the subject of enormous
5385bd8deadSopenharmony_ci    controversy, mostly because the consequences of this requirement on
5395bd8deadSopenharmony_ci    the underlying link library and driver implementations can be
5405bd8deadSopenharmony_ci    significant. It is impossible to briefly recap the many pro and con
5415bd8deadSopenharmony_ci    arguments briefly; refer to the <a href="#6">mailing list
5425bd8deadSopenharmony_ci    archive</a> to learn more. </p>
5435bd8deadSopenharmony_ci
5445bd8deadSopenharmony_ci<p> GLU does sometimes need to be extended to
5455bd8deadSopenharmony_ci    properly support new GL extensions; in particular, new pixel formats
5465bd8deadSopenharmony_ci    and types, or new targets for texture downloads, such as cube
5475bd8deadSopenharmony_ci    mapping, should ideally be exposed through the GLU mipmap generation
5485bd8deadSopenharmony_ci    routines. This is an unresolved problem, since GLU is client code
5495bd8deadSopenharmony_ci    not specific to any GL driver and thus not dynamically loadable. The
5505bd8deadSopenharmony_ci    best current option is for driver suppliers to make sure that
5515bd8deadSopenharmony_ci    whatever GLU functionality they need is contributed to the OpenGL
5525bd8deadSopenharmony_ci    Sample Implementation's GLU library. </p>
5535bd8deadSopenharmony_ci
5545bd8deadSopenharmony_ci<p> Portable applications should treat the pointers
5555bd8deadSopenharmony_ci    as context-dependent. </p>
5565bd8deadSopenharmony_ci
5575bd8deadSopenharmony_ci<p> We haven't determined if any non-ARB extensions should be standard
5585bd8deadSopenharmony_ci    entry points not requiring this dynamic lookup. As a reference
5595bd8deadSopenharmony_ci    point, here are lists of GL, GLX, and GLU extensions supported by a
5605bd8deadSopenharmony_ci    variety of OpenGL and Mesa implementations today (please send
5615bd8deadSopenharmony_ci    additions for other platforms to the oglbase-discuss mailing list so
5625bd8deadSopenharmony_ci    they can be added): </p>
5635bd8deadSopenharmony_ci
5645bd8deadSopenharmony_ci    <ul>
5655bd8deadSopenharmony_ci    <li><a href="ext/3dlabs.txt">3Dlabs</a> </li>
5665bd8deadSopenharmony_ci    <li><a href="ext/compaq.txt">Compaq</a> </li>
5675bd8deadSopenharmony_ci    <li><a href="ext/intergraph.txt">Intergraph/Intense 3D</a> </li>
5685bd8deadSopenharmony_ci    <li><a href="ext/mesa.txt">Mesa</a> </li>
5695bd8deadSopenharmony_ci    <li><a href="ext/sgi.txt">SGI (multiple platforms)</a> </li>
5705bd8deadSopenharmony_ci    <li><a href="ext/sun_ultra.txt">Sun Ultra</a> </li>
5715bd8deadSopenharmony_ci    <li><a href="ext/xig.txt">Xi Graphics</a> </li>
5725bd8deadSopenharmony_ci    </ul>
5735bd8deadSopenharmony_ci
5745bd8deadSopenharmony_ci<p> <a name="issue4.5"></a>
5755bd8deadSopenharmony_ci    <b>Section 4.5</b>:
5765bd8deadSopenharmony_ci    Implementations may still implement only OpenGL 1.1 functionality,
5775bd8deadSopenharmony_ci    but the 1.2 header and link library material must still be provided.
5785bd8deadSopenharmony_ci    Since applications must already check both compile and runtime
5795bd8deadSopenharmony_ci    OpenGL version numbers, no problems due to lacking support for 1.2
5805bd8deadSopenharmony_ci    are expected. The next version of this standard is anticipated to
5815bd8deadSopenharmony_ci    require OpenGL 1.2 support. </p>
5825bd8deadSopenharmony_ci
5835bd8deadSopenharmony_ci<p> <a name="issue4.6"></a>
5845bd8deadSopenharmony_ci    <b>Section 4.6</b>:
5855bd8deadSopenharmony_ci    It's important that <tt>glext.h</tt> and <tt>glxext.h</tt> can be
5865bd8deadSopenharmony_ci    updated from the extension registry without breaking <tt>gl.h</tt>
5875bd8deadSopenharmony_ci    and <tt>glx.h</tt>. Making sure that all extension definitions are
5885bd8deadSopenharmony_ci    properly protected helps to this end, as well as being good
5895bd8deadSopenharmony_ci    programming practice. </p>
5905bd8deadSopenharmony_ci
5915bd8deadSopenharmony_ci<p> <a name="issue4.8"></a>
5925bd8deadSopenharmony_ci    <b>Section 4.8</b>:
5935bd8deadSopenharmony_ci    <tt>GL_OGLBASE_VERSION</tt> is mostly provided so that apps can
5945bd8deadSopenharmony_ci    determine whether to use traditional static linking of extensions,
5955bd8deadSopenharmony_ci    or to dynamically query them. Unlike GL/GLX versioning, the ABI
5965bd8deadSopenharmony_ci    version is not dynamically queryable at runtime. Historical
5975bd8deadSopenharmony_ci    experience suggests that not providing the runtime query to begin
5985bd8deadSopenharmony_ci    with is a bad decision. </p>
5995bd8deadSopenharmony_ci
6005bd8deadSopenharmony_ci<p> <a name="issue5.1"></a>
6015bd8deadSopenharmony_ci    <b>Section 5.1</b>:
6025bd8deadSopenharmony_ci    <tt>glext.h</tt> is an exception to the Linux-centric nature of this
6035bd8deadSopenharmony_ci    document, since it is already being used on other platforms. </p>
6045bd8deadSopenharmony_ci
6055bd8deadSopenharmony_ci<p> <a name="issue5.2"></a>
6065bd8deadSopenharmony_ci    <b>Section 5.2</b>:
6075bd8deadSopenharmony_ci    Applications should <b>not</b> use the version number in
6085bd8deadSopenharmony_ci    <tt>glext.h</tt> to test for presence or absence of specific
6095bd8deadSopenharmony_ci    extension prototypes; this is extremely unportable and dangerous.
6105bd8deadSopenharmony_ci    Always use the extension-specific symbols described in section 5.3.
6115bd8deadSopenharmony_ci    </p>
6125bd8deadSopenharmony_ci
6135bd8deadSopenharmony_ci<p> The header version symbol was changed from
6145bd8deadSopenharmony_ci    <tt>GL_GLEXT_VERSION_EXT</tt> to <tt>GL_GLEXT_VERSION</tt> for
6155bd8deadSopenharmony_ci    consistency with the <tt>GLEXT</tt> namespace the ABI group has
6165bd8deadSopenharmony_ci    started using. </p>
6175bd8deadSopenharmony_ci
6185bd8deadSopenharmony_ci<p> <a name="issue5.3"></a>
6195bd8deadSopenharmony_ci    <b>Section 5.3</b>:
6205bd8deadSopenharmony_ci    Other structures for the extension prototypes have been suggested,
6215bd8deadSopenharmony_ci    such as having separate header files for each extension. Having both
6225bd8deadSopenharmony_ci    structures may be preferable, but it requires more work. </p>
6235bd8deadSopenharmony_ci
6245bd8deadSopenharmony_ci<p> <a name="issue5.4"></a>
6255bd8deadSopenharmony_ci    <b>Section 5.4</b>:
6265bd8deadSopenharmony_ci    It's important to be able to suppress automatic inclusion of
6275bd8deadSopenharmony_ci    <tt>glext.h</tt> and <tt>glxext.h</tt> in order to support
6285bd8deadSopenharmony_ci    compilation of legacy code not written to be ABI-aware (e.g.
6295bd8deadSopenharmony_ci    assuming that extensions can be statically linked). </p>
6305bd8deadSopenharmony_ci
6315bd8deadSopenharmony_ci<p> <a name="log"></a></p>
6325bd8deadSopenharmony_ci<h6>7. Change Log</h6>
6335bd8deadSopenharmony_ci
6345bd8deadSopenharmony_ci<ul>
6355bd8deadSopenharmony_ci<li> 10/9/2006 - updated registry links to the new location on
6365bd8deadSopenharmony_ci     opengl.org and cleaned up other dangling wording due to the move
6375bd8deadSopenharmony_ci     from oss.sgi.com.
6385bd8deadSopenharmony_ci<li> 6/20/2000 (version 1.0) - Linux ABI approved on the oglbase-discuss
6395bd8deadSopenharmony_ci     mailing list. Corrected Windows function-pointer typedef convention
6405bd8deadSopenharmony_ci     in section 5.3 by appending <tt>PROC</tt>, to match what glext.h
6415bd8deadSopenharmony_ci     already does. </li>
6425bd8deadSopenharmony_ci<li> 5/29/2000 (version 0.9.8) - <tt>glxext.h</tt> added to section 4.
6435bd8deadSopenharmony_ci     Resolution reached on the structure of <tt>glext.h</tt> and
6445bd8deadSopenharmony_ci     <tt>glxext.h</tt>, and how they are included from <tt>gl.h</tt> and
6455bd8deadSopenharmony_ci     <tt>glx.h</tt>. In particular, <tt>GL_OGLBASE_VERSION</tt> symbol
6465bd8deadSopenharmony_ci     defined, default inclusion of extension headers from core headers
6475bd8deadSopenharmony_ci     mandated, <tt>GL_GLEXT_PROTOTYPES</tt> may be specified in order to
6485bd8deadSopenharmony_ci     get extension prototypes as well as function pointer typedefs.
6495bd8deadSopenharmony_ci     Renamed <tt>GL_GLEXT_VERSION_EXT</tt> to <tt>GL_GLEXT_VERSION</tt>.
6505bd8deadSopenharmony_ci     </li>
6515bd8deadSopenharmony_ci<li> 4/9/2000 (version 0.9.7) - <tt>glext.h</tt> is now available
6525bd8deadSopenharmony_ci     together with the ABI specification. </li>
6535bd8deadSopenharmony_ci<li> 2/22/2000 (version 0.9.6) - Revised for public comment period.
6545bd8deadSopenharmony_ci     Moved open issues to the new appendix. </li>
6555bd8deadSopenharmony_ci<li> 2/8/2000 (version 0.9.5) - Removed ellipses from prototype in
6565bd8deadSopenharmony_ci     section 3.6, and simplified the lists of SGI supported extensions
6575bd8deadSopenharmony_ci     into one file. Mandated threadsafety in section 3.7. Moved
6585bd8deadSopenharmony_ci     glXGetProcAddressARB prototype from gl.h to glx.h in section 4.4,
6595bd8deadSopenharmony_ci     since the function itself was moved from gl to glX during
6605bd8deadSopenharmony_ci     standardization. Restructured the page to fit into the ogl-sample
6615bd8deadSopenharmony_ci     site on oss.sgi.com, next to the extension registry. Pointed to the
6625bd8deadSopenharmony_ci     updated extension registry on oss.sgi.com in several places. </li>
6635bd8deadSopenharmony_ci<li> 12/9/99 (version 0.9.4) - Added Intergraph extension list in
6645bd8deadSopenharmony_ci     section 3.6. </li>
6655bd8deadSopenharmony_ci<li> 12/6/99 (version 0.9.3) - Added Compaq and 3Dlabs extension
6665bd8deadSopenharmony_ci     lists in section 3.6. </li>
6675bd8deadSopenharmony_ci<li> 11/23/99 (version 0.9.2) - Refined discussion of
6685bd8deadSopenharmony_ci     glXGetProcAddressARB to specify that any GL or GLX function can be
6695bd8deadSopenharmony_ci     queried. </li>
6705bd8deadSopenharmony_ci<li> 11/23/99 (version 0.9.1) - Summing up lots of email discussion.
6715bd8deadSopenharmony_ci     Expanded participant list in section 1.4. Pinned down library
6725bd8deadSopenharmony_ci     naming scheme in section 3.1. Changed to require statically
6735bd8deadSopenharmony_ci     exporting all GL 1.2 / GLX 1.3 / GLU 1.3 / ARB extension entry
6745bd8deadSopenharmony_ci     points in section 3.4. Changed GetProcAddress from EXT to ARB and
6755bd8deadSopenharmony_ci     from gl to glX(in anticipation of ARB approval) in section 3.5.
6765bd8deadSopenharmony_ci     Does <b>not</b> require a context parameter. Require Windows naming
6775bd8deadSopenharmony_ci     convention for <tt>glext.h</tt> function prototypes in section 5.3.
6785bd8deadSopenharmony_ci     Added a link to the list archives in section 6. </li>
6795bd8deadSopenharmony_ci<li> 9/16/1999 - Added Mesa, Sun, and Xi Graphics extension lists in
6805bd8deadSopenharmony_ci     section 3.6. Added section 3.8 on transitive library dependencies
6815bd8deadSopenharmony_ci     of the GL libraries. </li>
6825bd8deadSopenharmony_ci<li> 9/10/1999 - Added initial list of GL/GLX/GLU extensions
6835bd8deadSopenharmony_ci     for existing platforms in section 3.6.<br>
6845bd8deadSopenharmony_ci     Specified text/link colors as well as background color. </li>
6855bd8deadSopenharmony_ci<li> 9/7/1999 - Initial version. </li>
6865bd8deadSopenharmony_ci</ul>
6875bd8deadSopenharmony_ci
6885bd8deadSopenharmony_ci<?php include_once("../../../assets/static_pages/khr_page_bottom.php"); ?>
6895bd8deadSopenharmony_ci</body>
6905bd8deadSopenharmony_ci</html>
691