20 const u32 raw = (
static_cast<u32
>(
brightness) * 65536u + 127u) / 255u;
27 }
else if (raw > kUnityQ16) {
36 const i64 product =
static_cast<i64>(
mRawQ16) *
static_cast<i64>(other.mRawQ16);
37 return FluxScalar(
static_cast<i32
>((product + 32768) >> 16));
41 const i64 raw =
static_cast<i64>(scalar.rawQ16());
42 if (raw == kUnityQ16) {
49 for (size i = 0; i < drives.size(); ++i) {
50 const i64 scaled =
static_cast<i64>(drives[i]) * raw;
53 drives[i] =
static_cast<i32
>(scaled >= 0 ? (scaled + 32768) >> 16
54 : -((-scaled + 32768) >> 16));
fl::UISlider brightness("Brightness", BRIGHTNESS, 0, 255)
static FluxScalar fromRawQ16(i32 raw) FL_NO_EXCEPT
A limiter fraction already in s16.16, clamped to [0, 1].
FluxScalar composedWith(FluxScalar other) const FL_NO_EXCEPT
Multiplicative composition, commutative: combining brightness and the limiter in either order gives t...
FluxScalar(i32 raw) FL_NO_EXCEPT
i32 rawQ16() const FL_NO_EXCEPT
static FluxScalar fromBrightness(u8 brightness) FL_NO_EXCEPT
setBrightness(b) as the linear flux scalar b/255.
static FluxScalar unity() FL_NO_EXCEPT
Identity. Drives pass through unchanged.
A linear flux scalar in s16.16.
void applyFluxScalar(FluxScalar scalar, span< i32 > drives) FL_NO_EXCEPT
Scale every drive by one scalar, in place.
InputGamut g FL_NO_EXCEPT
Base definition for an LED controller.