| 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 "GrDistanceFieldTextureEffect.h" | 8 #include "GrDistanceFieldTextureEffect.h" |
| 9 #include "GrInvariantOutput.h" | 9 #include "GrInvariantOutput.h" |
| 10 #include "GrTexture.h" | 10 #include "GrTexture.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 | 46 |
| 47 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); | 47 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
| 48 GrGLVertToFrag v(kVec2f_GrSLType); | 48 GrGLVertToFrag v(kVec2f_GrSLType); |
| 49 args.fPB->addVarying("TextureCoords", &v); | 49 args.fPB->addVarying("TextureCoords", &v); |
| 50 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord
s()->fName); | 50 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord
s()->fName); |
| 51 | 51 |
| 52 // Setup pass through color | 52 // Setup pass through color |
| 53 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor
, | 53 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor
, |
| 54 dfTexEffect.inColor(), &fColorUniform); | 54 dfTexEffect.inColor(), &fColorUniform); |
| 55 | 55 |
| 56 // setup uniform viewMatrix |
| 57 this->setupUniformViewMatrix(pb); |
| 58 |
| 56 // setup position varying | 59 // setup position varying |
| 57 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition()
, | 60 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition()
, |
| 58 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN
ame); | 61 this->uViewM(), dfTexEffect.inPosition()->fName); |
| 59 | 62 |
| 60 // setup output coords | 63 // setup output coords |
| 61 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), | 64 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), |
| 62 dfTexEffect.inPosition()->fName); | 65 dfTexEffect.inPosition()->fName); |
| 63 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), | 66 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), |
| 64 dfTexEffect.inPosition()->fName); | 67 dfTexEffect.inPosition()->fName); |
| 65 | 68 |
| 66 const char* textureSizeUniName = NULL; | 69 const char* textureSizeUniName = NULL; |
| 67 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis
ibility, | 70 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis
ibility, |
| 68 kVec2f_GrSLType, kDefault_GrSLPre
cision, | 71 kVec2f_GrSLType, kDefault_GrSLPre
cision, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 #ifdef SK_GAMMA_APPLY_TO_A8 | 146 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 144 const GrDistanceFieldTextureEffect& dfTexEffect = | 147 const GrDistanceFieldTextureEffect& dfTexEffect = |
| 145 proc.cast<GrDistanceFieldTextureEffect>(); | 148 proc.cast<GrDistanceFieldTextureEffect>(); |
| 146 float luminance = dfTexEffect.getLuminance(); | 149 float luminance = dfTexEffect.getLuminance(); |
| 147 if (luminance != fLuminance) { | 150 if (luminance != fLuminance) { |
| 148 pdman.set1f(fLuminanceUni, luminance); | 151 pdman.set1f(fLuminanceUni, luminance); |
| 149 fLuminance = luminance; | 152 fLuminance = luminance; |
| 150 } | 153 } |
| 151 #endif | 154 #endif |
| 152 | 155 |
| 156 this->setUniformViewMatrix(pdman, proc.viewMatrix()); |
| 157 |
| 153 const DistanceFieldBatchTracker& local = bt.cast<DistanceFieldBatchTrack
er>(); | 158 const DistanceFieldBatchTracker& local = bt.cast<DistanceFieldBatchTrack
er>(); |
| 154 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { | 159 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { |
| 155 GrGLfloat c[4]; | 160 GrGLfloat c[4]; |
| 156 GrColorToRGBAFloat(local.fColor, c); | 161 GrColorToRGBAFloat(local.fColor, c); |
| 157 pdman.set4fv(fColorUniform, 1, c); | 162 pdman.set4fv(fColorUniform, 1, c); |
| 158 fColor = local.fColor; | 163 fColor = local.fColor; |
| 159 } | 164 } |
| 160 } | 165 } |
| 161 | 166 |
| 162 static inline void GenKey(const GrGeometryProcessor& processor, | 167 static inline void GenKey(const GrGeometryProcessor& processor, |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 dfTexEffect.inColor(), &fColorUniform); | 341 dfTexEffect.inColor(), &fColorUniform); |
| 337 | 342 |
| 338 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord
s()->fName); | 343 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord
s()->fName); |
| 339 | 344 |
| 340 // setup coord outputs | 345 // setup coord outputs |
| 341 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), | 346 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), |
| 342 dfTexEffect.inPosition()->fName); | 347 dfTexEffect.inPosition()->fName); |
| 343 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), | 348 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), |
| 344 dfTexEffect.inPosition()->fName); | 349 dfTexEffect.inPosition()->fName); |
| 345 | 350 |
| 351 // setup uniform viewMatrix |
| 352 this->setupUniformViewMatrix(pb); |
| 353 |
| 346 // setup position varying | 354 // setup position varying |
| 347 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition()
, | 355 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition()
, |
| 348 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN
ame); | 356 this->uViewM(), dfTexEffect.inPosition()->fName); |
| 349 | 357 |
| 350 const char* textureSizeUniName = NULL; | 358 const char* textureSizeUniName = NULL; |
| 351 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis
ibility, | 359 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis
ibility, |
| 352 kVec2f_GrSLType, kDefault_GrSLPrec
ision, | 360 kVec2f_GrSLType, kDefault_GrSLPrec
ision, |
| 353 "TextureSize", &textureSizeUniName
); | 361 "TextureSize", &textureSizeUniName
); |
| 354 | 362 |
| 355 fsBuilder->codeAppend("vec4 texColor = "); | 363 fsBuilder->codeAppend("vec4 texColor = "); |
| 356 fsBuilder->appendTextureLookup(args.fSamplers[0], | 364 fsBuilder->appendTextureLookup(args.fSamplers[0], |
| 357 v.fsIn(), | 365 v.fsIn(), |
| 358 kVec2f_GrSLType); | 366 kVec2f_GrSLType); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 | 411 |
| 404 GrTexture* texture = proc.texture(0); | 412 GrTexture* texture = proc.texture(0); |
| 405 if (texture->width() != fTextureSize.width() || | 413 if (texture->width() != fTextureSize.width() || |
| 406 texture->height() != fTextureSize.height()) { | 414 texture->height() != fTextureSize.height()) { |
| 407 fTextureSize = SkISize::Make(texture->width(), texture->height()); | 415 fTextureSize = SkISize::Make(texture->width(), texture->height()); |
| 408 pdman.set2f(fTextureSizeUni, | 416 pdman.set2f(fTextureSizeUni, |
| 409 SkIntToScalar(fTextureSize.width()), | 417 SkIntToScalar(fTextureSize.width()), |
| 410 SkIntToScalar(fTextureSize.height())); | 418 SkIntToScalar(fTextureSize.height())); |
| 411 } | 419 } |
| 412 | 420 |
| 421 this->setUniformViewMatrix(pdman, proc.viewMatrix()); |
| 422 |
| 413 const DistanceFieldNoGammaBatchTracker& local = bt.cast<DistanceFieldNoG
ammaBatchTracker>(); | 423 const DistanceFieldNoGammaBatchTracker& local = bt.cast<DistanceFieldNoG
ammaBatchTracker>(); |
| 414 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { | 424 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { |
| 415 GrGLfloat c[4]; | 425 GrGLfloat c[4]; |
| 416 GrColorToRGBAFloat(local.fColor, c); | 426 GrColorToRGBAFloat(local.fColor, c); |
| 417 pdman.set4fv(fColorUniform, 1, c); | 427 pdman.set4fv(fColorUniform, 1, c); |
| 418 fColor = local.fColor; | 428 fColor = local.fColor; |
| 419 } | 429 } |
| 420 } | 430 } |
| 421 | 431 |
| 422 static inline void GenKey(const GrGeometryProcessor& proc, | 432 static inline void GenKey(const GrGeometryProcessor& proc, |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 // setup pass through color | 576 // setup pass through color |
| 567 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor
, NULL, | 577 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor
, NULL, |
| 568 &fColorUniform); | 578 &fColorUniform); |
| 569 | 579 |
| 570 // setup coord outputs | 580 // setup coord outputs |
| 571 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), | 581 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), |
| 572 dfTexEffect.inPosition()->fName); | 582 dfTexEffect.inPosition()->fName); |
| 573 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), | 583 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), |
| 574 dfTexEffect.inPosition()->fName); | 584 dfTexEffect.inPosition()->fName); |
| 575 | 585 |
| 586 // setup uniform viewMatrix |
| 587 this->setupUniformViewMatrix(pb); |
| 588 |
| 576 // setup position varying | 589 // setup position varying |
| 577 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition()
, | 590 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition()
, this->uViewM(), |
| 578 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN
ame); | 591 dfTexEffect.inPosition()->fName); |
| 579 | 592 |
| 580 const char* textureSizeUniName = NULL; | 593 const char* textureSizeUniName = NULL; |
| 581 // width, height, 1/(3*width) | 594 // width, height, 1/(3*width) |
| 582 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis
ibility, | 595 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis
ibility, |
| 583 kVec3f_GrSLType, kDefault_GrSLPrec
ision, | 596 kVec3f_GrSLType, kDefault_GrSLPrec
ision, |
| 584 "TextureSize", &textureSizeUniName
); | 597 "TextureSize", &textureSizeUniName
); |
| 585 | 598 |
| 586 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); | 599 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
| 587 | 600 |
| 588 SkAssertResult(fsBuilder->enableFeature( | 601 SkAssertResult(fsBuilder->enableFeature( |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 GrColor textColor = dfTexEffect.getTextColor(); | 723 GrColor textColor = dfTexEffect.getTextColor(); |
| 711 if (textColor != fTextColor) { | 724 if (textColor != fTextColor) { |
| 712 static const float ONE_OVER_255 = 1.f / 255.f; | 725 static const float ONE_OVER_255 = 1.f / 255.f; |
| 713 pdman.set3f(fTextColorUni, | 726 pdman.set3f(fTextColorUni, |
| 714 GrColorUnpackR(textColor) * ONE_OVER_255, | 727 GrColorUnpackR(textColor) * ONE_OVER_255, |
| 715 GrColorUnpackG(textColor) * ONE_OVER_255, | 728 GrColorUnpackG(textColor) * ONE_OVER_255, |
| 716 GrColorUnpackB(textColor) * ONE_OVER_255); | 729 GrColorUnpackB(textColor) * ONE_OVER_255); |
| 717 fTextColor = textColor; | 730 fTextColor = textColor; |
| 718 } | 731 } |
| 719 | 732 |
| 733 this->setUniformViewMatrix(pdman, processor.viewMatrix()); |
| 734 |
| 720 const DistanceFieldLCDBatchTracker& local = bt.cast<DistanceFieldLCDBatc
hTracker>(); | 735 const DistanceFieldLCDBatchTracker& local = bt.cast<DistanceFieldLCDBatc
hTracker>(); |
| 721 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { | 736 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { |
| 722 GrGLfloat c[4]; | 737 GrGLfloat c[4]; |
| 723 GrColorToRGBAFloat(local.fColor, c); | 738 GrColorToRGBAFloat(local.fColor, c); |
| 724 pdman.set4fv(fColorUniform, 1, c); | 739 pdman.set4fv(fColorUniform, 1, c); |
| 725 fColor = local.fColor; | 740 fColor = local.fColor; |
| 726 } | 741 } |
| 727 } | 742 } |
| 728 | 743 |
| 729 static inline void GenKey(const GrGeometryProcessor& processor, | 744 static inline void GenKey(const GrGeometryProcessor& processor, |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 845 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; | 860 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; |
| 846 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; | 861 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; |
| 847 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; | 862 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; |
| 848 return GrDistanceFieldLCDTextureEffect::Create(GrRandomColor(random), | 863 return GrDistanceFieldLCDTextureEffect::Create(GrRandomColor(random), |
| 849 GrProcessorUnitTest::TestMatr
ix(random), | 864 GrProcessorUnitTest::TestMatr
ix(random), |
| 850 textures[texIdx], params, | 865 textures[texIdx], params, |
| 851 textures[texIdx2], params2, | 866 textures[texIdx2], params2, |
| 852 textColor, | 867 textColor, |
| 853 flags); | 868 flags); |
| 854 } | 869 } |
| OLD | NEW |