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

Side by Side Diff: src/gpu/effects/GrDistanceFieldGeoProc.cpp

Issue 1709133003: Revert of Use unorm shorts for texture coordinates when rendering text. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 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/effects/GrBitmapTextGeoProc.cpp ('k') | src/gpu/gl/GrGLVertexArray.cpp » ('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 "GrDistanceFieldGeoProc.h" 8 #include "GrDistanceFieldGeoProc.h"
9 #include "GrInvariantOutput.h" 9 #include "GrInvariantOutput.h"
10 #include "GrTexture.h" 10 #include "GrTexture.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 this->emitTransforms(vertBuilder, 71 this->emitTransforms(vertBuilder,
72 varyingHandler, 72 varyingHandler,
73 uniformHandler, 73 uniformHandler,
74 gpArgs->fPositionVar, 74 gpArgs->fPositionVar,
75 dfTexEffect.inPosition()->fName, 75 dfTexEffect.inPosition()->fName,
76 args.fTransformsIn, 76 args.fTransformsIn,
77 args.fTransformsOut); 77 args.fTransformsOut);
78 78
79 // add varyings 79 // add varyings
80 GrGLSLVertToFrag recipScale(kFloat_GrSLType); 80 GrGLSLVertToFrag recipScale(kFloat_GrSLType);
81 GrGLSLVertToFrag uv(kVec2f_GrSLType); 81 GrGLSLVertToFrag st(kVec2f_GrSLType);
82 bool isSimilarity = SkToBool(dfTexEffect.getFlags() & kSimilarity_Distan ceFieldEffectFlag); 82 bool isSimilarity = SkToBool(dfTexEffect.getFlags() & kSimilarity_Distan ceFieldEffectFlag);
83 varyingHandler->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); 83 varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision) ;
84 vertBuilder->codeAppendf("%s = %s;", uv.vsOut(), dfTexEffect.inTextureCo ords()->fName); 84 vertBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCo ords()->fName);
85 85
86 // compute numbers to be hardcoded to convert texture coordinates from i nt to float 86 // compute numbers to be hardcoded to convert texture coordinates from i nt to float
87 SkASSERT(dfTexEffect.numTextures() == 1); 87 SkASSERT(dfTexEffect.numTextures() == 1);
88 GrTexture* atlas = dfTexEffect.textureAccess(0).getTexture(); 88 GrTexture* atlas = dfTexEffect.textureAccess(0).getTexture();
89 SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())) ; 89 SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())) ;
90 SkScalar recipWidth = 1.0f / atlas->width();
91 SkScalar recipHeight = 1.0f / atlas->height();
90 92
91 GrGLSLVertToFrag st(kVec2f_GrSLType); 93 GrGLSLVertToFrag uv(kVec2f_GrSLType);
92 varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision) ; 94 varyingHandler->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision);
93 vertBuilder->codeAppendf("%s = vec2(%d, %d) * %s;", st.vsOut(), 95 vertBuilder->codeAppendf("%s = vec2(%.*f, %.*f) * %s;", uv.vsOut(),
94 atlas->width(), atlas->height(), 96 GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipWidth,
97 GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipHeight,
95 dfTexEffect.inTextureCoords()->fName); 98 dfTexEffect.inTextureCoords()->fName);
96 99
97 // Use highp to work around aliasing issues 100 // Use highp to work around aliasing issues
98 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps, 101 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps,
99 kHigh_GrSLPreci sion)); 102 kHigh_GrSLPreci sion));
100 fragBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); 103 fragBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn());
101 104
102 fragBuilder->codeAppend("\tfloat texColor = "); 105 fragBuilder->codeAppend("\tfloat texColor = ");
103 fragBuilder->appendTextureLookup(args.fSamplers[0], 106 fragBuilder->appendTextureLookup(args.fSamplers[0],
104 "uv", 107 "uv",
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 #endif 217 #endif
215 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 218 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
216 , fInColor(nullptr) 219 , fInColor(nullptr)
217 , fUsesLocalCoords(usesLocalCoords) { 220 , fUsesLocalCoords(usesLocalCoords) {
218 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 221 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
219 this->initClassID<GrDistanceFieldA8TextGeoProc>(); 222 this->initClassID<GrDistanceFieldA8TextGeoProc>();
220 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType, 223 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType,
221 kHigh_GrSLPrecision)); 224 kHigh_GrSLPrecision));
222 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexAttri bType)); 225 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexAttri bType));
223 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", 226 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
224 kVec2us_GrVertexAttrib Type)); 227 kVec2s_GrVertexAttribT ype));
225 this->addTextureAccess(&fTextureAccess); 228 this->addTextureAccess(&fTextureAccess);
226 } 229 }
227 230
228 void GrDistanceFieldA8TextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps, 231 void GrDistanceFieldA8TextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps,
229 GrProcessorKeyBuilder* b) const { 232 GrProcessorKeyBuilder* b) const {
230 GrGLDistanceFieldA8TextGeoProc::GenKey(*this, caps, b); 233 GrGLDistanceFieldA8TextGeoProc::GenKey(*this, caps, b);
231 } 234 }
232 235
233 GrGLSLPrimitiveProcessor* GrDistanceFieldA8TextGeoProc::createGLSLInstance(const GrGLSLCaps&) const { 236 GrGLSLPrimitiveProcessor* GrDistanceFieldA8TextGeoProc::createGLSLInstance(const GrGLSLCaps&) const {
234 return new GrGLDistanceFieldA8TextGeoProc(); 237 return new GrGLDistanceFieldA8TextGeoProc();
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 varyingHandler, 515 varyingHandler,
513 uniformHandler, 516 uniformHandler,
514 gpArgs->fPositionVar, 517 gpArgs->fPositionVar,
515 dfTexEffect.inPosition()->fName, 518 dfTexEffect.inPosition()->fName,
516 args.fTransformsIn, 519 args.fTransformsIn,
517 args.fTransformsOut); 520 args.fTransformsOut);
518 521
519 // set up varyings 522 // set up varyings
520 bool isUniformScale = SkToBool(dfTexEffect.getFlags() & kUniformScale_Di stanceFieldEffectMask); 523 bool isUniformScale = SkToBool(dfTexEffect.getFlags() & kUniformScale_Di stanceFieldEffectMask);
521 GrGLSLVertToFrag recipScale(kFloat_GrSLType); 524 GrGLSLVertToFrag recipScale(kFloat_GrSLType);
522 GrGLSLVertToFrag uv(kVec2f_GrSLType); 525 GrGLSLVertToFrag st(kVec2f_GrSLType);
523 varyingHandler->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); 526 varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision) ;
524 vertBuilder->codeAppendf("%s = %s;", uv.vsOut(), dfTexEffect.inTextureCo ords()->fName); 527 vertBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCo ords()->fName);
525 528
526 // compute numbers to be hardcoded to convert texture coordinates from i nt to float 529 // compute numbers to be hardcoded to convert texture coordinates from i nt to float
527 SkASSERT(dfTexEffect.numTextures() == 1); 530 SkASSERT(dfTexEffect.numTextures() == 1);
528 GrTexture* atlas = dfTexEffect.textureAccess(0).getTexture(); 531 GrTexture* atlas = dfTexEffect.textureAccess(0).getTexture();
529 SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())) ; 532 SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())) ;
533 SkScalar recipWidth = 1.0f / atlas->width();
534 SkScalar recipHeight = 1.0f / atlas->height();
530 535
531 GrGLSLVertToFrag st(kVec2f_GrSLType); 536 GrGLSLVertToFrag uv(kVec2f_GrSLType);
532 varyingHandler->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision) ; 537 varyingHandler->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision);
533 vertBuilder->codeAppendf("%s = vec2(%d, %d) * %s;", st.vsOut(), 538 vertBuilder->codeAppendf("%s = vec2(%.*f, %.*f) * %s;", uv.vsOut(),
534 atlas->width(), atlas->height(), 539 GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipWidth,
540 GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipHeight,
535 dfTexEffect.inTextureCoords()->fName); 541 dfTexEffect.inTextureCoords()->fName);
536 542
537 // add frag shader code 543 // add frag shader code
538 544
539 SkAssertResult(fragBuilder->enableFeature( 545 SkAssertResult(fragBuilder->enableFeature(
540 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); 546 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature));
541 547
542 // create LCD offset adjusted by inverse of transform 548 // create LCD offset adjusted by inverse of transform
543 // Use highp to work around aliasing issues 549 // Use highp to work around aliasing issues
544 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps, 550 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps,
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 , fTextureAccess(texture, params) 701 , fTextureAccess(texture, params)
696 , fDistanceAdjust(distanceAdjust) 702 , fDistanceAdjust(distanceAdjust)
697 , fFlags(flags & kLCD_DistanceFieldEffectMask) 703 , fFlags(flags & kLCD_DistanceFieldEffectMask)
698 , fUsesLocalCoords(usesLocalCoords) { 704 , fUsesLocalCoords(usesLocalCoords) {
699 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan ceFieldEffectFlag)); 705 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan ceFieldEffectFlag));
700 this->initClassID<GrDistanceFieldLCDTextGeoProc>(); 706 this->initClassID<GrDistanceFieldLCDTextGeoProc>();
701 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType, 707 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType,
702 kHigh_GrSLPrecision)); 708 kHigh_GrSLPrecision));
703 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexAttri bType)); 709 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexAttri bType));
704 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", 710 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
705 kVec2us_GrVertexAttribTy pe)); 711 kVec2s_GrVertexAttribTyp e));
706 this->addTextureAccess(&fTextureAccess); 712 this->addTextureAccess(&fTextureAccess);
707 } 713 }
708 714
709 void GrDistanceFieldLCDTextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps, 715 void GrDistanceFieldLCDTextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps,
710 GrProcessorKeyBuilder* b ) const { 716 GrProcessorKeyBuilder* b ) const {
711 GrGLDistanceFieldLCDTextGeoProc::GenKey(*this, caps, b); 717 GrGLDistanceFieldLCDTextGeoProc::GenKey(*this, caps, b);
712 } 718 }
713 719
714 GrGLSLPrimitiveProcessor* GrDistanceFieldLCDTextGeoProc::createGLSLInstance(cons t GrGLSLCaps&) const { 720 GrGLSLPrimitiveProcessor* GrDistanceFieldLCDTextGeoProc::createGLSLInstance(cons t GrGLSLCaps&) const {
715 return new GrGLDistanceFieldLCDTextGeoProc(); 721 return new GrGLDistanceFieldLCDTextGeoProc();
(...skipping 21 matching lines...) Expand all
737 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; 743 uint32_t flags = kUseLCD_DistanceFieldEffectFlag;
738 flags |= d->fRandom->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; 744 flags |= d->fRandom->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0;
739 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 745 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
740 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom), 746 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom),
741 GrTest::TestMatrix(d->fRandom), 747 GrTest::TestMatrix(d->fRandom),
742 d->fTextures[texIdx], params, 748 d->fTextures[texIdx], params,
743 wa, 749 wa,
744 flags, 750 flags,
745 d->fRandom->nextBool()); 751 d->fRandom->nextBool());
746 } 752 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrBitmapTextGeoProc.cpp ('k') | src/gpu/gl/GrGLVertexArray.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698