* Template for specifying an extension to OpenGL, OpenGL ES,
* and related APIs.
*
* Last Modified Date: January 20, 2010
* Revision: 8
*
* Document Source: the OpenGL Extension Registry at
*
*   http://www.opengl.org/registry/
*
* and the OpenGL ES Extension Registry at
*
*   http://www.khronos.org/registry/gles/
*
* Notes:
*
*   Comments in this template document are preceded by an asterisk.
*   This entire section is one big comment.
*
*   Extension documents are simple fixed-width ASCII text, up to 132
*   characters wide. Here is a line of 132 characters for calibration:
*
*00000000011111111112222222222333333333344444444445555555555666666666677777777778888888888999999999900000000001111111111222222222233
*
*   Lines should end with a hard newline. Do not assume that any
*   special formatting or interpretation will be made by software
*   displaying the specification.
*
*   Although the extension file is formally 132 characters wide,
*   text is limited to 72 characters, and only tables that require
*   more than 72 character width extend to the full file width.
*   Here is a line of 72 characters for calibration:
*
*00000000011111111112222222222333333333344444444445555555555666666666677
*
*   The extension is completely described by its specification, mostly
*   in the "Additions to <section name>" sections. These sections are
*   written as though the additions described by previous extensions
*   had actually been made to specified portions of the OpenGL, OpenGL
*   ES, OpenGL Shading Language, GLX, EGL, or other Specification
*   documents.
*
*   The "Dependencies on Extension" sections are used to describe how
*   the extension semantics are modified if a previous extension is not
*   supported, or to indicate that a previous extension must be
*   supported.
*
*   When changes are made to the contents of a table, new, changed,
*   and removed table entries must be identified. All fields of
*   changed table entires should be included, even if not all fields
*   have changed.
*
*   An extension specification is always written against given
*   version(s) of Specifications, which must be identified in the
*   Dependencies section. That is, the references and modifications in
*   the extension are applied to that version of the Specification.
*
*   The latest Khronos-approved version of Specifications should be
*   used when writing an extension. If it is possible for the extension
*   to be used with older versions of a Specification, this should also
*   be described in the Dependencies section.
*
*   For consistency with OpenGL and ES Specifications, extension
*   documents omit gl prefixes on command names, GL_ prefixes on
*   token names, and GL prefixes on type names. Vendor-specific
*   suffixes are included in these files, however. The terms
*   "GL" and "ES" below should be taken to refer to OpenGL and
*   OpenGL ES, respectively.
*
*   To be consistent with the GLX Specification, however, extensions
*   defining GLX functionality include glX prefixes on command names
*   and GLX_ prefixes on token names. Similarly, WGL extensions
*   include wgl and WGL_ prefixes on command and token names.
*
*   An extension document should by preference include all the
*   sections in this template unless a particular section indicates
*   its inclusion is optional. If there is no text in a section,
*   this is indicated by the word "None", such as:
*
*	Dependencies
*
*	    None
*
*   While this may appear excessively verbose, the purpose is to ensure
*   that extension authors document all affected parts of Specifications.
*   An exception is that headers for sections of Specifications that
*   are not altered by the extension may be omitted, once the extension
*   has been completed. Thus for example a GLX extension need not
*   retain "Changes to Chapter <N> of the OpenGL 1.X Specification"
*   headers, and an OpenGL extension that does not affect per-vertex
*   processing in any way need not retain "Changes to Chapter 2...".
*
*   Lower-case or numeric subscripts of upper-case variables are
*   simply appended to the variable. For example "R subscript t"
*   is written as Rt. If it is not easy to distinguish the variable
*   from the subscript, an underbar is used to separate them. For
*   example, "R subscript T" is written as R_T.
*
*   Multiplication is indicated with an asterisk, not by adjacency
*   of two variables.
*
*   In text, parameter names are distinguished by being surrounded
*   with angle brackets. For example, the pname parameter to
*   TexParameter is written as <pname>.
*
*   Math symbols (such as the 'tau', 'lambda', and 'rho' defined
*   by the texturing section) should be completely written out
*   in ASCII as described, rather than assuming a non-ASCII
*   character set.
*
*   The template proper follows.

