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/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:
     49   virtual ~Renderer() {}
     50 
     51   virtual const RendererCapabilitiesImpl& Capabilities() const = 0;
     52 
     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 
     71   virtual void DoNoOp() {}
     72 
     73   // Puts backbuffer onscreen.
     74   virtual void SwapBuffers(const CompositorFrameMetadata& metadata) = 0;
     75   virtual void ReceiveSwapBuffersAck(const CompositorFrameAck& ack) {}
     76 
     77   virtual bool IsContextLost();
     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