Line data Source code
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 0 : static const GrSamplerParams& ClampNoFilter() {
20 0 : static const GrSamplerParams gParams;
21 0 : return gParams;
22 : }
23 : static const GrSamplerParams& ClampBilerp() {
24 : static const GrSamplerParams gParams(SkShader::kClamp_TileMode, kBilerp_FilterMode);
25 : return gParams;
26 : }
27 :
28 0 : GrSamplerParams() {
29 0 : this->reset();
30 0 : }
31 :
32 : enum FilterMode {
33 : kNone_FilterMode,
34 : kBilerp_FilterMode,
35 : kMipMap_FilterMode
36 : };
37 :
38 0 : GrSamplerParams(SkShader::TileMode tileXAndY, FilterMode filterMode) {
39 0 : this->reset(tileXAndY, filterMode);
40 0 : }
41 :
42 0 : GrSamplerParams(const SkShader::TileMode tileModes[2], FilterMode filterMode) {
43 0 : this->reset(tileModes, filterMode);
44 0 : }
45 :
46 : GrSamplerParams(const GrSamplerParams& params) {
47 : *this = params;
48 : }
49 :
50 0 : GrSamplerParams& operator= (const GrSamplerParams& params) {
51 0 : fTileModes[0] = params.fTileModes[0];
52 0 : fTileModes[1] = params.fTileModes[1];
53 0 : fFilterMode = params.fFilterMode;
54 0 : return *this;
55 : }
56 :
57 0 : void reset() {
58 0 : this->reset(SkShader::kClamp_TileMode, kNone_FilterMode);
59 0 : }
60 :
61 0 : void reset(SkShader::TileMode tileXAndY, FilterMode filterMode) {
62 0 : fTileModes[0] = fTileModes[1] = tileXAndY;
63 0 : fFilterMode = filterMode;
64 0 : }
65 :
66 0 : void reset(const SkShader::TileMode tileModes[2], FilterMode filterMode) {
67 0 : fTileModes[0] = tileModes[0];
68 0 : fTileModes[1] = tileModes[1];
69 0 : fFilterMode = filterMode;
70 0 : }
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 0 : void setFilterMode(FilterMode filterMode) { fFilterMode = filterMode; }
82 :
83 0 : 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 0 : SkShader::TileMode getTileModeX() const { return fTileModes[0]; }
88 :
89 0 : SkShader::TileMode getTileModeY() const { return fTileModes[1]; }
90 :
91 0 : bool isTiled() const {
92 0 : return SkShader::kClamp_TileMode != fTileModes[0] ||
93 0 : SkShader::kClamp_TileMode != fTileModes[1];
94 : }
95 :
96 0 : FilterMode filterMode() const { return fFilterMode; }
97 :
98 0 : bool operator== (const GrSamplerParams& other) const {
99 0 : return fTileModes[0] == other.fTileModes[0] &&
100 0 : fTileModes[1] == other.fTileModes[1] &&
101 0 : 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
|