Home | History | Annotate | Download | only in image
      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 
     18 class SkImage_Gpu : public SkImage_Base {
     19 public:
     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 
     49 private:
     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