| 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/delegated_renderer_layer_impl.h" | 5 #include "cc/delegated_renderer_layer_impl.h" |
| 6 | 6 |
| 7 #include "cc/append_quads_data.h" | 7 #include "cc/append_quads_data.h" |
| 8 #include "cc/math_util.h" | 8 #include "cc/math_util.h" |
| 9 #include "cc/quad_sink.h" | 9 #include "cc/quad_sink.h" |
| 10 #include "cc/render_pass_draw_quad.h" | 10 #include "cc/render_pass_draw_quad.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 } | 28 } |
| 29 | 29 |
| 30 bool DelegatedRendererLayerImpl::hasContributingDelegatedRenderPasses() const | 30 bool DelegatedRendererLayerImpl::hasContributingDelegatedRenderPasses() const |
| 31 { | 31 { |
| 32 // The root RenderPass for the layer is merged with its target | 32 // The root RenderPass for the layer is merged with its target |
| 33 // RenderPass in each frame. So we only have extra RenderPasses | 33 // RenderPass in each frame. So we only have extra RenderPasses |
| 34 // to merge when we have a non-root RenderPass present. | 34 // to merge when we have a non-root RenderPass present. |
| 35 return m_renderPassesInDrawOrder.size() > 1; | 35 return m_renderPassesInDrawOrder.size() > 1; |
| 36 } | 36 } |
| 37 | 37 |
| 38 void DelegatedRendererLayerImpl::setRenderPasses(ScopedPtrVector<RenderPass>& re
nderPassesInDrawOrder) | 38 void DelegatedRendererLayerImpl::setRenderPasses(ScopedPtrVector<RenderPass>& re
nderPassesInDrawOrder, gfx::Size frameSize) |
| 39 { | 39 { |
| 40 gfx::RectF oldRootDamage; | 40 gfx::RectF oldRootDamage; |
| 41 if (!m_renderPassesInDrawOrder.isEmpty()) | 41 if (!m_renderPassesInDrawOrder.isEmpty()) |
| 42 oldRootDamage = m_renderPassesInDrawOrder.last()->damage_rect; | 42 oldRootDamage = m_renderPassesInDrawOrder.last()->damage_rect; |
| 43 | 43 |
| 44 clearRenderPasses(); | 44 clearRenderPasses(); |
| 45 | 45 |
| 46 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) { | 46 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) { |
| 47 m_renderPassesIndexById.insert(std::pair<RenderPass::Id, int>(renderPass
esInDrawOrder[i]->id, i)); | 47 m_renderPassesIndexById.insert(std::pair<RenderPass::Id, int>(renderPass
esInDrawOrder[i]->id, i)); |
| 48 m_renderPassesInDrawOrder.append(renderPassesInDrawOrder.take(i)); | 48 m_renderPassesInDrawOrder.append(renderPassesInDrawOrder.take(i)); |
| 49 } | 49 } |
| 50 renderPassesInDrawOrder.clear(); | 50 renderPassesInDrawOrder.clear(); |
| 51 | 51 |
| 52 if (!m_renderPassesInDrawOrder.isEmpty()) | 52 if (!m_renderPassesInDrawOrder.isEmpty()) |
| 53 m_renderPassesInDrawOrder.last()->damage_rect.Union(oldRootDamage); | 53 m_renderPassesInDrawOrder.last()->damage_rect.Union(oldRootDamage); |
| 54 |
| 55 m_frameSize = frameSize; |
| 54 } | 56 } |
| 55 | 57 |
| 56 void DelegatedRendererLayerImpl::clearRenderPasses() | 58 void DelegatedRendererLayerImpl::clearRenderPasses() |
| 57 { | 59 { |
| 58 // FIXME: Release the resources back to the nested compositor. | 60 // FIXME: Release the resources back to the nested compositor. |
| 59 m_renderPassesIndexById.clear(); | 61 m_renderPassesIndexById.clear(); |
| 60 m_renderPassesInDrawOrder.clear(); | 62 m_renderPassesInDrawOrder.clear(); |
| 61 } | 63 } |
| 62 | 64 |
| 63 void DelegatedRendererLayerImpl::didLoseOutputSurface() | 65 void DelegatedRendererLayerImpl::didLoseOutputSurface() |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 if (quad->shared_quad_state != currentSharedQuadState) { | 140 if (quad->shared_quad_state != currentSharedQuadState) { |
| 139 currentSharedQuadState = quad->shared_quad_state; | 141 currentSharedQuadState = quad->shared_quad_state; |
| 140 copiedSharedQuadState = quadSink.useSharedQuadState(currentSharedQua
dState->Copy()); | 142 copiedSharedQuadState = quadSink.useSharedQuadState(currentSharedQua
dState->Copy()); |
| 141 bool targetIsFromDelegatedRendererLayer = appendQuadsData.renderPass
Id.layer_id == id(); | 143 bool targetIsFromDelegatedRendererLayer = appendQuadsData.renderPass
Id.layer_id == id(); |
| 142 if (!targetIsFromDelegatedRendererLayer) { | 144 if (!targetIsFromDelegatedRendererLayer) { |
| 143 // Should be the root render pass. | 145 // Should be the root render pass. |
| 144 DCHECK(delegatedRenderPass == m_renderPassesInDrawOrder.last()); | 146 DCHECK(delegatedRenderPass == m_renderPassesInDrawOrder.last()); |
| 145 // This layer must be drawing to a renderTarget other than itself. | 147 // This layer must be drawing to a renderTarget other than itself. |
| 146 DCHECK(renderTarget() != this); | 148 DCHECK(renderTarget() != this); |
| 147 | 149 |
| 148 copiedSharedQuadState->content_to_target_transform = drawTransform
() * copiedSharedQuadState->content_to_target_transform; | 150 gfx::Transform delegatedFrameToLayerSpaceTransform; |
| 151 delegatedFrameToLayerSpaceTransform.Scale( |
| 152 static_cast<double>(m_frameSize.width()) / bounds().width(), |
| 153 static_cast<double>(m_frameSize.height()) / bounds().height())
; |
| 154 |
| 155 copiedSharedQuadState->content_to_target_transform = drawTransform
() * delegatedFrameToLayerSpaceTransform * copiedSharedQuadState->content_to_tar
get_transform; |
| 149 copiedSharedQuadState->clipped_rect_in_target = MathUtil::mapClipp
edRect(drawTransform(), copiedSharedQuadState->clipped_rect_in_target); | 156 copiedSharedQuadState->clipped_rect_in_target = MathUtil::mapClipp
edRect(drawTransform(), copiedSharedQuadState->clipped_rect_in_target); |
| 150 copiedSharedQuadState->clip_rect = MathUtil::mapClippedRect(drawTr
ansform(), copiedSharedQuadState->clip_rect); | 157 copiedSharedQuadState->clip_rect = MathUtil::mapClippedRect(drawTr
ansform(), copiedSharedQuadState->clip_rect); |
| 151 copiedSharedQuadState->opacity *= drawOpacity(); | 158 copiedSharedQuadState->opacity *= drawOpacity(); |
| 152 } | 159 } |
| 153 } | 160 } |
| 154 DCHECK(copiedSharedQuadState); | 161 DCHECK(copiedSharedQuadState); |
| 155 | 162 |
| 156 scoped_ptr<DrawQuad> copyQuad; | 163 scoped_ptr<DrawQuad> copyQuad; |
| 157 if (quad->material != DrawQuad::RENDER_PASS) | 164 if (quad->material != DrawQuad::RENDER_PASS) |
| 158 copyQuad = quad->Copy(copiedSharedQuadState); | 165 copyQuad = quad->Copy(copiedSharedQuadState); |
| 159 else { | 166 else { |
| 160 RenderPass::Id contributingDelegatedRenderPassId = RenderPassDrawQua
d::MaterialCast(quad)->render_pass_id; | 167 RenderPass::Id contributingDelegatedRenderPassId = RenderPassDrawQua
d::MaterialCast(quad)->render_pass_id; |
| 161 RenderPass::Id contributingRenderPassId = convertDelegatedRenderPass
Id(contributingDelegatedRenderPassId); | 168 RenderPass::Id contributingRenderPassId = convertDelegatedRenderPass
Id(contributingDelegatedRenderPassId); |
| 162 DCHECK(contributingRenderPassId != appendQuadsData.renderPassId); | 169 DCHECK(contributingRenderPassId != appendQuadsData.renderPassId); |
| 163 | 170 |
| 164 copyQuad = RenderPassDrawQuad::MaterialCast(quad)->Copy(copiedShared
QuadState, contributingRenderPassId).PassAs<DrawQuad>(); | 171 copyQuad = RenderPassDrawQuad::MaterialCast(quad)->Copy(copiedShared
QuadState, contributingRenderPassId).PassAs<DrawQuad>(); |
| 165 } | 172 } |
| 166 DCHECK(copyQuad.get()); | 173 DCHECK(copyQuad.get()); |
| 167 | 174 |
| 168 quadSink.append(copyQuad.Pass(), appendQuadsData); | 175 quadSink.append(copyQuad.Pass(), appendQuadsData); |
| 169 } | 176 } |
| 170 } | 177 } |
| 171 | 178 |
| 172 const char* DelegatedRendererLayerImpl::layerTypeAsString() const | 179 const char* DelegatedRendererLayerImpl::layerTypeAsString() const |
| 173 { | 180 { |
| 174 return "DelegatedRendererLayer"; | 181 return "DelegatedRendererLayer"; |
| 175 } | 182 } |
| 176 | 183 |
| 177 } // namespace cc | 184 } // namespace cc |
| OLD | NEW |