SkSpecialImage* SkSpecialImage::NewFromRaster(SkImageFilter::Proxy* proxy, const SkIRect& subset, const SkBitmap& bm) { SkASSERT(nullptr == bm.getTexture()); SkASSERT(rect_fits(subset, bm.width(), bm.height())); return new SkSpecialImage_Raster(proxy, subset, bm); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromImage(const SkIRect& subset, sk_sp<SkImage> image, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, image->width(), image->height())); return sk_make_sp<SkSpecialImage_Image>(subset, image, props); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(const SkIRect& subset, uint32_t uniqueID, GrTexture* tex, const SkSurfaceProps* props, SkAlphaType at) { SkASSERT(rect_fits(subset, tex->width(), tex->height())); return sk_make_sp<SkSpecialImage_Gpu>(subset, uniqueID, tex, at, props); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(const SkIRect& subset, const SkBitmap& bm, const SkSurfaceProps* props) { SkASSERT(nullptr == bm.getTexture()); SkASSERT(rect_fits(subset, bm.width(), bm.height())); return sk_make_sp<SkSpecialImage_Raster>(subset, bm, props); }
SkSpecialImage* SkSpecialImage::NewFromGpu(SkImageFilter::Proxy* proxy, const SkIRect& subset, uint32_t uniqueID, GrTexture* tex, SkAlphaType at) { SkASSERT(rect_fits(subset, tex->width(), tex->height())); return new SkSpecialImage_Gpu(proxy, subset, uniqueID, tex, at); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(const SkIRect& subset, uint32_t uniqueID, sk_sp<GrTexture> tex, sk_sp<SkColorSpace> colorSpace, const SkSurfaceProps* props, SkAlphaType at) { SkASSERT(rect_fits(subset, tex->width(), tex->height())); return sk_make_sp<SkSpecialImage_Gpu>(subset, uniqueID, std::move(tex), at, std::move(colorSpace), props); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeDeferredFromGpu(GrContext* context, const SkIRect& subset, uint32_t uniqueID, sk_sp<GrTextureProxy> proxy, sk_sp<SkColorSpace> colorSpace, const SkSurfaceProps* props, SkAlphaType at) { SkASSERT(rect_fits(subset, proxy->width(), proxy->height())); return sk_make_sp<SkSpecialImage_Gpu>(context, subset, uniqueID, std::move(proxy), at, std::move(colorSpace), props); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeDeferredFromGpu(GrContext* context, const SkIRect& subset, uint32_t uniqueID, sk_sp<GrTextureProxy> proxy, sk_sp<SkColorSpace> colorSpace, const SkSurfaceProps* props, SkAlphaType at) { if (!context || context->contextPriv().abandoned() || !proxy) { return nullptr; } SkASSERT_RELEASE(rect_fits(subset, proxy->width(), proxy->height())); return sk_make_sp<SkSpecialImage_Gpu>(context, subset, uniqueID, std::move(proxy), at, std::move(colorSpace), props); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromImage(const SkIRect& subset, sk_sp<SkImage> image, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, image->width(), image->height())); #if SK_SUPPORT_GPU if (GrTexture* texture = as_IB(image)->peekTexture()) { return MakeFromGpu(subset, image->uniqueID(), sk_ref_sp(texture), sk_ref_sp(as_IB(image)->onImageInfo().colorSpace()), props); } else #endif { SkBitmap bm; if (as_IB(image)->getROPixels(&bm)) { return MakeFromRaster(subset, bm, props); } } return nullptr; }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(const SkIRect& subset, const SkBitmap& bm, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, bm.width(), bm.height())); if (!bm.pixelRef()) { return nullptr; } const SkBitmap* srcBM = &bm; SkBitmap tmpStorage; // ImageFilters only handle N32 at the moment, so force our src to be that if (!valid_for_imagefilters(bm.info())) { if (!bm.copyTo(&tmpStorage, kN32_SkColorType)) { return nullptr; } srcBM = &tmpStorage; } return sk_make_sp<SkSpecialImage_Raster>(subset, *srcBM, props); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(const SkIRect& subset, const SkBitmap& bm, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, bm.width(), bm.height())); if (!bm.pixelRef()) { return nullptr; } const SkBitmap* srcBM = &bm; SkBitmap tmp; // ImageFilters only handle N32 at the moment, so force our src to be that if (!valid_for_imagefilters(bm.info())) { if (!tmp.tryAllocPixels(bm.info().makeColorType(kN32_SkColorType)) || !bm.readPixels(tmp.info(), tmp.getPixels(), tmp.rowBytes(), 0, 0)) { return nullptr; } srcBM = &tmp; } return sk_make_sp<SkSpecialImage_Raster>(subset, *srcBM, props); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromImage(const SkIRect& subset, sk_sp<SkImage> image, SkColorSpace* dstColorSpace, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, image->width(), image->height())); #if SK_SUPPORT_GPU if (sk_sp<GrTextureProxy> proxy = as_IB(image)->asTextureProxyRef()) { GrContext* context = ((SkImage_Gpu*) as_IB(image))->context(); return MakeDeferredFromGpu(context, subset, image->uniqueID(), std::move(proxy), as_IB(image)->onImageInfo().refColorSpace(), props); } else #endif { SkBitmap bm; if (as_IB(image)->getROPixels(&bm, dstColorSpace)) { return MakeFromRaster(subset, bm, props); } } return nullptr; }
SkSpecialImage* SkSpecialImage::NewFromImage(const SkIRect& subset, const SkImage* image) { SkASSERT(rect_fits(subset, image->width(), image->height())); return new SkSpecialImage_Image(nullptr, subset, image); }
SkSpecialImage* SkSpecialImage::NewFromGpu(const SkIRect& subset, GrTexture* tex) { SkASSERT(rect_fits(subset, tex->width(), tex->height())); return new SkSpecialImage_Gpu(subset, tex); }