Index: cc/output/gl_renderer.h |
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h |
index 75a5d6e720e76572268f2a7b5e32570c24647d83..bba583232c694bc8cae9f72d6e55ca1dd0fd1a19 100644 |
--- a/cc/output/gl_renderer.h |
+++ b/cc/output/gl_renderer.h |
@@ -143,12 +143,23 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
const CheckerboardDrawQuad* quad); |
void DrawDebugBorderQuad(const DrawingFrame* frame, |
const DebugBorderDrawQuad* quad); |
+ static bool ShouldApplyBackgroundFilters(DrawingFrame* frame, |
+ const RenderPassDrawQuad* quad); |
+ static bool ShouldApplyBlendModeUsingShaders(const DrawQuad* quad); |
+ static bool ShouldApplyBlendModeUsingBlendFunc(const DrawQuad* quad); |
+ void ApplyBlendModeUsingBlendFunc(const DrawQuad* quad); |
+ void RestoreBlendFuncToDefault(const DrawQuad* quad); |
+ gfx::Rect GetBackdropBoundingBox( |
+ DrawingFrame* frame, |
+ const RenderPassDrawQuad* quad, |
+ const gfx::Transform& contents_device_transform); |
+ scoped_ptr<ScopedResource> GetBackdrop(const gfx::Rect& bounding_rect); |
scoped_ptr<ScopedResource> GetBackgroundWithFilters( |
DrawingFrame* frame, |
const RenderPassDrawQuad* quad, |
- const gfx::Transform& contents_device_transform, |
const gfx::Transform& contents_device_transformInverse, |
- bool* background_changed); |
+ const ScopedResource* backdrop_texture, |
+ const gfx::Rect& backdrop_bounding_rect); |
void DrawRenderPassQuad(DrawingFrame* frame, const RenderPassDrawQuad* quad); |
void DrawSolidColorQuad(const DrawingFrame* frame, |
const SolidColorDrawQuad* quad); |
@@ -254,26 +265,30 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
NonPremultipliedTextureBackgroundProgram; |
// Render surface shaders. |
- typedef ProgramBinding<VertexShaderPosTexTransform, |
- FragmentShaderRGBATexAlpha> RenderPassProgram; |
- typedef ProgramBinding<VertexShaderPosTexTransform, |
- FragmentShaderRGBATexAlphaMask> RenderPassMaskProgram; |
- typedef ProgramBinding<VertexShaderQuadTexTransformAA, |
- FragmentShaderRGBATexAlphaAA> RenderPassProgramAA; |
- typedef ProgramBinding<VertexShaderQuadTexTransformAA, |
- FragmentShaderRGBATexAlphaMaskAA> |
+ typedef ProgramBindingWithBlendMode<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexAlpha> |
+ RenderPassProgram; |
+ typedef ProgramBindingWithBlendMode<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexAlphaMask> |
+ RenderPassMaskProgram; |
+ typedef ProgramBindingWithBlendMode<VertexShaderQuadTexTransformAA, |
+ FragmentShaderRGBATexAlphaAA> |
+ RenderPassProgramAA; |
+ typedef ProgramBindingWithBlendMode<VertexShaderQuadTexTransformAA, |
+ FragmentShaderRGBATexAlphaMaskAA> |
RenderPassMaskProgramAA; |
- typedef ProgramBinding<VertexShaderPosTexTransform, |
- FragmentShaderRGBATexColorMatrixAlpha> |
+ typedef ProgramBindingWithBlendMode<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexColorMatrixAlpha> |
RenderPassColorMatrixProgram; |
- typedef ProgramBinding<VertexShaderQuadTexTransformAA, |
- FragmentShaderRGBATexAlphaMaskColorMatrixAA> |
+ typedef ProgramBindingWithBlendMode< |
+ VertexShaderQuadTexTransformAA, |
+ FragmentShaderRGBATexAlphaMaskColorMatrixAA> |
RenderPassMaskColorMatrixProgramAA; |
- typedef ProgramBinding<VertexShaderQuadTexTransformAA, |
- FragmentShaderRGBATexAlphaColorMatrixAA> |
+ typedef ProgramBindingWithBlendMode<VertexShaderQuadTexTransformAA, |
+ FragmentShaderRGBATexAlphaColorMatrixAA> |
RenderPassColorMatrixProgramAA; |
- typedef ProgramBinding<VertexShaderPosTexTransform, |
- FragmentShaderRGBATexAlphaMaskColorMatrix> |
+ typedef ProgramBindingWithBlendMode<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexAlphaMaskColorMatrix> |
RenderPassMaskColorMatrixProgram; |
// Video shaders. |
@@ -307,22 +322,32 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
const TileCheckerboardProgram* GetTileCheckerboardProgram(); |
+ static int GetBlendModeIndex(SkXfermode::Mode blend_mode); |
const RenderPassProgram* GetRenderPassProgram( |
- TexCoordPrecision precision); |
+ TexCoordPrecision precision, |
+ SkXfermode::Mode = SkXfermode::kSrcOver_Mode); |
const RenderPassProgramAA* GetRenderPassProgramAA( |
- TexCoordPrecision precision); |
+ TexCoordPrecision precision, |
+ SkXfermode::Mode = SkXfermode::kSrcOver_Mode); |
const RenderPassMaskProgram* GetRenderPassMaskProgram( |
- TexCoordPrecision precision); |
+ TexCoordPrecision precision, |
+ SkXfermode::Mode = SkXfermode::kSrcOver_Mode); |
const RenderPassMaskProgramAA* GetRenderPassMaskProgramAA( |
- TexCoordPrecision precision); |
+ TexCoordPrecision precision, |
+ SkXfermode::Mode = SkXfermode::kSrcOver_Mode); |
const RenderPassColorMatrixProgram* GetRenderPassColorMatrixProgram( |
- TexCoordPrecision precision); |
+ TexCoordPrecision precision, |
+ SkXfermode::Mode = SkXfermode::kSrcOver_Mode); |
const RenderPassColorMatrixProgramAA* GetRenderPassColorMatrixProgramAA( |
- TexCoordPrecision precision); |
+ TexCoordPrecision precision, |
+ SkXfermode::Mode = SkXfermode::kSrcOver_Mode); |
const RenderPassMaskColorMatrixProgram* GetRenderPassMaskColorMatrixProgram( |
- TexCoordPrecision precision); |
+ TexCoordPrecision precision, |
+ SkXfermode::Mode = SkXfermode::kSrcOver_Mode); |
const RenderPassMaskColorMatrixProgramAA* |
- GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision); |
+ GetRenderPassMaskColorMatrixProgramAA( |
+ TexCoordPrecision precision, |
+ SkXfermode::Mode = SkXfermode::kSrcOver_Mode); |
const TextureProgram* GetTextureProgram( |
TexCoordPrecision precision); |
@@ -367,18 +392,22 @@ 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]; |
+ static const int kNumBlendModes = 16; |
+ RenderPassProgram render_pass_program_[kNumBlendModes][NumTexCoordPrecisions]; |
+ RenderPassProgramAA |
+ render_pass_program_aa_[kNumBlendModes][NumTexCoordPrecisions]; |
+ RenderPassMaskProgram |
+ render_pass_mask_program_[kNumBlendModes][NumTexCoordPrecisions]; |
+ RenderPassMaskProgramAA |
+ render_pass_mask_program_aa_[kNumBlendModes][NumTexCoordPrecisions]; |
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_[kNumBlendModes][NumTexCoordPrecisions]; |
+ RenderPassColorMatrixProgramAA render_pass_color_matrix_program_aa_ |
+ [kNumBlendModes][NumTexCoordPrecisions]; |
+ RenderPassMaskColorMatrixProgram render_pass_mask_color_matrix_program_ |
+ [kNumBlendModes][NumTexCoordPrecisions]; |
+ RenderPassMaskColorMatrixProgramAA render_pass_mask_color_matrix_program_aa_ |
+ [kNumBlendModes][NumTexCoordPrecisions]; |
VideoYUVProgram video_yuv_program_[NumTexCoordPrecisions]; |
VideoYUVAProgram video_yuva_program_[NumTexCoordPrecisions]; |