diff options
Diffstat (limited to 'src/gpu/ccpr/GrCCGeometry.h')
-rw-r--r-- | src/gpu/ccpr/GrCCGeometry.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/gpu/ccpr/GrCCGeometry.h b/src/gpu/ccpr/GrCCGeometry.h index 01cf16c68d..7f098f958b 100644 --- a/src/gpu/ccpr/GrCCGeometry.h +++ b/src/gpu/ccpr/GrCCGeometry.h @@ -31,6 +31,7 @@ public: kLineTo, kMonotonicQuadraticTo, // Monotonic relative to the vector between its endpoints [P2 - P0]. kMonotonicCubicTo, + kMonotonicConicTo, kEndClosedContour, // endPt == startPt. kEndOpenContour // endPt != startPt. }; @@ -41,6 +42,7 @@ public: int fWeightedTriangles; // Triangles (from the tessellator) whose winding magnitude > 1. int fQuadratics; int fCubics; + int fConics; void operator+=(const PrimitiveTallies&); PrimitiveTallies operator-(const PrimitiveTallies&) const; @@ -53,6 +55,7 @@ public: const SkTArray<SkPoint, true>& points() const { SkASSERT(!fBuildingContour); return fPoints; } const SkTArray<Verb, true>& verbs() const { SkASSERT(!fBuildingContour); return fVerbs; } + float getConicWeight(int idx) const { SkASSERT(!fBuildingContour); return fConicWeights[idx]; } void reset() { SkASSERT(!fBuildingContour); @@ -89,6 +92,8 @@ public: // intersection vs. 1.489 on the tiger). void cubicTo(const SkPoint[4], float inflectPad = 0.55f, float loopIntersectPad = 2); + void conicTo(const SkPoint[3], float w); + PrimitiveTallies endContour(); // Returns the numbers of primitives needed to draw the contour. private: @@ -116,15 +121,17 @@ private: void appendCubicApproximation(const Sk2f& p0, const Sk2f& p1, const Sk2f& p2, const Sk2f& p3, int maxSubdivisions = kMaxSubdivionsPerCubicSection); + void appendMonotonicConic(const Sk2f& p0, const Sk2f& p1, const Sk2f& p2, float w); + // Transient state used while building a contour. SkPoint fCurrAnchorPoint; PrimitiveTallies fCurrContourTallies; SkCubicType fCurrCubicType; SkDEBUGCODE(bool fBuildingContour = false); - // TODO: These points could eventually be written directly to block-allocated GPU buffers. - SkSTArray<128, SkPoint, true> fPoints; - SkSTArray<128, Verb, true> fVerbs; + SkSTArray<128, SkPoint, true> fPoints; + SkSTArray<32, float, true> fConicWeights; + SkSTArray<128, Verb, true> fVerbs; }; inline void GrCCGeometry::PrimitiveTallies::operator+=(const PrimitiveTallies& b) { @@ -132,6 +139,7 @@ inline void GrCCGeometry::PrimitiveTallies::operator+=(const PrimitiveTallies& b fWeightedTriangles += b.fWeightedTriangles; fQuadratics += b.fQuadratics; fCubics += b.fCubics; + fConics += b.fConics; } GrCCGeometry::PrimitiveTallies @@ -139,12 +147,13 @@ inline GrCCGeometry::PrimitiveTallies::operator-(const PrimitiveTallies& b) cons return {fTriangles - b.fTriangles, fWeightedTriangles - b.fWeightedTriangles, fQuadratics - b.fQuadratics, - fCubics - b.fCubics}; + fCubics - b.fCubics, + fConics - b.fConics}; } inline bool GrCCGeometry::PrimitiveTallies::operator==(const PrimitiveTallies& b) { return fTriangles == b.fTriangles && fWeightedTriangles == b.fWeightedTriangles && - fQuadratics == b.fQuadratics && fCubics == b.fCubics; + fQuadratics == b.fQuadratics && fCubics == b.fCubics && fConics == b.fConics; } #endif |