Home | History | Annotate | Download | only in gpu
      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