| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "GrAtlasTextBatch.h" | 8 #include "GrAtlasTextBatch.h" |
| 9 | 9 |
| 10 #include "GrBatchFlushState.h" | 10 #include "GrBatchFlushState.h" |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 // TODO just use class params | 257 // TODO just use class params |
| 258 // TODO trying to figure out why lcd is so whack | 258 // TODO trying to figure out why lcd is so whack |
| 259 GrGeometryProcessor* GrAtlasTextBatch::setupDfProcessor(const SkMatrix& viewMatr
ix, | 259 GrGeometryProcessor* GrAtlasTextBatch::setupDfProcessor(const SkMatrix& viewMatr
ix, |
| 260 SkColor filteredColor, | 260 SkColor filteredColor, |
| 261 GrColor color, GrTexture
* texture) const { | 261 GrColor color, GrTexture
* texture) const { |
| 262 GrTextureParams params(SkShader::kClamp_TileMode, GrTextureParams::kBilerp_F
ilterMode); | 262 GrTextureParams params(SkShader::kClamp_TileMode, GrTextureParams::kBilerp_F
ilterMode); |
| 263 bool isLCD = this->isLCD(); | 263 bool isLCD = this->isLCD(); |
| 264 // set up any flags | 264 // set up any flags |
| 265 uint32_t flags = viewMatrix.isSimilarity() ? kSimilarity_DistanceFieldEffect
Flag : 0; | 265 uint32_t flags = viewMatrix.isSimilarity() ? kSimilarity_DistanceFieldEffect
Flag : 0; |
| 266 flags |= viewMatrix.isScaleTranslate() ? kScaleOnly_DistanceFieldEffectFlag
: 0; | 266 flags |= viewMatrix.isScaleTranslate() ? kScaleOnly_DistanceFieldEffectFlag
: 0; |
| 267 flags |= fUseSRGBDistanceTable ? kSRGB_DistanceFieldEffectFlag : 0; | 267 flags |= fUseGammaCorrectDistanceTable ? kGammaCorrect_DistanceFieldEffectFl
ag : 0; |
| 268 | 268 |
| 269 // see if we need to create a new effect | 269 // see if we need to create a new effect |
| 270 if (isLCD) { | 270 if (isLCD) { |
| 271 flags |= kUseLCD_DistanceFieldEffectFlag; | 271 flags |= kUseLCD_DistanceFieldEffectFlag; |
| 272 flags |= fUseBGR ? kBGR_DistanceFieldEffectFlag : 0; | 272 flags |= fUseBGR ? kBGR_DistanceFieldEffectFlag : 0; |
| 273 | 273 |
| 274 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredColor); | 274 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredColor); |
| 275 | 275 |
| 276 float redCorrection = fDistanceAdjustTable->getAdjustment( | 276 float redCorrection = fDistanceAdjustTable->getAdjustment( |
| 277 GrColorUnpackR(colorNoPreMul) >> kDistanceAdjustLumShift, fUseSRGBDi
stanceTable); | 277 GrColorUnpackR(colorNoPreMul) >> kDistanceAdjustLumShift, |
| 278 fUseGammaCorrectDistanceTable); |
| 278 float greenCorrection = fDistanceAdjustTable->getAdjustment( | 279 float greenCorrection = fDistanceAdjustTable->getAdjustment( |
| 279 GrColorUnpackG(colorNoPreMul) >> kDistanceAdjustLumShift, fUseSRGBDi
stanceTable); | 280 GrColorUnpackG(colorNoPreMul) >> kDistanceAdjustLumShift, |
| 281 fUseGammaCorrectDistanceTable); |
| 280 float blueCorrection = fDistanceAdjustTable->getAdjustment( | 282 float blueCorrection = fDistanceAdjustTable->getAdjustment( |
| 281 GrColorUnpackB(colorNoPreMul) >> kDistanceAdjustLumShift, fUseSRGBDi
stanceTable); | 283 GrColorUnpackB(colorNoPreMul) >> kDistanceAdjustLumShift, |
| 284 fUseGammaCorrectDistanceTable); |
| 282 GrDistanceFieldLCDTextGeoProc::DistanceAdjust widthAdjust = | 285 GrDistanceFieldLCDTextGeoProc::DistanceAdjust widthAdjust = |
| 283 GrDistanceFieldLCDTextGeoProc::DistanceAdjust::Make(redCorrection, | 286 GrDistanceFieldLCDTextGeoProc::DistanceAdjust::Make(redCorrection, |
| 284 greenCorrection, | 287 greenCorrection, |
| 285 blueCorrection); | 288 blueCorrection); |
| 286 | 289 |
| 287 return GrDistanceFieldLCDTextGeoProc::Create(color, | 290 return GrDistanceFieldLCDTextGeoProc::Create(color, |
| 288 viewMatrix, | 291 viewMatrix, |
| 289 texture, | 292 texture, |
| 290 params, | 293 params, |
| 291 widthAdjust, | 294 widthAdjust, |
| 292 flags, | 295 flags, |
| 293 this->usesLocalCoords()); | 296 this->usesLocalCoords()); |
| 294 } else { | 297 } else { |
| 295 #ifdef SK_GAMMA_APPLY_TO_A8 | 298 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 296 U8CPU lum = SkColorSpaceLuminance::computeLuminance(SK_GAMMA_EXPONENT, f
ilteredColor); | 299 U8CPU lum = SkColorSpaceLuminance::computeLuminance(SK_GAMMA_EXPONENT, f
ilteredColor); |
| 297 float correction = fDistanceAdjustTable->getAdjustment( | 300 float correction = fDistanceAdjustTable->getAdjustment( |
| 298 lum >> kDistanceAdjustLumShift, fUseSRGBDistanceTable); | 301 lum >> kDistanceAdjustLumShift, fUseGammaCorrectDistanceTable); |
| 299 return GrDistanceFieldA8TextGeoProc::Create(color, | 302 return GrDistanceFieldA8TextGeoProc::Create(color, |
| 300 viewMatrix, | 303 viewMatrix, |
| 301 texture, | 304 texture, |
| 302 params, | 305 params, |
| 303 correction, | 306 correction, |
| 304 flags, | 307 flags, |
| 305 this->usesLocalCoords()); | 308 this->usesLocalCoords()); |
| 306 #else | 309 #else |
| 307 return GrDistanceFieldA8TextGeoProc::Create(color, | 310 return GrDistanceFieldA8TextGeoProc::Create(color, |
| 308 viewMatrix, | 311 viewMatrix, |
| 309 texture, | 312 texture, |
| 310 params, | 313 params, |
| 311 flags, | 314 flags, |
| 312 this->usesLocalCoords()); | 315 this->usesLocalCoords()); |
| 313 #endif | 316 #endif |
| 314 } | 317 } |
| 315 | 318 |
| 316 } | 319 } |
| 317 | 320 |
| 318 void GrBlobRegenHelper::flush() { | 321 void GrBlobRegenHelper::flush() { |
| 319 fBatch->flush(fTarget, fFlushInfo); | 322 fBatch->flush(fTarget, fFlushInfo); |
| 320 } | 323 } |
| OLD | NEW |