| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/layers/delegated_renderer_layer_impl.h" | 5 #include "cc/layers/delegated_renderer_layer_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "cc/base/math_util.h" | 8 #include "cc/base/math_util.h" |
| 9 #include "cc/layers/append_quads_data.h" | 9 #include "cc/layers/append_quads_data.h" |
| 10 #include "cc/layers/quad_sink.h" | 10 #include "cc/layers/quad_sink.h" |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 render_passes_in_draw_order_.back()->damage_rect.Union(old_root_damage); | 151 render_passes_in_draw_order_.back()->damage_rect.Union(old_root_damage); |
| 152 } | 152 } |
| 153 | 153 |
| 154 void DelegatedRendererLayerImpl::ClearRenderPasses() { | 154 void DelegatedRendererLayerImpl::ClearRenderPasses() { |
| 155 // FIXME: Release the resources back to the nested compositor. | 155 // FIXME: Release the resources back to the nested compositor. |
| 156 render_passes_index_by_id_.clear(); | 156 render_passes_index_by_id_.clear(); |
| 157 render_passes_in_draw_order_.clear(); | 157 render_passes_in_draw_order_.clear(); |
| 158 } | 158 } |
| 159 | 159 |
| 160 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl( | 160 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl( |
| 161 LayerTreeImpl* treeImpl) { | 161 LayerTreeImpl* tree_impl) { |
| 162 return DelegatedRendererLayerImpl::Create(treeImpl, id()).PassAs<LayerImpl>(); | 162 return DelegatedRendererLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>()
; |
| 163 } | 163 } |
| 164 | 164 |
| 165 void DelegatedRendererLayerImpl::DidLoseOutputSurface() { | 165 void DelegatedRendererLayerImpl::DidLoseOutputSurface() { |
| 166 ClearRenderPasses(); | 166 ClearRenderPasses(); |
| 167 ClearChildId(); | 167 ClearChildId(); |
| 168 } | 168 } |
| 169 | 169 |
| 170 gfx::Transform DelegatedRendererLayerImpl::DelegatedFrameToLayerSpaceTransform( | 170 gfx::Transform DelegatedRendererLayerImpl::DelegatedFrameToLayerSpaceTransform( |
| 171 gfx::Size frame_size) const { | 171 gfx::Size frame_size) const { |
| 172 gfx::Size display_size = display_size_.IsEmpty() ? bounds() : display_size_; | 172 gfx::Size display_size = display_size_.IsEmpty() ? bounds() : display_size_; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 189 RenderPass::Id DelegatedRendererLayerImpl::NextContributingRenderPassId( | 189 RenderPass::Id DelegatedRendererLayerImpl::NextContributingRenderPassId( |
| 190 RenderPass::Id previous) const { | 190 RenderPass::Id previous) const { |
| 191 return RenderPass::Id(previous.layer_id, previous.index + 1); | 191 return RenderPass::Id(previous.layer_id, previous.index + 1); |
| 192 } | 192 } |
| 193 | 193 |
| 194 RenderPass::Id DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId( | 194 RenderPass::Id DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId( |
| 195 RenderPass::Id delegated_render_pass_id) const { | 195 RenderPass::Id delegated_render_pass_id) const { |
| 196 base::hash_map<RenderPass::Id, int>::const_iterator found = | 196 base::hash_map<RenderPass::Id, int>::const_iterator found = |
| 197 render_passes_index_by_id_.find(delegated_render_pass_id); | 197 render_passes_index_by_id_.find(delegated_render_pass_id); |
| 198 DCHECK(found != render_passes_index_by_id_.end()); | 198 DCHECK(found != render_passes_index_by_id_.end()); |
| 199 unsigned delegatedRenderPassIndex = found->second; | 199 unsigned delegated_render_pass_index = found->second; |
| 200 return RenderPass::Id(id(), IndexToId(delegatedRenderPassIndex)); | 200 return RenderPass::Id(id(), IndexToId(delegated_render_pass_index)); |
| 201 } | 201 } |
| 202 | 202 |
| 203 void DelegatedRendererLayerImpl::AppendContributingRenderPasses( | 203 void DelegatedRendererLayerImpl::AppendContributingRenderPasses( |
| 204 RenderPassSink* render_pass_sink) { | 204 RenderPassSink* render_pass_sink) { |
| 205 DCHECK(HasContributingDelegatedRenderPasses()); | 205 DCHECK(HasContributingDelegatedRenderPasses()); |
| 206 | 206 |
| 207 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) { | 207 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) { |
| 208 RenderPass::Id output_render_pass_id = | 208 RenderPass::Id output_render_pass_id = |
| 209 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id); | 209 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id); |
| 210 | 210 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 223 return; | 223 return; |
| 224 | 224 |
| 225 RenderPass::Id target_render_pass_id = append_quads_data->renderPassId; | 225 RenderPass::Id target_render_pass_id = append_quads_data->renderPassId; |
| 226 | 226 |
| 227 const RenderPass* root_delegated_render_pass = | 227 const RenderPass* root_delegated_render_pass = |
| 228 render_passes_in_draw_order_.back(); | 228 render_passes_in_draw_order_.back(); |
| 229 | 229 |
| 230 DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin()); | 230 DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin()); |
| 231 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); | 231 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); |
| 232 | 232 |
| 233 // If the index of the renderPassId is 0, then it is a renderPass generated | 233 // If the index of the EenderPassId is 0, then it is a RenderPass generated |
| 234 // for a layer in this compositor, not the delegated renderer. Then we want to | 234 // for a layer in this compositor, not the delegated renderer. Then we want to |
| 235 // merge our root renderPass with the target renderPass. Otherwise, it is some | 235 // merge our root RenderPass with the target RenderPass. Otherwise, it is some |
| 236 // renderPass which we added from the delegated renderer. | 236 // RenderPass which we added from the delegated renderer. |
| 237 bool should_merge_root_render_pass_with_target = !target_render_pass_id.index; | 237 bool should_merge_root_render_pass_with_target = !target_render_pass_id.index; |
| 238 if (should_merge_root_render_pass_with_target) { | 238 if (should_merge_root_render_pass_with_target) { |
| 239 // Verify that the renderPass we are appending to is created our | 239 // Verify that the RenderPass we are appending to is created our |
| 240 // renderTarget. | 240 // render_target. |
| 241 DCHECK(target_render_pass_id.layer_id == render_target()->id()); | 241 DCHECK(target_render_pass_id.layer_id == render_target()->id()); |
| 242 | 242 |
| 243 AppendRenderPassQuads( | 243 AppendRenderPassQuads( |
| 244 quad_sink, append_quads_data, root_delegated_render_pass, frame_size); | 244 quad_sink, append_quads_data, root_delegated_render_pass, frame_size); |
| 245 } else { | 245 } else { |
| 246 // Verify that the renderPass we are appending to was created by us. | 246 // Verify that the RenderPass we are appending to was created by us. |
| 247 DCHECK(target_render_pass_id.layer_id == id()); | 247 DCHECK(target_render_pass_id.layer_id == id()); |
| 248 | 248 |
| 249 int render_pass_index = IdToIndex(target_render_pass_id.index); | 249 int render_pass_index = IdToIndex(target_render_pass_id.index); |
| 250 const RenderPass* delegated_render_pass = | 250 const RenderPass* delegated_render_pass = |
| 251 render_passes_in_draw_order_[render_pass_index]; | 251 render_passes_in_draw_order_[render_pass_index]; |
| 252 AppendRenderPassQuads( | 252 AppendRenderPassQuads( |
| 253 quad_sink, append_quads_data, delegated_render_pass, frame_size); | 253 quad_sink, append_quads_data, delegated_render_pass, frame_size); |
| 254 } | 254 } |
| 255 } | 255 } |
| 256 | 256 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 void DelegatedRendererLayerImpl::ClearChildId() { | 341 void DelegatedRendererLayerImpl::ClearChildId() { |
| 342 if (!child_id_) | 342 if (!child_id_) |
| 343 return; | 343 return; |
| 344 | 344 |
| 345 ResourceProvider* resource_provider = layer_tree_impl()->resource_provider(); | 345 ResourceProvider* resource_provider = layer_tree_impl()->resource_provider(); |
| 346 resource_provider->DestroyChild(child_id_); | 346 resource_provider->DestroyChild(child_id_); |
| 347 child_id_ = 0; | 347 child_id_ = 0; |
| 348 } | 348 } |
| 349 | 349 |
| 350 } // namespace cc | 350 } // namespace cc |
| OLD | NEW |