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 |