delegating_renderer.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef CC_OUTPUT_DELEGATING_RENDERER_H_
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define CC_OUTPUT_DELEGATING_RENDERER_H_
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "cc/base/cc_export.h"
1002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch#include "cc/output/compositor_frame.h"
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "cc/output/renderer.h"
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdochnamespace cc {
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class OutputSurface;
1602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdochclass ResourceProvider;
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CC_EXPORT DelegatingRenderer : public Renderer {
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public:
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  static scoped_ptr<DelegatingRenderer> Create(
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      RendererClient* client,
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      const LayerTreeSettings* settings,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      OutputSurface* output_surface,
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      ResourceProvider* resource_provider);
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual ~DelegatingRenderer();
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const RendererCapabilitiesImpl& Capabilities() const OVERRIDE;
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool CanReadPixels() const OVERRIDE;
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                         ContextProvider* offscreen_context_provider,
33a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                         float device_scale_factor,
34f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu                         const gfx::Rect& device_viewport_rect,
35f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)                         const gfx::Rect& device_clip_rect,
3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                         bool disable_picture_quad_image_filtering) OVERRIDE;
377757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
387757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch  virtual void Finish() OVERRIDE {}
397757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
407757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch  virtual void SwapBuffers(const CompositorFrameMetadata& metadata) OVERRIDE;
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void ReceiveSwapBuffersAck(const CompositorFrameAck&) OVERRIDE;
42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void GetFramebufferPixels(void* pixels,
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                    const gfx::Rect& rect) OVERRIDE;
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool IsContextLost() OVERRIDE;
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SetVisible(bool visible) OVERRIDE;
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SendManagedMemoryStats(size_t bytes_visible,
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                      size_t bytes_visible_and_nearby,
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                      size_t bytes_allocated) OVERRIDE;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private:
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  DelegatingRenderer(RendererClient* client,
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                     const LayerTreeSettings* settings,
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                     OutputSurface* output_surface,
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                     ResourceProvider* resource_provider);
59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)  bool Initialize();
60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)  OutputSurface* output_surface_;
62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)  ResourceProvider* resource_provider_;
63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)  RendererCapabilitiesImpl capabilities_;
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  scoped_ptr<DelegatedFrameData> delegated_frame_data_;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  bool visible_;
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DelegatingRenderer);
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}  // namespace cc
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
72a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#endif  // CC_OUTPUT_DELEGATING_RENDERER_H_
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)