| 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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 GrGLProgramDataManager::UniformHandle fTextureSizeUni; | 158 GrGLProgramDataManager::UniformHandle fTextureSizeUni; |
| 159 SkISize fTextureSize; | 159 SkISize fTextureSize; |
| 160 GrGLProgramDataManager::UniformHandle fLuminanceUni; | 160 GrGLProgramDataManager::UniformHandle fLuminanceUni; |
| 161 float fLuminance; | 161 float fLuminance; |
| 162 | 162 |
| 163 typedef GrGLGeometryProcessor INHERITED; | 163 typedef GrGLGeometryProcessor INHERITED; |
| 164 }; | 164 }; |
| 165 | 165 |
| 166 /////////////////////////////////////////////////////////////////////////////// | 166 /////////////////////////////////////////////////////////////////////////////// |
| 167 | 167 |
| 168 GrDistanceFieldTextureEffect::GrDistanceFieldTextureEffect(GrTexture* texture, | 168 GrDistanceFieldTextureEffect::GrDistanceFieldTextureEffect(GrColor color, |
| 169 GrTexture* texture, |
| 169 const GrTextureParams
& params, | 170 const GrTextureParams
& params, |
| 170 #ifdef SK_GAMMA_APPLY_TO_A8 | 171 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 171 GrTexture* gamma, | 172 GrTexture* gamma, |
| 172 const GrTextureParams
& gammaParams, | 173 const GrTextureParams
& gammaParams, |
| 173 float luminance, | 174 float luminance, |
| 174 #endif | 175 #endif |
| 175 uint32_t flags) | 176 uint32_t flags) |
| 176 : fTextureAccess(texture, params) | 177 : INHERITED(color) |
| 178 , fTextureAccess(texture, params) |
| 177 #ifdef SK_GAMMA_APPLY_TO_A8 | 179 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 178 , fGammaTextureAccess(gamma, gammaParams) | 180 , fGammaTextureAccess(gamma, gammaParams) |
| 179 , fLuminance(luminance) | 181 , fLuminance(luminance) |
| 180 #endif | 182 #endif |
| 181 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) | 183 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) |
| 182 , fInColor(NULL) { | 184 , fInColor(NULL) { |
| 183 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); | 185 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); |
| 184 this->initClassID<GrDistanceFieldTextureEffect>(); | 186 this->initClassID<GrDistanceFieldTextureEffect>(); |
| 185 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert
exAttribType)); | 187 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert
exAttribType)); |
| 186 if (flags & kColorAttr_DistanceFieldEffectFlag) { | 188 if (flags & kColorAttr_DistanceFieldEffectFlag) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], | 244 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], |
| 243 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], | 245 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], |
| 244 }; | 246 }; |
| 245 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil
erp_FilterMode : | 247 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil
erp_FilterMode : |
| 246 GrTextureParams::kNon
e_FilterMode); | 248 GrTextureParams::kNon
e_FilterMode); |
| 247 #ifdef SK_GAMMA_APPLY_TO_A8 | 249 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 248 GrTextureParams params2(tileModes, random->nextBool() ? GrTextureParams::kBi
lerp_FilterMode : | 250 GrTextureParams params2(tileModes, random->nextBool() ? GrTextureParams::kBi
lerp_FilterMode : |
| 249 GrTextureParams::kNo
ne_FilterMode); | 251 GrTextureParams::kNo
ne_FilterMode); |
| 250 #endif | 252 #endif |
| 251 | 253 |
| 252 return GrDistanceFieldTextureEffect::Create(textures[texIdx], params, | 254 return GrDistanceFieldTextureEffect::Create(GrRandomColor(random), textures[
texIdx], params, |
| 253 #ifdef SK_GAMMA_APPLY_TO_A8 | 255 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 254 textures[texIdx2], params2, | 256 textures[texIdx2], params2, |
| 255 random->nextF(), | 257 random->nextF(), |
| 256 #endif | 258 #endif |
| 257 random->nextBool() ? | 259 random->nextBool() ? |
| 258 kSimilarity_DistanceFieldEff
ectFlag : 0); | 260 kSimilarity_DistanceFieldEff
ectFlag : 0); |
| 259 } | 261 } |
| 260 | 262 |
| 261 /////////////////////////////////////////////////////////////////////////////// | 263 /////////////////////////////////////////////////////////////////////////////// |
| 262 | 264 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 | 373 |
| 372 private: | 374 private: |
| 373 GrGLProgramDataManager::UniformHandle fTextureSizeUni; | 375 GrGLProgramDataManager::UniformHandle fTextureSizeUni; |
| 374 SkISize fTextureSize; | 376 SkISize fTextureSize; |
| 375 | 377 |
| 376 typedef GrGLGeometryProcessor INHERITED; | 378 typedef GrGLGeometryProcessor INHERITED; |
| 377 }; | 379 }; |
| 378 | 380 |
| 379 /////////////////////////////////////////////////////////////////////////////// | 381 /////////////////////////////////////////////////////////////////////////////// |
| 380 | 382 |
| 381 GrDistanceFieldNoGammaTextureEffect::GrDistanceFieldNoGammaTextureEffect(GrTextu
re* texture, | 383 GrDistanceFieldNoGammaTextureEffect::GrDistanceFieldNoGammaTextureEffect( |
| 382 const GrText
ureParams& params, | 384 GrColor color, |
| 383 uint32_t fla
gs) | 385 GrTexture* texture, |
| 384 : fTextureAccess(texture, params) | 386 const GrTextureParams& params, |
| 387 uint32_t flags) |
| 388 : INHERITED(color) |
| 389 , fTextureAccess(texture, params) |
| 385 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) | 390 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) |
| 386 , fInColor(NULL) { | 391 , fInColor(NULL) { |
| 387 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); | 392 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); |
| 388 this->initClassID<GrDistanceFieldNoGammaTextureEffect>(); | 393 this->initClassID<GrDistanceFieldNoGammaTextureEffect>(); |
| 389 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert
exAttribType)); | 394 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert
exAttribType)); |
| 390 if (flags & kColorAttr_DistanceFieldEffectFlag) { | 395 if (flags & kColorAttr_DistanceFieldEffectFlag) { |
| 391 fInColor = &this->addVertexAttrib(GrAttribute("inColor", kVec4ub_GrVerte
xAttribType)); | 396 fInColor = &this->addVertexAttrib(GrAttribute("inColor", kVec4ub_GrVerte
xAttribType)); |
| 392 this->setHasVertexColor(); | 397 this->setHasVertexColor(); |
| 393 } | 398 } |
| 394 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords", | 399 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords", |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 SkShader::kRepeat_TileMode, | 437 SkShader::kRepeat_TileMode, |
| 433 SkShader::kMirror_TileMode, | 438 SkShader::kMirror_TileMode, |
| 434 }; | 439 }; |
| 435 SkShader::TileMode tileModes[] = { | 440 SkShader::TileMode tileModes[] = { |
| 436 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], | 441 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], |
| 437 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], | 442 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], |
| 438 }; | 443 }; |
| 439 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil
erp_FilterMode | 444 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil
erp_FilterMode |
| 440 : GrTextureParams::kNon
e_FilterMode); | 445 : GrTextureParams::kNon
e_FilterMode); |
| 441 | 446 |
| 442 return GrDistanceFieldNoGammaTextureEffect::Create(textures[texIdx], params, | 447 return GrDistanceFieldNoGammaTextureEffect::Create(GrRandomColor(random), te
xtures[texIdx], |
| 448 params, |
| 443 random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0); | 449 random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0); |
| 444 } | 450 } |
| 445 | 451 |
| 446 /////////////////////////////////////////////////////////////////////////////// | 452 /////////////////////////////////////////////////////////////////////////////// |
| 447 | 453 |
| 448 class GrGLDistanceFieldLCDTextureEffect : public GrGLGeometryProcessor { | 454 class GrGLDistanceFieldLCDTextureEffect : public GrGLGeometryProcessor { |
| 449 public: | 455 public: |
| 450 GrGLDistanceFieldLCDTextureEffect(const GrGeometryProcessor&, | 456 GrGLDistanceFieldLCDTextureEffect(const GrGeometryProcessor&, |
| 451 const GrBatchTracker&) | 457 const GrBatchTracker&) |
| 452 : fTextureSize(SkISize::Make(-1,-1)) | 458 : fTextureSize(SkISize::Make(-1,-1)) |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 SkISize fTextureSize; | 633 SkISize fTextureSize; |
| 628 GrGLProgramDataManager::UniformHandle fTextColorUni; | 634 GrGLProgramDataManager::UniformHandle fTextColorUni; |
| 629 SkColor fTextColor; | 635 SkColor fTextColor; |
| 630 | 636 |
| 631 typedef GrGLGeometryProcessor INHERITED; | 637 typedef GrGLGeometryProcessor INHERITED; |
| 632 }; | 638 }; |
| 633 | 639 |
| 634 /////////////////////////////////////////////////////////////////////////////// | 640 /////////////////////////////////////////////////////////////////////////////// |
| 635 | 641 |
| 636 GrDistanceFieldLCDTextureEffect::GrDistanceFieldLCDTextureEffect( | 642 GrDistanceFieldLCDTextureEffect::GrDistanceFieldLCDTextureEffect( |
| 643 GrColor color, |
| 637 GrTexture* texture, const GrTe
xtureParams& params, | 644 GrTexture* texture, const GrTe
xtureParams& params, |
| 638 GrTexture* gamma, const GrText
ureParams& gParams, | 645 GrTexture* gamma, const GrText
ureParams& gParams, |
| 639 SkColor textColor, | 646 SkColor textColor, |
| 640 uint32_t flags) | 647 uint32_t flags) |
| 641 : fTextureAccess(texture, params) | 648 : INHERITED(color) |
| 649 , fTextureAccess(texture, params) |
| 642 , fGammaTextureAccess(gamma, gParams) | 650 , fGammaTextureAccess(gamma, gParams) |
| 643 , fTextColor(textColor) | 651 , fTextColor(textColor) |
| 644 , fFlags(flags & kLCD_DistanceFieldEffectMask){ | 652 , fFlags(flags & kLCD_DistanceFieldEffectMask){ |
| 645 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan
ceFieldEffectFlag)); | 653 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan
ceFieldEffectFlag)); |
| 646 this->initClassID<GrDistanceFieldLCDTextureEffect>(); | 654 this->initClassID<GrDistanceFieldLCDTextureEffect>(); |
| 647 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert
exAttribType)); | 655 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert
exAttribType)); |
| 648 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords", | 656 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords", |
| 649 kVec2f_GrVertexAttribT
ype)); | 657 kVec2f_GrVertexAttribT
ype)); |
| 650 this->addTextureAccess(&fTextureAccess); | 658 this->addTextureAccess(&fTextureAccess); |
| 651 this->addTextureAccess(&fGammaTextureAccess); | 659 this->addTextureAccess(&fGammaTextureAccess); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 698 GrTextureParams::kNone_FilterMode); | 706 GrTextureParams::kNone_FilterMode); |
| 699 GrTextureParams params2(tileModes, random->nextBool() ? GrTextureParams::kBi
lerp_FilterMode : | 707 GrTextureParams params2(tileModes, random->nextBool() ? GrTextureParams::kBi
lerp_FilterMode : |
| 700 GrTextureParams::kNone_FilterMode); | 708 GrTextureParams::kNone_FilterMode); |
| 701 GrColor textColor = GrColorPackRGBA(random->nextULessThan(256), | 709 GrColor textColor = GrColorPackRGBA(random->nextULessThan(256), |
| 702 random->nextULessThan(256), | 710 random->nextULessThan(256), |
| 703 random->nextULessThan(256), | 711 random->nextULessThan(256), |
| 704 random->nextULessThan(256)); | 712 random->nextULessThan(256)); |
| 705 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; | 713 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; |
| 706 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; | 714 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; |
| 707 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; | 715 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; |
| 708 return GrDistanceFieldLCDTextureEffect::Create(textures[texIdx], params, | 716 return GrDistanceFieldLCDTextureEffect::Create(GrRandomColor(random), textur
es[texIdx], params, |
| 709 textures[texIdx2], params2, | 717 textures[texIdx2], params2, |
| 710 textColor, | 718 textColor, |
| 711 flags); | 719 flags); |
| 712 } | 720 } |
| OLD | NEW |