-/** A single vertex component. Symbolic names are provided for commonly used
-attributes. These are aliased with with generic attributes, so be careful when
-picking your attribute indices. */
-enum VertexComponent
+/** A single vertex attribute. Commonly used attributes are named by their
+semantical meaning in the standard shaders. Texture coordinates and generic
+attributes can additionally be given an index. There are four texture
+coordinate attributes available. The number of available generic attributes
+depends on implementation limits, but is at least five.
+
+RAW_ATTRIB is handled in a special way; creating an indexed attribute based on
+it uses the index as raw attribute number. Only use it if you know what you
+are doing.
+
+The values are bitfields laid as follows:
+
+nnnn nn_f gsss iccc
+ │ │ │ │ │ └╴Number of components
+ │ │ │ │ └───╴Integer attribute flag
+ │ │ │ └─────╴Size of one component
+ │ │ └────────╴Signed flag
+ │ └──────────╴Floating-point flag
+ └────────────╴Attribute index (semantic)
+
+This information is presented for internal documentation purposes only; it is
+inadvisable for programs to rely on it.
+*/
+enum VertexAttribute: std::uint16_t