Index: cc/output/shader.cc |
diff --git a/cc/output/shader.cc b/cc/output/shader.cc |
index 1a7332d9f2ee42c34423b46bf212464bcaed2c1b..ee0e6a7ae30087f86fa1a6d533f2470ac97d2d7d 100644 |
--- a/cc/output/shader.cc |
+++ b/cc/output/shader.cc |
@@ -770,6 +770,9 @@ FragmentShaderBase::FragmentShaderBase() {} |
std::string FragmentShaderBase::GetShaderString(TexCoordPrecision precision, |
SamplerType sampler) const { |
+ // The AA shader values will use TexCoordPrecision. |
+ if (has_aa_ && precision == TEX_COORD_PRECISION_NA) |
+ precision = TEX_COORD_PRECISION_MEDIUM; |
return SetFragmentTexCoordPrecision( |
precision, SetFragmentSamplerType( |
sampler, SetBlendModeFunctions(GetShaderSource()))); |
@@ -794,16 +797,20 @@ void FragmentShaderBase::Init(GLES2Interface* context, |
uniforms.push_back("colorMatrix"); |
uniforms.push_back("colorOffset"); |
} |
- if (has_sampler_) |
- uniforms.push_back("s_texture"); |
if (has_uniform_alpha_) |
uniforms.push_back("alpha"); |
if (has_background_color_) |
uniforms.push_back("background_color"); |
- if (has_fragment_tex_transform_) |
- uniforms.push_back("fragmentTexTransform"); |
- if (has_uniform_color_) |
- uniforms.push_back("color"); |
+ switch (input_color_type_) { |
+ case INPUT_COLOR_SOURCE_RGBA_TEXTURE: |
+ uniforms.push_back("s_texture"); |
+ if (has_rgba_fragment_tex_transform_) |
+ uniforms.push_back("fragmentTexTransform"); |
+ break; |
+ case INPUT_COLOR_SOURCE_UNIFORM: |
+ uniforms.push_back("color"); |
+ break; |
+ } |
locations.resize(uniforms.size()); |
@@ -825,16 +832,20 @@ void FragmentShaderBase::Init(GLES2Interface* context, |
color_matrix_location_ = locations[index++]; |
color_offset_location_ = locations[index++]; |
} |
- if (has_sampler_) |
- sampler_location_ = locations[index++]; |
if (has_uniform_alpha_) |
alpha_location_ = locations[index++]; |
if (has_background_color_) |
background_color_location_ = locations[index++]; |
- if (has_fragment_tex_transform_) |
- fragment_tex_transform_location_ = locations[index++]; |
- if (has_uniform_color_) |
- color_location_ = locations[index++]; |
+ switch (input_color_type_) { |
+ case INPUT_COLOR_SOURCE_RGBA_TEXTURE: |
+ sampler_location_ = locations[index++]; |
+ if (has_rgba_fragment_tex_transform_) |
+ fragment_tex_transform_location_ = locations[index++]; |
+ break; |
+ case INPUT_COLOR_SOURCE_UNIFORM: |
+ color_location_ = locations[index++]; |
+ break; |
+ } |
DCHECK_EQ(index, locations.size()); |
} |
@@ -854,10 +865,15 @@ void FragmentShaderBase::FillLocations(ShaderLocations* locations) const { |
locations->color_matrix = color_matrix_location_; |
locations->color_offset = color_offset_location_; |
} |
- if (has_sampler_) |
- locations->sampler = sampler_location_; |
if (has_uniform_alpha_) |
locations->alpha = alpha_location_; |
+ switch (input_color_type_) { |
+ case INPUT_COLOR_SOURCE_RGBA_TEXTURE: |
+ locations->sampler = sampler_location_; |
+ break; |
+ case INPUT_COLOR_SOURCE_UNIFORM: |
+ break; |
+ } |
} |
std::string FragmentShaderBase::SetBlendModeFunctions( |
@@ -1155,334 +1171,152 @@ std::string FragmentShaderBase::GetBlendFunctionBodyForRGB() const { |
return "result = vec4(1.0, 0.0, 0.0, 1.0);"; |
} |
-std::string FragmentShaderRGBATexAlpha::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- uniform SamplerType s_texture; |
- uniform float alpha; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- gl_FragColor = ApplyBlendMode(texColor * alpha, 0.0); |
- } |
- }); |
-} |
- |
-std::string FragmentShaderRGBATexColorMatrixAlpha::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- uniform SamplerType s_texture; |
- uniform float alpha; |
- uniform mat4 colorMatrix; |
- uniform vec4 colorOffset; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- float nonZeroAlpha = max(texColor.a, 0.00001); |
- texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
- texColor = colorMatrix * texColor + colorOffset; |
- texColor.rgb *= texColor.a; |
- texColor = clamp(texColor, 0.0, 1.0); |
- gl_FragColor = ApplyBlendMode(texColor * alpha, 0.0); |
- } |
- }); |
-} |
- |
-std::string FragmentShaderRGBATexVaryingAlpha::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying float v_alpha; |
- uniform SamplerType s_texture; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- gl_FragColor = texColor * v_alpha; |
- } |
- }); |
-} |
- |
-std::string FragmentShaderRGBATexPremultiplyAlpha::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying float v_alpha; |
- uniform SamplerType s_texture; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- texColor.rgb *= texColor.a; |
- gl_FragColor = texColor * v_alpha; |
- } |
- }); |
-} |
- |
-std::string FragmentShaderTexBackgroundVaryingAlpha::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying float v_alpha; |
- uniform vec4 background_color; |
- uniform SamplerType s_texture; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- texColor += background_color * (1.0 - texColor.a); |
- gl_FragColor = texColor * v_alpha; |
- } |
- }); |
-} |
- |
-std::string FragmentShaderTexBackgroundPremultiplyAlpha::GetShaderSource() |
- const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying float v_alpha; |
- uniform vec4 background_color; |
- uniform SamplerType s_texture; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- texColor.rgb *= texColor.a; |
- texColor += background_color * (1.0 - texColor.a); |
- gl_FragColor = texColor * v_alpha; |
- } |
- }); |
-} |
- |
-std::string FragmentShaderRGBATexOpaque::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- uniform SamplerType s_texture; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- gl_FragColor = vec4(texColor.rgb, 1.0); |
- } |
- }); |
-} |
- |
-std::string FragmentShaderRGBATex::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- uniform SamplerType s_texture; |
- void main() { gl_FragColor = TextureLookup(s_texture, v_texCoord); } |
- }); |
-} |
+std::string FragmentShaderBase::GetShaderSource() const { |
+ std::string header = "precision mediump float;\n"; |
+ std::string source = "void main() {\n"; |
+ |
+#define HDR(x) \ |
+ do { \ |
+ header += x + std::string("\n"); \ |
+ } while (0) |
+#define SRC(x) \ |
+ do { \ |
+ source += std::string(" ") + x + std::string("\n"); \ |
+ } while (0) |
+ |
+ // Read the input into vec4 texColor. |
+ switch (input_color_type_) { |
+ case INPUT_COLOR_SOURCE_RGBA_TEXTURE: |
+ if (ignore_sampler_type_) |
+ HDR("uniform sampler2D s_texture;"); |
+ else |
+ HDR("uniform SamplerType s_texture;"); |
+ HDR("varying TexCoordPrecision vec2 v_texCoord;"); |
+ if (has_rgba_fragment_tex_transform_) { |
+ HDR("uniform TexCoordPrecision vec4 fragmentTexTransform;"); |
+ SRC("// Transformed texture lookup"); |
+ SRC("TexCoordPrecision vec2 texCoord ="); |
+ SRC(" clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw +"); |
+ SRC(" fragmentTexTransform.xy;"); |
+ SRC("vec4 texColor = TextureLookup(s_texture, texCoord);"); |
+ DCHECK(!ignore_sampler_type_); |
+ } else { |
+ SRC("// Texture lookup"); |
+ if (ignore_sampler_type_) |
+ SRC("vec4 texColor = texture2D(s_texture, v_texCoord);"); |
+ else |
+ SRC("vec4 texColor = TextureLookup(s_texture, v_texCoord);"); |
+ } |
+ break; |
+ case INPUT_COLOR_SOURCE_UNIFORM: |
+ DCHECK(!ignore_sampler_type_); |
+ DCHECK(!has_rgba_fragment_tex_transform_); |
+ HDR("uniform vec4 color;"); |
+ SRC("// Uniform color"); |
+ SRC("vec4 texColor = color;"); |
+ break; |
+ } |
+ // Apply the color matrix to texColor. |
+ if (has_color_matrix_) { |
+ HDR("uniform mat4 colorMatrix;"); |
+ HDR("uniform vec4 colorOffset;"); |
+ SRC("// Apply color matrix"); |
+ SRC("float nonZeroAlpha = max(texColor.a, 0.00001);"); |
+ SRC("texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha);"); |
+ SRC("texColor = colorMatrix * texColor + colorOffset;"); |
+ SRC("texColor.rgb *= texColor.a;"); |
+ SRC("texColor = clamp(texColor, 0.0, 1.0);"); |
+ } |
-std::string FragmentShaderRGBATexSwizzleAlpha::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- uniform SamplerType s_texture; |
- uniform float alpha; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- gl_FragColor = |
- vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha; |
- } |
- }); |
-} |
+ // Read the mask texture. |
+ if (has_mask_sampler_) { |
+ HDR("uniform SamplerType s_mask;"); |
+ HDR("uniform vec2 maskTexCoordScale;"); |
+ HDR("uniform vec2 maskTexCoordOffset;"); |
+ SRC("// Read the mask"); |
+ SRC("TexCoordPrecision vec2 maskTexCoord ="); |
+ SRC(" vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x,"); |
+ SRC(" maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y);"); |
+ SRC("vec4 maskColor = TextureLookup(s_mask, maskTexCoord);"); |
+ } |
-std::string FragmentShaderRGBATexSwizzleOpaque::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- uniform SamplerType s_texture; |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0); |
- } |
- }); |
-} |
+ // Compute AA. |
+ if (has_aa_) { |
+ HDR("varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances."); |
+ SRC("// Compute AA"); |
+ SRC("vec4 d4 = min(edge_dist[0], edge_dist[1]);"); |
+ SRC("vec2 d2 = min(d4.xz, d4.yw);"); |
+ SRC("float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0);"); |
+ } |
-std::string FragmentShaderRGBATexAlphaAA::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- uniform SamplerType s_texture; |
- uniform float alpha; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- vec4 d4 = min(edge_dist[0], edge_dist[1]); |
- vec2 d2 = min(d4.xz, d4.yw); |
- float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
- gl_FragColor = ApplyBlendMode(texColor * alpha * aa, 0.0); |
- } |
- }); |
-} |
+ // Premultiply by alpha. |
+ if (has_premultiply_alpha_) { |
+ SRC("// Premultiply alpha"); |
+ SRC("texColor.rgb *= texColor.a;"); |
+ } |
-std::string FragmentShaderRGBATexClampAlphaAA::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- uniform SamplerType s_texture; |
- uniform float alpha; |
- uniform TexCoordPrecision vec4 fragmentTexTransform; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. |
- void main() { |
- TexCoordPrecision vec2 texCoord = |
- clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + |
- fragmentTexTransform.xy; |
- vec4 texColor = TextureLookup(s_texture, texCoord); |
- vec4 d4 = min(edge_dist[0], edge_dist[1]); |
- vec2 d2 = min(d4.xz, d4.yw); |
- float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
- gl_FragColor = texColor * alpha * aa; |
- } |
- }); |
-} |
+ // Apply background texture. |
+ if (has_background_color_) { |
+ HDR("uniform vec4 background_color;"); |
+ SRC("// Apply uniform background color blending"); |
+ SRC("texColor += background_color * (1.0 - texColor.a);"); |
+ } |
-std::string FragmentShaderRGBATexClampSwizzleAlphaAA::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- uniform SamplerType s_texture; |
- uniform float alpha; |
- uniform TexCoordPrecision vec4 fragmentTexTransform; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. |
- void main() { |
- TexCoordPrecision vec2 texCoord = |
- clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + |
- fragmentTexTransform.xy; |
- vec4 texColor = TextureLookup(s_texture, texCoord); |
- vec4 d4 = min(edge_dist[0], edge_dist[1]); |
- vec2 d2 = min(d4.xz, d4.yw); |
- float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
- gl_FragColor = |
- vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha * aa; |
- } |
- }); |
-} |
+ // Apply swizzle. |
+ if (has_swizzle_) { |
+ SRC("// Apply swizzle"); |
+ SRC("texColor = texColor.bgra;\n"); |
+ } |
-std::string FragmentShaderRGBATexAlphaMask::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- uniform sampler2D s_texture; |
- uniform SamplerType s_mask; |
- uniform TexCoordPrecision vec2 maskTexCoordScale; |
- uniform TexCoordPrecision vec2 maskTexCoordOffset; |
- uniform float alpha; |
- void main() { |
- vec4 texColor = texture2D(s_texture, v_texCoord); |
- TexCoordPrecision vec2 maskTexCoord = |
- vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
- maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
- vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
- gl_FragColor = ApplyBlendMode( |
- texColor * alpha * maskColor.w, maskColor.w); |
- } |
- }); |
-} |
+ // Include header text for alpha. |
+ if (has_uniform_alpha_) { |
+ HDR("uniform float alpha;"); |
+ } |
+ if (has_varying_alpha_) { |
+ HDR("varying float v_alpha;"); |
+ } |
-std::string FragmentShaderRGBATexAlphaMaskAA::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- uniform sampler2D s_texture; |
- uniform SamplerType s_mask; |
- uniform TexCoordPrecision vec2 maskTexCoordScale; |
- uniform TexCoordPrecision vec2 maskTexCoordOffset; |
- uniform float alpha; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. |
- void main() { |
- vec4 texColor = texture2D(s_texture, v_texCoord); |
- TexCoordPrecision vec2 maskTexCoord = |
- vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
- maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
- vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
- vec4 d4 = min(edge_dist[0], edge_dist[1]); |
- vec2 d2 = min(d4.xz, d4.yw); |
- float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
- gl_FragColor = ApplyBlendMode( |
- texColor * alpha * maskColor.w * aa, maskColor.w); |
- } |
- }); |
-} |
+ // Apply uniform alpha, aa, varying alpha, and the mask. |
+ if (has_varying_alpha_ || has_aa_ || has_uniform_alpha_ || |
+ has_mask_sampler_) { |
+ SRC("// Apply alpha from uniform, varying, aa, and mask."); |
+ std::string line = " texColor = texColor"; |
+ if (has_varying_alpha_) |
+ line += " * v_alpha"; |
+ if (has_uniform_alpha_) |
+ line += " * alpha"; |
+ if (has_aa_) |
+ line += " * aa"; |
+ if (has_mask_sampler_) |
+ line += " * maskColor.a"; |
+ line += ";\n"; |
+ source += line; |
+ } |
-std::string FragmentShaderRGBATexAlphaMaskColorMatrixAA::GetShaderSource() |
- const { |
- return SHADER0([]() { |
- precision mediump float; |
- uniform sampler2D s_texture; |
- uniform SamplerType s_mask; |
- uniform vec2 maskTexCoordScale; |
- uniform vec2 maskTexCoordOffset; |
- uniform mat4 colorMatrix; |
- uniform vec4 colorOffset; |
- uniform float alpha; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. |
- void main() { |
- vec4 texColor = texture2D(s_texture, v_texCoord); |
- float nonZeroAlpha = max(texColor.a, 0.00001); |
- texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
- texColor = colorMatrix * texColor + colorOffset; |
- texColor.rgb *= texColor.a; |
- texColor = clamp(texColor, 0.0, 1.0); |
- TexCoordPrecision vec2 maskTexCoord = |
- vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
- maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
- vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
- vec4 d4 = min(edge_dist[0], edge_dist[1]); |
- vec2 d2 = min(d4.xz, d4.yw); |
- float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
- gl_FragColor = ApplyBlendMode( |
- texColor * alpha * maskColor.w * aa, maskColor.w); |
- } |
- }); |
-} |
+ // Write the fragment color. |
+ SRC("// Write the fragment color"); |
+ switch (frag_color_mode_) { |
+ case FRAG_COLOR_MODE_DEFAULT: |
+ DCHECK_EQ(blend_mode_, BLEND_MODE_NONE); |
+ SRC("gl_FragColor = texColor;"); |
+ break; |
+ case FRAG_COLOR_MODE_OPAQUE: |
+ DCHECK_EQ(blend_mode_, BLEND_MODE_NONE); |
+ SRC("gl_FragColor = vec4(texColor.rgb, 1.0);"); |
+ break; |
+ case FRAG_COLOR_MODE_APPLY_BLEND_MODE: |
+ if (has_mask_sampler_) |
+ SRC("gl_FragColor = ApplyBlendMode(texColor, maskColor.w);"); |
+ else |
+ SRC("gl_FragColor = ApplyBlendMode(texColor, 0.0);"); |
+ break; |
+ } |
+ source += "}\n"; |
-std::string FragmentShaderRGBATexAlphaColorMatrixAA::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- uniform SamplerType s_texture; |
- uniform float alpha; |
- uniform mat4 colorMatrix; |
- uniform vec4 colorOffset; |
- varying TexCoordPrecision vec2 v_texCoord; |
- varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. |
- void main() { |
- vec4 texColor = TextureLookup(s_texture, v_texCoord); |
- float nonZeroAlpha = max(texColor.a, 0.00001); |
- texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
- texColor = colorMatrix * texColor + colorOffset; |
- texColor.rgb *= texColor.a; |
- texColor = clamp(texColor, 0.0, 1.0); |
- vec4 d4 = min(edge_dist[0], edge_dist[1]); |
- vec2 d2 = min(d4.xz, d4.yw); |
- float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
- gl_FragColor = ApplyBlendMode(texColor * alpha * aa, 0.0); |
- } |
- }); |
-} |
+#undef HDR |
+#undef SRC |
-std::string FragmentShaderRGBATexAlphaMaskColorMatrix::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- varying TexCoordPrecision vec2 v_texCoord; |
- uniform sampler2D s_texture; |
- uniform SamplerType s_mask; |
- uniform vec2 maskTexCoordScale; |
- uniform vec2 maskTexCoordOffset; |
- uniform mat4 colorMatrix; |
- uniform vec4 colorOffset; |
- uniform float alpha; |
- void main() { |
- vec4 texColor = texture2D(s_texture, v_texCoord); |
- float nonZeroAlpha = max(texColor.a, 0.00001); |
- texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
- texColor = colorMatrix * texColor + colorOffset; |
- texColor.rgb *= texColor.a; |
- texColor = clamp(texColor, 0.0, 1.0); |
- TexCoordPrecision vec2 maskTexCoord = |
- vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
- maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
- vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
- gl_FragColor = ApplyBlendMode( |
- texColor * alpha * maskColor.w, maskColor.w); |
- } |
- }); |
+ return header + source; |
} |
FragmentShaderYUVVideo::FragmentShaderYUVVideo() |
@@ -1647,26 +1481,4 @@ std::string FragmentShaderYUVVideo::GetShaderSource() const { |
return head + functions; |
} |
-std::string FragmentShaderColor::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- uniform vec4 color; |
- void main() { gl_FragColor = color; } |
- }); |
-} |
- |
-std::string FragmentShaderColorAA::GetShaderSource() const { |
- return SHADER0([]() { |
- precision mediump float; |
- uniform vec4 color; |
- varying vec4 edge_dist[2]; // 8 edge distances. |
- void main() { |
- vec4 d4 = min(edge_dist[0], edge_dist[1]); |
- vec2 d2 = min(d4.xz, d4.yw); |
- float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
- gl_FragColor = color * aa; |
- } |
- }); |
-} |
- |
} // namespace cc |