| OLD | NEW |
| 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 "glsl/GrGLSLGeometryProcessor.h" | 10 #include "glsl/GrGLSLGeometryProcessor.h" |
| 11 #include "glsl/GrGLSLProgramBuilder.h" | 11 #include "glsl/GrGLSLProgramBuilder.h" |
| 12 #include "glsl/GrGLSLProgramDataManager.h" | 12 #include "glsl/GrGLSLProgramDataManager.h" |
| 13 #include "glsl/GrGLSLUtil.h" | 13 #include "glsl/GrGLSLUtil.h" |
| 14 #include "glsl/GrGLSLVarying.h" |
| 14 | 15 |
| 15 class GrGLConicEffect : public GrGLSLGeometryProcessor { | 16 class GrGLConicEffect : public GrGLSLGeometryProcessor { |
| 16 public: | 17 public: |
| 17 GrGLConicEffect(const GrGeometryProcessor&); | 18 GrGLConicEffect(const GrGeometryProcessor&); |
| 18 | 19 |
| 19 void onEmitCode(EmitArgs&, GrGPArgs*) override; | 20 void onEmitCode(EmitArgs&, GrGPArgs*) override; |
| 20 | 21 |
| 21 static inline void GenKey(const GrGeometryProcessor&, | 22 static inline void GenKey(const GrGeometryProcessor&, |
| 22 const GrGLSLCaps&, | 23 const GrGLSLCaps&, |
| 23 GrProcessorKeyBuilder*); | 24 GrProcessorKeyBuilder*); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 GrGLConicEffect::GrGLConicEffect(const GrGeometryProcessor& processor) | 69 GrGLConicEffect::GrGLConicEffect(const GrGeometryProcessor& processor) |
| 69 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage
Scale(0xff) { | 70 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage
Scale(0xff) { |
| 70 const GrConicEffect& ce = processor.cast<GrConicEffect>(); | 71 const GrConicEffect& ce = processor.cast<GrConicEffect>(); |
| 71 fEdgeType = ce.getEdgeType(); | 72 fEdgeType = ce.getEdgeType(); |
| 72 } | 73 } |
| 73 | 74 |
| 74 void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { | 75 void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { |
| 75 GrGLSLGPBuilder* pb = args.fPB; | 76 GrGLSLGPBuilder* pb = args.fPB; |
| 76 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; | 77 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; |
| 77 const GrConicEffect& gp = args.fGP.cast<GrConicEffect>(); | 78 const GrConicEffect& gp = args.fGP.cast<GrConicEffect>(); |
| 79 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; |
| 78 | 80 |
| 79 // emit attributes | 81 // emit attributes |
| 80 vertBuilder->emitAttributes(gp); | 82 varyingHandler->emitAttributes(gp); |
| 81 | 83 |
| 82 GrGLSLVertToFrag v(kVec4f_GrSLType); | 84 GrGLSLVertToFrag v(kVec4f_GrSLType); |
| 83 args.fPB->addVarying("ConicCoeffs", &v); | 85 varyingHandler->addVarying("ConicCoeffs", &v); |
| 84 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inConicCoeffs()->fName); | 86 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inConicCoeffs()->fName); |
| 85 | 87 |
| 86 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 88 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
| 87 // Setup pass through color | 89 // Setup pass through color |
| 88 if (!gp.colorIgnored()) { | 90 if (!gp.colorIgnored()) { |
| 89 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo
rUniform); | 91 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo
rUniform); |
| 90 } | 92 } |
| 91 | 93 |
| 92 // Setup position | 94 // Setup position |
| 93 this->setupPosition(pb, | 95 this->setupPosition(pb, |
| 94 vertBuilder, | 96 vertBuilder, |
| 95 gpArgs, | 97 gpArgs, |
| 96 gp.inPosition()->fName, | 98 gp.inPosition()->fName, |
| 97 gp.viewMatrix(), | 99 gp.viewMatrix(), |
| 98 &fViewMatrixUniform); | 100 &fViewMatrixUniform); |
| 99 | 101 |
| 100 // emit transforms with position | 102 // emit transforms with position |
| 101 this->emitTransforms(pb, | 103 this->emitTransforms(pb, |
| 102 vertBuilder, | 104 vertBuilder, |
| 105 varyingHandler, |
| 103 gpArgs->fPositionVar, | 106 gpArgs->fPositionVar, |
| 104 gp.inPosition()->fName, | 107 gp.inPosition()->fName, |
| 105 gp.localMatrix(), | 108 gp.localMatrix(), |
| 106 args.fTransformsIn, | 109 args.fTransformsIn, |
| 107 args.fTransformsOut); | 110 args.fTransformsOut); |
| 108 | 111 |
| 109 fragBuilder->codeAppend("float edgeAlpha;"); | 112 fragBuilder->codeAppend("float edgeAlpha;"); |
| 110 | 113 |
| 111 switch (fEdgeType) { | 114 switch (fEdgeType) { |
| 112 case kHairlineAA_GrProcessorEdgeType: { | 115 case kHairlineAA_GrProcessorEdgeType: { |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 GrGLQuadEffect::GrGLQuadEffect(const GrGeometryProcessor& processor) | 297 GrGLQuadEffect::GrGLQuadEffect(const GrGeometryProcessor& processor) |
| 295 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage
Scale(0xff) { | 298 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage
Scale(0xff) { |
| 296 const GrQuadEffect& ce = processor.cast<GrQuadEffect>(); | 299 const GrQuadEffect& ce = processor.cast<GrQuadEffect>(); |
| 297 fEdgeType = ce.getEdgeType(); | 300 fEdgeType = ce.getEdgeType(); |
| 298 } | 301 } |
| 299 | 302 |
| 300 void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { | 303 void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { |
| 301 GrGLSLGPBuilder* pb = args.fPB; | 304 GrGLSLGPBuilder* pb = args.fPB; |
| 302 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; | 305 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; |
| 303 const GrQuadEffect& gp = args.fGP.cast<GrQuadEffect>(); | 306 const GrQuadEffect& gp = args.fGP.cast<GrQuadEffect>(); |
| 307 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; |
| 304 | 308 |
| 305 // emit attributes | 309 // emit attributes |
| 306 vertBuilder->emitAttributes(gp); | 310 varyingHandler->emitAttributes(gp); |
| 307 | 311 |
| 308 GrGLSLVertToFrag v(kVec4f_GrSLType); | 312 GrGLSLVertToFrag v(kVec4f_GrSLType); |
| 309 args.fPB->addVarying("HairQuadEdge", &v); | 313 varyingHandler->addVarying("HairQuadEdge", &v); |
| 310 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge()->fName); | 314 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge()->fName); |
| 311 | 315 |
| 312 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 316 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
| 313 // Setup pass through color | 317 // Setup pass through color |
| 314 if (!gp.colorIgnored()) { | 318 if (!gp.colorIgnored()) { |
| 315 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo
rUniform); | 319 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo
rUniform); |
| 316 } | 320 } |
| 317 | 321 |
| 318 // Setup position | 322 // Setup position |
| 319 this->setupPosition(pb, | 323 this->setupPosition(pb, |
| 320 vertBuilder, | 324 vertBuilder, |
| 321 gpArgs, | 325 gpArgs, |
| 322 gp.inPosition()->fName, | 326 gp.inPosition()->fName, |
| 323 gp.viewMatrix(), | 327 gp.viewMatrix(), |
| 324 &fViewMatrixUniform); | 328 &fViewMatrixUniform); |
| 325 | 329 |
| 326 // emit transforms with position | 330 // emit transforms with position |
| 327 this->emitTransforms(pb, | 331 this->emitTransforms(pb, |
| 328 vertBuilder, | 332 vertBuilder, |
| 333 varyingHandler, |
| 329 gpArgs->fPositionVar, | 334 gpArgs->fPositionVar, |
| 330 gp.inPosition()->fName, | 335 gp.inPosition()->fName, |
| 331 gp.localMatrix(), | 336 gp.localMatrix(), |
| 332 args.fTransformsIn, | 337 args.fTransformsIn, |
| 333 args.fTransformsOut); | 338 args.fTransformsOut); |
| 334 | 339 |
| 335 fragBuilder->codeAppendf("float edgeAlpha;"); | 340 fragBuilder->codeAppendf("float edgeAlpha;"); |
| 336 | 341 |
| 337 switch (fEdgeType) { | 342 switch (fEdgeType) { |
| 338 case kHairlineAA_GrProcessorEdgeType: { | 343 case kHairlineAA_GrProcessorEdgeType: { |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 | 499 |
| 495 GrGLCubicEffect::GrGLCubicEffect(const GrGeometryProcessor& processor) | 500 GrGLCubicEffect::GrGLCubicEffect(const GrGeometryProcessor& processor) |
| 496 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL) { | 501 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL) { |
| 497 const GrCubicEffect& ce = processor.cast<GrCubicEffect>(); | 502 const GrCubicEffect& ce = processor.cast<GrCubicEffect>(); |
| 498 fEdgeType = ce.getEdgeType(); | 503 fEdgeType = ce.getEdgeType(); |
| 499 } | 504 } |
| 500 | 505 |
| 501 void GrGLCubicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { | 506 void GrGLCubicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { |
| 502 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; | 507 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; |
| 503 const GrCubicEffect& gp = args.fGP.cast<GrCubicEffect>(); | 508 const GrCubicEffect& gp = args.fGP.cast<GrCubicEffect>(); |
| 509 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; |
| 504 | 510 |
| 505 // emit attributes | 511 // emit attributes |
| 506 vertBuilder->emitAttributes(gp); | 512 varyingHandler->emitAttributes(gp); |
| 507 | 513 |
| 508 GrGLSLVertToFrag v(kVec4f_GrSLType); | 514 GrGLSLVertToFrag v(kVec4f_GrSLType); |
| 509 args.fPB->addVarying("CubicCoeffs", &v, kHigh_GrSLPrecision); | 515 varyingHandler->addVarying("CubicCoeffs", &v, kHigh_GrSLPrecision); |
| 510 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inCubicCoeffs()->fName); | 516 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inCubicCoeffs()->fName); |
| 511 | 517 |
| 512 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 518 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
| 513 // Setup pass through color | 519 // Setup pass through color |
| 514 if (!gp.colorIgnored()) { | 520 if (!gp.colorIgnored()) { |
| 515 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo
rUniform); | 521 this->setupUniformColor(args.fPB, fragBuilder, args.fOutputColor, &fColo
rUniform); |
| 516 } | 522 } |
| 517 | 523 |
| 518 // Setup position | 524 // Setup position |
| 519 this->setupPosition(args.fPB, | 525 this->setupPosition(args.fPB, |
| 520 vertBuilder, | 526 vertBuilder, |
| 521 gpArgs, | 527 gpArgs, |
| 522 gp.inPosition()->fName, | 528 gp.inPosition()->fName, |
| 523 gp.viewMatrix(), | 529 gp.viewMatrix(), |
| 524 &fViewMatrixUniform); | 530 &fViewMatrixUniform); |
| 525 | 531 |
| 526 // emit transforms with position | 532 // emit transforms with position |
| 527 this->emitTransforms(args.fPB, | 533 this->emitTransforms(args.fPB, |
| 528 vertBuilder, | 534 vertBuilder, |
| 535 varyingHandler, |
| 529 gpArgs->fPositionVar, | 536 gpArgs->fPositionVar, |
| 530 gp.inPosition()->fName, | 537 gp.inPosition()->fName, |
| 531 args.fTransformsIn, | 538 args.fTransformsIn, |
| 532 args.fTransformsOut); | 539 args.fTransformsOut); |
| 533 | 540 |
| 534 | 541 |
| 535 GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecisi
on); | 542 GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecisi
on); |
| 536 GrGLSLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); | 543 GrGLSLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); |
| 537 GrGLSLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); | 544 GrGLSLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); |
| 538 GrGLSLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, kHigh_GrSLPrecision); | 545 GrGLSLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, kHigh_GrSLPrecision); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 do { | 672 do { |
| 666 GrPrimitiveEdgeType edgeType = | 673 GrPrimitiveEdgeType edgeType = |
| 667 static_cast<GrPrimitiveEdgeType>( | 674 static_cast<GrPrimitiveEdgeType>( |
| 668 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); | 675 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); |
| 669 gp = GrCubicEffect::Create(GrRandomColor(d->fRandom), | 676 gp = GrCubicEffect::Create(GrRandomColor(d->fRandom), |
| 670 GrTest::TestMatrix(d->fRandom), edgeType, *d-
>fCaps); | 677 GrTest::TestMatrix(d->fRandom), edgeType, *d-
>fCaps); |
| 671 } while (nullptr == gp); | 678 } while (nullptr == gp); |
| 672 return gp; | 679 return gp; |
| 673 } | 680 } |
| 674 | 681 |
| OLD | NEW |