diff options
Diffstat (limited to 'src/gpu/GrAADistanceFieldPathRenderer.h')
-rwxr-xr-x | src/gpu/GrAADistanceFieldPathRenderer.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/gpu/GrAADistanceFieldPathRenderer.h b/src/gpu/GrAADistanceFieldPathRenderer.h new file mode 100755 index 0000000000..4c09f127c9 --- /dev/null +++ b/src/gpu/GrAADistanceFieldPathRenderer.h @@ -0,0 +1,77 @@ + +/* + * Copyright 2014 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrAADistanceFieldPathRenderer_DEFINED +#define GrAADistanceFieldPathRenderer_DEFINED + +#include "GrAllocPool.h" +#include "GrAtlas.h" +#include "GrPathRenderer.h" +#include "GrRect.h" + +#include "SkChecksum.h" + +class GrContext; +class GrPlot; + +class GrAADistanceFieldPathRenderer : public GrPathRenderer { +public: + GrAADistanceFieldPathRenderer(GrContext* context) + : fContext(context) + , fAtlas(NULL) { + } + + virtual ~GrAADistanceFieldPathRenderer(); + + virtual bool canDrawPath(const SkPath& path, + const SkStrokeRec& stroke, + const GrDrawTarget* target, + bool antiAlias) const SK_OVERRIDE; + +protected: + virtual StencilSupport onGetStencilSupport(const SkPath&, + const SkStrokeRec&, + const GrDrawTarget*) const SK_OVERRIDE; + + virtual bool onDrawPath(const SkPath& path, + const SkStrokeRec& stroke, + GrDrawTarget* target, + bool antiAlias) SK_OVERRIDE; + +private: + struct PathData { + uint32_t fGenID; + GrPlot* fPlot; + SkRect fBounds; + SkIPoint16 fAtlasLocation; + SK_DECLARE_INTERNAL_LLIST_INTERFACE(PathData); + + static inline const uint32_t& GetKey(const PathData& data) { + return data.fGenID; + } + + static inline uint32_t Hash(uint32_t key) { + return SkChecksum::Murmur3(&key, sizeof(key)); + } + }; + typedef SkTInternalLList<PathData> PathDataList; + + GrContext* fContext; + GrAtlas* fAtlas; + GrAtlas::ClientPlotUsage fPlotUsage; + SkTDynamicHash<PathData, uint32_t> fPathCache; + PathDataList fPathList; + + bool internalDrawPath(const SkPath& path, const PathData* pathData, GrDrawTarget* target); + PathData* addPathToAtlas(const SkPath& path, const SkStrokeRec& stroke, bool antiAlias); + bool freeUnusedPlot(); + + typedef GrPathRenderer INHERITED; +}; + +#endif |