Chromium Code Reviews| Index: cc/delegated_renderer_layer_impl.cc |
| diff --git a/cc/delegated_renderer_layer_impl.cc b/cc/delegated_renderer_layer_impl.cc |
| index e2c3739c3373731bd1b3b2f19562b397d3b89b25..c9c2a4e68e0dac519a0e7430306845b5ad7902e5 100644 |
| --- a/cc/delegated_renderer_layer_impl.cc |
| +++ b/cc/delegated_renderer_layer_impl.cc |
| @@ -107,6 +107,11 @@ void DelegatedRendererLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData |
| RenderPass::Id targetRenderPassId = appendQuadsData.renderPassId; |
| + const RenderPass* rootDelegatedRenderPass = m_renderPassesInDrawOrder.back(); |
| + |
| + DCHECK(rootDelegatedRenderPass->output_rect.origin().IsOrigin()); |
| + gfx::Size frameSize = rootDelegatedRenderPass->output_rect.size(); |
| + |
| // If the index of the renderPassId is 0, then it is a renderPass generated for a layer |
| // in this compositor, not the delegated renderer. Then we want to merge our root renderPass with |
| // the target renderPass. Otherwise, it is some renderPass which we added from the delegated |
| @@ -116,19 +121,18 @@ void DelegatedRendererLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData |
| // Verify that the renderPass we are appending to is created our renderTarget. |
| DCHECK(targetRenderPassId.layer_id == renderTarget()->id()); |
| - const RenderPass* rootDelegatedRenderPass = m_renderPassesInDrawOrder.back(); |
| - appendRenderPassQuads(quadSink, appendQuadsData, rootDelegatedRenderPass); |
| + appendRenderPassQuads(quadSink, appendQuadsData, rootDelegatedRenderPass, frameSize); |
| } else { |
| // Verify that the renderPass we are appending to was created by us. |
| DCHECK(targetRenderPassId.layer_id == id()); |
| int renderPassIndex = idToIndex(targetRenderPassId.index); |
| const RenderPass* delegatedRenderPass = m_renderPassesInDrawOrder[renderPassIndex]; |
| - appendRenderPassQuads(quadSink, appendQuadsData, delegatedRenderPass); |
| + appendRenderPassQuads(quadSink, appendQuadsData, delegatedRenderPass, frameSize); |
| } |
| } |
| -void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsData, const RenderPass* delegatedRenderPass) const |
| +void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsData, const RenderPass* delegatedRenderPass, gfx::Size frameSize) const |
| { |
| const SharedQuadState* currentSharedQuadState = 0; |
| SharedQuadState* copiedSharedQuadState = 0; |
| @@ -145,9 +149,18 @@ void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, Appen |
| // This layer must be drawing to a renderTarget other than itself. |
| DCHECK(renderTarget() != this); |
| - copiedSharedQuadState->content_to_target_transform = drawTransform() * copiedSharedQuadState->content_to_target_transform; |
| - copiedSharedQuadState->clipped_rect_in_target = MathUtil::mapClippedRect(drawTransform(), copiedSharedQuadState->clipped_rect_in_target); |
| - copiedSharedQuadState->clip_rect = MathUtil::mapClippedRect(drawTransform(), copiedSharedQuadState->clip_rect); |
| + // Don't allow areas inside the bounds that are empty. |
| + DCHECK(m_displaySize.IsEmpty() || gfx::Rect(m_displaySize).Contains(gfx::Rect(bounds()))); |
| + gfx::Size displaySize = m_displaySize.IsEmpty() ? bounds() : m_displaySize; |
| + |
| + gfx::Transform delegatedFrameToLayerSpaceTransform; |
| + delegatedFrameToLayerSpaceTransform.Scale( |
| + static_cast<double>(displaySize.width()) / frameSize.width(), |
| + static_cast<double>(displaySize.height()) / frameSize.height()); |
|
piman
2013/01/19 02:02:47
perf nit: should we factor out drawTransform() * d
|
| + |
| + copiedSharedQuadState->content_to_target_transform = drawTransform() * delegatedFrameToLayerSpaceTransform * copiedSharedQuadState->content_to_target_transform; |
| + copiedSharedQuadState->clipped_rect_in_target = MathUtil::mapClippedRect(drawTransform() * delegatedFrameToLayerSpaceTransform, copiedSharedQuadState->clipped_rect_in_target); |
| + copiedSharedQuadState->clip_rect = MathUtil::mapClippedRect(drawTransform() * delegatedFrameToLayerSpaceTransform, copiedSharedQuadState->clip_rect); |
| copiedSharedQuadState->opacity *= drawOpacity(); |
| } |
| } |