Chromium Code Reviews| Index: src/image/SkImage_Raster.cpp |
| diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp |
| index 042107e3e3fcb5ad51eb13d17c84e78e85d61cce..2227c61aa88782377982300b66acb322ff97726d 100644 |
| --- a/src/image/SkImage_Raster.cpp |
| +++ b/src/image/SkImage_Raster.cpp |
| @@ -15,6 +15,16 @@ |
| #include "SkPixelRef.h" |
| #include "SkSurface.h" |
| +#if SK_SUPPORT_GPU |
| +#include "GrContext.h" |
| +#include "GrGpuResourcePriv.h" |
| +#include "GrResourceKey.h" |
| +#include "GrTextureAccess.h" |
|
robertphillips
2015/09/16 19:42:03
Do we need GrYUVProvider.h ?
reed1
2015/09/16 19:47:26
Done.
|
| +#include "GrYUVProvider.h" |
| +#include "SkGr.h" |
| +#include "SkGrPriv.h" |
| +#endif |
| + |
| class SkImage_Raster : public SkImage_Base { |
| public: |
| static bool ValidArgs(const Info& info, size_t rowBytes, SkColorTable* ctable, |
| @@ -67,6 +77,7 @@ public: |
| const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override; |
| SkData* onRefEncoded() const override; |
| bool getROPixels(SkBitmap*) const override; |
| + GrTexture* asTextureRef(GrContext*, SkImageUsageType) const override; |
| // exposed for SkSurface_Raster via SkNewImageFromPixelRef |
| SkImage_Raster(const SkImageInfo&, SkPixelRef*, const SkIPoint& pixelRefOrigin, size_t rowBytes, |
| @@ -180,6 +191,32 @@ bool SkImage_Raster::getROPixels(SkBitmap* dst) const { |
| return true; |
| } |
| +GrTexture* SkImage_Raster::asTextureRef(GrContext* ctx, SkImageUsageType usage) const { |
| +#if SK_SUPPORT_GPU |
| + if (!ctx) { |
| + return nullptr; |
| + } |
| + |
| + // textures (at least the texture-key) only support 16bit dimensions, so abort early |
| + // if we're too big. |
| + if (fBitmap.width() > 0xFFFF || fBitmap.height() > 0xFFFF) { |
| + return nullptr; |
| + } |
| + |
| + GrUniqueKey key; |
| + GrMakeKeyFromImageID(&key, fBitmap.getGenerationID(), |
| + SkIRect::MakeWH(fBitmap.width(), fBitmap.height()), |
| + *ctx->caps(), usage); |
| + |
| + if (GrTexture* tex = ctx->textureProvider()->findAndRefTextureByUniqueKey(key)) { |
| + return tex; |
| + } |
| + return GrRefCachedBitmapTexture(ctx, fBitmap, usage); |
| +#endif |
| + |
| + return nullptr; |
| +} |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| SkImage* SkImage::NewRasterCopy(const SkImageInfo& info, const void* pixels, size_t rowBytes, |