#ifndef PARADISO_BITMAP_HPP #define PARADISO_BITMAP_HPP #include "geometry.hpp" #include "globals.hpp" #include "rgba.hpp" #include #include #include namespace paradiso { struct Bitmap final { constexpr static Bitmap empty(Size size) noexcept { return {.size = size, .data = std::vector{size.area()}}; } template static constexpr Bitmap from_data(Size size, Arguments... values) noexcept { assert(sizeof...(Arguments) == size.height * size.width); return { .size = size, .data = {values...} }; } constexpr auto fill(const RGBA& color) noexcept { std::fill(data.begin(), data.end(), color); return *this; } constexpr RGBA& pixel(std::integral auto x, std::integral auto y) { return data[y * size.width + x]; } constexpr const RGBA& pixel(std::integral auto x, std::integral auto y) const { return data[y * size.width + x]; } Size size{.width = 0, .height = 0}; std::vector data{}; }; } // namespace paradiso #endif