Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Unified Diff: src/gpu/GrPathRenderer.h

Issue 1265763002: Args structs to GrPathRenderer functions (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: more Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrDrawContext.cpp ('k') | src/gpu/GrPathRendererChain.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrPathRenderer.h
diff --git a/src/gpu/GrPathRenderer.h b/src/gpu/GrPathRenderer.h
index 3400eadfe152c91063737687a2c0a93268501b25..e353d6876fc1669129a646864fea4adcfeef8f95 100644
--- a/src/gpu/GrPathRenderer.h
+++ b/src/gpu/GrPathRenderer.h
@@ -89,68 +89,127 @@ public:
return this->onGetStencilSupport(target, pipelineBuilder, path, stroke);
}
+ /** Args to canDrawPath()
+ *
+ * fTarget The target that the path will be rendered to
+ * fPipelineBuilder The pipelineBuilder
+ * fViewMatrix The viewMatrix
+ * fPath The path to draw
+ * fStroke The stroke information (width, join, cap)
+ * fAntiAlias True if anti-aliasing is required.
+ */
+ struct CanDrawPathArgs {
+ const GrDrawTarget* fTarget;
+ const GrPipelineBuilder* fPipelineBuilder;
+ const SkMatrix* fViewMatrix;
+ const SkPath* fPath;
+ const GrStrokeInfo* fStroke;
+ bool fAntiAlias;
+ };
+
/**
* Returns true if this path renderer is able to render the path. Returning false allows the
* caller to fallback to another path renderer This function is called when searching for a path
* renderer capable of rendering a path.
*
- * @param target The target that the path will be rendered to
- * @param pipelineBuilder The pipelineBuilder
- * @param viewMatrix The viewMatrix
- * @param path The path to draw
- * @param stroke The stroke information (width, join, cap)
- * @param antiAlias True if anti-aliasing is required.
- *
* @return true if the path can be drawn by this object, false otherwise.
*/
- virtual bool canDrawPath(const GrDrawTarget* target,
- const GrPipelineBuilder* pipelineBuilder,
- const SkMatrix& viewMatrix,
- const SkPath& path,
- const GrStrokeInfo& rec,
- bool antiAlias) const = 0;
+ 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());
+ return this->onCanDrawPath(args);
+ }
+
/**
- * Draws the path into the draw target. If getStencilSupport() would return kNoRestriction then
- * the subclass must respect the stencil settings of the target's draw state.
+ * Args to drawPath()
*
- * @param target The target that the path will be rendered to
- * @param pipelineBuilder The pipelineBuilder
- * @param viewMatrix The viewMatrix
- * @param path the path to draw.
- * @param stroke the stroke information (width, join, cap)
- * @param antiAlias true if anti-aliasing is required.
+ * fTarget The target that the path will be rendered to
+ * fResourceProvider The resource provider for creating gpu resources to render the path
+ * fPipelineBuilder The pipelineBuilder
+ * fViewMatrix The viewMatrix
+ * fPath the path to draw.
+ * fStroke the stroke information (width, join, cap)
+ * fAntiAlias true if anti-aliasing is required.
*/
- bool drawPath(GrDrawTarget* target,
- GrPipelineBuilder* ds,
- GrColor color,
- const SkMatrix& viewMatrix,
- const SkPath& path,
- const GrStrokeInfo& stroke,
- bool antiAlias) {
- SkASSERT(!path.isEmpty());
- SkASSERT(this->canDrawPath(target, ds, viewMatrix, path, stroke, antiAlias));
- SkASSERT(ds->getStencil().isDisabled() ||
- kNoRestriction_StencilSupport == this->getStencilSupport(target, ds, path,
- stroke));
- return this->onDrawPath(target, ds, color, viewMatrix, path, stroke, antiAlias);
+ struct DrawPathArgs {
+ GrDrawTarget* fTarget;
+ GrResourceProvider* fResourceProvider;
+ GrPipelineBuilder* fPipelineBuilder;
+ GrColor fColor;
+ const SkMatrix* fViewMatrix;
+ const SkPath* fPath;
+ const GrStrokeInfo* fStroke;
+ bool fAntiAlias;
+ };
+
+ /**
+ * Draws the path into the draw target. If getStencilSupport() would return kNoRestriction then
+ * 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());
+#ifdef SK_DEBUG
+ CanDrawPathArgs canArgs;
+ canArgs.fTarget = args.fTarget;
+ canArgs.fPipelineBuilder = args.fPipelineBuilder;
+ canArgs.fViewMatrix = args.fViewMatrix;
+ canArgs.fPath = args.fPath;
+ canArgs.fStroke = args.fStroke;
+ canArgs.fAntiAlias = args.fAntiAlias;
+ SkASSERT(this->canDrawPath(canArgs));
+ SkASSERT(args.fPipelineBuilder->getStencil().isDisabled() ||
+ kNoRestriction_StencilSupport == this->getStencilSupport(args.fTarget,
+ args.fPipelineBuilder,
+ *args.fPath,
+ *args.fStroke));
+#endif
+ return this->onDrawPath(args);
}
+ /* Args to stencilPath().
+ *
+ * fTarget The target that the path will be rendered to.
+ * fPipelineBuilder The pipeline builder.
+ * fViewMatrix Matrix applied to the path.
+ * fPath The path to draw.
+ * fStroke The stroke information (width, join, cap)
+ */
+ struct StencilPathArgs {
+ GrDrawTarget* fTarget;
+ GrPipelineBuilder* fPipelineBuilder;
+ GrResourceProvider* fResourceProvider;
+ const SkMatrix* fViewMatrix;
+ const SkPath* fPath;
+ const GrStrokeInfo* fStroke;
+ };
+
/**
* Draws the path to the stencil buffer. Assume the writable stencil bits are already
* initialized to zero. The pixels inside the path will have non-zero stencil values afterwards.
*
- * @param path the path to draw.
- * @param stroke the stroke information (width, join, cap)
- * @param target target that the path will be rendered to
*/
- void stencilPath(GrDrawTarget* target,
- GrPipelineBuilder* ds,
- const SkMatrix& viewMatrix,
- const SkPath& path,
- const GrStrokeInfo& stroke) {
- SkASSERT(!path.isEmpty());
- SkASSERT(kNoSupport_StencilSupport != this->getStencilSupport(target, ds, path, stroke));
- this->onStencilPath(target, ds, viewMatrix, path, stroke);
+ 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));
+ this->onStencilPath(args);
}
// Helper for determining if we can treat a thin stroke as a hairline w/ coverage.
@@ -171,6 +230,23 @@ public:
}
protected:
+ // Helper for getting the device bounds of a path. Inverse filled paths will have bounds set
+ // by devSize. Non-inverse path bounds will not necessarily be clipped to devSize.
+ static void GetPathDevBounds(const SkPath& path,
+ int devW,
+ int devH,
+ const SkMatrix& matrix,
+ SkRect* bounds);
+
+ // Helper version that gets the dev width and height from a GrSurface.
+ static void GetPathDevBounds(const SkPath& path,
+ const GrSurface* device,
+ const SkMatrix& matrix,
+ SkRect* bounds) {
+ GetPathDevBounds(path, device->width(), device->height(), matrix, bounds);
+ }
+
+private:
/**
* Subclass overrides if it has any limitations of stenciling support.
*/
@@ -184,23 +260,18 @@ protected:
/**
* Subclass implementation of drawPath()
*/
- virtual bool onDrawPath(GrDrawTarget*,
- GrPipelineBuilder*,
- GrColor,
- const SkMatrix& viewMatrix,
- const SkPath&,
- const GrStrokeInfo&,
- bool antiAlias) = 0;
+ virtual bool onDrawPath(const DrawPathArgs& args) = 0;
+
+ /**
+ * Subclass implementation of canDrawPath()
+ */
+ virtual bool onCanDrawPath(const CanDrawPathArgs& args) const = 0;
/**
* Subclass implementation of stencilPath(). Subclass must override iff it ever returns
* kStencilOnly in onGetStencilSupport().
*/
- virtual void onStencilPath(GrDrawTarget* target,
- GrPipelineBuilder* pipelineBuilder,
- const SkMatrix& viewMatrix,
- const SkPath& path,
- const GrStrokeInfo& stroke) {
+ virtual void onStencilPath(const StencilPathArgs& args) {
GR_STATIC_CONST_SAME_STENCIL(kIncrementStencil,
kReplace_StencilOp,
kReplace_StencilOp,
@@ -208,28 +279,20 @@ protected:
0xffff,
0xffff,
0xffff);
- pipelineBuilder->setStencil(kIncrementStencil);
- pipelineBuilder->setDisableColorXPFactory();
- this->drawPath(target, pipelineBuilder, GrColor_WHITE, viewMatrix, path, stroke, false);
- }
-
- // Helper for getting the device bounds of a path. Inverse filled paths will have bounds set
- // by devSize. Non-inverse path bounds will not necessarily be clipped to devSize.
- static void GetPathDevBounds(const SkPath& path,
- int devW,
- int devH,
- const SkMatrix& matrix,
- SkRect* bounds);
-
- // Helper version that gets the dev width and height from a GrSurface.
- static void GetPathDevBounds(const SkPath& path,
- const GrSurface* device,
- const SkMatrix& matrix,
- SkRect* bounds) {
- GetPathDevBounds(path, device->width(), device->height(), matrix, bounds);
+ args.fPipelineBuilder->setStencil(kIncrementStencil);
+ args.fPipelineBuilder->setDisableColorXPFactory();
+ DrawPathArgs drawArgs;
+ drawArgs.fTarget = args.fTarget;
+ drawArgs.fResourceProvider = args.fResourceProvider;
+ drawArgs.fPipelineBuilder = args.fPipelineBuilder;
+ drawArgs.fColor = 0xFFFFFFFF;
+ drawArgs.fViewMatrix = args.fViewMatrix;
+ drawArgs.fPath = args.fPath;
+ drawArgs.fStroke = args.fStroke;
+ drawArgs.fAntiAlias = false;
+ this->drawPath(drawArgs);
}
-private:
typedef SkRefCnt INHERITED;
};
« no previous file with comments | « src/gpu/GrDrawContext.cpp ('k') | src/gpu/GrPathRendererChain.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698