1// Copyright 2012 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_DELEGATING_RENDERER_H_
6#define CC_OUTPUT_DELEGATING_RENDERER_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "cc/base/cc_export.h"
10#include "cc/output/compositor_frame.h"
11#include "cc/output/renderer.h"
12
13namespace cc {
14
15class OutputSurface;
16class ResourceProvider;
17
18class CC_EXPORT DelegatingRenderer : public Renderer {
19 public:
20  static scoped_ptr<DelegatingRenderer> Create(
21      RendererClient* client,
22      const LayerTreeSettings* settings,
23      OutputSurface* output_surface,
24      ResourceProvider* resource_provider);
25  virtual ~DelegatingRenderer();
26
27  virtual const RendererCapabilitiesImpl& Capabilities() const OVERRIDE;
28
29  virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
30                         float device_scale_factor,
31                         const gfx::Rect& device_viewport_rect,
32                         const gfx::Rect& device_clip_rect,
33                         bool disable_picture_quad_image_filtering) OVERRIDE;
34
35  virtual void Finish() OVERRIDE {}
36
37  virtual void SwapBuffers(const CompositorFrameMetadata& metadata) OVERRIDE;
38  virtual void ReceiveSwapBuffersAck(const CompositorFrameAck&) OVERRIDE;
39
40 private:
41  DelegatingRenderer(RendererClient* client,
42                     const LayerTreeSettings* settings,
43                     OutputSurface* output_surface,
44                     ResourceProvider* resource_provider);
45
46  virtual void DidChangeVisibility() OVERRIDE;
47
48  OutputSurface* output_surface_;
49  ResourceProvider* resource_provider_;
50  RendererCapabilitiesImpl capabilities_;
51  scoped_ptr<DelegatedFrameData> delegated_frame_data_;
52
53  DISALLOW_COPY_AND_ASSIGN(DelegatingRenderer);
54};
55
56}  // namespace cc
57
58#endif  // CC_OUTPUT_DELEGATING_RENDERER_H_
59