Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(506)

Side by Side Diff: src/gpu/effects/GrDistanceFieldTextureEffect.h

Issue 1073473005: Rename DistanceFieldTextureEffect.{cpp,h} (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright 2013 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 GrDistanceFieldGeoProc_DEFINED
9 #define GrDistanceFieldGeoProc_DEFINED
10
11 #include "GrProcessor.h"
12 #include "GrGeometryProcessor.h"
13
14 class GrGLDistanceFieldA8TextGeoProc;
15 class GrGLDistanceFieldPathGeoProc;
16 class GrGLDistanceFieldLCDTextGeoProc;
17 class GrInvariantOutput;
18
19 enum GrDistanceFieldEffectFlags {
20 kSimilarity_DistanceFieldEffectFlag = 0x01, // ctm is similarity matrix
21 kRectToRect_DistanceFieldEffectFlag = 0x02, // ctm maps rects to rects
22 kUseLCD_DistanceFieldEffectFlag = 0x04, // use lcd text
23 kBGR_DistanceFieldEffectFlag = 0x08, // lcd display has bgr order
24 kPortrait_DistanceFieldEffectFlag = 0x10, // lcd display is in portrait mode (not used yet)
25 kColorAttr_DistanceFieldEffectFlag = 0x20, // color vertex attribute
26
27 kInvalid_DistanceFieldEffectFlag = 0x80, // invalid state (for initiali zation)
28
29 kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
30 kRectToRect_DistanceFieldEffectFlag,
31 // The subset of the flags relevant to GrDistanceFieldA8TextGeoProc
32 kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
33 kColorAttr_DistanceFieldEffectFlag,
34 // The subset of the flags relevant to GrDistanceFieldLCDTextGeoProc
35 kLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
36 kRectToRect_DistanceFieldEffectFlag |
37 kUseLCD_DistanceFieldEffectFlag |
38 kBGR_DistanceFieldEffectFlag,
39 };
40
41 /**
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).
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.
46 */
47 class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor {
48 public:
49 #ifdef SK_GAMMA_APPLY_TO_A8
50 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix ,
51 const SkMatrix& localMatrix,
52 GrTexture* tex, const GrTextureParams& pa rams,
53 float lum, uint32_t flags, bool opaqueVer texColors) {
54 return SkNEW_ARGS(GrDistanceFieldA8TextGeoProc, (color, viewMatrix, loca lMatrix, tex,
55 params, lum, flags, opa queVertexColors));
56 }
57 #else
58 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix ,
59 const SkMatrix& localMatrix,
60 GrTexture* tex, const GrTextureParams& pa rams,
61 uint32_t flags, bool opaqueVertexColors) {
62 return SkNEW_ARGS(GrDistanceFieldA8TextGeoProc, (color, viewMatrix, loca lMatrix, tex,
63 params, flags, opaqueVe rtexColors));
64 }
65 #endif
66
67 virtual ~GrDistanceFieldA8TextGeoProc() {}
68
69 const char* name() const override { return "DistanceFieldTexture"; }
70
71 const Attribute* inPosition() const { return fInPosition; }
72 const Attribute* inColor() const { return fInColor; }
73 const Attribute* inTextureCoords() const { return fInTextureCoords; }
74 #ifdef SK_GAMMA_APPLY_TO_A8
75 float getDistanceAdjust() const { return fDistanceAdjust; }
76 #endif
77 uint32_t getFlags() const { return fFlags; }
78
79 virtual void getGLProcessorKey(const GrBatchTracker& bt,
80 const GrGLCaps& caps,
81 GrProcessorKeyBuilder* b) const override;
82
83 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
84 const GrGLCaps&) const over ride;
85
86 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override;
87
88 bool onCanMakeEqual(const GrBatchTracker&,
89 const GrGeometryProcessor&,
90 const GrBatchTracker&) const override;
91
92 private:
93 GrDistanceFieldA8TextGeoProc(GrColor, const SkMatrix& viewMatrix, const SkMa trix& localMatrix,
94 GrTexture* texture, const GrTextureParams& para ms,
95 #ifdef SK_GAMMA_APPLY_TO_A8
96 float distanceAdjust,
97 #endif
98 uint32_t flags, bool opaqueVertexColors);
99
100 bool onIsEqual(const GrGeometryProcessor& other) const override;
101
102 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override;
103
104 GrTextureAccess fTextureAccess;
105 #ifdef SK_GAMMA_APPLY_TO_A8
106 float fDistanceAdjust;
107 #endif
108 uint32_t fFlags;
109 const Attribute* fInPosition;
110 const Attribute* fInColor;
111 const Attribute* fInTextureCoords;
112
113 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
114
115 typedef GrGeometryProcessor INHERITED;
116 };
117
118
119 /**
120 * The output color of this effect is a modulation of the input color and a sampl e from a
121 * distance field texture (using a smoothed step function near 0.5).
122 * It allows explicit specification of the filtering and wrap modes (GrTexturePar ams). The input
123 * coords are a custom attribute. No gamma correct blending is applied. Used for paths only.
124 */
125 class GrDistanceFieldPathGeoProc : public GrGeometryProcessor {
126 public:
127 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , GrTexture* tex,
128 const GrTextureParams& params,
129 uint32_t flags, bool opaqueVertexColors) {
130 return SkNEW_ARGS(GrDistanceFieldPathGeoProc, (color, viewMatrix, tex, p arams,
131 flags, opaqueVertexColors ));
132 }
133
134 virtual ~GrDistanceFieldPathGeoProc() {}
135
136 const char* name() const override { return "DistanceFieldTexture"; }
137
138 const Attribute* inPosition() const { return fInPosition; }
139 const Attribute* inColor() const { return fInColor; }
140 const Attribute* inTextureCoords() const { return fInTextureCoords; }
141 uint32_t getFlags() const { return fFlags; }
142
143 virtual void getGLProcessorKey(const GrBatchTracker& bt,
144 const GrGLCaps& caps,
145 GrProcessorKeyBuilder* b) const override;
146
147 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
148 const GrGLCaps&) const over ride;
149
150 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override;
151
152 bool onCanMakeEqual(const GrBatchTracker&,
153 const GrGeometryProcessor&,
154 const GrBatchTracker&) const override;
155
156 private:
157 GrDistanceFieldPathGeoProc(GrColor, const SkMatrix& viewMatrix, GrTexture* t exture,
158 const GrTextureParams& params, uint32_t flags,
159 bool opaqueVertexColors);
160
161 bool onIsEqual(const GrGeometryProcessor& other) const override;
162
163 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override;
164
165 GrTextureAccess fTextureAccess;
166 uint32_t fFlags;
167 const Attribute* fInPosition;
168 const Attribute* fInColor;
169 const Attribute* fInTextureCoords;
170
171 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
172
173 typedef GrGeometryProcessor INHERITED;
174 };
175
176 /**
177 * The output color of this effect is a modulation of the input color and sample s from a
178 * distance field texture (using a smoothed step function near 0.5), adjusted fo r LCD displays.
179 * It allows explicit specification of the filtering and wrap modes (GrTexturePa rams). The input
180 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
181 */
182 class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor {
183 public:
184 struct DistanceAdjust {
185 SkScalar fR, fG, fB;
186 static DistanceAdjust Make(SkScalar r, SkScalar g, SkScalar b) {
187 DistanceAdjust result;
188 result.fR = r; result.fG = g; result.fB = b;
189 return result;
190 }
191 bool operator==(const DistanceAdjust& wa) const {
192 return (fR == wa.fR && fG == wa.fG && fB == wa.fB);
193 }
194 bool operator!=(const DistanceAdjust& wa) const {
195 return !(*this == wa);
196 }
197 };
198
199 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix ,
200 const SkMatrix& localMatrix,
201 GrTexture* tex, const GrTextureParams& pa rams,
202 DistanceAdjust distanceAdjust, uint32_t f lags) {
203 return SkNEW_ARGS(GrDistanceFieldLCDTextGeoProc,
204 (color, viewMatrix, localMatrix, tex, params, distance Adjust, flags));
205 }
206
207 virtual ~GrDistanceFieldLCDTextGeoProc() {}
208
209 const char* name() const override { return "DistanceFieldLCDTexture"; }
210
211 const Attribute* inPosition() const { return fInPosition; }
212 const Attribute* inTextureCoords() const { return fInTextureCoords; }
213 DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; }
214 uint32_t getFlags() const { return fFlags; }
215
216 virtual void getGLProcessorKey(const GrBatchTracker& bt,
217 const GrGLCaps& caps,
218 GrProcessorKeyBuilder* b) const override;
219
220 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
221 const GrGLCaps&) const over ride;
222
223 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override;
224
225 bool onCanMakeEqual(const GrBatchTracker&,
226 const GrGeometryProcessor&,
227 const GrBatchTracker&) const override;
228
229 private:
230 GrDistanceFieldLCDTextGeoProc(GrColor, const SkMatrix& viewMatrix,
231 const SkMatrix& localMatrix,
232 GrTexture* texture, const GrTextureParams& par ams,
233 DistanceAdjust wa, uint32_t flags);
234
235 bool onIsEqual(const GrGeometryProcessor& other) const override;
236
237 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override;
238
239 GrTextureAccess fTextureAccess;
240 DistanceAdjust fDistanceAdjust;
241 uint32_t fFlags;
242 const Attribute* fInPosition;
243 const Attribute* fInTextureCoords;
244
245 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
246
247 typedef GrGeometryProcessor INHERITED;
248 };
249
250 #endif
OLDNEW
« no previous file with comments | « src/gpu/effects/GrDistanceFieldGeoProc.cpp ('k') | src/gpu/effects/GrDistanceFieldTextureEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698