Index: src/gpu/GrPathRenderer.h |
diff --git a/src/gpu/GrPathRenderer.h b/src/gpu/GrPathRenderer.h |
index e353d6876fc1669129a646864fea4adcfeef8f95..50cf7483029e13f72bae86b29a5fd091edce3f36 100644 |
--- a/src/gpu/GrPathRenderer.h |
+++ b/src/gpu/GrPathRenderer.h |
@@ -77,21 +77,17 @@ public: |
* This function is to get the stencil support for a particular path. The path's fill must |
* not be an inverse type. |
* |
- * @param target target that the path will be rendered to |
* @param path the path that will be drawn |
* @param stroke the stroke information (width, join, cap). |
*/ |
- StencilSupport getStencilSupport(const GrDrawTarget* target, |
- const GrPipelineBuilder* pipelineBuilder, |
- const SkPath& path, |
- const GrStrokeInfo& stroke) const { |
+ StencilSupport getStencilSupport(const SkPath& path, const GrStrokeInfo& stroke) const { |
SkASSERT(!path.isInverseFillType()); |
- return this->onGetStencilSupport(target, pipelineBuilder, path, stroke); |
+ return this->onGetStencilSupport(path, stroke); |
} |
/** Args to canDrawPath() |
* |
- * fTarget The target that the path will be rendered to |
+ * fShaderCaps The shader caps |
* fPipelineBuilder The pipelineBuilder |
* fViewMatrix The viewMatrix |
* fPath The path to draw |
@@ -99,12 +95,21 @@ public: |
* fAntiAlias True if anti-aliasing is required. |
*/ |
struct CanDrawPathArgs { |
- const GrDrawTarget* fTarget; |
- const GrPipelineBuilder* fPipelineBuilder; |
+ const GrShaderCaps* fShaderCaps; |
+ const GrPipelineBuilder* fPipelineBuilder;// only used by GrStencilAndCoverPathRenderer |
const SkMatrix* fViewMatrix; |
const SkPath* fPath; |
const GrStrokeInfo* fStroke; |
bool fAntiAlias; |
+ |
+ void validate() const { |
+ SkASSERT(fShaderCaps); |
+ SkASSERT(fPipelineBuilder); |
+ SkASSERT(fViewMatrix); |
+ SkASSERT(fPath); |
+ SkASSERT(fStroke); |
+ SkASSERT(!fPath->isEmpty()); |
+ } |
}; |
/** |
@@ -115,12 +120,7 @@ public: |
* @return true if the path can be drawn by this object, false otherwise. |
*/ |
bool canDrawPath(const CanDrawPathArgs& args) const { |
- SkASSERT(args.fTarget); |
- SkASSERT(args.fPipelineBuilder); |
- SkASSERT(args.fViewMatrix); |
- SkASSERT(args.fPath); |
- SkASSERT(args.fStroke); |
- SkASSERT(!args.fPath->isEmpty()); |
+ SkDEBUGCODE(args.validate();) |
return this->onCanDrawPath(args); |
} |
@@ -144,6 +144,16 @@ public: |
const SkPath* fPath; |
const GrStrokeInfo* fStroke; |
bool fAntiAlias; |
+ |
+ void validate() const { |
+ SkASSERT(fTarget); |
+ SkASSERT(fResourceProvider); |
+ SkASSERT(fPipelineBuilder); |
+ SkASSERT(fViewMatrix); |
+ SkASSERT(fPath); |
+ SkASSERT(fStroke); |
+ SkASSERT(!fPath->isEmpty()); |
+ } |
}; |
/** |
@@ -151,16 +161,10 @@ public: |
* the subclass must respect the stencil settings of the GrPipelineBuilder. |
*/ |
bool drawPath(const DrawPathArgs& args) { |
- SkASSERT(args.fTarget); |
- SkASSERT(args.fPipelineBuilder); |
- SkASSERT(args.fViewMatrix); |
- SkASSERT(args.fPath); |
- SkASSERT(args.fStroke); |
- |
- SkASSERT(!args.fPath->isEmpty()); |
+ SkDEBUGCODE(args.validate();) |
#ifdef SK_DEBUG |
CanDrawPathArgs canArgs; |
- canArgs.fTarget = args.fTarget; |
+ canArgs.fShaderCaps = args.fTarget->caps()->shaderCaps(); |
canArgs.fPipelineBuilder = args.fPipelineBuilder; |
canArgs.fViewMatrix = args.fViewMatrix; |
canArgs.fPath = args.fPath; |
@@ -168,9 +172,7 @@ public: |
canArgs.fAntiAlias = args.fAntiAlias; |
SkASSERT(this->canDrawPath(canArgs)); |
SkASSERT(args.fPipelineBuilder->getStencil().isDisabled() || |
- kNoRestriction_StencilSupport == this->getStencilSupport(args.fTarget, |
- args.fPipelineBuilder, |
- *args.fPath, |
+ kNoRestriction_StencilSupport == this->getStencilSupport(*args.fPath, |
*args.fStroke)); |
#endif |
return this->onDrawPath(args); |
@@ -179,6 +181,7 @@ public: |
/* Args to stencilPath(). |
* |
* fTarget The target that the path will be rendered to. |
+ * fResourceProvider The resource provider for creating gpu resources to render the path |
* fPipelineBuilder The pipeline builder. |
* fViewMatrix Matrix applied to the path. |
* fPath The path to draw. |
@@ -186,11 +189,21 @@ public: |
*/ |
struct StencilPathArgs { |
GrDrawTarget* fTarget; |
- GrPipelineBuilder* fPipelineBuilder; |
GrResourceProvider* fResourceProvider; |
+ GrPipelineBuilder* fPipelineBuilder; |
const SkMatrix* fViewMatrix; |
const SkPath* fPath; |
const GrStrokeInfo* fStroke; |
+ |
+ void validate() const { |
+ SkASSERT(fTarget); |
+ SkASSERT(fResourceProvider); |
+ SkASSERT(fPipelineBuilder); |
+ SkASSERT(fViewMatrix); |
+ SkASSERT(fPath); |
+ SkASSERT(fStroke); |
+ SkASSERT(!fPath->isEmpty()); |
+ } |
}; |
/** |
@@ -199,16 +212,9 @@ public: |
* |
*/ |
void stencilPath(const StencilPathArgs& args) { |
- SkASSERT(args.fTarget); |
- SkASSERT(args.fPipelineBuilder); |
- SkASSERT(args.fResourceProvider); |
- SkASSERT(args.fViewMatrix); |
- SkASSERT(args.fPath); |
- SkASSERT(args.fStroke); |
- SkASSERT(!args.fPath->isEmpty()); |
- SkASSERT(kNoSupport_StencilSupport != |
- this->getStencilSupport(args.fTarget, args.fPipelineBuilder, *args.fPath, |
- *args.fStroke)); |
+ SkDEBUGCODE(args.validate();) |
+ SkASSERT(kNoSupport_StencilSupport != this->getStencilSupport(*args.fPath, *args.fStroke)); |
+ |
this->onStencilPath(args); |
} |
@@ -250,10 +256,7 @@ private: |
/** |
* Subclass overrides if it has any limitations of stenciling support. |
*/ |
- virtual StencilSupport onGetStencilSupport(const GrDrawTarget*, |
- const GrPipelineBuilder*, |
- const SkPath&, |
- const GrStrokeInfo&) const { |
+ virtual StencilSupport onGetStencilSupport(const SkPath&, const GrStrokeInfo&) const { |
return kNoRestriction_StencilSupport; |
} |