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 */
18class GR_API GrDefaultPathRenderer : public GrPathRenderer {
19public:
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
37private:
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