Skip to content

Commit 94e6c24

Browse files
author
jonahwilliams
committed
Delete color blending
1 parent 426d6a1 commit 94e6c24

File tree

3 files changed

+0
-366
lines changed

3 files changed

+0
-366
lines changed

impeller/entity/entity_unittests.cc

Lines changed: 0 additions & 232 deletions
Original file line numberDiff line numberDiff line change
@@ -1713,238 +1713,6 @@ TEST_P(EntityTest, SrgbToLinearFilter) {
17131713
ASSERT_TRUE(OpenPlaygroundHere(callback));
17141714
}
17151715

1716-
TEST_P(EntityTest, TTTBlendColor) {
1717-
{
1718-
Color src = {1, 0, 0, 0.5};
1719-
Color dst = {1, 0, 1, 1};
1720-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kClear),
1721-
Color(0, 0, 0, 0));
1722-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSource),
1723-
Color(1, 0, 0, 0.5));
1724-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestination),
1725-
Color(1, 0, 1, 1));
1726-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOver),
1727-
Color(1.5, 0, 0.5, 1));
1728-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOver),
1729-
Color(1, 0, 1, 1));
1730-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceIn),
1731-
Color(1, 0, 0, 0.5));
1732-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationIn),
1733-
Color(0.5, 0, 0.5, 0.5));
1734-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOut),
1735-
Color(0, 0, 0, 0));
1736-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOut),
1737-
Color(0.5, 0, 0.5, 0.5));
1738-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceATop),
1739-
Color(1.5, 0, 0.5, 1));
1740-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationATop),
1741-
Color(0.5, 0, 0.5, 0.5));
1742-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kXor),
1743-
Color(0.5, 0, 0.5, 0.5));
1744-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kPlus), Color(1, 0, 1, 1));
1745-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kModulate),
1746-
Color(1, 0, 0, 0.5));
1747-
}
1748-
1749-
{
1750-
Color src = {1, 1, 0, 1};
1751-
Color dst = {1, 0, 1, 1};
1752-
1753-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kClear),
1754-
Color(0, 0, 0, 0));
1755-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSource),
1756-
Color(1, 1, 0, 1));
1757-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestination),
1758-
Color(1, 0, 1, 1));
1759-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOver),
1760-
Color(1, 1, 0, 1));
1761-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOver),
1762-
Color(1, 0, 1, 1));
1763-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceIn),
1764-
Color(1, 1, 0, 1));
1765-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationIn),
1766-
Color(1, 0, 1, 1));
1767-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOut),
1768-
Color(0, 0, 0, 0));
1769-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOut),
1770-
Color(0, 0, 0, 0));
1771-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceATop),
1772-
Color(1, 1, 0, 1));
1773-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationATop),
1774-
Color(1, 0, 1, 1));
1775-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kXor), Color(0, 0, 0, 0));
1776-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kPlus), Color(1, 1, 1, 1));
1777-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kModulate),
1778-
Color(1, 0, 0, 1));
1779-
}
1780-
1781-
{
1782-
Color src = {1, 1, 0, 0.2};
1783-
Color dst = {1, 1, 1, 0.5};
1784-
1785-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kClear),
1786-
Color(0, 0, 0, 0));
1787-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSource),
1788-
Color(1, 1, 0, 0.2));
1789-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestination),
1790-
Color(1, 1, 1, 0.5));
1791-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOver),
1792-
Color(1.8, 1.8, 0.8, 0.6));
1793-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOver),
1794-
Color(1.5, 1.5, 1, 0.6));
1795-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceIn),
1796-
Color(0.5, 0.5, 0, 0.1));
1797-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationIn),
1798-
Color(0.2, 0.2, 0.2, 0.1));
1799-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOut),
1800-
Color(0.5, 0.5, 0, 0.1));
1801-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOut),
1802-
Color(0.8, 0.8, 0.8, 0.4));
1803-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceATop),
1804-
Color(1.3, 1.3, 0.8, 0.5));
1805-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationATop),
1806-
Color(0.7, 0.7, 0.2, 0.2));
1807-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kXor),
1808-
Color(1.3, 1.3, 0.8, 0.5));
1809-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kPlus),
1810-
Color(1, 1, 1, 0.7));
1811-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kModulate),
1812-
Color(1, 1, 0, 0.1));
1813-
}
1814-
1815-
{
1816-
Color src = {1, 0.5, 0, 0.2};
1817-
Color dst = {1, 1, 0.5, 0.5};
1818-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kClear),
1819-
Color(0, 0, 0, 0));
1820-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSource),
1821-
Color(1, 0.5, 0, 0.2));
1822-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestination),
1823-
Color(1, 1, 0.5, 0.5));
1824-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOver),
1825-
Color(1.8, 1.3, 0.4, 0.6));
1826-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOver),
1827-
Color(1.5, 1.25, 0.5, 0.6));
1828-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceIn),
1829-
Color(0.5, 0.25, 0, 0.1));
1830-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationIn),
1831-
Color(0.2, 0.2, 0.1, 0.1));
1832-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOut),
1833-
Color(0.5, 0.25, 0, 0.1));
1834-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOut),
1835-
Color(0.8, 0.8, 0.4, 0.4));
1836-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceATop),
1837-
Color(1.3, 1.05, 0.4, 0.5));
1838-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationATop),
1839-
Color(0.7, 0.45, 0.1, 0.2));
1840-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kXor),
1841-
Color(1.3, 1.05, 0.4, 0.5));
1842-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kPlus),
1843-
Color(1, 1, 0.5, 0.7));
1844-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kModulate),
1845-
Color(1, 0.5, 0, 0.1));
1846-
}
1847-
1848-
{
1849-
Color src = {0.5, 0.5, 0, 0.2};
1850-
Color dst = {0, 1, 0.5, 0.5};
1851-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kClear),
1852-
Color(0, 0, 0, 0));
1853-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSource),
1854-
Color(0.5, 0.5, 0, 0.2));
1855-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestination),
1856-
Color(0, 1, 0.5, 0.5));
1857-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOver),
1858-
Color(0.5, 1.3, 0.4, 0.6));
1859-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOver),
1860-
Color(0.25, 1.25, 0.5, 0.6));
1861-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceIn),
1862-
Color(0.25, 0.25, 0, 0.1));
1863-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationIn),
1864-
Color(0, 0.2, 0.1, 0.1));
1865-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOut),
1866-
Color(0.25, 0.25, 0, 0.1));
1867-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOut),
1868-
Color(0, 0.8, 0.4, 0.4));
1869-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceATop),
1870-
Color(0.25, 1.05, 0.4, 0.5));
1871-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationATop),
1872-
Color(0.25, 0.45, 0.1, 0.2));
1873-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kXor),
1874-
Color(0.25, 1.05, 0.4, 0.5));
1875-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kPlus),
1876-
Color(0.5, 1, 0.5, 0.7));
1877-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kModulate),
1878-
Color(0, 0.5, 0, 0.1));
1879-
}
1880-
1881-
{
1882-
Color src = {0.5, 0.5, 0.2, 0.2};
1883-
Color dst = {0.2, 1, 0.5, 0.5};
1884-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kClear),
1885-
Color(0, 0, 0, 0));
1886-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSource),
1887-
Color(0.5, 0.5, 0.2, 0.2));
1888-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestination),
1889-
Color(0.2, 1, 0.5, 0.5));
1890-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOver),
1891-
Color(0.66, 1.3, 0.6, 0.6));
1892-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOver),
1893-
Color(0.45, 1.25, 0.6, 0.6));
1894-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceIn),
1895-
Color(0.25, 0.25, 0.1, 0.1));
1896-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationIn),
1897-
Color(0.04, 0.2, 0.1, 0.1));
1898-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOut),
1899-
Color(0.25, 0.25, 0.1, 0.1));
1900-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOut),
1901-
Color(0.16, 0.8, 0.4, 0.4));
1902-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceATop),
1903-
Color(0.41, 1.05, 0.5, 0.5));
1904-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationATop),
1905-
Color(0.29, 0.45, 0.2, 0.2));
1906-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kXor),
1907-
Color(0.41, 1.05, 0.5, 0.5));
1908-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kPlus),
1909-
Color(0.7, 1, 0.7, 0.7));
1910-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kModulate),
1911-
Color(0.1, 0.5, 0.1, 0.1));
1912-
}
1913-
1914-
{
1915-
Color src = {0.5, 0.5, 0.2, 0.2};
1916-
Color dst = {0.2, 0.2, 0.5, 0.5};
1917-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kClear),
1918-
Color(0, 0, 0, 0));
1919-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSource),
1920-
Color(0.5, 0.5, 0.2, 0.2));
1921-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestination),
1922-
Color(0.2, 0.2, 0.5, 0.5));
1923-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOver),
1924-
Color(0.66, 0.66, 0.6, 0.6));
1925-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOver),
1926-
Color(0.45, 0.45, 0.6, 0.6));
1927-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceIn),
1928-
Color(0.25, 0.25, 0.1, 0.1));
1929-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationIn),
1930-
Color(0.04, 0.04, 0.1, 0.1));
1931-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceOut),
1932-
Color(0.25, 0.25, 0.1, 0.1));
1933-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationOut),
1934-
Color(0.16, 0.16, 0.4, 0.4));
1935-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kSourceATop),
1936-
Color(0.41, 0.41, 0.5, 0.5));
1937-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kDestinationATop),
1938-
Color(0.29, 0.29, 0.2, 0.2));
1939-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kXor),
1940-
Color(0.41, 0.41, 0.5, 0.5));
1941-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kPlus),
1942-
Color(0.7, 0.7, 0.7, 0.7));
1943-
ASSERT_EQ(Color::BlendColor(src, dst, BlendMode::kModulate),
1944-
Color(0.1, 0.1, 0.1, 0.1));
1945-
}
1946-
}
1947-
19481716
TEST_P(EntityTest, SdfText) {
19491717
auto callback = [&](ContentContext& context, RenderPass& pass) -> bool {
19501718
SkFont font;

impeller/geometry/color.cc

Lines changed: 0 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -110,134 +110,4 @@ Color Min(Color c, float threshold) {
110110
std::min(c.blue, threshold), std::min(c.alpha, threshold));
111111
}
112112

113-
Color Color::BlendColor(const Color& src,
114-
const Color& dst,
115-
BlendMode blend_mode) {
116-
static auto apply_rgb_srcover_alpha = [&](auto f) -> Color {
117-
return Color(f(src.red, dst.red), f(src.green, dst.green),
118-
f(src.blue, dst.blue),
119-
dst.alpha * (1 - src.alpha) + src.alpha // srcOver alpha
120-
);
121-
};
122-
123-
switch (blend_mode) {
124-
case BlendMode::kClear:
125-
return Color::BlackTransparent();
126-
case BlendMode::kSource:
127-
return src;
128-
case BlendMode::kDestination:
129-
return dst;
130-
case BlendMode::kSourceOver:
131-
// r = s + (1-sa)*d
132-
return src + dst * (1 - src.alpha);
133-
case BlendMode::kDestinationOver:
134-
// r = d + (1-da)*s
135-
return dst + src * (1 - dst.alpha);
136-
case BlendMode::kSourceIn:
137-
// r = s * da
138-
return src * dst.alpha;
139-
case BlendMode::kDestinationIn:
140-
// r = d * sa
141-
return dst * src.alpha;
142-
case BlendMode::kSourceOut:
143-
// r = s * ( 1- da)
144-
return src * (1 - dst.alpha);
145-
case BlendMode::kDestinationOut:
146-
// r = d * (1-sa)
147-
return dst * (1 - src.alpha);
148-
case BlendMode::kSourceATop:
149-
// r = s*da + d*(1-sa)
150-
return src * dst.alpha + dst * (1 - src.alpha);
151-
case BlendMode::kDestinationATop:
152-
// r = d*sa + s*(1-da)
153-
return dst * src.alpha + src * (1 - dst.alpha);
154-
case BlendMode::kXor:
155-
// r = s*(1-da) + d*(1-sa)
156-
return src * (1 - dst.alpha) + dst * (1 - src.alpha);
157-
case BlendMode::kPlus:
158-
// r = min(s + d, 1)
159-
return Min(src + dst, 1);
160-
case BlendMode::kModulate:
161-
// r = s*d
162-
return src * dst;
163-
case BlendMode::kScreen: {
164-
// r = s + d - s*d
165-
return src + dst - src * dst;
166-
}
167-
case BlendMode::kOverlay:
168-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
169-
if (d * 2 < dst.alpha) {
170-
return 2 * s * d;
171-
}
172-
return src.alpha * dst.alpha - 2 * (dst.alpha - s) * (src.alpha - d);
173-
});
174-
case BlendMode::kDarken: {
175-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
176-
return (1 - dst.alpha) * s + (1 - src.alpha) * d + std::min(s, d);
177-
});
178-
}
179-
case BlendMode::kLighten:
180-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
181-
return (1 - dst.alpha) * s + (1 - src.alpha) * d + std::max(s, d);
182-
});
183-
case BlendMode::kColorDodge:
184-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
185-
if (d == 0) {
186-
return s * (1 - src.alpha);
187-
}
188-
if (s == src.alpha) {
189-
return s + dst.alpha * (1 - src.alpha);
190-
}
191-
return src.alpha *
192-
std::min(dst.alpha, d * src.alpha / (src.alpha - s)) +
193-
s * (1 - dst.alpha + dst.alpha * (1 - src.alpha));
194-
});
195-
case BlendMode::kColorBurn:
196-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
197-
if (s == 0) {
198-
return dst.alpha * (1 - src.alpha);
199-
}
200-
if (d == dst.alpha) {
201-
return d + s * (1 - dst.alpha);
202-
}
203-
// s.a * (d.a - min(d.a, (d.a - s) * s.a/s)) + s * (1-d.a) + d.a * (1 -
204-
// s.a)
205-
return src.alpha *
206-
(dst.alpha -
207-
std::min(dst.alpha, (dst.alpha - d) * src.alpha / s)) +
208-
s * (1 - dst.alpha) + dst.alpha * (1 - src.alpha);
209-
});
210-
case BlendMode::kHardLight:
211-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
212-
if (src.alpha >= s * (1 - dst.alpha) + d * (1 - src.alpha) + 2 * s) {
213-
return 2 * s * d;
214-
}
215-
// s.a * d.a - 2 * (d.a - d) * (s.a - s)
216-
return src.alpha * dst.alpha - 2 * (dst.alpha - d) * (src.alpha - s);
217-
});
218-
case BlendMode::kDifference:
219-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
220-
// s + d - 2 * min(s * d.a, d * s.a);
221-
return s + d - 2 * std::min(s * dst.alpha, d * src.alpha);
222-
});
223-
case BlendMode::kExclusion:
224-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
225-
// s + d - 2 * s * d
226-
return s + d - 2 * s * d;
227-
});
228-
case BlendMode::kMultiply:
229-
return apply_rgb_srcover_alpha([&](auto s, auto d) {
230-
// s * (1 - d.a) + d * (1 - s.a) + (s * d)
231-
return s * (1 - dst.alpha) + d * (1 - src.alpha) + (s * d);
232-
});
233-
case BlendMode::kHue:
234-
case BlendMode::kSaturation:
235-
case BlendMode::kColor:
236-
case BlendMode::kLuminosity:
237-
case BlendMode::kSoftLight:
238-
default:
239-
return src + dst * (1 - src.alpha);
240-
}
241-
}
242-
243113
} // namespace impeller

impeller/geometry/color.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -734,10 +734,6 @@ struct Color {
734734
};
735735
}
736736

737-
static Color BlendColor(const Color& src,
738-
const Color& dst,
739-
BlendMode blend_mode);
740-
741737
Color operator*(const Color& c) const {
742738
return Color(red * c.red, green * c.green, blue * c.blue, alpha * c.alpha);
743739
}

0 commit comments

Comments
 (0)