Add coloru16 converters

This commit is contained in:
Nikita Lisitsa 2021-04-02 11:04:50 +03:00
parent b45f605209
commit bb1df4599d

View file

@ -24,6 +24,24 @@ namespace psemek::gfx
return r;
}
template <std::size_t N>
auto to_colorf(geom::vector<std::uint16_t, N> const & c)
{
geom::vector<float, N> r;
for (std::size_t i = 0; i < N; ++i)
r[i] = c[i] / 65535.f;
return r;
}
template <std::size_t N>
auto to_coloru8(geom::vector<std::uint16_t, N> const & c)
{
geom::vector<std::uint8_t, N> r;
for (std::size_t i = 0; i < N; ++i)
r[i] = (static_cast<std::uint32_t>(c[i]) * 255) / 65535;
return r;
}
template <std::size_t N>
auto to_coloru8(geom::vector<float, N> const & c)
{
@ -33,6 +51,24 @@ namespace psemek::gfx
return r;
}
template <std::size_t N>
auto to_coloru16(geom::vector<std::uint8_t, N> const & c)
{
geom::vector<std::uint16_t, N> r;
for (std::size_t i = 0; i < N; ++i)
r[i] = (static_cast<std::uint32_t>(c[i]) * 65535) / 255;
return r;
}
template <std::size_t N>
auto to_coloru16(geom::vector<float, N> const & c)
{
geom::vector<std::uint16_t, N> r;
for (std::size_t i = 0; i < N; ++i)
r[i] = static_cast<std::uint16_t>(std::round(geom::clamp(c[i] * 65535.f, {0.f, 65535.f})));
return r;
}
template <std::size_t N>
auto lerp(geom::vector<std::uint8_t, N> const & c0, geom::vector<std::uint8_t, N> const & c1, float t)
{