aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-04-17 10:46:51 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-17 16:30:17 +0000
commit0cf45f607cfc5d22ef9e6fbe0c7480a409349704 (patch)
tree3891b40ca92a8a3c276c6b53c16ca67f2b615ceb /src/image
parentb39425023c0f9fe4fa61e0310a72188621718125 (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 'src/image')
-rw-r--r--src/image/SkImage.cpp4
-rw-r--r--src/image/SkImage_Gpu.cpp28
2 files changed, 15 insertions, 17 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index bbe1754c08..9db4ed1fe8 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -375,12 +375,12 @@ std::unique_ptr<SkCrossContextImageData> SkCrossContextImageData::MakeFromEncode
return nullptr;
}
// TODO: Force decode to raster here?
- return std::unique_ptr<SkCrossContextImageData>(new SkCrossContextImageData(std::move(image)));
+ return std::unique_ptr<SkCrossContextImageData>(new SkCCIDImage(std::move(image)));
}
sk_sp<SkImage> SkImage::MakeFromCrossContextImageData(
GrContext*, std::unique_ptr<SkCrossContextImageData> ccid) {
- return ccid->fImage;
+ return ccid->makeImage(nullptr);
}
sk_sp<SkImage> SkImage::makeNonTextureImage() const {
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index 97a657a680..932bb383d2 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -445,14 +445,14 @@ std::unique_ptr<SkCrossContextImageData> SkCrossContextImageData::MakeFromEncode
// Some backends or drivers don't support (safely) moving resources between contexts
if (!context->caps()->crossContextTextureSupport()) {
return std::unique_ptr<SkCrossContextImageData>(
- new SkCrossContextImageData(std::move(codecImage)));
+ new SkCCIDImage(std::move(codecImage)));
}
sk_sp<SkImage> textureImage = codecImage->makeTextureImage(context, dstColorSpace);
if (!textureImage) {
// TODO: Force decode to raster here? Do mip-mapping, like getDeferredTextureImageData?
return std::unique_ptr<SkCrossContextImageData>(
- new SkCrossContextImageData(std::move(codecImage)));
+ new SkCCIDImage(std::move(codecImage)));
}
// Crack open the gpu image, extract the backend data, stick it in the SkCCID
@@ -472,27 +472,25 @@ std::unique_ptr<SkCrossContextImageData> SkCrossContextImageData::MakeFromEncode
SkASSERT(textureData);
SkImageInfo info = as_IB(textureImage)->onImageInfo();
- return std::unique_ptr<SkCrossContextImageData>(new SkCrossContextImageData(
+ return std::unique_ptr<SkCrossContextImageData>(new SkCCIDBackendTexture(
desc, std::move(textureData), info.alphaType(), info.refColorSpace()));
}
-sk_sp<SkImage> SkImage::MakeFromCrossContextImageData(
- GrContext* context, std::unique_ptr<SkCrossContextImageData> ccid) {
- if (ccid->fImage) {
- // No pre-existing GPU resource. We could upload it now (with makeTextureImage),
- // but we'd need a dstColorSpace.
- return ccid->fImage;
- }
-
- if (ccid->fTextureData) {
- ccid->fTextureData->attachToContext(context);
+sk_sp<SkImage> SkCCIDBackendTexture::makeImage(GrContext* context) {
+ if (fTextureData) {
+ fTextureData->attachToContext(context);
}
// This texture was created by Ganesh on another thread (see MakeFromEncoded, above).
// Thus, we can import it back into our cache and treat it as our own (again).
GrWrapOwnership ownership = kAdoptAndCache_GrWrapOwnership;
- return new_wrapped_texture_common(context, ccid->fDesc, ccid->fAlphaType,
- std::move(ccid->fColorSpace), ownership, nullptr, nullptr);
+ return new_wrapped_texture_common(context, fDesc, fAlphaType,
+ std::move(fColorSpace), ownership, nullptr, nullptr);
+}
+
+sk_sp<SkImage> SkImage::MakeFromCrossContextImageData(
+ GrContext* context, std::unique_ptr<SkCrossContextImageData> ccid) {
+ return ccid->makeImage(context);
}
sk_sp<SkImage> SkImage::makeNonTextureImage() const {