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

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

Issue 1438003003: Move all ShaderBuilder files to GLSL (Closed) Base URL: https://skia.googlesource.com/skia.git@glslProgBuild
Patch Set: nits Created 5 years, 1 month 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/batches/GrAAConvexPathRenderer.cpp ('k') | src/gpu/effects/GrBicubicEffect.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/GrGLFragmentProcessor.h" 10 #include "gl/GrGLFragmentProcessor.h"
11 #include "gl/GrGLGeometryProcessor.h" 11 #include "gl/GrGLGeometryProcessor.h"
12 #include "gl/GrGLUtil.h" 12 #include "gl/GrGLUtil.h"
13 #include "gl/builders/GrGLProgramBuilder.h" 13 #include "glsl/GrGLSLProgramBuilder.h"
14 #include "glsl/GrGLSLProgramDataManager.h" 14 #include "glsl/GrGLSLProgramDataManager.h"
15 15
16 class GrGLConicEffect : public GrGLGeometryProcessor { 16 class GrGLConicEffect : public GrGLGeometryProcessor {
17 public: 17 public:
18 GrGLConicEffect(const GrGeometryProcessor&); 18 GrGLConicEffect(const GrGeometryProcessor&);
19 19
20 void onEmitCode(EmitArgs&, GrGPArgs*) override; 20 void onEmitCode(EmitArgs&, GrGPArgs*) override;
21 21
22 static inline void GenKey(const GrGeometryProcessor&, 22 static inline void GenKey(const GrGeometryProcessor&,
23 const GrGLSLCaps&, 23 const GrGLSLCaps&,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 }; 67 };
68 68
69 GrGLConicEffect::GrGLConicEffect(const GrGeometryProcessor& processor) 69 GrGLConicEffect::GrGLConicEffect(const GrGeometryProcessor& processor)
70 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage Scale(0xff) { 70 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage Scale(0xff) {
71 const GrConicEffect& ce = processor.cast<GrConicEffect>(); 71 const GrConicEffect& ce = processor.cast<GrConicEffect>();
72 fEdgeType = ce.getEdgeType(); 72 fEdgeType = ce.getEdgeType();
73 } 73 }
74 74
75 void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { 75 void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) {
76 GrGLSLGPBuilder* pb = args.fPB; 76 GrGLSLGPBuilder* pb = args.fPB;
77 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 77 GrGLSLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
78 const GrConicEffect& gp = args.fGP.cast<GrConicEffect>(); 78 const GrConicEffect& gp = args.fGP.cast<GrConicEffect>();
79 79
80 // emit attributes 80 // emit attributes
81 vsBuilder->emitAttributes(gp); 81 vsBuilder->emitAttributes(gp);
82 82
83 GrGLSLVertToFrag v(kVec4f_GrSLType); 83 GrGLSLVertToFrag v(kVec4f_GrSLType);
84 args.fPB->addVarying("ConicCoeffs", &v); 84 args.fPB->addVarying("ConicCoeffs", &v);
85 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inConicCoeffs()->fName); 85 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inConicCoeffs()->fName);
86 86
87 // Setup pass through color 87 // Setup pass through color
88 if (!gp.colorIgnored()) { 88 if (!gp.colorIgnored()) {
89 this->setupUniformColor(args.fPB, args.fOutputColor, &fColorUniform); 89 this->setupUniformColor(args.fPB, args.fOutputColor, &fColorUniform);
90 } 90 }
91 91
92 // Setup position 92 // Setup position
93 this->setupPosition(pb, gpArgs, gp.inPosition()->fName, gp.viewMatrix(), &fV iewMatrixUniform); 93 this->setupPosition(pb, gpArgs, gp.inPosition()->fName, gp.viewMatrix(), &fV iewMatrixUniform);
94 94
95 // emit transforms with position 95 // emit transforms with position
96 this->emitTransforms(pb, gpArgs->fPositionVar, gp.inPosition()->fName, gp.lo calMatrix(), 96 this->emitTransforms(pb, gpArgs->fPositionVar, gp.inPosition()->fName, gp.lo calMatrix(),
97 args.fTransformsIn, args.fTransformsOut); 97 args.fTransformsIn, args.fTransformsOut);
98 98
99 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 99 GrGLSLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
100 fsBuilder->codeAppend("float edgeAlpha;"); 100 fsBuilder->codeAppend("float edgeAlpha;");
101 101
102 switch (fEdgeType) { 102 switch (fEdgeType) {
103 case kHairlineAA_GrProcessorEdgeType: { 103 case kHairlineAA_GrProcessorEdgeType: {
104 SkAssertResult(fsBuilder->enableFeature( 104 SkAssertResult(fsBuilder->enableFeature(
105 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 105 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
106 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", v.fsIn()); 106 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", v.fsIn());
107 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", v.fsIn()); 107 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", v.fsIn());
108 fsBuilder->codeAppendf("float dfdx =" 108 fsBuilder->codeAppendf("float dfdx ="
109 "2.0 * %s.x * dklmdx.x - %s.y * dklmdx.z - %s .z * dklmdx.y;", 109 "2.0 * %s.x * dklmdx.x - %s.y * dklmdx.z - %s .z * dklmdx.y;",
110 v.fsIn(), v.fsIn(), v.fsIn()); 110 v.fsIn(), v.fsIn(), v.fsIn());
111 fsBuilder->codeAppendf("float dfdy =" 111 fsBuilder->codeAppendf("float dfdy ="
112 "2.0 * %s.x * dklmdy.x - %s.y * dklmdy.z - %s .z * dklmdy.y;", 112 "2.0 * %s.x * dklmdy.x - %s.y * dklmdy.z - %s .z * dklmdy.y;",
113 v.fsIn(), v.fsIn(), v.fsIn()); 113 v.fsIn(), v.fsIn(), v.fsIn());
114 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);"); 114 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);");
115 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));"); 115 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));");
116 fsBuilder->codeAppendf("float func = %s.x*%s.x - %s.y*%s.z;", v.fsIn (), v.fsIn(), 116 fsBuilder->codeAppendf("float func = %s.x*%s.x - %s.y*%s.z;", v.fsIn (), v.fsIn(),
117 v.fsIn(), v.fsIn()); 117 v.fsIn(), v.fsIn());
118 fsBuilder->codeAppend("func = abs(func);"); 118 fsBuilder->codeAppend("func = abs(func);");
119 fsBuilder->codeAppend("edgeAlpha = func / gFM;"); 119 fsBuilder->codeAppend("edgeAlpha = func / gFM;");
120 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);"); 120 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);");
121 // Add line below for smooth cubic ramp 121 // Add line below for smooth cubic ramp
122 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);"); 122 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
123 break; 123 break;
124 } 124 }
125 case kFillAA_GrProcessorEdgeType: { 125 case kFillAA_GrProcessorEdgeType: {
126 SkAssertResult(fsBuilder->enableFeature( 126 SkAssertResult(fsBuilder->enableFeature(
127 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 127 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
128 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", v.fsIn()); 128 fsBuilder->codeAppendf("vec3 dklmdx = dFdx(%s.xyz);", v.fsIn());
129 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", v.fsIn()); 129 fsBuilder->codeAppendf("vec3 dklmdy = dFdy(%s.xyz);", v.fsIn());
130 fsBuilder->codeAppendf("float dfdx =" 130 fsBuilder->codeAppendf("float dfdx ="
131 "2.0 * %s.x * dklmdx.x - %s.y * dklmdx.z - %s .z * dklmdx.y;", 131 "2.0 * %s.x * dklmdx.x - %s.y * dklmdx.z - %s .z * dklmdx.y;",
132 v.fsIn(), v.fsIn(), v.fsIn()); 132 v.fsIn(), v.fsIn(), v.fsIn());
133 fsBuilder->codeAppendf("float dfdy =" 133 fsBuilder->codeAppendf("float dfdy ="
134 "2.0 * %s.x * dklmdy.x - %s.y * dklmdy.z - %s .z * dklmdy.y;", 134 "2.0 * %s.x * dklmdy.x - %s.y * dklmdy.z - %s .z * dklmdy.y;",
135 v.fsIn(), v.fsIn(), v.fsIn()); 135 v.fsIn(), v.fsIn(), v.fsIn());
136 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);"); 136 fsBuilder->codeAppend("vec2 gF = vec2(dfdx, dfdy);");
137 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));"); 137 fsBuilder->codeAppend("float gFM = sqrt(dot(gF, gF));");
(...skipping 11 matching lines...) Expand all
149 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);"); 149 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);");
150 break; 150 break;
151 } 151 }
152 default: 152 default:
153 SkFAIL("Shouldn't get here"); 153 SkFAIL("Shouldn't get here");
154 } 154 }
155 155
156 // TODO should we really be doing this? 156 // TODO should we really be doing this?
157 if (gp.coverageScale() != 0xff) { 157 if (gp.coverageScale() != 0xff) {
158 const char* coverageScale; 158 const char* coverageScale;
159 fCoverageScaleUniform = pb->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 159 fCoverageScaleUniform = pb->addUniform(GrGLSLProgramBuilder::kFragment_V isibility,
160 kFloat_GrSLType, 160 kFloat_GrSLType,
161 kDefault_GrSLPrecision, 161 kDefault_GrSLPrecision,
162 "Coverage", 162 "Coverage",
163 &coverageScale); 163 &coverageScale);
164 fsBuilder->codeAppendf("%s = vec4(%s * edgeAlpha);", args.fOutputCoverag e, coverageScale); 164 fsBuilder->codeAppendf("%s = vec4(%s * edgeAlpha);", args.fOutputCoverag e, coverageScale);
165 } else { 165 } else {
166 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage); 166 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
167 } 167 }
168 } 168 }
169 169
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 }; 283 };
284 284
285 GrGLQuadEffect::GrGLQuadEffect(const GrGeometryProcessor& processor) 285 GrGLQuadEffect::GrGLQuadEffect(const GrGeometryProcessor& processor)
286 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage Scale(0xff) { 286 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage Scale(0xff) {
287 const GrQuadEffect& ce = processor.cast<GrQuadEffect>(); 287 const GrQuadEffect& ce = processor.cast<GrQuadEffect>();
288 fEdgeType = ce.getEdgeType(); 288 fEdgeType = ce.getEdgeType();
289 } 289 }
290 290
291 void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { 291 void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) {
292 GrGLSLGPBuilder* pb = args.fPB; 292 GrGLSLGPBuilder* pb = args.fPB;
293 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 293 GrGLSLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
294 const GrQuadEffect& gp = args.fGP.cast<GrQuadEffect>(); 294 const GrQuadEffect& gp = args.fGP.cast<GrQuadEffect>();
295 295
296 // emit attributes 296 // emit attributes
297 vsBuilder->emitAttributes(gp); 297 vsBuilder->emitAttributes(gp);
298 298
299 GrGLSLVertToFrag v(kVec4f_GrSLType); 299 GrGLSLVertToFrag v(kVec4f_GrSLType);
300 args.fPB->addVarying("HairQuadEdge", &v); 300 args.fPB->addVarying("HairQuadEdge", &v);
301 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge()->fName); 301 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge()->fName);
302 302
303 // Setup pass through color 303 // Setup pass through color
304 if (!gp.colorIgnored()) { 304 if (!gp.colorIgnored()) {
305 this->setupUniformColor(args.fPB, args.fOutputColor, &fColorUniform); 305 this->setupUniformColor(args.fPB, args.fOutputColor, &fColorUniform);
306 } 306 }
307 307
308 // Setup position 308 // Setup position
309 this->setupPosition(pb, gpArgs, gp.inPosition()->fName, gp.viewMatrix(), &fV iewMatrixUniform); 309 this->setupPosition(pb, gpArgs, gp.inPosition()->fName, gp.viewMatrix(), &fV iewMatrixUniform);
310 310
311 // emit transforms with position 311 // emit transforms with position
312 this->emitTransforms(pb, gpArgs->fPositionVar, gp.inPosition()->fName, gp.lo calMatrix(), 312 this->emitTransforms(pb, gpArgs->fPositionVar, gp.inPosition()->fName, gp.lo calMatrix(),
313 args.fTransformsIn, args.fTransformsOut); 313 args.fTransformsIn, args.fTransformsOut);
314 314
315 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 315 GrGLSLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
316 fsBuilder->codeAppendf("float edgeAlpha;"); 316 fsBuilder->codeAppendf("float edgeAlpha;");
317 317
318 switch (fEdgeType) { 318 switch (fEdgeType) {
319 case kHairlineAA_GrProcessorEdgeType: { 319 case kHairlineAA_GrProcessorEdgeType: {
320 SkAssertResult(fsBuilder->enableFeature( 320 SkAssertResult(fsBuilder->enableFeature(
321 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 321 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
322 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn()); 322 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn());
323 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn()); 323 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn());
324 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y," 324 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y,"
325 " 2.0 * %s.x * duvdy.x - duvdy. y);", 325 " 2.0 * %s.x * duvdy.x - duvdy. y);",
326 v.fsIn(), v.fsIn()); 326 v.fsIn(), v.fsIn());
327 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn()); 327 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn());
328 fsBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / dot( gF, gF));"); 328 fsBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / dot( gF, gF));");
329 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);"); 329 fsBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);");
330 // Add line below for smooth cubic ramp 330 // Add line below for smooth cubic ramp
331 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);"); 331 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
332 break; 332 break;
333 } 333 }
334 case kFillAA_GrProcessorEdgeType: { 334 case kFillAA_GrProcessorEdgeType: {
335 SkAssertResult(fsBuilder->enableFeature( 335 SkAssertResult(fsBuilder->enableFeature(
336 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 336 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
337 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn()); 337 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn());
338 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn()); 338 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn());
339 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y," 339 fsBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvdx. y,"
340 " 2.0 * %s.x * duvdy.x - duvdy. y);", 340 " 2.0 * %s.x * duvdy.x - duvdy. y);",
341 v.fsIn(), v.fsIn()); 341 v.fsIn(), v.fsIn());
342 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn()); 342 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn());
343 fsBuilder->codeAppend("edgeAlpha = edgeAlpha / sqrt(dot(gF, gF));"); 343 fsBuilder->codeAppend("edgeAlpha = edgeAlpha / sqrt(dot(gF, gF));");
344 fsBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0); "); 344 fsBuilder->codeAppend("edgeAlpha = clamp(1.0 - edgeAlpha, 0.0, 1.0); ");
345 // Add line below for smooth cubic ramp 345 // Add line below for smooth cubic ramp
346 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);"); 346 // fsBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*e dgeAlpha);");
347 break; 347 break;
348 } 348 }
349 case kFillBW_GrProcessorEdgeType: { 349 case kFillBW_GrProcessorEdgeType: {
350 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn()); 350 fsBuilder->codeAppendf("edgeAlpha = (%s.x * %s.x - %s.y);", v.fsIn() , v.fsIn(), v.fsIn());
351 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);"); 351 fsBuilder->codeAppend("edgeAlpha = float(edgeAlpha < 0.0);");
352 break; 352 break;
353 } 353 }
354 default: 354 default:
355 SkFAIL("Shouldn't get here"); 355 SkFAIL("Shouldn't get here");
356 } 356 }
357 357
358 if (0xff != gp.coverageScale()) { 358 if (0xff != gp.coverageScale()) {
359 const char* coverageScale; 359 const char* coverageScale;
360 fCoverageScaleUniform = pb->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 360 fCoverageScaleUniform = pb->addUniform(GrGLSLProgramBuilder::kFragment_V isibility,
361 kFloat_GrSLType, 361 kFloat_GrSLType,
362 kDefault_GrSLPrecision, 362 kDefault_GrSLPrecision,
363 "Coverage", 363 "Coverage",
364 &coverageScale); 364 &coverageScale);
365 fsBuilder->codeAppendf("%s = vec4(%s * edgeAlpha);", args.fOutputCoverag e, coverageScale); 365 fsBuilder->codeAppendf("%s = vec4(%s * edgeAlpha);", args.fOutputCoverag e, coverageScale);
366 } else { 366 } else {
367 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage); 367 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
368 } 368 }
369 } 369 }
370 370
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 typedef GrGLGeometryProcessor INHERITED; 470 typedef GrGLGeometryProcessor INHERITED;
471 }; 471 };
472 472
473 GrGLCubicEffect::GrGLCubicEffect(const GrGeometryProcessor& processor) 473 GrGLCubicEffect::GrGLCubicEffect(const GrGeometryProcessor& processor)
474 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL) { 474 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL) {
475 const GrCubicEffect& ce = processor.cast<GrCubicEffect>(); 475 const GrCubicEffect& ce = processor.cast<GrCubicEffect>();
476 fEdgeType = ce.getEdgeType(); 476 fEdgeType = ce.getEdgeType();
477 } 477 }
478 478
479 void GrGLCubicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { 479 void GrGLCubicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) {
480 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 480 GrGLSLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
481 const GrCubicEffect& gp = args.fGP.cast<GrCubicEffect>(); 481 const GrCubicEffect& gp = args.fGP.cast<GrCubicEffect>();
482 482
483 // emit attributes 483 // emit attributes
484 vsBuilder->emitAttributes(gp); 484 vsBuilder->emitAttributes(gp);
485 485
486 GrGLSLVertToFrag v(kVec4f_GrSLType); 486 GrGLSLVertToFrag v(kVec4f_GrSLType);
487 args.fPB->addVarying("CubicCoeffs", &v, kHigh_GrSLPrecision); 487 args.fPB->addVarying("CubicCoeffs", &v, kHigh_GrSLPrecision);
488 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inCubicCoeffs()->fName); 488 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inCubicCoeffs()->fName);
489 489
490 // Setup pass through color 490 // Setup pass through color
491 if (!gp.colorIgnored()) { 491 if (!gp.colorIgnored()) {
492 this->setupUniformColor(args.fPB, args.fOutputColor, &fColorUniform); 492 this->setupUniformColor(args.fPB, args.fOutputColor, &fColorUniform);
493 } 493 }
494 494
495 // Setup position 495 // Setup position
496 this->setupPosition(args.fPB, gpArgs, gp.inPosition()->fName, gp.viewMatrix( ), 496 this->setupPosition(args.fPB, gpArgs, gp.inPosition()->fName, gp.viewMatrix( ),
497 &fViewMatrixUniform); 497 &fViewMatrixUniform);
498 498
499 // emit transforms with position 499 // emit transforms with position
500 this->emitTransforms(args.fPB, gpArgs->fPositionVar, gp.inPosition()->fName, args.fTransformsIn, 500 this->emitTransforms(args.fPB, gpArgs->fPositionVar, gp.inPosition()->fName, args.fTransformsIn,
501 args.fTransformsOut); 501 args.fTransformsOut);
502 502
503 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 503 GrGLSLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
504 504
505 GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecisi on); 505 GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecisi on);
506 GrGLSLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); 506 GrGLSLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, kHigh_GrSLPrecision);
507 GrGLSLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); 507 GrGLSLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, kHigh_GrSLPrecision);
508 GrGLSLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 508 GrGLSLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
509 GrGLSLShaderVar dfdy("dfdy", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 509 GrGLSLShaderVar dfdy("dfdy", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
510 GrGLSLShaderVar gF("gF", kVec2f_GrSLType, 0, kHigh_GrSLPrecision); 510 GrGLSLShaderVar gF("gF", kVec2f_GrSLType, 0, kHigh_GrSLPrecision);
511 GrGLSLShaderVar gFM("gFM", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 511 GrGLSLShaderVar gFM("gFM", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
512 GrGLSLShaderVar func("func", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 512 GrGLSLShaderVar func("func", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
513 513
514 fsBuilder->declAppend(edgeAlpha); 514 fsBuilder->declAppend(edgeAlpha);
515 fsBuilder->declAppend(dklmdx); 515 fsBuilder->declAppend(dklmdx);
516 fsBuilder->declAppend(dklmdy); 516 fsBuilder->declAppend(dklmdy);
517 fsBuilder->declAppend(dfdx); 517 fsBuilder->declAppend(dfdx);
518 fsBuilder->declAppend(dfdy); 518 fsBuilder->declAppend(dfdy);
519 fsBuilder->declAppend(gF); 519 fsBuilder->declAppend(gF);
520 fsBuilder->declAppend(gFM); 520 fsBuilder->declAppend(gFM);
521 fsBuilder->declAppend(func); 521 fsBuilder->declAppend(func);
522 522
523 switch (fEdgeType) { 523 switch (fEdgeType) {
524 case kHairlineAA_GrProcessorEdgeType: { 524 case kHairlineAA_GrProcessorEdgeType: {
525 SkAssertResult(fsBuilder->enableFeature( 525 SkAssertResult(fsBuilder->enableFeature(
526 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 526 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
527 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn( )); 527 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn( ));
528 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn( )); 528 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn( ));
529 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", 529 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
530 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_st r(), v.fsIn(), 530 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_st r(), v.fsIn(),
531 dklmdx.c_str(), v.fsIn(), dklmdx.c_str()); 531 dklmdx.c_str(), v.fsIn(), dklmdx.c_str());
532 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", 532 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
533 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_st r(), v.fsIn(), 533 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_st r(), v.fsIn(),
534 dklmdy.c_str(), v.fsIn(), dklmdy.c_str()); 534 dklmdy.c_str(), v.fsIn(), dklmdy.c_str());
535 fsBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_str( ), dfdy.c_str()); 535 fsBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_str( ), dfdy.c_str());
536 fsBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", gFM.c_str(), gF.c_ str(), gF.c_str()); 536 fsBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", gFM.c_str(), gF.c_ str(), gF.c_str());
537 fsBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;", 537 fsBuilder->codeAppendf("%s = %s.x * %s.x * %s.x - %s.y * %s.z;",
538 func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v .fsIn(), v.fsIn()); 538 func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v .fsIn(), v.fsIn());
539 fsBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str()); 539 fsBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str());
540 fsBuilder->codeAppendf("%s = %s / %s;", 540 fsBuilder->codeAppendf("%s = %s / %s;",
541 edgeAlpha.c_str(), func.c_str(), gFM.c_str()) ; 541 edgeAlpha.c_str(), func.c_str(), gFM.c_str()) ;
542 fsBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);", 542 fsBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);",
543 edgeAlpha.c_str(), edgeAlpha.c_str()); 543 edgeAlpha.c_str(), edgeAlpha.c_str());
544 // Add line below for smooth cubic ramp 544 // Add line below for smooth cubic ramp
545 // fsBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);", 545 // fsBuilder->codeAppendf("%s = %s * %s * (3.0 - 2.0 * %s);",
546 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(), 546 // edgeAlpha.c_str(), edgeAlpha.c_str(), edge Alpha.c_str(),
547 // edgeAlpha.c_str()); 547 // edgeAlpha.c_str());
548 break; 548 break;
549 } 549 }
550 case kFillAA_GrProcessorEdgeType: { 550 case kFillAA_GrProcessorEdgeType: {
551 SkAssertResult(fsBuilder->enableFeature( 551 SkAssertResult(fsBuilder->enableFeature(
552 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 552 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
553 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn( )); 553 fsBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn( ));
554 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn( )); 554 fsBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn( ));
555 fsBuilder->codeAppendf("%s =" 555 fsBuilder->codeAppendf("%s ="
556 "3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s. z * %s.y;", 556 "3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s. z * %s.y;",
557 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_st r(), v.fsIn(), 557 dfdx.c_str(), v.fsIn(), v.fsIn(), dklmdx.c_st r(), v.fsIn(),
558 dklmdx.c_str(), v.fsIn(), dklmdx.c_str()); 558 dklmdx.c_str(), v.fsIn(), dklmdx.c_str());
559 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", 559 fsBuilder->codeAppendf("%s = 3.0 * %s.x * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;",
560 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_st r(), v.fsIn(), 560 dfdy.c_str(), v.fsIn(), v.fsIn(), dklmdy.c_st r(), v.fsIn(),
561 dklmdy.c_str(), v.fsIn(), dklmdy.c_str()); 561 dklmdy.c_str(), v.fsIn(), dklmdy.c_str());
562 fsBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_str( ), dfdy.c_str()); 562 fsBuilder->codeAppendf("%s = vec2(%s, %s);", gF.c_str(), dfdx.c_str( ), dfdy.c_str());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 do { 630 do {
631 GrPrimitiveEdgeType edgeType = 631 GrPrimitiveEdgeType edgeType =
632 static_cast<GrPrimitiveEdgeType>( 632 static_cast<GrPrimitiveEdgeType>(
633 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); 633 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt));
634 gp = GrCubicEffect::Create(GrRandomColor(d->fRandom), 634 gp = GrCubicEffect::Create(GrRandomColor(d->fRandom),
635 GrTest::TestMatrix(d->fRandom), edgeType, *d- >fCaps); 635 GrTest::TestMatrix(d->fRandom), edgeType, *d- >fCaps);
636 } while (nullptr == gp); 636 } while (nullptr == gp);
637 return gp; 637 return gp;
638 } 638 }
639 639
OLDNEW
« no previous file with comments | « src/gpu/batches/GrAAConvexPathRenderer.cpp ('k') | src/gpu/effects/GrBicubicEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698