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