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

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

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