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 class CC_EXPORT RendererClient {
     20  public:
     21   // Draw viewport in non-y-flipped window space. Note that while a draw is in
     22   // progress, this is guaranteed to be contained within the output surface
     23   // size.
     24   virtual gfx::Rect DeviceViewport() const = 0;
     25   virtual gfx::Rect DeviceClip() const = 0;
     26 
     27   virtual float DeviceScaleFactor() const = 0;
     28   virtual const LayerTreeSettings& Settings() const = 0;
     29   virtual void SetFullRootLayerDamage() = 0;
     30   virtual bool HasImplThread() const = 0;
     31   virtual bool ShouldClearRootRenderPass() const = 0;
     32   virtual CompositorFrameMetadata MakeCompositorFrameMetadata() const = 0;
     33   virtual bool AllowPartialSwap() const = 0;
     34   virtual bool ExternalStencilTestEnabled() const = 0;
     35 
     36  protected:
     37   virtual ~RendererClient() {}
     38 };
     39 
     40 class CC_EXPORT Renderer {
     41  public:
     42   virtual ~Renderer() {}
     43 
     44   virtual const RendererCapabilities& Capabilities() const = 0;
     45 
     46   const LayerTreeSettings& Settings() const { return client_->Settings(); }
     47 
     48   virtual void ViewportChanged() {}
     49 
     50   virtual bool CanReadPixels() const = 0;
     51 
     52   virtual void DecideRenderPassAllocationsForFrame(
     53       const RenderPassList& render_passes_in_draw_order) {}
     54   virtual bool HaveCachedResourcesForRenderPassId(RenderPass::Id id) const;
     55 
     56   // This passes ownership of the render passes to the renderer. It should
     57   // consume them, and empty the list.
     58   virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
     59                          bool disable_picture_quad_image_filtering) = 0;
     60 
     61   // Waits for rendering to finish.
     62   virtual void Finish() = 0;
     63 
     64   virtual void DoNoOp() {}
     65 
     66   // Puts backbuffer onscreen.
     67   virtual void SwapBuffers() = 0;
     68   virtual void ReceiveSwapBuffersAck(const CompositorFrameAck& ack) {}
     69 
     70   virtual void GetFramebufferPixels(void* pixels, gfx::Rect rect) = 0;
     71 
     72   virtual bool IsContextLost();
     73 
     74   virtual void SetVisible(bool visible) = 0;
     75 
     76   virtual void SendManagedMemoryStats(size_t bytes_visible,
     77                                       size_t bytes_visible_and_nearby,
     78                                       size_t bytes_allocated) = 0;
     79 
     80   virtual void SetDiscardBackBufferWhenNotVisible(bool discard) = 0;
     81 
     82  protected:
     83   explicit Renderer(RendererClient* client)
     84       : client_(client) {}
     85 
     86   RendererClient* client_;
     87 
     88  private:
     89   DISALLOW_COPY_AND_ASSIGN(Renderer);
     90 };
     91 
     92 }  // namespace cc
     93 
     94 #endif  // CC_OUTPUT_RENDERER_H_
     95