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 14 namespace cc { 15 class OutputSurface; 16 class ResourceProvider; 17 18 class CC_EXPORT OverlayProcessor { 19 public: 20 class CC_EXPORT Strategy { 21 public: ~Strategy()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