Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: cc/output/shader.cc

Issue 959283004: Background filters are affected by masks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more robust fuzzy comparator Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/shader.h ('k') | cc/test/data/mask_of_background_filter.png » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/output/shader.h" 5 #include "cc/output/shader.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 std::string VertexShaderVideoTransform::GetShaderBody() { 734 std::string VertexShaderVideoTransform::GetShaderBody() {
735 return SHADER0([]() { 735 return SHADER0([]() {
736 void main() { 736 void main() {
737 gl_Position = matrix * a_position; 737 gl_Position = matrix * a_position;
738 v_texCoord = 738 v_texCoord =
739 vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0)); 739 vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0));
740 } 740 }
741 }); 741 });
742 } 742 }
743 743
744 #define BLEND_MODE_UNIFORMS "s_backdropTexture", "backdropRect" 744 #define BLEND_MODE_UNIFORMS "s_backdropTexture", \
745 #define UNUSED_BLEND_MODE_UNIFORMS (!has_blend_mode() ? 2 : 0) 745 "s_originalBackdropTexture", \
746 "backdropRect"
747 #define UNUSED_BLEND_MODE_UNIFORMS (!has_blend_mode() ? 3 : 0)
746 #define BLEND_MODE_SET_LOCATIONS(X, POS) \ 748 #define BLEND_MODE_SET_LOCATIONS(X, POS) \
747 if (has_blend_mode()) { \ 749 if (has_blend_mode()) { \
748 DCHECK_LT(static_cast<size_t>(POS) + 1, arraysize(X)); \ 750 DCHECK_LT(static_cast<size_t>(POS) + 2, arraysize(X)); \
749 backdrop_location_ = locations[POS]; \ 751 backdrop_location_ = locations[POS]; \
750 backdrop_rect_location_ = locations[POS + 1]; \ 752 original_backdrop_location_ = locations[POS + 1]; \
753 backdrop_rect_location_ = locations[POS + 2]; \
751 } 754 }
752 755
753 FragmentTexBlendMode::FragmentTexBlendMode() 756 FragmentTexBlendMode::FragmentTexBlendMode()
754 : backdrop_location_(-1), 757 : backdrop_location_(-1),
758 original_backdrop_location_(-1),
755 backdrop_rect_location_(-1), 759 backdrop_rect_location_(-1),
756 blend_mode_(BLEND_MODE_NONE) { 760 blend_mode_(BLEND_MODE_NONE),
761 mask_for_background_(false) {
757 } 762 }
758 763
759 std::string FragmentTexBlendMode::SetBlendModeFunctions( 764 std::string FragmentTexBlendMode::SetBlendModeFunctions(
760 std::string shader_string) const { 765 std::string shader_string) const {
761 if (shader_string.find("ApplyBlendMode") == std::string::npos) 766 if (shader_string.find("ApplyBlendMode") == std::string::npos)
762 return shader_string; 767 return shader_string;
763 768
764 if (!has_blend_mode()) { 769 if (!has_blend_mode()) {
765 return "#define ApplyBlendMode(X) (X)\n" + shader_string; 770 return "#define ApplyBlendMode(X, Y) (X)\n" + shader_string;
771 }
772
773 static const std::string kUniforms = SHADER0([]() {
774 uniform sampler2D s_backdropTexture;
775 uniform sampler2D s_originalBackdropTexture;
776 uniform TexCoordPrecision vec4 backdropRect;
777 });
778
779 std::string mixFunction;
780 if (mask_for_background()) {
781 mixFunction = SHADER0([]() {
782 vec4 MixBackdrop(TexCoordPrecision vec2 bgTexCoord, float mask) {
783 vec4 backdrop = texture2D(s_backdropTexture, bgTexCoord);
784 vec4 original_backdrop =
785 texture2D(s_originalBackdropTexture, bgTexCoord);
786 return mix(original_backdrop, backdrop, mask);
787 }
788 });
789 } else {
790 mixFunction = SHADER0([]() {
791 vec4 MixBackdrop(TexCoordPrecision vec2 bgTexCoord, float mask) {
792 return texture2D(s_backdropTexture, bgTexCoord);
793 }
794 });
766 } 795 }
767 796
768 static const std::string kFunctionApplyBlendMode = SHADER0([]() { 797 static const std::string kFunctionApplyBlendMode = SHADER0([]() {
769 uniform sampler2D s_backdropTexture; 798 vec4 GetBackdropColor(float mask) {
770 uniform TexCoordPrecision vec4 backdropRect;
771
772 vec4 GetBackdropColor() {
773 TexCoordPrecision vec2 bgTexCoord = gl_FragCoord.xy - backdropRect.xy; 799 TexCoordPrecision vec2 bgTexCoord = gl_FragCoord.xy - backdropRect.xy;
774 bgTexCoord.x /= backdropRect.z; 800 bgTexCoord.x /= backdropRect.z;
775 bgTexCoord.y /= backdropRect.w; 801 bgTexCoord.y /= backdropRect.w;
776 return texture2D(s_backdropTexture, bgTexCoord); 802 return MixBackdrop(bgTexCoord, mask);
777 } 803 }
778 804
779 vec4 ApplyBlendMode(vec4 src) { 805 vec4 ApplyBlendMode(vec4 src, float mask) {
780 vec4 dst = GetBackdropColor(); 806 vec4 dst = GetBackdropColor(mask);
781 return Blend(src, dst); 807 return Blend(src, dst);
782 } 808 }
783 }); 809 });
784 810
785 return "precision mediump float;" + GetHelperFunctions() + 811 return "precision mediump float;" + GetHelperFunctions() +
786 GetBlendFunction() + kFunctionApplyBlendMode + shader_string; 812 GetBlendFunction() + kUniforms + mixFunction +
813 kFunctionApplyBlendMode + shader_string;
787 } 814 }
788 815
789 std::string FragmentTexBlendMode::GetHelperFunctions() const { 816 std::string FragmentTexBlendMode::GetHelperFunctions() const {
790 static const std::string kFunctionHardLight = SHADER0([]() { 817 static const std::string kFunctionHardLight = SHADER0([]() {
791 vec3 hardLight(vec4 src, vec4 dst) { 818 vec3 hardLight(vec4 src, vec4 dst) {
792 vec3 result; 819 vec3 result;
793 result.r = 820 result.r =
794 (2.0 * src.r <= src.a) 821 (2.0 * src.r <= src.a)
795 ? (2.0 * src.r * dst.r) 822 ? (2.0 * src.r * dst.r)
796 : (src.a * dst.a - 2.0 * (dst.a - dst.r) * (src.a - src.r)); 823 : (src.a * dst.a - 2.0 * (dst.a - dst.r) * (src.a - src.r));
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
1112 varying TexCoordPrecision vec2 v_texCoord; 1139 varying TexCoordPrecision vec2 v_texCoord;
1113 uniform SamplerType s_texture; 1140 uniform SamplerType s_texture;
1114 uniform float alpha; 1141 uniform float alpha;
1115 }); 1142 });
1116 } 1143 }
1117 1144
1118 std::string FragmentShaderRGBATexAlpha::GetShaderBody() { 1145 std::string FragmentShaderRGBATexAlpha::GetShaderBody() {
1119 return SHADER0([]() { 1146 return SHADER0([]() {
1120 void main() { 1147 void main() {
1121 vec4 texColor = TextureLookup(s_texture, v_texCoord); 1148 vec4 texColor = TextureLookup(s_texture, v_texCoord);
1122 gl_FragColor = ApplyBlendMode(texColor * alpha); 1149 gl_FragColor = ApplyBlendMode(texColor * alpha, 0.0);
1123 } 1150 }
1124 }); 1151 });
1125 } 1152 }
1126 1153
1127 void FragmentShaderRGBATexAlpha::FillLocations( 1154 void FragmentShaderRGBATexAlpha::FillLocations(
1128 ShaderLocations* locations) const { 1155 ShaderLocations* locations) const {
1129 locations->sampler = sampler_location(); 1156 locations->sampler = sampler_location();
1130 locations->alpha = alpha_location(); 1157 locations->alpha = alpha_location();
1131 locations->backdrop = backdrop_location(); 1158 locations->backdrop = backdrop_location();
1132 locations->backdrop_rect = backdrop_rect_location(); 1159 locations->backdrop_rect = backdrop_rect_location();
(...skipping 18 matching lines...) Expand all
1151 1178
1152 std::string FragmentShaderRGBATexColorMatrixAlpha::GetShaderBody() { 1179 std::string FragmentShaderRGBATexColorMatrixAlpha::GetShaderBody() {
1153 return SHADER0([]() { 1180 return SHADER0([]() {
1154 void main() { 1181 void main() {
1155 vec4 texColor = TextureLookup(s_texture, v_texCoord); 1182 vec4 texColor = TextureLookup(s_texture, v_texCoord);
1156 float nonZeroAlpha = max(texColor.a, 0.00001); 1183 float nonZeroAlpha = max(texColor.a, 0.00001);
1157 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); 1184 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha);
1158 texColor = colorMatrix * texColor + colorOffset; 1185 texColor = colorMatrix * texColor + colorOffset;
1159 texColor.rgb *= texColor.a; 1186 texColor.rgb *= texColor.a;
1160 texColor = clamp(texColor, 0.0, 1.0); 1187 texColor = clamp(texColor, 0.0, 1.0);
1161 gl_FragColor = ApplyBlendMode(texColor * alpha); 1188 gl_FragColor = ApplyBlendMode(texColor * alpha, 0.0);
1162 } 1189 }
1163 }); 1190 });
1164 } 1191 }
1165 1192
1166 void FragmentShaderRGBATexColorMatrixAlpha::FillLocations( 1193 void FragmentShaderRGBATexColorMatrixAlpha::FillLocations(
1167 ShaderLocations* locations) const { 1194 ShaderLocations* locations) const {
1168 locations->sampler = sampler_location(); 1195 locations->sampler = sampler_location();
1169 locations->alpha = alpha_location(); 1196 locations->alpha = alpha_location();
1170 locations->color_matrix = color_matrix_location(); 1197 locations->color_matrix = color_matrix_location();
1171 locations->color_offset = color_offset_location(); 1198 locations->color_offset = color_offset_location();
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
1430 }); 1457 });
1431 } 1458 }
1432 1459
1433 std::string FragmentShaderRGBATexAlphaAA::GetShaderBody() { 1460 std::string FragmentShaderRGBATexAlphaAA::GetShaderBody() {
1434 return SHADER0([]() { 1461 return SHADER0([]() {
1435 void main() { 1462 void main() {
1436 vec4 texColor = TextureLookup(s_texture, v_texCoord); 1463 vec4 texColor = TextureLookup(s_texture, v_texCoord);
1437 vec4 d4 = min(edge_dist[0], edge_dist[1]); 1464 vec4 d4 = min(edge_dist[0], edge_dist[1]);
1438 vec2 d2 = min(d4.xz, d4.yw); 1465 vec2 d2 = min(d4.xz, d4.yw);
1439 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); 1466 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0);
1440 gl_FragColor = ApplyBlendMode(texColor * alpha * aa); 1467 gl_FragColor = ApplyBlendMode(texColor * alpha * aa, 0.0);
1441 } 1468 }
1442 }); 1469 });
1443 } 1470 }
1444 1471
1445 void FragmentShaderRGBATexAlphaAA::FillLocations( 1472 void FragmentShaderRGBATexAlphaAA::FillLocations(
1446 ShaderLocations* locations) const { 1473 ShaderLocations* locations) const {
1447 locations->sampler = sampler_location(); 1474 locations->sampler = sampler_location();
1448 locations->alpha = alpha_location(); 1475 locations->alpha = alpha_location();
1449 locations->backdrop = backdrop_location(); 1476 locations->backdrop = backdrop_location();
1450 locations->backdrop_rect = backdrop_rect_location(); 1477 locations->backdrop_rect = backdrop_rect_location();
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 } 1620 }
1594 1621
1595 std::string FragmentShaderRGBATexAlphaMask::GetShaderBody() { 1622 std::string FragmentShaderRGBATexAlphaMask::GetShaderBody() {
1596 return SHADER0([]() { 1623 return SHADER0([]() {
1597 void main() { 1624 void main() {
1598 vec4 texColor = texture2D(s_texture, v_texCoord); 1625 vec4 texColor = texture2D(s_texture, v_texCoord);
1599 TexCoordPrecision vec2 maskTexCoord = 1626 TexCoordPrecision vec2 maskTexCoord =
1600 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, 1627 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x,
1601 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); 1628 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y);
1602 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); 1629 vec4 maskColor = TextureLookup(s_mask, maskTexCoord);
1603 gl_FragColor = ApplyBlendMode(texColor * alpha * maskColor.w); 1630 gl_FragColor = ApplyBlendMode(
1631 texColor * alpha * maskColor.w, maskColor.w);
1604 } 1632 }
1605 }); 1633 });
1606 } 1634 }
1607 1635
1608 void FragmentShaderRGBATexAlphaMask::FillLocations( 1636 void FragmentShaderRGBATexAlphaMask::FillLocations(
1609 ShaderLocations* locations) const { 1637 ShaderLocations* locations) const {
1610 locations->sampler = sampler_location(); 1638 locations->sampler = sampler_location();
1611 locations->mask_sampler = mask_sampler_location(); 1639 locations->mask_sampler = mask_sampler_location();
1612 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); 1640 locations->mask_tex_coord_scale = mask_tex_coord_scale_location();
1613 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); 1641 locations->mask_tex_coord_offset = mask_tex_coord_offset_location();
1614 locations->alpha = alpha_location(); 1642 locations->alpha = alpha_location();
1615 locations->backdrop = backdrop_location(); 1643 locations->backdrop = backdrop_location();
1616 locations->backdrop_rect = backdrop_rect_location(); 1644 locations->backdrop_rect = backdrop_rect_location();
1645 if (mask_for_background())
1646 locations->original_backdrop = original_backdrop_location();
1617 } 1647 }
1618 1648
1619 FragmentShaderRGBATexAlphaMaskAA::FragmentShaderRGBATexAlphaMaskAA() 1649 FragmentShaderRGBATexAlphaMaskAA::FragmentShaderRGBATexAlphaMaskAA()
1620 : sampler_location_(-1), 1650 : sampler_location_(-1),
1621 mask_sampler_location_(-1), 1651 mask_sampler_location_(-1),
1622 alpha_location_(-1), 1652 alpha_location_(-1),
1623 mask_tex_coord_scale_location_(-1), 1653 mask_tex_coord_scale_location_(-1),
1624 mask_tex_coord_offset_location_(-1) { 1654 mask_tex_coord_offset_location_(-1) {
1625 } 1655 }
1626 1656
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 return SHADER0([]() { 1704 return SHADER0([]() {
1675 void main() { 1705 void main() {
1676 vec4 texColor = texture2D(s_texture, v_texCoord); 1706 vec4 texColor = texture2D(s_texture, v_texCoord);
1677 TexCoordPrecision vec2 maskTexCoord = 1707 TexCoordPrecision vec2 maskTexCoord =
1678 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, 1708 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x,
1679 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); 1709 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y);
1680 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); 1710 vec4 maskColor = TextureLookup(s_mask, maskTexCoord);
1681 vec4 d4 = min(edge_dist[0], edge_dist[1]); 1711 vec4 d4 = min(edge_dist[0], edge_dist[1]);
1682 vec2 d2 = min(d4.xz, d4.yw); 1712 vec2 d2 = min(d4.xz, d4.yw);
1683 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); 1713 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0);
1684 gl_FragColor = ApplyBlendMode(texColor * alpha * maskColor.w * aa); 1714 gl_FragColor = ApplyBlendMode(
1715 texColor * alpha * maskColor.w * aa, maskColor.w);
1685 } 1716 }
1686 }); 1717 });
1687 } 1718 }
1688 1719
1689 void FragmentShaderRGBATexAlphaMaskAA::FillLocations( 1720 void FragmentShaderRGBATexAlphaMaskAA::FillLocations(
1690 ShaderLocations* locations) const { 1721 ShaderLocations* locations) const {
1691 locations->sampler = sampler_location(); 1722 locations->sampler = sampler_location();
1692 locations->mask_sampler = mask_sampler_location(); 1723 locations->mask_sampler = mask_sampler_location();
1693 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); 1724 locations->mask_tex_coord_scale = mask_tex_coord_scale_location();
1694 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); 1725 locations->mask_tex_coord_offset = mask_tex_coord_offset_location();
1695 locations->alpha = alpha_location(); 1726 locations->alpha = alpha_location();
1696 locations->backdrop = backdrop_location(); 1727 locations->backdrop = backdrop_location();
1697 locations->backdrop_rect = backdrop_rect_location(); 1728 locations->backdrop_rect = backdrop_rect_location();
1729 if (mask_for_background())
1730 locations->original_backdrop = original_backdrop_location();
1698 } 1731 }
1699 1732
1700 FragmentShaderRGBATexAlphaMaskColorMatrixAA:: 1733 FragmentShaderRGBATexAlphaMaskColorMatrixAA::
1701 FragmentShaderRGBATexAlphaMaskColorMatrixAA() 1734 FragmentShaderRGBATexAlphaMaskColorMatrixAA()
1702 : sampler_location_(-1), 1735 : sampler_location_(-1),
1703 mask_sampler_location_(-1), 1736 mask_sampler_location_(-1),
1704 alpha_location_(-1), 1737 alpha_location_(-1),
1705 mask_tex_coord_scale_location_(-1), 1738 mask_tex_coord_scale_location_(-1),
1706 color_matrix_location_(-1), 1739 color_matrix_location_(-1),
1707 color_offset_location_(-1) { 1740 color_offset_location_(-1) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 texColor = colorMatrix * texColor + colorOffset; 1802 texColor = colorMatrix * texColor + colorOffset;
1770 texColor.rgb *= texColor.a; 1803 texColor.rgb *= texColor.a;
1771 texColor = clamp(texColor, 0.0, 1.0); 1804 texColor = clamp(texColor, 0.0, 1.0);
1772 TexCoordPrecision vec2 maskTexCoord = 1805 TexCoordPrecision vec2 maskTexCoord =
1773 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, 1806 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x,
1774 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); 1807 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y);
1775 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); 1808 vec4 maskColor = TextureLookup(s_mask, maskTexCoord);
1776 vec4 d4 = min(edge_dist[0], edge_dist[1]); 1809 vec4 d4 = min(edge_dist[0], edge_dist[1]);
1777 vec2 d2 = min(d4.xz, d4.yw); 1810 vec2 d2 = min(d4.xz, d4.yw);
1778 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); 1811 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0);
1779 gl_FragColor = ApplyBlendMode(texColor * alpha * maskColor.w * aa); 1812 gl_FragColor = ApplyBlendMode(
1813 texColor * alpha * maskColor.w * aa, maskColor.w);
1780 } 1814 }
1781 }); 1815 });
1782 } 1816 }
1783 1817
1784 void FragmentShaderRGBATexAlphaMaskColorMatrixAA::FillLocations( 1818 void FragmentShaderRGBATexAlphaMaskColorMatrixAA::FillLocations(
1785 ShaderLocations* locations) const { 1819 ShaderLocations* locations) const {
1786 locations->sampler = sampler_location(); 1820 locations->sampler = sampler_location();
1787 locations->alpha = alpha_location(); 1821 locations->alpha = alpha_location();
1788 locations->mask_sampler = mask_sampler_location(); 1822 locations->mask_sampler = mask_sampler_location();
1789 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); 1823 locations->mask_tex_coord_scale = mask_tex_coord_scale_location();
1790 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); 1824 locations->mask_tex_coord_offset = mask_tex_coord_offset_location();
1791 locations->color_matrix = color_matrix_location(); 1825 locations->color_matrix = color_matrix_location();
1792 locations->color_offset = color_offset_location(); 1826 locations->color_offset = color_offset_location();
1793 locations->backdrop = backdrop_location(); 1827 locations->backdrop = backdrop_location();
1794 locations->backdrop_rect = backdrop_rect_location(); 1828 locations->backdrop_rect = backdrop_rect_location();
1829 if (mask_for_background())
1830 locations->original_backdrop = original_backdrop_location();
1795 } 1831 }
1796 1832
1797 FragmentShaderRGBATexAlphaColorMatrixAA:: 1833 FragmentShaderRGBATexAlphaColorMatrixAA::
1798 FragmentShaderRGBATexAlphaColorMatrixAA() 1834 FragmentShaderRGBATexAlphaColorMatrixAA()
1799 : sampler_location_(-1), 1835 : sampler_location_(-1),
1800 alpha_location_(-1), 1836 alpha_location_(-1),
1801 color_matrix_location_(-1), 1837 color_matrix_location_(-1),
1802 color_offset_location_(-1) { 1838 color_offset_location_(-1) {
1803 } 1839 }
1804 1840
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1846 void main() { 1882 void main() {
1847 vec4 texColor = TextureLookup(s_texture, v_texCoord); 1883 vec4 texColor = TextureLookup(s_texture, v_texCoord);
1848 float nonZeroAlpha = max(texColor.a, 0.00001); 1884 float nonZeroAlpha = max(texColor.a, 0.00001);
1849 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); 1885 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha);
1850 texColor = colorMatrix * texColor + colorOffset; 1886 texColor = colorMatrix * texColor + colorOffset;
1851 texColor.rgb *= texColor.a; 1887 texColor.rgb *= texColor.a;
1852 texColor = clamp(texColor, 0.0, 1.0); 1888 texColor = clamp(texColor, 0.0, 1.0);
1853 vec4 d4 = min(edge_dist[0], edge_dist[1]); 1889 vec4 d4 = min(edge_dist[0], edge_dist[1]);
1854 vec2 d2 = min(d4.xz, d4.yw); 1890 vec2 d2 = min(d4.xz, d4.yw);
1855 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); 1891 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0);
1856 gl_FragColor = ApplyBlendMode(texColor * alpha * aa); 1892 gl_FragColor = ApplyBlendMode(texColor * alpha * aa, 0.0);
1857 } 1893 }
1858 }); 1894 });
1859 } 1895 }
1860 1896
1861 void FragmentShaderRGBATexAlphaColorMatrixAA::FillLocations( 1897 void FragmentShaderRGBATexAlphaColorMatrixAA::FillLocations(
1862 ShaderLocations* locations) const { 1898 ShaderLocations* locations) const {
1863 locations->sampler = sampler_location(); 1899 locations->sampler = sampler_location();
1864 locations->alpha = alpha_location(); 1900 locations->alpha = alpha_location();
1865 locations->color_matrix = color_matrix_location(); 1901 locations->color_matrix = color_matrix_location();
1866 locations->color_offset = color_offset_location(); 1902 locations->color_offset = color_offset_location();
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1933 vec4 texColor = texture2D(s_texture, v_texCoord); 1969 vec4 texColor = texture2D(s_texture, v_texCoord);
1934 float nonZeroAlpha = max(texColor.a, 0.00001); 1970 float nonZeroAlpha = max(texColor.a, 0.00001);
1935 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); 1971 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha);
1936 texColor = colorMatrix * texColor + colorOffset; 1972 texColor = colorMatrix * texColor + colorOffset;
1937 texColor.rgb *= texColor.a; 1973 texColor.rgb *= texColor.a;
1938 texColor = clamp(texColor, 0.0, 1.0); 1974 texColor = clamp(texColor, 0.0, 1.0);
1939 TexCoordPrecision vec2 maskTexCoord = 1975 TexCoordPrecision vec2 maskTexCoord =
1940 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, 1976 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x,
1941 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); 1977 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y);
1942 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); 1978 vec4 maskColor = TextureLookup(s_mask, maskTexCoord);
1943 gl_FragColor = ApplyBlendMode(texColor * alpha * maskColor.w); 1979 gl_FragColor = ApplyBlendMode(
1980 texColor * alpha * maskColor.w, maskColor.w);
1944 } 1981 }
1945 }); 1982 });
1946 } 1983 }
1947 1984
1948 void FragmentShaderRGBATexAlphaMaskColorMatrix::FillLocations( 1985 void FragmentShaderRGBATexAlphaMaskColorMatrix::FillLocations(
1949 ShaderLocations* locations) const { 1986 ShaderLocations* locations) const {
1950 locations->sampler = sampler_location(); 1987 locations->sampler = sampler_location();
1951 locations->mask_sampler = mask_sampler_location(); 1988 locations->mask_sampler = mask_sampler_location();
1952 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); 1989 locations->mask_tex_coord_scale = mask_tex_coord_scale_location();
1953 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); 1990 locations->mask_tex_coord_offset = mask_tex_coord_offset_location();
1954 locations->alpha = alpha_location(); 1991 locations->alpha = alpha_location();
1955 locations->color_matrix = color_matrix_location(); 1992 locations->color_matrix = color_matrix_location();
1956 locations->color_offset = color_offset_location(); 1993 locations->color_offset = color_offset_location();
1957 locations->backdrop = backdrop_location(); 1994 locations->backdrop = backdrop_location();
1958 locations->backdrop_rect = backdrop_rect_location(); 1995 locations->backdrop_rect = backdrop_rect_location();
1996 if (mask_for_background())
1997 locations->original_backdrop = original_backdrop_location();
1959 } 1998 }
1960 1999
1961 FragmentShaderYUVVideo::FragmentShaderYUVVideo() 2000 FragmentShaderYUVVideo::FragmentShaderYUVVideo()
1962 : y_texture_location_(-1), 2001 : y_texture_location_(-1),
1963 u_texture_location_(-1), 2002 u_texture_location_(-1),
1964 v_texture_location_(-1), 2003 v_texture_location_(-1),
1965 alpha_location_(-1), 2004 alpha_location_(-1),
1966 yuv_matrix_location_(-1), 2005 yuv_matrix_location_(-1),
1967 yuv_adj_location_(-1), 2006 yuv_adj_location_(-1),
1968 clamp_rect_location_(-1) { 2007 clamp_rect_location_(-1) {
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
2243 vec2 texCoord = 2282 vec2 texCoord =
2244 clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texTransform.xy; 2283 clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texTransform.xy;
2245 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); 2284 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0);
2246 float picker = abs(coord.x - coord.y); // NOLINT 2285 float picker = abs(coord.x - coord.y); // NOLINT
2247 gl_FragColor = mix(color1, color2, picker) * alpha; 2286 gl_FragColor = mix(color1, color2, picker) * alpha;
2248 } 2287 }
2249 }); 2288 });
2250 } 2289 }
2251 2290
2252 } // namespace cc 2291 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/shader.h ('k') | cc/test/data/mask_of_background_filter.png » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698