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 "cc/direct_renderer.h" | 5 #include "cc/direct_renderer.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
178 renderPassesInDrawOrder.clear(); | 178 renderPassesInDrawOrder.clear(); |
179 } | 179 } |
180 | 180 |
181 gfx::RectF DirectRenderer::computeScissorRectForRenderPass(const DrawingFrame& f rame) | 181 gfx::RectF DirectRenderer::computeScissorRectForRenderPass(const DrawingFrame& f rame) |
182 { | 182 { |
183 gfx::RectF renderPassScissor = frame.currentRenderPass->output_rect; | 183 gfx::RectF renderPassScissor = frame.currentRenderPass->output_rect; |
184 | 184 |
185 if (frame.rootDamageRect == frame.rootRenderPass->output_rect) | 185 if (frame.rootDamageRect == frame.rootRenderPass->output_rect) |
186 return renderPassScissor; | 186 return renderPassScissor; |
187 | 187 |
188 gfx::Transform inverseTransform = MathUtil::inverse(frame.currentRenderPass- >transform_to_root_target); | 188 gfx::Transform inverseTransform(gfx::Transform::kSkipInitialization); |
189 gfx::RectF damageRectInRenderPassSpace = MathUtil::projectClippedRect(invers eTransform, frame.rootDamageRect); | 189 if (frame.currentRenderPass->transform_to_root_target.GetInverse(&inverseTra nsform)) { |
danakj
2013/01/02 14:45:16
I'm still not a fan that after the if() statement,
shawnsingh
2013/01/02 18:36:01
The performance improvement comes from avoiding du
| |
190 renderPassScissor.Intersect(damageRectInRenderPassSpace); | 190 // Only intersect inverse-projected damage if the transform is invertibl e. |
191 gfx::RectF damageRectInRenderPassSpace = MathUtil::projectClippedRect(in verseTransform, frame.rootDamageRect); | |
192 renderPassScissor.Intersect(damageRectInRenderPassSpace); | |
193 } | |
191 | 194 |
192 return renderPassScissor; | 195 return renderPassScissor; |
193 } | 196 } |
194 | 197 |
195 void DirectRenderer::setScissorStateForQuad(const DrawingFrame& frame, const Dra wQuad& quad) | 198 void DirectRenderer::setScissorStateForQuad(const DrawingFrame& frame, const Dra wQuad& quad) |
196 { | 199 { |
197 if (quad.isClipped()) { | 200 if (quad.isClipped()) { |
198 gfx::RectF quadScissorRect = quad.clipRect(); | 201 gfx::RectF quadScissorRect = quad.clipRect(); |
199 setScissorTestRect(moveScissorToWindowSpace(frame, quadScissorRect)); | 202 setScissorTestRect(moveScissorToWindowSpace(frame, quadScissorRect)); |
200 } | 203 } |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
294 return pass->output_rect.size(); | 297 return pass->output_rect.size(); |
295 } | 298 } |
296 | 299 |
297 // static | 300 // static |
298 GLenum DirectRenderer::renderPassTextureFormat(const RenderPass*) | 301 GLenum DirectRenderer::renderPassTextureFormat(const RenderPass*) |
299 { | 302 { |
300 return GL_RGBA; | 303 return GL_RGBA; |
301 } | 304 } |
302 | 305 |
303 } // namespace cc | 306 } // namespace cc |
OLD | NEW |