Chromium Code Reviews| Index: src/image/SkImage.cpp |
| diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp |
| index 1d61438707fd274b9165062c6831b1ebf941815f..3c69a4afc6cedb6a71ad52d9c4cc975cad187050 100644 |
| --- a/src/image/SkImage.cpp |
| +++ b/src/image/SkImage.cpp |
| @@ -11,12 +11,15 @@ |
| #include "SkImageGenerator.h" |
| #include "SkImagePriv.h" |
| #include "SkImage_Base.h" |
| +#include "SkPixelRef.h" |
| #include "SkReadPixelsRec.h" |
| #include "SkString.h" |
| #include "SkSurface.h" |
| + |
| #if SK_SUPPORT_GPU |
| #include "GrTexture.h" |
| #include "GrContext.h" |
| +#include "SkImage_Gpu.h" |
| #endif |
| uint32_t SkImage::NextUniqueID() { |
| @@ -227,6 +230,43 @@ bool SkImage::readPixels(const SkPixmap& pmap, int srcX, int srcY) const { |
| /////////////////////////////////////////////////////////////////////////////////////////////////// |
| +SkImage* SkImage::NewFromBitmap(const SkBitmap& bm) { |
| + SkPixelRef* pr = bm.pixelRef(); |
| + if (NULL == pr) { |
| + return NULL; |
| + } |
| + |
|
robertphillips
2015/07/07 12:23:59
These two consts should probably go inside the SK_
reed2
2015/07/07 12:58:24
Done.
|
| + const bool immutable = bm.isImmutable(); |
| + const SkImageInfo info = bm.info(); |
| + |
| +#if SK_SUPPORT_GPU |
| + if (GrTexture* tex = pr->getTexture()) { |
| + SkAutoTUnref<GrTexture> unrefCopy; |
| + if (!immutable) { |
| + const bool notBudgeted = false; |
| + tex = GrDeepCopyTexture(tex, notBudgeted); |
| + if (NULL == tex) { |
| + return NULL; |
| + } |
| + unrefCopy.reset(tex); |
| + } |
| + return SkNEW_ARGS(SkImage_Gpu, (info.width(), info.height(), info.alphaType(), |
| + tex, 0, SkSurface::kNo_Budgeted)); |
| + } |
| +#endif |
| + |
| + // Encoded version? |
| + if (SkData* encoded = pr->refEncodedData()) { |
| + SkAutoTUnref<SkData> data(encoded); |
| + return SkImage::NewFromEncoded(encoded); // todo: add origin/subset/etc? |
| + } |
| + |
| + // This will check for immutable (share or copy) |
| + return SkNewImageFromRasterBitmap(bm, false, NULL); |
| +} |
| + |
| +////////////////////////////////////////////////////////////////////////////////////// |
| + |
| #if !SK_SUPPORT_GPU |
| SkImage* SkImage::NewFromTexture(GrContext*, const GrBackendTextureDesc&, SkAlphaType, |