80 {
82 if (!wide) return false;
84 i32 white1[3];
85 i32 white2[3] = {};
87 return false;
90 return false;
91 if (target_white != nullptr) {
94 &to_working)) return false;
95 i32 adapted1[3];
97 for (int i = 0; i < 3; ++i) white1[i] = adapted1[i];
99 i32 adapted2[3];
101 for (int i = 0; i < 3; ++i) white2[i] = adapted2[i];
102 }
103 }
106 const bool ok = effective_solve == nullptr
109 allocation, &wide->
rgbw);
110 if (!ok) return false;
112 const bool ok = effective_solve == nullptr
114 &wide->rgbww)
116 white2, allocation, &wide->rgbww);
117 if (!ok) return false;
118 } else {
119 return false;
120 }
126 if (wide->white1_response.size() != size) return false;
131 if (wide->white2_response.size() != size) return false;
132 }
133 }
134 *out = wide;
135 return true;
136}
bool validResponseLut(const u16 *values, u16 size) FL_NO_EXCEPT
bool wideWhiteColumnQ16(const float(&xy)[2], float luminance, i32(&out)[3]) FL_NO_EXCEPT
constexpr Chromaticity kPipelineD65
The working domain's rendering white.
bool buildGamutMapRgbwFromSolveQ16(const colorimetric_response::EmitterProfile &profile, const EmitterSolveMatrixQ16 &solve, const i32(&white_xyz)[3], WhiteAllocationPolicy policy, GamutMapRgbwQ16 *out) FL_NO_EXCEPT
Bind a four-emitter map from an effective RGB solve and a white column already adapted into the same ...
WhiteAllocationPolicy
Which end of the feasible white interval to take (C3).
@ WhitePreferred
As much white as the target allows.
shared_ptr< T > make_shared(Args &&... args) FL_NO_EXCEPT
bool buildGamutMapRgbwwQ16(const colorimetric_response::EmitterProfile &profile, const i32(&white1_xyz)[3], const i32(&white2_xyz)[3], WhiteAllocationPolicy policy, GamutMapRgbwwQ16 *out) FL_NO_EXCEPT
Derive the mapper for a three-primary profile plus two white emitters.
void adaptXyzQ16(const AdaptationMatrixQ16 &matrix, const i32(&xyz)[3], i32(&out_xyz)[3]) FL_NO_EXCEPT
Adapt one XYZ triple.
bool buildGamutMapRgbwQ16(const colorimetric_response::EmitterProfile &profile, const i32(&white_xyz)[3], WhiteAllocationPolicy policy, GamutMapRgbwQ16 *out) FL_NO_EXCEPT
Derive the mapper for a three-primary profile plus one white emitter.
bool buildBradfordMatrixQ16(Chromaticity source_white, Chromaticity destination_white, AdaptationMatrixQ16 *out) FL_NO_EXCEPT
Build the Bradford transform from source_white to destination_white.
bool buildGamutMapRgbwwFromSolveQ16(const colorimetric_response::EmitterProfile &profile, const EmitterSolveMatrixQ16 &solve, const i32(&white1_xyz)[3], const i32(&white2_xyz)[3], WhiteAllocationPolicy policy, GamutMapRgbwwQ16 *out) FL_NO_EXCEPT
Bind a five-emitter map from one effective RGB solve and two white columns, all in the same D65 worki...
A collapsed adaptation transform in s16.16.
const u16 * response_lut_white1
const u16 * response_lut_white2