HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
Rec2100.hpp
1// Copyright 2020 Pokitec
2// All rights reserved.
3
4#pragma once
5
6#include "TTauri/Foundation/Rec2020.hpp"
7#include "TTauri/Foundation/float16.hpp"
8#include "TTauri/Foundation/mat.hpp"
9#include <cmath>
10#include <array>
11
12namespace tt {
13
14inline mat Rec2100_to_XYZ = Rec2020_to_XYZ;
15
16inline mat XYZ_to_Rec2100 = XYZ_to_Rec2020;
17
18[[nodiscard]] inline float Rec2100_linear_to_gamma(float L) noexcept
19{
20 constexpr float c1 = 0.8359375f;
21 constexpr float c2 = 18.8515625f;
22 constexpr float c3 = 18.6875f;
23 constexpr float m1 = 0.1593017578125f;
24 constexpr float m2 = 78.84375;
25
26 auto Lm1 = std::pow(L, m1);
27
28 return std::pow((c1 + c2 * Lm1) / (1.0f + c3 * Lm1), m2);
29}
30
31[[nodiscard]] inline float Rec2100_gamma_to_linear(float N) noexcept
32{
33 constexpr float c1 = 0.8359375f;
34 constexpr float c2 = 18.8515625f;
35 constexpr float c3 = 18.6875f;
36 constexpr float m1 = 0.1593017578125f;
37 constexpr float m2 = 78.84375;
38
39 auto Nm2 = std::pow(N, 1.0f / m2);
40
41 return std::pow((Nm2 - c1) / ( c2 - c3 * Nm2), 1.0f / m1);
42}
43
44}
T pow(T... args)