diff options
author | Greg Daniel <egdaniel@google.com> | 2017-04-17 10:46:51 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-17 16:30:17 +0000 |
commit | 0cf45f607cfc5d22ef9e6fbe0c7480a409349704 (patch) | |
tree | 3891b40ca92a8a3c276c6b53c16ca67f2b615ceb /include/core | |
parent | b39425023c0f9fe4fa61e0310a72188621718125 (diff) |
Split SkCrossContextImageData into Image and BackendTexture subclasses
This is needed for a follow up CL where we switch from using
GrBackendTextureDesc to GrBackendTexture.
Bug: skia:
Change-Id: Id12d3357af1cc7f30c7f9196e614089779dc0715
Reviewed-on: https://skia-review.googlesource.com/13588
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'include/core')
-rw-r--r-- | include/core/SkCrossContextImageData.h | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/include/core/SkCrossContextImageData.h b/include/core/SkCrossContextImageData.h index bbee6e742b..beaaaa6a28 100644 --- a/include/core/SkCrossContextImageData.h +++ b/include/core/SkCrossContextImageData.h @@ -32,15 +32,45 @@ public: static std::unique_ptr<SkCrossContextImageData> MakeFromEncoded( GrContext*, sk_sp<SkData>, SkColorSpace* dstColorSpace); + virtual ~SkCrossContextImageData() {} + +protected: + SkCrossContextImageData() {} + private: - SkCrossContextImageData(sk_sp<SkImage> image) : fImage(std::move(image)) { + virtual sk_sp<SkImage> makeImage(GrContext*) = 0; + + friend class SkImage; +}; + +class SkCCIDImage : public SkCrossContextImageData { +public: + ~SkCCIDImage() override {} + +private: + SkCCIDImage(sk_sp<SkImage> image) : fImage(std::move(image)) { SkASSERT(!fImage->isTextureBacked()); } + sk_sp<SkImage> makeImage(GrContext*) override { + return fImage; + } + + sk_sp<SkImage> fImage; + + friend class SkCrossContextImageData; + friend class SkImage; +}; + #if SK_SUPPORT_GPU - SkCrossContextImageData(const GrBackendTextureDesc& desc, - std::unique_ptr<GrExternalTextureData> textureData, - SkAlphaType alphaType, sk_sp<SkColorSpace> colorSpace) +class SkCCIDBackendTexture : public SkCrossContextImageData { +public: + ~SkCCIDBackendTexture() override {} + +private: + SkCCIDBackendTexture(const GrBackendTextureDesc& desc, + std::unique_ptr<GrExternalTextureData> textureData, + SkAlphaType alphaType, sk_sp<SkColorSpace> colorSpace) : fAlphaType(alphaType) , fColorSpace(std::move(colorSpace)) , fDesc(desc) @@ -48,21 +78,18 @@ private: // Point our texture desc at our copy of the backend information fDesc.fTextureHandle = fTextureData->getBackendObject(); } -#endif - // For non-GPU backed images - sk_sp<SkImage> fImage; + sk_sp<SkImage> makeImage(GrContext*) override; -#if SK_SUPPORT_GPU // GPU-backed images store some generic information (needed to reconstruct the SkImage), // and some backend-specific info (to reconstruct the texture). SkAlphaType fAlphaType; sk_sp<SkColorSpace> fColorSpace; GrBackendTextureDesc fDesc; std::unique_ptr<GrExternalTextureData> fTextureData; -#endif - friend class SkImage; + friend class SkCrossContextImageData; }; +#endif #endif |