}
}
protected:
- GrTexture* onGenerateTexture(GrContext* ctx, const SkIRect* subset) override {
+ GrTexture* onGenerateTexture(GrContext* ctx, const SkIRect& subset) override {
if (ctx) {
SkASSERT(ctx == fCtx.get());
}
return nullptr;
}
- if (!subset) {
- return SkRef(fTexture.get());
- }
// need to copy the subset into a new texture
GrSurfaceDesc desc = fTexture->desc();
- desc.fWidth = subset->width();
- desc.fHeight = subset->height();
+ desc.fWidth = subset.width();
+ desc.fHeight = subset.height();
GrTexture* dst = fCtx->textureProvider()->createTexture(desc, SkBudgeted::kNo);
- fCtx->copySurface(dst, fTexture.get(), *subset, SkIPoint::Make(0, 0));
+ fCtx->copySurface(dst, fTexture.get(), subset, SkIPoint::Make(0, 0));
return dst;
}
private:
* - its internal context is the same
* - it can somehow convert its texture into one that is valid for the provided context.
*/
- GrTexture* generateTexture(GrContext*, const SkIRect* subset = nullptr);
+ GrTexture* generateTexture(GrContext*, const SkIRect& subset);
struct SupportedSizes {
SkISize fSizes[2];
return false;
}
- virtual GrTexture* onGenerateTexture(GrContext*, const SkIRect*) {
+ virtual GrTexture* onGenerateTexture(GrContext*, const SkIRect&) {
return nullptr;
}
ScopedGenerator generator(fSharedGenerator);
SkIRect subset = SkIRect::MakeXYWH(fOrigin.x(), fOrigin.y(),
cacheInfo.width(), cacheInfo.height());
- tex.reset(generator->generateTexture(nullptr, &subset));
+ tex.reset(generator->generateTexture(nullptr, subset));
}
if (!tex) {
bitmap->reset();
{
ScopedGenerator generator(fSharedGenerator);
SkIRect subset = SkIRect::MakeXYWH(fOrigin.x(), fOrigin.y(), fInfo.width(), fInfo.height());
- if (GrTexture* tex = generator->generateTexture(ctx, &subset)) {
+ if (GrTexture* tex = generator->generateTexture(ctx, subset)) {
SK_HISTOGRAM_ENUMERATION("LockTexturePath", kNative_LockTexturePath,
kLockTexturePathCount);
return set_key_and_return(tex, key);
return this->onGetYUV8Planes(sizeInfo, planes);
}
-GrTexture* SkImageGenerator::generateTexture(GrContext* ctx, const SkIRect* subset) {
- if (subset && !SkIRect::MakeWH(fInfo.width(), fInfo.height()).contains(*subset)) {
+GrTexture* SkImageGenerator::generateTexture(GrContext* ctx, const SkIRect& subset) {
+ if (!SkIRect::MakeWH(fInfo.width(), fInfo.height()).contains(subset)) {
return nullptr;
}
return this->onGenerateTexture(ctx, subset);
bool onGenerateScaledPixels(const SkISize&, const SkIPoint&, const SkPixmap&) override;
#if SK_SUPPORT_GPU
- GrTexture* onGenerateTexture(GrContext*, const SkIRect*) override;
+ GrTexture* onGenerateTexture(GrContext*, const SkIRect&) override;
#endif
private:
#if SK_SUPPORT_GPU
#include "GrTexture.h"
-GrTexture* SkPictureImageGenerator::onGenerateTexture(GrContext* ctx, const SkIRect* subset) {
+GrTexture* SkPictureImageGenerator::onGenerateTexture(GrContext* ctx, const SkIRect& subset) {
const SkImageInfo& info = this->getInfo();
- SkImageInfo surfaceInfo = subset ? info.makeWH(subset->width(), subset->height()) : info;
+ SkImageInfo surfaceInfo = info.makeWH(subset.width(), subset.height());
//
// TODO: respect the usage, by possibly creating a different (pow2) surface
}
SkMatrix matrix = fMatrix;
- if (subset) {
- matrix.postTranslate(-subset->x(), -subset->y());
- }
+ matrix.postTranslate(-subset.x(), -subset.y());
surface->getCanvas()->clear(0); // does NewRenderTarget promise to do this for us?
surface->getCanvas()->drawPicture(fPicture.get(), &matrix, fPaint.getMaybeNull());
sk_sp<SkImage> image(surface->makeImageSnapshot());