Index: src/gpu/GrAAHairLinePathRenderer.cpp |
diff --git a/src/gpu/GrAAHairLinePathRenderer.cpp b/src/gpu/GrAAHairLinePathRenderer.cpp |
index 98e69657b344b1a543377f65fe1116fca26b12e9..b8c772bdfa2478568a985b8fc7a682996e8df57c 100644 |
--- a/src/gpu/GrAAHairLinePathRenderer.cpp |
+++ b/src/gpu/GrAAHairLinePathRenderer.cpp |
@@ -837,13 +837,25 @@ bool GrAAHairLinePathRenderer::onDrawPath(GrDrawTarget* target, |
GrDrawTarget::AutoReleaseGeometry arg; |
SkRect devBounds; |
+ // createLineGeom transforms the geometry to device space when the matrix does not have |
+ // perspective. |
+ GrDrawState::AutoViewMatrixRestore avmr; |
+ SkMatrix invert = SkMatrix::I(); |
+ if (!drawState->getViewMatrix().hasPerspective()) { |
+ avmr.setIdentity(drawState); |
+ if (!drawState->getViewMatrix().invert(&invert)) { |
+ return false; |
+ } |
+ } |
+ |
+ GrDrawState::AutoRestoreEffects are(drawState); |
uint32_t gpFlags = GrDefaultGeoProcFactory::kPosition_GPType | |
GrDefaultGeoProcFactory::kCoverage_GPType; |
- GrDrawState::AutoRestoreEffects are(drawState); |
SkAutoTUnref<const GrGeometryProcessor> gp(GrDefaultGeoProcFactory::Create(color, |
gpFlags, |
false, |
- newCoverage)); |
+ newCoverage, |
+ invert)); |
if (!this->createLineGeom(target, |
drawState, |
@@ -857,13 +869,6 @@ bool GrAAHairLinePathRenderer::onDrawPath(GrDrawTarget* target, |
return false; |
} |
- // createLineGeom transforms the geometry to device space when the matrix does not have |
- // perspective. |
- GrDrawState::AutoViewMatrixRestore avmr; |
- if (!drawState->getViewMatrix().hasPerspective() && !avmr.setIdentity(drawState)) { |
- return false; |
- } |
- |
// Check devBounds |
SkASSERT(check_bounds<LineVertex>(drawState, devBounds, arg.vertices(), |
kLineSegNumVertices * lineCnt)); |
@@ -909,11 +914,14 @@ bool GrAAHairLinePathRenderer::onDrawPath(GrDrawTarget* target, |
// createGeom transforms the geometry to device space when the matrix does not have |
// perspective. |
GrDrawState::AutoViewMatrixRestore avmr; |
- if (!drawState->getViewMatrix().hasPerspective() && !avmr.setIdentity(drawState)) { |
- return false; |
+ SkMatrix invert = SkMatrix::I(); |
bsalomon
2014/12/23 20:18:39
Why don't we just do this once outside the if (lin
|
+ if (!drawState->getViewMatrix().hasPerspective()) { |
+ avmr.setIdentity(drawState); |
+ if (!drawState->getViewMatrix().invert(&invert)) { |
+ return false; |
+ } |
} |
- |
// Check devBounds |
SkASSERT(check_bounds<BezierVertex>(drawState, devBounds, arg.vertices(), |
kQuadNumVertices * quadCnt + kQuadNumVertices * conicCnt)); |
@@ -923,6 +931,7 @@ bool GrAAHairLinePathRenderer::onDrawPath(GrDrawTarget* target, |
GrQuadEffect::Create(color, |
kHairlineAA_GrProcessorEdgeType, |
*target->caps(), |
+ invert, |
newCoverage)); |
SkASSERT(hairQuadProcessor); |
GrDrawState::AutoRestoreEffects are(drawState); |
@@ -946,7 +955,7 @@ bool GrAAHairLinePathRenderer::onDrawPath(GrDrawTarget* target, |
if (conicCnt > 0) { |
SkAutoTUnref<GrGeometryProcessor> hairConicProcessor( |
GrConicEffect::Create(color, kHairlineAA_GrProcessorEdgeType, *target->caps(), |
- newCoverage)); |
+ invert, newCoverage)); |
SkASSERT(hairConicProcessor); |
GrDrawState::AutoRestoreEffects are(drawState); |
target->setIndexSourceToBuffer(fQuadsIndexBuffer); |