| Syntax Rules for OpenGL Extensions | |
| Based on a version edited by Kurt Akeley on September 10, 2003. | |
| Updates proposed by Eskil Steenberg, May 2006. | |
| Revised by Benj Lipchak under the direction of the Ecosystem TSG, December 2006. | |
| Reserved terms | |
| -------------- | |
| ** NOTE ** | |
| Whereas some of the other rules in subsequent sections of this document | |
| are intended to be strictly adhered to, this section is intended as a | |
| set of guidelines to assist in name decisions. The guidelines should | |
| be considered, and then accepted or rejected, on a case by case basis. | |
| ** NOTE ** | |
| The terms used in OpenGL should have a consistent meaning. Any time | |
| new functionality is introduced it is desired to use terms that are | |
| previously established in GL. If no term exists that fits with the | |
| new functionality, a new term may be used. Whenever a new term is used, | |
| the precise meaning of that term should be specified and added to this | |
| text so that future functionality has the option of reusing the term | |
| with a consistent meaning. | |
| A term in GL should encompass more then the meaning of the word found | |
| in a dictionary. It should encompass limitations and usages and give the | |
| reader a broader sense of the usage of the word in the context of OpenGL. | |
| When choosing new words one should always name it for what it does and | |
| never name it for its intended usage. In a general programmable | |
| environment the naming should not suggest usage. | |
| It is desired to keep data and the usage of data separated in the name | |
| space. "image" data can be used for "texturing." The two should not be | |
| named the same. This maintains consistency if in some future version | |
| something other than an image can be used for texturing, or if an image | |
| can be used for something other then texturing. This is why it is | |
| strongly encouraged to name any storage class for what it stores, not the | |
| usage of the data. | |
| Whenever a procedure sets the state that is directly associated with | |
| something that can be found in the language grammar, it is preferred to | |
| use terms from the language like "attribute," "uniform" or "texture." | |
| 1: Asking for information | |
| "Get" is used as a prefix whenever the procedure returns state from the GL. | |
| 2: Storage | |
| "Create" is used for any procedure that creates an object. No other | |
| creations should be named "create." | |
| "Delete" is used for any procedure that marks an object for | |
| destruction. No other destructions should be named "delete." | |
| 4: Object content | |
| TBD: Names must be chosen. | |
| 5: Types of state setting | |
| "Pname" is used to define what a subsequent parameter refers to. Pname | |
| is always followed by a "param." | |
| "Param" is only used when a generic parameter or array of parameters is | |
| being passed in. | |
| "Count" always refers to the length of an array. | |
| "Size" always refers to size measured in units or number of bytes. | |
| "Render" refers to the later parts of the pipeline that apply the | |
| resulting data of a computation to a storage container. (Examples of | |
| operations that can be refered to as rendering are sampling, depth test, | |
| blending, and resolve.) | |
| "Draw" refers to the earlier part of the pipeline when results are | |
| being computed. | |
| 6: References | |
| Any time an object is referenced by the context or another object the | |
| following words should be used: | |
| TBD: Names must be chosen. | |
| Accepted terms | |
| -------------- | |
| Notes: | |
| 1. Abbreviations are required for all usage unless otherwise noted. | |
| 2. Compound words (e.g. Doublebuffer) must always be used as | |
| compounds. Embedded words are not capitalized in function | |
| names, and are not separated by underscores in token names. | |
| (e.g. Doublebuffer, not DoubleBuffer. DOUBLEBUFFER, not | |
| DOUBLE_BUFFER.) | |
| Exceptions: | |
| (1) Abbreviation is used in function names, but not in token names. | |
| (2) Abbreviation is used in token names, but not in function names. | |
| (3) Abbreviation is used for GL and GL extensions, but not for | |
| WGL abbreviations. | |
| (4) Abbreviation is used only as the last characters of token names | |
| that identify packed data types. | |
| (E.g. GL_UNSIGNED_BYTE_2_3_3_REV) | |
| (5) Abbreviation is used only in interleaved vertex array token names. | |
| (e.g. GL_T4F_C4F_N3F_V4F) | |
| (6) Abbreviation is used only for specific operations, such as | |
| logical operations (Logic Op) or stencil operations (Stencil Op). | |
| Abbreviation is not used for generic operations (e.g. Invalid | |
| Operation). | |
| Abbrev. Term or phrase Specification(s) used in | |
| ------- -------------- ------------------------ | |
| Access 28 | |
| Accum Accumulation Buffer GL, 9 | |
| Active GL, 15 | |
| Add GL, 6, 17 | |
| Address 2, 26 | |
| Aliased GL | |
| Alignment GL | |
| All GL | |
| Alpha GL, 5, 9, 12, 17 | |
| Always GL | |
| Ambient GL | |
| ASCII American Standard ... 26, 27 | |
| And GL | |
| Are GL | |
| ALU Arithmetic Logic Unit 27 | |
| Array GL, 15, 16, 26, 28 | |
| Attenuation GL, 14 | |
| Attrib Attribute GL, 9, 20, 26, 27, 28 | |
| Auto Automatic GL | |
| Aux Auxiliary GL, 9, 20 | |
| Back GL, 20 | |
| Base GL | |
| Begin GL | |
| Bias GL | |
| Bind GL, 20, 26, 27, 28 | |
| Binding GL, 7, 26, 27, 28 | |
| Bit GL, 9 | |
| Bitfield GL | |
| Bitmap GL, 9 | |
| Blend GL, 15 | |
| Blue GL, 9 | |
| BGR Blue Green Red GL | |
| BGRA Blue Green Red Alpha GL | |
| Boolean GL | |
| Border GL, 13 | |
| Box GL | |
| Buffer GL, 4, 5, 9, 11, 28 | |
| Byte GL | |
| Call GL | |
| Care GL | |
| Choose 9 | |
| Clamp GL, 13 | |
| Clear GL | |
| Client GL | |
| Clip Clipping GL | |
| CW Clockwise GL | |
| Coeff Coefficient GL | |
| C (5) Color GL, 3, 9, 17, 26, 28 | |
| Index Color Index GL, 9, 28 | |
| Combine GL, 17 | |
| Compare GL, 23, 24 | |
| Compile GL | |
| Component GL, 22 | |
| Compressed GL, 12 | |
| Compression GL, 12 | |
| Constant GL, 17 | |
| Control GL | |
| Convolution GL | |
| Context 10 | |
| Coord Coordinate GL, 27 | |
| Copy GL, 9, 28 | |
| Correction GL | |
| CCW Counter Clockwise GL | |
| Coverage GL, 5 | |
| Cube GL, 7, 20 | |
| Cube Map 7, 20 | |
| Cull GL | |
| Current GL, 10, 15, 16, 26, 27 | |
| Cutoff GL | |
| Data 28 | |
| Decal GL | |
| Decr Decrement GL | |
| Delete GL, 4, 26, 27, 28 | |
| Density GL | |
| Depth GL, 9, 16, 22, 26, 27 | |
| Dst Destination GL | |
| Destroy 11 | |
| Diffuse GL | |
| Dim Dimension GL | |
| Direction GL | |
| Disable GL, 26 | |
| List Display List | |
| Distance GL, 14 | |
| Dither GL | |
| Dont Do Not GL | |
| Domain GL | |
| Dot 19 | |
| Dot3 GL, 19 | |
| Double GL | |
| Doublebuffer GL | |
| Draw GL, 9, 11, 28 | |
| Dynamic 28 | |
| Edge GL, 28 | |
| Element GL, 28 | |
| Emission GL | |
| Enable GL, 26 | |
| Enabled GL | |
| End GL | |
| Enum Enumerant GL | |
| Env Environment GL, 26, 27 | |
| Equal GL | |
| Equation GL | |
| Equiv Equivalent GL | |
| Error GL, 10, 26, 27 | |
| Eval Evaluate GL | |
| XOR Exclusive OR GL | |
| Execute GL | |
| Exponent GL | |
| Exp Exponential GL | |
| Exp2 Exponential Squared GL | |
| Extension GL, 5 | |
| Eye GL | |
| Face GL, 20 | |
| Factor GL | |
| Fade GL, 14 | |
| Fail GL, 24 | |
| False GL | |
| Fan GL | |
| Fastest GL | |
| Feedback GL | |
| Fill GL | |
| Filter GL | |
| Finish GL | |
| First GL | |
| Flag GL | |
| Flat GL | |
| Float GL | |
| Flush GL | |
| Fog GL, 28 | |
| Format GL, 9, 12, 20, 26, 27 | |
| Fragment GL, 27 | |
| Framebuffer (documentation only) | |
| Front GL, 20 | |
| Frustum GL | |
| Func Function GL, 23 | |
| Gen Generate GL, 26, 27, 28 | |
| Get GL, 2, 5, 9, 10, 11, 26, 27, 28 | |
| Granularity GL | |
| GL Graphics Library GL | |
| Greater GL | |
| Gequal Greater than or equal to GL | |
| Green GL, 9 | |
| Grid GL | |
| Half GL | |
| Height GL, 11 | |
| Hint GL, 12 | |
| Histogram GL | |
| Identity GL | |
| Ignore GL | |
| Image GL, 12, 20, 27 | |
| Incr Increment GL | |
| Index 16 | |
| Indices GL | |
| Indirection 27 | |
| Init Initial GL | |
| Init Initialize GL | |
| Instruction 26, 27 | |
| Int (2) Integer GL | |
| Intensity GL, 12 | |
| Interleaved GL | |
| Internal GL | |
| Interpolate GL, 17 | |
| Invalid GL, 10 | |
| Invert GL, 5 | |
| Inverted GL | |
| Is GL, 26, 27, 28 | |
| Keep GL | |
| LSB Least significant bit GL | |
| Left GL, 20 | |
| Length GL, 26, 27 | |
| Less GL | |
| Lequal Less than or equal to GL | |
| Level GL, 20 | |
| LOD Level of Detail GL | |
| Light GL | |
| Light Model Lighting Model | |
| Line GL | |
| Linear GL | |
| List GL | |
| Limit 26, 27 | |
| Load GL, 3 | |
| Local GL, 26, 27 | |
| Logic Op Logical Operation GL | |
| Loop GL | |
| Luminance GL, 12 | |
| Mag Magnify GL | |
| Make 10 | |
| Map GL, 7, 20, 28 | |
| Mapped 3, 28 | |
| Mask GL | |
| Material GL | |
| Matrix, Matrices GL, 16, 26, 27 | |
| Max Maximum GL, 7, 11, 14, 15, 16, 26, 27 | |
| Memory GL | |
| Mesh GL | |
| Win Microsoft Windows OS GL | |
| Min Minimum GL, 14 | |
| Minmax Minimum Maximum GL | |
| Min Minify GL, 14 | |
| Minus GL, 17 | |
| Mirrored GL, 21 | |
| Mode GL, 22, 23 | |
| Model GL | |
| Modelview GL, 3, 15 | |
| Modulate GL, 17 | |
| Mipmap Multim in parvo map GL, 20 | |
| Multi Multiple GL | |
| Mult Multiply GL, 3 | |
| Multisample GL, 5 | |
| Name GL | |
| Native 26, 27 | |
| Nearest GL | |
| NAND Negated AND GL | |
| NOR Negated OR GL | |
| Negative GL, 7, 20 | |
| Nesting GL | |
| Never GL | |
| New GL | |
| Nicest GL | |
| No GL, 9, 28 | |
| Noop No Operation GL | |
| None GL | |
| N (5) Normal GL, 7, 28 | |
| Normalize, Normalized GL, 26 | |
| Notequal GL | |
| Num (3) Number Of GL | |
| Object GL | |
| Of GL | |
| Offset GL | |
| One GL, 17 | |
| Only 28 | |
| Operand GL, 17 | |
| Op (6) Operation GL | |
| Or GL | |
| Order GL | |
| Ortho Orthographic GL | |
| Out GL | |
| Overflow GL | |
| Pack GL | |
| Palette 9, 16 | |
| Param Parameter GL, 14, 26, 27, 28 | |
| Pname Parameter Name GL | |
| Pass GL | |
| Pattern GL | |
| Perspective GL | |
| Phong GL | |
| Pixel GL, 9, 10, 11 | |
| Pbuffer Pixel Buffer 11, 20 | |
| Plane GL | |
| Point GL, 14, 26 | |
| Pointer GL, 15, 16, 26, 28 | |
| Polygon GL | |
| Pop GL | |
| Position GL | |
| Pos (1) Position GL, 25, 26, 27 | |
| Positive GL, 7, 20 | |
| Post GL | |
| Previous GL, 17 | |
| Primary GL, 17 | |
| Prioritize, Priority GL | |
| Proc Procedure 2 | |
| Program 26, 27 | |
| Projection GL, 3 | |
| Proxy GL, 7 | |
| Push GL | |
| Quad Quadrilateral GL | |
| Quadratic GL | |
| Query 11 | |
| Range GL | |
| Raster GL | |
| Read GL, 10, 28 | |
| Rect Rectangle GL | |
| Red GL, 9 | |
| RGB Red Green Blue GL, 12, 17, 19, 20 | |
| RGBA Red Green Blue Alpha GL, 9, 12, 19, 20 | |
| Reduce GL | |
| Ref Reference GL | |
| Reflection GL, 7 | |
| Region GL, 4 | |
| Register 26 | |
| Render GL | |
| Renderer GL | |
| Repeat GL, 21 | |
| Replace GL, 17 | |
| Replicate GL | |
| Rescale GL | |
| Reset GL | |
| Resident GL | |
| Return GL | |
| Rev (4) Reverse GL | |
| Right GL, 20 | |
| Rotate, Rotated GL | |
| Row GL | |
| Sample GL, 5 | |
| Saturate GL | |
| Scale, Scaled GL, 17 | |
| Scissor GL | |
| Secondary GL, 28 | |
| Segment GL | |
| Select GL | |
| Selection GL | |
| Separable GL | |
| Separate GL | |
| Set (noun only!) GL | |
| Shade GL | |
| Shade Model Shading Model | |
| Shift GL, 9 | |
| Shininess GL | |
| Short GL | |
| Side GL, 26 | |
| Signed GL, 17 | |
| Single GL | |
| Sink GL | |
| Size GL, 7, 12, 14, 15, 16, 22, 26, 28 | |
| Skip GL | |
| Smooth GL | |
| Src Source GL, 17 | |
| Specular GL | |
| Sphere GL | |
| Spot GL | |
| Stack GL, 16, 26, 27 | |
| Start GL | |
| State GL | |
| Static 28 | |
| Stencil GL, 9 | |
| Stereo GL, 9 | |
| Stipple GL | |
| Store GL | |
| Stream 28 | |
| Stride GL, 15, 16, 26 | |
| String GL, 5, 26, 27 | |
| Strip GL | |
| Sub GL, 12 | |
| Subtract 17 | |
| Sub Image 12 | |
| Subpixel GL | |
| Sub Table GL | |
| Sum GL, 15, 26 | |
| Swap GL, 9 | |
| Table GL | |
| Target 20 | |
| Temporary 26, 27 | |
| Test GL | |
| Tex (1), Texture GL, 3, 7, 12, 17, 18, 20, 22, 23, | |
| T(5) 24, 27, 28 | |
| Threshold GL, 14 | |
| Through GL | |
| To GL, 9, 11, 13, 20, 23 | |
| Token GL | |
| Transfer GL | |
| Transform GL | |
| Translate, Translated GL | |
| Transpose GL, 3, 26, 27 | |
| Triangle GL | |
| True GL | |
| Two GL, 26 | |
| Type GL, 9, 10, 15, 16, 26 | |
| Under 26, 27 | |
| Underflow GL | |
| Unit GL, 15, 27 | |
| Unity 15 | |
| Unmap 28 | |
| Unpack GL | |
| Unsigned GL | |
| Ubyte Unsigned Byte GL | |
| Uint Unsigned Int GL | |
| Ushort Unsigned Short GL | |
| Usage 28 | |
| Valid GL | |
| Value GL, 5, 9, 24 | |
| Vendor GL | |
| Version GL | |
| V (5) Vertex GL, 15, 26, 28 | |
| Vertices GL | |
| Viewer GL | |
| Viewport GL | |
| Weight 15, 28 | |
| Width GL, 11 | |
| Window GL, 25 | |
| Wrap GL | |
| Write 28 | |
| Writemask GL | |
| Zero GL | |
| Zoom GL | |
| Abbreviations specifically not allowed | |
| -------------------------------------- | |
| Bgn Begin | |
| Mat Matrix | |
| Pnt Point | |
| Poly Polygon | |
| Tri Triangle | |
| Used in WGL specs only (or differently) | |
| --------------------------------------- | |
| Abbrev. Term or phrase Specification(s) used in | |
| ------- -------------- ------------------------ | |
| Acceleration 9 | |
| Create 4, 11 | |
| DC ??? 10 | |
| Declare 11 | |
| Device 10 | |
| Exchange 9 | |
| Full 9 | |
| Generic 9 | |
| GDI ??? 9 | |
| Handle 11 | |
| HP ??? 11 | |
| Incompatible 10 | |
| Largest 11 | |
| Layer 9 | |
| Lost 11 | |
| Method 9 | |
| Need 9 | |
| Number Number Of 9 | |
| OpenGL 9 | |
| Overlay 9 | |
| Release 20 | |
| Restore 4 | |
| Save 4 | |
| Share 9 | |
| Support 9 | |
| System 9 | |
| Transparent 9 | |
| Undefined 9 | |
| Underlay 9 | |
| Name rules (for all names) | |
| -------------------------- | |
| Always use the specified abbreviations. Never abbreviate terms | |
| that are already in the OpenGL API and are not abbreviated. If you | |
| add terms to your extensions, abbreviate consistently, maintaining | |
| a local version of additions to the list of abbreviations. | |
| Use Depth, never Z. | |
| The word "object" should not be used in a function name unless it | |
| operates on all object types. | |
| Longer descriptive names are desired if they are believed to help | |
| developers identify the purpose of a name. | |
| The opposite of "create" is "destroy." "delete" marks an object for | |
| later destruction. | |
| All names should describe what functionality does, never its expected | |
| usage. | |
| Begin each word with a capital letter, except the second word of | |
| compound words. | |
| Procedure name rules | |
| -------------------- | |
| Never use set, as in SetFeedbackBuffer. Set is implicit, unless | |
| otherwise specified. | |
| Use Verb-noun (DeleteList) and adjective-noun (EdgeFlag) formats. | |
| Append a corporate-specific suffix to all procedures. For example: | |
| glNewCommandSGI. All upper case is preferred for this suffix, but | |
| is not required. The suffix is always last, following OpenGL type | |
| and count suffixes. (e.g. glNewVertex3iSGI, not glNewVertexSGI3i.) | |
| Definition name rules | |
| --------------------- | |
| Use all capital letters. | |
| Separate words with underscores, except words within compound words. | |
| Append simple numeric suffixes directly to the end of definition | |
| tokens (LIGHT0). Begin these sequences with 0. | |
| Use an underscore to separate complex suffixes from the token body | |
| (MAP_3V). | |
| Append a corporate-specific suffix to the token, after any other | |
| suffixes. For example: GL_NEW_TOKEN0_SGI. All upper case is | |
| required. | |
| All tokens that are used only for a single use should be grouped | |
| together using enum types. | |
| Parameter name rules | |
| -------------------- | |
| <target> is reserved for the notion of "which is affected", and for | |
| the corresponding "which is returned" get commands. | |
| <params> is reserved for an array of parameters whose contents are | |
| defined by a second enumerated argument, called <pname>. | |
| Begin number sequences with 1, not 0. (e.g. u1,u2, not u0,u1) | |
| Any parameters that contain more then one word should have the | |
| second and subsequent words capitalized. | |
| Long descriptive parameters are encouraged. | |
| Parameter order | |
| --------------- | |
| <X> precedes <Y> precedes <Z> precedes <W>. | |
| <R> precedes <G> precedes <B> precedes <A>. | |
| <S> precedes <T> precedes <R> precedes <Q>. | |
| <U> precedes <V>. | |
| The array being passed is always the last argument. | |
| If a passed array has a type, the type specification argument immediately | |
| precedes the array. | |
| <pname> always precedes <params>. | |
| <x> and <y> precede <width> and <height>. | |
| <format> precedes <type>. | |
| <target> is first. | |
| <face> is first. | |
| <object> is first. | |
| <count> always precedes the thing that it counts. | |
| Any time the function parameters contain an address of what they | |
| operate on, the address is last. | |
| Arrays are never terminated by NULL or any other termination but are | |
| always specified by length. | |
| For variable length arrays passed into the GL, the parameter list should | |
| end with: "sizei count, const void* data" | |
| For variable length arrays passed back from the GL, the parameter list | |
| should end with: "sizei maxCount, sizei* count, void* data" | |
| Parameter types | |
| --------------- | |
| All integer quantity parameters (widths, heights, array lengths, etc.) | |
| should be typed GLsizei, not GLint or GLuint. Note that GLsizei | |
| generates an error only for negative values, so all integer quantity | |
| parameters should accept the value zero. | |
| Handles to specific object types are typed as pointers to the corresponding | |
| abstract structs. Generic objects are passed around as void pointers. | |
| Generic masks that do not have explicitly defined bit values (e.g. | |
| color index write masks and stencil write masks) should be typed | |
| GLuint. GLuint is also used for unsigned integer components, such as | |
| color components and depth components. | |
| Masks that do have explicitly defined bit values (e.g. attribute mask, | |
| clear mask) should be typed GLbitfield, not GLuint. | |
| All floating point parameters that are clamped to the range [0,1] when | |
| received should be typed GLclampf or GLclampd, not GLfloat or GLdouble. | |
| Extension name rules | |
| -------------------- | |
| An extension name is prefixed with the same string that suffixes its | |
| procedures and definitions. The prefix and the individual words are | |
| separated with underscores, the prefix is all upper case, and the other | |
| text is all lower case. For example, extension ARB_cool_feature, which | |
| specifies glCoolProcedureARB() and defines GL_COOL_DEFINITION_ARB. | |
| Suffix codes | |
| ------------ | |
| i signed 32-bit integer | |
| ui unsigned 32-bit integer | |
| s signed 16-bit integer | |
| us unsigned 16-bit integer | |
| b signed 8-bit integer | |
| ub unsigned 8-bit integer | |
| l signed 64-bit integer | |
| ul unsigned 64-bit integer | |
| f 32-bit float | |
| d 64-bit float | |
| t token enum | |
| v vector format | |
| N normalize values | |
| # number of components (e.g. 3) | |
| #x# matrix dimensions (e.g. 2x4) | |
| Shared extensions | |
| ----------------- | |
| An OpenGL extension may be deemed a shared extension if either: | |
| 1. Two or more OpenGL licensees agree in good faith to implement | |
| and ship the extension, or | |
| 2. The OpenGL ARB determines that it is in the best interest of | |
| the licensees that the extension be shared. | |
| The procedures and definitions that are defined by a shared extension | |
| are suffixed with EXT, rather than by a company-specific suffix. | |
| Likewise, the extension name is prefixed by EXT. To avoid name | |
| conflicts Silicon Graphics will maintain a registry of EXT extensions, | |
| including all their procedures and definitions, in a location that is | |
| accessible to all licensees. |