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

Unified Diff: cc/output/shader.h

Issue 658483003: Implement mix-blend-mode in GL renderer using shaders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing antialiasing issues Created 6 years, 2 months 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 side-by-side diff with in-line comments
Download patch
Index: cc/output/shader.h
diff --git a/cc/output/shader.h b/cc/output/shader.h
index 3039c80ef2c790f3506babb6b4f714fd8571280b..e759531e8435faf33ffaa11c84952624ddb5c622 100644
--- a/cc/output/shader.h
+++ b/cc/output/shader.h
@@ -9,6 +9,7 @@
#include "base/basictypes.h"
#include "cc/base/cc_export.h"
+#include "third_party/skia/include/core/SkXfermode.h"
namespace gfx {
class Point;
@@ -279,7 +280,35 @@ class VertexShaderVideoTransform {
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_; }
+
+ SkXfermode::Mode blend_mode() const { return blend_mode_; }
+ bool is_default_blend_mode() const {
+ return blend_mode_ == SkXfermode::kSrcOver_Mode;
+ }
+ inline static bool is_blend_mode_supported(SkXfermode::Mode blend_mode);
+
+ void SetBlendMode(SkXfermode::Mode blend_mode);
+
+ protected:
+ FragmentTexBlendMode();
+
+ std::string SetBlendModeFunctions(std::string shader_string) const;
+
+ int backdrop_location_;
+ int backdrop_rect_location_;
+
+ private:
+ SkXfermode::Mode blend_mode_;
+
+ std::string GetHelperFunctions() const;
+ std::string GetMainBlendingCode() const;
+};
+
+class FragmentTexAlphaBinding : public FragmentTexBlendMode {
public:
FragmentTexAlphaBinding();
@@ -297,7 +326,7 @@ class FragmentTexAlphaBinding {
DISALLOW_COPY_AND_ASSIGN(FragmentTexAlphaBinding);
};
-class FragmentTexColorMatrixAlphaBinding {
+class FragmentTexColorMatrixAlphaBinding : public FragmentTexBlendMode {
public:
FragmentTexColorMatrixAlphaBinding();
@@ -317,7 +346,7 @@ class FragmentTexColorMatrixAlphaBinding {
int color_offset_location_;
};
-class FragmentTexOpaqueBinding {
+class FragmentTexOpaqueBinding : public FragmentTexBlendMode {
public:
FragmentTexOpaqueBinding();
@@ -335,7 +364,7 @@ class FragmentTexOpaqueBinding {
DISALLOW_COPY_AND_ASSIGN(FragmentTexOpaqueBinding);
};
-class FragmentTexBackgroundBinding {
+class FragmentTexBackgroundBinding : public FragmentTexBlendMode {
public:
FragmentTexBackgroundBinding();
@@ -417,7 +446,7 @@ class FragmentShaderRGBATexSwizzleOpaque : public FragmentTexOpaqueBinding {
TexCoordPrecision precision, SamplerType sampler) const;
};
-class FragmentShaderRGBATexAlphaAA {
+class FragmentShaderRGBATexAlphaAA : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaAA();
@@ -437,7 +466,7 @@ class FragmentShaderRGBATexAlphaAA {
DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaAA);
};
-class FragmentTexClampAlphaAABinding {
+class FragmentTexClampAlphaAABinding : public FragmentTexBlendMode {
public:
FragmentTexClampAlphaAABinding();
@@ -473,7 +502,7 @@ class FragmentShaderRGBATexClampSwizzleAlphaAA
TexCoordPrecision precision, SamplerType sampler) const;
};
-class FragmentShaderRGBATexAlphaMask {
+class FragmentShaderRGBATexAlphaMask : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaMask();
std::string GetShaderString(
@@ -502,7 +531,7 @@ class FragmentShaderRGBATexAlphaMask {
DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMask);
};
-class FragmentShaderRGBATexAlphaMaskAA {
+class FragmentShaderRGBATexAlphaMaskAA : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaMaskAA();
std::string GetShaderString(
@@ -531,7 +560,8 @@ class FragmentShaderRGBATexAlphaMaskAA {
DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMaskAA);
};
-class FragmentShaderRGBATexAlphaMaskColorMatrixAA {
+class FragmentShaderRGBATexAlphaMaskColorMatrixAA
+ : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaMaskColorMatrixAA();
std::string GetShaderString(
@@ -562,7 +592,7 @@ class FragmentShaderRGBATexAlphaMaskColorMatrixAA {
int color_offset_location_;
};
-class FragmentShaderRGBATexAlphaColorMatrixAA {
+class FragmentShaderRGBATexAlphaColorMatrixAA : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaColorMatrixAA();
std::string GetShaderString(
@@ -583,7 +613,7 @@ class FragmentShaderRGBATexAlphaColorMatrixAA {
int color_offset_location_;
};
-class FragmentShaderRGBATexAlphaMaskColorMatrix {
+class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentTexBlendMode {
public:
FragmentShaderRGBATexAlphaMaskColorMatrix();
std::string GetShaderString(
@@ -614,7 +644,7 @@ class FragmentShaderRGBATexAlphaMaskColorMatrix {
int color_offset_location_;
};
-class FragmentShaderYUVVideo {
+class FragmentShaderYUVVideo : public FragmentTexBlendMode {
public:
FragmentShaderYUVVideo();
std::string GetShaderString(
@@ -641,8 +671,7 @@ class FragmentShaderYUVVideo {
DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVVideo);
};
-
-class FragmentShaderYUVAVideo {
+class FragmentShaderYUVAVideo : public FragmentTexBlendMode {
public:
FragmentShaderYUVAVideo();
std::string GetShaderString(
@@ -672,7 +701,7 @@ class FragmentShaderYUVAVideo {
DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVAVideo);
};
-class FragmentShaderColor {
+class FragmentShaderColor : public FragmentTexBlendMode {
public:
FragmentShaderColor();
std::string GetShaderString(
@@ -689,7 +718,7 @@ class FragmentShaderColor {
DISALLOW_COPY_AND_ASSIGN(FragmentShaderColor);
};
-class FragmentShaderColorAA {
+class FragmentShaderColorAA : public FragmentTexBlendMode {
public:
FragmentShaderColorAA();
std::string GetShaderString(
@@ -706,7 +735,7 @@ class FragmentShaderColorAA {
DISALLOW_COPY_AND_ASSIGN(FragmentShaderColorAA);
};
-class FragmentShaderCheckerboard {
+class FragmentShaderCheckerboard : public FragmentTexBlendMode {
public:
FragmentShaderCheckerboard();
std::string GetShaderString(

Powered by Google App Engine
This is Rietveld 408576698