| |
| /* |
| * 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 "GrBatchAtlas.h" |
| #include "GrPathRenderer.h" |
| #include "GrRect.h" |
| |
| #include "SkChecksum.h" |
| #include "SkTDynamicHash.h" |
| |
| class GrContext; |
| |
| class GrAADistanceFieldPathRenderer : public GrPathRenderer { |
| public: |
| GrAADistanceFieldPathRenderer(GrContext* context); |
| virtual ~GrAADistanceFieldPathRenderer(); |
| |
| virtual bool canDrawPath(const GrDrawTarget*, |
| const GrPipelineBuilder*, |
| const SkMatrix& viewMatrix, |
| const SkPath&, |
| const GrStrokeInfo&, |
| bool antiAlias) const override; |
| |
| protected: |
| virtual StencilSupport onGetStencilSupport(const GrDrawTarget*, |
| const GrPipelineBuilder*, |
| const SkPath&, |
| const GrStrokeInfo&) const override; |
| |
| virtual bool onDrawPath(GrDrawTarget*, |
| GrPipelineBuilder*, |
| GrColor, |
| const SkMatrix& viewMatrix, |
| const SkPath&, |
| const GrStrokeInfo&, |
| bool antiAlias) override; |
| |
| private: |
| struct PathData { |
| struct Key { |
| uint32_t fGenID; |
| // rendered size for stored path (32x32 max, 64x64 max, 128x128 max) |
| uint32_t fDimension; |
| bool operator==(const Key& other) const { |
| return other.fGenID == fGenID && other.fDimension == fDimension; |
| } |
| }; |
| Key fKey; |
| SkScalar fScale; |
| GrBatchAtlas::AtlasID fID; |
| SkRect fBounds; |
| SkIPoint16 fAtlasLocation; |
| SK_DECLARE_INTERNAL_LLIST_INTERFACE(PathData); |
| |
| static inline const Key& GetKey(const PathData& data) { |
| return data.fKey; |
| } |
| |
| static inline uint32_t Hash(Key key) { |
| return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(&key), sizeof(key)); |
| } |
| }; |
| |
| static void HandleEviction(GrBatchAtlas::AtlasID, void*); |
| |
| typedef SkTDynamicHash<PathData, PathData::Key> PathCache; |
| typedef SkTInternalLList<PathData> PathDataList; |
| |
| GrContext* fContext; |
| GrBatchAtlas* fAtlas; |
| PathCache fPathCache; |
| PathDataList fPathList; |
| |
| typedef GrPathRenderer INHERITED; |
| |
| friend class AADistanceFieldPathBatch; |
| friend struct PathTestStruct; |
| }; |
| |
| #endif |