blob: f4ca064d512ec795eb4a64777c4e7861ba5b1267 [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
11#include "GrTexture.h"
bsalomon3582d3e2015-02-13 14:20:05 -080012#include "GrGpuResourcePriv.h"
bsalomoneaaaf0b2015-01-23 08:08:04 -080013#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 SkImage_Gpu(const SkBitmap&, int sampleCountForNewSurfaces, SkSurface::Budgeted);
23
24 void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const SK_OVERRIDE;
25 void onDrawRect(SkCanvas*, const SkRect* src, const SkRect& dst,
26 const SkPaint*) const SK_OVERRIDE;
27 SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const SK_OVERRIDE;
28 GrTexture* onGetTexture() const SK_OVERRIDE;
29 bool getROPixels(SkBitmap*) const SK_OVERRIDE;
30
31 GrTexture* getTexture() const { return fBitmap.getTexture(); }
32
33 SkShader* onNewShader(SkShader::TileMode,
34 SkShader::TileMode,
35 const SkMatrix* localMatrix) const SK_OVERRIDE;
36
37 bool isOpaque() const SK_OVERRIDE;
38
39 void applyBudgetDecision() const {
40 if (fBudgeted) {
bsalomon3582d3e2015-02-13 14:20:05 -080041 fBitmap.getTexture()->resourcePriv().makeBudgeted();
bsalomoneaaaf0b2015-01-23 08:08:04 -080042 } else {
bsalomon3582d3e2015-02-13 14:20:05 -080043 fBitmap.getTexture()->resourcePriv().makeUnbudgeted();
bsalomoneaaaf0b2015-01-23 08:08:04 -080044 }
45 }
46
47private:
48 SkBitmap fBitmap;
49 const int fSampleCountForNewSurfaces; // 0 if we don't know
50 SkSurface::Budgeted fBudgeted;
51
52 typedef SkImage_Base INHERITED;
53};
54
55#endif