************************************************************************

Name

    *	The formal name of the extension. The prefix of the name is a
    *	vendor-specific tag. This is a short, capitalized string unique
    *	to that vendor, such as "SGI" and "IBM" for those respective
    *	companies. The prefix may also be "EXT" is two or more vendors
    *	have agreed to support the extension, "ARB" if the OpenGL ARB
    *	Working Group has voted to approve the extension, "OES" is the
    *	OpenGL ES Working Group has voted to approve the extension,
    *	and "KHR" if the EGL Working Group has voted to approve
    *	the extension.
    *
    *	Some vendors use an additional convention where the vendor
    *	tag may be followed by "S" to indicate an extension
    *	only supported on a subset of their supported platforms,
    *	and may be followed by an "X" to indicate an experimental
    *	extension, which may be changed or withdrawn in the future.
    *
    *	The prefix is separated from the body of the name by an
    *	underscore. Words within the name are also separated by
    *	underscores. There is no capitalization used in the body of the
    *	name. For example:

    *	Name
    *
    *	    SGI_new_extension

Name Strings

    *	Extensions may apply to several different APIs, and extension
    *	names are prefixed accordingly. The possible categories are:
    *
    *	Extension of	String query function	    Name prefixed by
    *	------------	---------------------	    ----------------
    *	GL and/or ES	glGetString		    GL_
    *	GLU		gluGetString		    GLU_
    *	GLX		glXQueryExtensionsString    GLX_
    *	EGL		eglQueryString		    EGL_
    *	WGL		glGetString,		    WGL_
    *			wglGetExtensionsStringEXT(*)
    *	AGL		???			    ???_
    *
    *	(*) Note: WGL extension strings are returned by both glGetString
    *	and (if the WGL_EXT_extensions_string extension is supported) by
    *	wglGetExtensionsStringEXT.
    *
    *	For example, an SGI-specific extension which adds entry points to
    *	both GLX and OpenGL would be listed as:

    *	Name Strings
    *
    *	    GL_SGI_new_extension
    *	    GLX_SGI_new_extension

    *	A multivendor extension which adds an entry point to WGL would be
    *	listed as:

    *	Name Strings
    *
    *	    WGL_EXT_new_extension

    *	The name strings are included in header files, and are returned
    *	by the string query functions as shown in the table above.
    *	In most cases the Name String is simply the Name prefixed
    *	by the relevant API.

Contact

    *	Name, company, and email address of people responsible for the
    *	extension. We suggest using 'at' instead of '@' in email
    *	addresses, to help prevent spam. For multivendor extensions,
    *	contacts from each vendor supporting the extension are preferred.
    *	A backup contact, in case the principal moves on, will be
    *	helpful. Example:

    *	Contact
    *
    *	    Jon Leech, Khronos (jon 'at' alumni.caltech.edu)

Contributors

    *	Name and company of other people who helped develop the
    *	extension. Credit may be given to an entire Working
    *	Group if contributions are too diffuse.

    *	Contributors
    *	    Members of the Khronos ARB-ES Convergence TSG

Status

    *	If the specification is incomplete, the Status section should
    *	be something like
    *
    *	    XXX - Not complete yet. Do not ship!!!
    *
    *	to indicate that nobody should ship the extension in its
    *	current, unfinished state. Once it is complete, Status should be
    *	changed to "Complete". For extensions approved by Khronos, this
    *	should be extended to note when the extension was approved by
    *	the relevant Working Group(s) and by the Khronos Promoters.
    *
    *	Once the extension ships, its status should be changed to
    *	indicate this, as well as what the version number at shipping
    *	time is. Finally, if an extension is withdrawn (or never shipped
    *	due to e.g. cancellation of a product), it should be marked
    *	obsolete. Examples:

    *	Status
    *
    *	    XXX - Not complete yet!!!

    *	Status
    *
    *	    Complete. Approved by the Khronos Promoters on April 1, 2009.

    *	Status
    *
    *	    Shipping (version Major.minor)

    *	Status
    *
    *	    Obsolete

