Index: src/gpu/GrDefaultPathRenderer.cpp |
diff --git a/src/gpu/GrDefaultPathRenderer.cpp b/src/gpu/GrDefaultPathRenderer.cpp |
index e7c678d164d7fa4f8449cb67f15010c89999d682..79e9f154ae8a826cc1c767913fb1a70cf5957f9b 100644 |
--- a/src/gpu/GrDefaultPathRenderer.cpp |
+++ b/src/gpu/GrDefaultPathRenderer.cpp |
@@ -329,16 +329,15 @@ FINISHED: |
bool GrDefaultPathRenderer::internalDrawPath(GrDrawTarget* target, |
GrDrawState* drawState, |
GrColor color, |
+ const SkMatrix& viewMatrix, |
const SkPath& path, |
const SkStrokeRec& origStroke, |
bool stencilOnly) { |
- SkMatrix viewM = drawState->getViewMatrix(); |
SkTCopyOnFirstWrite<SkStrokeRec> stroke(origStroke); |
SkScalar hairlineCoverage; |
uint8_t newCoverage = 0xff; |
- if (IsStrokeHairlineOrEquivalent(*stroke, drawState->getViewMatrix(), |
- &hairlineCoverage)) { |
+ if (IsStrokeHairlineOrEquivalent(*stroke, viewMatrix, &hairlineCoverage)) { |
newCoverage = SkScalarRoundToInt(hairlineCoverage * 0xff); |
if (!stroke->isHairlineStyle()) { |
@@ -347,7 +346,7 @@ bool GrDefaultPathRenderer::internalDrawPath(GrDrawTarget* target, |
} |
SkScalar tol = SK_Scalar1; |
- tol = GrPathUtils::scaleToleranceToSrc(tol, viewM, path.getBounds()); |
+ tol = GrPathUtils::scaleToleranceToSrc(tol, viewMatrix, path.getBounds()); |
int vertexCnt; |
int indexCnt; |
@@ -462,7 +461,7 @@ bool GrDefaultPathRenderer::internalDrawPath(GrDrawTarget* target, |
} |
SkRect devBounds; |
- GetPathDevBounds(path, drawState->getRenderTarget(), viewM, &devBounds); |
+ GetPathDevBounds(path, drawState->getRenderTarget(), viewMatrix, &devBounds); |
for (int p = 0; p < passCount; ++p) { |
drawState->setDrawFace(drawFace[p]); |
@@ -474,8 +473,6 @@ bool GrDefaultPathRenderer::internalDrawPath(GrDrawTarget* target, |
// Reset the XP Factory on drawState |
drawState->setXPFactory(backupXPFactory); |
SkRect bounds; |
- GrDrawState::AutoViewMatrixRestore avmr; |
- const SkMatrix& viewMatrix = drawState->getViewMatrix(); |
SkMatrix localMatrix = SkMatrix::I(); |
if (reverse) { |
SkASSERT(drawState->getRenderTarget()); |
@@ -483,28 +480,30 @@ bool GrDefaultPathRenderer::internalDrawPath(GrDrawTarget* target, |
bounds = devBounds; |
SkMatrix vmi; |
// mapRect through persp matrix may not be correct |
- if (!drawState->getViewMatrix().hasPerspective() && |
- drawState->getViewInverse(&vmi)) { |
+ if (!viewMatrix.hasPerspective() && viewMatrix.invert(&vmi)) { |
vmi.mapRect(&bounds); |
} else { |
if (!viewMatrix.invert(&localMatrix)) { |
return false; |
} |
- avmr.setIdentity(drawState); |
} |
} else { |
bounds = path.getBounds(); |
} |
GrDrawTarget::AutoGeometryPush agp(target); |
- target->drawRect(drawState, color, bounds, NULL, &localMatrix); |
+ const SkMatrix& viewM = (reverse && viewMatrix.hasPerspective()) ? SkMatrix::I() : |
+ viewMatrix; |
+ target->drawRect(drawState, color, viewM, bounds, NULL, &localMatrix); |
} else { |
if (passCount > 1) { |
drawState->setDisableColorXPFactory(); |
} |
GrDrawState::AutoRestoreEffects are(drawState); |
SkAutoTUnref<const GrGeometryProcessor> gp( |
- GrDefaultGeoProcFactory::Create(color, |
- GrDefaultGeoProcFactory::kPosition_GPType, |
+ GrDefaultGeoProcFactory::Create(GrDefaultGeoProcFactory::kPosition_GPType, |
+ color, |
+ viewMatrix, |
+ SkMatrix::I(), |
false, |
newCoverage)); |
if (indexCnt) { |
@@ -526,25 +525,27 @@ bool GrDefaultPathRenderer::internalDrawPath(GrDrawTarget* target, |
bool GrDefaultPathRenderer::canDrawPath(const GrDrawTarget* target, |
const GrDrawState* drawState, |
+ const SkMatrix& viewMatrix, |
const SkPath& path, |
const SkStrokeRec& stroke, |
bool antiAlias) const { |
// this class can draw any path with any fill but doesn't do any anti-aliasing. |
return !antiAlias && !(SkPath::kConic_SegmentMask & path.getSegmentMasks()) && |
- (stroke.isFillStyle() || |
- IsStrokeHairlineOrEquivalent(stroke, drawState->getViewMatrix(), NULL)); |
+ (stroke.isFillStyle() || IsStrokeHairlineOrEquivalent(stroke, viewMatrix, NULL)); |
} |
bool GrDefaultPathRenderer::onDrawPath(GrDrawTarget* target, |
GrDrawState* drawState, |
GrColor color, |
+ const SkMatrix& viewMatrix, |
const SkPath& path, |
const SkStrokeRec& stroke, |
bool antiAlias) { |
return this->internalDrawPath(target, |
drawState, |
color, |
+ viewMatrix, |
path, |
stroke, |
false); |
@@ -552,9 +553,10 @@ bool GrDefaultPathRenderer::onDrawPath(GrDrawTarget* target, |
void GrDefaultPathRenderer::onStencilPath(GrDrawTarget* target, |
GrDrawState* drawState, |
+ const SkMatrix& viewMatrix, |
const SkPath& path, |
const SkStrokeRec& stroke) { |
SkASSERT(SkPath::kInverseEvenOdd_FillType != path.getFillType()); |
SkASSERT(SkPath::kInverseWinding_FillType != path.getFillType()); |
- this->internalDrawPath(target, drawState, GrColor_WHITE, path, stroke, true); |
+ this->internalDrawPath(target, drawState, GrColor_WHITE, viewMatrix, path, stroke, true); |
} |