| 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 "cc/math_util.h" | 9 #include "cc/math_util.h" |
| 10 #include "ui/gfx/rect_conversions.h" | 10 #include "ui/gfx/rect_conversions.h" |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 | 153 |
| 154 void DirectRenderer::drawFrame(const RenderPassList& renderPassesInDrawOrder, co
nst RenderPassIdHashMap& renderPassesById) | 154 void DirectRenderer::drawFrame(const RenderPassList& renderPassesInDrawOrder, co
nst RenderPassIdHashMap& renderPassesById) |
| 155 { | 155 { |
| 156 const RenderPass* rootRenderPass = renderPassesInDrawOrder.back(); | 156 const RenderPass* rootRenderPass = renderPassesInDrawOrder.back(); |
| 157 DCHECK(rootRenderPass); | 157 DCHECK(rootRenderPass); |
| 158 | 158 |
| 159 DrawingFrame frame; | 159 DrawingFrame frame; |
| 160 frame.renderPassesById = &renderPassesById; | 160 frame.renderPassesById = &renderPassesById; |
| 161 frame.rootRenderPass = rootRenderPass; | 161 frame.rootRenderPass = rootRenderPass; |
| 162 frame.rootDamageRect = capabilities().usingPartialSwap ? rootRenderPass->dam
ageRect() : rootRenderPass->outputRect(); | 162 frame.rootDamageRect = capabilities().usingPartialSwap ? rootRenderPass->dam
ageRect() : rootRenderPass->outputRect(); |
| 163 frame.rootDamageRect = frame.rootDamageRect.Intersect(gfx::Rect(gfx::Point()
, viewportSize())); | 163 frame.rootDamageRect.Intersect(gfx::Rect(gfx::Point(), viewportSize())); |
| 164 | 164 |
| 165 beginDrawingFrame(frame); | 165 beginDrawingFrame(frame); |
| 166 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) | 166 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) |
| 167 drawRenderPass(frame, renderPassesInDrawOrder[i]); | 167 drawRenderPass(frame, renderPassesInDrawOrder[i]); |
| 168 finishDrawingFrame(frame); | 168 finishDrawingFrame(frame); |
| 169 } | 169 } |
| 170 | 170 |
| 171 void DirectRenderer::drawRenderPass(DrawingFrame& frame, const RenderPass* rende
rPass) | 171 void DirectRenderer::drawRenderPass(DrawingFrame& frame, const RenderPass* rende
rPass) |
| 172 { | 172 { |
| 173 if (!useRenderPass(frame, renderPass)) | 173 if (!useRenderPass(frame, renderPass)) |
| 174 return; | 174 return; |
| 175 | 175 |
| 176 frame.scissorRectInRenderPassSpace = frame.currentRenderPass->outputRect(); | 176 frame.scissorRectInRenderPassSpace = frame.currentRenderPass->outputRect(); |
| 177 if (frame.rootDamageRect != frame.rootRenderPass->outputRect()) { | 177 if (frame.rootDamageRect != frame.rootRenderPass->outputRect()) { |
| 178 WebTransformationMatrix inverseTransformToRoot = frame.currentRenderPass
->transformToRootTarget().inverse(); | 178 WebTransformationMatrix inverseTransformToRoot = frame.currentRenderPass
->transformToRootTarget().inverse(); |
| 179 gfx::RectF damageRectInRenderPassSpace = MathUtil::projectClippedRect(in
verseTransformToRoot, cc::FloatRect(frame.rootDamageRect)); | 179 gfx::RectF damageRectInRenderPassSpace = MathUtil::projectClippedRect(in
verseTransformToRoot, cc::FloatRect(frame.rootDamageRect)); |
| 180 frame.scissorRectInRenderPassSpace = frame.scissorRectInRenderPassSpace.
Intersect(damageRectInRenderPassSpace); | 180 frame.scissorRectInRenderPassSpace.Intersect(damageRectInRenderPassSpace
); |
| 181 } | 181 } |
| 182 | 182 |
| 183 enableScissorTestRect(moveScissorToWindowSpace(frame, frame.scissorRectInRen
derPassSpace)); | 183 enableScissorTestRect(moveScissorToWindowSpace(frame, frame.scissorRectInRen
derPassSpace)); |
| 184 clearFramebuffer(frame); | 184 clearFramebuffer(frame); |
| 185 | 185 |
| 186 const QuadList& quadList = renderPass->quadList(); | 186 const QuadList& quadList = renderPass->quadList(); |
| 187 for (QuadList::constBackToFrontIterator it = quadList.backToFrontBegin(); it
!= quadList.backToFrontEnd(); ++it) { | 187 for (QuadList::constBackToFrontIterator it = quadList.backToFrontBegin(); it
!= quadList.backToFrontEnd(); ++it) { |
| 188 gfx::RectF quadScissorRect = frame.scissorRectInRenderPassSpace.Intersec
t((*it)->clippedRectInTarget()); | 188 gfx::RectF quadScissorRect = frame.scissorRectInRenderPassSpace; |
| 189 quadScissorRect.Intersect((*it)->clippedRectInTarget()); |
| 189 if (!quadScissorRect.IsEmpty()) { | 190 if (!quadScissorRect.IsEmpty()) { |
| 190 enableScissorTestRect(moveScissorToWindowSpace(frame, quadScissorRec
t)); | 191 enableScissorTestRect(moveScissorToWindowSpace(frame, quadScissorRec
t)); |
| 191 drawQuad(frame, *it); | 192 drawQuad(frame, *it); |
| 192 } | 193 } |
| 193 } | 194 } |
| 194 | 195 |
| 195 CachedTexture* texture = m_renderPassTextures.get(renderPass->id()); | 196 CachedTexture* texture = m_renderPassTextures.get(renderPass->id()); |
| 196 if (texture) | 197 if (texture) |
| 197 texture->setIsComplete(!renderPass->hasOcclusionFromOutsideTargetSurface
()); | 198 texture->setIsComplete(!renderPass->hasOcclusionFromOutsideTargetSurface
()); |
| 198 } | 199 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 229 return cc::IntSize(pass->outputRect().size()); | 230 return cc::IntSize(pass->outputRect().size()); |
| 230 } | 231 } |
| 231 | 232 |
| 232 // static | 233 // static |
| 233 GLenum DirectRenderer::renderPassTextureFormat(const RenderPass*) | 234 GLenum DirectRenderer::renderPassTextureFormat(const RenderPass*) |
| 234 { | 235 { |
| 235 return GL_RGBA; | 236 return GL_RGBA; |
| 236 } | 237 } |
| 237 | 238 |
| 238 } | 239 } |
| OLD | NEW |