Index: src/gpu/GrDefaultGeoProcFactory.cpp |
diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp |
index 68fcd055764fa962e3bc51531f0b2ba39db61a7d..7328c4a684c9e66f2d95f06e40c7bd57199d9dcc 100644 |
--- a/src/gpu/GrDefaultGeoProcFactory.cpp |
+++ b/src/gpu/GrDefaultGeoProcFactory.cpp |
@@ -258,22 +258,6 @@ GrGeometryProcessor* DefaultGeoProc::TestCreate(GrProcessorTestData* d) { |
GrRandomCoverage(d->fRandom)); |
} |
-const GrGeometryProcessor* GrDefaultGeoProcFactory::Create(uint32_t gpTypeFlags, |
- GrColor color, |
- bool localCoordsWillBeRead, |
- bool coverageWillBeIgnored, |
- const SkMatrix& viewMatrix, |
- const SkMatrix& localMatrix, |
- uint8_t coverage) { |
- return DefaultGeoProc::Create(gpTypeFlags, |
- color, |
- viewMatrix, |
- localMatrix, |
- localCoordsWillBeRead, |
- coverageWillBeIgnored, |
- coverage); |
-} |
- |
const GrGeometryProcessor* GrDefaultGeoProcFactory::Create(const Color& color, |
const Coverage& coverage, |
const LocalCoords& localCoords, |
@@ -302,17 +286,39 @@ const GrGeometryProcessor* GrDefaultGeoProcFactory::CreateForDeviceSpace( |
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::kUnused_Type != localCoords.fType) { |
+ SkASSERT(LocalCoords::kUsePosition_Type == localCoords.fType); |
+ if (!viewMatrix.isIdentity() && !viewMatrix.invert(&invert)) { |
+ SkDebugf("Could not invert\n"); |
+ return NULL; |
+ } |
- if (localCoords.hasLocalMatrix()) { |
- invert.preConcat(*localCoords.fMatrix); |
+ if (localCoords.hasLocalMatrix()) { |
+ invert.preConcat(*localCoords.fMatrix); |
+ } |
} |
LocalCoords inverted(LocalCoords::kUsePosition_Type, &invert); |
- return Create(color, coverage, inverted); |
+ return Create(color, coverage, inverted, SkMatrix::I()); |
+} |
+ |
+const GrGeometryProcessor* GrDefaultGeoProcFactory::CreateForDeviceSpaceAlphaTweakIfPossible( |
+ const SkMatrix& viewMatrix, |
+ bool usesLocalCoords, |
+ bool coverageIgnored, |
+ bool tweakAlphaForCoverage) { |
+ Color color(Color::kAttribute_Type); |
+ Coverage::Type coverageType; |
+ if (coverageIgnored) { |
+ coverageType = Coverage::kNone_Type; |
+ } else if (tweakAlphaForCoverage) { |
+ coverageType = Coverage::kSolid_Type; |
+ } else { |
+ coverageType = Coverage::kAttribute_Type; |
+ } |
+ Coverage coverage(coverageType); |
+ LocalCoords localCoords(usesLocalCoords ? LocalCoords::kUsePosition_Type : |
+ LocalCoords::kUnused_Type); |
+ return CreateForDeviceSpace(color, coverage, localCoords, viewMatrix); |
} |