Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / cc / output / renderer.h
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/base/scoped_ptr_vector.h"
11 #include "cc/trees/layer_tree_host.h"
12
13 namespace cc {
14
15 class CompositorFrameAck;
16 class CompositorFrameMetadata;
17 class RenderPass;
18 class RenderPassId;
19 class ScopedResource;
20 class Task;
21
22 typedef ScopedPtrVector<RenderPass> RenderPassList;
23
24 struct RendererCapabilitiesImpl {
25   RendererCapabilitiesImpl();
26   ~RendererCapabilitiesImpl();
27
28   // Capabilities copied to main thread.
29   ResourceFormat best_texture_format;
30   bool allow_partial_texture_updates;
31   int max_texture_size;
32   bool using_shared_memory_resources;
33
34   // Capabilities used on compositor thread only.
35   bool using_partial_swap;
36   bool using_egl_image;
37   bool using_image;
38   bool using_discard_framebuffer;
39   bool allow_rasterize_on_demand;
40
41   RendererCapabilities MainThreadCapabilities() const;
42 };
43
44 class CC_EXPORT RendererClient {
45  public:
46   virtual void SetFullRootLayerDamage() = 0;
47 };
48
49 class CC_EXPORT Renderer {
50  public:
51   virtual ~Renderer() {}
52
53   virtual const RendererCapabilitiesImpl& Capabilities() const = 0;
54
55   virtual void DecideRenderPassAllocationsForFrame(
56       const RenderPassList& render_passes_in_draw_order) {}
57   virtual bool HasAllocatedResourcesForTesting(RenderPassId id) const;
58
59   // This passes ownership of the render passes to the renderer. It should
60   // consume them, and empty the list. The parameters here may change from frame
61   // to frame and should not be cached.
62   // The |device_viewport_rect| and |device_clip_rect| are in non-y-flipped
63   // window space.
64   virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
65                          float device_scale_factor,
66                          const gfx::Rect& device_viewport_rect,
67                          const gfx::Rect& device_clip_rect,
68                          bool disable_picture_quad_image_filtering) = 0;
69
70   // Waits for rendering to finish.
71   virtual void Finish() = 0;
72
73   virtual void DoNoOp() {}
74
75   // Puts backbuffer onscreen.
76   virtual void SwapBuffers(const CompositorFrameMetadata& metadata) = 0;
77   virtual void ReceiveSwapBuffersAck(const CompositorFrameAck& ack) {}
78
79   bool visible() const { return visible_; }
80   void SetVisible(bool visible);
81
82  protected:
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_