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 |