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

Side by Side Diff: src/effects/SkLightingImageFilter.cpp

Issue 1109863004: Use GLSLCaps for creating processor keys and GLSL-specific programs (Closed) Base URL: https://chromium.googlesource.com/skia@master
Patch Set: 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/effects/SkDisplacementMapEffect.cpp ('k') | src/effects/SkLumaColorFilter.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 2012 The Android Open Source Project 2 * Copyright 2012 The Android Open Source Project
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 "SkLightingImageFilter.h" 8 #include "SkLightingImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 return SkNEW_ARGS(GrDiffuseLightingEffect, (texture, 501 return SkNEW_ARGS(GrDiffuseLightingEffect, (texture,
502 light, 502 light,
503 surfaceScale, 503 surfaceScale,
504 matrix, 504 matrix,
505 kd, 505 kd,
506 boundaryMode)); 506 boundaryMode));
507 } 507 }
508 508
509 const char* name() const override { return "DiffuseLighting"; } 509 const char* name() const override { return "DiffuseLighting"; }
510 510
511 void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const overri de; 511 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over ride;
512 512
513 GrGLFragmentProcessor* createGLInstance() const override; 513 GrGLFragmentProcessor* createGLInstance() const override;
514 514
515 SkScalar kd() const { return fKD; } 515 SkScalar kd() const { return fKD; }
516 516
517 private: 517 private:
518 bool onIsEqual(const GrFragmentProcessor&) const override; 518 bool onIsEqual(const GrFragmentProcessor&) const override;
519 519
520 GrDiffuseLightingEffect(GrTexture* texture, 520 GrDiffuseLightingEffect(GrTexture* texture,
521 const SkLight* light, 521 const SkLight* light,
(...skipping 20 matching lines...) Expand all
542 light, 542 light,
543 surfaceScale, 543 surfaceScale,
544 matrix, 544 matrix,
545 ks, 545 ks,
546 shininess, 546 shininess,
547 boundaryMode)); 547 boundaryMode));
548 } 548 }
549 549
550 const char* name() const override { return "SpecularLighting"; } 550 const char* name() const override { return "SpecularLighting"; }
551 551
552 void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const overri de; 552 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over ride;
553 553
554 GrGLFragmentProcessor* createGLInstance() const override; 554 GrGLFragmentProcessor* createGLInstance() const override;
555 555
556 SkScalar ks() const { return fKS; } 556 SkScalar ks() const { return fKS; }
557 SkScalar shininess() const { return fShininess; } 557 SkScalar shininess() const { return fShininess; }
558 558
559 private: 559 private:
560 bool onIsEqual(const GrFragmentProcessor&) const override; 560 bool onIsEqual(const GrFragmentProcessor&) const override;
561 561
562 GrSpecularLightingEffect(GrTexture* texture, 562 GrSpecularLightingEffect(GrTexture* texture,
(...skipping 911 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 GrGLLightingEffect(const GrProcessor&); 1474 GrGLLightingEffect(const GrProcessor&);
1475 virtual ~GrGLLightingEffect(); 1475 virtual ~GrGLLightingEffect();
1476 1476
1477 void emitCode(GrGLFPBuilder*, 1477 void emitCode(GrGLFPBuilder*,
1478 const GrFragmentProcessor&, 1478 const GrFragmentProcessor&,
1479 const char* outputColor, 1479 const char* outputColor,
1480 const char* inputColor, 1480 const char* inputColor,
1481 const TransformedCoordsArray&, 1481 const TransformedCoordsArray&,
1482 const TextureSamplerArray&) override; 1482 const TextureSamplerArray&) override;
1483 1483
1484 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe yBuilder* b); 1484 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder* b);
1485 1485
1486 /** 1486 /**
1487 * Subclasses of GrGLLightingEffect must call INHERITED::setData(); 1487 * Subclasses of GrGLLightingEffect must call INHERITED::setData();
1488 */ 1488 */
1489 void setData(const GrGLProgramDataManager&, const GrProcessor&) override; 1489 void setData(const GrGLProgramDataManager&, const GrProcessor&) override;
1490 1490
1491 protected: 1491 protected:
1492 virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) = 0; 1492 virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) = 0;
1493 1493
1494 private: 1494 private:
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1569 : INHERITED(texture, light, surfaceScale, matrix, boundaryMode), fKD(kd) { 1569 : INHERITED(texture, light, surfaceScale, matrix, boundaryMode), fKD(kd) {
1570 this->initClassID<GrDiffuseLightingEffect>(); 1570 this->initClassID<GrDiffuseLightingEffect>();
1571 } 1571 }
1572 1572
1573 bool GrDiffuseLightingEffect::onIsEqual(const GrFragmentProcessor& sBase) const { 1573 bool GrDiffuseLightingEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
1574 const GrDiffuseLightingEffect& s = sBase.cast<GrDiffuseLightingEffect>(); 1574 const GrDiffuseLightingEffect& s = sBase.cast<GrDiffuseLightingEffect>();
1575 return INHERITED::onIsEqual(sBase) && 1575 return INHERITED::onIsEqual(sBase) &&
1576 this->kd() == s.kd(); 1576 this->kd() == s.kd();
1577 } 1577 }
1578 1578
1579 void GrDiffuseLightingEffect::getGLProcessorKey(const GrGLCaps& caps, 1579 void GrDiffuseLightingEffect::getGLProcessorKey(const GrGLSLCaps& caps,
1580 GrProcessorKeyBuilder* b) const { 1580 GrProcessorKeyBuilder* b) const {
1581 GrGLDiffuseLightingEffect::GenKey(*this, caps, b); 1581 GrGLDiffuseLightingEffect::GenKey(*this, caps, b);
1582 } 1582 }
1583 1583
1584 GrGLFragmentProcessor* GrDiffuseLightingEffect::createGLInstance() const { 1584 GrGLFragmentProcessor* GrDiffuseLightingEffect::createGLInstance() const {
1585 return SkNEW_ARGS(GrGLDiffuseLightingEffect, (*this)); 1585 return SkNEW_ARGS(GrGLDiffuseLightingEffect, (*this));
1586 } 1586 }
1587 1587
1588 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDiffuseLightingEffect); 1588 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDiffuseLightingEffect);
1589 1589
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1702 fsBuilder->codeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ", 1702 fsBuilder->codeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ",
1703 outputColor, lightFunc.c_str(), normalName.c_str(), s urfScale); 1703 outputColor, lightFunc.c_str(), normalName.c_str(), s urfScale);
1704 fLight->emitLightColor(builder, "surfaceToLight"); 1704 fLight->emitLightColor(builder, "surfaceToLight");
1705 fsBuilder->codeAppend(");\n"); 1705 fsBuilder->codeAppend(");\n");
1706 SkString modulate; 1706 SkString modulate;
1707 GrGLSLMulVarBy4f(&modulate, outputColor, inputColor); 1707 GrGLSLMulVarBy4f(&modulate, outputColor, inputColor);
1708 fsBuilder->codeAppend(modulate.c_str()); 1708 fsBuilder->codeAppend(modulate.c_str());
1709 } 1709 }
1710 1710
1711 void GrGLLightingEffect::GenKey(const GrProcessor& proc, 1711 void GrGLLightingEffect::GenKey(const GrProcessor& proc,
1712 const GrGLCaps& caps, GrProcessorKeyBuilder* b) { 1712 const GrGLSLCaps& caps, GrProcessorKeyBuilder* b ) {
1713 const GrLightingEffect& lighting = proc.cast<GrLightingEffect>(); 1713 const GrLightingEffect& lighting = proc.cast<GrLightingEffect>();
1714 b->add32(lighting.boundaryMode() << 2 | lighting.light()->type()); 1714 b->add32(lighting.boundaryMode() << 2 | lighting.light()->type());
1715 } 1715 }
1716 1716
1717 void GrGLLightingEffect::setData(const GrGLProgramDataManager& pdman, 1717 void GrGLLightingEffect::setData(const GrGLProgramDataManager& pdman,
1718 const GrProcessor& proc) { 1718 const GrProcessor& proc) {
1719 const GrLightingEffect& lighting = proc.cast<GrLightingEffect>(); 1719 const GrLightingEffect& lighting = proc.cast<GrLightingEffect>();
1720 GrTexture* texture = lighting.texture(0); 1720 GrTexture* texture = lighting.texture(0);
1721 float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f; 1721 float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f;
1722 pdman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->he ight()); 1722 pdman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->he ight());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1777 this->initClassID<GrSpecularLightingEffect>(); 1777 this->initClassID<GrSpecularLightingEffect>();
1778 } 1778 }
1779 1779
1780 bool GrSpecularLightingEffect::onIsEqual(const GrFragmentProcessor& sBase) const { 1780 bool GrSpecularLightingEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
1781 const GrSpecularLightingEffect& s = sBase.cast<GrSpecularLightingEffect>(); 1781 const GrSpecularLightingEffect& s = sBase.cast<GrSpecularLightingEffect>();
1782 return INHERITED::onIsEqual(sBase) && 1782 return INHERITED::onIsEqual(sBase) &&
1783 this->ks() == s.ks() && 1783 this->ks() == s.ks() &&
1784 this->shininess() == s.shininess(); 1784 this->shininess() == s.shininess();
1785 } 1785 }
1786 1786
1787 void GrSpecularLightingEffect::getGLProcessorKey(const GrGLCaps& caps, 1787 void GrSpecularLightingEffect::getGLProcessorKey(const GrGLSLCaps& caps,
1788 GrProcessorKeyBuilder* b) const { 1788 GrProcessorKeyBuilder* b) const {
1789 GrGLSpecularLightingEffect::GenKey(*this, caps, b); 1789 GrGLSpecularLightingEffect::GenKey(*this, caps, b);
1790 } 1790 }
1791 1791
1792 GrGLFragmentProcessor* GrSpecularLightingEffect::createGLInstance() const { 1792 GrGLFragmentProcessor* GrSpecularLightingEffect::createGLInstance() const {
1793 return SkNEW_ARGS(GrGLSpecularLightingEffect, (*this)); 1793 return SkNEW_ARGS(GrGLSpecularLightingEffect, (*this));
1794 } 1794 }
1795 1795
1796 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSpecularLightingEffect); 1796 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSpecularLightingEffect);
1797 1797
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1986 1986
1987 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); 1987 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight);
1988 } 1988 }
1989 1989
1990 #endif 1990 #endif
1991 1991
1992 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 1992 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
1993 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 1993 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
1994 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 1994 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
1995 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1995 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkDisplacementMapEffect.cpp ('k') | src/effects/SkLumaColorFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698