 |
Flutter Impeller
|
|
Go to the documentation of this file.
11 #include <type_traits>
20 #define _IMPELLER_ASSERT_BLEND_MODE(blend_mode) \
21 auto enum_##blend_mode = static_cast<std::underlying_type_t<BlendMode>>( \
22 BlendMode::k##blend_mode); \
23 if (i != enum_##blend_mode) { \
29 std::underlying_type_t<BlendMode> i = 0;
40 "IMPELLER_FOR_EACH_BLEND_MODE must match impeller::BlendMode.");
42 #define _IMPELLER_BLEND_MODE_NAME_LIST(blend_mode) #blend_mode,
53 : red(value.x), green(value.y), blue(value.z), alpha(value.w) {}
56 return Color(std::min(c.
red, threshold), std::min(c.
green, threshold),
57 std::min(c.
blue, threshold), std::min(c.
alpha, threshold));
98 return (mn < mx) ? ((
color - mn) * saturation) / (mx - mn) :
Vector3();
106 value.
y > cutoff ?
b.y : a.
y,
107 value.
z > cutoff ?
b.z : a.
z
136 return src + dst * (1.0f - src.
alpha);
160 switch (blend_mode) {
210 return s + d - s * d;
216 Vector3 screen_src = 2.0 * d - 1.0;
217 Vector3 screen = screen_src + s - screen_src * s;
237 return std::min(1.0f, d / (1.0f - s));
247 return 1.0f - std::min(1.0f, (1.0f - d) / s);
251 Vector3 screen_src = 2.0 * s - 1.0;
252 Vector3 screen = screen_src + d - screen_src * d;
266 d + (2.0 * s - 1.0) * (D - d),
272 return (d - s).Abs();
276 return d + s - 2.0f * d * s;
302 auto* c = color_matrix.
array;
312 static auto conversion = [](
Scalar component) {
313 if (component <= 0.0031308) {
314 return component * 12.92;
316 return 1.055 * pow(component, (1.0 / 2.4)) - 0.055;
323 static auto conversion = [](
Scalar component) {
324 if (component <= 0.04045) {
325 return component / 12.92;
327 return pow((component + 0.055) / 1.055, 2.4);
334 return SPrintF(
"R=%.1f,G=%.1f,B=%.1f,A=%.1f",
const char * BlendModeToString(BlendMode blend_mode)
static constexpr Color ApplyBlendedColor(Color dst, Color src, Vector3 blend_result)
std::string ColorToString(const Color &color)
static constexpr Vector3 ComponentChoose(Vector3 a, Vector3 b, Vector3 value, Scalar cutoff)
constexpr Color Unpremultiply() const
constexpr float kEhCloseEnough
static constexpr bool ValidateBlendModes()
static constexpr Color DoColorBlendComponents(Color dst, Color src, const std::function< Scalar(Scalar, Scalar)> &blend_func)
static constexpr Color Min(Color c, float threshold)
static constexpr Color DoColorBlend(Color dst, Color src, const std::function< Vector3(Vector3, Vector3)> &blend_rgb_func)
std::string SPrintF(const char *format,...)
Color SRGBToLinear() const
Convert the color from sRGB space to linear space.
static constexpr Vector3 SetSaturation(Vector3 color, Scalar saturation)
static constexpr Vector3 SetLuminosity(Vector3 color, Scalar luminosity)
static constexpr Scalar Luminosity(Vector3 color)
#define IMPELLER_FOR_EACH_BLEND_MODE(V)
#define _IMPELLER_ASSERT_BLEND_MODE(blend_mode)
static constexpr Vector3 ClipColor(Vector3 color)
static constexpr Color BlackTransparent()
constexpr Vector3 Min(const Vector3 &p) const
static constexpr Color FromRGB(Vector3 color, Scalar alpha)
static constexpr const char * kBlendModeNames[]
Color ApplyColorMatrix(const ColorMatrix &color_matrix) const
A color filter that transforms colors through a 4x5 color matrix.
Color LinearToSRGB() const
Convert the color from linear space to sRGB space.
constexpr Color Premultiply() const
static constexpr Scalar Saturation(Vector3 color)
constexpr Vector3 Max(const Vector3 &p) const
static constexpr Vector3 ToRGB(Color color)
#define _IMPELLER_BLEND_MODE_NAME_LIST(blend_mode)
Color Blend(Color source, BlendMode blend_mode) const
Blends an unpremultiplied destination color into a given unpremultiplied source color to form a new u...