#ifndef MSP_GL_PIXELFORMAT_H_
#define MSP_GL_PIXELFORMAT_H_
-#include <msp/graphics/pixelformat.h>
+#include <msp/core/attributes.h>
+#include <msp/graphics/image.h>
#include <msp/strings/lexicalcast.h>
#include "gl.h"
#include <msp/gl/extensions/arb_depth_buffer_float.h>
#include <msp/gl/extensions/arb_texture_rg.h>
#include <msp/gl/extensions/ext_bgra.h>
#include <msp/gl/extensions/ext_texture_srgb.h>
-#include <msp/gl/extensions/msp_legacy_features.h>
#include <msp/gl/extensions/oes_required_internalformat.h>
#include <msp/gl/extensions/oes_texture_stencil8.h>
+#include <msp/gl/extensions/msp_luminance_formats.h>
+#include "datatype.h"
namespace Msp {
namespace GL {
-enum PixelFormat
+enum PixelComponents
{
- STENCIL_INDEX = GL_STENCIL_INDEX,
- DEPTH_COMPONENT = GL_DEPTH_COMPONENT,
- DEPTH_COMPONENT16 = GL_DEPTH_COMPONENT16,
- DEPTH_COMPONENT24 = GL_DEPTH_COMPONENT24,
- DEPTH_COMPONENT32 = GL_DEPTH_COMPONENT32,
- DEPTH_COMPONENT32F = GL_DEPTH_COMPONENT32F,
RED = GL_RED,
RG = GL_RG,
RGB = GL_RGB,
RGBA = GL_RGBA,
+ BGR = GL_BGR,
+ BGRA = GL_BGRA,
+ LUMINANCE = GL_LUMINANCE,
+ LUMINANCE_ALPHA = GL_LUMINANCE_ALPHA,
+ DEPTH_COMPONENT = GL_DEPTH_COMPONENT,
+ STENCIL_INDEX = GL_STENCIL_INDEX
+};
+
+enum PixelFormat
+{
R8 = GL_R8,
R16F = GL_R16F,
R32F = GL_R32F,
RGBA8 = GL_RGBA8,
RGBA16F = GL_RGBA16F,
RGBA32F = GL_RGBA32F,
- SRGB = GL_SRGB,
- SRGB_ALPHA = GL_SRGB_ALPHA,
SRGB8 = GL_SRGB8,
SRGB8_ALPHA8 = GL_SRGB8_ALPHA8,
- BGR = GL_BGR,
- BGRA = GL_BGRA,
- LUMINANCE = GL_LUMINANCE,
+ BGR8 = 200000,
+ BGRA8 = 200001,
+ SBGR8 = 200002,
+ SBGR8_ALPHA8 = 200003,
LUMINANCE8 = GL_LUMINANCE8,
- LUMINANCE_ALPHA = GL_LUMINANCE_ALPHA,
- LUMINANCE8_ALPHA8 = GL_LUMINANCE8_ALPHA8,
-
- // Deprecated
- SLUMINANCE = GL_SLUMINANCE,
- SLUMINANCE8 = GL_SLUMINANCE8,
- SLUMINANCE_ALPHA = GL_SLUMINANCE_ALPHA,
- SLUMINANCE8_ALPHA8 = GL_SLUMINANCE8_ALPHA8,
-
- // Typo, deprecated
- LUMINANCE_ALPHA8 = GL_LUMINANCE8_ALPHA8
+ LUMINANCE8_ALPHA8 = GL_LUMINANCE8_ALPHA8,
+ DEPTH_COMPONENT16 = GL_DEPTH_COMPONENT16,
+ DEPTH_COMPONENT24 = GL_DEPTH_COMPONENT24,
+ DEPTH_COMPONENT32 = GL_DEPTH_COMPONENT32,
+ DEPTH_COMPONENT32F = GL_DEPTH_COMPONENT32F,
+ STENCIL_INDEX8 = GL_STENCIL_INDEX8
};
+void operator>>(const LexicalConverter &, PixelComponents &);
void operator>>(const LexicalConverter &, PixelFormat &);
-PixelFormat pixelformat_from_graphics(Graphics::PixelFormat);
-PixelFormat storage_pixelformat_from_graphics(Graphics::PixelFormat, bool = false);
+DEPRECATED PixelComponents pixelformat_from_graphics(Graphics::PixelFormat);
+DEPRECATED PixelComponents storage_pixelformat_from_graphics(Graphics::PixelFormat, bool);
+PixelFormat pixelformat_from_image(const Graphics::Image &);
+
+PixelFormat make_pixelformat(PixelComponents, DataType, bool = false);
+DEPRECATED PixelFormat get_base_pixelformat(PixelFormat);
+PixelComponents get_components(PixelFormat);
+DEPRECATED PixelFormat get_default_sized_pixelformat(PixelComponents);
+DEPRECATED PixelFormat get_srgb_pixelformat(PixelFormat);
+
+unsigned get_component_count(PixelComponents);
+inline unsigned get_component_count(PixelFormat f)
+{ return get_component_count(get_components(f)); }
+
+DataType get_component_type(PixelFormat);
+inline unsigned get_component_size(PixelFormat f)
+{ return get_type_size(get_component_type(f)); }
-PixelFormat get_base_pixelformat(PixelFormat);
-PixelFormat get_unsized_pixelformat(PixelFormat);
-PixelFormat get_sized_pixelformat(PixelFormat, unsigned = 1);
-PixelFormat get_srgb_pixelformat(PixelFormat);
-unsigned get_component_count(PixelFormat);
-unsigned get_component_size(PixelFormat);
unsigned get_pixel_size(PixelFormat);
void require_pixelformat(PixelFormat);
+DEPRECATED inline PixelFormat get_sized_pixelformat(PixelComponents c, unsigned s = 1)
+{ return make_pixelformat(c, (s==2 ? HALF_FLOAT : s==4 ? FLOAT : UNSIGNED_BYTE)); }
+
+DEPRECATED inline PixelComponents get_unsized_pixelformat(PixelFormat f)
+{ return get_components(f); }
+
} // namespace GL
} // namespace Msp