Index: include/gpu/GrTextureParams.h |
diff --git a/include/gpu/GrTextureParams.h b/include/gpu/GrTextureParams.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3186b1b027186b29df31361e7fd80eb6055d52f8 |
--- /dev/null |
+++ b/include/gpu/GrTextureParams.h |
@@ -0,0 +1,110 @@ |
+/* |
+ * 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 |