1 /* 2 * Copyright 2011 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrDefaultPathRenderer_DEFINED 9 #define GrDefaultPathRenderer_DEFINED 10 11 #include "GrPathRenderer.h" 12 #include "SkTemplates.h" 13 14 /** 15 * Subclass that renders the path using the stencil buffer to resolve fill 16 * rules (e.g. winding, even-odd) 17 */ 18 class GR_API GrDefaultPathRenderer : public GrPathRenderer { 19 public: 20 GrDefaultPathRenderer(bool separateStencilSupport, 21 bool stencilWrapOpsSupport); 22 23 24 virtual bool requiresStencilPass(const SkPath& path, 25 GrPathFill fill, 26 const GrDrawTarget* target) const SK_OVERRIDE; 27 28 virtual bool canDrawPath(const SkPath& path, 29 GrPathFill fill, 30 const GrDrawTarget* target, 31 bool antiAlias) const SK_OVERRIDE; 32 33 virtual void drawPathToStencil(const SkPath& path, 34 GrPathFill fill, 35 GrDrawTarget* target) SK_OVERRIDE; 36 37 private: 38 39 virtual bool onDrawPath(const SkPath& path, 40 GrPathFill fill, 41 const GrVec* translate, 42 GrDrawTarget* target, 43 GrDrawState::StageMask stageMask, 44 bool antiAlias) SK_OVERRIDE; 45 46 bool internalDrawPath(const SkPath& path, 47 GrPathFill fill, 48 const GrVec* translate, 49 GrDrawTarget* target, 50 GrDrawState::StageMask stageMask, 51 bool stencilOnly); 52 53 bool createGeom(const SkPath& path, 54 GrPathFill fill, 55 const GrVec* translate, 56 GrScalar srcSpaceTol, 57 GrDrawTarget* target, 58 GrDrawState::StageMask stages, 59 GrPrimitiveType* primType, 60 int* vertexCnt, 61 int* indexCnt); 62 63 bool fSeparateStencil; 64 bool fStencilWrapOps; 65 66 typedef GrPathRenderer INHERITED; 67 }; 68 69 #endif 70