Index: src/gpu/GrAtlasTextContext.h |
diff --git a/src/gpu/GrAtlasTextContext.h b/src/gpu/GrAtlasTextContext.h |
index 7859c04e23cb5e6bf530d640e996488245d6e859..c999e1f0afb34642eea402b2f8864c6f790e4957 100644 |
--- a/src/gpu/GrAtlasTextContext.h |
+++ b/src/gpu/GrAtlasTextContext.h |
@@ -14,6 +14,7 @@ |
#include "GrGeometryProcessor.h" |
#include "SkDescriptor.h" |
#include "GrMemoryPool.h" |
+#include "SkMaskFilter.h" |
#include "SkTextBlob.h" |
#include "SkTInternalLList.h" |
@@ -84,7 +85,6 @@ private: |
* glyph cache to get the path at flush time, or hold onto the path in the cache, which |
* would greatly increase the memory of these cached items. |
*/ |
- |
struct Run { |
Run() : fColor(GrColor_ILLEGAL), fInitialized(false), fDrawAsPaths(false) { |
fVertexBounds.setLargestInverted(); |
@@ -132,9 +132,14 @@ private: |
SkMatrix fViewMatrix; |
SkScalar fX; |
SkScalar fY; |
- SkPaint::Style fStyle; |
int fRunCount; |
- uint32_t fUniqueID; |
+ SkMaskFilter::BlurRec fBlurRec; |
+ struct StrokeInfo { |
+ SkScalar fFrameWidth; |
+ SkScalar fMiterLimit; |
+ SkPaint::Join fJoin; |
+ }; |
+ StrokeInfo fStrokeInfo; |
GrMemoryPool* fPool; |
// all glyph / vertex offsets are into these pools. |
@@ -142,12 +147,26 @@ private: |
GrGlyph::PackedID* fGlyphIDs; |
Run* fRuns; |
- static const uint32_t& GetKey(const BitmapTextBlob& blob) { |
- return blob.fUniqueID; |
+ struct Key { |
+ Key() { |
+ memset(this, 0, sizeof(Key)); |
+ } |
+ uint32_t fUniqueID; |
+ SkPaint::Style fStyle; |
+ bool fHasBlur; |
+ |
+ bool operator==(const Key& other) const { |
+ return 0 == memcmp(this, &other, sizeof(Key)); |
+ } |
+ }; |
+ Key fKey; |
+ |
+ static const Key& GetKey(const BitmapTextBlob& blob) { |
+ return blob.fKey; |
} |
- static uint32_t Hash(const uint32_t& key) { |
- return SkChecksum::Mix(key); |
+ static uint32_t Hash(const Key& key) { |
+ return SkChecksum::Murmur3(&key, sizeof(Key)); |
} |
void operator delete(void* p) { |
@@ -200,6 +219,7 @@ private: |
inline SkGlyphCache* setupCache(Run*, const SkPaint&, const SkMatrix& viewMatrix); |
static inline bool MustRegenerateBlob(SkScalar* outTransX, SkScalar* outTransY, |
const BitmapTextBlob&, const SkPaint&, |
+ const SkMaskFilter::BlurRec&, |
const SkMatrix& viewMatrix, SkScalar x, SkScalar y); |
void regenerateTextBlob(BitmapTextBlob* bmp, const SkPaint& skPaint, const SkMatrix& viewMatrix, |
const SkTextBlob* blob, SkScalar x, SkScalar y, |