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

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: 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
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl_unittest.cc ('k') | cc/output/gl_renderer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/gl_renderer.h
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h
index 055e0d6731285f7e27431b84c49fe89fab4d358b..a3bf599ddc19acc6ef8d7aafae0f226bcad3efb1 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;
Erik Dahlström (inactive) 2014/10/14 13:56:07 why not use SkXfermode::kLastMode?
rosca 2014/10/15 15:33:55 I thought kLastMode might not necessarily refer to
+static const int kNumBlendModes = kLastBlendMode - kFirstBlendMode + 2;
Erik Dahlström (inactive) 2014/10/14 13:56:07 Deserves a comment to explain the +2.
rosca 2014/10/15 15:33:55 I will, thanks.
+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:
@@ -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];
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl_unittest.cc ('k') | cc/output/gl_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698