<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Khronos API Implementers' Guidelines</title><link rel="stylesheet" href="igstyle.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.69.1"><meta name="description" content="Guidelines to be followed by implementers of Khronos Group
APIs"><style type="text/css">
body { background-image: url('draft.png');
background-repeat: no-repeat;
background-position: top left;
/* The following properties make the watermark "fixed" on the page. */
/* I think that's just a bit too distracting for the reader... */
/* background-attachment: fixed; */
/* background-position: center center; */
}</style></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id4739083"></a>Khronos API Implementers' Guidelines</h1></div><div><div class="authorgroup"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">Mark</span> <span class="surname">Callow</span></h3><div class="affiliation"><span class="orgname">HI Corporation<br></span></div><code class="email"><<a href="mailto:callow_mark%20at%20hicorp.co.jp">callow_mark at hicorp.co.jp</a>></code><p></p></div></div><div><p class="copyright">Copyright © 2007 The Khronos Group Inc.</p></div><div><div class="legalnotice"><a name="legal"></a><p>This document is protected by copyright laws and contains
material proprietary to the Khronos Group, Inc. It or any components
may not be reproduced, republished, distributed, transmitted,
displayed, broadcast or otherwise exploited in any manner without
the express prior written permission of Khronos Group.
The receipt or possession of this
document does not convey any rights to reproduce, disclose, or
distribute its contents, or to manufacture, use, or sell anything
that it may describe, in whole or in part.</p><p>Khronos Group grants express permission to any current Promoter,
Contributor or Adopter member of Khronos to copy and redistribute
UNMODIFIED versions of this document in any fashion, provided
that NO CHARGE is made for the document and the latest available
update of the document is used whenever possible.
Such distributed document may be
re-formatted AS LONG AS the contents of the document are not
changed in any way. The document may be incorporated into a
product that is sold as long as such product includes significant
independent work developed by the seller. A link to the current
version of this document on the Khronos Group web-site should
be included whenever possible with document distributions.</p><p>Khronos Group makes no, and expressly disclaims any,
representations or warranties, express or implied, regarding this
document, including, without limitation, any implied warranties
of merchantability or fitness for a particular purpose or
non-infringement of any intellectual property. Khronos Group makes
no, and expressly disclaims any, warranties, express or implied,
regarding the correctness, accuracy, completeness, timeliness, and
reliability of the document. Under no circumstances will the Khronos
Group, or any of its Promoters, Contributors or Members or their
respective partners, officers, directors, employees, agents or
representatives be liable for any damages, whether direct, indirect,
special or consequential damages for lost revenues, lost profits,
or otherwise, arising from or in connection with these
materials.</p><p><span class="trademark">Khronos</span>™ is a trademark of
The Khronos Group Inc. <span class="trademark">OpenGL</span>®
is a registered trademark, and
<span class="trademark">OpenGL ES</span>™is a trademark, of
Silicon Graphics, Inc.</p></div></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="3"><b>Revision History</b></th></tr><tr><td align="left">Revision 0.9.0</td><td align="left">2006-12-08 19:15:11 -0800</td><td align="left">msc</td></tr><tr><td align="left" colspan="3">First docbook version</td></tr><tr><td align="left">Revision 0.91.0</td><td align="left">2006-12-12 17:26:03 -0800</td><td align="left">msc</td></tr><tr><td align="left" colspan="3">Public review version: amended copyright notice; changed OpenKODE and GLES utility library names.</td></tr></table></div></div><div><div class="abstract"><p class="title"><b>Abstract</b></p><p>Guidelines to be followed by implementers of Khronos Group
<em class="glossterm">APIs</em></p></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#introduction">Introduction</a></span></dt><dt><span class="section"><a href="#generalguidelines">General Guidelines </a></span></dt><dd><dl><dt><span class="section"><a href="#controlled">Vendor Controlled Platforms (e.g. BREW, SymbianOS)</a></span></dt><dt><span class="section"><a href="#uncontrolled">Uncontrolled Platforms (e.g. GNU/Linux, Windows, Windows CE)</a></span></dt></dl></dd><dt><span class="section"><a href="#id4787332">Acknowledgements</a></span></dt><dt><span class="glossary"><a href="#id4787444">Glossary</a></span></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>1. <a href="#id4713194">Header File Names and Locations</a></dt><dt>2. <a href="#id4786950">Recommended Library Names</a></dt></dl></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="introduction"></a>Introduction</h2></div></div></div><p> This document provides guidelines for
<a href="#gls_implementer"><em class="firstterm">implementers
</em></a>
of OpenGL ES, OpenVG and other <a href="#gls_api"><em class="firstterm">API</em></a>
standards specified by the Khronos Group.
The aim of these hints is to provide commonality between implementations to
ease the logistical problems faced by developers using multiple different
implementations of an <em class="glossterm">API</em>.
</p><p> One of the primary goals is to allow an application binary to run
on top of multiple different OpenGL ES / OpenVG / EGL implementations
on the same platform. </p><p> Implementers are strongly urged to comply with these guidelines.
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="generalguidelines"></a>General Guidelines </h2></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="controlled"></a>Vendor Controlled Platforms (e.g. BREW, SymbianOS)</h3></div></div></div><p> Implementers should follow the linkage specifications established
by the
<a href="#gls_vendor"><em class="firstterm">platform vendor</em></a>
.
</p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Use the header files, (e.g., for OpenGL ES, gl.h & egl.h)
provided by the platform vendor. </p></li><li style="list-style-type: circle"><p> Use the function names specified in those header files. </p></li><li style="list-style-type: circle"><p>Implement all <em class="glossterm">API</em>
entry points in the same way as in the
<em class="glossterm">vendor</em>-provided
<a href="#gls_abi"><em class="firstterm">ABI</em></a>. That is,
functions should be functions, in-line functions should be
in-line functions and macros should be macros.
</p></li><li style="list-style-type: circle"><p> Use the platform specified library names. </p></li></ul></div><p>Vendors of controlled platforms are strongly urged to follow the
recommendations given below for <a href="#uncontrolled" title="Uncontrolled Platforms (e.g. GNU/Linux, Windows, Windows CE)">
Uncontrolled Platforms</a> when adding a Khronos Group
<em class="glossterm">API</em> to their platform.
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="uncontrolled"></a>Uncontrolled Platforms (e.g. GNU/Linux, Windows, Windows CE)</h3></div></div></div><p> When providing implementations for platforms where the vendor
does not provide standard linkage specifications, implementers
are urged to follow the following recommendations.</p><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="headerfiles"></a> Header Files </h4></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="hfgeneral"></a>General</h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>Use the Khronos provided header files (e.g., for OpenGL
ES, <code class="filename">gl.h</code> &
<code class="filename">egl.h</code>). If changes are
unavoidable, consider contributing your changes back to Khronos
by updating the standard header files in the Khronos Subversion
tree. </p></li><li><p> If you make your own header files and the platform is
Windows, make sure they are suitable for use with
<a href="#gls_mfc"><em class="firstterm"><span class="acronym">MFC</span></em></a>.
For example
<code class="code">#define EGL_DEFAULT_DISPLAY GetDC(0)</code>
is broken for MFC. You need to use
<code class="code">::GetDC(0)</code>
because several MFC have their own
<code class="code">GetDC(void)</code>
methods.</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="hfegl"></a>EGL</h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p> Package the EGL header files
<code class="filename">egl.h</code>
and
<code class="filename">eglplatform.h</code>
in the folder
<code class="filename">EGL</code>.
</p></li><li><p> <code class="filename">eglplatform.h</code>
contains platform
dependent items and needs to be modified by the implementer.
In particular the
<span class="type">eglNativeDisplayType</span>,
<span class="type">eglNativeWindowType</span>, and
<span class="type">eglNativePixmapType</span>
typedefs must be defined as appropriate for the platform
(typically, they will be typedef'ed to corresponding types
in the native window system). Developer documentation should
mention the correspondence so that developers know what
parameters to pass to
<code class="function">eglCreateWindowSurface</code>,
<code class="function">eglCreatePixmapSurface</code>, and
<code class="function">eglCopyBuffers</code>.
Documentation should also describe the format of the
<em class="parameter"><code>display_id</code></em>
parameter to
<code class="function">eglGetDisplay</code>,
since this is a platform-specific identifier.</p></li><li><p> Include
<code class="filename">eglplatform.h</code>
in
<code class="filename">egl.h</code>
thus:
<code class="code">#include <EGL/eglplatform.h></code>
. Do not use
<code class="code">#include <eglplatform.h></code>
because app. makefiles will then need 2 different
<em class="parameter"><code>-I<path></code></em>
options to find both include files. </p></li><li><p> Do not include
<code class="filename">gl.h</code>
in
<code class="filename">egl.h</code>
. </p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="hfgles1x"></a> OpenGL ES 1.x </h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p> Package the OpenGL ES header files
<code class="filename">gl.h</code>
and
<code class="filename">glplatform.h</code>
in the folder
<code class="filename">GLES</code>
. </p></li><li><p> <code class="filename">glplatform.h</code>
contains platform dependent items and may need to be
modified by the implementer. Implementers are encouraged
to provide their additions for newly supported platforms
to the Khronos Group for inclusion in the Adopters'
distribution.</p></li><li><p> For compatibility with GLES 1.0 implementations, include
in
<code class="filename">GLES</code>
a special
<code class="filename">egl.h</code>
containing the following:
</p><div class="informalexample"><pre class="programlisting">
#include <EGL/egl.h>
#include <GLES/gl.h></pre></div><p>
This is because many early OpenGL ES 1.0 implementations
included
<code class="filename">gl.h</code>
in
<code class="filename">egl.h</code>
so many existing applications only include
<code class="filename">egl.h</code>
. </p></li><li><p>The name <code class="filename">glu.h</code>
is reserved for future use by the Khronos Group.</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="hfgles2x"></a> OpenGL ES 2.x </h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>The core header files for OpenGL ES 2.x are called
<code class="filename">gl2.h</code> and
<code class="filename">gl2platform.h</code> to
keep them distinct from the GLES 1.x header files and enable
application to use both versions.</p></li><li><p>The function declarations and constant definitions for
OpenGL ES 2.x are divided into 2 header files:
<code class="filename">gl2.h</code>
declares and defines all the core functions and constants;
<code class="filename">gl2ext.h</code>
declares and defines functions and constants for all
Khronos approved extensions and can be used even if the
implementation doesn't provide a particular extension.</p><p>Functions and constants for Implementer
extensions should be declared and defined in an implementer's
own header file using names and constant values obtained from
the Khronos Group's Extension Registry.</p></li><li><p>Package all these header files in the folder
<code class="filename">GLES2</code>.</p></li><li><p>The name <code class="filename">glu2.h</code>
is reserved for future use by the Khronos Group.</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="hfopenkode"></a>OpenKODE</h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>Package the OpenKODE header files
<code class="filename">kd.h</code>
and
<code class="filename">kdplatform.h</code>
in the folder
<code class="filename">KD</code>.
</p></li><li><p>Implementers are encouraged to code
<code class="filename">kd.h</code> such that it
includes as few as possible of the platform's include files,
and to avoid declaring C and POSIX standard functions. This
will ease the creation of portable OpenKODE applications,
and help stop non-portable code being added accidentally.
</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="hfopenvg"></a>OpenVG</h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>Package the OpenVG header files
<code class="filename">openvg.h</code>
and, when provided,
<code class="filename">vgu.h</code>
in the folder
<code class="filename">VG</code>
.</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="hfsummary"></a>Header File Summary</h5></div></div></div><div class="table"><a name="id4713194"></a><p class="title"><b>Table 1. Header File Names and Locations</b></p><table summary="Header File Names and Locations" border="1"><colgroup><col align="left"><col align="left"><col align="left"><col align="left"><col align="left"></colgroup><thead><tr><th align="left"> API </th><th align="left"> Location </th><th align="left"> Header Files </th><th align="left"> How to include </th><th align="left"> Provider </th></tr></thead><tbody><tr><td rowspan="2" align="left" valign="top"> EGL 1.x </td><td rowspan="2" align="left" valign="top">
<code class="filename">EGL</code>
</td><td align="left">
<code class="filename">egl.h</code>
</td><td align="left">
<code class="code">#include <EGL/egl.h></code>
</td><td align="left">
Khronos
</td></tr><tr><td align="left">
<code class="filename">eglplatform.h</code>
<sup>[<a name="id4713330" href="#ftn.id4713330">1</a>]</sup>
</td><td align="left">
Included by <code class="filename">egl.h</code>
</td><td align="left">
Vendor or Implementer
</td></tr><tr><td rowspan="3" align="left" valign="top"> OpenGL ES 1.x </td><td rowspan="3" align="left" valign="top">
<code class="filename">GLES</code>
</td><td align="left">
<code class="filename">gl.h</code>
</td><td align="left">
<code class="code">#include <GLES/gl.h></code>
</td><td align="left">
Khronos
</td></tr><tr><td align="left">
<code class="filename">glplatform.h</code>
<sup>[<a name="id4713439" href="#ftn.id4713439">2</a>]</sup>
</td><td align="left">
Included by <code class="filename">gl.h</code>
</td><td align="left">
Vendor or Implementer
</td></tr><tr><td align="left">
<code class="filename">glu.h</code>
</td><td colspan="2" align="center">
Reserved for future use
</td></tr><tr><td rowspan="4" align="left" valign="top"> OpenGL ES 2.x </td><td rowspan="4" align="left" valign="top">
<code class="filename">GLES2</code>
</td><td align="left">
<code class="filename">gl2.h</code>
</td><td align="left">
<code class="code">#include <GLES2/gl2.h></code>
</td><td align="left">
Khronos
</td></tr><tr><td align="left">
<code class="filename">gl2platform.h</code>
</td><td align="left">
Included by <code class="filename">gl2.h</code>
</td><td align="left">
Vendor or Implementer
</td></tr><tr><td align="left">
<code class="filename">gl2ext.h</code>
</td><td align="left">
<code class="code">#include <GLES2/gl2ext.h></code>
</td><td align="left">
Khronos
</td></tr><tr><td align="left">
<code class="filename">glu2.h</code>
</td><td colspan="2" align="center">
Reserved for future use
</td></tr><tr><td rowspan="2" align="left" valign="top"> OpenKODE 1.x </td><td rowspan="2" align="left" valign="top">
<code class="filename">KD</code>
</td><td align="left">
<code class="filename">kd.h</code>
</td><td align="left">
<code class="code">#include <KD/kd.h></code>
</td><td align="left">
Khronos
</td></tr><tr><td align="left">
<code class="filename">kdplatform.h</code>
</td><td align="left">
Included by <code class="filename">kd.h</code>
</td><td align="left">
Vendor or Implementer
</td></tr><tr><td rowspan="2" align="left" valign="top"> OpenVG 1.x </td><td rowspan="2" align="left" valign="top">
<code class="filename">VG</code>
</td><td align="left">
<code class="filename">openvg.h</code>
</td><td align="left">
<code class="code">#include <VG/openvg.h></code>
</td><td align="left">
Khronos
</td></tr><tr><td align="left">
<code class="filename">vgu.h</code>
<sup>[<a name="id4786686" href="#ftn.id4786686">3</a>]</sup>
</td><td align="left">
<code class="code">#include <VG/vgu.h></code>
</td><td align="left">
Khronos
</td></tr></tbody></table><div class="footnotes"><div class="footnote"><p><sup>[<a name="ftn.id4713330" href="#id4713330">1</a>] </sup>
Many early EGL implementations used
<code class="filename">egltypes.h</code>
instead of the now recommended
<code class="filename">eglplatform.h</code>
.</p></div><div class="footnote"><p><sup>[<a name="ftn.id4713439" href="#id4713439">2</a>] </sup>
<code class="filename">glplatform.h</code>
does not exist in many early implementations of
OpenGL ES 1.x. Platform dependent declarations were
included directly in <code class="filename">gl.h
</code>.</p></div><div class="footnote"><p><sup>[<a name="ftn.id4786686" href="#id4786686">3</a>] </sup>
Required, if the OpenVG utility library is provided.
</p></div></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="notes"></a>Notes </h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>To find the include files, use appropriate compiler
options in the makefiles for your sample programs; e.g.
<em class="parameter"><code>-I</code></em> (gcc, linux) or
<em class="parameter"><code>/I</code></em> (Visual C++).
</p></li><li><p>Given the different IDEs & compilers people use,
especially on Windows, it is not possible to recommend a system
location to place these include files. Where obvious choices
exist Khronos recommends implementers take advantage of them.
</p></li><li><p>In particular, GNU/Linux implementations should
follow the
<a href="http://www.pathname.com/fhs/" target="_top">
<em class="citetitle">Filesystem Hierarchy Standard</em>
</a>
for location of headers and libraries.
</p></li></ul></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="libraries"></a>Libraries</h4></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>It is highly desirable to implement all
<em class="glossterm">API</em> entry points as
function calls. However in the OpenKODE core, macros or in-lines
may be used instead of a function call provided the following
rules are followed:
</p><div class="itemizedlist"><ul type="circle"><li><p>When calling a function, each argument must be evaluated
exactly once (although the order of evaluation is
undefined).</p></li><li><p>It must be possible to take the address of function.
</p></li></ul></div></li><li><p>
Except in cases where macros are allowed, ensure the
<em class="glossterm">API</em> function
names exported by your lib & dll files match the function
names specified by the Khronos standard for the
<em class="glossterm">API</em> you are
implementing.
</p></li></ul></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="lpackaging"></a>Packaging</h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>OpenGL ES, EGL, OpenVG and OpenKODE entry points should
be packaged in separate libraries.</p></li><li><p>However to provide backward compatibility for existing
applications, two OpenGL ES 1.1 libraries should be provided:
one with and one without the EGL entry points.</p><p>
<span class="emphasis"><em>Note: There are extant implementations of the dual
OpenGL ES libraries demonstrating this is possible on Symbian,
GNU/Linux, Win32 and WinCE.</em></span>
</p><p>For OpenGL ES 2.x, only a library without EGL entry points
is needed.</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="lnaming"></a>Naming</h5></div></div></div><p>Khronos recommends the library names shown in the following
table: </p><div class="table"><a name="id4786950"></a><p class="title"><b>Table 2. Recommended Library Names</b></p><table summary="Recommended Library Names" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th align="left"> API/Entry Points </th><th align="left"> Name </th></tr></thead><tbody><tr><td align="left"> EGL </td><td align="left">
<code class="filename">libEGL.{lib,dll}</code>
</td></tr><tr><td align="left"> OpenGL ES 1.x with EGL (Common Profile)</td><td align="left">
<code class="filename">libGLES_CM.{lib,dll}</code>
<sup>[<a name="fnreq" href="#ftn.fnreq">1</a>]</sup>
<sup>[<a name="fndepr" href="#ftn.fndepr">2</a>]</sup>
</td></tr><tr><td align="left"> OpenGL ES 1.x with EGL (Lite Profile) </td><td align="left">
<code class="filename">libGLES_CL.{lib,dll}</code>
<sup>[<a href="#ftn.fnreq">1</a>]</sup>
<sup>[<a href="#ftn.fndepr">2</a>]</sup>
</td></tr><tr><td align="left"> OpenGL ES 1.x without EGL </td><td align="left">
<code class="filename">libGLESv1_C[LM].{lib,dll}</code>
<sup>[<a name="fnsprev" href="#ftn.fnsprev">3</a>]</sup>
</td></tr><tr><td align="left"> OpenGL ES 2.x without EGL </td><td align="left">
<code class="filename">libGLESv2.{lib,dll}</code>
</td></tr><tr><td align="left"> </td><td align="left">
<code class="filename">libGLUESv1.{lib,dll}</code>
<sup>[<a name="fnreserved" href="#ftn.fnreserved">4</a>]</sup>
</td></tr><tr><td align="left"> </td><td align="left">
<code class="filename">libGLUESv2.{lib,dll}</code>
<sup>[<a href="#ftn.fnreserved">4</a>]</sup>
</td></tr><tr><td align="left"> OpenKODE </td><td align="left">
<code class="filename">libKD{lib,dll}</code>
</td></tr><tr><td align="left"> OpenVG </td><td align="left">
<code class="filename">libOpenVG{lib,dll}</code>
</td></tr><tr><td align="left"> OpenVG Utilities (when present) </td><td align="left">
<code class="filename">libOpenVGU.{lib,dll}</code>
</td></tr></tbody></table><div class="footnotes"><div class="footnote"><p><sup>[<a name="ftn.fnreq" href="#fnreq">1</a>] </sup> These names are required for OpenGL ES 1.0
and the libraries must contain the EGL entry points
as detailed in Chapter 8,
<span class="emphasis"><em>Packaging</em></span>,
of the OpenGL ES 1.0 specification.</p></div><div class="footnote"><p><sup>[<a name="ftn.fndepr" href="#fndepr">2</a>] </sup> These names are deprecated for OpenGL ES 1.1
and beyond and should only be used for a library
that includes the EGL entry points in order to support
legacy applications. </p></div><div class="footnote"><p><sup>[<a name="ftn.fnsprev" href="#fnsprev">3</a>] </sup>
<span class="emphasis"><em>The OpenGL ES 1.1 specification at revision 1.1.09
was updated to specify these alternate names for GLES
libraries that do not contain the EGL entry points.
</em></span>
</p></div><div class="footnote"><p><sup>[<a name="ftn.fnreserved" href="#fnreserved">4</a>] </sup>These names are reserved for future use by the
Khronos Group.</p></div></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="notes2"></a>Notes </h5></div></div></div><div class="itemizedlist"><ul type="disc"><li><p><span class="emphasis"><em>The extensions
<code class="filename">.lib</code>
& <code class="filename">.dll</code>
are allowed to vary by platform. On GNU/Linux for example
they should be .a and .so to match that platform's
conventions.</em></span></p></li></ul></div></div></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id4787332"></a>Acknowledgements</h2></div></div></div><p class="ackno">
<p>Thanks to all the members of the Khronos Group for their input
and in particular to the following:
</p>
<table class="simplelist" border="0" summary="Simple list"><tr><td>
<span class="othercredit"><span class="firstname">Petri</span> <span class="surname">Kero</span></span>
</td></tr><tr><td>
<span class="othercredit"><span class="firstname">Jon</span> <span class="surname">Leech</span></span>
</td></tr><tr><td>
<span class="othercredit"><span class="firstname">Robert</span> <span class="surname">Palmer</span></span>
</td></tr><tr><td>
<span class="othercredit"><span class="firstname">Jani</span> <span class="surname">Vaarala</span></span>
</td></tr><tr><td>
<span class="othercredit"><span class="firstname">Hans-Martin</span> <span class="surname">Will</span></span>
</td></tr></table>
</p></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a name="id4787444"></a>Glossary</h2></div></div></div><dl><dt><a name="gls_abi"></a>Application Binary Interface (ABI)</dt><dd><p>
The low-level interface between a compiled application program and the
operating system or its libraries.
</p></dd><dt><a name="gls_api"></a>Application Programming Interface (API)</dt><dd><p>
The source-code level interface between an application program
and the operating system or its libraries.
</p></dd><dt><a name="gls_implementer"></a>Implementer</dt><dd><p>
A company or person who implements a Khronos API.
</p></dd><dt><a name="gls_mfc"></a>Microsoft Foundation Classes (MFC)</dt><dd><p>
A set of C++ utility classes provided by Microsoft Corporation.
</p></dd><dt><a name="gls_vendor"></a>Platform Vendor (Vendor)</dt><dd><p>
A company providing an operating system platform that includes an
<em class="glossterm">ABI</em>
specification for one or more Khronos APIs. E.g., Qualcomm (OpenGL ES
on BREW) and Symbian (OpenGL ES on Symbian OS). A Vendor may also be
an <em class="glossterm">Implementer.</em>
</p></dd></dl></div></div></body></html>