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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "CCDirectRenderer.h" | 7 #include "CCDirectRenderer.h" |
8 | 8 |
9 #include "CCMathUtil.h" | 9 #include "CCMathUtil.h" |
10 #include <public/WebTransformationMatrix.h> | 10 #include <public/WebTransformationMatrix.h> |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 base::hash_map<CCRenderPass::Id, const CCRenderPass*>::const_iterator it
= renderPassesInFrame.find(passIterator->first); | 125 base::hash_map<CCRenderPass::Id, const CCRenderPass*>::const_iterator it
= renderPassesInFrame.find(passIterator->first); |
126 if (it == renderPassesInFrame.end()) { | 126 if (it == renderPassesInFrame.end()) { |
127 passesToDelete.push_back(passIterator->first); | 127 passesToDelete.push_back(passIterator->first); |
128 continue; | 128 continue; |
129 } | 129 } |
130 | 130 |
131 const CCRenderPass* renderPassInFrame = it->second; | 131 const CCRenderPass* renderPassInFrame = it->second; |
132 const IntSize& requiredSize = renderPassTextureSize(renderPassInFrame); | 132 const IntSize& requiredSize = renderPassTextureSize(renderPassInFrame); |
133 GC3Denum requiredFormat = renderPassTextureFormat(renderPassInFrame); | 133 GC3Denum requiredFormat = renderPassTextureFormat(renderPassInFrame); |
134 CachedTexture* texture = passIterator->second; | 134 CachedTexture* texture = passIterator->second; |
135 ASSERT(texture); | 135 DCHECK(texture); |
136 | 136 |
137 if (texture->id() && (texture->size() != requiredSize || texture->format
() != requiredFormat)) | 137 if (texture->id() && (texture->size() != requiredSize || texture->format
() != requiredFormat)) |
138 texture->free(); | 138 texture->free(); |
139 } | 139 } |
140 | 140 |
141 // Delete RenderPass textures from the previous frame that will not be used
again. | 141 // Delete RenderPass textures from the previous frame that will not be used
again. |
142 for (size_t i = 0; i < passesToDelete.size(); ++i) | 142 for (size_t i = 0; i < passesToDelete.size(); ++i) |
143 m_renderPassTextures.erase(passesToDelete[i]); | 143 m_renderPassTextures.erase(passesToDelete[i]); |
144 | 144 |
145 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) { | 145 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) { |
146 if (!m_renderPassTextures.contains(renderPassesInDrawOrder[i]->id())) { | 146 if (!m_renderPassTextures.contains(renderPassesInDrawOrder[i]->id())) { |
147 scoped_ptr<CachedTexture> texture = CachedTexture::create(m_resourcePr
ovider); | 147 scoped_ptr<CachedTexture> texture = CachedTexture::create(m_resourcePr
ovider); |
148 m_renderPassTextures.set(renderPassesInDrawOrder[i]->id(), texture.P
ass()); | 148 m_renderPassTextures.set(renderPassesInDrawOrder[i]->id(), texture.P
ass()); |
149 } | 149 } |
150 } | 150 } |
151 } | 151 } |
152 | 152 |
153 void CCDirectRenderer::drawFrame(const CCRenderPassList& renderPassesInDrawOrder
, const CCRenderPassIdHashMap& renderPassesById) | 153 void CCDirectRenderer::drawFrame(const CCRenderPassList& renderPassesInDrawOrder
, const CCRenderPassIdHashMap& renderPassesById) |
154 { | 154 { |
155 const CCRenderPass* rootRenderPass = renderPassesInDrawOrder.back(); | 155 const CCRenderPass* rootRenderPass = renderPassesInDrawOrder.back(); |
156 ASSERT(rootRenderPass); | 156 DCHECK(rootRenderPass); |
157 | 157 |
158 DrawingFrame frame; | 158 DrawingFrame frame; |
159 frame.renderPassesById = &renderPassesById; | 159 frame.renderPassesById = &renderPassesById; |
160 frame.rootRenderPass = rootRenderPass; | 160 frame.rootRenderPass = rootRenderPass; |
161 frame.rootDamageRect = capabilities().usingPartialSwap ? rootRenderPass->dam
ageRect() : rootRenderPass->outputRect(); | 161 frame.rootDamageRect = capabilities().usingPartialSwap ? rootRenderPass->dam
ageRect() : rootRenderPass->outputRect(); |
162 frame.rootDamageRect.intersect(IntRect(IntPoint::zero(), viewportSize())); | 162 frame.rootDamageRect.intersect(IntRect(IntPoint::zero(), viewportSize())); |
163 | 163 |
164 beginDrawingFrame(frame); | 164 beginDrawingFrame(frame); |
165 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) | 165 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) |
166 drawRenderPass(frame, renderPassesInDrawOrder[i]); | 166 drawRenderPass(frame, renderPassesInDrawOrder[i]); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 frame.currentTexture = 0; | 202 frame.currentTexture = 0; |
203 | 203 |
204 if (renderPass == frame.rootRenderPass) { | 204 if (renderPass == frame.rootRenderPass) { |
205 bindFramebufferToOutputSurface(frame); | 205 bindFramebufferToOutputSurface(frame); |
206 initializeMatrices(frame, renderPass->outputRect(), flippedFramebuffer()
); | 206 initializeMatrices(frame, renderPass->outputRect(), flippedFramebuffer()
); |
207 setDrawViewportSize(renderPass->outputRect().size()); | 207 setDrawViewportSize(renderPass->outputRect().size()); |
208 return true; | 208 return true; |
209 } | 209 } |
210 | 210 |
211 CachedTexture* texture = m_renderPassTextures.get(renderPass->id()); | 211 CachedTexture* texture = m_renderPassTextures.get(renderPass->id()); |
212 ASSERT(texture); | 212 DCHECK(texture); |
213 if (!texture->id() && !texture->allocate(CCRenderer::ImplPool, renderPassTex
tureSize(renderPass), renderPassTextureFormat(renderPass), CCResourceProvider::T
extureUsageFramebuffer)) | 213 if (!texture->id() && !texture->allocate(CCRenderer::ImplPool, renderPassTex
tureSize(renderPass), renderPassTextureFormat(renderPass), CCResourceProvider::T
extureUsageFramebuffer)) |
214 return false; | 214 return false; |
215 | 215 |
216 return bindFramebufferToTexture(frame, texture, renderPass->outputRect()); | 216 return bindFramebufferToTexture(frame, texture, renderPass->outputRect()); |
217 } | 217 } |
218 | 218 |
219 bool CCDirectRenderer::haveCachedResourcesForRenderPassId(CCRenderPass::Id id) c
onst | 219 bool CCDirectRenderer::haveCachedResourcesForRenderPassId(CCRenderPass::Id id) c
onst |
220 { | 220 { |
221 CachedTexture* texture = m_renderPassTextures.get(id); | 221 CachedTexture* texture = m_renderPassTextures.get(id); |
222 return texture && texture->id() && texture->isComplete(); | 222 return texture && texture->id() && texture->isComplete(); |
223 } | 223 } |
224 | 224 |
225 // static | 225 // static |
226 IntSize CCDirectRenderer::renderPassTextureSize(const CCRenderPass* pass) | 226 IntSize CCDirectRenderer::renderPassTextureSize(const CCRenderPass* pass) |
227 { | 227 { |
228 return pass->outputRect().size(); | 228 return pass->outputRect().size(); |
229 } | 229 } |
230 | 230 |
231 // static | 231 // static |
232 GC3Denum CCDirectRenderer::renderPassTextureFormat(const CCRenderPass*) | 232 GC3Denum CCDirectRenderer::renderPassTextureFormat(const CCRenderPass*) |
233 { | 233 { |
234 return GraphicsContext3D::RGBA; | 234 return GraphicsContext3D::RGBA; |
235 } | 235 } |
236 | 236 |
237 } | 237 } |
OLD | NEW |