1/*
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
11#include "GrTexture.h"
12#include "GrGpuResourcePriv.h"
13#include "SkBitmap.h"
14#include "SkImage_Base.h"
15#include "SkImagePriv.h"
16#include "SkSurface.h"
17
18class SkImage_Gpu : public SkImage_Base {
19public:
20    SK_DECLARE_INST_COUNT(SkImage_Gpu)
21
22    /**
23     *  An "image" can be a subset/window into a larger texture, so we explicit take the
24     *  width and height.
25     */
26    SkImage_Gpu(int w, int h, SkAlphaType, GrTexture*, int sampleCountForNewSurfaces,
27                SkSurface::Budgeted);
28
29    void applyBudgetDecision() const {
30        GrTexture* tex = this->getTexture();
31        SkASSERT(tex);
32        if (fBudgeted) {
33            tex->resourcePriv().makeBudgeted();
34        } else {
35            tex->resourcePriv().makeUnbudgeted();
36        }
37    }
38
39    bool getROPixels(SkBitmap*) const override;
40    GrTexture* onGetTexture() const override { return fTexture; }
41    SkShader* onNewShader(SkShader::TileMode,
42                          SkShader::TileMode,
43                          const SkMatrix* localMatrix) const override;
44    bool isOpaque() const override;
45    SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const override;
46    bool onReadPixels(const SkImageInfo&, void* dstPixels, size_t dstRowBytes,
47                      int srcX, int srcY) const override;
48
49private:
50    SkAutoTUnref<GrTexture> fTexture;
51    const int               fSampleCountForNewSurfaces;   // 0 if we don't know
52    const SkAlphaType       fAlphaType;
53    SkSurface::Budgeted     fBudgeted;
54
55    typedef SkImage_Base INHERITED;
56};
57
58#endif
59