Version

    *	It's hard to generate good version numbers with version control
    *	systems, since extension specs may live in many different source
    *	trees. We now suggest including a manually-inserted date of last
    *	modification and version number. These should be updated only
    *	for meaningful changes to the extension, not just formatting.

    *	Version
    *
    *	    Last Modified Date: January 20, 2010
    *	    Revision: 8

    *	If you do not include a date and version number when submitting
    *	an extension to the registry, Khronos will generate one based on
    *	the date the specification was received.

Number

    *	Extensions are numbered for documentation purposes. Each
    *	extension should document its interactions with the core
    *	Specification and with all other extensions (that are also
    *	supported by the vendors shipping this extension) that have lower
    *	numbers. For example, extension 3 should document its interactions
    *	with the core document and (if any) with extensions 1 and 2.
    *
    *	The extension number has no meaning outside of the documentation.
    *	In particular, it is not revealed to programmers who use OpenGL.
    *	Extension numbers are assigned by Khronos when an extension is
    *	submitted to the registry.
    *
    *	ARB and ES extensions follow separate numbering schemes from
    *	vendor extensions. If an extension can be implemented against
    *	both GL and ES, assign numbers from both registries.

    Examples:

    *	Number
    *
    *	    12

    *	Number
    *
    *	    ARB Extension #12

    *	Number
    *
    *	    ARB Extension #23
    *	    OpenGL ES Extension #17

Dependencies

    *	List the oldest version of GL, ES, OpenGL Shading Language, GLX,
    *	etc.) against which this extension can be implemented, as well
    *	as the version and, if relevant, profile against which the
    *	extension is written. Because specifications can be revised
    *	after their initial release, affecting page and table numbering,
    *	also include the release date of the specifications. It is
    *	usually best to write the extension against the current
    *	versions of Specifications even if it can be successfully
    *	implemented against older versions).
    *
    *	Separately list all API profiles and extensions that must be
    *	present for this extension to be implemented, and all extensions
    *	whose presence or absence modifies the operation of this
    *	extension.
    *
    *	If an extension can be implemented against both GL and ES,
    *	document both requirements, and note if their are any
    *	functionality differences (typically an extension which
    *	works with both GL and ES will not support interactions
    *	with GL features not present in ES in the ES version, but
    *	it is still valuable to have a common extension spec).

    *	Dependencies
    *	    OpenGL 3.2 (either core or compatibility profiles) is
    *	    required.
    *
    *	    This extension is written against the OpenGL 3.2
    *	    (Core Profile) Specification (August 3, 2009).

    *	Dependencies
    *	    OpenGL 2.0 or OpenGL ES 2.0 are required.
    *
    *	    Some of the functionality of this extension is not supported
    *	    when implemented against OpenGL ES 2.0.
    *
    *	    This extension is written against the OpenGL 2.0
    *	    Specification (October 22, 2004).

    *	Dependencies
    *	    OpenGL 1.2 is required.
    *
    *	    ARB_texture_float affects the definition of this extension.
    *
    *	    This extension is written against the OpenGL 2.1
    *	    Specification (May 16, 2008).

Overview

    *	What does the extension do?  What problem does it solve? This
    *	can include background and rationale (unlike the specification
    *	language proper). A common format is a single sentence
    *	summarizing the extension, followed by greater levels of detail
    *	which will help people understand the extension. Note that the
    *	GL Specification explicitly does not include rationale, so the
    *	overview is a good place to put it instead.

IP Status

    *	Document any known patents or other IP claims that may prohibit
    *	royalty-free implementation of an extension, or impose other
    *	constraints on implementations. It is better to write "No
    *	known IP claims" rather than "None", since Khronos, or the
    *	vendor for vendor extensions, may not know of relevant IP.
    *
    *	Examples:

    *	IP Status
    *
    *	    ReallyBigCo has made unspecified IP claims against
    *	    all implementations of this extension.

    *	IP Status
    *
    *	    US Patent #7,654,321, owned by ReallyBigCo, may
    *	    be infringed by implementations of this extension.

    * (note: extensions which have been approved by the Khronos
    * Promoters fall under the Khronos IP agreements, which
    * offer mutual protections to the members who implement
    * such extensions).

    *	IP Status
    *
    *	    No known IP claims.

