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

Unified Diff: cc/output/gl_renderer.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/gl_renderer.h
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h
index 8e53d7023ee1a67d5df589f3dbcec0643178e5f3..1292eeec8952431f48c5087fd2cf1c328d99d873 100644
--- a/cc/output/gl_renderer.h
+++ b/cc/output/gl_renderer.h
@@ -42,6 +42,21 @@ class TextureMailboxDeleter;
class GeometryBinding;
class ScopedEnsureFramebufferAllocation;
+static const SkXfermode::Mode kDefaultBlendMode = SkXfermode::kSrcOver_Mode;
+static const SkXfermode::Mode kFirstBlendMode = SkXfermode::kScreen_Mode;
+static const SkXfermode::Mode kLastBlendMode = SkXfermode::kLuminosity_Mode;
+static const int kNumBlendModes = kLastBlendMode - kFirstBlendMode + 2;
enne (OOO) 2014/10/16 01:41:25 Would it make sense to add these to Skia?
rosca 2014/10/16 16:14:56 Actually, we don't need coeff blend modes for shad
+static inline int index_for_blend_mode(SkXfermode::Mode blend_mode) {
+ return (blend_mode < kFirstBlendMode || blend_mode > kLastBlendMode)
+ ? 0
+ : blend_mode - kFirstBlendMode + 1;
+}
+
+static_assert(
+ kDefaultBlendMode < kFirstBlendMode && kFirstBlendMode < kLastBlendMode,
+ "The order should be: kSrcOver_Mode, kFirstBlendMode, kLastBlendMode");
+static_assert(kNumBlendModes == 16, "There are 16 blend modes.");
+
// Class that handles drawing of composited render layers using GL.
class CC_EXPORT GLRenderer : public DirectRenderer {
public:
@@ -153,7 +168,8 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
gfx::Rect GetBackdropBoundingBoxForRenderPassQuad(
DrawingFrame* frame,
const RenderPassDrawQuad* quad,
- const gfx::Transform& contents_device_transform);
+ const gfx::Transform& contents_device_transform,
+ bool use_aa);
scoped_ptr<ScopedResource> GetBackdropTexture(const gfx::Rect& bounding_rect);
static bool ShouldApplyBackgroundFilters(DrawingFrame* frame,
@@ -166,7 +182,6 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
DrawingFrame* frame,
const RenderPassDrawQuad* quad,
const gfx::Transform& contents_device_transform_inverse,
- ScopedResource* background_texture,
skia::RefPtr<SkImage> backdrop_bitmap,
const gfx::Rect& backdrop_bounding_rect);
@@ -328,22 +343,29 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
const TileCheckerboardProgram* GetTileCheckerboardProgram();
- const RenderPassProgram* GetRenderPassProgram(
- TexCoordPrecision precision);
+ const RenderPassProgram* GetRenderPassProgram(TexCoordPrecision precision,
+ SkXfermode::Mode blend_mode);
const RenderPassProgramAA* GetRenderPassProgramAA(
- TexCoordPrecision precision);
+ TexCoordPrecision precision,
+ SkXfermode::Mode blend_mode);
const RenderPassMaskProgram* GetRenderPassMaskProgram(
- TexCoordPrecision precision);
+ TexCoordPrecision precision,
+ SkXfermode::Mode blend_mode);
const RenderPassMaskProgramAA* GetRenderPassMaskProgramAA(
- TexCoordPrecision precision);
+ TexCoordPrecision precision,
+ SkXfermode::Mode blend_mode);
const RenderPassColorMatrixProgram* GetRenderPassColorMatrixProgram(
- TexCoordPrecision precision);
+ TexCoordPrecision precision,
+ SkXfermode::Mode blend_mode);
const RenderPassColorMatrixProgramAA* GetRenderPassColorMatrixProgramAA(
- TexCoordPrecision precision);
+ TexCoordPrecision precision,
+ SkXfermode::Mode blend_mode);
const RenderPassMaskColorMatrixProgram* GetRenderPassMaskColorMatrixProgram(
- TexCoordPrecision precision);
+ TexCoordPrecision precision,
+ SkXfermode::Mode blend_mode);
const RenderPassMaskColorMatrixProgramAA*
- GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision);
+ GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision,
+ SkXfermode::Mode blend_mode);
const TextureProgram* GetTextureProgram(
TexCoordPrecision precision);
@@ -388,18 +410,21 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
nonpremultiplied_texture_background_program_[NumTexCoordPrecisions];
TextureProgram texture_io_surface_program_[NumTexCoordPrecisions];
- RenderPassProgram render_pass_program_[NumTexCoordPrecisions];
- RenderPassProgramAA render_pass_program_aa_[NumTexCoordPrecisions];
- RenderPassMaskProgram render_pass_mask_program_[NumTexCoordPrecisions];
- RenderPassMaskProgramAA render_pass_mask_program_aa_[NumTexCoordPrecisions];
+ RenderPassProgram render_pass_program_[NumTexCoordPrecisions][kNumBlendModes];
+ RenderPassProgramAA
+ render_pass_program_aa_[NumTexCoordPrecisions][kNumBlendModes];
+ RenderPassMaskProgram
+ render_pass_mask_program_[NumTexCoordPrecisions][kNumBlendModes];
+ RenderPassMaskProgramAA
+ render_pass_mask_program_aa_[NumTexCoordPrecisions][kNumBlendModes];
RenderPassColorMatrixProgram
- render_pass_color_matrix_program_[NumTexCoordPrecisions];
- RenderPassColorMatrixProgramAA
- render_pass_color_matrix_program_aa_[NumTexCoordPrecisions];
- RenderPassMaskColorMatrixProgram
- render_pass_mask_color_matrix_program_[NumTexCoordPrecisions];
- RenderPassMaskColorMatrixProgramAA
- render_pass_mask_color_matrix_program_aa_[NumTexCoordPrecisions];
+ render_pass_color_matrix_program_[NumTexCoordPrecisions][kNumBlendModes];
+ RenderPassColorMatrixProgramAA render_pass_color_matrix_program_aa_
+ [NumTexCoordPrecisions][kNumBlendModes];
+ RenderPassMaskColorMatrixProgram render_pass_mask_color_matrix_program_
+ [NumTexCoordPrecisions][kNumBlendModes];
+ RenderPassMaskColorMatrixProgramAA render_pass_mask_color_matrix_program_aa_
+ [NumTexCoordPrecisions][kNumBlendModes];
VideoYUVProgram video_yuv_program_[NumTexCoordPrecisions];
VideoYUVAProgram video_yuva_program_[NumTexCoordPrecisions];

Powered by Google App Engine
This is Rietveld 408576698