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

Side by Side Diff: src/gpu/effects/GrBezierEffect.cpp

Issue 25474006: Move VertexBuilder to a GrGLFullShaderBuilder subclass (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « src/gpu/GrOvalRenderer.cpp ('k') | src/gpu/effects/GrCustomCoordsTextureEffect.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 #include "GrBezierEffect.h" 8 #include "GrBezierEffect.h"
9 9
10 #include "gl/GrGLEffect.h" 10 #include "gl/GrGLEffect.h"
11 #include "gl/GrGLSL.h" 11 #include "gl/GrGLSL.h"
12 #include "gl/GrGLVertexEffect.h"
12 #include "GrTBackendEffectFactory.h" 13 #include "GrTBackendEffectFactory.h"
13 14
14 class GrGLConicEffect : public GrGLEffect { 15 class GrGLConicEffect : public GrGLVertexEffect {
15 public: 16 public:
16 GrGLConicEffect(const GrBackendEffectFactory&, const GrDrawEffect&); 17 GrGLConicEffect(const GrBackendEffectFactory&, const GrDrawEffect&);
17 18
18 virtual void emitCode(GrGLShaderBuilder* builder, 19 virtual void emitCode(GrGLFullShaderBuilder* builder,
19 const GrDrawEffect& drawEffect, 20 const GrDrawEffect& drawEffect,
20 EffectKey key, 21 EffectKey key,
21 const char* outputColor, 22 const char* outputColor,
22 const char* inputColor, 23 const char* inputColor,
23 const TransformedCoordsArray&, 24 const TransformedCoordsArray&,
24 const TextureSamplerArray&) SK_OVERRIDE; 25 const TextureSamplerArray&) SK_OVERRIDE;
25 26
26 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); 27 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&);
27 28
28 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER RIDE {} 29 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER RIDE {}
29 30
30 private: 31 private:
31 GrBezierEdgeType fEdgeType; 32 GrBezierEdgeType fEdgeType;
32 33
33 typedef GrGLEffect INHERITED; 34 typedef GrGLVertexEffect INHERITED;
34 }; 35 };
35 36
36 GrGLConicEffect::GrGLConicEffect(const GrBackendEffectFactory& factory, 37 GrGLConicEffect::GrGLConicEffect(const GrBackendEffectFactory& factory,
37 const GrDrawEffect& drawEffect) 38 const GrDrawEffect& drawEffect)
38 : INHERITED (factory) { 39 : INHERITED (factory) {
39 const GrConicEffect& ce = drawEffect.castEffect<GrConicEffect>(); 40 const GrConicEffect& ce = drawEffect.castEffect<GrConicEffect>();
40 fEdgeType = ce.getEdgeType(); 41 fEdgeType = ce.getEdgeType();
41 } 42 }
42 43
43 void GrGLConicEffect::emitCode(GrGLShaderBuilder* builder, 44 void GrGLConicEffect::emitCode(GrGLFullShaderBuilder* builder,
44 const GrDrawEffect& drawEffect, 45 const GrDrawEffect& drawEffect,
45 EffectKey key, 46 EffectKey key,
46 const char* outputColor, 47 const char* outputColor,
47 const char* inputColor, 48 const char* inputColor,
48 const TransformedCoordsArray&, 49 const TransformedCoordsArray&,
49 const TextureSamplerArray& samplers) { 50 const TextureSamplerArray& samplers) {
50 GrGLShaderBuilder::VertexBuilder* vertexBuilder = builder->getVertexBuilder( );
51 SkASSERT(NULL != vertexBuilder);
52
53 const char *vsName, *fsName; 51 const char *vsName, *fsName;
54 52
55 vertexBuilder->addVarying(kVec4f_GrSLType, "ConicCoeffs", 53 builder->addVarying(kVec4f_GrSLType, "ConicCoeffs",
56 &vsName, &fsName); 54 &vsName, &fsName);
57 const SkString* attr0Name = 55 const SkString* attr0Name =
58 vertexBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices( )[0]); 56 builder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0]);
59 vertexBuilder->vsCodeAppendf("\t%s = %s;\n", vsName, attr0Name->c_str()); 57 builder->vsCodeAppendf("\t%s = %s;\n", vsName, attr0Name->c_str());
60 58
61 builder->fsCodeAppend("\t\tfloat edgeAlpha;\n"); 59 builder->fsCodeAppend("\t\tfloat edgeAlpha;\n");
62 60
63 switch (fEdgeType) { 61 switch (fEdgeType) {
64 case kHairAA_GrBezierEdgeType: { 62 case kHairAA_GrBezierEdgeType: {
65 SkAssertResult(builder->enableFeature( 63 SkAssertResult(builder->enableFeature(
66 GrGLShaderBuilder::kStandardDerivatives_GLSLFeature)); 64 GrGLShaderBuilder::kStandardDerivatives_GLSLFeature));
67 builder->fsCodeAppendf("\t\tvec3 dklmdx = dFdx(%s.xyz);\n", fsName); 65 builder->fsCodeAppendf("\t\tvec3 dklmdx = dFdx(%s.xyz);\n", fsName);
68 builder->fsCodeAppendf("\t\tvec3 dklmdy = dFdy(%s.xyz);\n", fsName); 66 builder->fsCodeAppendf("\t\tvec3 dklmdy = dFdy(%s.xyz);\n", fsName);
69 builder->fsCodeAppendf("\t\tfloat dfdx =\n" 67 builder->fsCodeAppendf("\t\tfloat dfdx =\n"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 const GrDrawTargetCaps& caps, 147 const GrDrawTargetCaps& caps,
150 GrTexture*[]) { 148 GrTexture*[]) {
151 const GrBezierEdgeType edgeType = static_cast<GrBezierEdgeType>(random->next ULessThan(3)); 149 const GrBezierEdgeType edgeType = static_cast<GrBezierEdgeType>(random->next ULessThan(3));
152 return GrConicEffect::Create(edgeType, caps); 150 return GrConicEffect::Create(edgeType, caps);
153 } 151 }
154 152
155 ////////////////////////////////////////////////////////////////////////////// 153 //////////////////////////////////////////////////////////////////////////////
156 // Quad 154 // Quad
157 ////////////////////////////////////////////////////////////////////////////// 155 //////////////////////////////////////////////////////////////////////////////
158 156
159 class GrGLQuadEffect : public GrGLEffect { 157 class GrGLQuadEffect : public GrGLVertexEffect {
160 public: 158 public:
161 GrGLQuadEffect(const GrBackendEffectFactory&, const GrDrawEffect&); 159 GrGLQuadEffect(const GrBackendEffectFactory&, const GrDrawEffect&);
162 160
163 virtual void emitCode(GrGLShaderBuilder* builder, 161 virtual void emitCode(GrGLFullShaderBuilder* builder,
164 const GrDrawEffect& drawEffect, 162 const GrDrawEffect& drawEffect,
165 EffectKey key, 163 EffectKey key,
166 const char* outputColor, 164 const char* outputColor,
167 const char* inputColor, 165 const char* inputColor,
168 const TransformedCoordsArray&, 166 const TransformedCoordsArray&,
169 const TextureSamplerArray&) SK_OVERRIDE; 167 const TextureSamplerArray&) SK_OVERRIDE;
170 168
171 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); 169 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&);
172 170
173 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER RIDE {} 171 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER RIDE {}
174 172
175 private: 173 private:
176 GrBezierEdgeType fEdgeType; 174 GrBezierEdgeType fEdgeType;
177 175
178 typedef GrGLEffect INHERITED; 176 typedef GrGLVertexEffect INHERITED;
179 }; 177 };
180 178
181 GrGLQuadEffect::GrGLQuadEffect(const GrBackendEffectFactory& factory, 179 GrGLQuadEffect::GrGLQuadEffect(const GrBackendEffectFactory& factory,
182 const GrDrawEffect& drawEffect) 180 const GrDrawEffect& drawEffect)
183 : INHERITED (factory) { 181 : INHERITED (factory) {
184 const GrQuadEffect& ce = drawEffect.castEffect<GrQuadEffect>(); 182 const GrQuadEffect& ce = drawEffect.castEffect<GrQuadEffect>();
185 fEdgeType = ce.getEdgeType(); 183 fEdgeType = ce.getEdgeType();
186 } 184 }
187 185
188 void GrGLQuadEffect::emitCode(GrGLShaderBuilder* builder, 186 void GrGLQuadEffect::emitCode(GrGLFullShaderBuilder* builder,
189 const GrDrawEffect& drawEffect, 187 const GrDrawEffect& drawEffect,
190 EffectKey key, 188 EffectKey key,
191 const char* outputColor, 189 const char* outputColor,
192 const char* inputColor, 190 const char* inputColor,
193 const TransformedCoordsArray&, 191 const TransformedCoordsArray&,
194 const TextureSamplerArray& samplers) { 192 const TextureSamplerArray& samplers) {
195 GrGLShaderBuilder::VertexBuilder* vertexBuilder = builder->getVertexBuilder( );
196 SkASSERT(NULL != vertexBuilder);
197
198 const char *vsName, *fsName; 193 const char *vsName, *fsName;
199 194
200 const SkString* attrName = 195 const SkString* attrName =
201 vertexBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices( )[0]); 196 builder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0]);
202 builder->fsCodeAppendf("\t\tfloat edgeAlpha;\n"); 197 builder->fsCodeAppendf("\t\tfloat edgeAlpha;\n");
203 198
204 vertexBuilder->addVarying(kVec4f_GrSLType, "HairQuadEdge", &vsName, &fsName) ; 199 builder->addVarying(kVec4f_GrSLType, "HairQuadEdge", &vsName, &fsName);
205 200
206 switch (fEdgeType) { 201 switch (fEdgeType) {
207 case kHairAA_GrBezierEdgeType: { 202 case kHairAA_GrBezierEdgeType: {
208 SkAssertResult(builder->enableFeature( 203 SkAssertResult(builder->enableFeature(
209 GrGLShaderBuilder::kStandardDerivatives_GLSLFeature)); 204 GrGLShaderBuilder::kStandardDerivatives_GLSLFeature));
210 builder->fsCodeAppendf("\t\tvec2 duvdx = dFdx(%s.xy);\n", fsName); 205 builder->fsCodeAppendf("\t\tvec2 duvdx = dFdx(%s.xy);\n", fsName);
211 builder->fsCodeAppendf("\t\tvec2 duvdy = dFdy(%s.xy);\n", fsName); 206 builder->fsCodeAppendf("\t\tvec2 duvdy = dFdy(%s.xy);\n", fsName);
212 builder->fsCodeAppendf("\t\tvec2 gF = vec2(2.0*%s.x*duvdx.x - duvdx. y,\n" 207 builder->fsCodeAppendf("\t\tvec2 gF = vec2(2.0*%s.x*duvdx.x - duvdx. y,\n"
213 "\t\t 2.0*%s.x*duvdy.x - duvdy. y);\n", 208 "\t\t 2.0*%s.x*duvdy.x - duvdy. y);\n",
214 fsName, fsName); 209 fsName, fsName);
(...skipping 26 matching lines...) Expand all
241 fsName); 236 fsName);
242 builder->fsCodeAppend("\t\tedgeAlpha = float(edgeAlpha < 0.0);\n"); 237 builder->fsCodeAppend("\t\tedgeAlpha = float(edgeAlpha < 0.0);\n");
243 break; 238 break;
244 } 239 }
245 } 240 }
246 241
247 SkString modulate; 242 SkString modulate;
248 GrGLSLModulatef<4>(&modulate, inputColor, "edgeAlpha"); 243 GrGLSLModulatef<4>(&modulate, inputColor, "edgeAlpha");
249 builder->fsCodeAppendf("\t%s = %s;\n", outputColor, modulate.c_str()); 244 builder->fsCodeAppendf("\t%s = %s;\n", outputColor, modulate.c_str());
250 245
251 vertexBuilder->vsCodeAppendf("\t%s = %s;\n", vsName, attrName->c_str()); 246 builder->vsCodeAppendf("\t%s = %s;\n", vsName, attrName->c_str());
252 } 247 }
253 248
254 GrGLEffect::EffectKey GrGLQuadEffect::GenKey(const GrDrawEffect& drawEffect, con st GrGLCaps&) { 249 GrGLEffect::EffectKey GrGLQuadEffect::GenKey(const GrDrawEffect& drawEffect, con st GrGLCaps&) {
255 const GrQuadEffect& ce = drawEffect.castEffect<GrQuadEffect>(); 250 const GrQuadEffect& ce = drawEffect.castEffect<GrQuadEffect>();
256 return ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; 251 return ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2;
257 } 252 }
258 253
259 ////////////////////////////////////////////////////////////////////////////// 254 //////////////////////////////////////////////////////////////////////////////
260 255
261 GrQuadEffect::~GrQuadEffect() {} 256 GrQuadEffect::~GrQuadEffect() {}
(...skipping 21 matching lines...) Expand all
283 const GrDrawTargetCaps& caps, 278 const GrDrawTargetCaps& caps,
284 GrTexture*[]) { 279 GrTexture*[]) {
285 const GrBezierEdgeType edgeType = static_cast<GrBezierEdgeType>(random->next ULessThan(3)); 280 const GrBezierEdgeType edgeType = static_cast<GrBezierEdgeType>(random->next ULessThan(3));
286 return GrQuadEffect::Create(edgeType, caps); 281 return GrQuadEffect::Create(edgeType, caps);
287 } 282 }
288 283
289 ////////////////////////////////////////////////////////////////////////////// 284 //////////////////////////////////////////////////////////////////////////////
290 // Cubic 285 // Cubic
291 ////////////////////////////////////////////////////////////////////////////// 286 //////////////////////////////////////////////////////////////////////////////
292 287
293 class GrGLCubicEffect : public GrGLEffect { 288 class GrGLCubicEffect : public GrGLVertexEffect {
294 public: 289 public:
295 GrGLCubicEffect(const GrBackendEffectFactory&, const GrDrawEffect&); 290 GrGLCubicEffect(const GrBackendEffectFactory&, const GrDrawEffect&);
296 291
297 virtual void emitCode(GrGLShaderBuilder* builder, 292 virtual void emitCode(GrGLFullShaderBuilder* builder,
298 const GrDrawEffect& drawEffect, 293 const GrDrawEffect& drawEffect,
299 EffectKey key, 294 EffectKey key,
300 const char* outputColor, 295 const char* outputColor,
301 const char* inputColor, 296 const char* inputColor,
302 const TransformedCoordsArray&, 297 const TransformedCoordsArray&,
303 const TextureSamplerArray&) SK_OVERRIDE; 298 const TextureSamplerArray&) SK_OVERRIDE;
304 299
305 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); 300 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&);
306 301
307 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER RIDE {} 302 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER RIDE {}
308 303
309 private: 304 private:
310 GrBezierEdgeType fEdgeType; 305 GrBezierEdgeType fEdgeType;
311 306
312 typedef GrGLEffect INHERITED; 307 typedef GrGLVertexEffect INHERITED;
313 }; 308 };
314 309
315 GrGLCubicEffect::GrGLCubicEffect(const GrBackendEffectFactory& factory, 310 GrGLCubicEffect::GrGLCubicEffect(const GrBackendEffectFactory& factory,
316 const GrDrawEffect& drawEffect) 311 const GrDrawEffect& drawEffect)
317 : INHERITED (factory) { 312 : INHERITED (factory) {
318 const GrCubicEffect& ce = drawEffect.castEffect<GrCubicEffect>(); 313 const GrCubicEffect& ce = drawEffect.castEffect<GrCubicEffect>();
319 fEdgeType = ce.getEdgeType(); 314 fEdgeType = ce.getEdgeType();
320 } 315 }
321 316
322 void GrGLCubicEffect::emitCode(GrGLShaderBuilder* builder, 317 void GrGLCubicEffect::emitCode(GrGLFullShaderBuilder* builder,
323 const GrDrawEffect& drawEffect, 318 const GrDrawEffect& drawEffect,
324 EffectKey key, 319 EffectKey key,
325 const char* outputColor, 320 const char* outputColor,
326 const char* inputColor, 321 const char* inputColor,
327 const TransformedCoordsArray&, 322 const TransformedCoordsArray&,
328 const TextureSamplerArray& samplers) { 323 const TextureSamplerArray& samplers) {
329 GrGLShaderBuilder::VertexBuilder* vertexBuilder = builder->getVertexBuilder( );
330 SkASSERT(NULL != vertexBuilder);
331
332 const char *vsName, *fsName; 324 const char *vsName, *fsName;
333 325
334 vertexBuilder->addVarying(kVec4f_GrSLType, "CubicCoeffs", 326 builder->addVarying(kVec4f_GrSLType, "CubicCoeffs",
335 &vsName, &fsName); 327 &vsName, &fsName);
336 const SkString* attr0Name = 328 const SkString* attr0Name =
337 vertexBuilder->getEffectAttributeName(drawEffect.getVertexAttribIndices( )[0]); 329 builder->getEffectAttributeName(drawEffect.getVertexAttribIndices()[0]);
338 vertexBuilder->vsCodeAppendf("\t%s = %s;\n", vsName, attr0Name->c_str()); 330 builder->vsCodeAppendf("\t%s = %s;\n", vsName, attr0Name->c_str());
339 331
340 builder->fsCodeAppend("\t\tfloat edgeAlpha;\n"); 332 builder->fsCodeAppend("\t\tfloat edgeAlpha;\n");
341 333
342 switch (fEdgeType) { 334 switch (fEdgeType) {
343 case kHairAA_GrBezierEdgeType: { 335 case kHairAA_GrBezierEdgeType: {
344 SkAssertResult(builder->enableFeature( 336 SkAssertResult(builder->enableFeature(
345 GrGLShaderBuilder::kStandardDerivatives_GLSLFeature)); 337 GrGLShaderBuilder::kStandardDerivatives_GLSLFeature));
346 builder->fsCodeAppendf("\t\tvec3 dklmdx = dFdx(%s.xyz);\n", fsName); 338 builder->fsCodeAppendf("\t\tvec3 dklmdx = dFdx(%s.xyz);\n", fsName);
347 builder->fsCodeAppendf("\t\tvec3 dklmdy = dFdy(%s.xyz);\n", fsName); 339 builder->fsCodeAppendf("\t\tvec3 dklmdy = dFdy(%s.xyz);\n", fsName);
348 builder->fsCodeAppendf("\t\tfloat dfdx =\n" 340 builder->fsCodeAppendf("\t\tfloat dfdx =\n"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 415
424 GR_DEFINE_EFFECT_TEST(GrCubicEffect); 416 GR_DEFINE_EFFECT_TEST(GrCubicEffect);
425 417
426 GrEffectRef* GrCubicEffect::TestCreate(SkRandom* random, 418 GrEffectRef* GrCubicEffect::TestCreate(SkRandom* random,
427 GrContext*, 419 GrContext*,
428 const GrDrawTargetCaps& caps, 420 const GrDrawTargetCaps& caps,
429 GrTexture*[]) { 421 GrTexture*[]) {
430 const GrBezierEdgeType edgeType = static_cast<GrBezierEdgeType>(random->next ULessThan(3)); 422 const GrBezierEdgeType edgeType = static_cast<GrBezierEdgeType>(random->next ULessThan(3));
431 return GrCubicEffect::Create(edgeType, caps); 423 return GrCubicEffect::Create(edgeType, caps);
432 } 424 }
OLDNEW
« no previous file with comments | « src/gpu/GrOvalRenderer.cpp ('k') | src/gpu/effects/GrCustomCoordsTextureEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698