aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image/SkImage_Gpu.h
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2017-03-09 16:36:32 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-10 15:02:11 +0000
commitb726d58efc91c4eefa5cea0881a823ee108db8fd (patch)
tree2d43fa8827137d7491f6030c8f99d138e7100d5d /src/image/SkImage_Gpu.h
parentf7005200725f1a96c7174be3e9a3175f9aa19151 (diff)
Partially defer SkImage_Gpu
One of SkImageCacherator, GrBitmapTextureMaker, GrImageTextureMaker, GrTextureAdjuster, GrTextureProducer or SkImage has to take the first step. This is probably the least odd of the options. Change-Id: Ie167034553451f4b3633a5a1548dbd4d75839b3d Reviewed-on: https://skia-review.googlesource.com/9488 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/image/SkImage_Gpu.h')
-rw-r--r--src/image/SkImage_Gpu.h34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/image/SkImage_Gpu.h b/src/image/SkImage_Gpu.h
index 0ad44d3a59..c70c18ac78 100644
--- a/src/image/SkImage_Gpu.h
+++ b/src/image/SkImage_Gpu.h
@@ -10,6 +10,7 @@
#include "GrClip.h"
#include "GrGpuResourcePriv.h"
+#include "GrSurfaceProxyPriv.h"
#include "GrTexture.h"
#include "SkAtomics.h"
#include "SkBitmap.h"
@@ -20,12 +21,9 @@
class SkImage_Gpu : public SkImage_Base {
public:
- /**
- * An "image" can be a subset/window into a larger texture, so we explicit take the
- * width and height.
- */
- SkImage_Gpu(int w, int h, uint32_t uniqueID, SkAlphaType, sk_sp<GrTexture>, sk_sp<SkColorSpace>,
- SkBudgeted);
+ SkImage_Gpu(uint32_t uniqueID, SkAlphaType, sk_sp<GrTexture>, sk_sp<SkColorSpace>, SkBudgeted);
+ SkImage_Gpu(GrContext*, uint32_t uniqueID, SkAlphaType, sk_sp<GrTextureProxy>,
+ sk_sp<SkColorSpace>, SkBudgeted);
~SkImage_Gpu() override;
SkImageInfo onImageInfo() const override;
@@ -33,22 +31,29 @@ public:
void applyBudgetDecision() const {
if (SkBudgeted::kYes == fBudgeted) {
- fTexture->resourcePriv().makeBudgeted();
+ fProxy->priv().makeBudgeted();
} else {
- fTexture->resourcePriv().makeUnbudgeted();
+ fProxy->priv().makeUnbudgeted();
}
}
bool getROPixels(SkBitmap*, SkColorSpace* dstColorSpace, CachingHint) const override;
- GrTexture* asTextureRef(GrContext* ctx, const GrSamplerParams& params, SkColorSpace*,
+ GrTexture* asTextureRef(GrContext*, const GrSamplerParams&, SkColorSpace*,
sk_sp<SkColorSpace>*, SkScalar scaleAdjust[2]) const override;
sk_sp<SkImage> onMakeSubset(const SkIRect&) const override;
- GrTexture* peekTexture() const override { return fTexture.get(); }
- sk_sp<GrTextureProxy> asTextureProxyRef() const override;
+ GrTexture* peekTexture() const override {
+ return fProxy->instantiate(fContext->resourceProvider());
+ }
+ sk_sp<GrTextureProxy> asTextureProxyRef() const override {
+ return fProxy;
+ }
+ sk_sp<GrTextureProxy> asTextureProxyRef(GrContext*, const GrSamplerParams&, SkColorSpace*,
+ sk_sp<SkColorSpace>*,
+ SkScalar scaleAdjust[2]) const override;
sk_sp<GrTexture> refPinnedTexture(uint32_t* uniqueID) const override {
*uniqueID = this->uniqueID();
- return fTexture;
+ return sk_ref_sp(this->peekTexture());
}
bool onReadYUV8Planes(const SkISize sizes[3], void* const planes[3],
@@ -57,11 +62,12 @@ public:
bool onReadPixels(const SkImageInfo&, void* dstPixels, size_t dstRowBytes,
int srcX, int srcY, CachingHint) const override;
- GrContext* context() { return fTexture->getContext(); }
+ GrContext* context() { return fContext; }
sk_sp<SkColorSpace> refColorSpace() { return fColorSpace; }
private:
- sk_sp<GrTexture> fTexture;
+ GrContext* fContext;
+ sk_sp<GrTextureProxy> fProxy;
const SkAlphaType fAlphaType;
const SkBudgeted fBudgeted;
sk_sp<SkColorSpace> fColorSpace;