Home | History | Annotate | Download | only in output
      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_map_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_
     99