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

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

Issue 1131513005: remove localmatrix from GrGeometryProcessor base class (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanup4
Patch Set: tweaks Created 5 years, 7 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/GrDashingEffect.cpp ('k') | src/gpu/gl/GrGLGeometryProcessor.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 "GrDistanceFieldGeoProc.h" 8 #include "GrDistanceFieldGeoProc.h"
9 #include "GrFontAtlasSizes.h" 9 #include "GrFontAtlasSizes.h"
10 #include "GrInvariantOutput.h" 10 #include "GrInvariantOutput.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 #endif 61 #endif
62 62
63 // Setup pass through color 63 // Setup pass through color
64 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor , 64 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor ,
65 dfTexEffect.inColor(), &fColorUniform); 65 dfTexEffect.inColor(), &fColorUniform);
66 66
67 // Setup position 67 // Setup position
68 this->setupPosition(pb, gpArgs, dfTexEffect.inPosition()->fName, dfTexEf fect.viewMatrix()); 68 this->setupPosition(pb, gpArgs, dfTexEffect.inPosition()->fName, dfTexEf fect.viewMatrix());
69 69
70 // emit transforms 70 // emit transforms
71 const SkMatrix& localMatrix = dfTexEffect.localMatrix();
72 this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosit ion()->fName, 71 this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosit ion()->fName,
73 localMatrix, args.fTransformsIn, args.fTransformsOu t); 72 args.fTransformsIn, args.fTransformsOut);
74 73
75 // add varyings 74 // add varyings
76 GrGLVertToFrag recipScale(kFloat_GrSLType); 75 GrGLVertToFrag recipScale(kFloat_GrSLType);
77 GrGLVertToFrag st(kVec2f_GrSLType); 76 GrGLVertToFrag st(kVec2f_GrSLType);
78 bool isSimilarity = SkToBool(dfTexEffect.getFlags() & kSimilarity_Distan ceFieldEffectFlag); 77 bool isSimilarity = SkToBool(dfTexEffect.getFlags() & kSimilarity_Distan ceFieldEffectFlag);
79 args.fPB->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); 78 args.fPB->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision);
80 vsBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCoor ds()->fName); 79 vsBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCoor ds()->fName);
81 80
82 GrGLVertToFrag uv(kVec2f_GrSLType); 81 GrGLVertToFrag uv(kVec2f_GrSLType);
83 args.fPB->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); 82 args.fPB->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 } 164 }
166 165
167 static inline void GenKey(const GrGeometryProcessor& gp, 166 static inline void GenKey(const GrGeometryProcessor& gp,
168 const GrBatchTracker& bt, 167 const GrBatchTracker& bt,
169 const GrGLSLCaps&, 168 const GrGLSLCaps&,
170 GrProcessorKeyBuilder* b) { 169 GrProcessorKeyBuilder* b) {
171 const GrDistanceFieldA8TextGeoProc& dfTexEffect = gp.cast<GrDistanceFiel dA8TextGeoProc>(); 170 const GrDistanceFieldA8TextGeoProc& dfTexEffect = gp.cast<GrDistanceFiel dA8TextGeoProc>();
172 const DistanceFieldBatchTracker& local = bt.cast<DistanceFieldBatchTrack er>(); 171 const DistanceFieldBatchTracker& local = bt.cast<DistanceFieldBatchTrack er>();
173 uint32_t key = dfTexEffect.getFlags(); 172 uint32_t key = dfTexEffect.getFlags();
174 key |= local.fInputColorType << 16; 173 key |= local.fInputColorType << 16;
175 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0;
176 key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25; 174 key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25;
177 b->add32(key); 175 b->add32(key);
178 } 176 }
179 177
180 private: 178 private:
181 GrColor fColor; 179 GrColor fColor;
182 UniformHandle fColorUniform; 180 UniformHandle fColorUniform;
183 #ifdef SK_GAMMA_APPLY_TO_A8 181 #ifdef SK_GAMMA_APPLY_TO_A8
184 float fDistanceAdjust; 182 float fDistanceAdjust;
185 UniformHandle fDistanceAdjustUni; 183 UniformHandle fDistanceAdjustUni;
186 #endif 184 #endif
187 185
188 typedef GrGLGeometryProcessor INHERITED; 186 typedef GrGLGeometryProcessor INHERITED;
189 }; 187 };
190 188
191 /////////////////////////////////////////////////////////////////////////////// 189 ///////////////////////////////////////////////////////////////////////////////
192 190
193 GrDistanceFieldA8TextGeoProc::GrDistanceFieldA8TextGeoProc(GrColor color, 191 GrDistanceFieldA8TextGeoProc::GrDistanceFieldA8TextGeoProc(GrColor color,
194 const SkMatrix& viewM atrix, 192 const SkMatrix& viewM atrix,
195 GrTexture* texture, 193 GrTexture* texture,
196 const GrTextureParams & params, 194 const GrTextureParams & params,
197 #ifdef SK_GAMMA_APPLY_TO_A8 195 #ifdef SK_GAMMA_APPLY_TO_A8
198 float distanceAdjust, 196 float distanceAdjust,
199 #endif 197 #endif
200 uint32_t flags) 198 uint32_t flags)
201 : INHERITED(SkMatrix::I()) 199 : fColor(color)
202 , fColor(color)
203 , fViewMatrix(viewMatrix) 200 , fViewMatrix(viewMatrix)
204 , fTextureAccess(texture, params) 201 , fTextureAccess(texture, params)
205 #ifdef SK_GAMMA_APPLY_TO_A8 202 #ifdef SK_GAMMA_APPLY_TO_A8
206 , fDistanceAdjust(distanceAdjust) 203 , fDistanceAdjust(distanceAdjust)
207 #endif 204 #endif
208 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 205 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
209 , fInColor(NULL) { 206 , fInColor(NULL) {
210 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 207 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
211 this->initClassID<GrDistanceFieldA8TextGeoProc>(); 208 this->initClassID<GrDistanceFieldA8TextGeoProc>();
212 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType)); 209 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType));
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor , 302 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor ,
306 dfTexEffect.inColor(), &fColorUniform); 303 dfTexEffect.inColor(), &fColorUniform);
307 304
308 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord s()->fName); 305 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord s()->fName);
309 306
310 // Setup position 307 // Setup position
311 this->setupPosition(pb, gpArgs, dfTexEffect.inPosition()->fName, dfTexEf fect.viewMatrix()); 308 this->setupPosition(pb, gpArgs, dfTexEffect.inPosition()->fName, dfTexEf fect.viewMatrix());
312 309
313 // emit transforms 310 // emit transforms
314 this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosit ion()->fName, 311 this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosit ion()->fName,
315 dfTexEffect.localMatrix(), args.fTransformsIn, args .fTransformsOut); 312 args.fTransformsIn, args.fTransformsOut);
316 313
317 const char* textureSizeUniName = NULL; 314 const char* textureSizeUniName = NULL;
318 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 315 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility,
319 kVec2f_GrSLType, kDefault_GrSLPrec ision, 316 kVec2f_GrSLType, kDefault_GrSLPrec ision,
320 "TextureSize", &textureSizeUniName ); 317 "TextureSize", &textureSizeUniName );
321 318
322 // Use highp to work around aliasing issues 319 // Use highp to work around aliasing issues
323 fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision , 320 fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision ,
324 pb->ctxInfo().stand ard())); 321 pb->ctxInfo().stand ard()));
325 fsBuilder->codeAppendf("vec2 uv = %s;", v.fsIn()); 322 fsBuilder->codeAppendf("vec2 uv = %s;", v.fsIn());
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 395
399 static inline void GenKey(const GrGeometryProcessor& gp, 396 static inline void GenKey(const GrGeometryProcessor& gp,
400 const GrBatchTracker& bt, 397 const GrBatchTracker& bt,
401 const GrGLSLCaps&, 398 const GrGLSLCaps&,
402 GrProcessorKeyBuilder* b) { 399 GrProcessorKeyBuilder* b) {
403 const GrDistanceFieldPathGeoProc& dfTexEffect = gp.cast<GrDistanceFieldP athGeoProc>(); 400 const GrDistanceFieldPathGeoProc& dfTexEffect = gp.cast<GrDistanceFieldP athGeoProc>();
404 401
405 const DistanceFieldPathBatchTracker& local = bt.cast<DistanceFieldPathBa tchTracker>(); 402 const DistanceFieldPathBatchTracker& local = bt.cast<DistanceFieldPathBa tchTracker>();
406 uint32_t key = dfTexEffect.getFlags(); 403 uint32_t key = dfTexEffect.getFlags();
407 key |= local.fInputColorType << 16; 404 key |= local.fInputColorType << 16;
408 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0;
409 key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25; 405 key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25;
410 b->add32(key); 406 b->add32(key);
411 } 407 }
412 408
413 private: 409 private:
414 UniformHandle fColorUniform; 410 UniformHandle fColorUniform;
415 UniformHandle fTextureSizeUni; 411 UniformHandle fTextureSizeUni;
416 GrColor fColor; 412 GrColor fColor;
417 SkISize fTextureSize; 413 SkISize fTextureSize;
418 414
419 typedef GrGLGeometryProcessor INHERITED; 415 typedef GrGLGeometryProcessor INHERITED;
420 }; 416 };
421 417
422 /////////////////////////////////////////////////////////////////////////////// 418 ///////////////////////////////////////////////////////////////////////////////
423 419
424 GrDistanceFieldPathGeoProc::GrDistanceFieldPathGeoProc( 420 GrDistanceFieldPathGeoProc::GrDistanceFieldPathGeoProc(
425 GrColor color, 421 GrColor color,
426 const SkMatrix& viewMatrix, 422 const SkMatrix& viewMatrix,
427 GrTexture* texture, 423 GrTexture* texture,
428 const GrTextureParams& params, 424 const GrTextureParams& params,
429 uint32_t flags) 425 uint32_t flags)
430 : INHERITED(SkMatrix::I()) 426 : fColor(color)
431 , fColor(color)
432 , fViewMatrix(viewMatrix) 427 , fViewMatrix(viewMatrix)
433 , fTextureAccess(texture, params) 428 , fTextureAccess(texture, params)
434 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 429 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
435 , fInColor(NULL) { 430 , fInColor(NULL) {
436 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 431 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
437 this->initClassID<GrDistanceFieldPathGeoProc>(); 432 this->initClassID<GrDistanceFieldPathGeoProc>();
438 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType)); 433 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType));
439 if (flags & kColorAttr_DistanceFieldEffectFlag) { 434 if (flags & kColorAttr_DistanceFieldEffectFlag) {
440 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA ttribType)); 435 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA ttribType));
441 } 436 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 vsBuilder->emitAttributes(dfTexEffect); 514 vsBuilder->emitAttributes(dfTexEffect);
520 515
521 // setup pass through color 516 // setup pass through color
522 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor , NULL, 517 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor , NULL,
523 &fColorUniform); 518 &fColorUniform);
524 519
525 // Setup position 520 // Setup position
526 this->setupPosition(pb, gpArgs, dfTexEffect.inPosition()->fName, dfTexEf fect.viewMatrix()); 521 this->setupPosition(pb, gpArgs, dfTexEffect.inPosition()->fName, dfTexEf fect.viewMatrix());
527 522
528 // emit transforms 523 // emit transforms
529 const SkMatrix& localMatrix = dfTexEffect.localMatrix();
530 this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosit ion()->fName, 524 this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosit ion()->fName,
531 localMatrix, args.fTransformsIn, args.fTransformsOu t); 525 args.fTransformsIn, args.fTransformsOut);
532 526
533 // set up varyings 527 // set up varyings
534 bool isUniformScale = SkToBool(dfTexEffect.getFlags() & kUniformScale_Di stanceFieldEffectMask); 528 bool isUniformScale = SkToBool(dfTexEffect.getFlags() & kUniformScale_Di stanceFieldEffectMask);
535 GrGLVertToFrag recipScale(kFloat_GrSLType); 529 GrGLVertToFrag recipScale(kFloat_GrSLType);
536 GrGLVertToFrag st(kVec2f_GrSLType); 530 GrGLVertToFrag st(kVec2f_GrSLType);
537 args.fPB->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); 531 args.fPB->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision);
538 vsBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCoor ds()->fName); 532 vsBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCoor ds()->fName);
539 533
540 GrGLVertToFrag uv(kVec2f_GrSLType); 534 GrGLVertToFrag uv(kVec2f_GrSLType);
541 args.fPB->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); 535 args.fPB->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 663
670 static inline void GenKey(const GrGeometryProcessor& gp, 664 static inline void GenKey(const GrGeometryProcessor& gp,
671 const GrBatchTracker& bt, 665 const GrBatchTracker& bt,
672 const GrGLSLCaps&, 666 const GrGLSLCaps&,
673 GrProcessorKeyBuilder* b) { 667 GrProcessorKeyBuilder* b) {
674 const GrDistanceFieldLCDTextGeoProc& dfTexEffect = gp.cast<GrDistanceFie ldLCDTextGeoProc>(); 668 const GrDistanceFieldLCDTextGeoProc& dfTexEffect = gp.cast<GrDistanceFie ldLCDTextGeoProc>();
675 669
676 const DistanceFieldLCDBatchTracker& local = bt.cast<DistanceFieldLCDBatc hTracker>(); 670 const DistanceFieldLCDBatchTracker& local = bt.cast<DistanceFieldLCDBatc hTracker>();
677 uint32_t key = dfTexEffect.getFlags(); 671 uint32_t key = dfTexEffect.getFlags();
678 key |= local.fInputColorType << 16; 672 key |= local.fInputColorType << 16;
679 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0;
680 key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25; 673 key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25;
681 b->add32(key); 674 b->add32(key);
682 } 675 }
683 676
684 private: 677 private:
685 GrColor fColor; 678 GrColor fColor;
686 UniformHandle fColorUniform; 679 UniformHandle fColorUniform;
687 GrDistanceFieldLCDTextGeoProc::DistanceAdjust fDistanceAdjust; 680 GrDistanceFieldLCDTextGeoProc::DistanceAdjust fDistanceAdjust;
688 UniformHandle fDistanceAdjustUni; 681 UniformHandle fDistanceAdjustUni;
689 682
690 typedef GrGLGeometryProcessor INHERITED; 683 typedef GrGLGeometryProcessor INHERITED;
691 }; 684 };
692 685
693 /////////////////////////////////////////////////////////////////////////////// 686 ///////////////////////////////////////////////////////////////////////////////
694 687
695 GrDistanceFieldLCDTextGeoProc::GrDistanceFieldLCDTextGeoProc( 688 GrDistanceFieldLCDTextGeoProc::GrDistanceFieldLCDTextGeoProc(
696 GrColor color, const SkMatrix& viewMatrix, 689 GrColor color, const SkMatrix& viewMatrix,
697 GrTexture* texture, const GrTe xtureParams& params, 690 GrTexture* texture, const GrTe xtureParams& params,
698 DistanceAdjust distanceAdjust, 691 DistanceAdjust distanceAdjust,
699 uint32_t flags) 692 uint32_t flags)
700 : INHERITED(SkMatrix::I()) 693 : fColor(color)
701 , fColor(color)
702 , fViewMatrix(viewMatrix) 694 , fViewMatrix(viewMatrix)
703 , fTextureAccess(texture, params) 695 , fTextureAccess(texture, params)
704 , fDistanceAdjust(distanceAdjust) 696 , fDistanceAdjust(distanceAdjust)
705 , fFlags(flags & kLCD_DistanceFieldEffectMask){ 697 , fFlags(flags & kLCD_DistanceFieldEffectMask){
706 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan ceFieldEffectFlag)); 698 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan ceFieldEffectFlag));
707 this->initClassID<GrDistanceFieldLCDTextGeoProc>(); 699 this->initClassID<GrDistanceFieldLCDTextGeoProc>();
708 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType)); 700 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType));
709 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", 701 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
710 kVec2s_GrVertexAttribT ype)); 702 kVec2s_GrVertexAttribT ype));
711 this->addTextureAccess(&fTextureAccess); 703 this->addTextureAccess(&fTextureAccess);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 DistanceAdjust wa = { 0.0f, 0.1f, -0.1f }; 746 DistanceAdjust wa = { 0.0f, 0.1f, -0.1f };
755 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; 747 uint32_t flags = kUseLCD_DistanceFieldEffectFlag;
756 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; 748 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0;
757 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 749 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
758 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random), 750 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random),
759 GrTest::TestMatrix(random), 751 GrTest::TestMatrix(random),
760 textures[texIdx], params, 752 textures[texIdx], params,
761 wa, 753 wa,
762 flags); 754 flags);
763 } 755 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrDashingEffect.cpp ('k') | src/gpu/gl/GrGLGeometryProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698