7#include "../color/color.hpp"
8#include "../float16.hpp"
9#include "../pixel_map.hpp"
10#include "../geometry/corner_shapes.hpp"
11#include "../rapid/numeric_array.hpp"
36 ttlet rhs_fp16 = f32x4_to_f16x8(rhs);
37 rhs_fp16.store<
sizeof(v)>(
reinterpret_cast<std::byte *
>(v.
data()));
42 ttlet rhs_fp16 = f32x4_to_f16x8(rhs);
43 rhs_fp16.store<
sizeof(v)>(
reinterpret_cast<std::byte *
>(v.
data()));
47 explicit operator f32x4()
const noexcept
49 auto tmp = i16x8::load<sizeof(v)>(
reinterpret_cast<std::byte const*
>(v.
data()));
50 return f16x8_to_f32x4(tmp);
57 return *
this =
static_cast<f32x4>(rhs);
60 explicit operator color()
const noexcept
67 [[nodiscard]]
size_t hash()
const noexcept
69 return hash_mix(v[0], v[1], v[2], v[3]);
74 return lhs.v == rhs.v;
85 std::get<3>(r.v) = 0x0000;
92 for (
ssize_t y = 0; y != image.height(); ++y) {
94 for (
ssize_t x = 0; x != image.width(); ++x) {
100inline void composit(pixel_map<sfloat_rgba16> &under, pixel_map<sfloat_rgba16>
const &over)
noexcept
102 tt_assert(over.height() >= under.height());
103 tt_assert(over.width() >= under.width());
105 for (ssize_t rowNr = 0; rowNr != under.height(); ++rowNr) {
106 ttlet overRow = over.at(rowNr);
107 auto underRow = under.at(rowNr);
108 for (ssize_t columnNr = 0; columnNr != under.width(); ++columnNr) {
109 ttlet &overPixel = overRow[columnNr];
110 auto &underPixel = underRow[columnNr];
112 underPixel = composit(
static_cast<f32x4
>(underPixel),
static_cast<f32x4
>(overPixel));
117inline void composit(pixel_map<sfloat_rgba16> &under, color over, pixel_map<uint8_t>
const &mask)
noexcept
119 tt_assert(mask.height() >= under.height());
120 tt_assert(mask.width() >= under.width());
122 auto maskPixel = color{1.0f, 1.0f, 1.0f, 1.0f};
124 for (ssize_t rowNr = 0; rowNr != under.height(); ++rowNr) {
125 ttlet maskRow = mask.at(rowNr);
126 auto underRow = under.at(rowNr);
127 for (ssize_t columnNr = 0; columnNr != under.width(); ++columnNr) {
128 ttlet maskValue = maskRow[columnNr] / 255.0f;
129 maskPixel.a() = maskValue;
131 auto &pixel = underRow[columnNr];
132 pixel = composit(
static_cast<color
>(pixel), over * maskPixel);
This is a RGBA floating point color.
Definition color.hpp:36
Definition corner_shapes.hpp:9
A 2D canvas of pixels.
Definition pixel_map.hpp:101
Definition sfloat_rgba16.hpp:19