| Index: cc/output/shader.cc
|
| diff --git a/cc/output/shader.cc b/cc/output/shader.cc
|
| index 6e1f6c5a915f341354100f7ea92021ef81bfde48..ef88ff586d190106e1eced76492d843827119bcc 100644
|
| --- a/cc/output/shader.cc
|
| +++ b/cc/output/shader.cc
|
| @@ -668,30 +668,65 @@ std::string FragmentShaderRGBATexColorMatrixAlpha::GetShaderString(
|
| ); // NOLINT(whitespace/parens)
|
| }
|
|
|
| -std::string FragmentShaderRGBATexVaryingAlpha::GetShaderString(
|
| +FragmentTexBackgroundBinding::FragmentTexBackgroundBinding()
|
| + : background_color_location_(-1),
|
| + sampler_location_(-1) {
|
| +}
|
| +
|
| +void FragmentTexBackgroundBinding::Init(WebGraphicsContext3D* context,
|
| + unsigned program,
|
| + bool using_bind_uniform,
|
| + int* base_uniform_index) {
|
| + static const char* shader_uniforms[] = {
|
| + "s_texture",
|
| + "background_color",
|
| + };
|
| + int locations[2];
|
| +
|
| + GetProgramUniformLocations(context,
|
| + program,
|
| + shader_uniforms,
|
| + arraysize(shader_uniforms),
|
| + arraysize(locations),
|
| + locations,
|
| + using_bind_uniform,
|
| + base_uniform_index);
|
| +
|
| + sampler_location_ = locations[0];
|
| + DCHECK_NE(sampler_location_, -1);
|
| +
|
| + background_color_location_ = locations[1];
|
| + DCHECK_NE(background_color_location_, -1);
|
| +}
|
| +
|
| +std::string FragmentShaderTexture::GetShaderString(
|
| TexCoordPrecision precision) const {
|
| return FRAGMENT_SHADER(
|
| precision mediump float;
|
| varying TexCoordPrecision vec2 v_texCoord;
|
| varying float v_alpha;
|
| uniform sampler2D s_texture;
|
| + uniform vec4 background_color;
|
| void main() {
|
| vec4 texColor = texture2D(s_texture, v_texCoord);
|
| + texColor += background_color * (1.0 - texColor.a);
|
| gl_FragColor = texColor * v_alpha;
|
| }
|
| ); // NOLINT(whitespace/parens)
|
| }
|
|
|
| -std::string FragmentShaderRGBATexPremultiplyAlpha::GetShaderString(
|
| +std::string FragmentShaderNonPremulTexture::GetShaderString(
|
| TexCoordPrecision precision) const {
|
| return FRAGMENT_SHADER(
|
| precision mediump float;
|
| varying TexCoordPrecision vec2 v_texCoord;
|
| varying float v_alpha;
|
| uniform sampler2D s_texture;
|
| + uniform vec4 background_color;
|
| void main() {
|
| vec4 texColor = texture2D(s_texture, v_texCoord);
|
| texColor.rgb *= texColor.a;
|
| + texColor += background_color * (1.0 - texColor.a);
|
| gl_FragColor = texColor * v_alpha;
|
| }
|
| ); // NOLINT(whitespace/parens)
|
|
|