| Index: src/gpu/SkGrPixelRef.cpp
|
| diff --git a/src/gpu/SkGrPixelRef.cpp b/src/gpu/SkGrPixelRef.cpp
|
| index dc5d7558f0d7a3e5c0294ec59f08f1622ef0ea16..882995e088013d6674efc7317cddc0aa78ee126e 100644
|
| --- a/src/gpu/SkGrPixelRef.cpp
|
| +++ b/src/gpu/SkGrPixelRef.cpp
|
| @@ -18,16 +18,14 @@
|
| // 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() {
|
| }
|
|
|
| -void* SkROLockPixelsPixelRef::onLockPixels(SkColorTable** ctable) {
|
| - if (ctable) {
|
| - *ctable = NULL;
|
| - }
|
| +bool SkROLockPixelsPixelRef::onNewLockPixels(LockRec* rec) {
|
| fBitmap.reset();
|
| // SkDebugf("---------- calling readpixels in support of lockpixels\n");
|
| if (!this->onReadPixels(&fBitmap, NULL)) {
|
| @@ -35,7 +33,14 @@ void* SkROLockPixelsPixelRef::onLockPixels(SkColorTable** ctable) {
|
| return NULL;
|
| }
|
| fBitmap.lockPixels();
|
| - return fBitmap.getPixels();
|
| + if (NULL == fBitmap.getPixels()) {
|
| + return false;
|
| + }
|
| +
|
| + rec->fPixels = fBitmap.getPixels();
|
| + rec->fColorTable = NULL;
|
| + rec->fRowBytes = fBitmap.rowBytes();
|
| + return true;
|
| }
|
|
|
| void SkROLockPixelsPixelRef::onUnlockPixels() {
|
| @@ -76,6 +81,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,14 +106,17 @@ 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) {
|
| +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.
|
|
|