aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ccpr/GrCCPathParser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/ccpr/GrCCPathParser.h')
-rw-r--r--src/gpu/ccpr/GrCCPathParser.h29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/gpu/ccpr/GrCCPathParser.h b/src/gpu/ccpr/GrCCPathParser.h
index d8d897f6d5..b1a1ee5906 100644
--- a/src/gpu/ccpr/GrCCPathParser.h
+++ b/src/gpu/ccpr/GrCCPathParser.h
@@ -76,14 +76,37 @@ private:
using PrimitiveTallies = GrCCGeometry::PrimitiveTallies;
// Every kBeginPath verb has a corresponding PathInfo entry.
- struct PathInfo {
+ class PathInfo {
+ public:
PathInfo(ScissorMode scissorMode, int16_t offsetX, int16_t offsetY)
: fScissorMode(scissorMode), fAtlasOffsetX(offsetX), fAtlasOffsetY(offsetY) {}
+ ScissorMode scissorMode() const { return fScissorMode; }
+ int16_t atlasOffsetX() const { return fAtlasOffsetX; }
+ int16_t atlasOffsetY() const { return fAtlasOffsetY; }
+
+ // An empty tessellation fan is also valid; we use negative count to denote not tessellated.
+ bool hasFanTessellation() const { return fFanTessellationCount >= 0; }
+ int fanTessellationCount() const {
+ SkASSERT(this->hasFanTessellation());
+ return fFanTessellationCount;
+ }
+ const GrTessellator::WindingVertex* fanTessellation() const {
+ SkASSERT(this->hasFanTessellation());
+ return fFanTessellation.get();
+ }
+
+ void adoptFanTessellation(const GrTessellator::WindingVertex* vertices, int count) {
+ SkASSERT(count >= 0);
+ fFanTessellation.reset(vertices);
+ fFanTessellationCount = count;
+ }
+
+ private:
ScissorMode fScissorMode;
int16_t fAtlasOffsetX, fAtlasOffsetY;
- std::unique_ptr<GrTessellator::WindingVertex[]> fFanTessellation;
- int fFanTessellationCount = 0;
+ int fFanTessellationCount = -1;
+ std::unique_ptr<const GrTessellator::WindingVertex[]> fFanTessellation;
};
// Defines a batch of CCPR primitives. Start indices are deduced by looking at the previous