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_LAYERS_DELEGATED_RENDERER_LAYER_IMPL_H_ 6 #define CC_LAYERS_DELEGATED_RENDERER_LAYER_IMPL_H_ 7 8 #include "base/containers/hash_tables.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "cc/base/cc_export.h" 11 #include "cc/base/scoped_ptr_vector.h" 12 #include "cc/layers/layer_impl.h" 13 14 namespace cc { 15 class DelegatedFrameData; 16 class RenderPassSink; 17 18 class CC_EXPORT DelegatedRendererLayerImpl : public LayerImpl { 19 public: 20 static scoped_ptr<DelegatedRendererLayerImpl> Create( 21 LayerTreeImpl* tree_impl, int id) { 22 return make_scoped_ptr(new DelegatedRendererLayerImpl(tree_impl, id)); 23 } 24 virtual ~DelegatedRendererLayerImpl(); 25 26 // LayerImpl overrides. 27 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) 28 OVERRIDE; 29 virtual bool HasDelegatedContent() const OVERRIDE; 30 virtual bool HasContributingDelegatedRenderPasses() const OVERRIDE; 31 virtual RenderPass::Id FirstContributingRenderPassId() const OVERRIDE; 32 virtual RenderPass::Id NextContributingRenderPassId( 33 RenderPass::Id previous) const OVERRIDE; 34 virtual void DidLoseOutputSurface() OVERRIDE; 35 virtual bool WillDraw(DrawMode draw_mode, 36 ResourceProvider* resource_provider) OVERRIDE; 37 virtual void AppendQuads(QuadSink* quad_sink, 38 AppendQuadsData* append_quads_data) OVERRIDE; 39 virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE; 40 41 void AppendContributingRenderPasses(RenderPassSink* render_pass_sink); 42 43 void SetFrameData(scoped_ptr<DelegatedFrameData> frame_data, 44 gfx::RectF damage_in_frame); 45 46 void CollectUnusedResources(TransferableResourceArray* resources_for_ack); 47 48 void SetDisplaySize(gfx::Size size); 49 50 protected: 51 DelegatedRendererLayerImpl(LayerTreeImpl* tree_impl, int id); 52 53 int ChildIdForTesting() const { return child_id_; } 54 const ScopedPtrVector<RenderPass>& RenderPassesInDrawOrderForTesting() const { 55 return render_passes_in_draw_order_; 56 } 57 const ResourceProvider::ResourceIdSet& ResourcesForTesting() const { 58 return resources_; 59 } 60 61 private: 62 // Creates an ID with the resource provider for the child renderer 63 // that will be sending quads to the layer. 64 void CreateChildIdIfNeeded(); 65 void ClearChildId(); 66 67 void AppendRainbowDebugBorder(QuadSink* quad_sink, 68 AppendQuadsData* append_quads_data); 69 70 void SetRenderPasses( 71 ScopedPtrVector<RenderPass>* render_passes_in_draw_order); 72 void ClearRenderPasses(); 73 74 RenderPass::Id ConvertDelegatedRenderPassId( 75 RenderPass::Id delegated_render_pass_id) const; 76 77 gfx::Transform DelegatedFrameToLayerSpaceTransform(gfx::Size frame_size) 78 const; 79 80 void AppendRenderPassQuads( 81 QuadSink* quad_sink, 82 AppendQuadsData* append_quads_data, 83 const RenderPass* delegated_render_pass, 84 gfx::Size frame_size) const; 85 86 // LayerImpl overrides. 87 virtual const char* LayerTypeAsString() const OVERRIDE; 88 89 bool have_render_passes_to_push_; 90 ScopedPtrVector<RenderPass> render_passes_in_draw_order_; 91 base::hash_map<RenderPass::Id, int> render_passes_index_by_id_; 92 ResourceProvider::ResourceIdSet resources_; 93 94 gfx::Size display_size_; 95 int child_id_; 96 bool own_child_id_; 97 98 DISALLOW_COPY_AND_ASSIGN(DelegatedRendererLayerImpl); 99 }; 100 101 } // namespace cc 102 103 #endif // CC_LAYERS_DELEGATED_RENDERER_LAYER_IMPL_H_ 104