New Procedures and Functions

    *	List all the procedures and functions that are defined by this
    *	extension. Each should be suffixed using the same string as was
    *	chosen as the extension name prefix. All parameter names and
    *	types must be included, including the return values of functions.
    *	Follow the style used in the appropriate Specifications.
    *	Example:

    *	New Procedures and Functions
    *
    *	    void NewCommandEXT(int arg1, float arg2);

New Types

    *	List all new GL types defined by this extension. Include enough
    *	information to define a common underlying C-language binding
    *	definition on a per-architecture basis. For example, instead
    *	of saying "GLhandleARB", say:

    *	New Types
    *
    *	    typedef unsigned int GLhandleARB;

New Tokens

    *	This list should be complete. It should separate the new tokens
    *	based on which procedures and parameters accept them, and
    *	explicitly list those procedures and parameters. Token suffixes
    *	must match the prefix chosen for the extension name. If
    *	enumerant values have been assigned, include them; otherwise
    *	list the values as "0x????". For example:

    *	New Tokens
    *
    *	Accepted by the <pname> parameters of GetBooleanv, GetIntegerv,
    *	GetInteger64v, GetFloatv, and GetDoublev:
    *
    *	    NEW_TOKEN_EXT		0x6042
    *	    ANOTHER_TOKEN_EXT		0x????

*   Now, for each section of the relevant Specification (GL, ES, GLX,
*   EGL, etc.), show in detail all changes to the Specification
*   document required to completely describe this extension. Changes
*   should be written in the style of the specifications and should be
*   phrased as changes to specific, identifiable parts of the document.
*   In each section heading, include the version of the specification
*   being modified. If an extension is being written against both GL
*   and ES, it is usually best to show changes against the GL
*   Specification, then summarize differences when implemented with
*   ES in a "Dependencies" section following the changes (see below).

Additions to Chapter 2 of the OpenGL 3.2 (Core Profile) Specification
(OpenGL Operation)

    *	Include any new command suffixes here (section 2.3)
    *	Include any new error types here (section 2.5)

Additions to Chapter 3 of the OpenGL 3.2 (Core Profile) Specification
(Rasterization)

Additions to Chapter 4 of the OpenGL 3.2 (Core Profile) Specification
(Per-Fragment Operations and the Frame Buffer)

Additions to Chapter 5 of the OpenGL 3.2 (Core Profile) Specification
(Special Functions)

    *	List commands that are not included in display lists
    *	(typically, Get* commands)

Additions to Chapter 6 of the OpenGL 3.2 (Core Profile) Specification
(State and State Requests)

    *	The lists of state and implementation-dependent state are added
    *	in the "New State" section. Add queries and new attributes here.

Additions to Appendix A of the OpenGL 3.2 (Core Profile) Specification
(Invariance)

    *	If the utility of the extension would be increased by
    *	specification of invariance relationships, note that here.

Additions to Appendix D of the OpenGL 3.2 (Core Profile) Specification
(Shared Objects and Multiple Contexts)

    *	If object sharing behavior is affected by the extension,
    *	describe that in the set of sharing rules in this section.

************************************************************************

*   If this is an OpenGL Shading Language extension, include a separate
*   section for each affected chapter of the 1.50 (or specified version)
*   Specification.

Additions to Chapter 1 of the OpenGL Shading Language 1.50 Specification
(Introduction)

Additions to Chapter 2 of the OpenGL Shading Language 1.50 Specification
(Overview of OpenGL Shading)

Additions to Chapter 3 of the OpenGL Shading Language 1.50 Specification
(Basics)

Additions to Chapter 4 of the OpenGL Shading Language 1.50 Specification
(Variables and Types)

Additions to Chapter 5 of the OpenGL Shading Language 1.50 Specification
(Operators and Expressions)

