Index: src/gpu/SkGrPixelRef.cpp |
diff --git a/src/gpu/SkGrPixelRef.cpp b/src/gpu/SkGrPixelRef.cpp |
index 012942667c72b8c134ef8333b2deb708cd11c8ee..ddd60ff864e8de63d8207bea14c61f558102471c 100644 |
--- a/src/gpu/SkGrPixelRef.cpp |
+++ b/src/gpu/SkGrPixelRef.cpp |
@@ -18,11 +18,10 @@ |
// to avoid deadlock with the default one provided by SkPixelRef. |
SK_DECLARE_STATIC_MUTEX(gROLockPixelsPixelRefMutex); |
-SkROLockPixelsPixelRef::SkROLockPixelsPixelRef() : INHERITED(&gROLockPixelsPixelRefMutex) { |
-} |
+SkROLockPixelsPixelRef::SkROLockPixelsPixelRef(const SkImageInfo& info) |
+ : INHERITED(info, &gROLockPixelsPixelRefMutex) {} |
-SkROLockPixelsPixelRef::~SkROLockPixelsPixelRef() { |
-} |
+SkROLockPixelsPixelRef::~SkROLockPixelsPixelRef() {} |
void* SkROLockPixelsPixelRef::onLockPixels(SkColorTable** ctable) { |
if (ctable) { |
@@ -76,6 +75,14 @@ static SkGrPixelRef* copyToTexturePixelRef(GrTexture* texture, SkBitmap::Config |
desc.fFlags = kRenderTarget_GrTextureFlagBit | kNoStencil_GrTextureFlagBit; |
desc.fConfig = SkBitmapConfig2GrPixelConfig(dstConfig); |
+ SkImageInfo info; |
+ if (!GrPixelConfig2ColorType(desc.fConfig, &info.fColorType)) { |
+ return NULL; |
+ } |
+ info.fWidth = desc.fWidth; |
+ info.fHeight = desc.fHeight; |
+ info.fAlphaType = kPremul_SkAlphaType; |
+ |
GrTexture* dst = context->createUncachedTexture(desc, NULL, 0); |
if (NULL == dst) { |
return NULL; |
@@ -93,31 +100,15 @@ static SkGrPixelRef* copyToTexturePixelRef(GrTexture* texture, SkBitmap::Config |
dst->releaseRenderTarget(); |
#endif |
- SkGrPixelRef* pixelRef = SkNEW_ARGS(SkGrPixelRef, (dst)); |
+ SkGrPixelRef* pixelRef = SkNEW_ARGS(SkGrPixelRef, (info, dst)); |
SkSafeUnref(dst); |
return pixelRef; |
} |
/////////////////////////////////////////////////////////////////////////////// |
-SkGrPixelRef::SkGrPixelRef(GrSurface* surface, bool transferCacheLock) { |
- // TODO: figure out if this is responsible for Chrome canvas errors |
-#if 0 |
- // The GrTexture has a ref to the GrRenderTarget but not vice versa. |
- // If the GrTexture exists take a ref to that (rather than the render |
- // target) |
- fSurface = surface->asTexture(); |
-#else |
- fSurface = NULL; |
-#endif |
- if (NULL == fSurface) { |
- fSurface = surface; |
- } |
- fUnlock = transferCacheLock; |
- SkSafeRef(surface); |
-} |
- |
-SkGrPixelRef::SkGrPixelRef(const SkImageInfo&, GrSurface* surface, bool transferCacheLock) { |
+SkGrPixelRef::SkGrPixelRef(const SkImageInfo& info, GrSurface* surface, |
+ bool transferCacheLock) : INHERITED(info) { |
// TODO: figure out if this is responsible for Chrome canvas errors |
#if 0 |
// The GrTexture has a ref to the GrRenderTarget but not vice versa. |