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

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

Issue 761563002: First step to moving vertex attributes to the geometryProcessor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: adding test to ignore Created 6 years 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
« no previous file with comments | « src/gpu/effects/GrDashingEffect.cpp ('k') | src/gpu/effects/GrDistanceFieldTextureEffect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
11 #include "GrProcessor.h" 11 #include "GrProcessor.h"
12 #include "GrGeometryProcessor.h" 12 #include "GrGeometryProcessor.h"
13 13
14 class GrGLDistanceFieldTextureEffect; 14 class GrGLDistanceFieldTextureEffect;
15 class GrGLDistanceFieldNoGammaTextureEffect; 15 class GrGLDistanceFieldNoGammaTextureEffect;
16 class GrGLDistanceFieldLCDTextureEffect; 16 class GrGLDistanceFieldLCDTextureEffect;
17 class GrInvariantOutput; 17 class GrInvariantOutput;
18 18
19 enum GrDistanceFieldEffectFlags { 19 enum GrDistanceFieldEffectFlags {
20 kSimilarity_DistanceFieldEffectFlag = 0x01, // ctm is similarity matrix 20 kSimilarity_DistanceFieldEffectFlag = 0x01, // ctm is similarity matrix
21 kRectToRect_DistanceFieldEffectFlag = 0x02, // ctm maps rects to rects 21 kRectToRect_DistanceFieldEffectFlag = 0x02, // ctm maps rects to rects
22 kUseLCD_DistanceFieldEffectFlag = 0x04, // use lcd text 22 kUseLCD_DistanceFieldEffectFlag = 0x04, // use lcd text
23 kBGR_DistanceFieldEffectFlag = 0x08, // lcd display has bgr order 23 kBGR_DistanceFieldEffectFlag = 0x08, // lcd display has bgr order
24 kPortrait_DistanceFieldEffectFlag = 0x10, // lcd display is in portrait mode (not used yet) 24 kPortrait_DistanceFieldEffectFlag = 0x10, // lcd display is in portrait mode (not used yet)
25 kColorAttr_DistanceFieldEffectFlag = 0x20, // color vertex attribute
25 26
26 kInvalid_DistanceFieldEffectFlag = 0x80, // invalid state (for initiali zation) 27 kInvalid_DistanceFieldEffectFlag = 0x80, // invalid state (for initiali zation)
27 28
28 kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | 29 kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
29 kRectToRect_DistanceFieldEffectFlag, 30 kRectToRect_DistanceFieldEffectFlag,
30 // The subset of the flags relevant to GrDistanceFieldTextureEffect 31 // The subset of the flags relevant to GrDistanceFieldTextureEffect
31 kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag, 32 kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
33 kColorAttr_DistanceFieldEffectFlag,
32 // The subset of the flags relevant to GrDistanceFieldLCDTextureEffect 34 // The subset of the flags relevant to GrDistanceFieldLCDTextureEffect
33 kLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | 35 kLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
34 kRectToRect_DistanceFieldEffectFlag | 36 kRectToRect_DistanceFieldEffectFlag |
35 kUseLCD_DistanceFieldEffectFlag | 37 kUseLCD_DistanceFieldEffectFlag |
36 kBGR_DistanceFieldEffectFlag, 38 kBGR_DistanceFieldEffectFlag,
37 }; 39 };
38 40
39 /** 41 /**
40 * 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
41 * distance field texture (using a smoothed step function near 0.5). 43 * distance field texture (using a smoothed step function near 0.5).
(...skipping 13 matching lines...) Expand all
55 static GrGeometryProcessor* Create(GrTexture* tex, const GrTextureParams& pa rams, 57 static GrGeometryProcessor* Create(GrTexture* tex, const GrTextureParams& pa rams,
56 uint32_t flags) { 58 uint32_t flags) {
57 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, flags)); 59 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, flags));
58 } 60 }
59 #endif 61 #endif
60 62
61 virtual ~GrDistanceFieldTextureEffect() {} 63 virtual ~GrDistanceFieldTextureEffect() {}
62 64
63 static const char* Name() { return "DistanceFieldTexture"; } 65 static const char* Name() { return "DistanceFieldTexture"; }
64 66
65 const GrShaderVar& inTextureCoords() const { return fInTextureCoords; } 67 const GrAttribute* inPosition() const { return fInPosition; }
68 const GrAttribute* inColor() const { return fInColor; }
69 const GrAttribute* inTextureCoords() const { return fInTextureCoords; }
66 #ifdef SK_GAMMA_APPLY_TO_A8 70 #ifdef SK_GAMMA_APPLY_TO_A8
67 float getLuminance() const { return fLuminance; } 71 float getLuminance() const { return fLuminance; }
68 #endif 72 #endif
69 uint32_t getFlags() const { return fFlags; } 73 uint32_t getFlags() const { return fFlags; }
70 74
71 typedef GrGLDistanceFieldTextureEffect GLProcessor; 75 typedef GrGLDistanceFieldTextureEffect GLProcessor;
72 76
73 virtual const GrBackendGeometryProcessorFactory& getFactory() const SK_OVERR IDE; 77 virtual const GrBackendGeometryProcessorFactory& getFactory() const SK_OVERR IDE;
74 78
75 private: 79 private:
76 GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& para ms, 80 GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& para ms,
77 #ifdef SK_GAMMA_APPLY_TO_A8 81 #ifdef SK_GAMMA_APPLY_TO_A8
78 GrTexture* gamma, const GrTextureParams& gammaP arams, float lum, 82 GrTexture* gamma, const GrTextureParams& gammaP arams, float lum,
79 #endif 83 #endif
80 uint32_t flags); 84 uint32_t flags);
81 85
82 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; 86 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
83 87
84 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE; 88 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE;
85 89
86 GrTextureAccess fTextureAccess; 90 GrTextureAccess fTextureAccess;
87 #ifdef SK_GAMMA_APPLY_TO_A8 91 #ifdef SK_GAMMA_APPLY_TO_A8
88 GrTextureAccess fGammaTextureAccess; 92 GrTextureAccess fGammaTextureAccess;
89 float fLuminance; 93 float fLuminance;
90 #endif 94 #endif
91 uint32_t fFlags; 95 uint32_t fFlags;
92 const GrShaderVar& fInTextureCoords; 96 const GrAttribute* fInPosition;
97 const GrAttribute* fInColor;
98 const GrAttribute* fInTextureCoords;
93 99
94 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 100 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
95 101
96 typedef GrGeometryProcessor INHERITED; 102 typedef GrGeometryProcessor INHERITED;
97 }; 103 };
98 104
99 105
100 /** 106 /**
101 * The output color of this effect is a modulation of the input color and a sampl e from a 107 * The output color of this effect is a modulation of the input color and a sampl e from a
102 * distance field texture (using a smoothed step function near 0.5). 108 * distance field texture (using a smoothed step function near 0.5).
103 * It allows explicit specification of the filtering and wrap modes (GrTexturePar ams). The input 109 * It allows explicit specification of the filtering and wrap modes (GrTexturePar ams). The input
104 * coords are a custom attribute. No gamma correct blending is applied. 110 * coords are a custom attribute. No gamma correct blending is applied.
105 */ 111 */
106 class GrDistanceFieldNoGammaTextureEffect : public GrGeometryProcessor { 112 class GrDistanceFieldNoGammaTextureEffect : public GrGeometryProcessor {
107 public: 113 public:
108 static GrGeometryProcessor* Create(GrTexture* tex, const GrTextureParams& pa rams, 114 static GrGeometryProcessor* Create(GrTexture* tex, const GrTextureParams& pa rams,
109 uint32_t flags) { 115 uint32_t flags) {
110 return SkNEW_ARGS(GrDistanceFieldNoGammaTextureEffect, (tex, params, fla gs)); 116 return SkNEW_ARGS(GrDistanceFieldNoGammaTextureEffect, (tex, params, fla gs));
111 } 117 }
112 118
113 virtual ~GrDistanceFieldNoGammaTextureEffect() {} 119 virtual ~GrDistanceFieldNoGammaTextureEffect() {}
114 120
115 static const char* Name() { return "DistanceFieldTexture"; } 121 static const char* Name() { return "DistanceFieldTexture"; }
116 122
117 const GrShaderVar& inTextureCoords() const { return fInTextureCoords; } 123 const GrAttribute* inPosition() const { return fInPosition; }
124 const GrAttribute* inColor() const { return fInColor; }
125 const GrAttribute* inTextureCoords() const { return fInTextureCoords; }
118 uint32_t getFlags() const { return fFlags; } 126 uint32_t getFlags() const { return fFlags; }
119 127
120 typedef GrGLDistanceFieldNoGammaTextureEffect GLProcessor; 128 typedef GrGLDistanceFieldNoGammaTextureEffect GLProcessor;
121 129
122 virtual const GrBackendGeometryProcessorFactory& getFactory() const SK_OVERR IDE; 130 virtual const GrBackendGeometryProcessorFactory& getFactory() const SK_OVERR IDE;
123 131
124 private: 132 private:
125 GrDistanceFieldNoGammaTextureEffect(GrTexture* texture, const GrTextureParam s& params, 133 GrDistanceFieldNoGammaTextureEffect(GrTexture* texture, const GrTextureParam s& params,
126 uint32_t flags); 134 uint32_t flags);
127 135
128 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; 136 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
129 137
130 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE; 138 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE;
131 139
132 GrTextureAccess fTextureAccess; 140 GrTextureAccess fTextureAccess;
133 uint32_t fFlags; 141 uint32_t fFlags;
134 const GrShaderVar& fInTextureCoords; 142 const GrAttribute* fInPosition;
143 const GrAttribute* fInColor;
144 const GrAttribute* fInTextureCoords;
135 145
136 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 146 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
137 147
138 typedef GrGeometryProcessor INHERITED; 148 typedef GrGeometryProcessor INHERITED;
139 }; 149 };
140 150
141 /** 151 /**
142 * The output color of this effect is a modulation of the input color and sample s from a 152 * The output color of this effect is a modulation of the input color and sample s from a
143 * distance field texture (using a smoothed step function near 0.5), adjusted fo r LCD displays. 153 * distance field texture (using a smoothed step function near 0.5), adjusted fo r LCD displays.
144 * It allows explicit specification of the filtering and wrap modes (GrTexturePa rams). The input 154 * It allows explicit specification of the filtering and wrap modes (GrTexturePa rams). The input
145 * coords are a custom attribute. Gamma correction is handled via a texture LUT. 155 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
146 */ 156 */
147 class GrDistanceFieldLCDTextureEffect : public GrGeometryProcessor { 157 class GrDistanceFieldLCDTextureEffect : public GrGeometryProcessor {
148 public: 158 public:
149 static GrGeometryProcessor* Create(GrTexture* tex, const GrTextureParams& pa rams, 159 static GrGeometryProcessor* Create(GrTexture* tex, const GrTextureParams& pa rams,
150 GrTexture* gamma, const GrTextureParams& gammaParams, 160 GrTexture* gamma, const GrTextureParams& gammaParams,
151 SkColor textColor, uint32_t flags) { 161 SkColor textColor, uint32_t flags) {
152 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, 162 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect,
153 (tex, params, gamma, gammaParams, textColor, flags)); 163 (tex, params, gamma, gammaParams, textColor, flags));
154 } 164 }
155 165
156 virtual ~GrDistanceFieldLCDTextureEffect() {} 166 virtual ~GrDistanceFieldLCDTextureEffect() {}
157 167
158 static const char* Name() { return "DistanceFieldLCDTexture"; } 168 static const char* Name() { return "DistanceFieldLCDTexture"; }
159 169
160 const GrShaderVar& inTextureCoords() const { return fInTextureCoords; } 170 const GrAttribute* inPosition() const { return fInPosition; }
171 const GrAttribute* inTextureCoords() const { return fInTextureCoords; }
161 GrColor getTextColor() const { return fTextColor; } 172 GrColor getTextColor() const { return fTextColor; }
162 uint32_t getFlags() const { return fFlags; } 173 uint32_t getFlags() const { return fFlags; }
163 174
164 typedef GrGLDistanceFieldLCDTextureEffect GLProcessor; 175 typedef GrGLDistanceFieldLCDTextureEffect GLProcessor;
165 176
166 virtual const GrBackendGeometryProcessorFactory& getFactory() const SK_OVERR IDE; 177 virtual const GrBackendGeometryProcessorFactory& getFactory() const SK_OVERR IDE;
167 178
168 private: 179 private:
169 GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& p arams, 180 GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& p arams,
170 GrTexture* gamma, const GrTextureParams& gam maParams, 181 GrTexture* gamma, const GrTextureParams& gam maParams,
171 SkColor textColor, 182 SkColor textColor,
172 uint32_t flags); 183 uint32_t flags);
173 184
174 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; 185 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
175 186
176 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE; 187 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE;
177 188
178 GrTextureAccess fTextureAccess; 189 GrTextureAccess fTextureAccess;
179 GrTextureAccess fGammaTextureAccess; 190 GrTextureAccess fGammaTextureAccess;
180 GrColor fTextColor; 191 GrColor fTextColor;
181 uint32_t fFlags; 192 uint32_t fFlags;
182 const GrShaderVar& fInTextureCoords; 193 const GrAttribute* fInPosition;
194 const GrAttribute* fInTextureCoords;
183 195
184 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 196 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
185 197
186 typedef GrGeometryProcessor INHERITED; 198 typedef GrGeometryProcessor INHERITED;
187 }; 199 };
188 200
189 #endif 201 #endif
OLDNEW
« no previous file with comments | « src/gpu/effects/GrDashingEffect.cpp ('k') | src/gpu/effects/GrDistanceFieldTextureEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698