| 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 "GrDistanceFieldTextContext.h" | 8 #include "GrDistanceFieldTextContext.h" |
| 9 #include "GrAtlas.h" | 9 #include "GrAtlas.h" |
| 10 #include "SkColorFilter.h" | 10 #include "SkColorFilter.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 static const int kSmallDFFontSize = 32; | 31 static const int kSmallDFFontSize = 32; |
| 32 static const int kSmallDFFontLimit = 32; | 32 static const int kSmallDFFontLimit = 32; |
| 33 static const int kMediumDFFontSize = 64; | 33 static const int kMediumDFFontSize = 64; |
| 34 static const int kMediumDFFontLimit = 64; | 34 static const int kMediumDFFontLimit = 64; |
| 35 static const int kLargeDFFontSize = 128; | 35 static const int kLargeDFFontSize = 128; |
| 36 | 36 |
| 37 namespace { | 37 namespace { |
| 38 // position + texture coord | 38 // position + texture coord |
| 39 extern const GrVertexAttrib gTextVertexAttribs[] = { | 39 extern const GrVertexAttrib gTextVertexAttribs[] = { |
| 40 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBindin
g}, | 40 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBindin
g}, |
| 41 {kVec2f_GrVertexAttribType, sizeof(SkPoint) , kEffect_GrVertexAttribBinding} | 41 {kVec2f_GrVertexAttribType, sizeof(SkPoint) , kGeometryProcessor_GrVertexAtt
ribBinding} |
| 42 }; | 42 }; |
| 43 | 43 |
| 44 static const size_t kTextVASize = 2 * sizeof(SkPoint); | 44 static const size_t kTextVASize = 2 * sizeof(SkPoint); |
| 45 | 45 |
| 46 // position + color + texture coord | 46 // position + color + texture coord |
| 47 extern const GrVertexAttrib gTextVertexWithColorAttribs[] = { | 47 extern const GrVertexAttrib gTextVertexWithColorAttribs[] = { |
| 48 {kVec2f_GrVertexAttribType, 0, kPosition_Gr
VertexAttribBinding}, | 48 {kVec2f_GrVertexAttribType, 0, kPosition_Gr
VertexAttribBinding}, |
| 49 {kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVer
texAttribBinding}, | 49 {kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVer
texAttribBinding}, |
| 50 {kVec2f_GrVertexAttribType, sizeof(SkPoint) + sizeof(GrColor), kEffect_GrVe
rtexAttribBinding} | 50 {kVec2f_GrVertexAttribType, sizeof(SkPoint) + sizeof(GrColor), kGeometryPro
cessor_GrVertexAttribBinding} |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 static const size_t kTextVAColorSize = 2 * sizeof(SkPoint) + sizeof(GrColor); | 53 static const size_t kTextVAColorSize = 2 * sizeof(SkPoint) + sizeof(GrColor); |
| 54 | 54 |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 GrDistanceFieldTextContext::GrDistanceFieldTextContext(GrContext* context, | 57 GrDistanceFieldTextContext::GrDistanceFieldTextContext(GrContext* context, |
| 58 const SkDeviceProperties&
properties, | 58 const SkDeviceProperties&
properties, |
| 59 bool enable) | 59 bool enable) |
| 60 : GrTextContext(context, pro
perties) { | 60 : GrTextContext(context, pro
perties) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 kRectToRect_DistanceFieldEffectFlag : 0; | 133 kRectToRect_DistanceFieldEffectFlag : 0; |
| 134 bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.fPixelGeometry); | 134 bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.fPixelGeometry); |
| 135 flags |= fUseLCDText && useBGR ? kBGR_DistanceFieldEffectFlag : 0; | 135 flags |= fUseLCDText && useBGR ? kBGR_DistanceFieldEffectFlag : 0; |
| 136 | 136 |
| 137 // see if we need to create a new effect | 137 // see if we need to create a new effect |
| 138 if (textureUniqueID != fEffectTextureUniqueID || | 138 if (textureUniqueID != fEffectTextureUniqueID || |
| 139 filteredColor != fEffectColor || | 139 filteredColor != fEffectColor || |
| 140 flags != fEffectFlags) { | 140 flags != fEffectFlags) { |
| 141 if (fUseLCDText) { | 141 if (fUseLCDText) { |
| 142 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredCol
or); | 142 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredCol
or); |
| 143 fCachedEffect.reset(GrDistanceFieldLCDTextureEffect::Create(fCurrTex
ture, | 143 fCachedGeometryProcessor.reset( |
| 144 params, | 144 GrDistanceFieldLCDTextureEffect::Create(fCurrTexture, |
| 145 fGammaTe
xture, | 145 params, |
| 146 gammaPar
ams, | 146 fGammaTexture, |
| 147 colorNoP
reMul, | 147 gammaParams, |
| 148 flags)); | 148 colorNoPreMul, |
| 149 flags)); |
| 149 } else { | 150 } else { |
| 150 #ifdef SK_GAMMA_APPLY_TO_A8 | 151 #ifdef SK_GAMMA_APPLY_TO_A8 |
| 151 U8CPU lum = SkColorSpaceLuminance::computeLuminance(fDevicePropertie
s.getGamma(), | 152 U8CPU lum = SkColorSpaceLuminance::computeLuminance(fDevicePropertie
s.getGamma(), |
| 152 filteredColor); | 153 filteredColor); |
| 153 fCachedEffect.reset(GrDistanceFieldTextureEffect::Create(fCurrTextur
e, | 154 fCachedGeometryProcessor.reset( |
| 154 params, | 155 GrDistanceFieldTextureEffect::Create(fCurrTexture, |
| 155 fGammaTextu
re, | 156 params, |
| 156 gammaParams
, | 157 fGammaTexture, |
| 157 lum/255.f, | 158 gammaParams, |
| 158 flags)); | 159 lum/255.f, |
| 160 flags)); |
| 159 #else | 161 #else |
| 160 fCachedEffect.reset(GrDistanceFieldTextureEffect::Create(fCurrTextur
e, | 162 fCachedGeometryProcessor.reset(GrDistanceFieldTextureEffect::Create(
fCurrTexture, |
| 161 params, fla
gs)); | 163
params, flags)); |
| 162 #endif | 164 #endif |
| 163 } | 165 } |
| 164 fEffectTextureUniqueID = textureUniqueID; | 166 fEffectTextureUniqueID = textureUniqueID; |
| 165 fEffectColor = filteredColor; | 167 fEffectColor = filteredColor; |
| 166 fEffectFlags = flags; | 168 fEffectFlags = flags; |
| 167 } | 169 } |
| 168 | 170 |
| 169 } | 171 } |
| 170 | 172 |
| 171 void GrDistanceFieldTextContext::flushGlyphs() { | 173 void GrDistanceFieldTextContext::flushGlyphs() { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 186 SkColor filteredColor; | 188 SkColor filteredColor; |
| 187 SkColorFilter* colorFilter = fSkPaint.getColorFilter(); | 189 SkColorFilter* colorFilter = fSkPaint.getColorFilter(); |
| 188 if (colorFilter) { | 190 if (colorFilter) { |
| 189 filteredColor = colorFilter->filterColor(fSkPaint.getColor()); | 191 filteredColor = colorFilter->filterColor(fSkPaint.getColor()); |
| 190 } else { | 192 } else { |
| 191 filteredColor = fSkPaint.getColor(); | 193 filteredColor = fSkPaint.getColor(); |
| 192 } | 194 } |
| 193 this->setupCoverageEffect(filteredColor); | 195 this->setupCoverageEffect(filteredColor); |
| 194 | 196 |
| 195 // Effects could be stored with one of the cache objects (atlas?) | 197 // Effects could be stored with one of the cache objects (atlas?) |
| 196 drawState->setGeometryProcessor(fCachedEffect.get()); | 198 drawState->setGeometryProcessor(fCachedGeometryProcessor.get()); |
| 197 | 199 |
| 198 // Set draw state | 200 // Set draw state |
| 199 if (fUseLCDText) { | 201 if (fUseLCDText) { |
| 200 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredCol
or); | 202 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredCol
or); |
| 201 if (kOne_GrBlendCoeff != fPaint.getSrcBlendCoeff() || | 203 if (kOne_GrBlendCoeff != fPaint.getSrcBlendCoeff() || |
| 202 kISA_GrBlendCoeff != fPaint.getDstBlendCoeff() || | 204 kISA_GrBlendCoeff != fPaint.getDstBlendCoeff() || |
| 203 fPaint.numColorStages()) { | 205 fPaint.numColorStages()) { |
| 204 GrPrintf("LCD Text will not draw correctly.\n"); | 206 GrPrintf("LCD Text will not draw correctly.\n"); |
| 205 } | 207 } |
| 206 SkASSERT(!drawState->hasColorVertexAttribute()); | 208 SkASSERT(!drawState->hasColorVertexAttribute()); |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 663 SkScalarToFixed(x) - (glyph.fAdvanceX >> a
lignShift), | 665 SkScalarToFixed(x) - (glyph.fAdvanceX >> a
lignShift), |
| 664 SkScalarToFixed(y) - (glyph.fAdvanceY >> a
lignShift), | 666 SkScalarToFixed(y) - (glyph.fAdvanceY >> a
lignShift), |
| 665 fontScaler); | 667 fontScaler); |
| 666 } | 668 } |
| 667 pos += scalarsPerPosition; | 669 pos += scalarsPerPosition; |
| 668 } | 670 } |
| 669 } | 671 } |
| 670 | 672 |
| 671 this->finish(); | 673 this->finish(); |
| 672 } | 674 } |
| OLD | NEW |