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

Side by Side Diff: src/gpu/GrOvalRenderer.cpp

Issue 571163002: removing GrDrawEffect (Closed) Base URL: https://skia.googlesource.com/skia.git@gp3
Patch Set: rebase after revert Created 6 years, 3 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
« no previous file with comments | « src/gpu/GrAARectRenderer.cpp ('k') | src/gpu/effects/GrBezierEffect.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 "gl/builders/GrGLProgramBuilder.h" 8 #include "gl/builders/GrGLProgramBuilder.h"
9 #include "GrOvalRenderer.h" 9 #include "GrOvalRenderer.h"
10 10
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 87 }
88 88
89 virtual ~CircleEdgeEffect() {} 89 virtual ~CircleEdgeEffect() {}
90 90
91 static const char* Name() { return "CircleEdge"; } 91 static const char* Name() { return "CircleEdge"; }
92 92
93 inline bool isStroked() const { return fStroke; } 93 inline bool isStroked() const { return fStroke; }
94 94
95 class GLEffect : public GrGLGeometryProcessor { 95 class GLEffect : public GrGLGeometryProcessor {
96 public: 96 public:
97 GLEffect(const GrBackendEffectFactory& factory, const GrDrawEffect&) 97 GLEffect(const GrBackendEffectFactory& factory, const GrEffect&)
98 : INHERITED (factory) {} 98 : INHERITED (factory) {}
99 99
100 virtual void emitCode(GrGLFullProgramBuilder* builder, 100 virtual void emitCode(GrGLFullProgramBuilder* builder,
101 const GrDrawEffect& drawEffect, 101 const GrEffect& effect,
102 const GrEffectKey& key, 102 const GrEffectKey& key,
103 const char* outputColor, 103 const char* outputColor,
104 const char* inputColor, 104 const char* inputColor,
105 const TransformedCoordsArray&, 105 const TransformedCoordsArray&,
106 const TextureSamplerArray& samplers) SK_OVERRIDE { 106 const TextureSamplerArray& samplers) SK_OVERRIDE {
107 const CircleEdgeEffect& circleEffect = drawEffect.castEffect<CircleE dgeEffect>(); 107 const CircleEdgeEffect& circleEffect = effect.cast<CircleEdgeEffect> ();
108 const char *vsName, *fsName; 108 const char *vsName, *fsName;
109 builder->addVarying(kVec4f_GrSLType, "CircleEdge", &vsName, &fsName) ; 109 builder->addVarying(kVec4f_GrSLType, "CircleEdge", &vsName, &fsName) ;
110 110
111 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder ();; 111 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder ();;
112 vsBuilder->codeAppendf("\t%s = %s;\n", vsName, circleEffect.inCircle Edge().c_str()); 112 vsBuilder->codeAppendf("\t%s = %s;\n", vsName, circleEffect.inCircle Edge().c_str());
113 113
114 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBui lder(); 114 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBui lder();
115 fsBuilder->codeAppendf("\tfloat d = length(%s.xy);\n", fsName); 115 fsBuilder->codeAppendf("\tfloat d = length(%s.xy);\n", fsName);
116 fsBuilder->codeAppendf("\tfloat edgeAlpha = clamp(%s.z - d, 0.0, 1.0 );\n", fsName); 116 fsBuilder->codeAppendf("\tfloat edgeAlpha = clamp(%s.z - d, 0.0, 1.0 );\n", fsName);
117 if (circleEffect.isStroked()) { 117 if (circleEffect.isStroked()) {
118 fsBuilder->codeAppendf("\tfloat innerAlpha = clamp(d - %s.w, 0.0 , 1.0);\n", fsName); 118 fsBuilder->codeAppendf("\tfloat innerAlpha = clamp(d - %s.w, 0.0 , 1.0);\n", fsName);
119 fsBuilder->codeAppend("\tedgeAlpha *= innerAlpha;\n"); 119 fsBuilder->codeAppend("\tedgeAlpha *= innerAlpha;\n");
120 } 120 }
121 121
122 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor, 122 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor,
123 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeA lpha")).c_str()); 123 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeA lpha")).c_str());
124 } 124 }
125 125
126 static void GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, 126 static void GenKey(const GrEffect& effect, const GrGLCaps&,
127 GrEffectKeyBuilder* b) { 127 GrEffectKeyBuilder* b) {
128 const CircleEdgeEffect& circleEffect = drawEffect.castEffect<CircleE dgeEffect>(); 128 const CircleEdgeEffect& circleEffect = effect.cast<CircleEdgeEffect> ();
129 b->add32(circleEffect.isStroked()); 129 b->add32(circleEffect.isStroked());
130 } 130 }
131 131
132 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_OVERRIDE {} 132 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_ OVERRIDE {}
133 133
134 private: 134 private:
135 typedef GrGLGeometryProcessor INHERITED; 135 typedef GrGLGeometryProcessor INHERITED;
136 }; 136 };
137 137
138 138
139 private: 139 private:
140 CircleEdgeEffect(bool stroke) 140 CircleEdgeEffect(bool stroke)
141 : fInCircleEdge(this->addVertexAttrib( 141 : fInCircleEdge(this->addVertexAttrib(
142 GrShaderVar("inCircleEdge", 142 GrShaderVar("inCircleEdge",
143 kVec4f_GrSLType, 143 kVec4f_GrSLType,
144 GrShaderVar::kAttribute_TypeModifier))) { 144 GrShaderVar::kAttribute_TypeModifier))) {
145 fStroke = stroke; 145 fStroke = stroke;
146 } 146 }
147 147
148 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { 148 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE {
149 const CircleEdgeEffect& cee = CastEffect<CircleEdgeEffect>(other); 149 const CircleEdgeEffect& cee = other.cast<CircleEdgeEffect>();
150 return cee.fStroke == fStroke; 150 return cee.fStroke == fStroke;
151 } 151 }
152 152
153 const GrShaderVar& fInCircleEdge; 153 const GrShaderVar& fInCircleEdge;
154 bool fStroke; 154 bool fStroke;
155 155
156 GR_DECLARE_EFFECT_TEST; 156 GR_DECLARE_EFFECT_TEST;
157 157
158 typedef GrGeometryProcessor INHERITED; 158 typedef GrGeometryProcessor INHERITED;
159 }; 159 };
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 205
206 static const char* Name() { return "EllipseEdge"; } 206 static const char* Name() { return "EllipseEdge"; }
207 207
208 const GrShaderVar& inEllipseOffset() const { return fInEllipseOffset; } 208 const GrShaderVar& inEllipseOffset() const { return fInEllipseOffset; }
209 const GrShaderVar& inEllipseRadii() const { return fInEllipseRadii; } 209 const GrShaderVar& inEllipseRadii() const { return fInEllipseRadii; }
210 210
211 inline bool isStroked() const { return fStroke; } 211 inline bool isStroked() const { return fStroke; }
212 212
213 class GLEffect : public GrGLGeometryProcessor { 213 class GLEffect : public GrGLGeometryProcessor {
214 public: 214 public:
215 GLEffect(const GrBackendEffectFactory& factory, const GrDrawEffect&) 215 GLEffect(const GrBackendEffectFactory& factory, const GrEffect&)
216 : INHERITED (factory) {} 216 : INHERITED (factory) {}
217 217
218 virtual void emitCode(GrGLFullProgramBuilder* builder, 218 virtual void emitCode(GrGLFullProgramBuilder* builder,
219 const GrDrawEffect& drawEffect, 219 const GrEffect& effect,
220 const GrEffectKey& key, 220 const GrEffectKey& key,
221 const char* outputColor, 221 const char* outputColor,
222 const char* inputColor, 222 const char* inputColor,
223 const TransformedCoordsArray&, 223 const TransformedCoordsArray&,
224 const TextureSamplerArray& samplers) SK_OVERRIDE { 224 const TextureSamplerArray& samplers) SK_OVERRIDE {
225 const EllipseEdgeEffect& ellipseEffect = drawEffect.castEffect<Ellip seEdgeEffect>(); 225 const EllipseEdgeEffect& ellipseEffect = effect.cast<EllipseEdgeEffe ct>();
226 226
227 const char *vsOffsetName, *fsOffsetName; 227 const char *vsOffsetName, *fsOffsetName;
228 const char *vsRadiiName, *fsRadiiName; 228 const char *vsRadiiName, *fsRadiiName;
229 229
230 builder->addVarying(kVec2f_GrSLType, "EllipseOffsets", &vsOffsetName , &fsOffsetName); 230 builder->addVarying(kVec2f_GrSLType, "EllipseOffsets", &vsOffsetName , &fsOffsetName);
231 231
232 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder (); 232 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder ();
233 vsBuilder->codeAppendf("%s = %s;", vsOffsetName, 233 vsBuilder->codeAppendf("%s = %s;", vsOffsetName,
234 ellipseEffect.inEllipseOffset().c_str()); 234 ellipseEffect.inEllipseOffset().c_str());
235 235
(...skipping 17 matching lines...) Expand all
253 fsBuilder->codeAppend("\ttest = dot(scaledOffset, scaledOffset) - 1.0;\n"); 253 fsBuilder->codeAppend("\ttest = dot(scaledOffset, scaledOffset) - 1.0;\n");
254 fsBuilder->codeAppendf("\tgrad = 2.0*scaledOffset*%s.zw;\n", fsR adiiName); 254 fsBuilder->codeAppendf("\tgrad = 2.0*scaledOffset*%s.zw;\n", fsR adiiName);
255 fsBuilder->codeAppend("\tinvlen = inversesqrt(dot(grad, grad));\ n"); 255 fsBuilder->codeAppend("\tinvlen = inversesqrt(dot(grad, grad));\ n");
256 fsBuilder->codeAppend("\tedgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);\n"); 256 fsBuilder->codeAppend("\tedgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);\n");
257 } 257 }
258 258
259 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor, 259 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor,
260 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeA lpha")).c_str()); 260 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeA lpha")).c_str());
261 } 261 }
262 262
263 static void GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, 263 static void GenKey(const GrEffect& effect, const GrGLCaps&,
264 GrEffectKeyBuilder* b) { 264 GrEffectKeyBuilder* b) {
265 const EllipseEdgeEffect& ellipseEffect = drawEffect.castEffect<Ellip seEdgeEffect>(); 265 const EllipseEdgeEffect& ellipseEffect = effect.cast<EllipseEdgeEffe ct>();
266 b->add32(ellipseEffect.isStroked()); 266 b->add32(ellipseEffect.isStroked());
267 } 267 }
268 268
269 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_OVERRIDE { 269 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_ OVERRIDE {
270 } 270 }
271 271
272 private: 272 private:
273 typedef GrGLGeometryProcessor INHERITED; 273 typedef GrGLGeometryProcessor INHERITED;
274 }; 274 };
275 275
276 private: 276 private:
277 EllipseEdgeEffect(bool stroke) 277 EllipseEdgeEffect(bool stroke)
278 : fInEllipseOffset(this->addVertexAttrib( 278 : fInEllipseOffset(this->addVertexAttrib(
279 GrShaderVar("inEllipseOffset", 279 GrShaderVar("inEllipseOffset",
280 kVec2f_GrSLType, 280 kVec2f_GrSLType,
281 GrShaderVar::kAttribute_TypeModifier))) 281 GrShaderVar::kAttribute_TypeModifier)))
282 , fInEllipseRadii(this->addVertexAttrib( 282 , fInEllipseRadii(this->addVertexAttrib(
283 GrShaderVar("inEllipseRadii", 283 GrShaderVar("inEllipseRadii",
284 kVec4f_GrSLType, 284 kVec4f_GrSLType,
285 GrShaderVar::kAttribute_TypeModifier))) { 285 GrShaderVar::kAttribute_TypeModifier))) {
286 fStroke = stroke; 286 fStroke = stroke;
287 } 287 }
288 288
289 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { 289 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE {
290 const EllipseEdgeEffect& eee = CastEffect<EllipseEdgeEffect>(other); 290 const EllipseEdgeEffect& eee = other.cast<EllipseEdgeEffect>();
291 return eee.fStroke == fStroke; 291 return eee.fStroke == fStroke;
292 } 292 }
293 293
294 const GrShaderVar& fInEllipseOffset; 294 const GrShaderVar& fInEllipseOffset;
295 const GrShaderVar& fInEllipseRadii; 295 const GrShaderVar& fInEllipseRadii;
296 bool fStroke; 296 bool fStroke;
297 297
298 GR_DECLARE_EFFECT_TEST; 298 GR_DECLARE_EFFECT_TEST;
299 299
300 typedef GrGeometryProcessor INHERITED; 300 typedef GrGeometryProcessor INHERITED;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 354
355 static const char* Name() { return "DIEllipseEdge"; } 355 static const char* Name() { return "DIEllipseEdge"; }
356 356
357 const GrShaderVar& inEllipseOffsets0() const { return fInEllipseOffsets0; } 357 const GrShaderVar& inEllipseOffsets0() const { return fInEllipseOffsets0; }
358 const GrShaderVar& inEllipseOffsets1() const { return fInEllipseOffsets1; } 358 const GrShaderVar& inEllipseOffsets1() const { return fInEllipseOffsets1; }
359 359
360 inline Mode getMode() const { return fMode; } 360 inline Mode getMode() const { return fMode; }
361 361
362 class GLEffect : public GrGLGeometryProcessor { 362 class GLEffect : public GrGLGeometryProcessor {
363 public: 363 public:
364 GLEffect(const GrBackendEffectFactory& factory, const GrDrawEffect&) 364 GLEffect(const GrBackendEffectFactory& factory, const GrEffect&)
365 : INHERITED (factory) {} 365 : INHERITED (factory) {}
366 366
367 virtual void emitCode(GrGLFullProgramBuilder* builder, 367 virtual void emitCode(GrGLFullProgramBuilder* builder,
368 const GrDrawEffect& drawEffect, 368 const GrEffect& effect,
369 const GrEffectKey& key, 369 const GrEffectKey& key,
370 const char* outputColor, 370 const char* outputColor,
371 const char* inputColor, 371 const char* inputColor,
372 const TransformedCoordsArray&, 372 const TransformedCoordsArray&,
373 const TextureSamplerArray& samplers) SK_OVERRIDE { 373 const TextureSamplerArray& samplers) SK_OVERRIDE {
374 const DIEllipseEdgeEffect& ellipseEffect = drawEffect.castEffect<DIE llipseEdgeEffect>(); 374 const DIEllipseEdgeEffect& ellipseEffect = effect.cast<DIEllipseEdge Effect>();
375 375
376 const char *vsOffsetName0, *fsOffsetName0; 376 const char *vsOffsetName0, *fsOffsetName0;
377 builder->addVarying(kVec2f_GrSLType, "EllipseOffsets0", 377 builder->addVarying(kVec2f_GrSLType, "EllipseOffsets0",
378 &vsOffsetName0, &fsOffsetName0); 378 &vsOffsetName0, &fsOffsetName0);
379 379
380 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder (); 380 GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder ();
381 vsBuilder->codeAppendf("%s = %s;", vsOffsetName0, 381 vsBuilder->codeAppendf("%s = %s;", vsOffsetName0,
382 ellipseEffect.inEllipseOffsets0().c_str()); 382 ellipseEffect.inEllipseOffsets0().c_str());
383 const char *vsOffsetName1, *fsOffsetName1; 383 const char *vsOffsetName1, *fsOffsetName1;
384 builder->addVarying(kVec2f_GrSLType, "EllipseOffsets1", 384 builder->addVarying(kVec2f_GrSLType, "EllipseOffsets1",
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 "\t 2.0*%s.x*duvdy.x + 2.0*%s. y*duvdy.y);\n", 420 "\t 2.0*%s.x*duvdy.x + 2.0*%s. y*duvdy.y);\n",
421 fsOffsetName1, fsOffsetName1, fsOffsetNam e1, fsOffsetName1); 421 fsOffsetName1, fsOffsetName1, fsOffsetNam e1, fsOffsetName1);
422 fsBuilder->codeAppend("\tinvlen = inversesqrt(dot(grad, grad));\ n"); 422 fsBuilder->codeAppend("\tinvlen = inversesqrt(dot(grad, grad));\ n");
423 fsBuilder->codeAppend("\tedgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);\n"); 423 fsBuilder->codeAppend("\tedgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);\n");
424 } 424 }
425 425
426 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor, 426 fsBuilder->codeAppendf("\t%s = %s;\n", outputColor,
427 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeA lpha")).c_str()); 427 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("edgeA lpha")).c_str());
428 } 428 }
429 429
430 static void GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, 430 static void GenKey(const GrEffect& effect, const GrGLCaps&,
431 GrEffectKeyBuilder* b) { 431 GrEffectKeyBuilder* b) {
432 const DIEllipseEdgeEffect& ellipseEffect = 432 const DIEllipseEdgeEffect& ellipseEffect = effect.cast<DIEllipseEdge Effect>();
433 drawEffect.castEffect<DIEllipseEdgeEffect>();
434 433
435 b->add32(ellipseEffect.getMode()); 434 b->add32(ellipseEffect.getMode());
436 } 435 }
437 436
438 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_OVERRIDE { 437 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_ OVERRIDE {
439 } 438 }
440 439
441 private: 440 private:
442 typedef GrGLGeometryProcessor INHERITED; 441 typedef GrGLGeometryProcessor INHERITED;
443 }; 442 };
444 443
445 private: 444 private:
446 DIEllipseEdgeEffect(Mode mode) 445 DIEllipseEdgeEffect(Mode mode)
447 : fInEllipseOffsets0(this->addVertexAttrib( 446 : fInEllipseOffsets0(this->addVertexAttrib(
448 GrShaderVar("inEllipseOffsets0", 447 GrShaderVar("inEllipseOffsets0",
449 kVec2f_GrSLType, 448 kVec2f_GrSLType,
450 GrShaderVar::kAttribute_TypeModifier))) 449 GrShaderVar::kAttribute_TypeModifier)))
451 , fInEllipseOffsets1(this->addVertexAttrib( 450 , fInEllipseOffsets1(this->addVertexAttrib(
452 GrShaderVar("inEllipseOffsets1", 451 GrShaderVar("inEllipseOffsets1",
453 kVec2f_GrSLType, 452 kVec2f_GrSLType,
454 GrShaderVar::kAttribute_TypeModifier))) { 453 GrShaderVar::kAttribute_TypeModifier))) {
455 fMode = mode; 454 fMode = mode;
456 } 455 }
457 456
458 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { 457 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE {
459 const DIEllipseEdgeEffect& eee = CastEffect<DIEllipseEdgeEffect>(other); 458 const DIEllipseEdgeEffect& eee = other.cast<DIEllipseEdgeEffect>();
460 return eee.fMode == fMode; 459 return eee.fMode == fMode;
461 } 460 }
462 461
463 const GrShaderVar& fInEllipseOffsets0; 462 const GrShaderVar& fInEllipseOffsets0;
464 const GrShaderVar& fInEllipseOffsets1; 463 const GrShaderVar& fInEllipseOffsets1;
465 Mode fMode; 464 Mode fMode;
466 465
467 GR_DECLARE_EFFECT_TEST; 466 GR_DECLARE_EFFECT_TEST;
468 467
469 typedef GrGeometryProcessor INHERITED; 468 typedef GrGeometryProcessor INHERITED;
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 1235
1237 // drop out the middle quad if we're stroked 1236 // drop out the middle quad if we're stroked
1238 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : 1237 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 :
1239 SK_ARRAY_COUNT(gRRectIndices); 1238 SK_ARRAY_COUNT(gRRectIndices);
1240 target->setIndexSourceToBuffer(indexBuffer); 1239 target->setIndexSourceToBuffer(indexBuffer);
1241 target->drawIndexed(kTriangles_GrPrimitiveType, 0, 0, 16, indexCnt, &bou nds); 1240 target->drawIndexed(kTriangles_GrPrimitiveType, 0, 0, 16, indexCnt, &bou nds);
1242 } 1241 }
1243 1242
1244 return true; 1243 return true;
1245 } 1244 }
OLDNEW
« no previous file with comments | « src/gpu/GrAARectRenderer.cpp ('k') | src/gpu/effects/GrBezierEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698