| Index: include/gpu/GrContext.h
|
| diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h
|
| index 4500936b82076d19210207409338f627854e9d77..6d89d4668a967780961947d9d557444b34dd721f 100644
|
| --- a/include/gpu/GrContext.h
|
| +++ b/include/gpu/GrContext.h
|
| @@ -290,15 +290,13 @@ public:
|
| * tiling non-power-of-two textures on APIs that don't support this (e.g.
|
| * unextended GLES2). Tiling a NPOT texture created by lockScratchTexture on
|
| * such an API will create gaps in the tiling pattern. This includes clamp
|
| - * mode. (This may be addressed in a future update.)
|
| - */
|
| - GrTexture* lockAndRefScratchTexture(const GrTextureDesc&, ScratchTexMatch match);
|
| -
|
| - /**
|
| - * When done with an entry, call unlockScratchTexture(entry) on it, which returns
|
| - * it to the cache, where it may be purged. This does not unref the texture.
|
| + * mode. (This may be addressed in a future update.)7
|
| + *
|
| + * internalFlag is a temporary workaround until changes in the internal
|
| + * architecture are complete. Use the default value.
|
| */
|
| - void unlockScratchTexture(GrTexture* texture);
|
| + GrTexture* lockAndRefScratchTexture(const GrTextureDesc&, ScratchTexMatch match,
|
| + bool internalFlag = false);
|
|
|
| /**
|
| * Creates a texture that is outside the cache. Does not count against
|
| @@ -951,6 +949,7 @@ public:
|
| GrDrawTarget* getTextTarget();
|
| const GrIndexBuffer* getQuadIndexBuffer() const;
|
| GrAARectRenderer* getAARectRenderer() { return fAARectRenderer; }
|
| + GrResourceCache* getResourceCache() { return fResourceCache; }
|
| GrResourceCache2* getResourceCache2() { return fResourceCache2; }
|
|
|
| // Called by tests that draw directly to the context via GrDrawTarget
|
| @@ -1075,15 +1074,7 @@ private:
|
| size_t rowBytes,
|
| bool filter);
|
|
|
| - // Needed so GrTexture's returnToCache helper function can call
|
| - // addExistingTextureToCache
|
| - friend class GrTexture;
|
| - friend class GrStencilAndCoverPathRenderer;
|
| - friend class GrStencilAndCoverTextContext;
|
| -
|
| - // Add an existing texture to the texture cache. This is intended solely
|
| - // for use with textures released from an GrAutoScratchTexture.
|
| - void addExistingTextureToCache(GrTexture* texture);
|
| + GrTexture* createNewScratchTexture(const GrTextureDesc& desc);
|
|
|
| /**
|
| * These functions create premul <-> unpremul effects if it is possible to generate a pair
|
| @@ -1103,8 +1094,7 @@ private:
|
| };
|
|
|
| /**
|
| - * Gets and locks a scratch texture from a descriptor using either exact or approximate criteria.
|
| - * Unlocks texture in the destructor.
|
| + * This is deprecated. Don't use it.
|
| */
|
| class SK_API GrAutoScratchTexture : public ::SkNoncopyable {
|
| public:
|
| @@ -1115,10 +1105,11 @@ public:
|
|
|
| GrAutoScratchTexture(GrContext* context,
|
| const GrTextureDesc& desc,
|
| - GrContext::ScratchTexMatch match = GrContext::kApprox_ScratchTexMatch)
|
| + GrContext::ScratchTexMatch match = GrContext::kApprox_ScratchTexMatch,
|
| + bool internalFlag = false)
|
| : fContext(NULL)
|
| , fTexture(NULL) {
|
| - this->set(context, desc, match);
|
| + this->set(context, desc, match, internalFlag);
|
| }
|
|
|
| ~GrAutoScratchTexture() {
|
| @@ -1127,34 +1118,26 @@ public:
|
|
|
| void reset() {
|
| if (fContext && fTexture) {
|
| - fContext->unlockScratchTexture(fTexture);
|
| fTexture->unref();
|
| fTexture = NULL;
|
| }
|
| }
|
|
|
| - /*
|
| - * When detaching a texture we do not unlock it in the texture cache but
|
| - * we do set the returnToCache flag. In this way the texture remains
|
| - * "locked" in the texture cache until it is freed and recycled in
|
| - * GrTexture::internal_dispose. In reality, the texture has been removed
|
| - * from the cache (because this is in AutoScratchTexture) and by not
|
| - * calling unlockScratchTexture we simply don't re-add it. It will be
|
| - * reattached in GrTexture::internal_dispose.
|
| - *
|
| - * Note that the caller is assumed to accept and manage the ref to the
|
| - * returned texture.
|
| - */
|
| - GrTexture* detach();
|
| + GrTexture* detach() {
|
| + GrTexture* texture = fTexture;
|
| + fTexture = NULL;
|
| + return texture;
|
| + }
|
|
|
| GrTexture* set(GrContext* context,
|
| const GrTextureDesc& desc,
|
| - GrContext::ScratchTexMatch match = GrContext::kApprox_ScratchTexMatch) {
|
| + GrContext::ScratchTexMatch match = GrContext::kApprox_ScratchTexMatch,
|
| + bool internalFlag = 0) {
|
| this->reset();
|
|
|
| fContext = context;
|
| if (fContext) {
|
| - fTexture = fContext->lockAndRefScratchTexture(desc, match);
|
| + fTexture = fContext->lockAndRefScratchTexture(desc, match, internalFlag);
|
| if (NULL == fTexture) {
|
| fContext = NULL;
|
| }
|
|
|