50 texture.dimensions().height() <= 0) {
93 texture->setReleaseCallback(std::move(releaseHelper));
103 SKGPU_LOG_W(
"Failed SkImage:::WrapTexture because asked to generate mipmaps for "
104 "nonmipmapped texture");
108 SKGPU_LOG_W(
"Failed SkImage::WrapTexture. Could not generate mipmaps.");
113 return sk_make_sp<skgpu::graphite::Image>(view,
info);
165 imageReleaseProc = imageReleaseProc ? imageReleaseProc : [](
void*) {};
182 SKGPU_LOG_W(
"Incompatible SkColorType and TextureInfo");
191 std::move(releaseHelper),
201 return sk_make_sp<Image>(view, colorInfo);
247 for (
int i = 0; i < backendTextureInfo.
numPlanes(); ++i) {
261 SkSpan(planes), std::move(imageColorSpace));
268 if (!recorder || !img) {
271 auto subsetImg = img->
makeSubset(recorder, subset, props);
282 if (!recorder || !src || !filter) {
299 auto mm = requiredProps.
fMipmapped ? skgpu::Mipmapped::kYes : skgpu::Mipmapped::kNo;
311 static_cast<Surface*
>(
surface.get())->readSurfaceView().refProxy();
313 SKGPU_LOG_W(
"Failed to create mipmaps for texture from SkPicture");
365 if (!recorder || !
image) {
375 if (ib->isRasterBacked()) {
378 raster->imageInfo().colorInfo(),
384 if (ib->isLazyGenerated()) {
386 recorder,
static_cast<const SkImage_Lazy*
>(ib), requiredProps);
389 return ib->makeSubset(recorder, ib->bounds(), requiredProps);
395 bool limitToMaxTextureSize,
406 if (maxDim > maxTextureSize) {
407 if (!limitToMaxTextureSize) {
410 float scale =
static_cast<float>(maxTextureSize) / maxDim;
419 auto mipmapped = requiredProps.
fMipmapped ? skgpu::Mipmapped::kYes : skgpu::Mipmapped::kNo;
421 for (
int i = 0; i < finalInfo.
yuvaInfo().numPlanes(); ++i) {
423 if (maxDim > maxTextureSize) {
438 planes[i] = std::move(view);
441 SkSpan(planes), std::move(imageColorSpace));
455 for (
int i = 0; i < yuvaTextures.
yuvaInfo().numPlanes(); ++i) {
459 SKGPU_LOG_W(
"Failed to wrap backend texture for YUVA plane %d", i);
462 texture->setReleaseCallback(releaseHelper);
467 SkSpan(planes), std::move(imageColorSpace));
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
#define SKGPU_LOG_E(fmt,...)
#define SKGPU_LOG_W(fmt,...)
static SkImageFilter_Base * as_IFB(SkImageFilter *filter)
static bool SkColorInfoIsValid(const SkColorInfo &info)
static bool SkImageInfoIsValid(const SkImageInfo &info)
static SkImage_Base * as_IB(SkImage *image)
bool installPixels(const SkImageInfo &info, void *pixels, size_t rowBytes, void(*releaseProc)(void *addr, void *context), void *context)
const SkPixmap & pixmap() const
bool tryAllocPixels(const SkImageInfo &info, size_t rowBytes)
SkColorType colorType() const
sk_sp< SkImage > makeImageWithFilter(sk_sp< skif::Backend > backend, sk_sp< SkImage > src, const SkIRect &subset, const SkIRect &clipBounds, SkIRect *outSubset, SkIPoint *offset) const
bool getROPixels(GrDirectContext *, SkBitmap *, CachingHint) const override
SkImage_Base::Type type() const override
const SkSurfaceProps * props() const
void replay(SkCanvas *) const
const SkImageInfo & imageInfo() const
SkISize dimensions() const
@ kDisallow_CachingHint
disallows internally caching decoded and copied pixels
virtual sk_sp< SkImage > makeSubset(GrDirectContext *direct, const SkIRect &subset) const =0
bool scalePixels(const SkPixmap &dst, const SkSamplingOptions &) const
static constexpr int kMaxPlanes
SkYUVAInfo makeDimensions(SkISize) const
int planeDimensions(SkISize planeDimensions[kMaxPlanes]) const
const SkYUVAInfo & yuvaInfo() const
const SkImageInfo & planeInfo(int i) const
DataType dataType() const
const SkYUVAInfo & yuvaInfo() const
SkYUVAPixmapInfo pixmapsInfo() const
const SkPixmap & plane(int i) const
static sk_sp< RefCntedCallback > Make(Callback proc, Context ctx)
const TextureInfo & info() const
skgpu::Swizzle getReadSwizzle(SkColorType, const TextureInfo &) const
bool isTexturable(const TextureInfo &) const
bool areColorTypeAndTextureInfoCompatible(SkColorType, const TextureInfo &) const
int maxTextureSize() const
static sk_sp< Image_YUVA > Make(const Caps *caps, const SkYUVAInfo &yuvaInfo, SkSpan< TextureProxyView > planes, sk_sp< SkColorSpace > imageColorSpace)
static sk_sp< Image_YUVA > WrapImages(const Caps *caps, const SkYUVAInfo &yuvaInfo, SkSpan< const sk_sp< SkImage > > images, sk_sp< SkColorSpace > imageColorSpace)
const Caps * caps() const
ResourceProvider * resourceProvider()
virtual sk_sp< Texture > createWrappedTexture(const BackendTexture &)=0
sk_sp< TextureProxy > refProxy() const
TextureProxy * proxy() const
static sk_sp< TextureProxy > Wrap(sk_sp< Texture >)
Mipmapped mipmapped() const
const SkYUVAInfo & yuvaInfo() const
const TextureInfo & planeTextureInfo(int i) const
BackendTexture planeTexture(int i) const
const SkYUVAInfo & yuvaInfo() const
std::array< MockImage, 3 > images
void * GraphitePromiseTextureFulfillContext
SK_API sk_sp< SkImage > TextureFromYUVAPixmaps(GrRecordingContext *context, const SkYUVAPixmaps &pixmaps, skgpu::Mipmapped buildMips, bool limitToMaxTextureSize, sk_sp< SkColorSpace > imageColorSpace)
void(*)(GraphitePromiseImageContext) GraphitePromiseImageReleaseProc
void * GraphitePromiseImageContext
static bool validate_backend_texture(const skgpu::graphite::Caps *caps, const skgpu::graphite::BackendTexture &texture, const SkColorInfo &info)
SK_API sk_sp< SkImage > TextureFromImage(GrDirectContext *, const SkImage *, skgpu::Mipmapped=skgpu::Mipmapped::kNo, skgpu::Budgeted=skgpu::Budgeted::kYes)
SK_API sk_sp< SkImage > SubsetTextureFrom(GrDirectContext *context, const SkImage *img, const SkIRect &subset)
std::tuple< skgpu::graphite::BackendTexture, GraphitePromiseTextureReleaseContext >(*)(GraphitePromiseTextureFulfillContext) GraphitePromiseTextureFulfillProc
SK_API sk_sp< SkImage > PromiseTextureFromYUVA(skgpu::graphite::Recorder *, const skgpu::graphite::YUVABackendTextureInfo &, sk_sp< SkColorSpace > imageColorSpace, skgpu::graphite::Volatile, GraphitePromiseTextureFulfillProc, GraphitePromiseImageReleaseProc, GraphitePromiseTextureReleaseProc, GraphitePromiseImageContext imageContext, GraphitePromiseTextureFulfillContext planeContexts[])
SK_API sk_sp< SkImage > TextureFromYUVATextures(GrRecordingContext *context, const GrYUVABackendTextures &yuvaTextures, sk_sp< SkColorSpace > imageColorSpace, TextureReleaseProc textureReleaseProc=nullptr, ReleaseContext releaseContext=nullptr)
static sk_sp< SkImage > generate_picture_texture(skgpu::graphite::Recorder *recorder, const SkImage_Picture *img, const SkImageInfo &info, SkImage::RequiredProperties requiredProps)
SK_API sk_sp< SkImage > MakeWithFilter(sk_sp< SkImage > src, const SkImageFilter *filter, const SkIRect &subset, const SkIRect &clipBounds, SkIRect *outSubset, SkIPoint *offset)
SK_API sk_sp< SkImage > PromiseTextureFrom(skgpu::graphite::Recorder *, SkISize dimensions, const skgpu::graphite::TextureInfo &, const SkColorInfo &, skgpu::Origin origin, skgpu::graphite::Volatile, GraphitePromiseTextureFulfillProc, GraphitePromiseImageReleaseProc, GraphitePromiseTextureReleaseProc, GraphitePromiseImageContext)
SK_API sk_sp< SkImage > TextureFromYUVAImages(skgpu::graphite::Recorder *recorder, const SkYUVAInfo &yuvaInfo, SkSpan< const sk_sp< SkImage > > images, sk_sp< SkColorSpace > imageColorSpace)
void(*)(GraphitePromiseTextureReleaseContext) GraphitePromiseTextureReleaseProc
static sk_sp< SkImage > make_texture_image_from_lazy(skgpu::graphite::Recorder *recorder, const SkImage_Lazy *img, SkImage::RequiredProperties requiredProps)
void(*)(ReleaseContext) TextureReleaseProc
SK_API sk_sp< SkImage > WrapTexture(skgpu::graphite::Recorder *, const skgpu::graphite::BackendTexture &, SkColorType colorType, SkAlphaType alphaType, sk_sp< SkColorSpace > colorSpace, skgpu::Origin origin, GenerateMipmapsFromBase generateMipmapsFromBase, TextureReleaseProc=nullptr, ReleaseContext=nullptr)
SK_API sk_sp< SkImage > AsImage(sk_sp< const SkSurface >)
SK_API sk_sp< SkSurface > RenderTarget(GrRecordingContext *context, skgpu::Budgeted budgeted, const SkImageInfo &imageInfo, int sampleCount, GrSurfaceOrigin surfaceOrigin, const SkSurfaceProps *surfaceProps, bool shouldCreateWithMips=false, bool isProtected=false)
bool GenerateMipmaps(Recorder *recorder, sk_sp< TextureProxy > texture, const SkColorInfo &colorInfo)
std::tuple< TextureProxyView, SkColorType > MakeBitmapProxyView(Recorder *recorder, const SkBitmap &bitmap, sk_sp< SkMipmap > mipmapsIn, Mipmapped mipmapped, Budgeted budgeted)
void Flush(sk_sp< SkSurface > surface)
sk_sp< SkImage > MakeFromBitmap(Recorder *recorder, const SkColorInfo &colorInfo, const SkBitmap &bitmap, sk_sp< SkMipmap > mipmaps, Budgeted budgeted, SkImage::RequiredProperties requiredProps)
sk_sp< TextureProxy > MakePromiseImageLazyProxy(const Caps *caps, SkISize dimensions, TextureInfo textureInfo, Volatile isVolatile, sk_sp< RefCntedCallback > releaseHelper, GraphitePromiseTextureFulfillProc fulfillProc, GraphitePromiseTextureFulfillContext fulfillContext, GraphitePromiseTextureReleaseProc textureReleaseProc)
constexpr int64_t area() const
const SkColorInfo & colorInfo() const
static SkImageInfo Make(int width, int height, SkColorType ct, SkAlphaType at)