Index: src/gpu/GrLayerCache.h |
diff --git a/src/gpu/GrLayerCache.h b/src/gpu/GrLayerCache.h |
index fc1467e1205b1a900197072ef01865f3a586b364..15fa246c439562823583ba93b2c15382e58377c9 100644 |
--- a/src/gpu/GrLayerCache.h |
+++ b/src/gpu/GrLayerCache.h |
@@ -51,15 +51,17 @@ struct GrCachedLayer { |
public: |
// For SkTDynamicHash |
struct Key { |
- Key(uint32_t pictureID, int start, int stop, const SkMatrix& ctm) |
+ Key(uint32_t pictureID, int start, int stop, const SkIPoint& offset, const SkMatrix& ctm) |
: fPictureID(pictureID) |
, fStart(start) |
, fStop(stop) |
+ , fOffset(offset) |
, fCTM(ctm) { |
fCTM.getType(); // force initialization of type so hashes match |
// Key needs to be tightly packed. |
GR_STATIC_ASSERT(sizeof(Key) == sizeof(uint32_t) + 2 * sizeof(int) + |
+ 2 * sizeof(int32_t) + |
9 * sizeof(SkScalar) + sizeof(uint32_t)); |
} |
@@ -67,12 +69,14 @@ public: |
return fPictureID == other.fPictureID && |
fStart == other.fStart && |
fStop == other.fStop && |
+ fOffset == other.fOffset && |
fCTM.cheapEqualTo(other.fCTM); |
} |
uint32_t pictureID() const { return fPictureID; } |
int start() const { return fStart; } |
int stop() const { return fStop; } |
+ const SkIPoint& offset() const { return fOffset; } |
const SkMatrix& ctm() const { return fCTM; } |
private: |
@@ -81,6 +85,8 @@ public: |
// The range of commands in the picture this layer represents |
const int fStart; |
const int fStop; |
+ // The offset of the layer in device space |
+ const SkIPoint fOffset; |
// The CTM applied to this layer in the picture |
SkMatrix fCTM; |
}; |
@@ -91,8 +97,9 @@ public: |
} |
// GrCachedLayer proper |
- GrCachedLayer(uint32_t pictureID, int start, int stop, const SkMatrix& ctm) |
- : fKey(pictureID, start, stop, ctm) |
+ GrCachedLayer(uint32_t pictureID, int start, int stop, |
+ const SkIPoint& offset, const SkMatrix& ctm) |
+ : fKey(pictureID, start, stop, offset, ctm) |
, fTexture(NULL) |
, fRect(GrIRect16::MakeEmpty()) |
, fPlot(NULL) |
@@ -107,6 +114,7 @@ public: |
uint32_t pictureID() const { return fKey.pictureID(); } |
int start() const { return fKey.start(); } |
int stop() const { return fKey.stop(); } |
+ const SkIPoint& offset() const { return fKey.offset(); } |
const SkMatrix& ctm() const { return fKey.ctm(); } |
void setTexture(GrTexture* texture, const GrIRect16& rect) { |
@@ -171,9 +179,11 @@ public: |
// elements by the GrContext |
void freeAll(); |
- GrCachedLayer* findLayer(uint32_t pictureID, int start, int stop, const SkMatrix& ctm); |
+ GrCachedLayer* findLayer(uint32_t pictureID, int start, int stop, |
+ const SkIPoint& offset, const SkMatrix& ctm); |
GrCachedLayer* findLayerOrCreate(uint32_t pictureID, |
int start, int stop, |
+ const SkIPoint& offset, |
const SkMatrix& ctm); |
// Inform the cache that layer's cached image is now required. |
@@ -227,9 +237,9 @@ private: |
int fPlotLocks[kNumPlotsX * kNumPlotsY]; |
void initAtlas(); |
- GrCachedLayer* createLayer(uint32_t pictureID, int start, int stop, const SkMatrix& ctm); |
+ GrCachedLayer* createLayer(uint32_t pictureID, int start, int stop, |
+ const SkIPoint& offset, const SkMatrix& ctm); |
-public: |
void purgeAll(); |
// Remove all the layers (and unlock any resources) associated with 'pictureID' |