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, const SkMatrix& viewMatrix
, GrTexture* tex, | 50 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, |
51 const GrTextureParams& params, | 51 const SkMatrix& localMatrix, |
| 52 GrTexture* tex, const GrTextureParams& pa
rams, |
52 float lum, uint32_t flags, bool opaqueVer
texColors) { | 53 float lum, uint32_t flags, bool opaqueVer
texColors) { |
53 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, tex,
params, lum, | 54 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, loca
lMatrix, tex, |
54 flags, opaqueVertexColor
s)); | 55 params, lum, flags, opa
queVertexColors)); |
55 } | 56 } |
56 #else | 57 #else |
57 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, GrTexture* tex, | 58 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, |
58 const GrTextureParams& params, | 59 const SkMatrix& localMatrix, |
| 60 GrTexture* tex, const GrTextureParams& pa
rams, |
59 uint32_t flags, bool opaqueVertexColors)
{ | 61 uint32_t flags, bool opaqueVertexColors)
{ |
60 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, tex
, params, flags, | 62 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, loca
lMatrix, tex, |
61 opaqueVertexColors)); | 63 params, flags, opaqueVe
rtexColors)); |
62 } | 64 } |
63 #endif | 65 #endif |
64 | 66 |
65 virtual ~GrDistanceFieldTextureEffect() {} | 67 virtual ~GrDistanceFieldTextureEffect() {} |
66 | 68 |
67 const char* name() const override { return "DistanceFieldTexture"; } | 69 const char* name() const override { return "DistanceFieldTexture"; } |
68 | 70 |
69 const Attribute* inPosition() const { return fInPosition; } | 71 const Attribute* inPosition() const { return fInPosition; } |
70 const Attribute* inColor() const { return fInColor; } | 72 const Attribute* inColor() const { return fInColor; } |
71 const Attribute* inTextureCoords() const { return fInTextureCoords; } | 73 const Attribute* inTextureCoords() const { return fInTextureCoords; } |
72 #ifdef SK_GAMMA_APPLY_TO_A8 | 74 #ifdef SK_GAMMA_APPLY_TO_A8 |
73 float getDistanceAdjust() const { return fDistanceAdjust; } | 75 float getDistanceAdjust() const { return fDistanceAdjust; } |
74 #endif | 76 #endif |
75 uint32_t getFlags() const { return fFlags; } | 77 uint32_t getFlags() const { return fFlags; } |
76 | 78 |
77 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 79 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
78 const GrGLCaps& caps, | 80 const GrGLCaps& caps, |
79 GrProcessorKeyBuilder* b) const override; | 81 GrProcessorKeyBuilder* b) const override; |
80 | 82 |
81 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, | 83 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
82 const GrGLCaps&) const over
ride; | 84 const GrGLCaps&) const over
ride; |
83 | 85 |
84 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; | 86 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; |
85 | 87 |
86 bool onCanMakeEqual(const GrBatchTracker&, | 88 bool onCanMakeEqual(const GrBatchTracker&, |
87 const GrGeometryProcessor&, | 89 const GrGeometryProcessor&, |
88 const GrBatchTracker&) const override; | 90 const GrBatchTracker&) const override; |
89 | 91 |
90 private: | 92 private: |
91 GrDistanceFieldTextureEffect(GrColor, const SkMatrix& viewMatrix, GrTexture*
texture, | 93 GrDistanceFieldTextureEffect(GrColor, const SkMatrix& viewMatrix, const SkMa
trix& localMatrix, |
92 const GrTextureParams& params, | 94 GrTexture* texture, const GrTextureParams& para
ms, |
93 #ifdef SK_GAMMA_APPLY_TO_A8 | 95 #ifdef SK_GAMMA_APPLY_TO_A8 |
94 float distanceAdjust, | 96 float distanceAdjust, |
95 #endif | 97 #endif |
96 uint32_t flags, bool opaqueVertexColors); | 98 uint32_t flags, bool opaqueVertexColors); |
97 | 99 |
98 bool onIsEqual(const GrGeometryProcessor& other) const override; | 100 bool onIsEqual(const GrGeometryProcessor& other) const override; |
99 | 101 |
100 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override; | 102 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override; |
101 | 103 |
102 GrTextureAccess fTextureAccess; | 104 GrTextureAccess fTextureAccess; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 return result; | 189 return result; |
188 } | 190 } |
189 bool operator==(const DistanceAdjust& wa) const { | 191 bool operator==(const DistanceAdjust& wa) const { |
190 return (fR == wa.fR && fG == wa.fG && fB == wa.fB); | 192 return (fR == wa.fR && fG == wa.fG && fB == wa.fB); |
191 } | 193 } |
192 bool operator!=(const DistanceAdjust& wa) const { | 194 bool operator!=(const DistanceAdjust& wa) const { |
193 return !(*this == wa); | 195 return !(*this == wa); |
194 } | 196 } |
195 }; | 197 }; |
196 | 198 |
197 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, GrTexture* tex, | 199 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix
, |
198 const GrTextureParams& params, | 200 const SkMatrix& localMatrix, |
| 201 GrTexture* tex, const GrTextureParams& pa
rams, |
199 DistanceAdjust distanceAdjust, uint32_t f
lags) { | 202 DistanceAdjust distanceAdjust, uint32_t f
lags) { |
200 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, | 203 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, |
201 (color, viewMatrix, tex, params, distanceAdjust, flags
)); | 204 (color, viewMatrix, localMatrix, tex, params, distance
Adjust, flags)); |
202 } | 205 } |
203 | 206 |
204 virtual ~GrDistanceFieldLCDTextureEffect() {} | 207 virtual ~GrDistanceFieldLCDTextureEffect() {} |
205 | 208 |
206 const char* name() const override { return "DistanceFieldLCDTexture"; } | 209 const char* name() const override { return "DistanceFieldLCDTexture"; } |
207 | 210 |
208 const Attribute* inPosition() const { return fInPosition; } | 211 const Attribute* inPosition() const { return fInPosition; } |
209 const Attribute* inTextureCoords() const { return fInTextureCoords; } | 212 const Attribute* inTextureCoords() const { return fInTextureCoords; } |
210 DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; } | 213 DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; } |
211 uint32_t getFlags() const { return fFlags; } | 214 uint32_t getFlags() const { return fFlags; } |
212 | 215 |
213 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 216 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
214 const GrGLCaps& caps, | 217 const GrGLCaps& caps, |
215 GrProcessorKeyBuilder* b) const override; | 218 GrProcessorKeyBuilder* b) const override; |
216 | 219 |
217 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, | 220 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
218 const GrGLCaps&) const over
ride; | 221 const GrGLCaps&) const over
ride; |
219 | 222 |
220 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; | 223 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; |
221 | 224 |
222 bool onCanMakeEqual(const GrBatchTracker&, | 225 bool onCanMakeEqual(const GrBatchTracker&, |
223 const GrGeometryProcessor&, | 226 const GrGeometryProcessor&, |
224 const GrBatchTracker&) const override; | 227 const GrBatchTracker&) const override; |
225 | 228 |
226 private: | 229 private: |
227 GrDistanceFieldLCDTextureEffect(GrColor, const SkMatrix& viewMatrix, GrTextu
re* texture, | 230 GrDistanceFieldLCDTextureEffect(GrColor, const SkMatrix& viewMatrix, |
228 const GrTextureParams& params, | 231 const SkMatrix& localMatrix, |
| 232 GrTexture* texture, const GrTextureParams& p
arams, |
229 DistanceAdjust wa, uint32_t flags); | 233 DistanceAdjust wa, uint32_t flags); |
230 | 234 |
231 bool onIsEqual(const GrGeometryProcessor& other) const override; | 235 bool onIsEqual(const GrGeometryProcessor& other) const override; |
232 | 236 |
233 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override; | 237 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override; |
234 | 238 |
235 GrTextureAccess fTextureAccess; | 239 GrTextureAccess fTextureAccess; |
236 DistanceAdjust fDistanceAdjust; | 240 DistanceAdjust fDistanceAdjust; |
237 uint32_t fFlags; | 241 uint32_t fFlags; |
238 const Attribute* fInPosition; | 242 const Attribute* fInPosition; |
239 const Attribute* fInTextureCoords; | 243 const Attribute* fInTextureCoords; |
240 | 244 |
241 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 245 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
242 | 246 |
243 typedef GrGeometryProcessor INHERITED; | 247 typedef GrGeometryProcessor INHERITED; |
244 }; | 248 }; |
245 | 249 |
246 #endif | 250 #endif |
OLD | NEW |