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

Unified Diff: cc/delegated_renderer_layer_impl.cc

Issue 12040011: cc: Clip delegated quads to the correct clip rect. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased-on-no-clipped_rect_in_target Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/delegated_renderer_layer_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/delegated_renderer_layer_impl.cc
diff --git a/cc/delegated_renderer_layer_impl.cc b/cc/delegated_renderer_layer_impl.cc
index 1559bd3f28b81c0c18a18a224d75439d4a5e6b5d..1207d3d3e03d9ba297506177f99088f43180e08e 100644
--- a/cc/delegated_renderer_layer_impl.cc
+++ b/cc/delegated_renderer_layer_impl.cc
@@ -142,13 +142,8 @@ void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, Appen
if (quad->shared_quad_state != currentSharedQuadState) {
currentSharedQuadState = quad->shared_quad_state;
copiedSharedQuadState = quadSink.useSharedQuadState(currentSharedQuadState->Copy());
- bool targetIsFromDelegatedRendererLayer = appendQuadsData.renderPassId.layer_id == id();
- if (!targetIsFromDelegatedRendererLayer) {
- // Should be the root render pass.
- DCHECK(delegatedRenderPass == m_renderPassesInDrawOrder.back());
- // This layer must be drawing to a renderTarget other than itself.
- DCHECK(renderTarget() != this);
-
+ bool isRootDelegatedRenderPass = delegatedRenderPass == m_renderPassesInDrawOrder.back();
+ if (isRootDelegatedRenderPass) {
// Don't allow areas inside the bounds that are empty.
DCHECK(m_displaySize.IsEmpty() || gfx::Rect(m_displaySize).Contains(gfx::Rect(bounds())));
gfx::Size displaySize = m_displaySize.IsEmpty() ? bounds() : m_displaySize;
@@ -159,7 +154,24 @@ void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, Appen
static_cast<double>(displaySize.height()) / frameSize.height());
copiedSharedQuadState->content_to_target_transform = drawTransform() * delegatedFrameToLayerSpaceTransform * copiedSharedQuadState->content_to_target_transform;
- copiedSharedQuadState->clip_rect = MathUtil::mapClippedRect(drawTransform() * delegatedFrameToLayerSpaceTransform, copiedSharedQuadState->clip_rect);
+
+ if (renderTarget() == this) {
+ DCHECK(!isClipped());
+ DCHECK(renderSurface());
+ copiedSharedQuadState->clip_rect = MathUtil::mapClippedRect(
+ drawTransform() * delegatedFrameToLayerSpaceTransform,
+ copiedSharedQuadState->clip_rect);
+ } else {
+ gfx::Rect clip_rect = drawableContentRect();
+ if (copiedSharedQuadState->is_clipped) {
+ clip_rect.Intersect(MathUtil::mapClippedRect(
+ drawTransform() * delegatedFrameToLayerSpaceTransform,
+ copiedSharedQuadState->clip_rect));
+ }
+ copiedSharedQuadState->clip_rect = clip_rect;
+ copiedSharedQuadState->is_clipped = true;
+ }
+
copiedSharedQuadState->opacity *= drawOpacity();
}
}
« no previous file with comments | « no previous file | cc/delegated_renderer_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698