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

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

Issue 723343002: Update from https://crrev.com/304121 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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/output/software_renderer.cc » ('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 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 gl_Position = matrix * a_position; 662 gl_Position = matrix * a_position;
663 v_texCoord = 663 v_texCoord =
664 vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0)); 664 vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0));
665 } 665 }
666 // clang-format off 666 // clang-format off
667 ); // NOLINT(whitespace/parens) 667 ); // NOLINT(whitespace/parens)
668 // clang-format on 668 // clang-format on
669 } 669 }
670 670
671 #define BLEND_MODE_UNIFORMS "s_backdropTexture", "backdropRect" 671 #define BLEND_MODE_UNIFORMS "s_backdropTexture", "backdropRect"
672 #define UNUSED_BLEND_MODE_UNIFORMS (is_default_blend_mode() ? 2 : 0) 672 #define UNUSED_BLEND_MODE_UNIFORMS (!has_blend_mode() ? 2 : 0)
673 #define BLEND_MODE_SET_LOCATIONS(X, POS) \ 673 #define BLEND_MODE_SET_LOCATIONS(X, POS) \
674 if (!is_default_blend_mode()) { \ 674 if (has_blend_mode()) { \
675 DCHECK_LT(static_cast<size_t>(POS) + 1, arraysize(X)); \ 675 DCHECK_LT(static_cast<size_t>(POS) + 1, arraysize(X)); \
676 backdrop_location_ = locations[POS]; \ 676 backdrop_location_ = locations[POS]; \
677 backdrop_rect_location_ = locations[POS + 1]; \ 677 backdrop_rect_location_ = locations[POS + 1]; \
678 } 678 }
679 679
680 FragmentTexBlendMode::FragmentTexBlendMode() 680 FragmentTexBlendMode::FragmentTexBlendMode()
681 : backdrop_location_(-1), 681 : backdrop_location_(-1),
682 backdrop_rect_location_(-1), 682 backdrop_rect_location_(-1),
683 blend_mode_(BlendModeNormal) { 683 blend_mode_(BlendModeNone) {
684 } 684 }
685 685
686 std::string FragmentTexBlendMode::SetBlendModeFunctions( 686 std::string FragmentTexBlendMode::SetBlendModeFunctions(
687 std::string shader_string) const { 687 std::string shader_string) const {
688 if (shader_string.find("ApplyBlendMode") == std::string::npos) 688 if (shader_string.find("ApplyBlendMode") == std::string::npos)
689 return shader_string; 689 return shader_string;
690 690
691 if (is_default_blend_mode()) { 691 if (!has_blend_mode()) {
692 return "#define ApplyBlendMode(X) (X)\n" + shader_string; 692 return "#define ApplyBlendMode(X) (X)\n" + shader_string;
693 } 693 }
694 694
695 // clang-format off 695 // clang-format off
696 static const std::string kFunctionApplyBlendMode = SHADER0( 696 static const std::string kFunctionApplyBlendMode = SHADER0(
697 // clang-format on 697 // clang-format on
698 uniform SamplerType s_backdropTexture; 698 uniform SamplerType s_backdropTexture;
699 uniform TexCoordPrecision vec4 backdropRect; 699 uniform TexCoordPrecision vec4 backdropRect;
700 700
701 vec4 GetBackdropColor() { 701 vec4 GetBackdropColor() {
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 return "vec4 Blend(vec4 src, vec4 dst) {" 895 return "vec4 Blend(vec4 src, vec4 dst) {"
896 " vec4 result;" 896 " vec4 result;"
897 " result.a = src.a + (1.0 - src.a) * dst.a;" + 897 " result.a = src.a + (1.0 - src.a) * dst.a;" +
898 GetBlendFunctionBodyForRGB() + 898 GetBlendFunctionBodyForRGB() +
899 " return result;" 899 " return result;"
900 "}"; 900 "}";
901 } 901 }
902 902
903 std::string FragmentTexBlendMode::GetBlendFunctionBodyForRGB() const { 903 std::string FragmentTexBlendMode::GetBlendFunctionBodyForRGB() const {
904 switch (blend_mode_) { 904 switch (blend_mode_) {
905 case BlendModeNormal:
906 return "result.rgb = src.rgb + dst.rgb * (1.0 - src.a);";
907 case BlendModeScreen:
908 return "result.rgb = src.rgb + (1.0 - src.rgb) * dst.rgb;";
905 case BlendModeLighten: 909 case BlendModeLighten:
906 return "result.rgb = max((1.0 - src.a) * dst.rgb + src.rgb," 910 return "result.rgb = max((1.0 - src.a) * dst.rgb + src.rgb,"
907 " (1.0 - dst.a) * src.rgb + dst.rgb);"; 911 " (1.0 - dst.a) * src.rgb + dst.rgb);";
908 case BlendModeOverlay: 912 case BlendModeOverlay:
909 return "result.rgb = hardLight(dst, src);"; 913 return "result.rgb = hardLight(dst, src);";
910 case BlendModeDarken: 914 case BlendModeDarken:
911 return "result.rgb = min((1.0 - src.a) * dst.rgb + src.rgb," 915 return "result.rgb = min((1.0 - src.a) * dst.rgb + src.rgb,"
912 " (1.0 - dst.a) * src.rgb + dst.rgb);"; 916 " (1.0 - dst.a) * src.rgb + dst.rgb);";
913 case BlendModeColorDodge: 917 case BlendModeColorDodge:
914 return "result.r = getColorDodgeComponent(src.r, src.a, dst.r, dst.a);" 918 return "result.r = getColorDodgeComponent(src.r, src.a, dst.r, dst.a);"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 "result.rgb = set_luminance(srcDstAlpha.rgb," 960 "result.rgb = set_luminance(srcDstAlpha.rgb,"
957 " srcDstAlpha.a," 961 " srcDstAlpha.a,"
958 " dst.rgb * src.a);" 962 " dst.rgb * src.a);"
959 "result.rgb += (1.0 - src.a) * dst.rgb + (1.0 - dst.a) * src.rgb;"; 963 "result.rgb += (1.0 - src.a) * dst.rgb + (1.0 - dst.a) * src.rgb;";
960 case BlendModeLuminosity: 964 case BlendModeLuminosity:
961 return "vec4 srcDstAlpha = src * dst.a;" 965 return "vec4 srcDstAlpha = src * dst.a;"
962 "result.rgb = set_luminance(dst.rgb * src.a," 966 "result.rgb = set_luminance(dst.rgb * src.a,"
963 " srcDstAlpha.a," 967 " srcDstAlpha.a,"
964 " srcDstAlpha.rgb);" 968 " srcDstAlpha.rgb);"
965 "result.rgb += (1.0 - src.a) * dst.rgb + (1.0 - dst.a) * src.rgb;"; 969 "result.rgb += (1.0 - src.a) * dst.rgb + (1.0 - dst.a) * src.rgb;";
966 default: 970 case BlendModeNone:
971 case NumBlendModes:
967 NOTREACHED(); 972 NOTREACHED();
968 // simple alpha compositing
969 return "result.rgb = src.rgb * src.a + dst.rgb * dst.a * (1 - src.a)";
970 } 973 }
974 return "result = vec4(1.0, 0.0, 0.0, 1.0);";
971 } 975 }
972 976
973 FragmentTexAlphaBinding::FragmentTexAlphaBinding() 977 FragmentTexAlphaBinding::FragmentTexAlphaBinding()
974 : sampler_location_(-1), alpha_location_(-1) { 978 : sampler_location_(-1), alpha_location_(-1) {
975 } 979 }
976 980
977 void FragmentTexAlphaBinding::Init(GLES2Interface* context, 981 void FragmentTexAlphaBinding::Init(GLES2Interface* context,
978 unsigned program, 982 unsigned program,
979 int* base_uniform_index) { 983 int* base_uniform_index) {
980 static const char* uniforms[] = { 984 static const char* uniforms[] = {
(...skipping 999 matching lines...) Expand 10 before | Expand all | Expand 10 after
1980 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); 1984 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0);
1981 float picker = abs(coord.x - coord.y); // NOLINT 1985 float picker = abs(coord.x - coord.y); // NOLINT
1982 gl_FragColor = mix(color1, color2, picker) * alpha; 1986 gl_FragColor = mix(color1, color2, picker) * alpha;
1983 } 1987 }
1984 // clang-format off 1988 // clang-format off
1985 ); // NOLINT(whitespace/parens) 1989 ); // NOLINT(whitespace/parens)
1986 // clang-format on 1990 // clang-format on
1987 } 1991 }
1988 1992
1989 } // namespace cc 1993 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/shader.h ('k') | cc/output/software_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698