#ifndef SHADER_AUTOMATON_COLORMAPS_H #define SHADER_AUTOMATON_COLORMAPS_H #include "../color.h" #include struct ColorMapData { private: std::vector data_{}; size_t size_{}; ColorSpace color_space_{}; public: ColorMapData() : color_space_(ColorSpace::CIELAB) {} explicit ColorMapData(const std::vector& colors) { size_ = colors.size(); data_ = std::vector(size_ * 3); size_t i = 0; for (const auto &item : colors) { data_[i++] = static_cast(item.v1); data_[i++] = static_cast(item.v2); data_[i++] = static_cast(item.v3); } } static ColorMapData fromArray(const float *data, size_t num_colors, std::optional color_space) { ColorMapData cmd{}; if (color_space.has_value()) { cmd.color_space_ = color_space.value(); cmd.data_.assign(data, data + num_colors * 3); } else { cmd.data_ = std::vector(num_colors * 3); for (size_t i = 0; i < num_colors; ++i) { auto c = Color::from_normalized_rgb(data[i * 3], data[i * 3 + 1], data[i * 3 + 2]); cmd.data_[i * 3] = static_cast(c.v1); cmd.data_[i * 3 + 1] = static_cast(c.v2); cmd.data_[i * 3 + 2] = static_cast(c.v3); } } cmd.size_ = num_colors; return cmd; } public: [[nodiscard]] size_t size() const { return size_; } [[nodiscard]] const float *data() const { return data_.data(); } }; extern const std::map colormaps; #endif // SHADER_AUTOMATON_COLORMAPS_H