aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrAADistanceFieldPathRenderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrAADistanceFieldPathRenderer.h')
-rwxr-xr-xsrc/gpu/GrAADistanceFieldPathRenderer.h77
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