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

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

Issue 791743003: Remove GP from drawstate, revision of invariant output for GP (Closed) Base URL: https://skia.googlesource.com/skia.git@color-to-gp
Patch Set: more windows fix Created 6 years 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
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 "GrDistanceFieldTextureEffect.h" 8 #include "GrDistanceFieldTextureEffect.h"
9 #include "GrInvariantOutput.h" 9 #include "GrInvariantOutput.h"
10 #include "GrTexture.h" 10 #include "GrTexture.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 /////////////////////////////////////////////////////////////////////////////// 166 ///////////////////////////////////////////////////////////////////////////////
167 167
168 GrDistanceFieldTextureEffect::GrDistanceFieldTextureEffect(GrColor color, 168 GrDistanceFieldTextureEffect::GrDistanceFieldTextureEffect(GrColor color,
169 GrTexture* texture, 169 GrTexture* texture,
170 const GrTextureParams & params, 170 const GrTextureParams & params,
171 #ifdef SK_GAMMA_APPLY_TO_A8 171 #ifdef SK_GAMMA_APPLY_TO_A8
172 GrTexture* gamma, 172 GrTexture* gamma,
173 const GrTextureParams & gammaParams, 173 const GrTextureParams & gammaParams,
174 float luminance, 174 float luminance,
175 #endif 175 #endif
176 uint32_t flags) 176 uint32_t flags, bool opaqueVertexColors)
177 : INHERITED(color) 177 : INHERITED(color, opaqueVertexColors)
178 , fTextureAccess(texture, params) 178 , fTextureAccess(texture, params)
179 #ifdef SK_GAMMA_APPLY_TO_A8 179 #ifdef SK_GAMMA_APPLY_TO_A8
180 , fGammaTextureAccess(gamma, gammaParams) 180 , fGammaTextureAccess(gamma, gammaParams)
181 , fLuminance(luminance) 181 , fLuminance(luminance)
182 #endif 182 #endif
183 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 183 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
184 , fInColor(NULL) { 184 , fInColor(NULL) {
185 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 185 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
186 this->initClassID<GrDistanceFieldTextureEffect>(); 186 this->initClassID<GrDistanceFieldTextureEffect>();
187 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType)); 187 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType));
(...skipping 11 matching lines...) Expand all
199 199
200 bool GrDistanceFieldTextureEffect::onIsEqual(const GrGeometryProcessor& other) c onst { 200 bool GrDistanceFieldTextureEffect::onIsEqual(const GrGeometryProcessor& other) c onst {
201 const GrDistanceFieldTextureEffect& cte = other.cast<GrDistanceFieldTextureE ffect>(); 201 const GrDistanceFieldTextureEffect& cte = other.cast<GrDistanceFieldTextureE ffect>();
202 return 202 return
203 #ifdef SK_GAMMA_APPLY_TO_A8 203 #ifdef SK_GAMMA_APPLY_TO_A8
204 fLuminance == cte.fLuminance && 204 fLuminance == cte.fLuminance &&
205 #endif 205 #endif
206 fFlags == cte.fFlags; 206 fFlags == cte.fFlags;
207 } 207 }
208 208
209 void GrDistanceFieldTextureEffect::onComputeInvariantOutput(GrInvariantOutput* i nout) const { 209 void GrDistanceFieldTextureEffect::onGetInvariantOutputCoverage(GrInitInvariantO utput* out) const {
210 inout->mulByUnknownAlpha(); 210 out->setUnknownSingleComponent();
211 } 211 }
212 212
213 void GrDistanceFieldTextureEffect::getGLProcessorKey(const GrBatchTracker& bt, 213 void GrDistanceFieldTextureEffect::getGLProcessorKey(const GrBatchTracker& bt,
214 const GrGLCaps& caps, 214 const GrGLCaps& caps,
215 GrProcessorKeyBuilder* b) c onst { 215 GrProcessorKeyBuilder* b) c onst {
216 GrGLDistanceFieldTextureEffect::GenKey(*this, bt, caps, b); 216 GrGLDistanceFieldTextureEffect::GenKey(*this, bt, caps, b);
217 } 217 }
218 218
219 GrGLGeometryProcessor* 219 GrGLGeometryProcessor*
220 GrDistanceFieldTextureEffect::createGLInstance(const GrBatchTracker& bt) const { 220 GrDistanceFieldTextureEffect::createGLInstance(const GrBatchTracker& bt) const {
(...skipping 29 matching lines...) Expand all
250 GrTextureParams params2(tileModes, random->nextBool() ? GrTextureParams::kBi lerp_FilterMode : 250 GrTextureParams params2(tileModes, random->nextBool() ? GrTextureParams::kBi lerp_FilterMode :
251 GrTextureParams::kNo ne_FilterMode); 251 GrTextureParams::kNo ne_FilterMode);
252 #endif 252 #endif
253 253
254 return GrDistanceFieldTextureEffect::Create(GrRandomColor(random), textures[ texIdx], params, 254 return GrDistanceFieldTextureEffect::Create(GrRandomColor(random), textures[ texIdx], params,
255 #ifdef SK_GAMMA_APPLY_TO_A8 255 #ifdef SK_GAMMA_APPLY_TO_A8
256 textures[texIdx2], params2, 256 textures[texIdx2], params2,
257 random->nextF(), 257 random->nextF(),
258 #endif 258 #endif
259 random->nextBool() ? 259 random->nextBool() ?
260 kSimilarity_DistanceFieldEff ectFlag : 0); 260 kSimilarity_DistanceFieldEff ectFlag : 0,
261 random->nextBool());
261 } 262 }
262 263
263 /////////////////////////////////////////////////////////////////////////////// 264 ///////////////////////////////////////////////////////////////////////////////
264 265
265 class GrGLDistanceFieldNoGammaTextureEffect : public GrGLGeometryProcessor { 266 class GrGLDistanceFieldNoGammaTextureEffect : public GrGLGeometryProcessor {
266 public: 267 public:
267 GrGLDistanceFieldNoGammaTextureEffect(const GrGeometryProcessor&, 268 GrGLDistanceFieldNoGammaTextureEffect(const GrGeometryProcessor&,
268 const GrBatchTracker&) 269 const GrBatchTracker&)
269 : fTextureSize(SkISize::Make(-1, -1)) {} 270 : fTextureSize(SkISize::Make(-1, -1)) {}
270 271
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 378
378 typedef GrGLGeometryProcessor INHERITED; 379 typedef GrGLGeometryProcessor INHERITED;
379 }; 380 };
380 381
381 /////////////////////////////////////////////////////////////////////////////// 382 ///////////////////////////////////////////////////////////////////////////////
382 383
383 GrDistanceFieldNoGammaTextureEffect::GrDistanceFieldNoGammaTextureEffect( 384 GrDistanceFieldNoGammaTextureEffect::GrDistanceFieldNoGammaTextureEffect(
384 GrColor color, 385 GrColor color,
385 GrTexture* texture, 386 GrTexture* texture,
386 const GrTextureParams& params, 387 const GrTextureParams& params,
387 uint32_t flags) 388 uint32_t flags,
388 : INHERITED(color) 389 bool opaqueVertexColors)
390 : INHERITED(color, opaqueVertexColors)
389 , fTextureAccess(texture, params) 391 , fTextureAccess(texture, params)
390 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 392 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
391 , fInColor(NULL) { 393 , fInColor(NULL) {
392 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 394 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
393 this->initClassID<GrDistanceFieldNoGammaTextureEffect>(); 395 this->initClassID<GrDistanceFieldNoGammaTextureEffect>();
394 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType)); 396 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType));
395 if (flags & kColorAttr_DistanceFieldEffectFlag) { 397 if (flags & kColorAttr_DistanceFieldEffectFlag) {
396 fInColor = &this->addVertexAttrib(GrAttribute("inColor", kVec4ub_GrVerte xAttribType)); 398 fInColor = &this->addVertexAttrib(GrAttribute("inColor", kVec4ub_GrVerte xAttribType));
397 this->setHasVertexColor(); 399 this->setHasVertexColor();
398 } 400 }
399 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords", 401 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords",
400 kVec2f_GrVertexAttribT ype)); 402 kVec2f_GrVertexAttribT ype));
401 this->addTextureAccess(&fTextureAccess); 403 this->addTextureAccess(&fTextureAccess);
402 } 404 }
403 405
404 bool GrDistanceFieldNoGammaTextureEffect::onIsEqual(const GrGeometryProcessor& o ther) const { 406 bool GrDistanceFieldNoGammaTextureEffect::onIsEqual(const GrGeometryProcessor& o ther) const {
405 const GrDistanceFieldNoGammaTextureEffect& cte = 407 const GrDistanceFieldNoGammaTextureEffect& cte =
406 other.cast<GrDistanceFieldNoGam maTextureEffect>(); 408 other.cast<GrDistanceFieldNoGam maTextureEffect>();
407 return fFlags == cte.fFlags; 409 return fFlags == cte.fFlags;
408 } 410 }
409 411
410 void GrDistanceFieldNoGammaTextureEffect::onComputeInvariantOutput(GrInvariantOu tput* inout) const { 412 void GrDistanceFieldNoGammaTextureEffect::onGetInvariantOutputCoverage(GrInitInv ariantOutput* out) const{
411 inout->mulByUnknownAlpha(); 413 out->setUnknownSingleComponent();
412 } 414 }
413 415
414 void GrDistanceFieldNoGammaTextureEffect::getGLProcessorKey(const GrBatchTracker & bt, 416 void GrDistanceFieldNoGammaTextureEffect::getGLProcessorKey(const GrBatchTracker & bt,
415 const GrGLCaps& caps , 417 const GrGLCaps& caps ,
416 GrProcessorKeyBuilde r* b) const { 418 GrProcessorKeyBuilde r* b) const {
417 GrGLDistanceFieldNoGammaTextureEffect::GenKey(*this, bt, caps, b); 419 GrGLDistanceFieldNoGammaTextureEffect::GenKey(*this, bt, caps, b);
418 } 420 }
419 421
420 GrGLGeometryProcessor* 422 GrGLGeometryProcessor*
421 GrDistanceFieldNoGammaTextureEffect::createGLInstance(const GrBatchTracker& bt) const { 423 GrDistanceFieldNoGammaTextureEffect::createGLInstance(const GrBatchTracker& bt) const {
(...skipping 17 matching lines...) Expand all
439 }; 441 };
440 SkShader::TileMode tileModes[] = { 442 SkShader::TileMode tileModes[] = {
441 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], 443 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
442 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], 444 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
443 }; 445 };
444 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil erp_FilterMode 446 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil erp_FilterMode
445 : GrTextureParams::kNon e_FilterMode); 447 : GrTextureParams::kNon e_FilterMode);
446 448
447 return GrDistanceFieldNoGammaTextureEffect::Create(GrRandomColor(random), te xtures[texIdx], 449 return GrDistanceFieldNoGammaTextureEffect::Create(GrRandomColor(random), te xtures[texIdx],
448 params, 450 params,
449 random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0); 451 random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0, random->ne xtBool());
450 } 452 }
451 453
452 /////////////////////////////////////////////////////////////////////////////// 454 ///////////////////////////////////////////////////////////////////////////////
453 455
454 class GrGLDistanceFieldLCDTextureEffect : public GrGLGeometryProcessor { 456 class GrGLDistanceFieldLCDTextureEffect : public GrGLGeometryProcessor {
455 public: 457 public:
456 GrGLDistanceFieldLCDTextureEffect(const GrGeometryProcessor&, 458 GrGLDistanceFieldLCDTextureEffect(const GrGeometryProcessor&,
457 const GrBatchTracker&) 459 const GrBatchTracker&)
458 : fTextureSize(SkISize::Make(-1,-1)) 460 : fTextureSize(SkISize::Make(-1,-1))
459 , fTextColor(GrColor_ILLEGAL) {} 461 , fTextColor(GrColor_ILLEGAL) {}
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 this->addTextureAccess(&fTextureAccess); 660 this->addTextureAccess(&fTextureAccess);
659 this->addTextureAccess(&fGammaTextureAccess); 661 this->addTextureAccess(&fGammaTextureAccess);
660 } 662 }
661 663
662 bool GrDistanceFieldLCDTextureEffect::onIsEqual(const GrGeometryProcessor& other ) const { 664 bool GrDistanceFieldLCDTextureEffect::onIsEqual(const GrGeometryProcessor& other ) const {
663 const GrDistanceFieldLCDTextureEffect& cte = other.cast<GrDistanceFieldLCDTe xtureEffect>(); 665 const GrDistanceFieldLCDTextureEffect& cte = other.cast<GrDistanceFieldLCDTe xtureEffect>();
664 return (fTextColor == cte.fTextColor && 666 return (fTextColor == cte.fTextColor &&
665 fFlags == cte.fFlags); 667 fFlags == cte.fFlags);
666 } 668 }
667 669
668 void GrDistanceFieldLCDTextureEffect::onComputeInvariantOutput(GrInvariantOutput * inout) const { 670 void GrDistanceFieldLCDTextureEffect::onGetInvariantOutputCoverage(GrInitInvaria ntOutput* out) const {
669 inout->mulByUnknownColor(); 671 out->setUnknownFourComponents();
670 inout->setUsingLCDCoverage(); 672 out->setUsingLCDCoverage();
671 } 673 }
672 674
673 void GrDistanceFieldLCDTextureEffect::getGLProcessorKey(const GrBatchTracker& bt , 675 void GrDistanceFieldLCDTextureEffect::getGLProcessorKey(const GrBatchTracker& bt ,
674 const GrGLCaps& caps, 676 const GrGLCaps& caps,
675 GrProcessorKeyBuilder* b ) const { 677 GrProcessorKeyBuilder* b ) const {
676 GrGLDistanceFieldLCDTextureEffect::GenKey(*this, bt, caps, b); 678 GrGLDistanceFieldLCDTextureEffect::GenKey(*this, bt, caps, b);
677 } 679 }
678 680
679 GrGLGeometryProcessor* 681 GrGLGeometryProcessor*
680 GrDistanceFieldLCDTextureEffect::createGLInstance(const GrBatchTracker& bt) cons t { 682 GrDistanceFieldLCDTextureEffect::createGLInstance(const GrBatchTracker& bt) cons t {
(...skipping 30 matching lines...) Expand all
711 random->nextULessThan(256), 713 random->nextULessThan(256),
712 random->nextULessThan(256)); 714 random->nextULessThan(256));
713 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; 715 uint32_t flags = kUseLCD_DistanceFieldEffectFlag;
714 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; 716 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0;
715 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 717 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
716 return GrDistanceFieldLCDTextureEffect::Create(GrRandomColor(random), textur es[texIdx], params, 718 return GrDistanceFieldLCDTextureEffect::Create(GrRandomColor(random), textur es[texIdx], params,
717 textures[texIdx2], params2, 719 textures[texIdx2], params2,
718 textColor, 720 textColor,
719 flags); 721 flags);
720 } 722 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrDistanceFieldTextureEffect.h ('k') | src/gpu/effects/GrMatrixConvolutionEffect.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698