180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc.
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef GrDefaultPathRenderer_DEFINED
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define GrDefaultPathRenderer_DEFINED
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrPathRenderer.h"
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkTemplates.h"
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/**
15363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger *  Subclass that renders the path using the stencil buffer to resolve fill rules
16363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger * (e.g. winding, even-odd)
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass GR_API GrDefaultPathRenderer : public GrPathRenderer {
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
20363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    GrDefaultPathRenderer(bool separateStencilSupport, bool stencilWrapOpsSupport);
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
22363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual bool canDrawPath(const SkPath&,
23363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                             const SkStrokeRec&,
24363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                             const GrDrawTarget*,
25363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                             bool antiAlias) const SK_OVERRIDE;
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
29363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual StencilSupport onGetStencilSupport(const SkPath&,
30363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                                               const SkStrokeRec&,
31363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                                               const GrDrawTarget*) const SK_OVERRIDE;
32363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
33363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual bool onDrawPath(const SkPath&,
34363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                            const SkStrokeRec&,
35363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                            GrDrawTarget*,
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                            bool antiAlias) SK_OVERRIDE;
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
38363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void onStencilPath(const SkPath&,
39363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                               const SkStrokeRec&,
40363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                               GrDrawTarget*) SK_OVERRIDE;
41363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
42363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    bool internalDrawPath(const SkPath&,
43363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                          const SkStrokeRec&,
44363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                          GrDrawTarget*,
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                          bool stencilOnly);
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
47363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    bool createGeom(const SkPath&,
48363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                    const SkStrokeRec&,
49363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                    SkScalar srcSpaceTol,
50363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                    GrDrawTarget*,
51363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                    GrPrimitiveType*,
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    int* vertexCnt,
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                    int* indexCnt,
54363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger                    GrDrawTarget::AutoReleaseGeometry*);
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool    fSeparateStencil;
5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool    fStencilWrapOps;
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    typedef GrPathRenderer INHERITED;
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
63