Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: src/gpu/GrDistanceFieldTextContext.cpp

Issue 582963002: Solo gp (Closed) Base URL: https://skia.googlesource.com/skia.git@no_peb
Patch Set: rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/GrDistanceFieldTextContext.h ('k') | src/gpu/GrDrawState.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 kRectToRect_DistanceFieldEffectFlag : 0; 134 kRectToRect_DistanceFieldEffectFlag : 0;
135 bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.fPixelGeometry); 135 bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.fPixelGeometry);
136 flags |= fUseLCDText && useBGR ? kBGR_DistanceFieldEffectFlag : 0; 136 flags |= fUseLCDText && useBGR ? kBGR_DistanceFieldEffectFlag : 0;
137 137
138 // see if we need to create a new effect 138 // see if we need to create a new effect
139 if (textureUniqueID != fEffectTextureUniqueID || 139 if (textureUniqueID != fEffectTextureUniqueID ||
140 filteredColor != fEffectColor || 140 filteredColor != fEffectColor ||
141 flags != fEffectFlags) { 141 flags != fEffectFlags) {
142 if (fUseLCDText) { 142 if (fUseLCDText) {
143 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredCol or); 143 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredCol or);
144 fCachedEffect.reset(GrDistanceFieldLCDTextureEffect::Create(fCurrTex ture, 144 fCachedGeometryProcessor.reset(
145 params, 145 GrDistanceFieldLCDTextureEffect::Create(fCurrTexture,
146 fGammaTe xture, 146 params,
147 gammaPar ams, 147 fGammaTexture,
148 colorNoP reMul, 148 gammaParams,
149 flags)); 149 colorNoPreMul,
150 flags));
150 } else { 151 } else {
151 #ifdef SK_GAMMA_APPLY_TO_A8 152 #ifdef SK_GAMMA_APPLY_TO_A8
152 U8CPU lum = SkColorSpaceLuminance::computeLuminance(fDevicePropertie s.getGamma(), 153 U8CPU lum = SkColorSpaceLuminance::computeLuminance(fDevicePropertie s.getGamma(),
153 filteredColor); 154 filteredColor);
154 fCachedEffect.reset(GrDistanceFieldTextureEffect::Create(fCurrTextur e, 155 fCachedGeometryProcessor.reset(
155 params, 156 GrDistanceFieldTextureEffect::Create(fCurrTexture,
156 fGammaTextu re, 157 params,
157 gammaParams , 158 fGammaTexture,
158 lum/255.f, 159 gammaParams,
159 flags)); 160 lum/255.f,
161 flags));
160 #else 162 #else
161 fCachedEffect.reset(GrDistanceFieldTextureEffect::Create(fCurrTextur e, 163 fCachedGeometryProcessor.reset(GrDistanceFieldTextureEffect::Create( fCurrTexture,
162 params, fla gs)); 164 params, flags));
163 #endif 165 #endif
164 } 166 }
165 fEffectTextureUniqueID = textureUniqueID; 167 fEffectTextureUniqueID = textureUniqueID;
166 fEffectColor = filteredColor; 168 fEffectColor = filteredColor;
167 fEffectFlags = flags; 169 fEffectFlags = flags;
168 } 170 }
169 171
170 } 172 }
171 173
172 void GrDistanceFieldTextContext::flushGlyphs() { 174 void GrDistanceFieldTextContext::flushGlyphs() {
(...skipping 14 matching lines...) Expand all
187 SkColor filteredColor; 189 SkColor filteredColor;
188 SkColorFilter* colorFilter = fSkPaint.getColorFilter(); 190 SkColorFilter* colorFilter = fSkPaint.getColorFilter();
189 if (colorFilter) { 191 if (colorFilter) {
190 filteredColor = colorFilter->filterColor(fSkPaint.getColor()); 192 filteredColor = colorFilter->filterColor(fSkPaint.getColor());
191 } else { 193 } else {
192 filteredColor = fSkPaint.getColor(); 194 filteredColor = fSkPaint.getColor();
193 } 195 }
194 this->setupCoverageEffect(filteredColor); 196 this->setupCoverageEffect(filteredColor);
195 197
196 // Effects could be stored with one of the cache objects (atlas?) 198 // Effects could be stored with one of the cache objects (atlas?)
197 drawState->setGeometryProcessor(fCachedEffect.get()); 199 drawState->setGeometryProcessor(fCachedGeometryProcessor.get());
198 200
199 // Set draw state 201 // Set draw state
200 if (fUseLCDText) { 202 if (fUseLCDText) {
201 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredCol or); 203 GrColor colorNoPreMul = skcolor_to_grcolor_nopremultiply(filteredCol or);
202 if (kOne_GrBlendCoeff != fPaint.getSrcBlendCoeff() || 204 if (kOne_GrBlendCoeff != fPaint.getSrcBlendCoeff() ||
203 kISA_GrBlendCoeff != fPaint.getDstBlendCoeff() || 205 kISA_GrBlendCoeff != fPaint.getDstBlendCoeff() ||
204 fPaint.numColorStages()) { 206 fPaint.numColorStages()) {
205 GrPrintf("LCD Text will not draw correctly.\n"); 207 GrPrintf("LCD Text will not draw correctly.\n");
206 } 208 }
207 SkASSERT(!drawState->hasColorVertexAttribute()); 209 SkASSERT(!drawState->hasColorVertexAttribute());
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 SkScalarToFixed(x) - (glyph.fAdvanceX >> a lignShift), 666 SkScalarToFixed(x) - (glyph.fAdvanceX >> a lignShift),
665 SkScalarToFixed(y) - (glyph.fAdvanceY >> a lignShift), 667 SkScalarToFixed(y) - (glyph.fAdvanceY >> a lignShift),
666 fontScaler); 668 fontScaler);
667 } 669 }
668 pos += scalarsPerPosition; 670 pos += scalarsPerPosition;
669 } 671 }
670 } 672 }
671 673
672 this->finish(); 674 this->finish();
673 } 675 }
OLDNEW
« no previous file with comments | « src/gpu/GrDistanceFieldTextContext.h ('k') | src/gpu/GrDrawState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698