1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2010 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrFixedClip.h" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/ganesh/GrTypesPriv.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrAppliedClip.h" 12*c8dee2aaSAndroid Build Coastguard Worker getConservativeBounds() const13*c8dee2aaSAndroid Build Coastguard WorkerSkIRect GrFixedClip::getConservativeBounds() const { 14*c8dee2aaSAndroid Build Coastguard Worker return fScissorState.rect(); 15*c8dee2aaSAndroid Build Coastguard Worker } 16*c8dee2aaSAndroid Build Coastguard Worker preApply(const SkRect & drawBounds,GrAA aa) const17*c8dee2aaSAndroid Build Coastguard WorkerGrClip::PreClipResult GrFixedClip::preApply(const SkRect& drawBounds, GrAA aa) const { 18*c8dee2aaSAndroid Build Coastguard Worker SkIRect pixelBounds = GetPixelIBounds(drawBounds, aa); 19*c8dee2aaSAndroid Build Coastguard Worker if (!SkIRect::Intersects(fScissorState.rect(), pixelBounds)) { 20*c8dee2aaSAndroid Build Coastguard Worker return Effect::kClippedOut; 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker if (fWindowRectsState.enabled()) { 24*c8dee2aaSAndroid Build Coastguard Worker return Effect::kClipped; 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker if (!fScissorState.enabled() || fScissorState.rect().contains(pixelBounds)) { 28*c8dee2aaSAndroid Build Coastguard Worker // Either no scissor or the scissor doesn't clip the draw 29*c8dee2aaSAndroid Build Coastguard Worker return Effect::kUnclipped; 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker // Report the scissor as a degenerate round rect 32*c8dee2aaSAndroid Build Coastguard Worker return {SkRect::Make(fScissorState.rect()), GrAA::kNo}; 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker apply(GrAppliedHardClip * out,SkIRect * bounds) const35*c8dee2aaSAndroid Build Coastguard WorkerGrClip::Effect GrFixedClip::apply(GrAppliedHardClip* out, SkIRect* bounds) const { 36*c8dee2aaSAndroid Build Coastguard Worker if (!SkIRect::Intersects(fScissorState.rect(), *bounds)) { 37*c8dee2aaSAndroid Build Coastguard Worker return Effect::kClippedOut; 38*c8dee2aaSAndroid Build Coastguard Worker } 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker Effect effect = Effect::kUnclipped; 41*c8dee2aaSAndroid Build Coastguard Worker if (fScissorState.enabled() && !fScissorState.rect().contains(*bounds)) { 42*c8dee2aaSAndroid Build Coastguard Worker SkAssertResult(bounds->intersect(fScissorState.rect())); 43*c8dee2aaSAndroid Build Coastguard Worker out->setScissor(*bounds); 44*c8dee2aaSAndroid Build Coastguard Worker effect = Effect::kClipped; 45*c8dee2aaSAndroid Build Coastguard Worker } 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker if (fWindowRectsState.enabled()) { 48*c8dee2aaSAndroid Build Coastguard Worker out->addWindowRectangles(fWindowRectsState); 49*c8dee2aaSAndroid Build Coastguard Worker // We could iterate each window rectangle to check for intersection, but be conservative 50*c8dee2aaSAndroid Build Coastguard Worker // and report that it's clipped 51*c8dee2aaSAndroid Build Coastguard Worker effect = Effect::kClipped; 52*c8dee2aaSAndroid Build Coastguard Worker } 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker return effect; 55*c8dee2aaSAndroid Build Coastguard Worker } 56