aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu/GrSamplerState.h
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-25 21:27:09 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-25 21:27:09 +0000
commitb8670998a59d305cd22a3c0cbdc6e075b0a37a6e (patch)
tree76791b806a3a6608e5a5735150c0535dc50a872a /include/gpu/GrSamplerState.h
parentcc90505674cd845fcbebd7e0654c3ff04a2e4f25 (diff)
Move filter/wrap out of GrSamplerState into GrTextureParams
Review URL: http://codereview.appspot.com/6440046/ git-svn-id: http://skia.googlecode.com/svn/trunk@4773 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/gpu/GrSamplerState.h')
-rw-r--r--include/gpu/GrSamplerState.h125
1 files changed, 77 insertions, 48 deletions
diff --git a/include/gpu/GrSamplerState.h b/include/gpu/GrSamplerState.h
index 07318486bb..04fbe00738 100644
--- a/include/gpu/GrSamplerState.h
+++ b/include/gpu/GrSamplerState.h
@@ -15,31 +15,76 @@
#include "GrMatrix.h"
#include "GrTypes.h"
-class GrSamplerState {
+#include "SkShader.h"
+
+class GrTextureParams {
public:
- enum Filter {
- /**
- * Read the closest src texel to the sample position
- */
- kNearest_Filter,
- /**
- * Blend between closest 4 src texels to sample position (tent filter)
- */
- kBilinear_Filter,
- kDefault_Filter = kNearest_Filter
- };
+ GrTextureParams() {
+ this->reset();
+ }
- /**
- * Describes how a texture is sampled when coordinates are outside the
- * texture border
- */
- enum WrapMode {
- kClamp_WrapMode,
- kRepeat_WrapMode,
- kMirror_WrapMode,
+ GrTextureParams(const GrTextureParams& params) {
+ *this = params;
+ }
+
+ GrTextureParams& operator =(const GrTextureParams& params) {
+ fTileModes[0] = params.fTileModes[0];
+ fTileModes[1] = params.fTileModes[1];
+ fBilerp = params.fBilerp;
+ return *this;
+ }
- kDefault_WrapMode = kClamp_WrapMode
- };
+ void reset() {
+ this->reset(SkShader::kClamp_TileMode, false);
+ }
+
+ void reset(SkShader::TileMode tileXAndY, bool filter) {
+ fTileModes[0] = fTileModes[1] = tileXAndY;
+ fBilerp = filter;
+ }
+ void reset(SkShader::TileMode tileModes[2], bool filter) {
+ fTileModes[0] = tileModes[0];
+ fTileModes[1] = tileModes[1];
+ fBilerp = filter;
+ }
+
+ void setClampNoFilter() {
+ fTileModes[0] = fTileModes[1] = SkShader::kClamp_TileMode;
+ fBilerp = false;
+ }
+
+ void setClamp() {
+ fTileModes[0] = fTileModes[1] = SkShader::kClamp_TileMode;
+ }
+
+ void setBilerp(bool bilerp) { fBilerp = bilerp; }
+
+ 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];
+ }
+
+ bool isBilerp() const { return fBilerp; }
+
+private:
+
+ SkShader::TileMode fTileModes[2];
+ bool fBilerp;
+};
+
+class GrSamplerState {
+public:
+ static const bool kBilerpDefault = false;
+
+ static const SkShader::TileMode kTileModeDefault = SkShader::kClamp_TileMode;
/**
* Default sampler state is set to clamp, use normal sampling mode, be
@@ -74,9 +119,7 @@ public:
GrSamplerState& operator =(const GrSamplerState& s) {
// memcpy() breaks refcounting
- fWrapX = s.fWrapX;
- fWrapY = s.fWrapY;
- fFilter = s.fFilter;
+ fTextureParams = s.fTextureParams;
fMatrix = s.fMatrix;
fSwapRAndB = s.fSwapRAndB;
@@ -85,15 +128,11 @@ public:
return *this;
}
- WrapMode getWrapX() const { return fWrapX; }
- WrapMode getWrapY() const { return fWrapY; }
const GrMatrix& getMatrix() const { return fMatrix; }
- Filter getFilter() const { return fFilter; }
bool swapsRAndB() const { return fSwapRAndB; }
- void setWrapX(WrapMode mode) { fWrapX = mode; }
- void setWrapY(WrapMode mode) { fWrapY = mode; }
-
+ GrTextureParams* textureParams() { return &fTextureParams; }
+ const GrTextureParams& getTextureParams() const { return fTextureParams; }
/**
* Access the sampler's matrix. See SampleMode for explanation of
* relationship between the matrix and sample mode.
@@ -118,30 +157,22 @@ public:
*/
void preConcatMatrix(const GrMatrix& matrix) { fMatrix.preConcat(matrix); }
- /**
- * Sets filtering type.
- * @param filter type of filtering to apply
- */
- void setFilter(Filter filter) { fFilter = filter; }
-
- void reset(WrapMode wrapXAndY,
- Filter filter,
+ void reset(SkShader::TileMode tileXAndY,
+ bool filter,
const GrMatrix& matrix) {
- fWrapX = wrapXAndY;
- fWrapY = wrapXAndY;
- fFilter = filter;
+ fTextureParams.reset(tileXAndY, filter);
fMatrix = matrix;
fSwapRAndB = false;
GrSafeSetNull(fCustomStage);
}
- void reset(WrapMode wrapXAndY, Filter filter) {
+ void reset(SkShader::TileMode wrapXAndY, bool filter) {
this->reset(wrapXAndY, filter, GrMatrix::I());
}
void reset(const GrMatrix& matrix) {
- this->reset(kDefault_WrapMode, kDefault_Filter, matrix);
+ this->reset(kTileModeDefault, kBilerpDefault, matrix);
}
void reset() {
- this->reset(kDefault_WrapMode, kDefault_Filter, GrMatrix::I());
+ this->reset(kTileModeDefault, kBilerpDefault, GrMatrix::I());
}
GrCustomStage* setCustomStage(GrCustomStage* stage) {
@@ -151,9 +182,7 @@ public:
GrCustomStage* getCustomStage() const { return fCustomStage; }
private:
- WrapMode fWrapX : 8;
- WrapMode fWrapY : 8;
- Filter fFilter : 8;
+ GrTextureParams fTextureParams;
bool fSwapRAndB;
GrMatrix fMatrix;