diff --git a/libs/gfx/include/psemek/gfx/color.hpp b/libs/gfx/include/psemek/gfx/color.hpp index 5ff8507c..2233c1df 100644 --- a/libs/gfx/include/psemek/gfx/color.hpp +++ b/libs/gfx/include/psemek/gfx/color.hpp @@ -75,6 +75,33 @@ namespace psemek::gfx return to_coloru8(geom::lerp(to_colorf(c0), to_colorf(c1), t)); } + template + auto to_srgb(geom::vector const & c, float g = 1.f / 2.2f) + { + geom::vector r = c; + for (std::size_t i = 0; i < std::min(3, N); ++i) + r[i] = std::pow(r[i], g); + return r; + } + + template + auto to_srgb(geom::vector const & c, float g = 1.f / 2.2f) + { + return to_coloru8(to_srgb(to_colorf(c), g)); + } + + template + auto to_srgb(geom::vector const & c, float g = 1.f / 2.2f) + { + return to_coloru16(to_srgb(to_colorf(c), g)); + } + + template + auto to_linear(geom::vector const & c, float g = 1.f / 2.2f) + { + return to_srgb(c, 1.f / g); + } + struct generic_color { color_4f c;