15bd8deadSopenharmony_ci<?php 25bd8deadSopenharmony_ci$static_title = 'OpenGL® 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® 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><GL/gl.h></tt> - OpenGL </li> 2875bd8deadSopenharmony_ci <li> <tt><GL/glx.h></tt> - GLX </li> 2885bd8deadSopenharmony_ci <li> <tt><GL/glu.h></tt> - GLU </li> 2895bd8deadSopenharmony_ci <li> <tt><GL/glext.h></tt> - OpenGL Extensions </li> 2905bd8deadSopenharmony_ci <li> <tt><GL/glxext.h></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><X11/Xmd.h></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><X11/Xlib.h></tt> and <tt><X11/Xutil.h></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 ".spec" 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 <GL/glext.h><br> 4035bd8deadSopenharmony_ci #if GL_GLEXT_VERSION < 42<br> 4045bd8deadSopenharmony_ci #error "I need a newer <GL/glext.h>. 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 <GL/gl.h></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 <GL/glx.h></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