6#include "TTauri/Foundation/vec.hpp"
7#include "TTauri/Foundation/float16.hpp"
8#include "TTauri/Foundation/PixelMap.hpp"
30 ttlet rhs_fp16 = _mm_cvtps_ph(rhs, _MM_FROUND_CUR_DIRECTION);
31 _mm_storeu_si64(v.
data(), rhs_fp16);
35 ttlet rhs_fp16 = _mm_cvtps_ph(rhs, _MM_FROUND_CUR_DIRECTION);
36 _mm_storeu_si64(v.
data(), rhs_fp16);
40 tt_force_inline
operator vec ()
const noexcept {
41 ttlet rhs_fp16 = _mm_loadu_si64(v.
data());
42 return _mm_cvtph_ps(rhs_fp16);
54 return lhs.v == rhs.v;
63 std::get<3>(r.v) = 0x0000;
69 for (
ssize_t y = 0; y != image.height; ++y) {
71 for (
ssize_t x = 0; x != image.width; ++x) {
77inline void desaturate(PixelMap<R16G16B16A16SFloat> &image,
float brightness)
noexcept {
78 for (ssize_t y = 0; y != image.height; ++y) {
80 for (ssize_t x = 0; x != image.width; ++x) {
81 row[x] = desaturate(
static_cast<vec
>(row[x]), brightness);
86inline void composit(PixelMap<R16G16B16A16SFloat> &under, PixelMap<R16G16B16A16SFloat>
const &over)
noexcept
88 tt_assert(over.height >= under.height);
89 tt_assert(over.width >= under.width);
91 for (ssize_t rowNr = 0; rowNr != under.height; ++rowNr) {
92 ttlet overRow = over.at(rowNr);
93 auto underRow = under.at(rowNr);
94 for (ssize_t columnNr = 0; columnNr != under.width; ++columnNr) {
95 ttlet &overPixel = overRow[columnNr];
96 auto &underPixel = underRow[columnNr];
98 underPixel = composit(
static_cast<vec
>(underPixel),
static_cast<vec
>(overPixel));
103inline void composit(PixelMap<R16G16B16A16SFloat>& under, vec over, PixelMap<uint8_t>
const& mask)
noexcept
105 tt_assert(mask.height >= under.height);
106 tt_assert(mask.width >= under.width);
108 auto maskPixel =
vec::color(1.0f, 1.0f, 1.0f, 1.0f);
110 for (ssize_t rowNr = 0; rowNr != under.height; ++rowNr) {
111 ttlet maskRow = mask.at(rowNr);
112 auto underRow = under.at(rowNr);
113 for (ssize_t columnNr = 0; columnNr != under.width; ++columnNr) {
114 ttlet maskValue = maskRow[columnNr] / 255.0f;
115 maskPixel.a(maskValue);
117 auto& pixel = underRow[columnNr];
118 pixel = composit(pixel, over * maskPixel);
A 2D canvas of pixels.
Definition PixelMap.hpp:83
Definition R16G16B16A16SFloat.hpp:15
A 4D vector.
Definition vec.hpp:37
static tt_force_inline vec color(float r, float g, float b, float a=1.0f) noexcept
Create a color out of 3 to 4 values.
Definition vec.hpp:226