OpenGL Enumerant Allocation Policies

If an OpenGL vendor defines a single-vendor OpenGL or GLX extension that requires one or more new enumerant values, then each of those values must be contained in a block of enumerant values that has been allocated by SGI for the exclusive use of that vendor. SGI maintains a registry of such allocations. Contact Jon Leech (ljp 'at' sgi.com) or the current OpenGL ARB Secretary (arb-secretary 'at' sgi.com) to allocate enumerants.

OpenGL 1.2.1 uses enumerant values in the range [0,24575], as well as reusing some enumerant values in the range [32768,65535]. The latter values were initially assigned to extensions which later became part of the OpenGL core. Enumerant values are grouped into blocks of 16 values, and each block begins with a value that is a multiple of 16. Most blocks in the range [0,24575] are unused, and reserved for use with future versions of OpenGL.

Historically, enumerant values for some single-vendor extensions were be allocated in blocks of 1000, beginning with the block [102000,102999] and progressing upward. Values in this range cannot be represented as 16-bit unsigned integers. This imposes a significant and unnecessary performance penalty on some implementations. Such blocks that have already been allocated to vendors will remain allocated unless and until the vendor voluntarily releases the entire block, but no further blocks in this range will be allocated.

Allocating Enumerants

Enumerant values for single-vendor extensions will be allocated upon request in blocks of 16 values, beginning with the block [32768,32783] and progressing upward. SGI maintains a registry of such allocations. There are a limited number (2048) of available blocks in the more desirable 16-bit range [32768,65535].

Vendors must adhere to the following guidelines for requesting and using enumerants:

If at some future time all blocks up to [99984,99999] have been allocated, allocations of blocks of 16 values will continue in an upward direction, skipping over any block of 16 values that contains one or more values from a currently allocated 1000-value block.

Last modified 3/29/1999 Jon Leech