| Index: src/gpu/GrLayerCache.cpp
|
| diff --git a/src/gpu/GrLayerCache.cpp b/src/gpu/GrLayerCache.cpp
|
| index f6377bf7e92e5713196296114a545dd4dfb5e177..86258abf42cb213555d19fa39ea5ae78957c965e 100644
|
| --- a/src/gpu/GrLayerCache.cpp
|
| +++ b/src/gpu/GrLayerCache.cpp
|
| @@ -41,8 +41,8 @@ private:
|
| int fLayerID;
|
| };
|
|
|
| -GrLayerCache::GrLayerCache(GrGpu* gpu)
|
| - : fGpu(SkRef(gpu))
|
| +GrLayerCache::GrLayerCache(GrContext* context)
|
| + : fContext(context)
|
| , fLayerPool(16) { // TODO: may need to increase this later
|
| }
|
|
|
| @@ -57,7 +57,7 @@ void GrLayerCache::init() {
|
|
|
| // The layer cache only gets 1 plot
|
| SkISize textureSize = SkISize::Make(kAtlasTextureWidth, kAtlasTextureHeight);
|
| - fAtlasMgr.reset(SkNEW_ARGS(GrAtlasMgr, (fGpu, kSkia8888_GrPixelConfig,
|
| + fAtlasMgr.reset(SkNEW_ARGS(GrAtlasMgr, (fContext->getGpu(), kSkia8888_GrPixelConfig,
|
| textureSize, 1, 1, false)));
|
| }
|
|
|
| @@ -75,6 +75,10 @@ GrCachedLayer* GrLayerCache::createLayer(const SkPicture* picture, int layerID)
|
| return layer;
|
| }
|
|
|
| +GrCachedLayer* GrLayerCache::findLayer(const SkPicture* picture, int layerID) {
|
| + SkASSERT(picture->uniqueID() != SK_InvalidGenID);
|
| + return fLayerHash.find(PictureLayerKey(picture->uniqueID(), layerID));
|
| +}
|
|
|
| GrCachedLayer* GrLayerCache::findLayerOrCreate(const SkPicture* picture, int layerID) {
|
| SkASSERT(picture->uniqueID() != SK_InvalidGenID);
|
| @@ -82,5 +86,24 @@ GrCachedLayer* GrLayerCache::findLayerOrCreate(const SkPicture* picture, int lay
|
| if (NULL == layer) {
|
| layer = this->createLayer(picture, layerID);
|
| }
|
| +
|
| return layer;
|
| }
|
| +
|
| +bool GrLayerCache::lock(GrCachedLayer* layer, const GrTextureDesc& desc) {
|
| + SkASSERT(NULL == layer->getTexture());
|
| +
|
| + // This just uses scratch textures and doesn't cache the texture.
|
| + // This can yield a lot of re-rendering
|
| + layer->setTexture(fContext->lockAndRefScratchTexture(desc, GrContext::kApprox_ScratchTexMatch));
|
| + return false;
|
| +}
|
| +
|
| +void GrLayerCache::unlock(GrCachedLayer* layer) {
|
| + if (NULL == layer || NULL == layer->getTexture()) {
|
| + return;
|
| + }
|
| +
|
| + fContext->unlockScratchTexture(layer->getTexture());
|
| + layer->setTexture(NULL);
|
| +}
|
|
|