diff options
Diffstat (limited to 'src/gpu/GrAALinearizingConvexPathRenderer.cpp')
-rw-r--r-- | src/gpu/GrAALinearizingConvexPathRenderer.cpp | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/src/gpu/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/GrAALinearizingConvexPathRenderer.cpp index a1aed35f59..69f9d1cca1 100644 --- a/src/gpu/GrAALinearizingConvexPathRenderer.cpp +++ b/src/gpu/GrAALinearizingConvexPathRenderer.cpp @@ -93,24 +93,16 @@ static void extract_verts(const GrAAConvexTessellator& tess, } static const GrGeometryProcessor* create_fill_gp(bool tweakAlphaForCoverage, - const SkMatrix& viewMatrix, + const SkMatrix& localMatrix, bool usesLocalCoords, bool coverageIgnored) { - 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; + uint32_t flags = GrDefaultGeoProcFactory::kColor_GPType; + if (!tweakAlphaForCoverage) { + flags |= GrDefaultGeoProcFactory::kCoverage_GPType; } - Coverage coverage(coverageType); - LocalCoords localCoords(usesLocalCoords ? LocalCoords::kUsePosition_Type : - LocalCoords::kUnused_Type); - return CreateForDeviceSpace(color, coverage, localCoords, viewMatrix); + + return GrDefaultGeoProcFactory::Create(flags, GrColor_WHITE, usesLocalCoords, coverageIgnored, + SkMatrix::I(), localMatrix); } class AAFlatteningConvexPathBatch : public GrBatch { @@ -186,16 +178,18 @@ public: void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline) override { bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage(); - // 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"); + SkMatrix invert; + if (this->usesLocalCoords() && !this->viewMatrix().invert(&invert)) { + SkDebugf("Could not invert viewmatrix\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(); |