Index: src/gpu/GrPathRenderer.h |
diff --git a/src/gpu/GrPathRenderer.h b/src/gpu/GrPathRenderer.h |
index 0720c3f86a950f766ecbca6464f49f37db9d8fad..8f2d465b16dbc70d95160b71b564c796fe350447 100644 |
--- a/src/gpu/GrPathRenderer.h |
+++ b/src/gpu/GrPathRenderer.h |
@@ -81,11 +81,12 @@ public: |
* @param path the path that will be drawn |
* @param stroke the stroke information (width, join, cap). |
*/ |
- StencilSupport getStencilSupport(const SkPath& path, |
- const SkStrokeRec& stroke, |
- const GrDrawTarget* target) const { |
+ StencilSupport getStencilSupport(const GrDrawTarget* target, |
+ const GrDrawState* drawState, |
+ const SkPath& path, |
+ const SkStrokeRec& stroke) const { |
SkASSERT(!path.isInverseFillType()); |
- return this->onGetStencilSupport(path, stroke, target); |
+ return this->onGetStencilSupport(target, drawState, path, stroke); |
} |
/** |
@@ -100,9 +101,10 @@ public: |
* |
* @return true if the path can be drawn by this object, false otherwise. |
*/ |
- virtual bool canDrawPath(const SkPath& path, |
+ virtual bool canDrawPath(const GrDrawTarget* target, |
+ const GrDrawState* drawState, |
+ const SkPath& path, |
const SkStrokeRec& rec, |
- const GrDrawTarget* target, |
bool antiAlias) const = 0; |
/** |
* Draws the path into the draw target. If getStencilSupport() would return kNoRestriction then |
@@ -113,15 +115,17 @@ public: |
* @param target target that the path will be rendered to |
* @param antiAlias true if anti-aliasing is required. |
*/ |
- bool drawPath(const SkPath& path, |
+ bool drawPath(GrDrawTarget* target, |
+ GrDrawState* ds, |
+ const SkPath& path, |
const SkStrokeRec& stroke, |
- GrDrawTarget* target, |
bool antiAlias) { |
SkASSERT(!path.isEmpty()); |
- SkASSERT(this->canDrawPath(path, stroke, target, antiAlias)); |
- SkASSERT(target->drawState()->getStencil().isDisabled() || |
- kNoRestriction_StencilSupport == this->getStencilSupport(path, stroke, target)); |
- return this->onDrawPath(path, stroke, target, antiAlias); |
+ SkASSERT(this->canDrawPath(target, ds, path, stroke, antiAlias)); |
+ SkASSERT(ds->getStencil().isDisabled() || |
+ kNoRestriction_StencilSupport == this->getStencilSupport(target, ds, path, |
+ stroke)); |
+ return this->onDrawPath(target, ds, path, stroke, antiAlias); |
} |
/** |
@@ -132,10 +136,13 @@ public: |
* @param stroke the stroke information (width, join, cap) |
* @param target target that the path will be rendered to |
*/ |
- void stencilPath(const SkPath& path, const SkStrokeRec& stroke, GrDrawTarget* target) { |
+ void stencilPath(GrDrawTarget* target, |
+ GrDrawState* ds, |
+ const SkPath& path, |
+ const SkStrokeRec& stroke) { |
SkASSERT(!path.isEmpty()); |
- SkASSERT(kNoSupport_StencilSupport != this->getStencilSupport(path, stroke, target)); |
- this->onStencilPath(path, stroke, target); |
+ SkASSERT(kNoSupport_StencilSupport != this->getStencilSupport(target, ds, path, stroke)); |
+ this->onStencilPath(target, ds, path, stroke); |
} |
// Helper for determining if we can treat a thin stroke as a hairline w/ coverage. |
@@ -156,27 +163,30 @@ protected: |
/** |
* Subclass overrides if it has any limitations of stenciling support. |
*/ |
- virtual StencilSupport onGetStencilSupport(const SkPath&, |
- const SkStrokeRec&, |
- const GrDrawTarget*) const { |
+ virtual StencilSupport onGetStencilSupport(const GrDrawTarget*, |
+ const GrDrawState*, |
+ const SkPath&, |
+ const SkStrokeRec&) const { |
return kNoRestriction_StencilSupport; |
} |
/** |
* Subclass implementation of drawPath() |
*/ |
- virtual bool onDrawPath(const SkPath& path, |
- const SkStrokeRec& stroke, |
- GrDrawTarget* target, |
+ virtual bool onDrawPath(GrDrawTarget*, |
+ GrDrawState*, |
+ const SkPath&, |
+ const SkStrokeRec&, |
bool antiAlias) = 0; |
/** |
* Subclass implementation of stencilPath(). Subclass must override iff it ever returns |
* kStencilOnly in onGetStencilSupport(). |
*/ |
- virtual void onStencilPath(const SkPath& path, const SkStrokeRec& stroke, GrDrawTarget* target) { |
- GrDrawTarget::AutoStateRestore asr(target, GrDrawTarget::kPreserve_ASRInit); |
- GrDrawState* drawState = target->drawState(); |
+ virtual void onStencilPath(GrDrawTarget* target, |
+ GrDrawState* drawState, |
+ const SkPath& path, |
+ const SkStrokeRec& stroke) { |
GR_STATIC_CONST_SAME_STENCIL(kIncrementStencil, |
kReplace_StencilOp, |
kReplace_StencilOp, |
@@ -186,7 +196,7 @@ protected: |
0xffff); |
drawState->setStencil(kIncrementStencil); |
drawState->enableState(GrDrawState::kNoColorWrites_StateBit); |
- this->drawPath(path, stroke, target, false); |
+ this->drawPath(target, drawState, path, stroke, false); |
} |
// Helper for getting the device bounds of a path. Inverse filled paths will have bounds set |