| 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 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 render_passes_in_draw_order_.back()->damage_rect.Union(old_root_damage); | 152 render_passes_in_draw_order_.back()->damage_rect.Union(old_root_damage); |
| 153 } | 153 } |
| 154 | 154 |
| 155 void DelegatedRendererLayerImpl::ClearRenderPasses() { | 155 void DelegatedRendererLayerImpl::ClearRenderPasses() { |
| 156 // FIXME: Release the resources back to the nested compositor. | 156 // FIXME: Release the resources back to the nested compositor. |
| 157 render_passes_index_by_id_.clear(); | 157 render_passes_index_by_id_.clear(); |
| 158 render_passes_in_draw_order_.clear(); | 158 render_passes_in_draw_order_.clear(); |
| 159 } | 159 } |
| 160 | 160 |
| 161 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl( | 161 scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl( |
| 162 LayerTreeImpl* treeImpl) { | 162 LayerTreeImpl* tree_impl) { |
| 163 return DelegatedRendererLayerImpl::Create(treeImpl, id()).PassAs<LayerImpl>(); | 163 return DelegatedRendererLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>()
; |
| 164 } | 164 } |
| 165 | 165 |
| 166 void DelegatedRendererLayerImpl::DidLoseOutputSurface() { | 166 void DelegatedRendererLayerImpl::DidLoseOutputSurface() { |
| 167 ClearRenderPasses(); | 167 ClearRenderPasses(); |
| 168 ClearChildId(); | 168 ClearChildId(); |
| 169 } | 169 } |
| 170 | 170 |
| 171 gfx::Transform DelegatedRendererLayerImpl::DelegatedFrameToLayerSpaceTransform( | 171 gfx::Transform DelegatedRendererLayerImpl::DelegatedFrameToLayerSpaceTransform( |
| 172 gfx::Size frame_size) const { | 172 gfx::Size frame_size) const { |
| 173 gfx::Size display_size = display_size_.IsEmpty() ? bounds() : display_size_; | 173 gfx::Size display_size = display_size_.IsEmpty() ? bounds() : display_size_; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 190 RenderPass::Id DelegatedRendererLayerImpl::NextContributingRenderPassId( | 190 RenderPass::Id DelegatedRendererLayerImpl::NextContributingRenderPassId( |
| 191 RenderPass::Id previous) const { | 191 RenderPass::Id previous) const { |
| 192 return RenderPass::Id(previous.layer_id, previous.index + 1); | 192 return RenderPass::Id(previous.layer_id, previous.index + 1); |
| 193 } | 193 } |
| 194 | 194 |
| 195 RenderPass::Id DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId( | 195 RenderPass::Id DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId( |
| 196 RenderPass::Id delegated_render_pass_id) const { | 196 RenderPass::Id delegated_render_pass_id) const { |
| 197 base::hash_map<RenderPass::Id, int>::const_iterator found = | 197 base::hash_map<RenderPass::Id, int>::const_iterator found = |
| 198 render_passes_index_by_id_.find(delegated_render_pass_id); | 198 render_passes_index_by_id_.find(delegated_render_pass_id); |
| 199 DCHECK(found != render_passes_index_by_id_.end()); | 199 DCHECK(found != render_passes_index_by_id_.end()); |
| 200 unsigned delegatedRenderPassIndex = found->second; | 200 unsigned delegated_render_pass_index = found->second; |
| 201 return RenderPass::Id(id(), IndexToId(delegatedRenderPassIndex)); | 201 return RenderPass::Id(id(), IndexToId(delegated_render_pass_index)); |
| 202 } | 202 } |
| 203 | 203 |
| 204 void DelegatedRendererLayerImpl::AppendContributingRenderPasses( | 204 void DelegatedRendererLayerImpl::AppendContributingRenderPasses( |
| 205 RenderPassSink* render_pass_sink) { | 205 RenderPassSink* render_pass_sink) { |
| 206 DCHECK(HasContributingDelegatedRenderPasses()); | 206 DCHECK(HasContributingDelegatedRenderPasses()); |
| 207 | 207 |
| 208 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) { | 208 for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) { |
| 209 RenderPass::Id output_render_pass_id = | 209 RenderPass::Id output_render_pass_id = |
| 210 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id); | 210 ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id); |
| 211 | 211 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 226 return; | 226 return; |
| 227 | 227 |
| 228 RenderPass::Id target_render_pass_id = append_quads_data->renderPassId; | 228 RenderPass::Id target_render_pass_id = append_quads_data->renderPassId; |
| 229 | 229 |
| 230 const RenderPass* root_delegated_render_pass = | 230 const RenderPass* root_delegated_render_pass = |
| 231 render_passes_in_draw_order_.back(); | 231 render_passes_in_draw_order_.back(); |
| 232 | 232 |
| 233 DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin()); | 233 DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin()); |
| 234 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); | 234 gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); |
| 235 | 235 |
| 236 // If the index of the renderPassId is 0, then it is a renderPass generated | 236 // If the index of the EenderPassId is 0, then it is a RenderPass generated |
| 237 // for a layer in this compositor, not the delegated renderer. Then we want to | 237 // for a layer in this compositor, not the delegated renderer. Then we want to |
| 238 // merge our root renderPass with the target renderPass. Otherwise, it is some | 238 // merge our root RenderPass with the target RenderPass. Otherwise, it is some |
| 239 // renderPass which we added from the delegated renderer. | 239 // RenderPass which we added from the delegated renderer. |
| 240 bool should_merge_root_render_pass_with_target = !target_render_pass_id.index; | 240 bool should_merge_root_render_pass_with_target = !target_render_pass_id.index; |
| 241 if (should_merge_root_render_pass_with_target) { | 241 if (should_merge_root_render_pass_with_target) { |
| 242 // Verify that the renderPass we are appending to is created our | 242 // Verify that the RenderPass we are appending to is created our |
| 243 // renderTarget. | 243 // render_target. |
| 244 DCHECK(target_render_pass_id.layer_id == render_target()->id()); | 244 DCHECK(target_render_pass_id.layer_id == render_target()->id()); |
| 245 | 245 |
| 246 AppendRenderPassQuads( | 246 AppendRenderPassQuads( |
| 247 quad_sink, append_quads_data, root_delegated_render_pass, frame_size); | 247 quad_sink, append_quads_data, root_delegated_render_pass, frame_size); |
| 248 } else { | 248 } else { |
| 249 // Verify that the renderPass we are appending to was created by us. | 249 // Verify that the RenderPass we are appending to was created by us. |
| 250 DCHECK(target_render_pass_id.layer_id == id()); | 250 DCHECK(target_render_pass_id.layer_id == id()); |
| 251 | 251 |
| 252 int render_pass_index = IdToIndex(target_render_pass_id.index); | 252 int render_pass_index = IdToIndex(target_render_pass_id.index); |
| 253 const RenderPass* delegated_render_pass = | 253 const RenderPass* delegated_render_pass = |
| 254 render_passes_in_draw_order_[render_pass_index]; | 254 render_passes_in_draw_order_[render_pass_index]; |
| 255 AppendRenderPassQuads( | 255 AppendRenderPassQuads( |
| 256 quad_sink, append_quads_data, delegated_render_pass, frame_size); | 256 quad_sink, append_quads_data, delegated_render_pass, frame_size); |
| 257 } | 257 } |
| 258 } | 258 } |
| 259 | 259 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 void DelegatedRendererLayerImpl::ClearChildId() { | 416 void DelegatedRendererLayerImpl::ClearChildId() { |
| 417 if (!child_id_) | 417 if (!child_id_) |
| 418 return; | 418 return; |
| 419 | 419 |
| 420 ResourceProvider* resource_provider = layer_tree_impl()->resource_provider(); | 420 ResourceProvider* resource_provider = layer_tree_impl()->resource_provider(); |
| 421 resource_provider->DestroyChild(child_id_); | 421 resource_provider->DestroyChild(child_id_); |
| 422 child_id_ = 0; | 422 child_id_ = 0; |
| 423 } | 423 } |
| 424 | 424 |
| 425 } // namespace cc | 425 } // namespace cc |
| OLD | NEW |