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

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

Issue 1042373002: Emulate gamma fix by making glyphs thicker or thinner (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Some clean up 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
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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 , GrTexture* tex,
51 const GrTextureParams& params, 51 const GrTextureParams& params,
52 GrTexture* gamma, const GrTextureParams& gammaParams,
53 float lum, uint32_t flags, bool opaqueVer texColors) { 52 float lum, uint32_t flags, bool opaqueVer texColors) {
54 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, tex, params, gamma, 53 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, tex, params, lum,
55 gammaParams, lum,
56 flags, opaqueVertexColor s)); 54 flags, opaqueVertexColor s));
57 } 55 }
58 #else 56 #else
59 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , GrTexture* tex, 57 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , GrTexture* tex,
60 const GrTextureParams& params, 58 const GrTextureParams& params,
61 uint32_t flags, bool opaqueVertexColors) { 59 uint32_t flags, bool opaqueVertexColors) {
62 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, tex , params, flags, 60 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (color, viewMatrix, tex , params, flags,
63 opaqueVertexColors)); 61 opaqueVertexColors));
64 } 62 }
65 #endif 63 #endif
66 64
67 virtual ~GrDistanceFieldTextureEffect() {} 65 virtual ~GrDistanceFieldTextureEffect() {}
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; }
73 const Attribute* inTextureCoords() const { return fInTextureCoords; } 71 const Attribute* inTextureCoords() const { return fInTextureCoords; }
74 #ifdef SK_GAMMA_APPLY_TO_A8 72 #ifdef SK_GAMMA_APPLY_TO_A8
75 float getLuminance() const { return fLuminance; } 73 float getDistanceAdjust() const { return fDistanceAdjust; }
76 #endif 74 #endif
77 uint32_t getFlags() const { return fFlags; } 75 uint32_t getFlags() const { return fFlags; }
78 76
79 virtual void getGLProcessorKey(const GrBatchTracker& bt, 77 virtual void getGLProcessorKey(const GrBatchTracker& bt,
80 const GrGLCaps& caps, 78 const GrGLCaps& caps,
81 GrProcessorKeyBuilder* b) const override; 79 GrProcessorKeyBuilder* b) const override;
82 80
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 GrDistanceFieldTextureEffect(GrColor, const SkMatrix& viewMatrix, GrTexture* texture, 91 GrDistanceFieldTextureEffect(GrColor, const SkMatrix& viewMatrix, GrTexture* texture,
94 const GrTextureParams& params, 92 const GrTextureParams& params,
95 #ifdef SK_GAMMA_APPLY_TO_A8 93 #ifdef SK_GAMMA_APPLY_TO_A8
96 GrTexture* gamma, const GrTextureParams& gammaP arams, float lum, 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
104 GrTextureAccess fTextureAccess; 102 GrTextureAccess fTextureAccess;
105 #ifdef SK_GAMMA_APPLY_TO_A8 103 #ifdef SK_GAMMA_APPLY_TO_A8
106 GrTextureAccess fGammaTextureAccess; 104 float fDistanceAdjust;
107 float fLuminance;
108 #endif 105 #endif
109 uint32_t fFlags; 106 uint32_t fFlags;
110 const Attribute* fInPosition; 107 const Attribute* fInPosition;
111 const Attribute* fInColor; 108 const Attribute* fInColor;
112 const Attribute* fInTextureCoords; 109 const Attribute* fInTextureCoords;
113 110
114 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 111 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
115 112
116 typedef GrGeometryProcessor INHERITED; 113 typedef GrGeometryProcessor INHERITED;
117 }; 114 };
118 115
119 116
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 }; 172 };
176 173
177 /** 174 /**
178 * The output color of this effect is a modulation of the input color and sample s from a 175 * The output color of this effect is a modulation of the input color and sample s from a
179 * distance field texture (using a smoothed step function near 0.5), adjusted fo r LCD displays. 176 * distance field texture (using a smoothed step function near 0.5), adjusted fo r LCD displays.
180 * It allows explicit specification of the filtering and wrap modes (GrTexturePa rams). The input 177 * It allows explicit specification of the filtering and wrap modes (GrTexturePa rams). The input
181 * coords are a custom attribute. Gamma correction is handled via a texture LUT. 178 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
182 */ 179 */
183 class GrDistanceFieldLCDTextureEffect : public GrGeometryProcessor { 180 class GrDistanceFieldLCDTextureEffect : public GrGeometryProcessor {
184 public: 181 public:
182 struct DistanceAdjust {
183 SkScalar fR, fG, fB;
184 static DistanceAdjust Make(SkScalar r, SkScalar g, SkScalar b) {
185 DistanceAdjust result;
186 result.fR = r; result.fG = g; result.fB = b;
187 return result;
188 }
189 bool operator==(const DistanceAdjust& wa) const {
190 return (fR == wa.fR && fG == wa.fG && fB == wa.fB);
191 }
192 bool operator!=(const DistanceAdjust& wa) const {
193 return !(*this == wa);
194 }
195 };
196
185 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , GrTexture* tex, 197 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , GrTexture* tex,
186 const GrTextureParams& params, GrTexture* gamma, 198 const GrTextureParams& params,
187 const GrTextureParams& gammaParams, 199 DistanceAdjust distanceAdjust, uint32_t f lags) {
188 SkColor textColor, uint32_t flags) {
189 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, 200 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect,
190 (color, viewMatrix, tex, params, gamma, gammaParams, t extColor, flags)); 201 (color, viewMatrix, tex, params, distanceAdjust, flags ));
191 } 202 }
192 203
193 virtual ~GrDistanceFieldLCDTextureEffect() {} 204 virtual ~GrDistanceFieldLCDTextureEffect() {}
194 205
195 const char* name() const override { return "DistanceFieldLCDTexture"; } 206 const char* name() const override { return "DistanceFieldLCDTexture"; }
196 207
197 const Attribute* inPosition() const { return fInPosition; } 208 const Attribute* inPosition() const { return fInPosition; }
198 const Attribute* inTextureCoords() const { return fInTextureCoords; } 209 const Attribute* inTextureCoords() const { return fInTextureCoords; }
199 GrColor getTextColor() const { return fTextColor; } 210 DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; }
200 uint32_t getFlags() const { return fFlags; } 211 uint32_t getFlags() const { return fFlags; }
201 212
202 virtual void getGLProcessorKey(const GrBatchTracker& bt, 213 virtual void getGLProcessorKey(const GrBatchTracker& bt,
203 const GrGLCaps& caps, 214 const GrGLCaps& caps,
204 GrProcessorKeyBuilder* b) const override; 215 GrProcessorKeyBuilder* b) const override;
205 216
206 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, 217 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
207 const GrGLCaps&) const over ride; 218 const GrGLCaps&) const over ride;
208 219
209 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override; 220 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override;
210 221
211 bool onCanMakeEqual(const GrBatchTracker&, 222 bool onCanMakeEqual(const GrBatchTracker&,
212 const GrGeometryProcessor&, 223 const GrGeometryProcessor&,
213 const GrBatchTracker&) const override; 224 const GrBatchTracker&) const override;
214 225
215 private: 226 private:
216 GrDistanceFieldLCDTextureEffect(GrColor, const SkMatrix& viewMatrix, GrTextu re* texture, 227 GrDistanceFieldLCDTextureEffect(GrColor, const SkMatrix& viewMatrix, GrTextu re* texture,
217 const GrTextureParams& params, 228 const GrTextureParams& params,
218 GrTexture* gamma, const GrTextureParams& gam maParams, 229 DistanceAdjust wa, uint32_t flags);
219 SkColor textColor, uint32_t flags);
220 230
221 bool onIsEqual(const GrGeometryProcessor& other) const override; 231 bool onIsEqual(const GrGeometryProcessor& other) const override;
222 232
223 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override; 233 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override;
224 234
225 GrTextureAccess fTextureAccess; 235 GrTextureAccess fTextureAccess;
226 GrTextureAccess fGammaTextureAccess; 236 DistanceAdjust fDistanceAdjust;
227 GrColor fTextColor; 237 uint32_t fFlags;
228 uint32_t fFlags;
229 const Attribute* fInPosition; 238 const Attribute* fInPosition;
230 const Attribute* fInTextureCoords; 239 const Attribute* fInTextureCoords;
231 240
232 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 241 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
233 242
234 typedef GrGeometryProcessor INHERITED; 243 typedef GrGeometryProcessor INHERITED;
235 }; 244 };
236 245
237 #endif 246 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrDistanceFieldTextContext.cpp ('k') | src/gpu/effects/GrDistanceFieldTextureEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698