delegating_renderer.h revision 6d86b77056ed63eb6871182f42a9fd5f07550f90
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  virtual bool IsContextLost() OVERRIDE;
41
42 private:
43  DelegatingRenderer(RendererClient* client,
44                     const LayerTreeSettings* settings,
45                     OutputSurface* output_surface,
46                     ResourceProvider* resource_provider);
47
48  virtual void DidChangeVisibility() OVERRIDE;
49
50  OutputSurface* output_surface_;
51  ResourceProvider* resource_provider_;
52  RendererCapabilitiesImpl capabilities_;
53  scoped_ptr<DelegatedFrameData> delegated_frame_data_;
54
55  DISALLOW_COPY_AND_ASSIGN(DelegatingRenderer);
56};
57
58}  // namespace cc
59
60#endif  // CC_OUTPUT_DELEGATING_RENDERER_H_
61