| <?php | |
| $static_title = 'OpenGL® Application Binary Interface for Linux'; | |
| $static_breadcrumb = array( | |
| '/registry/' => 'Registry', | |
| '/registry/OpenGL' => 'OpenGL', | |
| 'NOLINK' => 'ABI' | |
| ); | |
| include_once("../../../assets/static_pages/khr_page_top.php"); | |
| ?> | |
| <h1 style="text-align:center"> | |
| OpenGL® Application Binary Interface for Linux <br/> | |
| <span style="font-size:12px"> (formerly Linux/OpenGL Base) </span> | |
| </h1> | |
| <p style="text-align:center">Version 1.0<br/> | |
| Approved June 20, 2000<br/> | |
| Editor: Jon Leech, SGI </p> | |
| <hr/> | |
| <h6>Latest News</h6> | |
| <p> Version 1.0 is complete. It was approved on June 20, 2000; all | |
| submitted votes were in favor. </p> | |
| <hr/> | |
| <h6>Index</h6> | |
| <ul> | |
| <li><a href="#1">1. Overview and Goals </a></li> | |
| <li><a href="#2">2. Calling Conventions</a></li> | |
| <li><a href="#3">3. Libraries</a></li> | |
| <li><a href="#4">4. Header Files</a></li> | |
| <li><a href="#5">5. Extension Headers</a></li> | |
| <li><a href="#6">6. Feedback and Mailing Lists</a></li> | |
| <li><a href="#app">Appendix: Open Issues</a></li> | |
| <li><a href="#log">Change Log</a></li> | |
| </ul> | |
| <p> <a name="1"></a></p> | |
| <h6>1. Overview and Goals </h6> | |
| <p> 1.1. This document is intended to solve two related problems. First, | |
| defining the ABI and runtime environment for applications using | |
| OpenGL under X11 on Linux. This will enable applications using the | |
| OpenGL API for rendering to run on a variety of underlying | |
| implementations transparently. The intent is to address all of open | |
| source, commercial closed binary, OpenGL SI-based, and Mesa-based | |
| implementations. </p> | |
| <p> Second, defining the SDK for developing apps using OpenGL. This | |
| includes header file locations, conventions for use of extensions, | |
| etc. </p> | |
| <p> It has similar goals to the <a href="http://www.linuxbase.org">Linux | |
| Standard Base</a>, but focused much | |
| more narrowly: on the OpenGL API. Representatives from LSB are | |
| involved and ultimately this effort should be part of LSB. </p> | |
| <p> We do not exactly track all LSB practice (particularly naming | |
| conventions for libraries) because LSB itself is not complete, and | |
| because existing practice with other OpenGL implementations suggests | |
| preferred methods which may differ from LSB. </p> | |
| <p> 1.2. Things we do <b>not</b> attempt to address include: </p> | |
| <ul> | |
| <li> Internal implementation dependent issues - details of direct | |
| rendering, loadable driver modules, etc. Such details are | |
| hidden from the public interfaces by the implementation, | |
| and are irrelevant to applications using the ABI. </li> | |
| <li> Operating systems other than Linux. Other platforms such as BSD | |
| are welcome to use whatever comes out of this project, but we | |
| are explicitly not trying to solve this problem for every free | |
| OS in the world. </li> | |
| <li> Changes to the OpenGL API. The definition of OpenGL is | |
| controlled by the OpenGL Architecture Review Board, and we in no | |
| way challenge this. A single GLX extension is required; this | |
| extension has already been approved by the ARB. </li> | |
| <li> Use of 3D outside the X11/GLX context. There are a variety of | |
| approaches (fxMesa, GGI, etc.) that again are welcome to use | |
| relevant parts of this project, but whose support is not part of | |
| its goals. </li> | |
| </ul> | |
| <p> 1.3. We believe all critical decisions have been made. Some | |
| remaining comments (previously identified as open issues) of | |
| interest are identified in the <a href="#app">appendix</a>. We | |
| recognize that some decisions are largely arbitrary (filenames and | |
| file locations, for example) and in those cases have been guided by | |
| existing practice (<i>in other words, complaining about arbitrary | |
| decisions is unlikely to change them</i>). </p> | |
| <p> 1.4. Participants in this effort to date include people working at | |
| or involved with the following companies and open source projects | |
| (as well as a large number of individuals with unknown | |
| affiliations): </p> | |
| <blockquote> | |
| 3Dfx, Alias/Wavefront, Apple, Avid, Compaq, Debian, HP, IBM, Intel, | |
| Linux Standard Base, Loki Games, Mesa, Metro Link, NVIDIA, Nichimen, | |
| Parametric Technology Corporation, Precision Insight, SGI, Sharp | |
| Eye, Sun, XFree86, Xi Graphics.</blockquote> | |
| <p> <a name="2"></a></p> | |
| <h6>2. Calling Conventions</h6> | |
| <p> 2.1. OpenGL already includes its own datatypes (<tt>GLint, | |
| GLshort,</tt> etc.) used in the API. Guaranteed minimum sizes are | |
| stated (see table 2.2 of the OpenGL 1.2 Specification), but the | |
| actual choice of C datatype is left to the implementation. For our | |
| purposes, however, all implementations on a given binary | |
| architecture must have common definitions of these datatypes. </p> | |
| <p> For the IA32 architecture, the definitions should be: </p> | |
| <table border="1" class="center-table"> | |
| <tr><td>GL datatype</td> | |
| <td>Description</td> | |
| <td>gcc equivalent for IA32</td></tr> | |
| <tr><td><tt>GLboolean</tt></td> | |
| <td>8-bit boolean</td> | |
| <td><tt>unsigned char</tt></td></tr> | |
| <tr><td><tt>GLbyte</tt></td> | |
| <td>signed 8-bit 2's-complement integer</td> | |
| <td><tt>signed char</tt></td></tr> | |
| <tr><td><tt>GLubyte</tt></td> | |
| <td>unsigned 8-bit integer</td> | |
| <td><tt>unsigned char</tt></td></tr> | |
| <tr><td><tt>GLshort</tt></td> | |
| <td>signed 16-bit 2's-complement integer</td> | |
| <td><tt>short</tt></td></tr> | |
| <tr><td><tt>GLushort</tt></td> | |
| <td>unsigned 16-bit integer</td> | |
| <td><tt>unsigned short</tt></td></tr> | |
| <tr><td><tt>GLint</tt></td> | |
| <td>signed 32-bit 2's-complement integer</td> | |
| <td><tt>int</tt></td></tr> | |
| <tr><td><tt>GLuint</tt></td> | |
| <td>unsigned 32-bit integer</td> | |
| <td><tt>unsigned int</tt></td></tr> | |
| <tr><td><tt>GLsizei</tt></td> | |
| <td>non-negative 32-bit binary integer size</td> | |
| <td><tt>int</tt></td></tr> | |
| <tr><td><tt>GLenum</tt></td> | |
| <td>enumerated 32-bit value</td> | |
| <td><tt>unsigned int</tt></td></tr> | |
| <tr><td><tt>GLbitfield</tt></td> | |
| <td>32 bit bitfield</td> | |
| <td><tt>unsigned int</tt></td></tr> | |
| <tr><td><tt>GLfloat</tt></td> | |
| <td>32-bit IEEE754 floating-point</td> | |
| <td><tt>float</tt></td></tr> | |
| <tr><td><tt>GLclampf</tt></td> | |
| <td>Same as GLfloat, but in range [0, 1]</td> | |
| <td><tt>float</tt></td></tr> | |
| <tr><td><tt>GLdouble</tt></td> | |
| <td>64-bit IEEE754 floating-point</td> | |
| <td><tt>double</tt></td></tr> | |
| <tr><td><tt>GLclampd</tt></td> | |
| <td>Same as GLdouble, but in range [0, 1]</td> | |
| <td><tt>double</tt></td></tr> | |
| </table> | |
| <p> <a href="#issue2.1">Issues</a></p> | |
| <p> 2.2. Assembly-level call conventions must be shared. Since the | |
| OpenGL implementation may use C++ code internally (e.g. for GLU), | |
| this is potentially a serious problem. Static linking of C++ | |
| libraries used by OpenGL libraries may be required of the | |
| implementation (also see the <a href="#3">Libraries</a> section | |
| below). </p> | |
| <p> <a href="#issue2.2">Issues</a> </p> | |
| <p> <a name="3"></a></p> | |
| <h6>3. Libraries</h6> | |
| <p> 3.1. There are two link-level libraries. <tt>libGL</tt> includes the | |
| OpenGL and GLX entry points and in general depends on underlying | |
| hardware and/or X server dependent code that may or may not be | |
| incorporated into this library. <tt>libGLU</tt> includes the GLU | |
| utility routines and should be hardware independent, using only the | |
| OpenGL API. </p> | |
| <p> Each library has two names: the link name used | |
| on the ld command line, and the <tt>DT_SONAME</tt> within that | |
| library (specified by the <i>-soname</i> switch when linking the | |
| library), defining where it's looked up at runtime. Both forms must | |
| exist so that both linking and running will operate properly. The | |
| library names are: </p> | |
| <table cellspacing="1" border="1" class="center-table"> | |
| <tr><td>Link name</td> | |
| <td>Runtime name (<tt>DT_SONAME</tt>)</td> | |
| </tr> | |
| <tr><td><tt>libGL.so<tt></td> | |
| <td><tt>libGL.so.1<tt></td> | |
| </tr> | |
| <tr><td><tt>libGLU.so<tt></td> | |
| <td><tt>libGLU.so.1<tt></td> | |
| </tr> | |
| </table> | |
| <p> <tt>libGL.so</tt> and <tt>libGLU.so</tt> should | |
| be symbolic links pointing to the runtime names, so that | |
| future versions of the standard can be implemented transparently | |
| to applications by changing the link. </p> | |
| <p> <a href="#issue3.1">Issues</a> </p> | |
| <p> 3.2. These libraries must be located in <tt>/usr/lib</tt>. The | |
| X-specific library direction (<tt>/usr/lib/X11</tt>) was also | |
| considered, but existing practice on Linux and other platforms | |
| indicates that <tt>/usr/lib</tt> is preferable. </p> | |
| <p> <a href="#issue3.2">Issues</a> | |
| <p> 3.3. C++ runtime environments are likely to be incompatible | |
| cross-platform, including both the standard C++ library location and | |
| entry points, and the semantics of issues such as static | |
| constructors and destructors. The LSB apparently mandates static | |
| linking of libraries which aren't already in LSB, but this could | |
| lead to problems with multiple C++ RTLs present in the same app | |
| using C++. We'll have to tread carefully here until this issue | |
| is more completely understood. </p> | |
| <p> <a href="#issue3.3">Issues</a> </p> | |
| <p> 3.4. The libraries must export all OpenGL 1.2, | |
| GLU 1.3, GLX 1.3, and <tt>ARB_multitexture</tt> entry points | |
| statically. </p> | |
| <p> It's possible (but unlikely) that additional ARB or vendor | |
| extensions will be mandated before the ABI is finalized. | |
| Applications should not expect to link statically against any entry | |
| points not specified here. </p> | |
| <p> 3.5. Because non-ARB extensions vary so widely and are constantly | |
| increasing in number, it's infeasible to require that they all be | |
| supported, and extensions can always be added to hardware drivers | |
| after the base link libraries are released. These drivers are | |
| dynamically loaded by <tt>libGL</tt>, so extensions not in the base | |
| library must also be obtained dynamically. </p> | |
| <p> 3.6. To perform the dynamic query, | |
| <tt>libGL</tt> also must export an entry point called </p> | |
| <blockquote> | |
| <tt>void (*glXGetProcAddressARB(const GLubyte *))();</tt> | |
| </blockquote> | |
| <p> The <a href="http://www.opengl.org/registry/specs/ARB/get_proc_address.txt">full specification</a> | |
| of this function is available separately. It takes the string name | |
| of a GL or GLX entry point and returns a pointer to a function | |
| implementing that entry point. It is functionally identical to the | |
| <tt>wglGetProcAddress</tt> query defined by the Windows OpenGL | |
| library, except that the function pointers returned are <i>context | |
| independent</i>, unlike the WGL query. </p> | |
| <p> All OpenGL and GLX entry points may be queried with this extension; | |
| GLU extensions cannot, because GLU is a client-side library that | |
| cannot easily be extended. </p> | |
| <p> <a href="#issue3.6">Issues</a> </p> | |
| <p> 3.7. Thread safety (the ability to issue OpenGL calls to different | |
| graphics contexts from different application threads) is required. | |
| Multithreaded applications must use <b>-lpthread</b>. </p> | |
| <p> 3.8. <tt>libGL</tt> and <tt>libGLU</tt> must be | |
| transitively linked with any libraries they require in their own | |
| internal implementation, so that applications don't fail on some | |
| implementations due to not pulling in libraries needed not by the | |
| app, but by the implementation. </p> | |
| <p> <a name="4"></a></p> | |
| <h6>4. Header Files</h6> | |
| <p> 4.1. The following header files are required: </p> | |
| <ul> | |
| <li> <tt><GL/gl.h></tt> - OpenGL </li> | |
| <li> <tt><GL/glx.h></tt> - GLX </li> | |
| <li> <tt><GL/glu.h></tt> - GLU </li> | |
| <li> <tt><GL/glext.h></tt> - OpenGL Extensions </li> | |
| <li> <tt><GL/glxext.h></tt> - GLX Extensions </li> | |
| </ul> | |
| <p> These headers should properly define prototypes and enumerants for | |
| use by applications written in either C or C++. Other language | |
| bindings are not addressed at this time. </p> | |
| <p> 4.2. These header files must be located in <tt>/usr/include/GL</tt>. | |
| <tt>/usr/include/X11/GL</tt> was considered and rejected for the | |
| same reasons as library locations in section 3.2 above. </p> | |
| <p> 4.3. The required headers must not pull in | |
| internal headers or headers from other packages where that would | |
| cause unexpected namespace pollution (for example, on IRIX | |
| <tt>glx.h</tt> pulls in <tt><X11/Xmd.h></tt>). Likewise the | |
| required headers must be protected against multiple inclusion and | |
| should not themselves include any headers that are not so protected. | |
| However, <tt>glx.h</tt> is allowed to include | |
| <tt><X11/Xlib.h></tt> and <tt><X11/Xutil.h></tt>. </p> | |
| <p> 4.4. <tt>glx.h</tt> must include the prototype of the | |
| <tt>glXGetProcAddressARB</tt> extension described above. </p> | |
| <p> 4.5. All OpenGL 1.2 and <tt>ARB_multitexture</tt>, GLU 1.3, and GLX | |
| 1.3 entry points and enumerants must be present in the corresponding | |
| header files <tt>gl.h</tt>, <tt>glu.h</tt>, and <tt>glx.h</tt>, | |
| <b>even if</b> only OpenGL 1.1 is implemented at runtime by the | |
| associated runtime libraries. </p> | |
| <p> <a href="#issue4.5">Issues</a> </p> | |
| <p> 4.6. Non-ARB OpenGL extensions are | |
| defined in <tt>glext.h</tt>, and non-ARB GLX extensions in | |
| <tt>glxext.h</tt>. If these extensions are also defined in one of | |
| the other required headers, this must be done conditionally so that | |
| multiple definition problems don't occur. </p> | |
| <p> <a href="#issue4.6">Issues</a> </p> | |
| <p> 4.7. Vendor-specific shortcuts, such as macros for higher | |
| performance GL entry points, are intrinsically unportable. These | |
| should <b>not</b> be present in the required header files, but | |
| instead in a vendor-specific header file that requires explicit | |
| effort to access, such as defining a vendor-specific preprocessor | |
| symbol. Likewise vendors who are not willing to include their | |
| extensions in <tt>glext.h</tt> must isolate those extensions in | |
| vendor-specific headers. </p> | |
| <p> 4.8. <tt>gl.h</tt> must define the symbol | |
| <tt>GL_OGLBASE_VERSION</tt>. This symbol must be an integer defining | |
| the version of the ABI supported by the headers. Its value is | |
| <i>1000 * major_version + minor_version</i> where | |
| <i>major_version</i> and <i>minor_version</i> are the major and | |
| minor revision numbers of this ABI standard. The primary purpose of | |
| the symbol is to provide a compile-time test by which application | |
| code knows whether the ABI guarantees are in force. </p> | |
| <p> <a href="#issue4.8">Issues</a> </p> | |
| <p> <a name="5"></a></p> | |
| <h6>5. Extension Headers</h6> | |
| <p> 5.1. Providing prototypes and enumerants for OpenGL extensions is | |
| challenging because of the expected wide variety of hardware | |
| drivers, continuing creation of extensions, and multiple sources of | |
| header files on Linux OpenGL implementations. Some extensions will | |
| be supported only for a specific implementation, and some will be | |
| supported only for a specific hardware driver within that | |
| implementation. This situation does not lend itself easily to | |
| independent maintenance of header files definining the extensions. | |
| </p> | |
| <p> Instead, we require a single header file defining <b>all</b> OpenGL | |
| extensions be supplied from a central point and updated on a | |
| continuing basis as new extensions are added to the OpenGL <a | |
| href="http://www.opengl.org/registry/">extension registry</a> (which | |
| is similarly centrally maintained). The central point is in the | |
| registry at <a href="http://www.opengl.org/registry/"> | |
| http://www.opengl.org/registry/</a>. </p> | |
| <p> The <a href="../api/glext.h">latest version of | |
| <tt>glext.h</tt></a> is available in the registry. It is | |
| automatically generated from the master OpenGL function and | |
| enumerant registries, and is updated as new extensions are | |
| registered. The header is intended to be useful on other platforms | |
| than Linux, particularly Windows; please let us know (via feedback | |
| to OpenGL.org forums) if it needs enhancement for use on another | |
| platform. The generator scripts and ".spec" files used in | |
| generating glext.h are also available. </p> | |
| <p> Likewise for GLX, a single header defining | |
| all GLX extensions, <a href="../api/glxext.h"><tt>glxext.h</tt></a>, | |
| is required and is maintained centrally. </p> | |
| <p> The registry also contains a header defining WGL | |
| extensions, <a href="../api/wglext.h"><tt>wglext.h</tt></a>, but this is | |
| only for use on Windows; <tt>wglext.h</tt> is <b>not</b> required by | |
| or useful for the Linux ABI. </p> | |
| <p> <a href="#issue5.1">Issues</a> </p> | |
| <p> 5.2. The centrally maintained <tt>glext.h</tt> will be continually | |
| updated, so version creep is expected. This could cause problems for | |
| open source projects distributing source code. The proper solution | |
| is for users to update glext.h to the latest version, but versioning | |
| has proven helpful with other extensible aspects of OpenGL. | |
| Therefore <tt>glext.h</tt> must include a preprocessor version | |
| symbol <tt>GL_GLEXT_VERSION</tt>, enabling apps to do something | |
| like: </p> | |
| <blockquote> | |
| <tt> | |
| #include <GL/glext.h><br> | |
| #if GL_GLEXT_VERSION < 42<br> | |
| #error "I need a newer <GL/glext.h>. Please download it from http://www.opengl.org/registry/ABI/"<br> | |
| #endif | |
| </tt> | |
| </blockquote> | |
| <p> <a href="#issue5.2">Issues</a> </p> | |
| <p> 5.3. Only extensions whose fully documented specifications have been | |
| made available to the extension registry and whose authors have | |
| committed to shipping them in their drivers will be included in | |
| <tt>glext.h</tt> and <tt>glxext.h</tt>. The structure of each | |
| extension defined in these headers should resemble: </p> | |
| <blockquote> | |
| <tt> | |
| #ifndef GL_EXT_<i>extensionname</i><br> | |
| #define GL_EXT_<i>extensionname</i> 1<br> | |
| <i> Define enumerants specific to this extension</i><br> | |
| <i> Typedef function pointers for entry points specifically to | |
| this extension, dynamically obtained | |
| with glXGetProcAddressARB</i><br> | |
| #ifdef GL_GLEXT_PROTOTYPES<br> | |
| <i> Define prototypes specific to this extension</i><br> | |
| #endif<br> | |
| #endif | |
| </tt> | |
| </blockquote> | |
| <p> Benign redefinition of the enumerants is allowable, so these may be | |
| outside protective <tt>#ifndef</tt> statements (this structure | |
| results from the generator scripts used in the OpenGL SI to build | |
| <tt>glext.h</tt>, and also because some enums may be defined by | |
| multiple different extensions, so it could make sense to segregate | |
| them). </p> | |
| <p> Function pointer typedefs will use the Windows convention (e.g. the | |
| typedef for a function <tt>glFooARB</tt> will be | |
| <tt>PFNGLFOOARBPROC</tt>) for application source code portability. | |
| </p> | |
| <p> Normally, prototypes are present in | |
| the header files, but are not visible due to conditional compilation. | |
| To define prototypes as well as typedefs, the application must | |
| <tt>#define GL_GLEXT_PROTOTYPES</tt> prior to including | |
| <tt>gl.h</tt> or <tt>glx.h</tt>. <i>(Note: consistency suggests | |
| using <tt>GLX_GLXEXT_PROTOTYPES</tt> for <tt>glxext.h</tt> - | |
| TBD)</i>. </p> | |
| <p> The preprocessor symbol protecting the extension declaration | |
| must be the same as the name string identifying the extension at | |
| runtime and in the extension registry. </p> | |
| <p> <b>All</b> OpenGL and GLX extensions that are shipping should have a | |
| full extension specification in the master | |
| <a href="http://www.opengl.org/registry"> | |
| extension registry</a> on www.opengl.org. Vendors failing to document | |
| and specify their on extensions will not be allowed to incorporate | |
| the resulting inadequate interfaces into the ABI. </p> | |
| <p> <a href="#issue5.3">Issues</a> </p> | |
| <p> 5.4. <tt>glext.h</tt> is normally | |
| <tt>#include</tt>ed by <tt>gl.h</tt>. This inclusion can be | |
| suppressed by the application defining the preprocessor symbol | |
| <tt>GL_GLEXT_LEGACY</tt> prior to its <tt>#include | |
| <GL/gl.h></tt>. </p> | |
| <p> <img src="new.gif">Similarly, <tt>glxext.h</tt> is normally | |
| <tt>#include</tt>ed by <tt>glx.h</tt>. This inclusion can be | |
| suppressed by the application defining the preprocessor symbol | |
| <tt>GLX_GLXEXT_LEGACY</tt> prior to its <tt>#include | |
| <GL/glx.h></tt>. </p> | |
| <p> <a href="#issue5.4">Issues</a> </p> | |
| <p> <a name="6"></a></p> | |
| <h6>6. Feedback and Mailing Lists</h6> | |
| <p> Since the ABI has been finalized, we are no longer maintaining the | |
| oglbase-discuss mailing list used during its development. List | |
| archives may still be available from | |
| <a href="http://www.mail-archive.com/oglbase-discuss@corp.sgi.com/"> | |
| http://www.mail-archive.com/oglbase-discuss@corp.sgi.com/</a> </p> | |
| <hr/> | |
| <p> <a name="app"></a></p> | |
| <h6>Appendix: Open Issues</h6> | |
| <p> <a name="issue2.1"></a> | |
| <b>Section 2.1</b>: | |
| Define GL datatypes for other supported Linux architectures - Alpha, | |
| PowerPC, MIPS, etc. (in general these will be identical to the IA32 | |
| types). Note: we may want to suggest <tt>GLlong</tt> and | |
| <tt>GLulong</tt> as 64-bit datatypes for future OpenGL revisions. </p> | |
| <p> <a name="issue2.2"></a> | |
| <b>Section 2.2</b>: | |
| C++ libraries at runtime can be problematic - take the gcc/egcs | |
| split, for example. Another potential problem area is static | |
| constructor/destructor issues, e.g. when a C <tt>main()</tt> is | |
| linked against GLU. Some tweaking may be required as apps running | |
| against different ABI revisions start appearing. </p> | |
| <p> <a name="issue3.1"></a> | |
| <b>Section 3.1</b>: | |
| LSB uses a more complex naming convention for libraries; we're | |
| avoiding this at least for now, because these conventions disagree | |
| with common practice on virtually all other Unix OpenGL | |
| implementations. </p> | |
| <p> <a name="issue3.2"></a> | |
| <b>Section 3.2 (also Section 4.1)</b>: | |
| Placing the headers and libraries in non-X11 specific locations | |
| could impact non-GLX OpenGL implementations resident on the same | |
| platform. It is also somewhat out of keeping with other X | |
| extensions. However, this practice is so common on other platforms, | |
| and non-X based OpenGL implementations are so rarely used, that we | |
| chose to do so for build portability and "principle of least | |
| surprise" purposes. </p> | |
| <p> Nothing prohibits the implementation from | |
| placing the actual library files in other locations and implementing | |
| the required library paths as links. </p> | |
| <p> <a name="issue3.3"></a> | |
| <b>Section 3.3</b>: | |
| The ABI should probably state requirements on GL libraries using C++ | |
| or other auxiliary libraries, such that no conflict will arise with | |
| apps also using those libraries. </p> | |
| <p> <a name="issue3.6"></a> | |
| <b>Section 3.6</b>: | |
| The context-independence requirement was the subject of enormous | |
| controversy, mostly because the consequences of this requirement on | |
| the underlying link library and driver implementations can be | |
| significant. It is impossible to briefly recap the many pro and con | |
| arguments briefly; refer to the <a href="#6">mailing list | |
| archive</a> to learn more. </p> | |
| <p> GLU does sometimes need to be extended to | |
| properly support new GL extensions; in particular, new pixel formats | |
| and types, or new targets for texture downloads, such as cube | |
| mapping, should ideally be exposed through the GLU mipmap generation | |
| routines. This is an unresolved problem, since GLU is client code | |
| not specific to any GL driver and thus not dynamically loadable. The | |
| best current option is for driver suppliers to make sure that | |
| whatever GLU functionality they need is contributed to the OpenGL | |
| Sample Implementation's GLU library. </p> | |
| <p> Portable applications should treat the pointers | |
| as context-dependent. </p> | |
| <p> We haven't determined if any non-ARB extensions should be standard | |
| entry points not requiring this dynamic lookup. As a reference | |
| point, here are lists of GL, GLX, and GLU extensions supported by a | |
| variety of OpenGL and Mesa implementations today (please send | |
| additions for other platforms to the oglbase-discuss mailing list so | |
| they can be added): </p> | |
| <ul> | |
| <li><a href="ext/3dlabs.txt">3Dlabs</a> </li> | |
| <li><a href="ext/compaq.txt">Compaq</a> </li> | |
| <li><a href="ext/intergraph.txt">Intergraph/Intense 3D</a> </li> | |
| <li><a href="ext/mesa.txt">Mesa</a> </li> | |
| <li><a href="ext/sgi.txt">SGI (multiple platforms)</a> </li> | |
| <li><a href="ext/sun_ultra.txt">Sun Ultra</a> </li> | |
| <li><a href="ext/xig.txt">Xi Graphics</a> </li> | |
| </ul> | |
| <p> <a name="issue4.5"></a> | |
| <b>Section 4.5</b>: | |
| Implementations may still implement only OpenGL 1.1 functionality, | |
| but the 1.2 header and link library material must still be provided. | |
| Since applications must already check both compile and runtime | |
| OpenGL version numbers, no problems due to lacking support for 1.2 | |
| are expected. The next version of this standard is anticipated to | |
| require OpenGL 1.2 support. </p> | |
| <p> <a name="issue4.6"></a> | |
| <b>Section 4.6</b>: | |
| It's important that <tt>glext.h</tt> and <tt>glxext.h</tt> can be | |
| updated from the extension registry without breaking <tt>gl.h</tt> | |
| and <tt>glx.h</tt>. Making sure that all extension definitions are | |
| properly protected helps to this end, as well as being good | |
| programming practice. </p> | |
| <p> <a name="issue4.8"></a> | |
| <b>Section 4.8</b>: | |
| <tt>GL_OGLBASE_VERSION</tt> is mostly provided so that apps can | |
| determine whether to use traditional static linking of extensions, | |
| or to dynamically query them. Unlike GL/GLX versioning, the ABI | |
| version is not dynamically queryable at runtime. Historical | |
| experience suggests that not providing the runtime query to begin | |
| with is a bad decision. </p> | |
| <p> <a name="issue5.1"></a> | |
| <b>Section 5.1</b>: | |
| <tt>glext.h</tt> is an exception to the Linux-centric nature of this | |
| document, since it is already being used on other platforms. </p> | |
| <p> <a name="issue5.2"></a> | |
| <b>Section 5.2</b>: | |
| Applications should <b>not</b> use the version number in | |
| <tt>glext.h</tt> to test for presence or absence of specific | |
| extension prototypes; this is extremely unportable and dangerous. | |
| Always use the extension-specific symbols described in section 5.3. | |
| </p> | |
| <p> The header version symbol was changed from | |
| <tt>GL_GLEXT_VERSION_EXT</tt> to <tt>GL_GLEXT_VERSION</tt> for | |
| consistency with the <tt>GLEXT</tt> namespace the ABI group has | |
| started using. </p> | |
| <p> <a name="issue5.3"></a> | |
| <b>Section 5.3</b>: | |
| Other structures for the extension prototypes have been suggested, | |
| such as having separate header files for each extension. Having both | |
| structures may be preferable, but it requires more work. </p> | |
| <p> <a name="issue5.4"></a> | |
| <b>Section 5.4</b>: | |
| It's important to be able to suppress automatic inclusion of | |
| <tt>glext.h</tt> and <tt>glxext.h</tt> in order to support | |
| compilation of legacy code not written to be ABI-aware (e.g. | |
| assuming that extensions can be statically linked). </p> | |
| <p> <a name="log"></a></p> | |
| <h6>7. Change Log</h6> | |
| <ul> | |
| <li> 10/9/2006 - updated registry links to the new location on | |
| opengl.org and cleaned up other dangling wording due to the move | |
| from oss.sgi.com. | |
| <li> 6/20/2000 (version 1.0) - Linux ABI approved on the oglbase-discuss | |
| mailing list. Corrected Windows function-pointer typedef convention | |
| in section 5.3 by appending <tt>PROC</tt>, to match what glext.h | |
| already does. </li> | |
| <li> 5/29/2000 (version 0.9.8) - <tt>glxext.h</tt> added to section 4. | |
| Resolution reached on the structure of <tt>glext.h</tt> and | |
| <tt>glxext.h</tt>, and how they are included from <tt>gl.h</tt> and | |
| <tt>glx.h</tt>. In particular, <tt>GL_OGLBASE_VERSION</tt> symbol | |
| defined, default inclusion of extension headers from core headers | |
| mandated, <tt>GL_GLEXT_PROTOTYPES</tt> may be specified in order to | |
| get extension prototypes as well as function pointer typedefs. | |
| Renamed <tt>GL_GLEXT_VERSION_EXT</tt> to <tt>GL_GLEXT_VERSION</tt>. | |
| </li> | |
| <li> 4/9/2000 (version 0.9.7) - <tt>glext.h</tt> is now available | |
| together with the ABI specification. </li> | |
| <li> 2/22/2000 (version 0.9.6) - Revised for public comment period. | |
| Moved open issues to the new appendix. </li> | |
| <li> 2/8/2000 (version 0.9.5) - Removed ellipses from prototype in | |
| section 3.6, and simplified the lists of SGI supported extensions | |
| into one file. Mandated threadsafety in section 3.7. Moved | |
| glXGetProcAddressARB prototype from gl.h to glx.h in section 4.4, | |
| since the function itself was moved from gl to glX during | |
| standardization. Restructured the page to fit into the ogl-sample | |
| site on oss.sgi.com, next to the extension registry. Pointed to the | |
| updated extension registry on oss.sgi.com in several places. </li> | |
| <li> 12/9/99 (version 0.9.4) - Added Intergraph extension list in | |
| section 3.6. </li> | |
| <li> 12/6/99 (version 0.9.3) - Added Compaq and 3Dlabs extension | |
| lists in section 3.6. </li> | |
| <li> 11/23/99 (version 0.9.2) - Refined discussion of | |
| glXGetProcAddressARB to specify that any GL or GLX function can be | |
| queried. </li> | |
| <li> 11/23/99 (version 0.9.1) - Summing up lots of email discussion. | |
| Expanded participant list in section 1.4. Pinned down library | |
| naming scheme in section 3.1. Changed to require statically | |
| exporting all GL 1.2 / GLX 1.3 / GLU 1.3 / ARB extension entry | |
| points in section 3.4. Changed GetProcAddress from EXT to ARB and | |
| from gl to glX(in anticipation of ARB approval) in section 3.5. | |
| Does <b>not</b> require a context parameter. Require Windows naming | |
| convention for <tt>glext.h</tt> function prototypes in section 5.3. | |
| Added a link to the list archives in section 6. </li> | |
| <li> 9/16/1999 - Added Mesa, Sun, and Xi Graphics extension lists in | |
| section 3.6. Added section 3.8 on transitive library dependencies | |
| of the GL libraries. </li> | |
| <li> 9/10/1999 - Added initial list of GL/GLX/GLU extensions | |
| for existing platforms in section 3.6.<br> | |
| Specified text/link colors as well as background color. </li> | |
| <li> 9/7/1999 - Initial version. </li> | |
| </ul> | |
| <?php include_once("../../../assets/static_pages/khr_page_bottom.php"); ?> | |
| </body> | |
| </html> |