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 
     19 struct RendererCapabilitiesImpl {
     20   RendererCapabilitiesImpl();
     21   ~RendererCapabilitiesImpl();
     22 
     23   // Capabilities copied to main thread.
     24   ResourceFormat best_texture_format;
     25   bool allow_partial_texture_updates;
     26   bool using_offscreen_context3d;
     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 
     37   RendererCapabilities MainThreadCapabilities() const;
     38 };
     39 
     40 class CC_EXPORT RendererClient {
     41  public:
     42   virtual void SetFullRootLayerDamage() = 0;
     43 };
     44 
     45 class CC_EXPORT Renderer {
     46  public:
     47   virtual ~Renderer() {}
     48 
     49   virtual const RendererCapabilitiesImpl& Capabilities() const = 0;
     50 
     51   virtual bool CanReadPixels() 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                          ContextProvider* offscreen_context_provider,
     64                          float device_scale_factor,
     65                          gfx::Rect device_viewport_rect,
     66                          gfx::Rect device_clip_rect,
     67                          bool allow_partial_swap,
     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   virtual void GetFramebufferPixels(void* pixels, gfx::Rect rect) = 0;
     80 
     81   virtual bool IsContextLost();
     82 
     83   virtual void SetVisible(bool visible) = 0;
     84 
     85   virtual void SendManagedMemoryStats(size_t bytes_visible,
     86                                       size_t bytes_visible_and_nearby,
     87                                       size_t bytes_allocated) = 0;
     88 
     89  protected:
     90   explicit Renderer(RendererClient* client, const LayerTreeSettings* settings)
     91       : client_(client), settings_(settings) {}
     92 
     93   RendererClient* client_;
     94   const LayerTreeSettings* settings_;
     95 
     96  private:
     97   DISALLOW_COPY_AND_ASSIGN(Renderer);
     98 };
     99 
    100 }  // namespace cc
    101 
    102 #endif  // CC_OUTPUT_RENDERER_H_
    103