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

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

Issue 675193002: Revert of Added varying struct (Closed) Base URL: https://skia.googlesource.com/skia.git@gp_emit_struct
Patch Set: Created 6 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
« 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/builders/GrGLProgramBuilder.h" 10 #include "gl/builders/GrGLProgramBuilder.h"
(...skipping 19 matching lines...) Expand all
30 }; 30 };
31 31
32 GrGLConicEffect::GrGLConicEffect(const GrBackendProcessorFactory& factory, 32 GrGLConicEffect::GrGLConicEffect(const GrBackendProcessorFactory& factory,
33 const GrProcessor& effect) 33 const GrProcessor& effect)
34 : INHERITED (factory) { 34 : INHERITED (factory) {
35 const GrConicEffect& ce = effect.cast<GrConicEffect>(); 35 const GrConicEffect& ce = effect.cast<GrConicEffect>();
36 fEdgeType = ce.getEdgeType(); 36 fEdgeType = ce.getEdgeType();
37 } 37 }
38 38
39 void GrGLConicEffect::emitCode(const EmitArgs& args) { 39 void GrGLConicEffect::emitCode(const EmitArgs& args) {
40 GrGLVertToFrag v(kVec4f_GrSLType); 40 const char *vsName, *fsName;
41 args.fPB->addVarying("ConicCoeffs", &v); 41
42 args.fPB->addVarying(kVec4f_GrSLType, "ConicCoeffs", &vsName, &fsName);
42 43
43 const GrShaderVar& inConicCoeffs = args.fGP.cast<GrConicEffect>().inConicCoe ffs(); 44 const GrShaderVar& inConicCoeffs = args.fGP.cast<GrConicEffect>().inConicCoe ffs();
44 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 45 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
45 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), inConicCoeffs.c_str()); 46 vsBuilder->codeAppendf("%s = %s;", vsName, inConicCoeffs.c_str());
46 47
47 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 48 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
48 fsBuilder->codeAppend("float edgeAlpha;"); 49 fsBuilder->codeAppend("float edgeAlpha;");
49 50
50 switch (fEdgeType) { 51 switch (fEdgeType) {
51 case kHairlineAA_GrProcessorEdgeType: { 52 case kHairlineAA_GrProcessorEdgeType: {
52 SkAssertResult(fsBuilder->enableFeature( 53 SkAssertResult(fsBuilder->enableFeature(
53 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 54 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
54 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", v.fsIn()); 55 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", fsName);
55 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", v.fsIn()); 56 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", fsName);
56 fsBuilder->codeAppendf("float dfdx =" 57 fsBuilder->codeAppendf("float dfdx ="
57 "2.0 * %s.x * dklmdx.x - %s.y * dklmdx.z - %s .z * dklmdx.y;", 58 "2.0 * %s.x * dklmdx.x - %s.y * dklmdx.z - %s .z * dklmdx.y;",
58 v.fsIn(), v.fsIn(), v.fsIn()); 59 fsName, fsName, fsName);
59 fsBuilder->codeAppendf("float dfdy =" 60 fsBuilder->codeAppendf("float dfdy ="
60 "2.0 * %s.x * dklmdy.x - %s.y * dklmdy.z - %s .z * dklmdy.y;", 61 "2.0 * %s.x * dklmdy.x - %s.y * dklmdy.z - %s .z * dklmdy.y;",
61 v.fsIn(), v.fsIn(), v.fsIn()); 62 fsName, fsName, fsName);
62 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);"); 63 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);");
63 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));"); 64 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));");
64 fsBuilder->codeAppendf("float func = %s.x*%s.x - %s.y*%s.z;", v.fsIn (), v.fsIn(), 65 fsBuilder->codeAppendf("float func = %s.x*%s.x - %s.y*%s.z;", fsName , fsName,
65 v.fsIn(), v.fsIn()); 66 fsName, fsName);
66 fsBuilder->codeAppend("func = abs(func);"); 67 fsBuilder->codeAppend("func = abs(func);");
67 fsBuilder->codeAppend("edgeAlpha = func / gFM;"); 68 fsBuilder->codeAppend("edgeAlpha = func / gFM;");
68 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);"); 69 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);");
69 // Add line below for smooth cubic ramp 70 // Add line below for smooth cubic ramp
70 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);"); 71 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
71 break; 72 break;
72 } 73 }
73 case kFillAA_GrProcessorEdgeType: { 74 case kFillAA_GrProcessorEdgeType: {
74 SkAssertResult(fsBuilder->enableFeature( 75 SkAssertResult(fsBuilder->enableFeature(
75 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 76 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
76 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", v.fsIn()); 77 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", fsName);
77 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", v.fsIn()); 78 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", fsName);
78 fsBuilder->codeAppendf("float dfdx =" 79 fsBuilder->codeAppendf("float dfdx ="
79 "2.0 * %s.x * dklmdx.x - %s.y * dklmdx.z - %s .z * dklmdx.y;", 80 "2.0 * %s.x * dklmdx.x - %s.y * dklmdx.z - %s .z * dklmdx.y;",
80 v.fsIn(), v.fsIn(), v.fsIn()); 81 fsName, fsName, fsName);
81 fsBuilder->codeAppendf("float dfdy =" 82 fsBuilder->codeAppendf("float dfdy ="
82 "2.0 * %s.x * dklmdy.x - %s.y * dklmdy.z - %s .z * dklmdy.y;", 83 "2.0 * %s.x * dklmdy.x - %s.y * dklmdy.z - %s .z * dklmdy.y;",
83 v.fsIn(), v.fsIn(), v.fsIn()); 84 fsName, fsName, fsName);
84 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);"); 85 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);");
85 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));"); 86 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));");
86 fsBuilder->codeAppendf("float func = %s.x * %s.x - %s.y * %s.z;", v. fsIn(), v.fsIn(), 87 fsBuilder->codeAppendf("float func = %s.x * %s.x - %s.y * %s.z;", fs Name, fsName,
87 v.fsIn(), v.fsIn()); 88 fsName, fsName);
88 fsBuilder->codeAppend("edgeAlpha = func / gFM;"); 89 fsBuilder->codeAppend("edgeAlpha = func / gFM;");
89 fsBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0); "); 90 fsBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0); ");
90 // Add line below for smooth cubic ramp 91 // Add line below for smooth cubic ramp
91 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);"); 92 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
92 break; 93 break;
93 } 94 }
94 case kFillBW_GrProcessorEdgeType: { 95 case kFillBW_GrProcessorEdgeType: {
95 fsBuilder->codeAppendf("edgeAlpha = %s.x * %s.x - %s.y * %s.z;", v.f sIn(), v.fsIn(), 96 fsBuilder->codeAppendf("edgeAlpha = %s.x * %s.x - %s.y * %s.z;", fsN ame, fsName,
96 v.fsIn(), v.fsIn()); 97 fsName, fsName);
97 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);"); 98 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);");
98 break; 99 break;
99 } 100 }
100 default: 101 default:
101 SkFAIL("Shouldn't get here"); 102 SkFAIL("Shouldn't get here");
102 } 103 }
103 104
104 fsBuilder->codeAppendf("%s = %s;", args.fOutput, 105 fsBuilder->codeAppendf("%s = %s;", args.fOutput,
105 (GrGLSLExpr4(args.fInput) * GrGLSLExpr1("edgeAlpha")) .c_str()); 106 (GrGLSLExpr4(args.fInput) * GrGLSLExpr1("edgeAlpha")) .c_str());
106 } 107 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 }; 171 };
171 172
172 GrGLQuadEffect::GrGLQuadEffect(const GrBackendProcessorFactory& factory, 173 GrGLQuadEffect::GrGLQuadEffect(const GrBackendProcessorFactory& factory,
173 const GrProcessor& effect) 174 const GrProcessor& effect)
174 : INHERITED (factory) { 175 : INHERITED (factory) {
175 const GrQuadEffect& ce = effect.cast<GrQuadEffect>(); 176 const GrQuadEffect& ce = effect.cast<GrQuadEffect>();
176 fEdgeType = ce.getEdgeType(); 177 fEdgeType = ce.getEdgeType();
177 } 178 }
178 179
179 void GrGLQuadEffect::emitCode(const EmitArgs& args) { 180 void GrGLQuadEffect::emitCode(const EmitArgs& args) {
180 GrGLVertToFrag v(kVec4f_GrSLType); 181 const char *vsName, *fsName;
181 args.fPB->addVarying("HairQuadEdge", &v); 182 args.fPB->addVarying(kVec4f_GrSLType, "HairQuadEdge", &vsName, &fsName);
182 183
183 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 184 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
184 const GrShaderVar& inHairQuadEdge = args.fGP.cast<GrQuadEffect>().inHairQuad Edge(); 185 const GrShaderVar& inHairQuadEdge = args.fGP.cast<GrQuadEffect>().inHairQuad Edge();
185 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), inHairQuadEdge.c_str()); 186 vsBuilder->codeAppendf("%s = %s;", vsName, inHairQuadEdge.c_str());
186 187
187 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 188 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
188 fsBuilder->codeAppendf("float edgeAlpha;"); 189 fsBuilder->codeAppendf("float edgeAlpha;");
189 190
190 switch (fEdgeType) { 191 switch (fEdgeType) {
191 case kHairlineAA_GrProcessorEdgeType: { 192 case kHairlineAA_GrProcessorEdgeType: {
192 SkAssertResult(fsBuilder->enableFeature( 193 SkAssertResult(fsBuilder->enableFeature(
193 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 194 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
194 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn()); 195 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", fsName);
195 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn()); 196 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", fsName);
196 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y," 197 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y,"
197 " 2.0 * %s.x * duvdy.x - duvdy. y);", 198 " 2.0 * %s.x * duvdy.x - duvdy. y);",
198 v.fsIn(), v.fsIn()); 199 fsName, fsName);
199 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn()); 200 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", fsName, fsName, fsName);
200 fsBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / dot( gF, gF));"); 201 fsBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / dot( gF, gF));");
201 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);"); 202 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);");
202 // Add line below for smooth cubic ramp 203 // Add line below for smooth cubic ramp
203 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);"); 204 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
204 break; 205 break;
205 } 206 }
206 case kFillAA_GrProcessorEdgeType: { 207 case kFillAA_GrProcessorEdgeType: {
207 SkAssertResult(fsBuilder->enableFeature( 208 SkAssertResult(fsBuilder->enableFeature(
208 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 209 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
209 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn()); 210 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", fsName);
210 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn()); 211 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", fsName);
211 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y," 212 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y,"
212 " 2.0 * %s.x * duvdy.x - duvdy. y);", 213 " 2.0 * %s.x * duvdy.x - duvdy. y);",
213 v.fsIn(), v.fsIn()); 214 fsName, fsName);
214 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn()); 215 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", fsName, fsName, fsName);
215 fsBuilder->codeAppend("edgeAlpha = edgeAlpha / sqrt(dot(gF, gF));"); 216 fsBuilder->codeAppend("edgeAlpha = edgeAlpha / sqrt(dot(gF, gF));");
216 fsBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0); "); 217 fsBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0); ");
217 // Add line below for smooth cubic ramp 218 // Add line below for smooth cubic ramp
218 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);"); 219 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
219 break; 220 break;
220 } 221 }
221 case kFillBW_GrProcessorEdgeType: { 222 case kFillBW_GrProcessorEdgeType: {
222 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn()); 223 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", fsName, fsName, fsName);
223 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);"); 224 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);");
224 break; 225 break;
225 } 226 }
226 default: 227 default:
227 SkFAIL("Shouldn't get here"); 228 SkFAIL("Shouldn't get here");
228 } 229 }
229 230
230 fsBuilder->codeAppendf("%s = %s;", args.fOutput, 231 fsBuilder->codeAppendf("%s = %s;", args.fOutput,
231 (GrGLSLExpr4(args.fInput) * GrGLSLExpr1("edgeAlpha")) .c_str()); 232 (GrGLSLExpr4(args.fInput) * GrGLSLExpr1("edgeAlpha")) .c_str());
232 } 233 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 }; 297 };
297 298
298 GrGLCubicEffect::GrGLCubicEffect(const GrBackendProcessorFactory& factory, 299 GrGLCubicEffect::GrGLCubicEffect(const GrBackendProcessorFactory& factory,
299 const GrProcessor& processor) 300 const GrProcessor& processor)
300 : INHERITED (factory) { 301 : INHERITED (factory) {
301 const GrCubicEffect& ce = processor.cast<GrCubicEffect>(); 302 const GrCubicEffect& ce = processor.cast<GrCubicEffect>();
302 fEdgeType = ce.getEdgeType(); 303 fEdgeType = ce.getEdgeType();
303 } 304 }
304 305
305 void GrGLCubicEffect::emitCode(const EmitArgs& args) { 306 void GrGLCubicEffect::emitCode(const EmitArgs& args) {
306 GrGLVertToFrag v(kVec4f_GrSLType); 307 const char *vsName, *fsName;
307 args.fPB->addVarying("CubicCoeffs", &v, GrGLShaderVar::kHigh_Precision); 308
309 args.fPB->addVarying(kVec4f_GrSLType, "CubicCoeffs",
310 &vsName, &fsName, GrGLShaderVar::kHigh_Precision);
308 311
309 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 312 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
310 const GrShaderVar& inCubicCoeffs = args.fGP.cast<GrCubicEffect>().inCubicCoe ffs(); 313 const GrShaderVar& inCubicCoeffs = args.fGP.cast<GrCubicEffect>().inCubicCoe ffs();
311 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), inCubicCoeffs.c_str()); 314 vsBuilder->codeAppendf("%s = %s;", vsName, inCubicCoeffs.c_str());
312 315
313 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 316 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
314 317
315 GrGLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, GrGLShaderVar::kHig h_Precision); 318 GrGLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, GrGLShaderVar::kHig h_Precision);
316 GrGLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, GrGLShaderVar::kHigh_Prec ision); 319 GrGLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, GrGLShaderVar::kHigh_Prec ision);
317 GrGLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, GrGLShaderVar::kHigh_Prec ision); 320 GrGLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, GrGLShaderVar::kHigh_Prec ision);
318 GrGLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n); 321 GrGLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n);
319 GrGLShaderVar dfdy("dfdy", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n); 322 GrGLShaderVar dfdy("dfdy", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n);
320 GrGLShaderVar gF("gF", kVec2f_GrSLType, 0, GrGLShaderVar::kHigh_Precision); 323 GrGLShaderVar gF("gF", kVec2f_GrSLType, 0, GrGLShaderVar::kHigh_Precision);
321 GrGLShaderVar gFM("gFM", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precision) ; 324 GrGLShaderVar gFM("gFM", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precision) ;
322 GrGLShaderVar func("func", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n); 325 GrGLShaderVar func("func", kFloat_GrSLType, 0, GrGLShaderVar::kHigh_Precisio n);
323 326
324 fsBuilder->declAppend(edgeAlpha); 327 fsBuilder->declAppend(edgeAlpha);
325 fsBuilder->declAppend(dklmdx); 328 fsBuilder->declAppend(dklmdx);
326 fsBuilder->declAppend(dklmdy); 329 fsBuilder->declAppend(dklmdy);
327 fsBuilder->declAppend(dfdx); 330 fsBuilder->declAppend(dfdx);
328 fsBuilder->declAppend(dfdy); 331 fsBuilder->declAppend(dfdy);
329 fsBuilder->declAppend(gF); 332 fsBuilder->declAppend(gF);
330 fsBuilder->declAppend(gFM); 333 fsBuilder->declAppend(gFM);
331 fsBuilder->declAppend(func); 334 fsBuilder->declAppend(func);
332 335
333 switch (fEdgeType) { 336 switch (fEdgeType) {
334 case kHairlineAA_GrProcessorEdgeType: { 337 case kHairlineAA_GrProcessorEdgeType: {
335 SkAssertResult(fsBuilder->enableFeature( 338 SkAssertResult(fsBuilder->enableFeature(
336 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 339 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
337 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn( )); 340 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), fsName) ;
338 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn( )); 341 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), fsName) ;
339 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", 342 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
340 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_st r(), v.fsIn(), 343 dfdx.c_str(), fsName, fsName, dklmdx.c_str(), fsName,
341 dklmdx.c_str(), v.fsIn(), dklmdx.c_str()); 344 dklmdx.c_str(), fsName, dklmdx.c_str());
342 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", 345 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
343 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_st r(), v.fsIn(), 346 dfdy.c_str(), fsName, fsName, dklmdy.c_str(), fsName,
344 dklmdy.c_str(), v.fsIn(), dklmdy.c_str()); 347 dklmdy.c_str(), fsName, dklmdy.c_str());
345 fsBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_str( ), dfdy.c_str()); 348 fsBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_str( ), dfdy.c_str());
346 fsBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", gFM.c_str(), gF.c_ str(), gF.c_str()); 349 fsBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", gFM.c_str(), gF.c_ str(), gF.c_str());
347 fsBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;", 350 fsBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;",
348 func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v .fsIn(), v.fsIn()); 351 func.c_str(), fsName, fsName, fsName, fsName, fsName);
349 fsBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str()); 352 fsBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str());
350 fsBuilder->codeAppendf("%s = %s / %s;", 353 fsBuilder->codeAppendf("%s = %s / %s;",
351 edgeAlpha.c_str(), func.c_str(), gFM.c_str()) ; 354 edgeAlpha.c_str(), func.c_str(), gFM.c_str()) ;
352 fsBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);", 355 fsBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);",
353 edgeAlpha.c_str(), edgeAlpha.c_str()); 356 edgeAlpha.c_str(), edgeAlpha.c_str());
354 // Add line below for smooth cubic ramp 357 // Add line below for smooth cubic ramp
355 // fsBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);", 358 // fsBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);",
356 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(), 359 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(),
357 // edgeAlpha.c_str()); 360 // edgeAlpha.c_str());
358 break; 361 break;
359 } 362 }
360 case kFillAA_GrProcessorEdgeType: { 363 case kFillAA_GrProcessorEdgeType: {
361 SkAssertResult(fsBuilder->enableFeature( 364 SkAssertResult(fsBuilder->enableFeature(
362 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 365 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
363 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn( )); 366 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), fsName) ;
364 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn( )); 367 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), fsName) ;
365 fsBuilder->codeAppendf("%s =" 368 fsBuilder->codeAppendf("%s ="
366 "3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s. z * %s.y;", 369 "3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s. z * %s.y;",
367 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_st r(), v.fsIn(), 370 dfdx.c_str(), fsName, fsName, dklmdx.c_str(), fsName,
368 dklmdx.c_str(), v.fsIn(), dklmdx.c_str()); 371 dklmdx.c_str(), fsName, dklmdx.c_str());
369 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", 372 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
370 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_st r(), v.fsIn(), 373 dfdy.c_str(), fsName, fsName, dklmdy.c_str(), fsName,
371 dklmdy.c_str(), v.fsIn(), dklmdy.c_str()); 374 dklmdy.c_str(), fsName, dklmdy.c_str());
372 fsBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_str( ), dfdy.c_str()); 375 fsBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_str( ), dfdy.c_str());
373 fsBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", gFM.c_str(), gF.c_ str(), gF.c_str()); 376 fsBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", gFM.c_str(), gF.c_ str(), gF.c_str());
374 fsBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;", 377 fsBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;",
375 func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v .fsIn(), v.fsIn()); 378 func.c_str(), fsName, fsName, fsName, fsName, fsName);
376 fsBuilder->codeAppendf("%s = %s / %s;", 379 fsBuilder->codeAppendf("%s = %s / %s;",
377 edgeAlpha.c_str(), func.c_str(), gFM.c_str()) ; 380 edgeAlpha.c_str(), func.c_str(), gFM.c_str()) ;
378 fsBuilder->codeAppendf("%s = clamp(1.0 - %s, 0.0, 1.0);", 381 fsBuilder->codeAppendf("%s = clamp(1.0 - %s, 0.0, 1.0);",
379 edgeAlpha.c_str(), edgeAlpha.c_str()); 382 edgeAlpha.c_str(), edgeAlpha.c_str());
380 // Add line below for smooth cubic ramp 383 // Add line below for smooth cubic ramp
381 // fsBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);", 384 // fsBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);",
382 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(), 385 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(),
383 // edgeAlpha.c_str()); 386 // edgeAlpha.c_str());
384 break; 387 break;
385 } 388 }
386 case kFillBW_GrProcessorEdgeType: { 389 case kFillBW_GrProcessorEdgeType: {
387 fsBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;", 390 fsBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;",
388 edgeAlpha.c_str(), v.fsIn(), v.fsIn(), v.fsIn (), v.fsIn(), v.fsIn()); 391 edgeAlpha.c_str(), fsName, fsName, fsName, fs Name, fsName);
389 fsBuilder->codeAppendf("%s = float(%s < 0.0);", edgeAlpha.c_str(), e dgeAlpha.c_str()); 392 fsBuilder->codeAppendf("%s = float(%s < 0.0);", edgeAlpha.c_str(), e dgeAlpha.c_str());
390 break; 393 break;
391 } 394 }
392 default: 395 default:
393 SkFAIL("Shouldn't get here"); 396 SkFAIL("Shouldn't get here");
394 } 397 }
395 398
396 fsBuilder->codeAppendf("%s = %s;", args.fOutput, 399 fsBuilder->codeAppendf("%s = %s;", args.fOutput,
397 (GrGLSLExpr4(args.fInput) * GrGLSLExpr1(edgeAlpha.c_s tr())).c_str()); 400 (GrGLSLExpr4(args.fInput) * GrGLSLExpr1(edgeAlpha.c_s tr())).c_str());
398 } 401 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 GrTexture*[]) { 437 GrTexture*[]) {
435 GrGeometryProcessor* gp; 438 GrGeometryProcessor* gp;
436 do { 439 do {
437 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( 440 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>(
438 random->nextULessThan(kGrPro cessorEdgeTypeCnt)); 441 random->nextULessThan(kGrPro cessorEdgeTypeCnt));
439 gp = GrCubicEffect::Create(edgeType, caps); 442 gp = GrCubicEffect::Create(edgeType, caps);
440 } while (NULL == gp); 443 } while (NULL == gp);
441 return gp; 444 return gp;
442 } 445 }
443 446
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