8#include "../float16.hpp"
9#include "../pixel_map.hpp"
10#include "../geometry/corner_shapes.hpp"
11#include "../geometry/numeric_array.hpp"
35 ttlet rhs_fp16 = _mm_cvtps_ph(to_m128(rhs), _MM_FROUND_CUR_DIRECTION);
36 _mm_storeu_si64(v.
data(), rhs_fp16);
41 ttlet rhs_fp16 = _mm_cvtps_ph(to_m128(rhs), _MM_FROUND_CUR_DIRECTION);
42 _mm_storeu_si64(v.
data(), rhs_fp16);
46 explicit operator f32x4()
const noexcept
48 ttlet rhs_fp16 = _mm_loadu_si64(v.
data());
49 return f32x4{to_f32x4_raw(_mm_cvtph_ps(rhs_fp16))};
56 return *
this =
static_cast<f32x4>(rhs);
59 explicit operator color()
const noexcept
76 return lhs.v == rhs.v;
87 std::get<3>(r.v) = 0x0000;
94 for (
ssize_t y = 0; y != image.height(); ++y) {
96 for (
ssize_t x = 0; x != image.width(); ++x) {
102inline void composit(pixel_map<sfloat_rgba16> &under, pixel_map<sfloat_rgba16>
const &over)
noexcept
104 tt_assert(over.height() >= under.height());
105 tt_assert(over.width() >= under.width());
107 for (ssize_t rowNr = 0; rowNr != under.height(); ++rowNr) {
108 ttlet overRow = over.at(rowNr);
109 auto underRow = under.at(rowNr);
110 for (ssize_t columnNr = 0; columnNr != under.width(); ++columnNr) {
111 ttlet &overPixel = overRow[columnNr];
112 auto &underPixel = underRow[columnNr];
114 underPixel = composit(
static_cast<f32x4
>(underPixel),
static_cast<f32x4
>(overPixel));
119inline void composit(pixel_map<sfloat_rgba16> &under, color over, pixel_map<uint8_t>
const &mask)
noexcept
121 tt_assert(mask.height() >= under.height());
122 tt_assert(mask.width() >= under.width());
124 auto maskPixel = color{1.0f, 1.0f, 1.0f, 1.0f};
126 for (ssize_t rowNr = 0; rowNr != under.height(); ++rowNr) {
127 ttlet maskRow = mask.at(rowNr);
128 auto underRow = under.at(rowNr);
129 for (ssize_t columnNr = 0; columnNr != under.width(); ++columnNr) {
130 ttlet maskValue = maskRow[columnNr] / 255.0f;
131 maskPixel.a() = maskValue;
133 auto &pixel = underRow[columnNr];
134 pixel = composit(
static_cast<color
>(pixel), over * maskPixel);
This is a RGBA floating point color.
Definition color.hpp:39
Definition sfloat_rgba16.hpp:18
Definition corner_shapes.hpp:9
A 2D canvas of pixels.
Definition pixel_map.hpp:100