namespace GL {
/**
-Identifies the components of a pixel, without type information. The values
-are bitfields laid as follows:
+Identifies the components of a pixel, without type information.
+
+The values are bitfields laid as follows:
_grs dccc
│││ │ └╴Number of components
└───────╴Grayscale flag
This information is presented for internal documentation purposes only; it is
-inadvisable for programs to rely on it.
+inadvisable for applications to rely on it.
*/
enum PixelComponents
{
};
/**
-Identifies a pixel format, with components and type. The values are bitfields
-laid as follows:
+Describes a mapping from one set of components to another.
+*/
+enum ComponentSwizzle
+{
+ NO_SWIZZLE,
+ R_TO_LUMINANCE,
+ RG_TO_LUMINANCE_ALPHA,
+ RGB_TO_BGR,
+ RGBA_TO_RGB
+};
+
+/**
+Identifies a pixel format, with components and type.
+
+The values are bitfields laid as follows:
tnfg ssss cccc cccc
││││ │ └╴Components (see PixelComponents)
└──────────────────╴sRGB flag
This information is presented for internal documentation purposes only; it is
-inadvisable for programs to rely on it.
+inadvisable for applications to rely on it.
*/
enum PixelFormat
{
PixelComponents components_from_graphics(Graphics::PixelFormat);
PixelFormat pixelformat_from_image(const Graphics::Image &, bool = false);
+ComponentSwizzle get_required_swizzle(PixelComponents);
+PixelComponents swizzle_components(PixelComponents, ComponentSwizzle);
+PixelComponents unswizzle_components(PixelComponents, ComponentSwizzle);
+
PixelFormat make_pixelformat(PixelComponents, DataType, bool = false);
inline PixelComponents get_components(PixelFormat f) { return static_cast<PixelComponents>(f&0xFF); }
inline unsigned get_component_count(PixelComponents c) { return c&7; }