#include <msp/graphics/image.h>
#include <msp/strings/lexicalcast.h>
-#include "gl.h"
#include "datatype.h"
namespace Msp {
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
{
void operator>>(const LexicalConverter &, PixelFormat &);
PixelComponents components_from_graphics(Graphics::PixelFormat);
-PixelFormat pixelformat_from_image(const Graphics::Image &);
+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); }
void require_pixelformat(PixelFormat);
-GLenum get_gl_components(PixelComponents);
-GLenum get_gl_pixelformat(PixelFormat);
-
} // namespace GL
} // namespace Msp
+#include "pixelformat_backend.h"
+
#endif