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

Side by Side Diff: cc/CCDirectRenderer.cpp

Issue 10989028: cc: Remove WebCore dependecies from CCRenderPass and CCDrawQuad classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 "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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
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.last(); 155 const CCRenderPass* rootRenderPass = renderPassesInDrawOrder.back();
156 ASSERT(rootRenderPass); 156 ASSERT(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 ? static_cast<FloatRe ct>(rootRenderPass->damageRect()) : static_cast<IntRect>(rootRenderPass->outputR ect());
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]);
167 finishDrawingFrame(frame); 167 finishDrawingFrame(frame);
168 } 168 }
169 169
170 void CCDirectRenderer::drawRenderPass(DrawingFrame& frame, const CCRenderPass* r enderPass) 170 void CCDirectRenderer::drawRenderPass(DrawingFrame& frame, const CCRenderPass* r enderPass)
171 { 171 {
172 if (!useRenderPass(frame, renderPass)) 172 if (!useRenderPass(frame, renderPass))
173 return; 173 return;
174 174
175 frame.scissorRectInRenderPassSpace = frame.currentRenderPass->outputRect(); 175 frame.scissorRectInRenderPassSpace = frame.currentRenderPass->outputRect();
176 if (frame.rootDamageRect != frame.rootRenderPass->outputRect()) { 176 if (frame.rootDamageRect != static_cast<IntRect>(frame.rootRenderPass->outpu tRect())) {
177 WebTransformationMatrix inverseTransformToRoot = frame.currentRenderPass ->transformToRootTarget().inverse(); 177 WebTransformationMatrix inverseTransformToRoot = frame.currentRenderPass ->transformToRootTarget().inverse();
178 frame.scissorRectInRenderPassSpace.intersect(CCMathUtil::projectClippedR ect(inverseTransformToRoot, frame.rootDamageRect)); 178 frame.scissorRectInRenderPassSpace.intersect(CCMathUtil::projectClippedR ect(inverseTransformToRoot, frame.rootDamageRect));
179 } 179 }
180 180
181 enableScissorTestRect(moveScissorToWindowSpace(frame, frame.scissorRectInRen derPassSpace)); 181 enableScissorTestRect(moveScissorToWindowSpace(frame, frame.scissorRectInRen derPassSpace));
182 clearFramebuffer(frame); 182 clearFramebuffer(frame);
183 183
184 const CCQuadList& quadList = renderPass->quadList(); 184 const CCQuadList& quadList = renderPass->quadList();
185 for (CCQuadList::constBackToFrontIterator it = quadList.backToFrontBegin(); it != quadList.backToFrontEnd(); ++it) { 185 for (CCQuadList::constBackToFrontIterator it = quadList.backToFrontBegin(); it != quadList.backToFrontEnd(); ++it) {
186 FloatRect quadScissorRect = frame.scissorRectInRenderPassSpace; 186 FloatRect quadScissorRect = frame.scissorRectInRenderPassSpace;
187 quadScissorRect.intersect((*it)->clippedRectInTarget()); 187 quadScissorRect.intersect(static_cast<FloatRect>((*it)->clippedRectInTar get()));
188 if (!quadScissorRect.isEmpty()) { 188 if (!quadScissorRect.isEmpty()) {
189 enableScissorTestRect(moveScissorToWindowSpace(frame, quadScissorRec t)); 189 enableScissorTestRect(moveScissorToWindowSpace(frame, quadScissorRec t));
190 drawQuad(frame, *it); 190 drawQuad(frame, *it);
191 } 191 }
192 } 192 }
193 193
194 CachedTexture* texture = m_renderPassTextures.get(renderPass->id()); 194 CachedTexture* texture = m_renderPassTextures.get(renderPass->id());
195 if (texture) 195 if (texture)
196 texture->setIsComplete(!renderPass->hasOcclusionFromOutsideTargetSurface ()); 196 texture->setIsComplete(!renderPass->hasOcclusionFromOutsideTargetSurface ());
197 } 197 }
198 198
199 bool CCDirectRenderer::useRenderPass(DrawingFrame& frame, const CCRenderPass* re nderPass) 199 bool CCDirectRenderer::useRenderPass(DrawingFrame& frame, const CCRenderPass* re nderPass)
200 { 200 {
201 frame.currentRenderPass = renderPass; 201 frame.currentRenderPass = renderPass;
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(static_cast<IntRect>(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 ASSERT(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 static_cast<IntRect>(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 }
OLDNEW
« no previous file with comments | « cc/CCDelegatedRendererLayerImpl.cpp ('k') | cc/CCDrawQuad.h » ('j') | cc/scoped_ptr_hash_map.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698