Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Unified Diff: src/gpu/GrPathRange.h

Issue 563283004: Use per-typeface sets of glyphs for nvpr text (Closed) Base URL: https://skia.googlesource.com/skia.git@upload_glyphmemorypath
Patch Set: Fix builds Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrGpu.cpp ('k') | src/gpu/GrPathRange.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrPathRange.h
diff --git a/src/gpu/GrPathRange.h b/src/gpu/GrPathRange.h
index b52fef170c62798894ee042bbb86c27e396209d0..dc8ce1d71b54980e36d700acd163ce0c2b2fae99 100644
--- a/src/gpu/GrPathRange.h
+++ b/src/gpu/GrPathRange.h
@@ -10,51 +10,80 @@
#include "GrGpuResource.h"
#include "GrResourceCache.h"
+#include "SkRefCnt.h"
#include "SkStrokeRec.h"
+#include "SkTArray.h"
class SkPath;
+class SkDescriptor;
/**
- * Represents a contiguous range of GPU path objects with a common stroke. The
- * path range is immutable with the exception that individual paths can be
- * initialized lazily. Unititialized paths are silently ignored by drawing
- * functions.
+ * Represents a contiguous range of GPU path objects, all with a common stroke.
+ * This object is immutable with the exception that individual paths may be
+ * initialized lazily.
*/
+
class GrPathRange : public GrGpuResource {
public:
SK_DECLARE_INST_COUNT(GrPathRange);
static const bool kIsWrapped = false;
+ /**
+ * Return the resourceType intended for cache lookups involving GrPathRange.
+ */
static GrResourceKey::ResourceType resourceType() {
static const GrResourceKey::ResourceType type = GrResourceKey::GenerateResourceType();
return type;
}
/**
- * Initialize to a range with a fixed size and stroke. Stroke must not be hairline.
+ * Class that generates the paths for a specific range.
*/
- GrPathRange(GrGpu* gpu, size_t size, const SkStrokeRec& stroke)
- : INHERITED(gpu, kIsWrapped),
- fSize(size),
- fStroke(stroke) {
- this->registerWithCache();
- }
+ class PathGenerator : public SkRefCnt {
+ public:
+ virtual int getNumPaths() = 0;
+ virtual void generatePath(int index, SkPath* out) = 0;
+ virtual bool isEqualTo(const SkDescriptor&) const { return false; }
+ virtual ~PathGenerator() {}
+ };
- size_t getSize() const { return fSize; }
- const SkStrokeRec& getStroke() const { return fStroke; }
+ /**
+ * Initialize a lazy-loaded path range. This class will generate an SkPath and call
+ * onInitPath() for each path within the range before it is drawn for the first time.
+ */
+ GrPathRange(GrGpu*, PathGenerator*, const SkStrokeRec& stroke);
/**
- * Initialize a path in the range. It is invalid to call this method for a
- * path that has already been initialized.
+ * Initialize an eager-loaded path range. The subclass is responsible for ensuring all
+ * the paths are initialized up front.
*/
- virtual void initAt(size_t index, const SkPath&) = 0;
+ GrPathRange(GrGpu*, int numPaths, const SkStrokeRec& stroke);
+
+ virtual bool isEqualTo(const SkDescriptor& desc) const {
+ return NULL != fPathGenerator.get() && fPathGenerator->isEqualTo(desc);
+ }
+
+ int getNumPaths() const { return fNumPaths; }
+ const SkStrokeRec& getStroke() const { return fStroke; }
+ const PathGenerator* getPathGenerator() const { return fPathGenerator.get(); }
protected:
- size_t fSize;
- SkStrokeRec fStroke;
+ // Initialize a path in the range before drawing. This is only called when
+ // fPathGenerator is non-null. The child class need not call didChangeGpuMemorySize(),
+ // GrPathRange will take care of that after the call is complete.
+ virtual void onInitPath(int index, const SkPath&) const = 0;
private:
+ // Notify when paths will be drawn in case this is a lazy-loaded path range.
+ friend class GrGpu;
+ void willDrawPaths(const uint32_t indices[], int count) const;
+
+ mutable SkAutoTUnref<PathGenerator> fPathGenerator;
+ mutable SkTArray<uint8_t, true /*MEM_COPY*/> fGeneratedPaths;
+ const int fNumPaths;
+ const SkStrokeRec fStroke;
+
typedef GrGpuResource INHERITED;
};
« no previous file with comments | « src/gpu/GrGpu.cpp ('k') | src/gpu/GrPathRange.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698