Add various normalized & floating-point image formats
This commit is contained in:
parent
ef3fa4b091
commit
13595864fd
1 changed files with 100 additions and 12 deletions
|
|
@ -17,6 +17,14 @@ namespace psemek::gfx
|
||||||
std::uint8_t stencil;
|
std::uint8_t stencil;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct float16
|
||||||
|
{
|
||||||
|
std::uint16_t value;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct uint10;
|
||||||
|
struct uint12;
|
||||||
|
|
||||||
template <typename Pixel>
|
template <typename Pixel>
|
||||||
struct pixel_traits;
|
struct pixel_traits;
|
||||||
|
|
||||||
|
|
@ -53,35 +61,59 @@ namespace psemek::gfx
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct pixel_traits<std::int8_t>
|
struct pixel_traits<std::uint16_t>
|
||||||
{
|
{
|
||||||
static constexpr GLenum internal_format = gl::R8;
|
static constexpr GLenum internal_format = gl::R16;
|
||||||
static constexpr GLenum format = gl::RED;
|
static constexpr GLenum format = gl::RED;
|
||||||
static constexpr GLenum type = gl::BYTE;
|
static constexpr GLenum type = gl::UNSIGNED_BYTE;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct pixel_traits<geom::vector<std::int8_t, 2>>
|
struct pixel_traits<geom::vector<std::uint16_t, 2>>
|
||||||
{
|
{
|
||||||
static constexpr GLenum internal_format = gl::RG8;
|
static constexpr GLenum internal_format = gl::RG16;
|
||||||
static constexpr GLenum format = gl::RG;
|
static constexpr GLenum format = gl::RG;
|
||||||
static constexpr GLenum type = gl::BYTE;
|
static constexpr GLenum type = gl::UNSIGNED_BYTE;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct pixel_traits<geom::vector<std::int8_t, 3>>
|
struct pixel_traits<geom::vector<std::uint16_t, 3>>
|
||||||
{
|
{
|
||||||
static constexpr GLenum internal_format = gl::RGB8;
|
static constexpr GLenum internal_format = gl::RGB16;
|
||||||
static constexpr GLenum format = gl::RGB;
|
static constexpr GLenum format = gl::RGB;
|
||||||
static constexpr GLenum type = gl::BYTE;
|
static constexpr GLenum type = gl::UNSIGNED_BYTE;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct pixel_traits<geom::vector<std::int8_t, 4>>
|
struct pixel_traits<geom::vector<std::uint16_t, 4>>
|
||||||
{
|
{
|
||||||
static constexpr GLenum internal_format = gl::RGBA8;
|
static constexpr GLenum internal_format = gl::RGBA16;
|
||||||
static constexpr GLenum format = gl::RGBA;
|
static constexpr GLenum format = gl::RGBA;
|
||||||
static constexpr GLenum type = gl::BYTE;
|
static constexpr GLenum type = gl::UNSIGNED_BYTE;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<uint10, 3>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RGB10;
|
||||||
|
static constexpr GLenum format = gl::RGB;
|
||||||
|
static constexpr GLenum type = gl::UNSIGNED_BYTE;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<uint12, 3>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RGB12;
|
||||||
|
static constexpr GLenum format = gl::RGB;
|
||||||
|
static constexpr GLenum type = gl::UNSIGNED_BYTE;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<uint12, 4>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RGBA12;
|
||||||
|
static constexpr GLenum format = gl::RGBA;
|
||||||
|
static constexpr GLenum type = gl::UNSIGNED_BYTE;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
|
@ -92,6 +124,62 @@ namespace psemek::gfx
|
||||||
static constexpr GLenum type = gl::FLOAT;
|
static constexpr GLenum type = gl::FLOAT;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<float, 2>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RG32F;
|
||||||
|
static constexpr GLenum format = gl::RG;
|
||||||
|
static constexpr GLenum type = gl::FLOAT;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<float, 3>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RGB32F;
|
||||||
|
static constexpr GLenum format = gl::RGB;
|
||||||
|
static constexpr GLenum type = gl::FLOAT;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<float, 4>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RGBA32F;
|
||||||
|
static constexpr GLenum format = gl::RGBA;
|
||||||
|
static constexpr GLenum type = gl::FLOAT;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<float16>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::R16F;
|
||||||
|
static constexpr GLenum format = gl::RED;
|
||||||
|
static constexpr GLenum type = gl::FLOAT;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<float16, 2>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RG16F;
|
||||||
|
static constexpr GLenum format = gl::RG;
|
||||||
|
static constexpr GLenum type = gl::FLOAT;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<float16, 3>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RGB16F;
|
||||||
|
static constexpr GLenum format = gl::RGB;
|
||||||
|
static constexpr GLenum type = gl::FLOAT;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pixel_traits<geom::vector<float16, 4>>
|
||||||
|
{
|
||||||
|
static constexpr GLenum internal_format = gl::RGBA16F;
|
||||||
|
static constexpr GLenum format = gl::RGBA;
|
||||||
|
static constexpr GLenum type = gl::FLOAT;
|
||||||
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct pixel_traits<depth24_pixel>
|
struct pixel_traits<depth24_pixel>
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue