FastLED 3.10.6
Loading...
Searching...
No Matches

◆ buildTwoWhiteAllocationQ16()

bool fl::buildTwoWhiteAllocationQ16 ( const colorimetric_response::EmitterProfile & profile,
const i32(&) white1_xyz[3],
const i32(&) white2_xyz[3],
WhiteAllocationPolicy policy,
TwoWhiteAllocationQ16 * out )

Derive the allocation for three primaries plus two white emitters.

white1_xyz / white2_xyz are each white's XYZ at full drive, in s16.16, the same working domain the rest of the pipeline carries.

False on the profiles buildRgbSolveMatrixQ16 rejects, and when either white lands so far outside what the primaries express that the per-pixel bounds would overflow their accumulators – see kTwoWhiteMaxColumn in the implementation, which a real white emitter is nowhere near.

Definition at line 383 of file white_allocation.cpp.hpp.

387 {
389 return buildRgbSolveMatrixQ16(profile, &solve) &&
390 buildTwoWhiteAllocationFromSolveQ16(solve, white1_xyz, white2_xyz,
391 policy, out);
392}
bool buildTwoWhiteAllocationFromSolveQ16(const EmitterSolveMatrixQ16 &solve, const i32(&white1_xyz)[3], const i32(&white2_xyz)[3], WhiteAllocationPolicy policy, TwoWhiteAllocationQ16 *out) FL_NO_EXCEPT
Bind two adapted white columns with an RGB solve in the same XYZ domain.
bool buildRgbSolveMatrixQ16(const colorimetric_response::EmitterProfile &profile, EmitterSolveMatrixQ16 *out) FL_NO_EXCEPT
Invert the emitter matrix for a three-emitter profile.
Inverse emitter matrix in s16.16, mapping XYZ to three emitter drives.

References buildRgbSolveMatrixQ16(), buildTwoWhiteAllocationFromSolveQ16(), and FL_NO_EXCEPT.

+ Here is the call graph for this function: