NumSamplerTypes = 4
};
+enum BlendMode {
+ BlendModeNormal,
+ BlendModeOverlay,
+ BlendModeDarken,
+ BlendModeLighten,
+ BlendModeColorDodge,
+ BlendModeColorBurn,
+ BlendModeHardLight,
+ BlendModeSoftLight,
+ BlendModeDifference,
+ BlendModeExclusion,
+ BlendModeMultiply,
+ BlendModeHue,
+ BlendModeSaturation,
+ BlendModeColor,
+ BlendModeLuminosity,
+ NumBlendModes
+};
+
// Note: The highp_threshold_cache must be provided by the caller to make
// the caching multi-thread/context safe in an easy low-overhead manner.
// The caller must make sure to clear highp_threshold_cache to 0, so it can be
DISALLOW_COPY_AND_ASSIGN(VertexShaderVideoTransform);
};
-class FragmentTexAlphaBinding {
+class FragmentTexBlendMode {
+ public:
+ int backdrop_location() const { return backdrop_location_; }
+ int backdrop_rect_location() const { return backdrop_rect_location_; }
+
+ BlendMode blend_mode() const { return blend_mode_; }
+ void set_blend_mode(BlendMode blend_mode) { blend_mode_ = blend_mode; }
+ bool is_default_blend_mode() const { return blend_mode_ == BlendModeNormal; }
+
+ protected:
+ FragmentTexBlendMode();
+
+ std::string SetBlendModeFunctions(std::string shader_string) const;
+
+ int backdrop_location_;
+ int backdrop_rect_location_;
+
+ private:
+ BlendMode blend_mode_;
+
+ std::string GetHelperFunctions() const;
+ std::string GetBlendFunction() const;
+ std::string GetBlendFunctionBodyForRGB() const;
+};
+
+class FragmentTexAlphaBinding : public FragmentTexBlendMode {
public:
FragmentTexAlphaBinding();
DISALLOW_COPY_AND_ASSIGN(FragmentTexAlphaBinding);
};
-class FragmentTexColorMatrixAlphaBinding {
+class FragmentTexColorMatrixAlphaBinding : public FragmentTexBlendMode {
public:
FragmentTexColorMatrixAlphaBinding();
int color_offset_location_;
};
-class FragmentTexOpaqueBinding {
+class FragmentTexOpaqueBinding : public FragmentTexBlendMode {
public:
FragmentTexOpaqueBinding();
DISALLOW_COPY_AND_ASSIGN(FragmentTexOpaqueBinding);
};
-class FragmentTexBackgroundBinding {
+class FragmentTexBackgroundBinding : public FragmentTexBlendMode {
public:
FragmentTexBackgroundBinding();
TexCoordPrecision precision, SamplerType sampler) const;
};
-class FragmentShaderRGBATexAlphaAA {
+class FragmentShaderRGBATexAlphaAA : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaAA();
DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaAA);
};
-class FragmentTexClampAlphaAABinding {
+class FragmentTexClampAlphaAABinding : public FragmentTexBlendMode {
public:
FragmentTexClampAlphaAABinding();
TexCoordPrecision precision, SamplerType sampler) const;
};
-class FragmentShaderRGBATexAlphaMask {
+class FragmentShaderRGBATexAlphaMask : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaMask();
std::string GetShaderString(
DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMask);
};
-class FragmentShaderRGBATexAlphaMaskAA {
+class FragmentShaderRGBATexAlphaMaskAA : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaMaskAA();
std::string GetShaderString(
DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMaskAA);
};
-class FragmentShaderRGBATexAlphaMaskColorMatrixAA {
+class FragmentShaderRGBATexAlphaMaskColorMatrixAA
+ : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaMaskColorMatrixAA();
std::string GetShaderString(
int color_offset_location_;
};
-class FragmentShaderRGBATexAlphaColorMatrixAA {
+class FragmentShaderRGBATexAlphaColorMatrixAA : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaColorMatrixAA();
std::string GetShaderString(
int color_offset_location_;
};
-class FragmentShaderRGBATexAlphaMaskColorMatrix {
+class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaMaskColorMatrix();
std::string GetShaderString(
int color_offset_location_;
};
-class FragmentShaderYUVVideo {
+class FragmentShaderYUVVideo : public FragmentTexBlendMode {
public:
FragmentShaderYUVVideo();
std::string GetShaderString(
DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVVideo);
};
-
-class FragmentShaderYUVAVideo {
+class FragmentShaderYUVAVideo : public FragmentTexBlendMode {
public:
FragmentShaderYUVAVideo();
std::string GetShaderString(
DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVAVideo);
};
-class FragmentShaderColor {
+class FragmentShaderColor : public FragmentTexBlendMode {
public:
FragmentShaderColor();
std::string GetShaderString(
DISALLOW_COPY_AND_ASSIGN(FragmentShaderColor);
};
-class FragmentShaderColorAA {
+class FragmentShaderColorAA : public FragmentTexBlendMode {
public:
FragmentShaderColorAA();
std::string GetShaderString(
DISALLOW_COPY_AND_ASSIGN(FragmentShaderColorAA);
};
-class FragmentShaderCheckerboard {
+class FragmentShaderCheckerboard : public FragmentTexBlendMode {
public:
FragmentShaderCheckerboard();
std::string GetShaderString(