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