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