| Index: cc/output/shader.h | 
| diff --git a/cc/output/shader.h b/cc/output/shader.h | 
| index ea61c9192ccfe1c06a3ce268c511d3491f5dd685..21b4a70de5aaac404dc18061f6483967841dddf7 100644 | 
| --- a/cc/output/shader.h | 
| +++ b/cc/output/shader.h | 
| @@ -424,132 +424,103 @@ | 
| int color_offset_location_; | 
| }; | 
|  | 
| -class FragmentTexQuadBase : public FragmentTexBlendMode { | 
| - public: | 
| -  FragmentTexQuadBase() = default; | 
| -  virtual ~FragmentTexQuadBase() = default; | 
| - | 
| -  int sampler_location() const { return sampler_location_; } | 
| -  virtual int background_color_location() const; | 
| -  virtual int tex_clamp_rect_location() const; | 
| - | 
| - protected: | 
| -  int sampler_location_ = -1; | 
| - | 
| - private: | 
| -  DISALLOW_COPY_AND_ASSIGN(FragmentTexQuadBase); | 
| -}; | 
| - | 
| -class FragmentTexClampBinding : public FragmentTexQuadBase { | 
| - public: | 
| -  FragmentTexClampBinding() = default; | 
| - | 
| -  void Init(gpu::gles2::GLES2Interface* context, | 
| -            unsigned program, | 
| -            int* base_uniform_index); | 
| -  int tex_clamp_rect_location() const final; | 
| - | 
| - private: | 
| -  int tex_clamp_rect_location_ = -1; | 
| - | 
| -  DISALLOW_COPY_AND_ASSIGN(FragmentTexClampBinding); | 
| -}; | 
| - | 
| -class FragmentTexBackgroundBinding : public FragmentTexQuadBase { | 
| +class FragmentTexOpaqueBinding : public FragmentTexBlendMode { | 
| + public: | 
| +  FragmentTexOpaqueBinding(); | 
| + | 
| +  void Init(gpu::gles2::GLES2Interface* context, | 
| +            unsigned program, | 
| +            int* base_uniform_index); | 
| +  int alpha_location() const { return -1; } | 
| +  int fragment_tex_transform_location() const { return -1; } | 
| +  int background_color_location() const { return -1; } | 
| +  int sampler_location() const { return sampler_location_; } | 
| + | 
| + private: | 
| +  int sampler_location_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(FragmentTexOpaqueBinding); | 
| +}; | 
| + | 
| +class FragmentTexBackgroundBinding : public FragmentTexBlendMode { | 
| public: | 
| FragmentTexBackgroundBinding(); | 
|  | 
| void Init(gpu::gles2::GLES2Interface* context, | 
| unsigned program, | 
| int* base_uniform_index); | 
| -  int background_color_location() const final; | 
| +  int background_color_location() const { return background_color_location_; } | 
| +  int sampler_location() const { return sampler_location_; } | 
|  | 
| private: | 
| int background_color_location_; | 
| +  int sampler_location_; | 
|  | 
| DISALLOW_COPY_AND_ASSIGN(FragmentTexBackgroundBinding); | 
| }; | 
|  | 
| -class FragmentShaderRGBATexClampVaryingAlpha : public FragmentTexClampBinding { | 
| - public: | 
| -  std::string GetShaderString( | 
| -      TexCoordPrecision precision, SamplerType sampler) const; | 
| -  static std::string GetShaderHead(); | 
| -  static std::string GetShaderBody(); | 
| -}; | 
| - | 
| -class FragmentShaderRGBATexClampPremultiplyAlpha | 
| -    : public FragmentTexClampBinding { | 
| +class FragmentShaderRGBATexVaryingAlpha : public FragmentTexOpaqueBinding { | 
| + public: | 
| +  std::string GetShaderString( | 
| +      TexCoordPrecision precision, SamplerType sampler) const; | 
| +  static std::string GetShaderHead(); | 
| +  static std::string GetShaderBody(); | 
| +}; | 
| + | 
| +class FragmentShaderRGBATexPremultiplyAlpha : public FragmentTexOpaqueBinding { | 
| + public: | 
| +  std::string GetShaderString( | 
| +      TexCoordPrecision precision, SamplerType sampler) const; | 
| +  static std::string GetShaderHead(); | 
| +  static std::string GetShaderBody(); | 
| +}; | 
| + | 
| +class FragmentShaderTexBackgroundVaryingAlpha | 
| +    : public FragmentTexBackgroundBinding { | 
| + public: | 
| +  std::string GetShaderString( | 
| +      TexCoordPrecision precision, SamplerType sampler) const; | 
| +  static std::string GetShaderHead(); | 
| +  static std::string GetShaderBody(); | 
| +}; | 
| + | 
| +class FragmentShaderTexBackgroundPremultiplyAlpha | 
| +    : public FragmentTexBackgroundBinding { | 
| + public: | 
| +  std::string GetShaderString( | 
| +      TexCoordPrecision precision, SamplerType sampler) const; | 
| +  static std::string GetShaderHead(); | 
| +  static std::string GetShaderBody(); | 
| +}; | 
| + | 
| +class FragmentShaderRGBATexAlpha : public FragmentTexAlphaBinding { | 
| + public: | 
| +  std::string GetShaderString( | 
| +      TexCoordPrecision precision, SamplerType sampler) const; | 
| +  static std::string GetShaderHead(); | 
| +  static std::string GetShaderBody(); | 
| +  void FillLocations(ShaderLocations* locations) const; | 
| +}; | 
| + | 
| +class FragmentShaderRGBATexColorMatrixAlpha | 
| +    : public FragmentTexColorMatrixAlphaBinding { | 
| public: | 
| std::string GetShaderString(TexCoordPrecision precision, | 
| SamplerType sampler) const; | 
| static std::string GetShaderHead(); | 
| static std::string GetShaderBody(); | 
| -}; | 
| - | 
| -class FragmentShaderRGBATexClamp : public FragmentTexClampBinding { | 
| - public: | 
| -  std::string GetShaderString( | 
| -      TexCoordPrecision precision, SamplerType sampler) const; | 
| -  static std::string GetShaderHead(); | 
| -  static std::string GetShaderBody(); | 
| -}; | 
| - | 
| -class FragmentShaderTexBackgroundVaryingAlpha | 
| -    : public FragmentTexBackgroundBinding { | 
| - public: | 
| -  std::string GetShaderString( | 
| -      TexCoordPrecision precision, SamplerType sampler) const; | 
| -  static std::string GetShaderHead(); | 
| -  static std::string GetShaderBody(); | 
| -}; | 
| - | 
| -class FragmentShaderTexBackgroundPremultiplyAlpha | 
| -    : public FragmentTexBackgroundBinding { | 
| - public: | 
| -  std::string GetShaderString( | 
| -      TexCoordPrecision precision, SamplerType sampler) const; | 
| -  static std::string GetShaderHead(); | 
| -  static std::string GetShaderBody(); | 
| -}; | 
| - | 
| -class FragmentShaderRGBATexAlpha : public FragmentTexAlphaBinding { | 
| - public: | 
| -  std::string GetShaderString( | 
| -      TexCoordPrecision precision, SamplerType sampler) const; | 
| -  static std::string GetShaderHead(); | 
| -  static std::string GetShaderBody(); | 
| -  void FillLocations(ShaderLocations* locations) const; | 
| -}; | 
| - | 
| -class FragmentShaderRGBATexColorMatrixAlpha | 
| -    : public FragmentTexColorMatrixAlphaBinding { | 
| - public: | 
| -  std::string GetShaderString(TexCoordPrecision precision, | 
| -                              SamplerType sampler) const; | 
| -  static std::string GetShaderHead(); | 
| -  static std::string GetShaderBody(); | 
| -  void FillLocations(ShaderLocations* locations) const; | 
| -}; | 
| - | 
| -class FragmentTexOpaqueBinding : public FragmentTexBlendMode { | 
| - public: | 
| -  FragmentTexOpaqueBinding(); | 
| - | 
| -  void Init(gpu::gles2::GLES2Interface* context, | 
| -            unsigned program, | 
| -            int* base_uniform_index); | 
| -  int alpha_location() const { return -1; } | 
| -  int fragment_tex_transform_location() const { return -1; } | 
| -  int sampler_location() const { return sampler_location_; } | 
| - | 
| - private: | 
| -  int sampler_location_; | 
| - | 
| -  DISALLOW_COPY_AND_ASSIGN(FragmentTexOpaqueBinding); | 
| +  void FillLocations(ShaderLocations* locations) const; | 
| }; | 
|  | 
| class FragmentShaderRGBATexOpaque : public FragmentTexOpaqueBinding { | 
| + public: | 
| +  std::string GetShaderString( | 
| +      TexCoordPrecision precision, SamplerType sampler) const; | 
| +  static std::string GetShaderHead(); | 
| +  static std::string GetShaderBody(); | 
| +}; | 
| + | 
| +class FragmentShaderRGBATex : public FragmentTexOpaqueBinding { | 
| public: | 
| std::string GetShaderString( | 
| TexCoordPrecision precision, SamplerType sampler) const; | 
|  |