| Index: cc/output/direct_renderer.cc
|
| diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc
|
| index d8af8b6dcc475e2e3d166e74bd3742a726d52ecc..d0798231bcb21092967c4ca6161b0881e6b54360 100644
|
| --- a/cc/output/direct_renderer.cc
|
| +++ b/cc/output/direct_renderer.cc
|
| @@ -253,6 +253,18 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
|
|
| BeginDrawingFrame(&frame);
|
|
|
| + for (const auto& pass : *render_passes_in_draw_order) {
|
| + if (!pass->filters.IsEmpty())
|
| + render_pass_filters_.push_back(std::make_pair(pass->id, &pass->filters));
|
| + if (!pass->background_filters.IsEmpty()) {
|
| + render_pass_background_filters_.push_back(
|
| + std::make_pair(pass->id, &pass->background_filters));
|
| + }
|
| + std::sort(render_pass_filters_.begin(), render_pass_filters_.end());
|
| + std::sort(render_pass_background_filters_.begin(),
|
| + render_pass_background_filters_.end());
|
| + }
|
| +
|
| // Draw all non-root render passes except for the root render pass.
|
| for (const auto& pass : *render_passes_in_draw_order) {
|
| if (pass.get() == root_render_pass)
|
| @@ -276,7 +288,8 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
| // Attempt to replace some or all of the quads of the root render pass with
|
| // overlays.
|
| overlay_processor_->ProcessForOverlays(
|
| - resource_provider_, root_render_pass, &frame.overlay_list,
|
| + resource_provider_, root_render_pass, render_pass_filters_,
|
| + render_pass_background_filters_, &frame.overlay_list,
|
| &frame.ca_layer_overlay_list, &frame.root_damage_rect);
|
|
|
| // We can skip all drawing if the damage rect is now empty.
|
| @@ -304,6 +317,8 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
|
|
|
| FinishDrawingFrame(&frame);
|
| render_passes_in_draw_order->clear();
|
| + render_pass_filters_.clear();
|
| + render_pass_background_filters_.clear();
|
| }
|
|
|
| gfx::Rect DirectRenderer::ComputeScissorRectForRenderPass(
|
| @@ -404,6 +419,28 @@ void DirectRenderer::DoDrawPolygon(const DrawPolygon& poly,
|
| }
|
| }
|
|
|
| +const FilterOperations* DirectRenderer::FiltersForPass(
|
| + int render_pass_id) const {
|
| + auto it = std::lower_bound(
|
| + render_pass_filters_.begin(), render_pass_filters_.end(),
|
| + std::pair<int, FilterOperations*>(render_pass_id, nullptr));
|
| + if (it != render_pass_filters_.end() && it->first == render_pass_id)
|
| + return it->second;
|
| + return nullptr;
|
| +}
|
| +
|
| +const FilterOperations* DirectRenderer::BackgroundFiltersForPass(
|
| + int render_pass_id) const {
|
| + auto it = std::lower_bound(
|
| + render_pass_background_filters_.begin(),
|
| + render_pass_background_filters_.end(),
|
| + std::pair<int, FilterOperations*>(render_pass_id, nullptr));
|
| + if (it != render_pass_background_filters_.end() &&
|
| + it->first == render_pass_id)
|
| + return it->second;
|
| + return nullptr;
|
| +}
|
| +
|
| void DirectRenderer::FlushPolygons(
|
| std::deque<std::unique_ptr<DrawPolygon>>* poly_list,
|
| DrawingFrame* frame,
|
|
|