111 lines
3.1 KiB
C
111 lines
3.1 KiB
C
|
/*
|
||
|
* Copyright 2015 Google Inc.
|
||
|
*
|
||
|
* Use of this source code is governed by a BSD-style license that can be
|
||
|
* found in the LICENSE file.
|
||
|
*/
|
||
|
|
||
|
#ifndef GrTextureParams_DEFINED
|
||
|
#define GrTextureParams_DEFINED
|
||
|
|
||
|
#include "GrTypes.h"
|
||
|
#include "SkShader.h"
|
||
|
|
||
|
/**
|
||
|
* Represents the filtering and tile modes used to access a texture.
|
||
|
*/
|
||
|
class GrTextureParams {
|
||
|
public:
|
||
|
static const GrTextureParams& ClampNoFilter() {
|
||
|
static const GrTextureParams gParams;
|
||
|
return gParams;
|
||
|
}
|
||
|
static const GrTextureParams& ClampBilerp() {
|
||
|
static const GrTextureParams gParams(SkShader::kClamp_TileMode, kBilerp_FilterMode);
|
||
|
return gParams;
|
||
|
}
|
||
|
|
||
|
GrTextureParams() {
|
||
|
this->reset();
|
||
|
}
|
||
|
|
||
|
enum FilterMode {
|
||
|
kNone_FilterMode,
|
||
|
kBilerp_FilterMode,
|
||
|
kMipMap_FilterMode
|
||
|
};
|
||
|
|
||
|
GrTextureParams(SkShader::TileMode tileXAndY, FilterMode filterMode) {
|
||
|
this->reset(tileXAndY, filterMode);
|
||
|
}
|
||
|
|
||
|
GrTextureParams(const SkShader::TileMode tileModes[2], FilterMode filterMode) {
|
||
|
this->reset(tileModes, filterMode);
|
||
|
}
|
||
|
|
||
|
GrTextureParams(const GrTextureParams& params) {
|
||
|
*this = params;
|
||
|
}
|
||
|
|
||
|
GrTextureParams& operator= (const GrTextureParams& params) {
|
||
|
fTileModes[0] = params.fTileModes[0];
|
||
|
fTileModes[1] = params.fTileModes[1];
|
||
|
fFilterMode = params.fFilterMode;
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
void reset() {
|
||
|
this->reset(SkShader::kClamp_TileMode, kNone_FilterMode);
|
||
|
}
|
||
|
|
||
|
void reset(SkShader::TileMode tileXAndY, FilterMode filterMode) {
|
||
|
fTileModes[0] = fTileModes[1] = tileXAndY;
|
||
|
fFilterMode = filterMode;
|
||
|
}
|
||
|
|
||
|
void reset(const SkShader::TileMode tileModes[2], FilterMode filterMode) {
|
||
|
fTileModes[0] = tileModes[0];
|
||
|
fTileModes[1] = tileModes[1];
|
||
|
fFilterMode = filterMode;
|
||
|
}
|
||
|
|
||
|
void setClampNoFilter() {
|
||
|
fTileModes[0] = fTileModes[1] = SkShader::kClamp_TileMode;
|
||
|
fFilterMode = kNone_FilterMode;
|
||
|
}
|
||
|
|
||
|
void setClamp() {
|
||
|
fTileModes[0] = fTileModes[1] = SkShader::kClamp_TileMode;
|
||
|
}
|
||
|
|
||
|
void setFilterMode(FilterMode filterMode) { fFilterMode = filterMode; }
|
||
|
|
||
|
void setTileModeX(const SkShader::TileMode tm) { fTileModes[0] = tm; }
|
||
|
void setTileModeY(const SkShader::TileMode tm) { fTileModes[1] = tm; }
|
||
|
void setTileModeXAndY(const SkShader::TileMode tm) { fTileModes[0] = fTileModes[1] = tm; }
|
||
|
|
||
|
SkShader::TileMode getTileModeX() const { return fTileModes[0]; }
|
||
|
|
||
|
SkShader::TileMode getTileModeY() const { return fTileModes[1]; }
|
||
|
|
||
|
bool isTiled() const {
|
||
|
return SkShader::kClamp_TileMode != fTileModes[0] ||
|
||
|
SkShader::kClamp_TileMode != fTileModes[1];
|
||
|
}
|
||
|
|
||
|
FilterMode filterMode() const { return fFilterMode; }
|
||
|
|
||
|
bool operator== (const GrTextureParams& other) const {
|
||
|
return fTileModes[0] == other.fTileModes[0] &&
|
||
|
fTileModes[1] == other.fTileModes[1] &&
|
||
|
fFilterMode == other.fFilterMode;
|
||
|
}
|
||
|
|
||
|
bool operator!= (const GrTextureParams& other) const { return !(*this == other); }
|
||
|
|
||
|
private:
|
||
|
SkShader::TileMode fTileModes[2];
|
||
|
FilterMode fFilterMode;
|
||
|
};
|
||
|
#endif
|