Chromium Code Reviews| 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); |