• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_RENDERER_H_
6 #define CC_OUTPUT_RENDERER_H_
7 
8 #include "base/basictypes.h"
9 #include "cc/base/cc_export.h"
10 #include "cc/quads/render_pass.h"
11 #include "cc/trees/layer_tree_host.h"
12 
13 namespace cc {
14 
15 class CompositorFrameAck;
16 class CompositorFrameMetadata;
17 class ScopedResource;
18 class Task;
19 
20 struct RendererCapabilitiesImpl {
21   RendererCapabilitiesImpl();
22   ~RendererCapabilitiesImpl();
23 
24   // Capabilities copied to main thread.
25   ResourceFormat best_texture_format;
26   bool allow_partial_texture_updates;
27   int max_texture_size;
28   bool using_shared_memory_resources;
29 
30   // Capabilities used on compositor thread only.
31   bool using_partial_swap;
32   bool using_egl_image;
33   bool avoid_pow2_textures;
34   bool using_map_image;
35   bool using_discard_framebuffer;
36   bool allow_rasterize_on_demand;
37 
38   RendererCapabilities MainThreadCapabilities() const;
39 };
40 
41 class CC_EXPORT RendererClient {
42  public:
43   virtual void SetFullRootLayerDamage() = 0;
44   virtual void RunOnDemandRasterTask(Task* on_demand_raster_task) = 0;
45 };
46 
47 class CC_EXPORT Renderer {
48  public:
~Renderer()49   virtual ~Renderer() {}
50 
51   virtual const RendererCapabilitiesImpl& Capabilities() const = 0;
52 
DecideRenderPassAllocationsForFrame(const RenderPassList & render_passes_in_draw_order)53   virtual void DecideRenderPassAllocationsForFrame(
54       const RenderPassList& render_passes_in_draw_order) {}
55   virtual bool HasAllocatedResourcesForTesting(RenderPass::Id id) const;
56 
57   // This passes ownership of the render passes to the renderer. It should
58   // consume them, and empty the list. The parameters here may change from frame
59   // to frame and should not be cached.
60   // The |device_viewport_rect| and |device_clip_rect| are in non-y-flipped
61   // window space.
62   virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
63                          float device_scale_factor,
64                          const gfx::Rect& device_viewport_rect,
65                          const gfx::Rect& device_clip_rect,
66                          bool disable_picture_quad_image_filtering) = 0;
67 
68   // Waits for rendering to finish.
69   virtual void Finish() = 0;
70 
DoNoOp()71   virtual void DoNoOp() {}
72 
73   // Puts backbuffer onscreen.
74   virtual void SwapBuffers(const CompositorFrameMetadata& metadata) = 0;
ReceiveSwapBuffersAck(const CompositorFrameAck & ack)75   virtual void ReceiveSwapBuffersAck(const CompositorFrameAck& ack) {}
76 
77   virtual bool IsContextLost();
78 
visible()79   bool visible() const { return visible_; }
80   void SetVisible(bool visible);
81 
82  protected:
Renderer(RendererClient * client,const LayerTreeSettings * settings)83   explicit Renderer(RendererClient* client, const LayerTreeSettings* settings)
84       : client_(client), settings_(settings), visible_(true) {}
85 
86   virtual void DidChangeVisibility() = 0;
87 
88   RendererClient* client_;
89   const LayerTreeSettings* settings_;
90   bool visible_;
91 
92  private:
93   DISALLOW_COPY_AND_ASSIGN(Renderer);
94 };
95 
96 }  // namespace cc
97 
98 #endif  // CC_OUTPUT_RENDERER_H_
99