1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CC_OUTPUT_OVERLAY_PROCESSOR_H_ 6#define CC_OUTPUT_OVERLAY_PROCESSOR_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/scoped_ptr.h" 10#include "cc/base/cc_export.h" 11#include "cc/output/overlay_candidate.h" 12#include "cc/quads/render_pass.h" 13 14namespace cc { 15class OutputSurface; 16class ResourceProvider; 17 18class CC_EXPORT OverlayProcessor { 19 public: 20 class CC_EXPORT Strategy { 21 public: 22 virtual ~Strategy() {} 23 // Returns false if the strategy cannot be made to work with the 24 // current set of render passes. Returns true if the strategy was successful 25 // and adds any additional passes necessary to represent overlays to 26 // |render_passes_in_draw_order|. 27 virtual bool Attempt(RenderPassList* render_passes_in_draw_order, 28 OverlayCandidateList* candidates) = 0; 29 }; 30 typedef ScopedPtrVector<Strategy> StrategyList; 31 32 OverlayProcessor(OutputSurface* surface, ResourceProvider* resource_provider); 33 virtual ~OverlayProcessor(); 34 // Virtual to allow testing different strategies. 35 virtual void Initialize(); 36 37 void ProcessForOverlays(RenderPassList* render_passes_in_draw_order, 38 OverlayCandidateList* candidate_list); 39 40 protected: 41 StrategyList strategies_; 42 OutputSurface* surface_; 43 ResourceProvider* resource_provider_; 44 45 private: 46 DISALLOW_COPY_AND_ASSIGN(OverlayProcessor); 47}; 48 49} // namespace cc 50 51#endif // CC_OUTPUT_OVERLAY_PROCESSOR_H_ 52