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

Unified Diff: cc/output/gl_renderer.h

Issue 555133002: [WIP Experiment] Implement mix-blend-mode in GLRenderer using shaders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile issue on mac Created 6 years, 3 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 | « no previous file | cc/output/gl_renderer.cc » ('j') | cc/output/gl_renderer.cc » ('J')
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 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];
« no previous file with comments | « no previous file | cc/output/gl_renderer.cc » ('j') | cc/output/gl_renderer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698