Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Side by Side Diff: cc/delegated_renderer_layer_impl.cc

Issue 11821015: cc: Use the size of the source frame along with the source frame's renderpasses (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698