1 #ifndef MSP_GL_PIXELFORMAT_H_
2 #define MSP_GL_PIXELFORMAT_H_
4 #include <msp/graphics/image.h>
5 #include <msp/strings/lexicalcast.h>
12 Identifies the components of a pixel, without type information.
14 The values are bitfields laid as follows:
17 │││ │ └╴Number of components
20 │└──────╴Reverse order flag
21 └───────╴Grayscale flag
23 This information is presented for internal documentation purposes only; it is
24 inadvisable for applications to rely on it.
32 DEPTH_COMPONENT = 0x09,
37 LUMINANCE_ALPHA = 0x42
41 Describes a mapping from one set of components to another.
47 RG_TO_LUMINANCE_ALPHA,
52 Identifies a pixel format, with components and type.
54 The values are bitfields laid as follows:
57 ││││ │ └╴Components (see PixelComponents)
58 ││││ └──────────╴Size of one component (bytes)
59 │││└───────────────╴Signed flag
60 ││└────────────────╴Floating-point flag
61 │└─────────────────╴Normalized flag
62 └──────────────────╴sRGB flag
64 This information is presented for internal documentation purposes only; it is
65 inadvisable for applications to rely on it.
80 RGBA16F = 0x3200|RGBA,
81 RGBA32F = 0x3400|RGBA,
83 SRGB8_ALPHA8 = 0xC100|RGBA,
87 SBGR8_ALPHA8 = 0xC100|BGRA,
88 LUMINANCE8 = 0x4100|LUMINANCE,
89 LUMINANCE8_ALPHA8 = 0x4100|LUMINANCE_ALPHA,
90 DEPTH_COMPONENT16 = 0x4200|DEPTH_COMPONENT,
91 DEPTH_COMPONENT24 = 0x4300|DEPTH_COMPONENT,
92 DEPTH_COMPONENT32 = 0x4400|DEPTH_COMPONENT,
93 DEPTH_COMPONENT32F = 0x3400|DEPTH_COMPONENT,
94 STENCIL_INDEX8 = 0x0100|STENCIL_INDEX
97 void operator>>(const LexicalConverter &, PixelComponents &);
98 void operator>>(const LexicalConverter &, PixelFormat &);
100 PixelComponents components_from_graphics(Graphics::PixelFormat);
101 PixelFormat pixelformat_from_image(const Graphics::Image &, bool = false);
103 ComponentSwizzle get_required_swizzle(PixelComponents);
104 PixelComponents swizzle_components(PixelComponents, ComponentSwizzle);
105 PixelComponents unswizzle_components(PixelComponents, ComponentSwizzle);
107 PixelFormat make_pixelformat(PixelComponents, DataType, bool = false);
108 inline PixelComponents get_components(PixelFormat f) { return static_cast<PixelComponents>(f&0xFF); }
109 inline unsigned get_component_count(PixelComponents c) { return c&7; }
110 inline unsigned get_component_count(PixelFormat f) { return get_component_count(get_components(f)); }
111 inline DataType get_component_type(PixelFormat f) { return static_cast<DataType>((f&0xF00)>>8 | (f&0x3000)>>4); }
112 inline unsigned get_component_size(PixelFormat f) { return get_type_size(get_component_type(f)); }
113 inline bool is_srgb(PixelFormat f) { return f&0x8000; }
114 inline unsigned get_pixel_size(PixelFormat f) { return get_component_count(f)*get_type_size(get_component_type(f)); }
116 void require_pixelformat(PixelFormat);
121 #include "pixelformat_backend.h"