OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #if USE(ACCELERATED_COMPOSITING) | 7 #if USE(ACCELERATED_COMPOSITING) |
8 | 8 |
9 #include "CCRenderSurface.h" | 9 #include "CCRenderSurface.h" |
10 | 10 |
11 #include "base/stringprintf.h" | 11 #include "base/stringprintf.h" |
12 #include "CCDamageTracker.h" | 12 #include "CCDamageTracker.h" |
13 #include "CCDebugBorderDrawQuad.h" | 13 #include "CCDebugBorderDrawQuad.h" |
| 14 #include "CCDelegatedRendererLayerImpl.h" |
14 #include "CCLayerImpl.h" | 15 #include "CCLayerImpl.h" |
15 #include "CCMathUtil.h" | 16 #include "CCMathUtil.h" |
16 #include "CCQuadSink.h" | 17 #include "CCQuadSink.h" |
17 #include "CCRenderPass.h" | 18 #include "CCRenderPass.h" |
18 #include "CCRenderPassDrawQuad.h" | 19 #include "CCRenderPassDrawQuad.h" |
19 #include "CCRenderPassSink.h" | 20 #include "CCRenderPassSink.h" |
20 #include "CCSharedQuadState.h" | 21 #include "CCSharedQuadState.h" |
21 #include <public/WebTransformationMatrix.h> | 22 #include <public/WebTransformationMatrix.h> |
22 | 23 |
23 using WebKit::WebTransformationMatrix; | 24 using WebKit::WebTransformationMatrix; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 // | 138 // |
138 ASSERT(m_owningLayer); | 139 ASSERT(m_owningLayer); |
139 return m_surfacePropertyChanged || m_owningLayer->layerPropertyChanged(); | 140 return m_surfacePropertyChanged || m_owningLayer->layerPropertyChanged(); |
140 } | 141 } |
141 | 142 |
142 bool CCRenderSurface::surfacePropertyChangedOnlyFromDescendant() const | 143 bool CCRenderSurface::surfacePropertyChangedOnlyFromDescendant() const |
143 { | 144 { |
144 return m_surfacePropertyChanged && !m_owningLayer->layerPropertyChanged(); | 145 return m_surfacePropertyChanged && !m_owningLayer->layerPropertyChanged(); |
145 } | 146 } |
146 | 147 |
| 148 void CCRenderSurface::addContributingDelegatedRenderPassLayer(CCLayerImpl* layer
) |
| 149 { |
| 150 ASSERT(m_layerList.contains(layer)); |
| 151 CCDelegatedRendererLayerImpl* delegatedRendererLayer = static_cast<CCDelegat
edRendererLayerImpl*>(layer); |
| 152 m_contributingDelegatedRenderPassLayerList.append(delegatedRendererLayer); |
| 153 } |
| 154 |
| 155 void CCRenderSurface::clearLayerLists() |
| 156 { |
| 157 m_layerList.clear(); |
| 158 m_contributingDelegatedRenderPassLayerList.clear(); |
| 159 } |
| 160 |
147 static inline IntRect computeClippedRectInTarget(const CCLayerImpl* owningLayer) | 161 static inline IntRect computeClippedRectInTarget(const CCLayerImpl* owningLayer) |
148 { | 162 { |
149 ASSERT(owningLayer->parent()); | 163 ASSERT(owningLayer->parent()); |
150 | 164 |
151 const CCLayerImpl* renderTarget = owningLayer->parent()->renderTarget(); | 165 const CCLayerImpl* renderTarget = owningLayer->parent()->renderTarget(); |
152 const CCRenderSurface* self = owningLayer->renderSurface(); | 166 const CCRenderSurface* self = owningLayer->renderSurface(); |
153 | 167 |
154 IntRect clippedRectInTarget = self->clipRect(); | 168 IntRect clippedRectInTarget = self->clipRect(); |
155 if (owningLayer->backgroundFilters().hasFilterThatMovesPixels()) { | 169 if (owningLayer->backgroundFilters().hasFilterThatMovesPixels()) { |
156 // If the layer has background filters that move pixels, we cannot sciss
or as tightly. | 170 // If the layer has background filters that move pixels, we cannot sciss
or as tightly. |
(...skipping 10 matching lines...) Expand all Loading... |
167 CCRenderPass::Id CCRenderSurface::renderPassId() | 181 CCRenderPass::Id CCRenderSurface::renderPassId() |
168 { | 182 { |
169 int layerId = m_owningLayer->id(); | 183 int layerId = m_owningLayer->id(); |
170 int subId = 0; | 184 int subId = 0; |
171 ASSERT(layerId > 0); | 185 ASSERT(layerId > 0); |
172 return CCRenderPass::Id(layerId, subId); | 186 return CCRenderPass::Id(layerId, subId); |
173 } | 187 } |
174 | 188 |
175 void CCRenderSurface::appendRenderPasses(CCRenderPassSink& passSink) | 189 void CCRenderSurface::appendRenderPasses(CCRenderPassSink& passSink) |
176 { | 190 { |
| 191 for (size_t i = 0; i < m_contributingDelegatedRenderPassLayerList.size(); ++
i) |
| 192 m_contributingDelegatedRenderPassLayerList[i]->appendContributingRenderP
asses(passSink); |
| 193 |
177 OwnPtr<CCRenderPass> pass = CCRenderPass::create(renderPassId(), m_contentRe
ct, m_screenSpaceTransform); | 194 OwnPtr<CCRenderPass> pass = CCRenderPass::create(renderPassId(), m_contentRe
ct, m_screenSpaceTransform); |
178 pass->setDamageRect(m_damageTracker->currentDamageRect()); | 195 pass->setDamageRect(m_damageTracker->currentDamageRect()); |
179 pass->setFilters(m_owningLayer->filters()); | 196 pass->setFilters(m_owningLayer->filters()); |
180 pass->setBackgroundFilters(m_owningLayer->backgroundFilters()); | 197 pass->setBackgroundFilters(m_owningLayer->backgroundFilters()); |
181 passSink.appendRenderPass(pass.release()); | 198 passSink.appendRenderPass(pass.release()); |
182 } | 199 } |
183 | 200 |
184 void CCRenderSurface::appendQuads(CCQuadSink& quadSink, CCAppendQuadsData& appen
dQuadsData, bool forReplica, CCRenderPass::Id renderPassId) | 201 void CCRenderSurface::appendQuads(CCQuadSink& quadSink, CCAppendQuadsData& appen
dQuadsData, bool forReplica, CCRenderPass::Id renderPassId) |
185 { | 202 { |
186 ASSERT(!forReplica || m_owningLayer->hasReplica()); | 203 ASSERT(!forReplica || m_owningLayer->hasReplica()); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 | 244 |
228 CCResourceProvider::ResourceId maskResourceId = maskLayer ? maskLayer->conte
ntsResourceId() : 0; | 245 CCResourceProvider::ResourceId maskResourceId = maskLayer ? maskLayer->conte
ntsResourceId() : 0; |
229 IntRect contentsChangedSinceLastFrame = contentsChanged() ? m_contentRect :
IntRect(); | 246 IntRect contentsChangedSinceLastFrame = contentsChanged() ? m_contentRect :
IntRect(); |
230 | 247 |
231 quadSink.append(CCRenderPassDrawQuad::create(sharedQuadState, contentRect(),
renderPassId, forReplica, maskResourceId, contentsChangedSinceLastFrame, | 248 quadSink.append(CCRenderPassDrawQuad::create(sharedQuadState, contentRect(),
renderPassId, forReplica, maskResourceId, contentsChangedSinceLastFrame, |
232 maskTexCoordScaleX, maskTexCoor
dScaleY, maskTexCoordOffsetX, maskTexCoordOffsetY), appendQuadsData); | 249 maskTexCoordScaleX, maskTexCoor
dScaleY, maskTexCoordOffsetX, maskTexCoordOffsetY), appendQuadsData); |
233 } | 250 } |
234 | 251 |
235 } | 252 } |
236 #endif // USE(ACCELERATED_COMPOSITING) | 253 #endif // USE(ACCELERATED_COMPOSITING) |
OLD | NEW |