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