| OLD | NEW |
| 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" |
| 11 #include "SkDevice.h" | 11 #include "SkDevice.h" |
| 12 #include "SkPoint3.h" | 12 #include "SkPoint3.h" |
| 13 #include "SkReadBuffer.h" | 13 #include "SkReadBuffer.h" |
| 14 #include "SkTypes.h" | 14 #include "SkTypes.h" |
| 15 #include "SkWriteBuffer.h" | 15 #include "SkWriteBuffer.h" |
| 16 | 16 |
| 17 #if SK_SUPPORT_GPU | 17 #if SK_SUPPORT_GPU |
| 18 #include "GrContext.h" | 18 #include "GrContext.h" |
| 19 #include "GrDrawContext.h" | 19 #include "GrDrawContext.h" |
| 20 #include "GrFragmentProcessor.h" | 20 #include "GrFragmentProcessor.h" |
| 21 #include "GrInvariantOutput.h" | 21 #include "GrInvariantOutput.h" |
| 22 #include "GrPaint.h" | 22 #include "GrPaint.h" |
| 23 #include "effects/GrSingleTextureEffect.h" | 23 #include "effects/GrSingleTextureEffect.h" |
| 24 #include "glsl/GrGLSLFragmentProcessor.h" | 24 #include "glsl/GrGLSLFragmentProcessor.h" |
| 25 #include "glsl/GrGLSLFragmentShaderBuilder.h" | 25 #include "glsl/GrGLSLFragmentShaderBuilder.h" |
| 26 #include "glsl/GrGLSLProgramBuilder.h" | |
| 27 #include "glsl/GrGLSLProgramDataManager.h" | 26 #include "glsl/GrGLSLProgramDataManager.h" |
| 27 #include "glsl/GrGLSLUniformHandler.h" |
| 28 | 28 |
| 29 class GrGLDiffuseLightingEffect; | 29 class GrGLDiffuseLightingEffect; |
| 30 class GrGLSpecularLightingEffect; | 30 class GrGLSpecularLightingEffect; |
| 31 | 31 |
| 32 // For brevity | 32 // For brevity |
| 33 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; | 33 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
| 34 #endif | 34 #endif |
| 35 | 35 |
| 36 namespace { | 36 namespace { |
| 37 | 37 |
| (...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 /////////////////////////////////////////////////////////////////////////////// | 592 /////////////////////////////////////////////////////////////////////////////// |
| 593 | 593 |
| 594 class GrGLLight { | 594 class GrGLLight { |
| 595 public: | 595 public: |
| 596 virtual ~GrGLLight() {} | 596 virtual ~GrGLLight() {} |
| 597 | 597 |
| 598 /** | 598 /** |
| 599 * This is called by GrGLLightingEffect::emitCode() before either of the two
virtual functions | 599 * This is called by GrGLLightingEffect::emitCode() before either of the two
virtual functions |
| 600 * below. It adds a vec3f uniform visible in the FS that represents the cons
tant light color. | 600 * below. It adds a vec3f uniform visible in the FS that represents the cons
tant light color. |
| 601 */ | 601 */ |
| 602 void emitLightColorUniform(GrGLSLFPBuilder*); | 602 void emitLightColorUniform(GrGLSLUniformHandler*); |
| 603 | 603 |
| 604 /** | 604 /** |
| 605 * These two functions are called from GrGLLightingEffect's emitCode() funct
ion. | 605 * These two functions are called from GrGLLightingEffect's emitCode() funct
ion. |
| 606 * emitSurfaceToLight places an expression in param out that is the vector f
rom the surface to | 606 * emitSurfaceToLight places an expression in param out that is the vector f
rom the surface to |
| 607 * the light. The expression will be used in the FS. emitLightColor writes a
n expression into | 607 * the light. The expression will be used in the FS. emitLightColor writes a
n expression into |
| 608 * the FS that is the color of the light. Either function may add functions
and/or uniforms to | 608 * the FS that is the color of the light. Either function may add functions
and/or uniforms to |
| 609 * the FS. The default of emitLightColor appends the name of the constant li
ght color uniform | 609 * the FS. The default of emitLightColor appends the name of the constant li
ght color uniform |
| 610 * and so this function only needs to be overridden if the light color varie
s spatially. | 610 * and so this function only needs to be overridden if the light color varie
s spatially. |
| 611 */ | 611 */ |
| 612 virtual void emitSurfaceToLight(GrGLSLFPBuilder*, GrGLSLFragmentBuilder*, co
nst char* z) = 0; | 612 virtual void emitSurfaceToLight(GrGLSLUniformHandler*, |
| 613 virtual void emitLightColor(GrGLSLFPBuilder*, | 613 GrGLSLFragmentBuilder*, |
| 614 const char* z) = 0; |
| 615 virtual void emitLightColor(GrGLSLUniformHandler*, |
| 614 GrGLSLFragmentBuilder*, | 616 GrGLSLFragmentBuilder*, |
| 615 const char *surfaceToLight); | 617 const char *surfaceToLight); |
| 616 | 618 |
| 617 // This is called from GrGLLightingEffect's setData(). Subclasses of GrGLLig
ht must call | 619 // This is called from GrGLLightingEffect's setData(). Subclasses of GrGLLig
ht must call |
| 618 // INHERITED::setData(). | 620 // INHERITED::setData(). |
| 619 virtual void setData(const GrGLSLProgramDataManager&, const SkImageFilterLig
ht* light) const; | 621 virtual void setData(const GrGLSLProgramDataManager&, const SkImageFilterLig
ht* light) const; |
| 620 | 622 |
| 621 protected: | 623 protected: |
| 622 /** | 624 /** |
| 623 * Gets the constant light color uniform. Subclasses can use this in their e
mitLightColor | 625 * Gets the constant light color uniform. Subclasses can use this in their e
mitLightColor |
| 624 * function. | 626 * function. |
| 625 */ | 627 */ |
| 626 UniformHandle lightColorUni() const { return fColorUni; } | 628 UniformHandle lightColorUni() const { return fColorUni; } |
| 627 | 629 |
| 628 private: | 630 private: |
| 629 UniformHandle fColorUni; | 631 UniformHandle fColorUni; |
| 630 | 632 |
| 631 typedef SkRefCnt INHERITED; | 633 typedef SkRefCnt INHERITED; |
| 632 }; | 634 }; |
| 633 | 635 |
| 634 /////////////////////////////////////////////////////////////////////////////// | 636 /////////////////////////////////////////////////////////////////////////////// |
| 635 | 637 |
| 636 class GrGLDistantLight : public GrGLLight { | 638 class GrGLDistantLight : public GrGLLight { |
| 637 public: | 639 public: |
| 638 virtual ~GrGLDistantLight() {} | 640 virtual ~GrGLDistantLight() {} |
| 639 void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* ligh
t) const override; | 641 void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* ligh
t) const override; |
| 640 void emitSurfaceToLight(GrGLSLFPBuilder*, GrGLSLFragmentBuilder*, const char
* z) override; | 642 void emitSurfaceToLight(GrGLSLUniformHandler*, GrGLSLFragmentBuilder*, const
char* z) override; |
| 641 | 643 |
| 642 private: | 644 private: |
| 643 typedef GrGLLight INHERITED; | 645 typedef GrGLLight INHERITED; |
| 644 UniformHandle fDirectionUni; | 646 UniformHandle fDirectionUni; |
| 645 }; | 647 }; |
| 646 | 648 |
| 647 /////////////////////////////////////////////////////////////////////////////// | 649 /////////////////////////////////////////////////////////////////////////////// |
| 648 | 650 |
| 649 class GrGLPointLight : public GrGLLight { | 651 class GrGLPointLight : public GrGLLight { |
| 650 public: | 652 public: |
| 651 virtual ~GrGLPointLight() {} | 653 virtual ~GrGLPointLight() {} |
| 652 void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* ligh
t) const override; | 654 void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* ligh
t) const override; |
| 653 void emitSurfaceToLight(GrGLSLFPBuilder*, GrGLSLFragmentBuilder*, const char
* z) override; | 655 void emitSurfaceToLight(GrGLSLUniformHandler*, GrGLSLFragmentBuilder*, const
char* z) override; |
| 654 | 656 |
| 655 private: | 657 private: |
| 656 typedef GrGLLight INHERITED; | 658 typedef GrGLLight INHERITED; |
| 657 UniformHandle fLocationUni; | 659 UniformHandle fLocationUni; |
| 658 }; | 660 }; |
| 659 | 661 |
| 660 /////////////////////////////////////////////////////////////////////////////// | 662 /////////////////////////////////////////////////////////////////////////////// |
| 661 | 663 |
| 662 class GrGLSpotLight : public GrGLLight { | 664 class GrGLSpotLight : public GrGLLight { |
| 663 public: | 665 public: |
| 664 virtual ~GrGLSpotLight() {} | 666 virtual ~GrGLSpotLight() {} |
| 665 void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* ligh
t) const override; | 667 void setData(const GrGLSLProgramDataManager&, const SkImageFilterLight* ligh
t) const override; |
| 666 void emitSurfaceToLight(GrGLSLFPBuilder*, GrGLSLFragmentBuilder*, const char
* z) override; | 668 void emitSurfaceToLight(GrGLSLUniformHandler*, GrGLSLFragmentBuilder*, const
char* z) override; |
| 667 void emitLightColor(GrGLSLFPBuilder*, | 669 void emitLightColor(GrGLSLUniformHandler*, |
| 668 GrGLSLFragmentBuilder*, | 670 GrGLSLFragmentBuilder*, |
| 669 const char *surfaceToLight) override; | 671 const char *surfaceToLight) override; |
| 670 | 672 |
| 671 private: | 673 private: |
| 672 typedef GrGLLight INHERITED; | 674 typedef GrGLLight INHERITED; |
| 673 | 675 |
| 674 SkString fLightColorFunc; | 676 SkString fLightColorFunc; |
| 675 UniformHandle fLocationUni; | 677 UniformHandle fLocationUni; |
| 676 UniformHandle fExponentUni; | 678 UniformHandle fExponentUni; |
| 677 UniformHandle fCosOuterConeAngleUni; | 679 UniformHandle fCosOuterConeAngleUni; |
| (...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1521 void emitCode(EmitArgs&) override; | 1523 void emitCode(EmitArgs&) override; |
| 1522 | 1524 |
| 1523 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder* b); | 1525 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder* b); |
| 1524 | 1526 |
| 1525 protected: | 1527 protected: |
| 1526 /** | 1528 /** |
| 1527 * Subclasses of GrGLLightingEffect must call INHERITED::onSetData(); | 1529 * Subclasses of GrGLLightingEffect must call INHERITED::onSetData(); |
| 1528 */ | 1530 */ |
| 1529 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 1531 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
| 1530 | 1532 |
| 1531 virtual void emitLightFunc(GrGLSLFPBuilder*, GrGLSLFragmentBuilder*, SkStrin
g* funcName) = 0; | 1533 virtual void emitLightFunc(GrGLSLUniformHandler*, |
| 1534 GrGLSLFragmentBuilder*, |
| 1535 SkString* funcName) = 0; |
| 1532 | 1536 |
| 1533 private: | 1537 private: |
| 1534 typedef GrGLSLFragmentProcessor INHERITED; | 1538 typedef GrGLSLFragmentProcessor INHERITED; |
| 1535 | 1539 |
| 1536 UniformHandle fImageIncrementUni; | 1540 UniformHandle fImageIncrementUni; |
| 1537 UniformHandle fSurfaceScaleUni; | 1541 UniformHandle fSurfaceScaleUni; |
| 1538 GrGLLight* fLight; | 1542 GrGLLight* fLight; |
| 1539 BoundaryMode fBoundaryMode; | 1543 BoundaryMode fBoundaryMode; |
| 1540 }; | 1544 }; |
| 1541 | 1545 |
| 1542 /////////////////////////////////////////////////////////////////////////////// | 1546 /////////////////////////////////////////////////////////////////////////////// |
| 1543 | 1547 |
| 1544 class GrGLDiffuseLightingEffect : public GrGLLightingEffect { | 1548 class GrGLDiffuseLightingEffect : public GrGLLightingEffect { |
| 1545 public: | 1549 public: |
| 1546 GrGLDiffuseLightingEffect(const GrProcessor&); | 1550 GrGLDiffuseLightingEffect(const GrProcessor&); |
| 1547 void emitLightFunc(GrGLSLFPBuilder*, GrGLSLFragmentBuilder*, SkString* funcN
ame) override; | 1551 void emitLightFunc(GrGLSLUniformHandler*, GrGLSLFragmentBuilder*, SkString*
funcName) override; |
| 1548 | 1552 |
| 1549 protected: | 1553 protected: |
| 1550 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 1554 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
| 1551 | 1555 |
| 1552 private: | 1556 private: |
| 1553 typedef GrGLLightingEffect INHERITED; | 1557 typedef GrGLLightingEffect INHERITED; |
| 1554 | 1558 |
| 1555 UniformHandle fKDUni; | 1559 UniformHandle fKDUni; |
| 1556 }; | 1560 }; |
| 1557 | 1561 |
| 1558 /////////////////////////////////////////////////////////////////////////////// | 1562 /////////////////////////////////////////////////////////////////////////////// |
| 1559 | 1563 |
| 1560 class GrGLSpecularLightingEffect : public GrGLLightingEffect { | 1564 class GrGLSpecularLightingEffect : public GrGLLightingEffect { |
| 1561 public: | 1565 public: |
| 1562 GrGLSpecularLightingEffect(const GrProcessor&); | 1566 GrGLSpecularLightingEffect(const GrProcessor&); |
| 1563 void emitLightFunc(GrGLSLFPBuilder*, GrGLSLFragmentBuilder*, SkString* funcN
ame) override; | 1567 void emitLightFunc(GrGLSLUniformHandler*, GrGLSLFragmentBuilder*, SkString*
funcName) override; |
| 1564 | 1568 |
| 1565 protected: | 1569 protected: |
| 1566 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 1570 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
| 1567 | 1571 |
| 1568 private: | 1572 private: |
| 1569 typedef GrGLLightingEffect INHERITED; | 1573 typedef GrGLLightingEffect INHERITED; |
| 1570 | 1574 |
| 1571 UniformHandle fKSUni; | 1575 UniformHandle fKSUni; |
| 1572 UniformHandle fShininessUni; | 1576 UniformHandle fShininessUni; |
| 1573 }; | 1577 }; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1650 const GrLightingEffect& m = fp.cast<GrLightingEffect>(); | 1654 const GrLightingEffect& m = fp.cast<GrLightingEffect>(); |
| 1651 fLight = m.light()->createGLLight(); | 1655 fLight = m.light()->createGLLight(); |
| 1652 fBoundaryMode = m.boundaryMode(); | 1656 fBoundaryMode = m.boundaryMode(); |
| 1653 } | 1657 } |
| 1654 | 1658 |
| 1655 GrGLLightingEffect::~GrGLLightingEffect() { | 1659 GrGLLightingEffect::~GrGLLightingEffect() { |
| 1656 delete fLight; | 1660 delete fLight; |
| 1657 } | 1661 } |
| 1658 | 1662 |
| 1659 void GrGLLightingEffect::emitCode(EmitArgs& args) { | 1663 void GrGLLightingEffect::emitCode(EmitArgs& args) { |
| 1660 fImageIncrementUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragme
nt_Visibility, | 1664 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
| 1661 kVec2f_GrSLType, kDefault_GrSLPrec
ision, | 1665 fImageIncrementUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragm
ent_Visibility, |
| 1662 "ImageIncrement"); | 1666 kVec2f_GrSLType, kDefault_Gr
SLPrecision, |
| 1663 fSurfaceScaleUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment
_Visibility, | 1667 "ImageIncrement"); |
| 1664 kFloat_GrSLType, kDefault_GrSLPrecisi
on, | 1668 fSurfaceScaleUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragmen
t_Visibility, |
| 1665 "SurfaceScale"); | 1669 kFloat_GrSLType, kDefault_GrSL
Precision, |
| 1666 fLight->emitLightColorUniform(args.fBuilder); | 1670 "SurfaceScale"); |
| 1671 fLight->emitLightColorUniform(uniformHandler); |
| 1667 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 1672 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
| 1668 SkString lightFunc; | 1673 SkString lightFunc; |
| 1669 this->emitLightFunc(args.fBuilder, fragBuilder, &lightFunc); | 1674 this->emitLightFunc(uniformHandler, fragBuilder, &lightFunc); |
| 1670 static const GrGLSLShaderVar gSobelArgs[] = { | 1675 static const GrGLSLShaderVar gSobelArgs[] = { |
| 1671 GrGLSLShaderVar("a", kFloat_GrSLType), | 1676 GrGLSLShaderVar("a", kFloat_GrSLType), |
| 1672 GrGLSLShaderVar("b", kFloat_GrSLType), | 1677 GrGLSLShaderVar("b", kFloat_GrSLType), |
| 1673 GrGLSLShaderVar("c", kFloat_GrSLType), | 1678 GrGLSLShaderVar("c", kFloat_GrSLType), |
| 1674 GrGLSLShaderVar("d", kFloat_GrSLType), | 1679 GrGLSLShaderVar("d", kFloat_GrSLType), |
| 1675 GrGLSLShaderVar("e", kFloat_GrSLType), | 1680 GrGLSLShaderVar("e", kFloat_GrSLType), |
| 1676 GrGLSLShaderVar("f", kFloat_GrSLType), | 1681 GrGLSLShaderVar("f", kFloat_GrSLType), |
| 1677 GrGLSLShaderVar("scale", kFloat_GrSLType), | 1682 GrGLSLShaderVar("scale", kFloat_GrSLType), |
| 1678 }; | 1683 }; |
| 1679 SkString sobelFuncName; | 1684 SkString sobelFuncName; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1709 fragBuilder->emitFunction(kVec3f_GrSLType, | 1714 fragBuilder->emitFunction(kVec3f_GrSLType, |
| 1710 "normal", | 1715 "normal", |
| 1711 SK_ARRAY_COUNT(gInteriorNormalArgs), | 1716 SK_ARRAY_COUNT(gInteriorNormalArgs), |
| 1712 gInteriorNormalArgs, | 1717 gInteriorNormalArgs, |
| 1713 normalBody.c_str(), | 1718 normalBody.c_str(), |
| 1714 &normalName); | 1719 &normalName); |
| 1715 | 1720 |
| 1716 fragBuilder->codeAppendf("\t\tvec2 coord = %s;\n", coords2D.c_str()); | 1721 fragBuilder->codeAppendf("\t\tvec2 coord = %s;\n", coords2D.c_str()); |
| 1717 fragBuilder->codeAppend("\t\tfloat m[9];\n"); | 1722 fragBuilder->codeAppend("\t\tfloat m[9];\n"); |
| 1718 | 1723 |
| 1719 const char* imgInc = args.fBuilder->getUniformCStr(fImageIncrementUni); | 1724 const char* imgInc = uniformHandler->getUniformCStr(fImageIncrementUni); |
| 1720 const char* surfScale = args.fBuilder->getUniformCStr(fSurfaceScaleUni); | 1725 const char* surfScale = uniformHandler->getUniformCStr(fSurfaceScaleUni); |
| 1721 | 1726 |
| 1722 int index = 0; | 1727 int index = 0; |
| 1723 for (int dy = 1; dy >= -1; dy--) { | 1728 for (int dy = 1; dy >= -1; dy--) { |
| 1724 for (int dx = -1; dx <= 1; dx++) { | 1729 for (int dx = -1; dx <= 1; dx++) { |
| 1725 SkString texCoords; | 1730 SkString texCoords; |
| 1726 texCoords.appendf("coord + vec2(%d, %d) * %s", dx, dy, imgInc); | 1731 texCoords.appendf("coord + vec2(%d, %d) * %s", dx, dy, imgInc); |
| 1727 fragBuilder->codeAppendf("\t\tm[%d] = ", index++); | 1732 fragBuilder->codeAppendf("\t\tm[%d] = ", index++); |
| 1728 fragBuilder->appendTextureLookup(args.fSamplers[0], texCoords.c_str(
)); | 1733 fragBuilder->appendTextureLookup(args.fSamplers[0], texCoords.c_str(
)); |
| 1729 fragBuilder->codeAppend(".a;\n"); | 1734 fragBuilder->codeAppend(".a;\n"); |
| 1730 } | 1735 } |
| 1731 } | 1736 } |
| 1732 fragBuilder->codeAppend("\t\tvec3 surfaceToLight = "); | 1737 fragBuilder->codeAppend("\t\tvec3 surfaceToLight = "); |
| 1733 SkString arg; | 1738 SkString arg; |
| 1734 arg.appendf("%s * m[4]", surfScale); | 1739 arg.appendf("%s * m[4]", surfScale); |
| 1735 fLight->emitSurfaceToLight(args.fBuilder, fragBuilder, arg.c_str()); | 1740 fLight->emitSurfaceToLight(uniformHandler, fragBuilder, arg.c_str()); |
| 1736 fragBuilder->codeAppend(";\n"); | 1741 fragBuilder->codeAppend(";\n"); |
| 1737 fragBuilder->codeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ", | 1742 fragBuilder->codeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ", |
| 1738 args.fOutputColor, lightFunc.c_str(), normalName.c_
str(), surfScale); | 1743 args.fOutputColor, lightFunc.c_str(), normalName.c_
str(), surfScale); |
| 1739 fLight->emitLightColor(args.fBuilder, fragBuilder, "surfaceToLight"); | 1744 fLight->emitLightColor(uniformHandler, fragBuilder, "surfaceToLight"); |
| 1740 fragBuilder->codeAppend(");\n"); | 1745 fragBuilder->codeAppend(");\n"); |
| 1741 SkString modulate; | 1746 SkString modulate; |
| 1742 GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor); | 1747 GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor); |
| 1743 fragBuilder->codeAppend(modulate.c_str()); | 1748 fragBuilder->codeAppend(modulate.c_str()); |
| 1744 } | 1749 } |
| 1745 | 1750 |
| 1746 void GrGLLightingEffect::GenKey(const GrProcessor& proc, | 1751 void GrGLLightingEffect::GenKey(const GrProcessor& proc, |
| 1747 const GrGLSLCaps& caps, GrProcessorKeyBuilder* b
) { | 1752 const GrGLSLCaps& caps, GrProcessorKeyBuilder* b
) { |
| 1748 const GrLightingEffect& lighting = proc.cast<GrLightingEffect>(); | 1753 const GrLightingEffect& lighting = proc.cast<GrLightingEffect>(); |
| 1749 b->add32(lighting.boundaryMode() << 2 | lighting.light()->type()); | 1754 b->add32(lighting.boundaryMode() << 2 | lighting.light()->type()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1762 } | 1767 } |
| 1763 | 1768 |
| 1764 /////////////////////////////////////////////////////////////////////////////// | 1769 /////////////////////////////////////////////////////////////////////////////// |
| 1765 | 1770 |
| 1766 /////////////////////////////////////////////////////////////////////////////// | 1771 /////////////////////////////////////////////////////////////////////////////// |
| 1767 | 1772 |
| 1768 GrGLDiffuseLightingEffect::GrGLDiffuseLightingEffect(const GrProcessor& proc) | 1773 GrGLDiffuseLightingEffect::GrGLDiffuseLightingEffect(const GrProcessor& proc) |
| 1769 : INHERITED(proc) { | 1774 : INHERITED(proc) { |
| 1770 } | 1775 } |
| 1771 | 1776 |
| 1772 void GrGLDiffuseLightingEffect::emitLightFunc(GrGLSLFPBuilder* builder, | 1777 void GrGLDiffuseLightingEffect::emitLightFunc(GrGLSLUniformHandler* uniformHandl
er, |
| 1773 GrGLSLFragmentBuilder* fragBuilder
, | 1778 GrGLSLFragmentBuilder* fragBuilder
, |
| 1774 SkString* funcName) { | 1779 SkString* funcName) { |
| 1775 const char* kd; | 1780 const char* kd; |
| 1776 fKDUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, | 1781 fKDUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibili
ty, |
| 1777 kFloat_GrSLType, kDefault_GrSLPrecision, | 1782 kFloat_GrSLType, kDefault_GrSLPrecision, |
| 1778 "KD", &kd); | 1783 "KD", &kd); |
| 1779 | 1784 |
| 1780 static const GrGLSLShaderVar gLightArgs[] = { | 1785 static const GrGLSLShaderVar gLightArgs[] = { |
| 1781 GrGLSLShaderVar("normal", kVec3f_GrSLType), | 1786 GrGLSLShaderVar("normal", kVec3f_GrSLType), |
| 1782 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType), | 1787 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType), |
| 1783 GrGLSLShaderVar("lightColor", kVec3f_GrSLType) | 1788 GrGLSLShaderVar("lightColor", kVec3f_GrSLType) |
| 1784 }; | 1789 }; |
| 1785 SkString lightBody; | 1790 SkString lightBody; |
| 1786 lightBody.appendf("\tfloat colorScale = %s * dot(normal, surfaceToLight);\n"
, kd); | 1791 lightBody.appendf("\tfloat colorScale = %s * dot(normal, surfaceToLight);\n"
, kd); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1846 return GrSpecularLightingEffect::Create(d->fTextures[GrProcessorUnitTest::kA
lphaTextureIdx], | 1851 return GrSpecularLightingEffect::Create(d->fTextures[GrProcessorUnitTest::kA
lphaTextureIdx], |
| 1847 light, surfaceScale, matrix, ks, shi
niness, mode); | 1852 light, surfaceScale, matrix, ks, shi
niness, mode); |
| 1848 } | 1853 } |
| 1849 | 1854 |
| 1850 /////////////////////////////////////////////////////////////////////////////// | 1855 /////////////////////////////////////////////////////////////////////////////// |
| 1851 | 1856 |
| 1852 GrGLSpecularLightingEffect::GrGLSpecularLightingEffect(const GrProcessor& proc) | 1857 GrGLSpecularLightingEffect::GrGLSpecularLightingEffect(const GrProcessor& proc) |
| 1853 : INHERITED(proc) { | 1858 : INHERITED(proc) { |
| 1854 } | 1859 } |
| 1855 | 1860 |
| 1856 void GrGLSpecularLightingEffect::emitLightFunc(GrGLSLFPBuilder* builder, | 1861 void GrGLSpecularLightingEffect::emitLightFunc(GrGLSLUniformHandler* uniformHand
ler, |
| 1857 GrGLSLFragmentBuilder* fragBuilde
r, | 1862 GrGLSLFragmentBuilder* fragBuilde
r, |
| 1858 SkString* funcName) { | 1863 SkString* funcName) { |
| 1859 const char* ks; | 1864 const char* ks; |
| 1860 const char* shininess; | 1865 const char* shininess; |
| 1861 | 1866 |
| 1862 fKSUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, | 1867 fKSUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibili
ty, |
| 1863 kFloat_GrSLType, kDefault_GrSLPrecision, "KS",
&ks); | 1868 kFloat_GrSLType, kDefault_GrSLPrecision,
"KS", &ks); |
| 1864 fShininessUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibili
ty, | 1869 fShininessUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_V
isibility, |
| 1865 kFloat_GrSLType, | 1870 kFloat_GrSLType, |
| 1866 kDefault_GrSLPrecision, | 1871 kDefault_GrSLPrecision, |
| 1867 "Shininess", | 1872 "Shininess", |
| 1868 &shininess); | 1873 &shininess); |
| 1869 | 1874 |
| 1870 static const GrGLSLShaderVar gLightArgs[] = { | 1875 static const GrGLSLShaderVar gLightArgs[] = { |
| 1871 GrGLSLShaderVar("normal", kVec3f_GrSLType), | 1876 GrGLSLShaderVar("normal", kVec3f_GrSLType), |
| 1872 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType), | 1877 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType), |
| 1873 GrGLSLShaderVar("lightColor", kVec3f_GrSLType) | 1878 GrGLSLShaderVar("lightColor", kVec3f_GrSLType) |
| 1874 }; | 1879 }; |
| 1875 SkString lightBody; | 1880 SkString lightBody; |
| 1876 lightBody.appendf("\tvec3 halfDir = vec3(normalize(surfaceToLight + vec3(0,
0, 1)));\n"); | 1881 lightBody.appendf("\tvec3 halfDir = vec3(normalize(surfaceToLight + vec3(0,
0, 1)));\n"); |
| 1877 lightBody.appendf("\tfloat colorScale = %s * pow(dot(normal, halfDir), %s);\
n", ks, shininess); | 1882 lightBody.appendf("\tfloat colorScale = %s * pow(dot(normal, halfDir), %s);\
n", ks, shininess); |
| 1878 lightBody.appendf("\tvec3 color = lightColor * clamp(colorScale, 0.0, 1.0);\
n"); | 1883 lightBody.appendf("\tvec3 color = lightColor * clamp(colorScale, 0.0, 1.0);\
n"); |
| 1879 lightBody.appendf("\treturn vec4(color, max(max(color.r, color.g), color.b))
;\n"); | 1884 lightBody.appendf("\treturn vec4(color, max(max(color.r, color.g), color.b))
;\n"); |
| 1880 fragBuilder->emitFunction(kVec4f_GrSLType, | 1885 fragBuilder->emitFunction(kVec4f_GrSLType, |
| 1881 "light", | 1886 "light", |
| 1882 SK_ARRAY_COUNT(gLightArgs), | 1887 SK_ARRAY_COUNT(gLightArgs), |
| 1883 gLightArgs, | 1888 gLightArgs, |
| 1884 lightBody.c_str(), | 1889 lightBody.c_str(), |
| 1885 funcName); | 1890 funcName); |
| 1886 } | 1891 } |
| 1887 | 1892 |
| 1888 void GrGLSpecularLightingEffect::onSetData(const GrGLSLProgramDataManager& pdman
, | 1893 void GrGLSpecularLightingEffect::onSetData(const GrGLSLProgramDataManager& pdman
, |
| 1889 const GrProcessor& effect) { | 1894 const GrProcessor& effect) { |
| 1890 INHERITED::onSetData(pdman, effect); | 1895 INHERITED::onSetData(pdman, effect); |
| 1891 const GrSpecularLightingEffect& spec = effect.cast<GrSpecularLightingEffect>
(); | 1896 const GrSpecularLightingEffect& spec = effect.cast<GrSpecularLightingEffect>
(); |
| 1892 pdman.set1f(fKSUni, spec.ks()); | 1897 pdman.set1f(fKSUni, spec.ks()); |
| 1893 pdman.set1f(fShininessUni, spec.shininess()); | 1898 pdman.set1f(fShininessUni, spec.shininess()); |
| 1894 } | 1899 } |
| 1895 | 1900 |
| 1896 /////////////////////////////////////////////////////////////////////////////// | 1901 /////////////////////////////////////////////////////////////////////////////// |
| 1897 void GrGLLight::emitLightColorUniform(GrGLSLFPBuilder* builder) { | 1902 void GrGLLight::emitLightColorUniform(GrGLSLUniformHandler* uniformHandler) { |
| 1898 fColorUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, | 1903 fColorUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visib
ility, |
| 1899 kVec3f_GrSLType, kDefault_GrSLPrecision, | 1904 kVec3f_GrSLType, kDefault_GrSLPrecisi
on, |
| 1900 "LightColor"); | 1905 "LightColor"); |
| 1901 } | 1906 } |
| 1902 | 1907 |
| 1903 void GrGLLight::emitLightColor(GrGLSLFPBuilder* builder, | 1908 void GrGLLight::emitLightColor(GrGLSLUniformHandler* uniformHandler, |
| 1904 GrGLSLFragmentBuilder* fragBuilder, | 1909 GrGLSLFragmentBuilder* fragBuilder, |
| 1905 const char *surfaceToLight) { | 1910 const char *surfaceToLight) { |
| 1906 fragBuilder->codeAppend(builder->getUniformCStr(this->lightColorUni())); | 1911 fragBuilder->codeAppend(uniformHandler->getUniformCStr(this->lightColorUni()
)); |
| 1907 } | 1912 } |
| 1908 | 1913 |
| 1909 void GrGLLight::setData(const GrGLSLProgramDataManager& pdman, | 1914 void GrGLLight::setData(const GrGLSLProgramDataManager& pdman, |
| 1910 const SkImageFilterLight* light) const { | 1915 const SkImageFilterLight* light) const { |
| 1911 setUniformPoint3(pdman, fColorUni, | 1916 setUniformPoint3(pdman, fColorUni, |
| 1912 light->color().makeScale(SkScalarInvert(SkIntToScalar(255))
)); | 1917 light->color().makeScale(SkScalarInvert(SkIntToScalar(255))
)); |
| 1913 } | 1918 } |
| 1914 | 1919 |
| 1915 /////////////////////////////////////////////////////////////////////////////// | 1920 /////////////////////////////////////////////////////////////////////////////// |
| 1916 | 1921 |
| 1917 void GrGLDistantLight::setData(const GrGLSLProgramDataManager& pdman, | 1922 void GrGLDistantLight::setData(const GrGLSLProgramDataManager& pdman, |
| 1918 const SkImageFilterLight* light) const { | 1923 const SkImageFilterLight* light) const { |
| 1919 INHERITED::setData(pdman, light); | 1924 INHERITED::setData(pdman, light); |
| 1920 SkASSERT(light->type() == SkImageFilterLight::kDistant_LightType); | 1925 SkASSERT(light->type() == SkImageFilterLight::kDistant_LightType); |
| 1921 const SkDistantLight* distantLight = static_cast<const SkDistantLight*>(ligh
t); | 1926 const SkDistantLight* distantLight = static_cast<const SkDistantLight*>(ligh
t); |
| 1922 setUniformNormal3(pdman, fDirectionUni, distantLight->direction()); | 1927 setUniformNormal3(pdman, fDirectionUni, distantLight->direction()); |
| 1923 } | 1928 } |
| 1924 | 1929 |
| 1925 void GrGLDistantLight::emitSurfaceToLight(GrGLSLFPBuilder* builder, | 1930 void GrGLDistantLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, |
| 1926 GrGLSLFragmentBuilder* fragBuilder, | 1931 GrGLSLFragmentBuilder* fragBuilder, |
| 1927 const char* z) { | 1932 const char* z) { |
| 1928 const char* dir; | 1933 const char* dir; |
| 1929 fDirectionUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibili
ty, | 1934 fDirectionUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_V
isibility, |
| 1930 kVec3f_GrSLType, kDefault_GrSLPrecision, | 1935 kVec3f_GrSLType, kDefault_GrSLPre
cision, |
| 1931 "LightDirection", &dir); | 1936 "LightDirection", &dir); |
| 1932 fragBuilder->codeAppend(dir); | 1937 fragBuilder->codeAppend(dir); |
| 1933 } | 1938 } |
| 1934 | 1939 |
| 1935 /////////////////////////////////////////////////////////////////////////////// | 1940 /////////////////////////////////////////////////////////////////////////////// |
| 1936 | 1941 |
| 1937 void GrGLPointLight::setData(const GrGLSLProgramDataManager& pdman, | 1942 void GrGLPointLight::setData(const GrGLSLProgramDataManager& pdman, |
| 1938 const SkImageFilterLight* light) const { | 1943 const SkImageFilterLight* light) const { |
| 1939 INHERITED::setData(pdman, light); | 1944 INHERITED::setData(pdman, light); |
| 1940 SkASSERT(light->type() == SkImageFilterLight::kPoint_LightType); | 1945 SkASSERT(light->type() == SkImageFilterLight::kPoint_LightType); |
| 1941 const SkPointLight* pointLight = static_cast<const SkPointLight*>(light); | 1946 const SkPointLight* pointLight = static_cast<const SkPointLight*>(light); |
| 1942 setUniformPoint3(pdman, fLocationUni, pointLight->location()); | 1947 setUniformPoint3(pdman, fLocationUni, pointLight->location()); |
| 1943 } | 1948 } |
| 1944 | 1949 |
| 1945 void GrGLPointLight::emitSurfaceToLight(GrGLSLFPBuilder* builder, | 1950 void GrGLPointLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, |
| 1946 GrGLSLFragmentBuilder* fragBuilder, | 1951 GrGLSLFragmentBuilder* fragBuilder, |
| 1947 const char* z) { | 1952 const char* z) { |
| 1948 const char* loc; | 1953 const char* loc; |
| 1949 fLocationUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibilit
y, | 1954 fLocationUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Vi
sibility, |
| 1950 kVec3f_GrSLType, kDefault_GrSLPrecision, | 1955 kVec3f_GrSLType, kDefault_GrSLPrec
ision, |
| 1951 "LightLocation", &loc); | 1956 "LightLocation", &loc); |
| 1952 fragBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", | 1957 fragBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", |
| 1953 loc, fragBuilder->fragmentPosition(), z); | 1958 loc, fragBuilder->fragmentPosition(), z); |
| 1954 } | 1959 } |
| 1955 | 1960 |
| 1956 /////////////////////////////////////////////////////////////////////////////// | 1961 /////////////////////////////////////////////////////////////////////////////// |
| 1957 | 1962 |
| 1958 void GrGLSpotLight::setData(const GrGLSLProgramDataManager& pdman, | 1963 void GrGLSpotLight::setData(const GrGLSLProgramDataManager& pdman, |
| 1959 const SkImageFilterLight* light) const { | 1964 const SkImageFilterLight* light) const { |
| 1960 INHERITED::setData(pdman, light); | 1965 INHERITED::setData(pdman, light); |
| 1961 SkASSERT(light->type() == SkImageFilterLight::kSpot_LightType); | 1966 SkASSERT(light->type() == SkImageFilterLight::kSpot_LightType); |
| 1962 const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light); | 1967 const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light); |
| 1963 setUniformPoint3(pdman, fLocationUni, spotLight->location()); | 1968 setUniformPoint3(pdman, fLocationUni, spotLight->location()); |
| 1964 pdman.set1f(fExponentUni, spotLight->specularExponent()); | 1969 pdman.set1f(fExponentUni, spotLight->specularExponent()); |
| 1965 pdman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle()); | 1970 pdman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle()); |
| 1966 pdman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle()); | 1971 pdman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle()); |
| 1967 pdman.set1f(fConeScaleUni, spotLight->coneScale()); | 1972 pdman.set1f(fConeScaleUni, spotLight->coneScale()); |
| 1968 setUniformNormal3(pdman, fSUni, spotLight->s()); | 1973 setUniformNormal3(pdman, fSUni, spotLight->s()); |
| 1969 } | 1974 } |
| 1970 | 1975 |
| 1971 void GrGLSpotLight::emitSurfaceToLight(GrGLSLFPBuilder* builder, | 1976 void GrGLSpotLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, |
| 1972 GrGLSLFragmentBuilder* fragBuilder, | 1977 GrGLSLFragmentBuilder* fragBuilder, |
| 1973 const char* z) { | 1978 const char* z) { |
| 1974 const char* location; | 1979 const char* location; |
| 1975 fLocationUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibilit
y, | 1980 fLocationUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Vi
sibility, |
| 1976 kVec3f_GrSLType, kDefault_GrSLPrecision, | 1981 kVec3f_GrSLType, kDefault_GrSLPrec
ision, |
| 1977 "LightLocation", &location); | 1982 "LightLocation", &location); |
| 1978 | 1983 |
| 1979 fragBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", | 1984 fragBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", |
| 1980 location, fragBuilder->fragmentPosition(), z); | 1985 location, fragBuilder->fragmentPosition(), z); |
| 1981 } | 1986 } |
| 1982 | 1987 |
| 1983 void GrGLSpotLight::emitLightColor(GrGLSLFPBuilder* builder, | 1988 void GrGLSpotLight::emitLightColor(GrGLSLUniformHandler* uniformHandler, |
| 1984 GrGLSLFragmentBuilder* fragBuilder, | 1989 GrGLSLFragmentBuilder* fragBuilder, |
| 1985 const char *surfaceToLight) { | 1990 const char *surfaceToLight) { |
| 1986 | 1991 |
| 1987 const char* color = builder->getUniformCStr(this->lightColorUni()); // creat
ed by parent class. | 1992 const char* color = uniformHandler->getUniformCStr(this->lightColorUni()); /
/ created by parent class. |
| 1988 | 1993 |
| 1989 const char* exponent; | 1994 const char* exponent; |
| 1990 const char* cosInner; | 1995 const char* cosInner; |
| 1991 const char* cosOuter; | 1996 const char* cosOuter; |
| 1992 const char* coneScale; | 1997 const char* coneScale; |
| 1993 const char* s; | 1998 const char* s; |
| 1994 fExponentUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibilit
y, | 1999 fExponentUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Vi
sibility, |
| 1995 kFloat_GrSLType, kDefault_GrSLPrecision, | 2000 kFloat_GrSLType, kDefault_GrSLPrec
ision, |
| 1996 "Exponent", &exponent); | 2001 "Exponent", &exponent); |
| 1997 fCosInnerConeAngleUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_
Visibility, | 2002 fCosInnerConeAngleUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFr
agment_Visibility, |
| 1998 kFloat_GrSLType, kDefault_GrSLPr
ecision, | 2003 kFloat_GrSLType, kDefault
_GrSLPrecision, |
| 1999 "CosInnerConeAngle", &cosInner); | 2004 "CosInnerConeAngle", &cos
Inner); |
| 2000 fCosOuterConeAngleUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_
Visibility, | 2005 fCosOuterConeAngleUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFr
agment_Visibility, |
| 2001 kFloat_GrSLType, kDefault_GrSLPr
ecision, | 2006 kFloat_GrSLType, kDefault
_GrSLPrecision, |
| 2002 "CosOuterConeAngle", &cosOuter); | 2007 "CosOuterConeAngle", &cos
Outer); |
| 2003 fConeScaleUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibili
ty, | 2008 fConeScaleUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_V
isibility, |
| 2004 kFloat_GrSLType, kDefault_GrSLPrecision, | 2009 kFloat_GrSLType, kDefault_GrSLPre
cision, |
| 2005 "ConeScale", &coneScale); | 2010 "ConeScale", &coneScale); |
| 2006 fSUni = builder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, | 2011 fSUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibilit
y, |
| 2007 kVec3f_GrSLType, kDefault_GrSLPrecision, "S", &s
); | 2012 kVec3f_GrSLType, kDefault_GrSLPrecision,
"S", &s); |
| 2008 | 2013 |
| 2009 static const GrGLSLShaderVar gLightColorArgs[] = { | 2014 static const GrGLSLShaderVar gLightColorArgs[] = { |
| 2010 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType) | 2015 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType) |
| 2011 }; | 2016 }; |
| 2012 SkString lightColorBody; | 2017 SkString lightColorBody; |
| 2013 lightColorBody.appendf("\tfloat cosAngle = -dot(surfaceToLight, %s);\n", s); | 2018 lightColorBody.appendf("\tfloat cosAngle = -dot(surfaceToLight, %s);\n", s); |
| 2014 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosOuter); | 2019 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosOuter); |
| 2015 lightColorBody.appendf("\t\treturn vec3(0);\n"); | 2020 lightColorBody.appendf("\t\treturn vec3(0);\n"); |
| 2016 lightColorBody.appendf("\t}\n"); | 2021 lightColorBody.appendf("\t}\n"); |
| 2017 lightColorBody.appendf("\tfloat scale = pow(cosAngle, %s);\n", exponent); | 2022 lightColorBody.appendf("\tfloat scale = pow(cosAngle, %s);\n", exponent); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2029 | 2034 |
| 2030 fragBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 2035 fragBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
| 2031 } | 2036 } |
| 2032 | 2037 |
| 2033 #endif | 2038 #endif |
| 2034 | 2039 |
| 2035 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 2040 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
| 2036 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 2041 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
| 2037 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 2042 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
| 2038 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 2043 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |