blob: 5e847dd381cfe657225d67a71007dbd53d3b0a44 [file] [log] [blame]
bsalomoneaaaf0b2015-01-23 08:08:04 -08001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkImage_Gpu_DEFINED
9#define SkImage_Gpu_DEFINED
10
herbb906daf2015-09-29 09:37:59 -070011#include "SkAtomics.h"
bsalomoneaaaf0b2015-01-23 08:08:04 -080012#include "GrTexture.h"
bsalomon3582d3e2015-02-13 14:20:05 -080013#include "GrGpuResourcePriv.h"
bsalomoneaaaf0b2015-01-23 08:08:04 -080014#include "SkBitmap.h"
15#include "SkImage_Base.h"
16#include "SkImagePriv.h"
17#include "SkSurface.h"
18
19class SkImage_Gpu : public SkImage_Base {
20public:
reed8b26b992015-05-07 15:36:17 -070021 /**
22 * An "image" can be a subset/window into a larger texture, so we explicit take the
23 * width and height.
24 */
reed7b6945b2015-09-24 00:50:58 -070025 SkImage_Gpu(int w, int h, uint32_t uniqueID, SkAlphaType, GrTexture*, SkSurface::Budgeted);
reed6f1216a2015-08-04 08:10:13 -070026 ~SkImage_Gpu() override;
bsalomoneaaaf0b2015-01-23 08:08:04 -080027
28 void applyBudgetDecision() const {
reed8b26b992015-05-07 15:36:17 -070029 GrTexture* tex = this->getTexture();
30 SkASSERT(tex);
bsalomoneaaaf0b2015-01-23 08:08:04 -080031 if (fBudgeted) {
reed8b26b992015-05-07 15:36:17 -070032 tex->resourcePriv().makeBudgeted();
bsalomoneaaaf0b2015-01-23 08:08:04 -080033 } else {
reed8b26b992015-05-07 15:36:17 -070034 tex->resourcePriv().makeUnbudgeted();
bsalomoneaaaf0b2015-01-23 08:08:04 -080035 }
36 }
37
reed8b26b992015-05-07 15:36:17 -070038 bool getROPixels(SkBitmap*) const override;
reed85d91782015-09-10 14:33:38 -070039 GrTexture* asTextureRef(GrContext* ctx, SkImageUsageType usage) const override;
reed7b6945b2015-09-24 00:50:58 -070040 SkImage* onNewSubset(const SkIRect&) const override;
reed85d91782015-09-10 14:33:38 -070041
42 GrTexture* peekTexture() const override { return fTexture; }
reed476506d2015-09-28 10:26:51 -070043 SkShader* onNewShader(SkShader::TileMode,
44 SkShader::TileMode,
45 const SkMatrix* localMatrix) const override;
reed8b26b992015-05-07 15:36:17 -070046 bool isOpaque() const override;
reed8b26b992015-05-07 15:36:17 -070047 bool onReadPixels(const SkImageInfo&, void* dstPixels, size_t dstRowBytes,
48 int srcX, int srcY) const override;
49
bsalomoneaaaf0b2015-01-23 08:08:04 -080050private:
reed6f1216a2015-08-04 08:10:13 -070051 SkAutoTUnref<GrTexture> fTexture;
reed6f1216a2015-08-04 08:10:13 -070052 const SkAlphaType fAlphaType;
53 const SkSurface::Budgeted fBudgeted;
54 mutable SkAtomic<bool> fAddedRasterVersionToCache;
55
bsalomoneaaaf0b2015-01-23 08:08:04 -080056
57 typedef SkImage_Base INHERITED;
58};
59
60#endif