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

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

Issue 25048002: Express (GLSL expression, possibly known value) pairs as a class (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: rebase 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
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 "GrOvalRenderer.h" 8 #include "GrOvalRenderer.h"
9 9
10 #include "GrEffect.h" 10 #include "GrEffect.h"
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 vertexBuilder->getEffectAttributeName(drawEffect.getVertexAttrib Indices()[0]); 110 vertexBuilder->getEffectAttributeName(drawEffect.getVertexAttrib Indices()[0]);
111 vertexBuilder->vsCodeAppendf("\t%s = %s;\n", vsName, attrName->c_str ()); 111 vertexBuilder->vsCodeAppendf("\t%s = %s;\n", vsName, attrName->c_str ());
112 112
113 builder->fsCodeAppendf("\tfloat d = length(%s.xy);\n", fsName); 113 builder->fsCodeAppendf("\tfloat d = length(%s.xy);\n", fsName);
114 builder->fsCodeAppendf("\tfloat edgeAlpha = clamp(%s.z - d, 0.0, 1.0 );\n", fsName); 114 builder->fsCodeAppendf("\tfloat edgeAlpha = clamp(%s.z - d, 0.0, 1.0 );\n", fsName);
115 if (circleEffect.isStroked()) { 115 if (circleEffect.isStroked()) {
116 builder->fsCodeAppendf("\tfloat innerAlpha = clamp(d - %s.w, 0.0 , 1.0);\n", fsName); 116 builder->fsCodeAppendf("\tfloat innerAlpha = clamp(d - %s.w, 0.0 , 1.0);\n", fsName);
117 builder->fsCodeAppend("\tedgeAlpha *= innerAlpha;\n"); 117 builder->fsCodeAppend("\tedgeAlpha *= innerAlpha;\n");
118 } 118 }
119 119
120 SkString modulate; 120 builder->fsCodeAppendf("\t%s = %s;\n", outputColor,
121 GrGLSLModulatef<4>(&modulate, inputColor, "edgeAlpha"); 121 (GrGLSLExpr<4>(inputColor) * GrGLSLExpr<1>("e dgeAlpha")).c_str());
122 builder->fsCodeAppendf("\t%s = %s;\n", outputColor, modulate.c_str() );
123 } 122 }
124 123
125 static inline EffectKey GenKey(const GrDrawEffect& drawEffect, const GrG LCaps&) { 124 static inline EffectKey GenKey(const GrDrawEffect& drawEffect, const GrG LCaps&) {
126 const CircleEdgeEffect& circleEffect = drawEffect.castEffect<CircleE dgeEffect>(); 125 const CircleEdgeEffect& circleEffect = drawEffect.castEffect<CircleE dgeEffect>();
127 126
128 return circleEffect.isStroked() ? 0x1 : 0x0; 127 return circleEffect.isStroked() ? 0x1 : 0x0;
129 } 128 }
130 129
131 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_ OVERRIDE {} 130 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_ OVERRIDE {}
132 131
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 244
246 // for inner curve 245 // for inner curve
247 if (ellipseEffect.isStroked()) { 246 if (ellipseEffect.isStroked()) {
248 builder->fsCodeAppendf("\tscaledOffset = %s*%s.zw;\n", fsOffsetN ame, fsRadiiName); 247 builder->fsCodeAppendf("\tscaledOffset = %s*%s.zw;\n", fsOffsetN ame, fsRadiiName);
249 builder->fsCodeAppend("\ttest = dot(scaledOffset, scaledOffset) - 1.0;\n"); 248 builder->fsCodeAppend("\ttest = dot(scaledOffset, scaledOffset) - 1.0;\n");
250 builder->fsCodeAppendf("\tgrad = 2.0*scaledOffset*%s.zw;\n", fsR adiiName); 249 builder->fsCodeAppendf("\tgrad = 2.0*scaledOffset*%s.zw;\n", fsR adiiName);
251 builder->fsCodeAppend("\tinvlen = inversesqrt(dot(grad, grad));\ n"); 250 builder->fsCodeAppend("\tinvlen = inversesqrt(dot(grad, grad));\ n");
252 builder->fsCodeAppend("\tedgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);\n"); 251 builder->fsCodeAppend("\tedgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);\n");
253 } 252 }
254 253
255 SkString modulate; 254 builder->fsCodeAppendf("\t%s = %s;\n", outputColor,
256 GrGLSLModulatef<4>(&modulate, inputColor, "edgeAlpha"); 255 (GrGLSLExpr<4>(inputColor) * GrGLSLExpr<1>("e dgeAlpha")).c_str());
257 builder->fsCodeAppendf("\t%s = %s;\n", outputColor, modulate.c_str() );
258 } 256 }
259 257
260 static inline EffectKey GenKey(const GrDrawEffect& drawEffect, const GrG LCaps&) { 258 static inline EffectKey GenKey(const GrDrawEffect& drawEffect, const GrG LCaps&) {
261 const EllipseEdgeEffect& ellipseEffect = drawEffect.castEffect<Ellip seEdgeEffect>(); 259 const EllipseEdgeEffect& ellipseEffect = drawEffect.castEffect<Ellip seEdgeEffect>();
262 260
263 return ellipseEffect.isStroked() ? 0x1 : 0x0; 261 return ellipseEffect.isStroked() ? 0x1 : 0x0;
264 } 262 }
265 263
266 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_ OVERRIDE { 264 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_ OVERRIDE {
267 } 265 }
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 builder->fsCodeAppend("\ttest = dot(scaledOffset, scaledOffset) - 1.0;\n"); 404 builder->fsCodeAppend("\ttest = dot(scaledOffset, scaledOffset) - 1.0;\n");
407 builder->fsCodeAppendf("\tduvdx = dFdx(%s);\n", fsOffsetName1); 405 builder->fsCodeAppendf("\tduvdx = dFdx(%s);\n", fsOffsetName1);
408 builder->fsCodeAppendf("\tduvdy = dFdy(%s);\n", fsOffsetName1); 406 builder->fsCodeAppendf("\tduvdy = dFdy(%s);\n", fsOffsetName1);
409 builder->fsCodeAppendf("\tgrad = vec2(2.0*%s.x*duvdx.x + 2.0*%s. y*duvdx.y,\n" 407 builder->fsCodeAppendf("\tgrad = vec2(2.0*%s.x*duvdx.x + 2.0*%s. y*duvdx.y,\n"
410 "\t 2.0*%s.x*duvdy.x + 2.0*%s. y*duvdy.y);\n", 408 "\t 2.0*%s.x*duvdy.x + 2.0*%s. y*duvdy.y);\n",
411 fsOffsetName1, fsOffsetName1, fsOffsetNam e1, fsOffsetName1); 409 fsOffsetName1, fsOffsetName1, fsOffsetNam e1, fsOffsetName1);
412 builder->fsCodeAppend("\tinvlen = inversesqrt(dot(grad, grad));\ n"); 410 builder->fsCodeAppend("\tinvlen = inversesqrt(dot(grad, grad));\ n");
413 builder->fsCodeAppend("\tedgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);\n"); 411 builder->fsCodeAppend("\tedgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);\n");
414 } 412 }
415 413
416 SkString modulate; 414 builder->fsCodeAppendf("\t%s = %s;\n", outputColor,
417 GrGLSLModulatef<4>(&modulate, inputColor, "edgeAlpha"); 415 (GrGLSLExpr<4>(inputColor) * GrGLSLExpr<1>("e dgeAlpha")).c_str());
418 builder->fsCodeAppendf("\t%s = %s;\n", outputColor, modulate.c_str() );
419 } 416 }
420 417
421 static inline EffectKey GenKey(const GrDrawEffect& drawEffect, const GrG LCaps&) { 418 static inline EffectKey GenKey(const GrDrawEffect& drawEffect, const GrG LCaps&) {
422 const DIEllipseEdgeEffect& ellipseEffect = drawEffect.castEffect<DIE llipseEdgeEffect>(); 419 const DIEllipseEdgeEffect& ellipseEffect = drawEffect.castEffect<DIE llipseEdgeEffect>();
423 420
424 return ellipseEffect.getMode(); 421 return ellipseEffect.getMode();
425 } 422 }
426 423
427 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_ OVERRIDE { 424 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_ OVERRIDE {
428 } 425 }
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after
1140 } 1137 }
1141 1138
1142 // drop out the middle quad if we're stroked 1139 // drop out the middle quad if we're stroked
1143 int indexCnt = isStroked ? GR_ARRAY_COUNT(gRRectIndices)-6 : GR_ARRAY_CO UNT(gRRectIndices); 1140 int indexCnt = isStroked ? GR_ARRAY_COUNT(gRRectIndices)-6 : GR_ARRAY_CO UNT(gRRectIndices);
1144 target->setIndexSourceToBuffer(indexBuffer); 1141 target->setIndexSourceToBuffer(indexBuffer);
1145 target->drawIndexed(kTriangles_GrPrimitiveType, 0, 0, 16, indexCnt, &bou nds); 1142 target->drawIndexed(kTriangles_GrPrimitiveType, 0, 0, 16, indexCnt, &bou nds);
1146 } 1143 }
1147 1144
1148 return true; 1145 return true;
1149 } 1146 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698