Make all GrContext members that return a texture also ref the texture for the caller.
Review URL: https://codereview.appspot.com/7198049
git-svn-id: http://skia.googlecode.com/svn/trunk@7362 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 7ceefe8..827fc52 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -96,7 +96,7 @@
~SkAutoCachedTexture() {
if (NULL != fTexture) {
- GrUnlockCachedBitmapTexture(fTexture);
+ GrUnlockAndUnrefCachedBitmapTexture(fTexture);
}
}
@@ -104,14 +104,14 @@
const SkBitmap& bitmap,
const GrTextureParams* params) {
if (NULL != fTexture) {
- GrUnlockCachedBitmapTexture(fTexture);
+ GrUnlockAndUnrefCachedBitmapTexture(fTexture);
fTexture = NULL;
}
fDevice = device;
GrTexture* result = (GrTexture*)bitmap.getTexture();
if (NULL == result) {
// Cannot return the native texture so look it up in our cache
- fTexture = GrLockCachedBitmapTexture(device->context(), bitmap, params);
+ fTexture = GrLockAndRefCachedBitmapTexture(device->context(), bitmap, params);
result = fTexture;
}
return result;
@@ -1801,8 +1801,7 @@
desc.fHeight = height;
desc.fSampleCnt = fRenderTarget->numSamples();
- GrTexture* texture;
- SkAutoTUnref<GrTexture> tunref;
+ SkAutoTUnref<GrTexture> texture;
// Skia's convention is to only clear a device if it is non-opaque.
bool needClear = !isOpaque;
@@ -1812,18 +1811,14 @@
const GrContext::ScratchTexMatch match = (kSaveLayer_Usage == usage) ?
GrContext::kApprox_ScratchTexMatch :
GrContext::kExact_ScratchTexMatch;
- texture = fContext->lockScratchTexture(desc, match);
+ texture.reset(fContext->lockAndRefScratchTexture(desc, match));
#else
- tunref.reset(fContext->createUncachedTexture(desc, NULL, 0));
- texture = tunref.get();
+ texture.reset(fContext->createUncachedTexture(desc, NULL, 0));
#endif
- if (texture) {
- return SkNEW_ARGS(SkGpuDevice,(fContext,
- texture,
- needClear));
+ if (NULL != texture.get()) {
+ return SkNEW_ARGS(SkGpuDevice,(fContext, texture, needClear));
} else {
- GrPrintf("---- failed to create compatible device texture [%d %d]\n",
- width, height);
+ GrPrintf("---- failed to create compatible device texture [%d %d]\n", width, height);
return NULL;
}
}