Chromium Code Reviews| Index: src/gpu/GrAALinearizingConvexPathRenderer.cpp |
| diff --git a/src/gpu/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/GrAALinearizingConvexPathRenderer.cpp |
| index d899e7d0841425dd598ebe0f4c48b0aa47551bf7..bd34bcc725117d00a5f116eac40e8c2f8b40d259 100644 |
| --- a/src/gpu/GrAALinearizingConvexPathRenderer.cpp |
| +++ b/src/gpu/GrAALinearizingConvexPathRenderer.cpp |
| @@ -97,16 +97,29 @@ static void extract_verts(const GrAAConvexTessellator& tess, |
| } |
| static const GrGeometryProcessor* create_fill_gp(bool tweakAlphaForCoverage, |
| - const SkMatrix& localMatrix, |
| + const SkMatrix& viewMatrix, |
| bool usesLocalCoords, |
| bool coverageIgnored) { |
| - uint32_t flags = GrDefaultGeoProcFactory::kColor_GPType; |
| - if (!tweakAlphaForCoverage) { |
| - flags |= GrDefaultGeoProcFactory::kCoverage_GPType; |
| + using namespace GrDefaultGeoProcFactory; |
| + |
| + 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); |
| + |
| + if (usesLocalCoords) { |
| + LocalCoords localCoords(LocalCoords::kUsePosition_Type); |
| + return CreateForDeviceSpace(color, coverage, localCoords, viewMatrix); |
| + } else { |
|
robertphillips
2015/07/29 13:09:44
extra space ?
|
| + LocalCoords localCoords(LocalCoords::kUnused_Type); |
| + return Create(color, coverage, localCoords); |
| } |
| - |
| - return GrDefaultGeoProcFactory::Create(flags, GrColor_WHITE, usesLocalCoords, coverageIgnored, |
| - SkMatrix::I(), localMatrix); |
| } |
| class AAFlatteningConvexPathBatch : public GrBatch { |
| @@ -182,18 +195,16 @@ public: |
| void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline) override { |
| bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage(); |
| - SkMatrix invert; |
| - if (this->usesLocalCoords() && !this->viewMatrix().invert(&invert)) { |
| - SkDebugf("Could not invert viewmatrix\n"); |
| + // Setup GrGeometryProcessor |
| + SkAutoTUnref<const GrGeometryProcessor> gp(create_fill_gp(canTweakAlphaForCoverage, |
| + this->viewMatrix(), |
| + this->usesLocalCoords(), |
| + this->coverageIgnored())); |
| + if (!gp) { |
| + SkDebugf("Couldn't create a GrGeometryProcessor\n"); |
| return; |
| } |
| - // Setup GrGeometryProcessor |
| - SkAutoTUnref<const GrGeometryProcessor> gp( |
| - create_fill_gp(canTweakAlphaForCoverage, invert, |
| - this->usesLocalCoords(), |
| - this->coverageIgnored())); |
| - |
| batchTarget->initDraw(gp, pipeline); |
| size_t vertexStride = gp->getVertexStride(); |