Make GrContext cache the gpu paths
Creating paths for nv_path_rendering is costly. Try to reduce this
cost by caching paths based on the SkPath "hash" (i.e. SkPathRef
generation id) and stroke properties.
Adds the paths to GrContext::fTextureCache instance. Later this should
be renamed and the GrContext API should reflect the nature of the cache
better.
R=bsalomon@google.com, mtklein@google.com
Author: kkinnunen@nvidia.com
Review URL: https://codereview.chromium.org/26557003
git-svn-id: http://skia.googlecode.com/svn/trunk@12083 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrPath.h b/src/gpu/GrPath.h
index 37dc959..f481ea4 100644
--- a/src/gpu/GrPath.h
+++ b/src/gpu/GrPath.h
@@ -9,6 +9,8 @@
#define GrPath_DEFINED
#include "GrResource.h"
+#include "GrResourceCache.h"
+#include "SkPath.h"
#include "SkRect.h"
#include "SkStrokeRec.h"
@@ -16,9 +18,17 @@
public:
SK_DECLARE_INST_COUNT(GrPath);
- GrPath(GrGpu* gpu, bool isWrapped, const SkStrokeRec& stroke)
+ GrPath(GrGpu* gpu, bool isWrapped, const SkPath& skPath, const SkStrokeRec& stroke)
: INHERITED(gpu, isWrapped),
- fStroke(stroke) {
+ fSkPath(skPath),
+ fStroke(stroke),
+ fBounds(skPath.getBounds()) {
+ }
+
+ static GrResourceKey ComputeKey(const SkPath& path, const SkStrokeRec& stroke);
+
+ bool isEqualTo(const SkPath& path, const SkStrokeRec& stroke) {
+ return fSkPath == path && fStroke == stroke;
}
const SkRect& getBounds() const { return fBounds; }
@@ -26,8 +36,9 @@
const SkStrokeRec& getStroke() const { return fStroke; }
protected:
- SkRect fBounds;
+ SkPath fSkPath;
SkStrokeRec fStroke;
+ SkRect fBounds;
private:
typedef GrResource INHERITED;