OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 GrDistanceFieldTextureEffect_DEFINED | 8 #ifndef GrDistanceFieldTextureEffect_DEFINED |
9 #define GrDistanceFieldTextureEffect_DEFINED | 9 #define GrDistanceFieldTextureEffect_DEFINED |
10 | 10 |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 /** | 41 /** |
42 * The output color of this effect is a modulation of the input color and a samp
le from a | 42 * The output color of this effect is a modulation of the input color and a samp
le from a |
43 * distance field texture (using a smoothed step function near 0.5). | 43 * distance field texture (using a smoothed step function near 0.5). |
44 * It allows explicit specification of the filtering and wrap modes (GrTexturePa
rams). The input | 44 * It allows explicit specification of the filtering and wrap modes (GrTexturePa
rams). The input |
45 * coords are a custom attribute. Gamma correction is handled via a texture LUT. | 45 * coords are a custom attribute. Gamma correction is handled via a texture LUT. |
46 */ | 46 */ |
47 class GrDistanceFieldTextureEffect : public GrGeometryProcessor { | 47 class GrDistanceFieldTextureEffect : public GrGeometryProcessor { |
48 public: | 48 public: |
49 #ifdef SK_GAMMA_APPLY_TO_A8 | 49 #ifdef SK_GAMMA_APPLY_TO_A8 |
50 static GrGeometryProcessor* Create(GrColor color, GrTexture* tex, const GrTe
xtureParams& params, | 50 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, GrTexture* tex, |
| 51 const GrTextureParams& params, |
51 GrTexture* gamma, const GrTextureParams&
gammaParams, | 52 GrTexture* gamma, const GrTextureParams&
gammaParams, |
52 float lum, uint32_t flags, bool opaqueVer
texColors) { | 53 float lum, uint32_t flags, bool opaqueVer
texColors) { |
53 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, tex, params, gamm
a, gammaParams, lum, | 54 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, tex,
params, gamma, |
| 55 gammaParams, lum, |
54 flags, opaqueVertexColor
s)); | 56 flags, opaqueVertexColor
s)); |
55 } | 57 } |
56 #else | 58 #else |
57 static GrGeometryProcessor* Create(GrColor color, GrTexture* tex, const GrTe
xtureParams& params, | 59 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, GrTexture* tex, |
| 60 const GrTextureParams& params, |
58 uint32_t flags, bool opaqueVertexColors)
{ | 61 uint32_t flags, bool opaqueVertexColors)
{ |
59 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, tex, params, fl
ags, | 62 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, tex
, params, flags, |
60 opaqueVertexColors)); | 63 opaqueVertexColors)); |
61 } | 64 } |
62 #endif | 65 #endif |
63 | 66 |
64 virtual ~GrDistanceFieldTextureEffect() {} | 67 virtual ~GrDistanceFieldTextureEffect() {} |
65 | 68 |
66 virtual const char* name() const SK_OVERRIDE { return "DistanceFieldTexture"
; } | 69 virtual const char* name() const SK_OVERRIDE { return "DistanceFieldTexture"
; } |
67 | 70 |
68 const GrAttribute* inPosition() const { return fInPosition; } | 71 const GrAttribute* inPosition() const { return fInPosition; } |
69 const GrAttribute* inColor() const { return fInColor; } | 72 const GrAttribute* inColor() const { return fInColor; } |
70 const GrAttribute* inTextureCoords() const { return fInTextureCoords; } | 73 const GrAttribute* inTextureCoords() const { return fInTextureCoords; } |
71 #ifdef SK_GAMMA_APPLY_TO_A8 | 74 #ifdef SK_GAMMA_APPLY_TO_A8 |
72 float getLuminance() const { return fLuminance; } | 75 float getLuminance() const { return fLuminance; } |
73 #endif | 76 #endif |
74 uint32_t getFlags() const { return fFlags; } | 77 uint32_t getFlags() const { return fFlags; } |
75 | 78 |
76 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 79 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
77 const GrGLCaps& caps, | 80 const GrGLCaps& caps, |
78 GrProcessorKeyBuilder* b) const SK_OVERRIDE; | 81 GrProcessorKeyBuilder* b) const SK_OVERRIDE; |
79 | 82 |
80 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE; | 83 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE; |
81 | 84 |
82 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; | 85 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; |
83 | 86 |
84 bool onCanMakeEqual(const GrBatchTracker&, | 87 bool onCanMakeEqual(const GrBatchTracker&, |
85 const GrGeometryProcessor&, | 88 const GrGeometryProcessor&, |
86 const GrBatchTracker&) const SK_OVERRIDE; | 89 const GrBatchTracker&) const SK_OVERRIDE; |
87 | 90 |
88 private: | 91 private: |
89 GrDistanceFieldTextureEffect(GrColor, GrTexture* texture, const GrTexturePar
ams& params, | 92 GrDistanceFieldTextureEffect(GrColor, const SkMatrix& viewMatrix, GrTexture*
texture, |
| 93 const GrTextureParams& params, |
90 #ifdef SK_GAMMA_APPLY_TO_A8 | 94 #ifdef SK_GAMMA_APPLY_TO_A8 |
91 GrTexture* gamma, const GrTextureParams& gammaP
arams, float lum, | 95 GrTexture* gamma, const GrTextureParams& gammaP
arams, float lum, |
92 #endif | 96 #endif |
93 uint32_t flags, bool opaqueVertexColors); | 97 uint32_t flags, bool opaqueVertexColors); |
94 | 98 |
95 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; | 99 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; |
96 | 100 |
97 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_O
VERRIDE; | 101 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_O
VERRIDE; |
98 | 102 |
99 GrTextureAccess fTextureAccess; | 103 GrTextureAccess fTextureAccess; |
(...skipping 13 matching lines...) Expand all Loading... |
113 | 117 |
114 | 118 |
115 /** | 119 /** |
116 * The output color of this effect is a modulation of the input color and a sampl
e from a | 120 * The output color of this effect is a modulation of the input color and a sampl
e from a |
117 * distance field texture (using a smoothed step function near 0.5). | 121 * distance field texture (using a smoothed step function near 0.5). |
118 * It allows explicit specification of the filtering and wrap modes (GrTexturePar
ams). The input | 122 * It allows explicit specification of the filtering and wrap modes (GrTexturePar
ams). The input |
119 * coords are a custom attribute. No gamma correct blending is applied. | 123 * coords are a custom attribute. No gamma correct blending is applied. |
120 */ | 124 */ |
121 class GrDistanceFieldNoGammaTextureEffect : public GrGeometryProcessor { | 125 class GrDistanceFieldNoGammaTextureEffect : public GrGeometryProcessor { |
122 public: | 126 public: |
123 static GrGeometryProcessor* Create(GrColor color, GrTexture* tex, const GrTe
xtureParams& params, | 127 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, GrTexture* tex, |
| 128 const GrTextureParams& params, |
124 uint32_t flags, bool opaqueVertexColors)
{ | 129 uint32_t flags, bool opaqueVertexColors)
{ |
125 return SkNEW_ARGS(GrDistanceFieldNoGammaTextureEffect, (color, tex, para
ms, flags, | 130 return SkNEW_ARGS(GrDistanceFieldNoGammaTextureEffect, (color, viewMatri
x, tex, params, |
126 opaqueVertexColo
rs)); | 131 flags, opaqueVer
texColors)); |
127 } | 132 } |
128 | 133 |
129 virtual ~GrDistanceFieldNoGammaTextureEffect() {} | 134 virtual ~GrDistanceFieldNoGammaTextureEffect() {} |
130 | 135 |
131 virtual const char* name() const SK_OVERRIDE { return "DistanceFieldTexture"
; } | 136 virtual const char* name() const SK_OVERRIDE { return "DistanceFieldTexture"
; } |
132 | 137 |
133 const GrAttribute* inPosition() const { return fInPosition; } | 138 const GrAttribute* inPosition() const { return fInPosition; } |
134 const GrAttribute* inColor() const { return fInColor; } | 139 const GrAttribute* inColor() const { return fInColor; } |
135 const GrAttribute* inTextureCoords() const { return fInTextureCoords; } | 140 const GrAttribute* inTextureCoords() const { return fInTextureCoords; } |
136 uint32_t getFlags() const { return fFlags; } | 141 uint32_t getFlags() const { return fFlags; } |
137 | 142 |
138 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 143 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
139 const GrGLCaps& caps, | 144 const GrGLCaps& caps, |
140 GrProcessorKeyBuilder* b) const SK_OVERRIDE; | 145 GrProcessorKeyBuilder* b) const SK_OVERRIDE; |
141 | 146 |
142 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE; | 147 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE; |
143 | 148 |
144 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; | 149 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; |
145 | 150 |
146 bool onCanMakeEqual(const GrBatchTracker&, | 151 bool onCanMakeEqual(const GrBatchTracker&, |
147 const GrGeometryProcessor&, | 152 const GrGeometryProcessor&, |
148 const GrBatchTracker&) const SK_OVERRIDE; | 153 const GrBatchTracker&) const SK_OVERRIDE; |
149 | 154 |
150 private: | 155 private: |
151 GrDistanceFieldNoGammaTextureEffect(GrColor, GrTexture* texture, const GrTex
tureParams& params, | 156 GrDistanceFieldNoGammaTextureEffect(GrColor, const SkMatrix& viewMatrix, GrT
exture* texture, |
152 uint32_t flags, bool opaqueVertexColors)
; | 157 const GrTextureParams& params, uint32_t
flags, |
| 158 bool opaqueVertexColors); |
153 | 159 |
154 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; | 160 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; |
155 | 161 |
156 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_O
VERRIDE; | 162 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_O
VERRIDE; |
157 | 163 |
158 GrTextureAccess fTextureAccess; | 164 GrTextureAccess fTextureAccess; |
159 uint32_t fFlags; | 165 uint32_t fFlags; |
160 const GrAttribute* fInPosition; | 166 const GrAttribute* fInPosition; |
161 const GrAttribute* fInColor; | 167 const GrAttribute* fInColor; |
162 const GrAttribute* fInTextureCoords; | 168 const GrAttribute* fInTextureCoords; |
163 | 169 |
164 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 170 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
165 | 171 |
166 typedef GrGeometryProcessor INHERITED; | 172 typedef GrGeometryProcessor INHERITED; |
167 }; | 173 }; |
168 | 174 |
169 /** | 175 /** |
170 * The output color of this effect is a modulation of the input color and sample
s from a | 176 * The output color of this effect is a modulation of the input color and sample
s from a |
171 * distance field texture (using a smoothed step function near 0.5), adjusted fo
r LCD displays. | 177 * distance field texture (using a smoothed step function near 0.5), adjusted fo
r LCD displays. |
172 * It allows explicit specification of the filtering and wrap modes (GrTexturePa
rams). The input | 178 * It allows explicit specification of the filtering and wrap modes (GrTexturePa
rams). The input |
173 * coords are a custom attribute. Gamma correction is handled via a texture LUT. | 179 * coords are a custom attribute. Gamma correction is handled via a texture LUT. |
174 */ | 180 */ |
175 class GrDistanceFieldLCDTextureEffect : public GrGeometryProcessor { | 181 class GrDistanceFieldLCDTextureEffect : public GrGeometryProcessor { |
176 public: | 182 public: |
177 static GrGeometryProcessor* Create(GrColor color, GrTexture* tex, const GrTe
xtureParams& params, | 183 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, GrTexture* tex, |
178 GrTexture* gamma, const GrTextureParams&
gammaParams, | 184 const GrTextureParams& params, GrTexture*
gamma, |
| 185 const GrTextureParams& gammaParams, |
179 SkColor textColor, uint32_t flags) { | 186 SkColor textColor, uint32_t flags) { |
180 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, | 187 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, |
181 (color, tex, params, gamma, gammaParams, textColor, fl
ags)); | 188 (color, viewMatrix, tex, params, gamma, gammaParams, t
extColor, flags)); |
182 } | 189 } |
183 | 190 |
184 virtual ~GrDistanceFieldLCDTextureEffect() {} | 191 virtual ~GrDistanceFieldLCDTextureEffect() {} |
185 | 192 |
186 virtual const char* name() const SK_OVERRIDE { return "DistanceFieldLCDTextu
re"; } | 193 virtual const char* name() const SK_OVERRIDE { return "DistanceFieldLCDTextu
re"; } |
187 | 194 |
188 const GrAttribute* inPosition() const { return fInPosition; } | 195 const GrAttribute* inPosition() const { return fInPosition; } |
189 const GrAttribute* inTextureCoords() const { return fInTextureCoords; } | 196 const GrAttribute* inTextureCoords() const { return fInTextureCoords; } |
190 GrColor getTextColor() const { return fTextColor; } | 197 GrColor getTextColor() const { return fTextColor; } |
191 uint32_t getFlags() const { return fFlags; } | 198 uint32_t getFlags() const { return fFlags; } |
192 | 199 |
193 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 200 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
194 const GrGLCaps& caps, | 201 const GrGLCaps& caps, |
195 GrProcessorKeyBuilder* b) const SK_OVERRIDE; | 202 GrProcessorKeyBuilder* b) const SK_OVERRIDE; |
196 | 203 |
197 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE; | 204 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE; |
198 | 205 |
199 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; | 206 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; |
200 | 207 |
201 bool onCanMakeEqual(const GrBatchTracker&, | 208 bool onCanMakeEqual(const GrBatchTracker&, |
202 const GrGeometryProcessor&, | 209 const GrGeometryProcessor&, |
203 const GrBatchTracker&) const SK_OVERRIDE; | 210 const GrBatchTracker&) const SK_OVERRIDE; |
204 | 211 |
205 private: | 212 private: |
206 GrDistanceFieldLCDTextureEffect(GrColor, GrTexture* texture, const GrTexture
Params& params, | 213 GrDistanceFieldLCDTextureEffect(GrColor, const SkMatrix& viewMatrix, GrTextu
re* texture, |
| 214 const GrTextureParams& params, |
207 GrTexture* gamma, const GrTextureParams& gam
maParams, | 215 GrTexture* gamma, const GrTextureParams& gam
maParams, |
208 SkColor textColor, | 216 SkColor textColor, uint32_t flags); |
209 uint32_t flags); | |
210 | 217 |
211 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; | 218 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; |
212 | 219 |
213 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_O
VERRIDE; | 220 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_O
VERRIDE; |
214 | 221 |
215 GrTextureAccess fTextureAccess; | 222 GrTextureAccess fTextureAccess; |
216 GrTextureAccess fGammaTextureAccess; | 223 GrTextureAccess fGammaTextureAccess; |
217 GrColor fTextColor; | 224 GrColor fTextColor; |
218 uint32_t fFlags; | 225 uint32_t fFlags; |
219 const GrAttribute* fInPosition; | 226 const GrAttribute* fInPosition; |
220 const GrAttribute* fInTextureCoords; | 227 const GrAttribute* fInTextureCoords; |
221 | 228 |
222 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 229 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
223 | 230 |
224 typedef GrGeometryProcessor INHERITED; | 231 typedef GrGeometryProcessor INHERITED; |
225 }; | 232 }; |
226 | 233 |
227 #endif | 234 #endif |
OLD | NEW |