From 565ab686822e027bc9244591befe449c5b515fc2 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Mon, 16 May 2022 23:23:50 +0300 Subject: [PATCH] Add gfx::to_srgb/to_linear for colors --- libs/gfx/include/psemek/gfx/color.hpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) 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;