| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 /* |  | 
| 2  * Copyright 2015 Google Inc. |  | 
| 3  * |  | 
| 4  * Use of this source code is governed by a BSD-style license that can be |  | 
| 5  * found in the LICENSE file. |  | 
| 6  */ |  | 
| 7 |  | 
| 8 #include "SkImageGeneratorUtils.h" |  | 
| 9 #include "SkBitmap.h" |  | 
| 10 |  | 
| 11 class GeneratorFromEmpty : public SkImageGenerator { |  | 
| 12 public: |  | 
| 13     GeneratorFromEmpty(const SkImageInfo& info) : SkImageGenerator(info) {} |  | 
| 14 }; |  | 
| 15 |  | 
| 16 SkImageGenerator* SkImageGeneratorUtils::NewEmpty(const SkImageInfo& info) { |  | 
| 17     return new GeneratorFromEmpty(info); |  | 
| 18 } |  | 
| 19 |  | 
| 20 ////////////////////////////////////////////////////////////////////////////////
     /////////////////// |  | 
| 21 |  | 
| 22 class GeneratorFromBitmap : public SkImageGenerator { |  | 
| 23 public: |  | 
| 24     GeneratorFromBitmap(const SkBitmap& bm) : SkImageGenerator(bm.info()), fBM(b
     m) { |  | 
| 25         if (!bm.isImmutable()) { |  | 
| 26             bm.copyTo(&fBM); |  | 
| 27         } |  | 
| 28     } |  | 
| 29 |  | 
| 30 protected: |  | 
| 31     bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, |  | 
| 32                      SkPMColor*, int*) override { |  | 
| 33         return fBM.readPixels(info, pixels, rowBytes, 0, 0); |  | 
| 34     } |  | 
| 35 |  | 
| 36 private: |  | 
| 37     SkBitmap fBM; |  | 
| 38 }; |  | 
| 39 |  | 
| 40 SkImageGenerator* SkImageGeneratorUtils::NewFromBitmap(const SkBitmap& bm) { |  | 
| 41     return new GeneratorFromBitmap(bm); |  | 
| 42 } |  | 
| 43 |  | 
| 44 ////////////////////////////////////////////////////////////////////////////////
     /////////////////// |  | 
| 45 |  | 
| 46 #if SK_SUPPORT_GPU |  | 
| 47 |  | 
| 48 #include "GrContext.h" |  | 
| 49 #include "GrTexture.h" |  | 
| 50 #include "SkGrPriv.h" |  | 
| 51 |  | 
| 52 class GeneratorFromTexture : public SkImageGenerator { |  | 
| 53 public: |  | 
| 54     GeneratorFromTexture(GrContext* ctx, GrTexture* tex, const SkImageInfo& info
     ) |  | 
| 55         : SkImageGenerator(info), fCtx(ctx), fTexture(tex) |  | 
| 56     {} |  | 
| 57 |  | 
| 58 protected: |  | 
| 59     GrTexture* onGenerateTexture(GrContext* ctx, const SkIRect* subset) override
      { |  | 
| 60         if (ctx) { |  | 
| 61             SkASSERT(ctx == fCtx.get()); |  | 
| 62         } |  | 
| 63 |  | 
| 64         if (!subset) { |  | 
| 65             return SkRef(fTexture.get()); |  | 
| 66         } |  | 
| 67         // need to copy the subset into a new texture |  | 
| 68         GrSurfaceDesc desc = fTexture->desc(); |  | 
| 69         desc.fWidth = subset->width(); |  | 
| 70         desc.fHeight = subset->height(); |  | 
| 71 |  | 
| 72         GrTexture* dst = fCtx->textureProvider()->createTexture(desc, SkBudgeted
     ::kNo); |  | 
| 73         fCtx->copySurface(dst, fTexture, *subset, SkIPoint::Make(0, 0)); |  | 
| 74         return dst; |  | 
| 75     } |  | 
| 76 private: |  | 
| 77     SkAutoTUnref<GrContext> fCtx; |  | 
| 78     SkAutoTUnref<GrTexture> fTexture; |  | 
| 79 }; |  | 
| 80 #endif |  | 
| 81 |  | 
| 82 SkImageGenerator* SkImageGeneratorUtils::NewFromTexture(GrContext* ctx, GrTextur
     e* tex) { |  | 
| 83 #if SK_SUPPORT_GPU |  | 
| 84     if (ctx && tex) { |  | 
| 85         const GrSurfaceDesc desc = tex->desc(); |  | 
| 86 |  | 
| 87         SkColorType ct; |  | 
| 88         SkColorProfileType cpt; |  | 
| 89         if (!GrPixelConfig2ColorAndProfileType(desc.fConfig, &ct, &cpt)) { |  | 
| 90             return nullptr; |  | 
| 91         } |  | 
| 92         const SkAlphaType at = kPremul_SkAlphaType; // take isOpaque from caller
     ? |  | 
| 93         SkImageInfo info = SkImageInfo::Make(desc.fWidth, desc.fHeight, ct, at, 
     cpt); |  | 
| 94         return new GeneratorFromTexture(ctx, tex, info); |  | 
| 95     } |  | 
| 96 #endif |  | 
| 97     return nullptr; |  | 
| 98 } |  | 
| 99 |  | 
| 100 ////////////////////////////////////////////////////////////////////////////////
     /////////////////// |  | 
| 101 |  | 
| 102 #include "SkImage.h" |  | 
| 103 |  | 
| 104 class GeneratorFromImage : public SkImageGenerator { |  | 
| 105 public: |  | 
| 106     GeneratorFromImage(const SkImage* image, const SkImageInfo& info) |  | 
| 107         : SkImageGenerator(info), fImage(image) {} |  | 
| 108 |  | 
| 109 protected: |  | 
| 110     bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, |  | 
| 111                      SkPMColor*, int*) override { |  | 
| 112         return fImage->readPixels(info, pixels, rowBytes, 0, 0); |  | 
| 113     } |  | 
| 114 |  | 
| 115     GrTexture* onGenerateTexture(GrContext* ctx, const SkIRect* subset) override
      { |  | 
| 116         // waiting on https://code.google.com/p/skia/issues/detail?id=4233 |  | 
| 117         return nullptr; |  | 
| 118     } |  | 
| 119 |  | 
| 120 private: |  | 
| 121     SkAutoTUnref<const SkImage> fImage; |  | 
| 122 }; |  | 
| 123 |  | 
| 124 SkImageGenerator* SkImageGeneratorUtils::NewFromImage(const SkImage* image) { |  | 
| 125     if (image) { |  | 
| 126         const SkColorType ct = kN32_SkColorType; |  | 
| 127         const SkAlphaType at = image->isOpaque() ? kOpaque_SkAlphaType : kPremul
     _SkAlphaType; |  | 
| 128         const SkImageInfo info = SkImageInfo::Make(image->width(), image->height
     (), ct, at); |  | 
| 129         return new GeneratorFromImage(image, info); |  | 
| 130     } |  | 
| 131     return nullptr; |  | 
| 132 } |  | 
| 133 |  | 
| 134 |  | 
| OLD | NEW | 
|---|