Chromium Code Reviews| 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]; |