Index: src/core/SkSpecialImage.cpp |
diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp |
index 240d46921947e450a8f6592ac75c060e6fffb340..a547024e23cb8509b74cc5895f235739606413e8 100644 |
--- a/src/core/SkSpecialImage.cpp |
+++ b/src/core/SkSpecialImage.cpp |
@@ -52,7 +52,7 @@ public: |
virtual sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const = 0; |
- virtual sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const = 0; |
+ virtual sk_sp<SkSpecialSurface> onMakeSurface(const SkIRect& size, SkAlphaType at) const = 0; |
virtual sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const = 0; |
@@ -151,8 +151,8 @@ sk_sp<GrTexture> SkSpecialImage::asTextureRef(GrContext* context) const { |
} |
#endif |
-sk_sp<SkSpecialSurface> SkSpecialImage::makeSurface(const SkImageInfo& info) const { |
- return as_SIB(this)->onMakeSurface(info); |
+sk_sp<SkSpecialSurface> SkSpecialImage::makeSurface(const SkIRect& size, SkAlphaType at) const { |
+ return as_SIB(this)->onMakeSurface(size, at); |
} |
sk_sp<SkSurface> SkSpecialImage::makeTightSurface(const SkImageInfo& info) const { |
@@ -252,7 +252,12 @@ public: |
} |
#endif |
- sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const override { |
+ sk_sp<SkSpecialSurface> onMakeSurface(const SkIRect& size, SkAlphaType at) const override { |
+ SkColorSpace* colorSpace = fBitmap.colorSpace(); |
+ SkColorType colorType = colorSpace && colorSpace->gammaIsLinear() |
+ ? kRGBA_F16_SkColorType : kN32_SkColorType; |
+ SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), colorType, at, |
+ sk_ref_sp(colorSpace)); |
return SkSpecialSurface::MakeRaster(info, nullptr); |
} |
@@ -382,16 +387,14 @@ public: |
return fColorSpace.get(); |
} |
- sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const override { |
+ sk_sp<SkSpecialSurface> onMakeSurface(const SkIRect& size, SkAlphaType at) const override { |
if (!fTexture->getContext()) { |
return nullptr; |
} |
- GrPixelConfig config = SkImageInfo2GrPixelConfig(info, *fTexture->getContext()->caps()); |
- |
- return SkSpecialSurface::MakeRenderTarget(fTexture->getContext(), |
- info.width(), info.height(), |
- config, sk_ref_sp(info.colorSpace())); |
+ return SkSpecialSurface::MakeRenderTarget( |
+ fTexture->getContext(), size.width(), size.height(), |
+ GrRenderableConfigForColorSpace(fColorSpace.get()), fColorSpace); |
} |
sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const override { |