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: ~Renderer()47 virtual ~Renderer() {} 48 49 virtual const RendererCapabilitiesImpl& Capabilities() const = 0; 50 51 virtual bool CanReadPixels() const = 0; 52 DecideRenderPassAllocationsForFrame(const RenderPassList & render_passes_in_draw_order)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 DoNoOp()73 virtual void DoNoOp() {} 74 75 // Puts backbuffer onscreen. 76 virtual void SwapBuffers(const CompositorFrameMetadata& metadata) = 0; ReceiveSwapBuffersAck(const CompositorFrameAck & ack)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: Renderer(RendererClient * client,const LayerTreeSettings * settings)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