Additions to Chapter 6 of the OpenGL Shading Language 1.50 Specification
(Statements and Structure)

Additions to Chapter 7 of the OpenGL Shading Language 1.50 Specification
(Built-in Variables)

Additions to Chapter 8 of the OpenGL Shading Language 1.50 Specification
(Built-in Functions)

Additions to Chapter 9 of the OpenGL Shading Language 1.50 Specification
(Shading Language Grammar)

Additions to Chapter 10 of the OpenGL Shading Language 1.50 Specification
(Issues)

************************************************************************

*   If none of the window-system integration APIs are affected by
*   this extension, indicate this by

Additions to the AGL/EGL/GLX/WGL Specifications

    None

*   Otherwise, for a WGL or AGL extension, include a description of how
*   the extension affects those APIs. WGL and AGL don't have spec
*   documents, but we still phrase these sections as "Changes to the
*   Specification" in anticipation of specifications being written.

Additions to the WGL Specification

Additions to the AGL Specification

************************************************************************

*   For a GLX extension (since GLX has a formal Specification),
*   include a separate section for each affected chapter of
*   the GLX Specification:

Additions to Chapter 1 of the GLX 1.4 Specification (Overview)

Additions to Chapter 2 of the GLX 1.4 Specification (GLX Operation)

Additions to Chapter 3 of the GLX 1.4 Specification
(Functions and Errors)

Additions to Chapter 4 of the GLX 1.4 Specification
(Encoding on the X Byte Stream)

Additions to Chapter 5 of the GLX 1.4 Specification (Extending OpenGL)

Additions to Chapter 6 of the GLX 1.4 Specification (GLX Versions)

************************************************************************

*   Likewise for an EGL extension.

Additions to Chapter 1 of the EGL 1.4 Specification (Overview)

Additions to Chapter 2 of the EGL 1.4 Specification (EGL Operation)

Additions to Chapter 3 of the EGL 1.4 Specification
(EGL Functions and Errors)

Additions to Chapter 4 of the EGL 1.4 Specification (Extending EGL)

Additions to Chapter 5 of the EGL 1.4 Specification
(EGL Versions and Enumerants)

Additions to Chapter 6 of the EGL 1.4 Specification (Glossary)

************************************************************************

*   For an extension of any type which is to be supported by GLX indirect
*   rendering, include additions to the GLX Protocol Specification.

GLX Protocol

    *	Add protocol here using the same format as the GLX protocol
    *	document. Be sure to specify the values of enumerated types.
    *
    *	Use glXVendorPrivate for extended requests without a reply
    *	(e.g., new GLX commands) :
    *	    glXVendorPrivate
    *
    *		1   CARD8	opcode (X assigned)
    *		1   16		GLX opcode
    *		2   2+(n+p)/4	request length
    *		4   CARD32	vendor-specific opcode
    *		n   LISTofBYTE	vendor-specific data
    *		p		unused, p=pad(n)
    *
    *	Make sure to reserve a vendor-specific opcode by request from
    *	Khronos (just as enumerant values are assigned on request), then
    *	define the layout of the vendor-specific data.
    *
    *	Use glXVendorPrivateWithReply for extended requests with a reply
    *	(e.g., new gets for OpenGL):
    *
    *	    glXVendorPrivateWithReply
    *
    *		1   CARD8	opcode (X assigned)
    *		1   17		GLX opcode
    *		2   2+(n+p)/4	request length
    *		4   CARD32	vendor-specific opcode
    *		n   LISTofBYTE	vendor-specific data
    *		p		unused, p=pad(n)
    *	=>
    *		1	1	reply
    *		1		unused
    *		2   CARD16	sequence number
    *		4   n		reply length
    *		24  LISTofBYTE	returned data
    *		4*n LISTofBYTE	more returned data
    *
    *	This is similar to glXVendorPrivate except you also need to
    *	define the layout of the returned data.
    *
    *	For extended OpenGL commands, be sure to specify whether it is a
    *	rendering command or a non-rendering command, and if it is a
    *	rendering command, whether or not it can be large.
    *
    *	To specify an extended visual attribute, specify a property
    *	type/property value pair to use with glXGetVisualConfigs.

    ********************************************************************

