Home | History | Annotate | Download | only in gpu
      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 GrSamplerParams_DEFINED
      9 #define GrSamplerParams_DEFINED
     10 
     11 #include "GrTypes.h"
     12 #include "SkShader.h"
     13 
     14 /**
     15  * Represents the filtering and tile modes used to access a texture.
     16  */
     17 class GrSamplerParams {
     18 public:
     19     static const GrSamplerParams& ClampNoFilter() {
     20         static const GrSamplerParams gParams;
     21         return gParams;
     22     }
     23     static const GrSamplerParams& ClampBilerp() {
     24         static const GrSamplerParams gParams(SkShader::kClamp_TileMode, kBilerp_FilterMode);
     25         return gParams;
     26     }
     27 
     28     GrSamplerParams() {
     29         this->reset();
     30     }
     31 
     32     enum FilterMode {
     33         kNone_FilterMode,
     34         kBilerp_FilterMode,
     35         kMipMap_FilterMode
     36     };
     37 
     38     GrSamplerParams(SkShader::TileMode tileXAndY, FilterMode filterMode) {
     39         this->reset(tileXAndY, filterMode);
     40     }
     41 
     42     GrSamplerParams(const SkShader::TileMode tileModes[2], FilterMode filterMode) {
     43         this->reset(tileModes, filterMode);
     44     }
     45 
     46     GrSamplerParams(const GrSamplerParams& params) {
     47         *this = params;
     48     }
     49 
     50     GrSamplerParams& operator= (const GrSamplerParams& params) {
     51         fTileModes[0] = params.fTileModes[0];
     52         fTileModes[1] = params.fTileModes[1];
     53         fFilterMode = params.fFilterMode;
     54         return *this;
     55     }
     56 
     57     void reset() {
     58         this->reset(SkShader::kClamp_TileMode, kNone_FilterMode);
     59     }
     60 
     61     void reset(SkShader::TileMode tileXAndY, FilterMode filterMode) {
     62         fTileModes[0] = fTileModes[1] = tileXAndY;
     63         fFilterMode = filterMode;
     64     }
     65 
     66     void reset(const SkShader::TileMode tileModes[2], FilterMode filterMode) {
     67         fTileModes[0] = tileModes[0];
     68         fTileModes[1] = tileModes[1];
     69         fFilterMode = filterMode;
     70     }
     71 
     72     void setClampNoFilter() {
     73         fTileModes[0] = fTileModes[1] = SkShader::kClamp_TileMode;
     74         fFilterMode = kNone_FilterMode;
     75     }
     76 
     77     void setClamp() {
     78         fTileModes[0] = fTileModes[1] = SkShader::kClamp_TileMode;
     79     }
     80 
     81     void setFilterMode(FilterMode filterMode) { fFilterMode = filterMode; }
     82 
     83     void setTileModeX(const SkShader::TileMode tm) { fTileModes[0] = tm; }
     84     void setTileModeY(const SkShader::TileMode tm) { fTileModes[1] = tm; }
     85     void setTileModeXAndY(const SkShader::TileMode tm) { fTileModes[0] = fTileModes[1] = tm; }
     86 
     87     SkShader::TileMode getTileModeX() const { return fTileModes[0]; }
     88 
     89     SkShader::TileMode getTileModeY() const { return fTileModes[1]; }
     90 
     91     bool isTiled() const {
     92         return SkShader::kClamp_TileMode != fTileModes[0] ||
     93                SkShader::kClamp_TileMode != fTileModes[1];
     94     }
     95 
     96     FilterMode filterMode() const { return fFilterMode; }
     97 
     98     bool operator== (const GrSamplerParams& other) const {
     99         return fTileModes[0] == other.fTileModes[0] &&
    100                fTileModes[1] == other.fTileModes[1] &&
    101                fFilterMode == other.fFilterMode;
    102     }
    103 
    104     bool operator!= (const GrSamplerParams& other) const { return !(*this == other); }
    105 
    106 private:
    107     SkShader::TileMode fTileModes[2];
    108     FilterMode         fFilterMode;
    109 };
    110 #endif
    111