| Index: src/gpu/GrRecordReplaceDraw.h
|
| diff --git a/src/gpu/GrRecordReplaceDraw.h b/src/gpu/GrRecordReplaceDraw.h
|
| index 538661a7b4afad42fd7e14a9dd5d8e3a6c3067f0..c0dd0b6a329deb47080633e798b19b779527b3b9 100644
|
| --- a/src/gpu/GrRecordReplaceDraw.h
|
| +++ b/src/gpu/GrRecordReplaceDraw.h
|
| @@ -8,124 +8,19 @@
|
| #ifndef GrRecordReplaceDraw_DEFINED
|
| #define GrRecordReplaceDraw_DEFINED
|
|
|
| -#include "SkChecksum.h"
|
| #include "SkDrawPictureCallback.h"
|
| -#include "SkImage.h"
|
| -#include "SkRect.h"
|
| -#include "SkTDynamicHash.h"
|
|
|
| -class SkBBoxHierarchy;
|
| -class SkBitmap;
|
| +class GrLayerCache;
|
| class SkCanvas;
|
| -class SkImage;
|
| class SkMatrix;
|
| -class SkPaint;
|
| class SkPicture;
|
| -class SkRecord;
|
| -
|
| -// GrReplacements collects op ranges that can be replaced with
|
| -// a single drawBitmap call (using a precomputed bitmap).
|
| -class GrReplacements {
|
| -public:
|
| - // All the operations between fStart and fStop (inclusive) will be replaced with
|
| - // a single drawBitmap call using fPos, fImage and fPaint.
|
| - class ReplacementInfo {
|
| - public:
|
| - struct Key {
|
| - Key(uint32_t pictureID, const SkMatrix& initialMat,
|
| - const int* key, int keySize, bool copyKey = false)
|
| - : fKeySize(keySize)
|
| - , fFreeKey(copyKey) {
|
| - fIDMatrix.fPictureID = pictureID;
|
| - fIDMatrix.fInitialMat = initialMat;
|
| - fIDMatrix.fInitialMat.getType(); // force initialization of type so hashes match
|
| -
|
| - if (copyKey) {
|
| - int* tempKey = SkNEW_ARRAY(int, keySize);
|
| - memcpy(tempKey, key, keySize * sizeof(int));
|
| - fKey = tempKey;
|
| - } else {
|
| - fKey = key;
|
| - }
|
| -
|
| - // The pictureID/matrix portion needs to be tightly packed.
|
| - GR_STATIC_ASSERT(sizeof(IDMatrix) == sizeof(uint32_t)+ // pictureID
|
| - 9 * sizeof(SkScalar)+sizeof(uint32_t)); // matrix
|
| - }
|
| -
|
| - ~Key() {
|
| - if (fFreeKey) {
|
| - SkDELETE_ARRAY(fKey);
|
| - }
|
| - }
|
| - bool operator==(const Key& other) const {
|
| - if (fKeySize != other.fKeySize) {
|
| - return false;
|
| - }
|
| - return fIDMatrix.fPictureID == other.fIDMatrix.fPictureID &&
|
| - fIDMatrix.fInitialMat.cheapEqualTo(other.fIDMatrix.fInitialMat) &&
|
| - !memcmp(fKey, other.fKey, fKeySize * sizeof(int));
|
| - }
|
| -
|
| - uint32_t hash() const {
|
| - uint32_t hash = SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(fKey),
|
| - fKeySize * sizeof(int));
|
| - return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(&fIDMatrix),
|
| - sizeof(IDMatrix), hash);
|
| - }
|
| -
|
| - private:
|
| - struct IDMatrix {
|
| - uint32_t fPictureID;
|
| - SkMatrix fInitialMat;
|
| - } fIDMatrix;
|
| -
|
| - const int* fKey;
|
| - const int fKeySize;
|
| - const bool fFreeKey;
|
| - };
|
| -
|
| - static const Key& GetKey(const ReplacementInfo& layer) { return layer.fKey; }
|
| - static uint32_t Hash(const Key& key) { return key.hash(); }
|
| -
|
| - ReplacementInfo(uint32_t pictureID, const SkMatrix& initialMat,
|
| - const int* key, int keySize)
|
| - : fKey(pictureID, initialMat, key, keySize, true)
|
| - , fImage(NULL)
|
| - , fPaint(NULL) {
|
| - }
|
| - ~ReplacementInfo() { fImage->unref(); SkDELETE(fPaint); }
|
| -
|
| - const Key fKey;
|
| - unsigned fStop;
|
| - SkIPoint fPos;
|
| - SkImage* fImage; // Owns a ref
|
| - const SkPaint* fPaint; // Owned by this object
|
| -
|
| - SkIRect fSrcRect;
|
| - };
|
| -
|
| - ~GrReplacements() { this->freeAll(); }
|
| -
|
| - // Add a new replacement range.
|
| - ReplacementInfo* newReplacement(uint32_t pictureID, const SkMatrix& initialMat,
|
| - const int* key, int keySize);
|
| -
|
| - const ReplacementInfo* lookup(uint32_t pictureID, const SkMatrix& initalMat,
|
| - const int* key, int keySize) const;
|
| -
|
| -private:
|
| - SkTDynamicHash<ReplacementInfo, ReplacementInfo::Key> fReplacementHash;
|
| -
|
| - void freeAll();
|
| -};
|
|
|
| // Draw an SkPicture into an SkCanvas replacing saveLayer/restore blocks with
|
| // drawBitmap calls. A convenience wrapper around SkRecords::Draw.
|
| // It returns the number of saveLayer/restore blocks replaced with drawBitmap calls.
|
| int GrRecordReplaceDraw(const SkPicture*,
|
| SkCanvas*,
|
| - const GrReplacements*,
|
| + GrLayerCache* layerCache,
|
| const SkMatrix& initialMatrix,
|
| SkDrawPictureCallback*);
|
|
|
|
|