• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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