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

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

Issue 778453002: Remove backend factories (Closed) Base URL: https://skia.googlesource.com/skia.git@unichoice
Patch Set: cleanup 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 "gl/builders/GrGLProgramBuilder.h" 10 #include "GrTexture.h"
11 #include "SkDistanceFieldGen.h"
11 #include "gl/GrGLProcessor.h" 12 #include "gl/GrGLProcessor.h"
12 #include "gl/GrGLSL.h" 13 #include "gl/GrGLSL.h"
13 #include "gl/GrGLTexture.h" 14 #include "gl/GrGLTexture.h"
14 #include "gl/GrGLGeometryProcessor.h" 15 #include "gl/GrGLGeometryProcessor.h"
15 #include "GrTBackendProcessorFactory.h" 16 #include "gl/builders/GrGLProgramBuilder.h"
16 #include "GrTexture.h"
17
18 #include "SkDistanceFieldGen.h"
19 17
20 // Assuming a radius of the diagonal of the fragment, hence a factor of sqrt(2)/ 2 18 // Assuming a radius of the diagonal of the fragment, hence a factor of sqrt(2)/ 2
21 #define SK_DistanceFieldAAFactor "0.7071" 19 #define SK_DistanceFieldAAFactor "0.7071"
22 20
23 class GrGLDistanceFieldTextureEffect : public GrGLGeometryProcessor { 21 class GrGLDistanceFieldTextureEffect : public GrGLGeometryProcessor {
24 public: 22 public:
25 GrGLDistanceFieldTextureEffect(const GrBackendProcessorFactory& factory, 23 GrGLDistanceFieldTextureEffect(const GrGeometryProcessor&,
26 const GrGeometryProcessor&,
27 const GrBatchTracker&) 24 const GrBatchTracker&)
28 : INHERITED (factory) 25 : fTextureSize(SkISize::Make(-1,-1))
29 , fTextureSize(SkISize::Make(-1,-1))
30 #ifdef SK_GAMMA_APPLY_TO_A8 26 #ifdef SK_GAMMA_APPLY_TO_A8
31 , fLuminance(-1.0f) 27 , fLuminance(-1.0f)
32 #endif 28 #endif
33 {} 29 {}
34 30
35 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 31 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
36 const GrDistanceFieldTextureEffect& dfTexEffect = 32 const GrDistanceFieldTextureEffect& dfTexEffect =
37 args.fGP.cast<GrDistanceFieldTextureEffect>(); 33 args.fGP.cast<GrDistanceFieldTextureEffect>();
38 34
39 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 35 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 #ifdef SK_GAMMA_APPLY_TO_A8 200 #ifdef SK_GAMMA_APPLY_TO_A8
205 fLuminance == cte.fLuminance && 201 fLuminance == cte.fLuminance &&
206 #endif 202 #endif
207 fFlags == cte.fFlags; 203 fFlags == cte.fFlags;
208 } 204 }
209 205
210 void GrDistanceFieldTextureEffect::onComputeInvariantOutput(GrInvariantOutput* i nout) const { 206 void GrDistanceFieldTextureEffect::onComputeInvariantOutput(GrInvariantOutput* i nout) const {
211 inout->mulByUnknownAlpha(); 207 inout->mulByUnknownAlpha();
212 } 208 }
213 209
214 const GrBackendGeometryProcessorFactory& GrDistanceFieldTextureEffect::getFactor y() const { 210 void GrDistanceFieldTextureEffect::getGLProcessorKey(const GrBatchTracker& bt,
215 return GrTBackendGeometryProcessorFactory<GrDistanceFieldTextureEffect>::get Instance(); 211 const GrGLCaps& caps,
212 GrProcessorKeyBuilder* b) c onst {
213 GrGLDistanceFieldTextureEffect::GenKey(*this, bt, caps, b);
214 }
215
216 GrGLGeometryProcessor*
217 GrDistanceFieldTextureEffect::createGLInstance(const GrBatchTracker& bt) const {
218 return SkNEW_ARGS(GrGLDistanceFieldTextureEffect, (*this, bt));
216 } 219 }
217 220
218 /////////////////////////////////////////////////////////////////////////////// 221 ///////////////////////////////////////////////////////////////////////////////
219 222
220 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldTextureEffect); 223 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldTextureEffect);
221 224
222 GrGeometryProcessor* GrDistanceFieldTextureEffect::TestCreate(SkRandom* random, 225 GrGeometryProcessor* GrDistanceFieldTextureEffect::TestCreate(SkRandom* random,
223 GrContext*, 226 GrContext*,
224 const GrDrawTarget Caps&, 227 const GrDrawTarget Caps&,
225 GrTexture* texture s[]) { 228 GrTexture* texture s[]) {
(...skipping 25 matching lines...) Expand all
251 random->nextF(), 254 random->nextF(),
252 #endif 255 #endif
253 random->nextBool() ? 256 random->nextBool() ?
254 kSimilarity_DistanceFieldEff ectFlag : 0); 257 kSimilarity_DistanceFieldEff ectFlag : 0);
255 } 258 }
256 259
257 /////////////////////////////////////////////////////////////////////////////// 260 ///////////////////////////////////////////////////////////////////////////////
258 261
259 class GrGLDistanceFieldNoGammaTextureEffect : public GrGLGeometryProcessor { 262 class GrGLDistanceFieldNoGammaTextureEffect : public GrGLGeometryProcessor {
260 public: 263 public:
261 GrGLDistanceFieldNoGammaTextureEffect(const GrBackendProcessorFactory& facto ry, 264 GrGLDistanceFieldNoGammaTextureEffect(const GrGeometryProcessor&,
262 const GrGeometryProcessor&,
263 const GrBatchTracker&) 265 const GrBatchTracker&)
264 : INHERITED(factory) 266 : fTextureSize(SkISize::Make(-1, -1)) {}
265 , fTextureSize(SkISize::Make(-1, -1)) {}
266 267
267 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 268 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
268 const GrDistanceFieldNoGammaTextureEffect& dfTexEffect = 269 const GrDistanceFieldNoGammaTextureEffect& dfTexEffect =
269 args.fGP.cast<GrDistanceFieldNoGammaTextureEffect>(); 270 args.fGP.cast<GrDistanceFieldNoGammaTextureEffect>();
270 271
271 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 272 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
272 SkAssertResult(fsBuilder->enableFeature( 273 SkAssertResult(fsBuilder->enableFeature(
273 GrGLFragmentShaderBuilder::kStandardDerivat ives_GLSLFeature)); 274 GrGLFragmentShaderBuilder::kStandardDerivat ives_GLSLFeature));
274 275
275 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 276 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 bool GrDistanceFieldNoGammaTextureEffect::onIsEqual(const GrGeometryProcessor& o ther) const { 397 bool GrDistanceFieldNoGammaTextureEffect::onIsEqual(const GrGeometryProcessor& o ther) const {
397 const GrDistanceFieldNoGammaTextureEffect& cte = 398 const GrDistanceFieldNoGammaTextureEffect& cte =
398 other.cast<GrDistanceFieldNoGam maTextureEffect>(); 399 other.cast<GrDistanceFieldNoGam maTextureEffect>();
399 return fFlags == cte.fFlags; 400 return fFlags == cte.fFlags;
400 } 401 }
401 402
402 void GrDistanceFieldNoGammaTextureEffect::onComputeInvariantOutput(GrInvariantOu tput* inout) const { 403 void GrDistanceFieldNoGammaTextureEffect::onComputeInvariantOutput(GrInvariantOu tput* inout) const {
403 inout->mulByUnknownAlpha(); 404 inout->mulByUnknownAlpha();
404 } 405 }
405 406
406 const GrBackendGeometryProcessorFactory& GrDistanceFieldNoGammaTextureEffect::ge tFactory() const { 407 void GrDistanceFieldNoGammaTextureEffect::getGLProcessorKey(const GrBatchTracker & bt,
407 return GrTBackendGeometryProcessorFactory<GrDistanceFieldNoGammaTextureEffec t>::getInstance(); 408 const GrGLCaps& caps ,
409 GrProcessorKeyBuilde r* b) const {
410 GrGLDistanceFieldNoGammaTextureEffect::GenKey(*this, bt, caps, b);
411 }
412
413 GrGLGeometryProcessor*
414 GrDistanceFieldNoGammaTextureEffect::createGLInstance(const GrBatchTracker& bt) const {
415 return SkNEW_ARGS(GrGLDistanceFieldNoGammaTextureEffect, (*this, bt));
408 } 416 }
409 417
410 /////////////////////////////////////////////////////////////////////////////// 418 ///////////////////////////////////////////////////////////////////////////////
411 419
412 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldNoGammaTextureEffect); 420 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldNoGammaTextureEffect);
413 421
414 GrGeometryProcessor* GrDistanceFieldNoGammaTextureEffect::TestCreate(SkRandom* r andom, 422 GrGeometryProcessor* GrDistanceFieldNoGammaTextureEffect::TestCreate(SkRandom* r andom,
415 GrContext*, 423 GrContext*,
416 const GrDra wTargetCaps&, 424 const GrDra wTargetCaps&,
417 GrTexture* textures[]) { 425 GrTexture* textures[]) {
(...skipping 12 matching lines...) Expand all
430 : GrTextureParams::kNon e_FilterMode); 438 : GrTextureParams::kNon e_FilterMode);
431 439
432 return GrDistanceFieldNoGammaTextureEffect::Create(textures[texIdx], params, 440 return GrDistanceFieldNoGammaTextureEffect::Create(textures[texIdx], params,
433 random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0); 441 random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0);
434 } 442 }
435 443
436 /////////////////////////////////////////////////////////////////////////////// 444 ///////////////////////////////////////////////////////////////////////////////
437 445
438 class GrGLDistanceFieldLCDTextureEffect : public GrGLGeometryProcessor { 446 class GrGLDistanceFieldLCDTextureEffect : public GrGLGeometryProcessor {
439 public: 447 public:
440 GrGLDistanceFieldLCDTextureEffect(const GrBackendProcessorFactory& factory, 448 GrGLDistanceFieldLCDTextureEffect(const GrGeometryProcessor&,
441 const GrGeometryProcessor&,
442 const GrBatchTracker&) 449 const GrBatchTracker&)
443 : INHERITED (factory) 450 : fTextureSize(SkISize::Make(-1,-1))
444 , fTextureSize(SkISize::Make(-1,-1))
445 , fTextColor(GrColor_ILLEGAL) {} 451 , fTextColor(GrColor_ILLEGAL) {}
446 452
447 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 453 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
448 const GrDistanceFieldLCDTextureEffect& dfTexEffect = 454 const GrDistanceFieldLCDTextureEffect& dfTexEffect =
449 args.fGP.cast<GrDistanceFieldLCDTextureEffect>(); 455 args.fGP.cast<GrDistanceFieldLCDTextureEffect>();
450 456
451 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 457 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
452 GrGLVertToFrag v(kVec2f_GrSLType); 458 GrGLVertToFrag v(kVec2f_GrSLType);
453 args.fPB->addVarying("TextureCoords", &v); 459 args.fPB->addVarying("TextureCoords", &v);
454 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord s()->fName); 460 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord s()->fName);
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 bool GrDistanceFieldLCDTextureEffect::onIsEqual(const GrGeometryProcessor& other ) const { 651 bool GrDistanceFieldLCDTextureEffect::onIsEqual(const GrGeometryProcessor& other ) const {
646 const GrDistanceFieldLCDTextureEffect& cte = other.cast<GrDistanceFieldLCDTe xtureEffect>(); 652 const GrDistanceFieldLCDTextureEffect& cte = other.cast<GrDistanceFieldLCDTe xtureEffect>();
647 return (fTextColor == cte.fTextColor && 653 return (fTextColor == cte.fTextColor &&
648 fFlags == cte.fFlags); 654 fFlags == cte.fFlags);
649 } 655 }
650 656
651 void GrDistanceFieldLCDTextureEffect::onComputeInvariantOutput(GrInvariantOutput * inout) const { 657 void GrDistanceFieldLCDTextureEffect::onComputeInvariantOutput(GrInvariantOutput * inout) const {
652 inout->mulByUnknownColor(); 658 inout->mulByUnknownColor();
653 } 659 }
654 660
655 const GrBackendGeometryProcessorFactory& GrDistanceFieldLCDTextureEffect::getFac tory() const { 661 void GrDistanceFieldLCDTextureEffect::getGLProcessorKey(const GrBatchTracker& bt ,
656 return GrTBackendGeometryProcessorFactory<GrDistanceFieldLCDTextureEffect>:: getInstance(); 662 const GrGLCaps& caps,
663 GrProcessorKeyBuilder* b ) const {
664 GrGLDistanceFieldLCDTextureEffect::GenKey(*this, bt, caps, b);
665 }
666
667 GrGLGeometryProcessor*
668 GrDistanceFieldLCDTextureEffect::createGLInstance(const GrBatchTracker& bt) cons t {
669 return SkNEW_ARGS(GrGLDistanceFieldLCDTextureEffect, (*this, bt));
657 } 670 }
658 671
659 /////////////////////////////////////////////////////////////////////////////// 672 ///////////////////////////////////////////////////////////////////////////////
660 673
661 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldLCDTextureEffect); 674 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldLCDTextureEffect);
662 675
663 GrGeometryProcessor* GrDistanceFieldLCDTextureEffect::TestCreate(SkRandom* rando m, 676 GrGeometryProcessor* GrDistanceFieldLCDTextureEffect::TestCreate(SkRandom* rando m,
664 GrContext*, 677 GrContext*,
665 const GrDrawTar getCaps&, 678 const GrDrawTar getCaps&,
666 GrTexture* text ures[]) { 679 GrTexture* text ures[]) {
(...skipping 19 matching lines...) Expand all
686 random->nextULessThan(256), 699 random->nextULessThan(256),
687 random->nextULessThan(256)); 700 random->nextULessThan(256));
688 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; 701 uint32_t flags = kUseLCD_DistanceFieldEffectFlag;
689 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; 702 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0;
690 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 703 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
691 return GrDistanceFieldLCDTextureEffect::Create(textures[texIdx], params, 704 return GrDistanceFieldLCDTextureEffect::Create(textures[texIdx], params,
692 textures[texIdx2], params2, 705 textures[texIdx2], params2,
693 textColor, 706 textColor,
694 flags); 707 flags);
695 } 708 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698