Chromium Code Reviews| Index: src/gpu/GrDefaultGeoProcFactory.cpp |
| diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp |
| index 1273a298494020dd32db35b18401a9140bdcdd9c..79abda5ce7b578a3564ab293ee01cda627a1c2d6 100644 |
| --- a/src/gpu/GrDefaultGeoProcFactory.cpp |
| +++ b/src/gpu/GrDefaultGeoProcFactory.cpp |
| @@ -278,24 +278,43 @@ const GrGeometryProcessor* GrDefaultGeoProcFactory::Create(uint32_t gpTypeFlags, |
| const GrGeometryProcessor* GrDefaultGeoProcFactory::Create(const Color& color, |
| const Coverage& coverage, |
| - LocalCoords::Type localCoords, |
| - const SkMatrix& viewMatrix, |
| - const SkMatrix& localMatrix) { |
| + const LocalCoords& localCoords, |
| + const SkMatrix& viewMatrix) { |
| uint32_t flags = 0; |
| flags |= color.fType == Color::kAttribute_Type ? kColor_GPType : 0; |
| flags |= coverage.fType == Coverage::kAttribute_Type ? kCoverage_GPType : 0; |
| - flags |= localCoords == LocalCoords::kHasExplicit_Type ? kLocalCoord_GPType : 0; |
| + flags |= localCoords.fType == LocalCoords::kHasExplicit_Type ? kLocalCoord_GPType : 0; |
| uint8_t inCoverage = coverage.fCoverage; |
| bool coverageWillBeIgnored = coverage.fType == Coverage::kNone_Type; |
| - bool localCoordsWillBeRead = localCoords != LocalCoords::kNone_Type; |
| + bool localCoordsWillBeRead = localCoords.fType != LocalCoords::kUnused_Type; |
| GrColor inColor = color.fColor; |
| return DefaultGeoProc::Create(flags, |
|
bsalomon
2015/07/28 14:39:08
I think it'd be nice to get rid of this factory an
|
| inColor, |
| viewMatrix, |
| - localMatrix, |
| + localCoords.fMatrix ? *localCoords.fMatrix : SkMatrix::I(), |
| localCoordsWillBeRead, |
| coverageWillBeIgnored, |
| inCoverage); |
| } |
| + |
| +const GrGeometryProcessor* GrDefaultGeoProcFactory::CreateForDeviceSpace( |
| + const Color& color, |
| + const Coverage& coverage, |
| + const LocalCoords& localCoords, |
| + const SkMatrix& viewMatrix) { |
| + SkASSERT(LocalCoords::kUsePosition_Type == localCoords.fType); |
| + SkMatrix invert = SkMatrix::I(); |
| + if (!viewMatrix.isIdentity() && !viewMatrix.invert(&invert)) { |
| + SkDebugf("Could not invert\n"); |
| + return NULL; |
| + } |
| + |
| + if (localCoords.hasLocalMatrix()) { |
| + invert.preConcat(*localCoords.fMatrix); |
| + } |
| + |
| + LocalCoords inverted(LocalCoords::kUsePosition_Type, &invert); |
| + return Create(color, coverage, inverted); |
| +} |