Index: cc/output/gl_renderer.cc |
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc |
index 3d6607c18fa19c8573752f1b58f0317c3884ce01..51f03ff3ff3329515dc5deb002eee3c589c92908 100644 |
--- a/cc/output/gl_renderer.cc |
+++ b/cc/output/gl_renderer.cc |
@@ -777,25 +777,31 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, |
SkBitmap filter_bitmap; |
SkScalar color_matrix[20]; |
bool use_color_matrix = false; |
- if (quad->filter) { |
- skia::RefPtr<SkColorFilter> cf; |
- |
- { |
- SkColorFilter* colorfilter_rawptr = NULL; |
- quad->filter->asColorFilter(&colorfilter_rawptr); |
- cf = skia::AdoptRef(colorfilter_rawptr); |
- } |
+ // TODO(ajuma): Always use RenderSurfaceFilters::BuildImageFilter, not just |
+ // when we have a reference filter. |
+ if (quad->filters.HasReferenceFilter()) { |
+ skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( |
+ quad->filters, contents_texture->size()); |
+ if (filter) { |
+ skia::RefPtr<SkColorFilter> cf; |
+ |
+ { |
enne (OOO)
2013/09/11 17:57:24
style nit: this is a seemingly unnecessary block.
danakj
2013/09/11 18:02:46
This is to keep the raw pointer scoped and ensure
|
+ SkColorFilter* colorfilter_rawptr = NULL; |
+ filter->asColorFilter(&colorfilter_rawptr); |
+ cf = skia::AdoptRef(colorfilter_rawptr); |
+ } |
- if (cf && cf->asColorMatrix(color_matrix) && !quad->filter->getInput(0)) { |
- // We have a single color matrix as a filter; apply it locally |
- // in the compositor. |
- use_color_matrix = true; |
- } else { |
- filter_bitmap = ApplyImageFilter(this, |
- frame->offscreen_context_provider, |
- quad->rect.origin(), |
- quad->filter.get(), |
- contents_texture); |
+ if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) { |
+ // We have a single color matrix as a filter; apply it locally |
+ // in the compositor. |
+ use_color_matrix = true; |
+ } else { |
+ filter_bitmap = ApplyImageFilter(this, |
+ frame->offscreen_context_provider, |
+ quad->rect.origin(), |
+ filter.get(), |
+ contents_texture); |
+ } |
} |
} else if (!quad->filters.IsEmpty()) { |
FilterOperations optimized_filters = |