diff options
Diffstat (limited to 'src/gpu/ccpr/GrCCCoverageProcessor.h')
-rw-r--r-- | src/gpu/ccpr/GrCCCoverageProcessor.h | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/gpu/ccpr/GrCCCoverageProcessor.h b/src/gpu/ccpr/GrCCCoverageProcessor.h index 68180270b1..454e728ae9 100644 --- a/src/gpu/ccpr/GrCCCoverageProcessor.h +++ b/src/gpu/ccpr/GrCCCoverageProcessor.h @@ -40,6 +40,7 @@ public: kWeightedTriangles, // Triangles (from the tessellator) whose winding magnitude > 1. kQuadratics, kCubics, + kConics }; static const char* PrimitiveTypeName(PrimitiveType); @@ -53,14 +54,15 @@ public: void set(const SkPoint&, const SkPoint&, const SkPoint&, const Sk2f& trans); }; - // Defines a single primitive shape with 4 input points, or 3 input points plus a W parameter - // duplicated in both 4th components (i.e. Cubics or Triangles with a custom winding number). - // X,Y point values are transposed. + // Defines a single primitive shape with 4 input points, or 3 input points plus a "weight" + // parameter duplicated in both lanes of the 4th input (i.e. Cubics, Conics, and Triangles with + // a weighted winding number). X,Y point values are transposed. struct QuadPointInstance { float fX[4]; float fY[4]; void set(const SkPoint[4], float dx, float dy); + void setW(const SkPoint[3], const Sk2f& trans, float w); void setW(const SkPoint&, const SkPoint&, const SkPoint&, const Sk2f& trans, float w); }; @@ -205,6 +207,11 @@ private: // Number of bezier points for curves, or 3 for triangles. int numInputPoints() const { return PrimitiveType::kCubics == fPrimitiveType ? 4 : 3; } + int hasInputWeight() const { + return PrimitiveType::kWeightedTriangles == fPrimitiveType || + PrimitiveType::kConics == fPrimitiveType; + } + enum class Impl : bool { kGeometryShader, kVertexShader @@ -259,6 +266,7 @@ inline const char* GrCCCoverageProcessor::PrimitiveTypeName(PrimitiveType type) case PrimitiveType::kWeightedTriangles: return "kWeightedTriangles"; case PrimitiveType::kQuadratics: return "kQuadratics"; case PrimitiveType::kCubics: return "kCubics"; + case PrimitiveType::kConics: return "kConics"; } SK_ABORT("Invalid PrimitiveType"); return ""; @@ -283,6 +291,11 @@ inline void GrCCCoverageProcessor::QuadPointInstance::set(const SkPoint p[4], fl (Y + dy).store(&fY); } +inline void GrCCCoverageProcessor::QuadPointInstance::setW(const SkPoint p[3], const Sk2f& trans, + float w) { + this->setW(p[0], p[1], p[2], trans, w); +} + inline void GrCCCoverageProcessor::QuadPointInstance::setW(const SkPoint& p0, const SkPoint& p1, const SkPoint& p2, const Sk2f& trans, float w) { |