Dependencies on GL and ES profiles, versions, and other extensions

    *	Separately list each interaction which affects the behavior
    *	of this extension depending on which other extensions
    *	are present or on which version of Specifications this
    *	extension is implemented against. Examples:

    *	Dependencies on ARB_texture_float
    *
    *	    If ARB_texture_float is not supported, then
    *	    delete all references to the R*F* pixel formats.

    *	Dependencies on OpenGL ES
    *
    *	    If implemented for OpenGL ES, this extension
    *	    behaves as specified, except:
    *
    *	    - Ignore all references to display lists and
    *	      immediate mode, including changes to section 5.4.
    *	    - Ignore all references to GLX and GLX Protocol.

Errors

    *	This list summarizes all possible errors generated by the
    *	extension and should be complete (however, errors are best
    *	described in the extension body text as well).

New State

    *	Include modifications to the state tables in chapter 6 of the
    *	GL and/or ES Specifications (other Specifications do not
    *	have state tables). For each affected table, identify the
    *	table and describe all new or modified state values in the
    *	format of that table. Client state (for e.g. vertex arrays or
    *	pixel packing parameters) should have "client" listed in the
    *	Attribute column. Example:

    *	Changes to table 6.99, p. 516 (Funky Geometry State)
    *
    *					Initial
    *	Get Value Type	Get Command	Value	Description Sec.    Attribute
    *	--------- ----	-----------	------- ----------- ----    ---------
    *	RADIUS	  R	GetFloatv	1.0	Disk radius 2.6     vertex

New Implementation Dependent State

    *	Describe all implementation dependent state in the same
    *	fashion. Example:

    *	(Changes to table 6.100, p. 518 (Implementation-Dependent State)
    *
    *					Minimum
    *	Get Value   Type    Get Command Value	Description Sec.    Attribute
    *	---------   ----    ----------- ------- ----------- ----    ---------
    *	MAX_DISKS   Z+	    GetIntegerv 1000	Max. # of   2.5      -
    *						disks.

Sample Code

    *	For complex extensions, it may be worthwhile to include
    *	code samples of how to use the extension.

Conformance Tests

    *	If a conformance test is defined for the extension,
    *	summarize its basic purpose, if not necessarily its
    *	source code, here. If no test has been defined, note that
    *	they are needed.

Issues

    *	List remaining open issues, or closed issues whose resolution
    *	set a precedent or was otherwise especially interesting.
    *	Briefly describe each issue, options considered, the choice
    *	made, and the reason for that choice. The Issues section
    *	documents motivation, rationale, etc. while not being a
    *	normative part of the extension. We suggest a numerically
    *	order list so that issues can refer to other issues.
    *
    *	We now recommend placing the Issues list near the end of
    *	the extension, since it can grow very long yet is ancillary
    *	to the specification itself.

Revision History

    *	Include important changes in the evolution of the extension.
    *	It's especially important to include this section if the
    *	extension is modified after a version has been shipped.
    *
    *	Example (and actual revision history of the template):

*   Revision 8, 2010/01/20
*     - Minor updates for completeness and consistency. Push updated
*	template to the public Registry.
*   Revision 7, 2009/12/07
*     - Generalize template to allow for ES and GL extensions
*	and change references from SGI to Khronos as the
*	Registry owner.
*   Revision 6, 2006/10/09
*     - Move registry URL to www.opengl.org.
*   Revision 5, 2004/06/22
*     - Update template to allow OpenGL Shading Language and EGL
*	extensions. Add "Sample Code" section. Include more examples
*	under "IP Status". Add the template's revision history.
*	Add state table examples. Cleanup overall formatting to make
*	clear what are the section headers which must be present,
*	in contrast to the examples which are just part of this
*	template. Add document source URL.
*   Revision 4, 2003/12/19
*     - Add "New Types" section.
*   Revision 3, 2000/04/26
*     - Add "Author Revision" field to Version section, instead of
*	relying on source code control versions.
