OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef GrTextureAccess_DEFINED | 8 #ifndef GrTextureAccess_DEFINED |
9 #define GrTextureAccess_DEFINED | 9 #define GrTextureAccess_DEFINED |
10 | 10 |
11 #include "GrGpuResourceRef.h" | 11 #include "GrGpuResourceRef.h" |
12 #include "GrTexture.h" | 12 #include "GrTexture.h" |
| 13 #include "GrTextureParams.h" |
13 #include "SkRefCnt.h" | 14 #include "SkRefCnt.h" |
14 #include "SkShader.h" | 15 #include "SkShader.h" |
15 | 16 |
16 /** | |
17 * Represents the filtering and tile modes used to access a texture. It is mostl
y used with | |
18 * GrTextureAccess (defined below). Also, some of the texture cache methods requ
ire knowledge about | |
19 * filtering and tiling to perform a cache lookup. If it wasn't for this latter
usage this would | |
20 * be folded into GrTextureAccess. The default is clamp tile modes and no filter
ing. | |
21 */ | |
22 class GrTextureParams { | |
23 public: | |
24 GrTextureParams() { | |
25 this->reset(); | |
26 } | |
27 | |
28 enum FilterMode { | |
29 kNone_FilterMode, | |
30 kBilerp_FilterMode, | |
31 kMipMap_FilterMode | |
32 }; | |
33 | |
34 GrTextureParams(SkShader::TileMode tileXAndY, FilterMode filterMode) { | |
35 this->reset(tileXAndY, filterMode); | |
36 } | |
37 | |
38 GrTextureParams(const SkShader::TileMode tileModes[2], FilterMode filterMode
) { | |
39 this->reset(tileModes, filterMode); | |
40 } | |
41 | |
42 GrTextureParams(const GrTextureParams& params) { | |
43 *this = params; | |
44 } | |
45 | |
46 GrTextureParams& operator= (const GrTextureParams& params) { | |
47 fTileModes[0] = params.fTileModes[0]; | |
48 fTileModes[1] = params.fTileModes[1]; | |
49 fFilterMode = params.fFilterMode; | |
50 return *this; | |
51 } | |
52 | |
53 void reset() { | |
54 this->reset(SkShader::kClamp_TileMode, kNone_FilterMode); | |
55 } | |
56 | |
57 void reset(SkShader::TileMode tileXAndY, FilterMode filterMode) { | |
58 fTileModes[0] = fTileModes[1] = tileXAndY; | |
59 fFilterMode = filterMode; | |
60 } | |
61 | |
62 void reset(const SkShader::TileMode tileModes[2], FilterMode filterMode) { | |
63 fTileModes[0] = tileModes[0]; | |
64 fTileModes[1] = tileModes[1]; | |
65 fFilterMode = filterMode; | |
66 } | |
67 | |
68 void setClampNoFilter() { | |
69 fTileModes[0] = fTileModes[1] = SkShader::kClamp_TileMode; | |
70 fFilterMode = kNone_FilterMode; | |
71 } | |
72 | |
73 void setClamp() { | |
74 fTileModes[0] = fTileModes[1] = SkShader::kClamp_TileMode; | |
75 } | |
76 | |
77 void setFilterMode(FilterMode filterMode) { fFilterMode = filterMode; } | |
78 | |
79 void setTileModeX(const SkShader::TileMode tm) { fTileModes[0] = tm; } | |
80 void setTileModeY(const SkShader::TileMode tm) { fTileModes[1] = tm; } | |
81 void setTileModeXAndY(const SkShader::TileMode tm) { fTileModes[0] = fTileMo
des[1] = tm; } | |
82 | |
83 SkShader::TileMode getTileModeX() const { return fTileModes[0]; } | |
84 | |
85 SkShader::TileMode getTileModeY() const { return fTileModes[1]; } | |
86 | |
87 bool isTiled() const { | |
88 return SkShader::kClamp_TileMode != fTileModes[0] || | |
89 SkShader::kClamp_TileMode != fTileModes[1]; | |
90 } | |
91 | |
92 FilterMode filterMode() const { return fFilterMode; } | |
93 | |
94 bool operator== (const GrTextureParams& other) const { | |
95 return fTileModes[0] == other.fTileModes[0] && | |
96 fTileModes[1] == other.fTileModes[1] && | |
97 fFilterMode == other.fFilterMode; | |
98 } | |
99 | |
100 bool operator!= (const GrTextureParams& other) const { return !(*this == oth
er); } | |
101 | |
102 private: | |
103 | |
104 SkShader::TileMode fTileModes[2]; | |
105 FilterMode fFilterMode; | |
106 }; | |
107 | |
108 /** A class representing the swizzle access pattern for a texture. Note that if
the texture is | 17 /** A class representing the swizzle access pattern for a texture. Note that if
the texture is |
109 * an alpha-only texture then the alpha channel is substituted for other compon
ents. Any mangling | 18 * an alpha-only texture then the alpha channel is substituted for other compon
ents. Any mangling |
110 * to handle the r,g,b->a conversions for alpha textures is automatically inclu
ded in the stage | 19 * to handle the r,g,b->a conversions for alpha textures is automatically inclu
ded in the stage |
111 * key. However, if a GrProcessor uses different swizzles based on its input th
en it must | 20 * key. However, if a GrProcessor uses different swizzles based on its input th
en it must |
112 * consider that variation in its key-generation. | 21 * consider that variation in its key-generation. |
113 */ | 22 */ |
114 class GrTextureAccess : public SkNoncopyable { | 23 class GrTextureAccess : public SkNoncopyable { |
115 public: | 24 public: |
116 /** | 25 /** |
117 * A default GrTextureAccess must have reset() called on it in a GrProcessor
subclass's | 26 * A default GrTextureAccess must have reset() called on it in a GrProcessor
subclass's |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 | 94 |
186 ProgramTexture fTexture; | 95 ProgramTexture fTexture; |
187 GrTextureParams fParams; | 96 GrTextureParams fParams; |
188 uint32_t fSwizzleMask; | 97 uint32_t fSwizzleMask; |
189 char fSwizzle[5]; | 98 char fSwizzle[5]; |
190 | 99 |
191 typedef SkNoncopyable INHERITED; | 100 typedef SkNoncopyable INHERITED; |
192 }; | 101 }; |
193 | 102 |
194 #endif | 103 #endif |
OLD | NEW |