| 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" |
| (...skipping 1635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1646 | 1646 |
| 1647 /////////////////////////////////////////////////////////////////////////////// | 1647 /////////////////////////////////////////////////////////////////////////////// |
| 1648 | 1648 |
| 1649 void GrGLLightingEffect::emitCode(EmitArgs& args) { | 1649 void GrGLLightingEffect::emitCode(EmitArgs& args) { |
| 1650 const GrLightingEffect& le = args.fFp.cast<GrLightingEffect>(); | 1650 const GrLightingEffect& le = args.fFp.cast<GrLightingEffect>(); |
| 1651 if (!fLight) { | 1651 if (!fLight) { |
| 1652 fLight = le.light()->createGLLight(); | 1652 fLight = le.light()->createGLLight(); |
| 1653 } | 1653 } |
| 1654 | 1654 |
| 1655 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; | 1655 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
| 1656 fImageIncrementUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragm
ent_Visibility, | 1656 fImageIncrementUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1657 kVec2f_GrSLType, kDefault_Gr
SLPrecision, | 1657 kVec2f_GrSLType, kDefault_Gr
SLPrecision, |
| 1658 "ImageIncrement"); | 1658 "ImageIncrement"); |
| 1659 fSurfaceScaleUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragmen
t_Visibility, | 1659 fSurfaceScaleUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1660 kFloat_GrSLType, kDefault_GrSL
Precision, | 1660 kFloat_GrSLType, kDefault_GrSL
Precision, |
| 1661 "SurfaceScale"); | 1661 "SurfaceScale"); |
| 1662 fLight->emitLightColorUniform(uniformHandler); | 1662 fLight->emitLightColorUniform(uniformHandler); |
| 1663 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 1663 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
| 1664 SkString lightFunc; | 1664 SkString lightFunc; |
| 1665 this->emitLightFunc(uniformHandler, fragBuilder, &lightFunc); | 1665 this->emitLightFunc(uniformHandler, fragBuilder, &lightFunc); |
| 1666 static const GrGLSLShaderVar gSobelArgs[] = { | 1666 static const GrGLSLShaderVar gSobelArgs[] = { |
| 1667 GrGLSLShaderVar("a", kFloat_GrSLType), | 1667 GrGLSLShaderVar("a", kFloat_GrSLType), |
| 1668 GrGLSLShaderVar("b", kFloat_GrSLType), | 1668 GrGLSLShaderVar("b", kFloat_GrSLType), |
| 1669 GrGLSLShaderVar("c", kFloat_GrSLType), | 1669 GrGLSLShaderVar("c", kFloat_GrSLType), |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1762 } | 1762 } |
| 1763 | 1763 |
| 1764 /////////////////////////////////////////////////////////////////////////////// | 1764 /////////////////////////////////////////////////////////////////////////////// |
| 1765 | 1765 |
| 1766 /////////////////////////////////////////////////////////////////////////////// | 1766 /////////////////////////////////////////////////////////////////////////////// |
| 1767 | 1767 |
| 1768 void GrGLDiffuseLightingEffect::emitLightFunc(GrGLSLUniformHandler* uniformHandl
er, | 1768 void GrGLDiffuseLightingEffect::emitLightFunc(GrGLSLUniformHandler* uniformHandl
er, |
| 1769 GrGLSLFragmentBuilder* fragBuilder
, | 1769 GrGLSLFragmentBuilder* fragBuilder
, |
| 1770 SkString* funcName) { | 1770 SkString* funcName) { |
| 1771 const char* kd; | 1771 const char* kd; |
| 1772 fKDUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibili
ty, | 1772 fKDUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1773 kFloat_GrSLType, kDefault_GrSLPrecision, | 1773 kFloat_GrSLType, kDefault_GrSLPrecision, |
| 1774 "KD", &kd); | 1774 "KD", &kd); |
| 1775 | 1775 |
| 1776 static const GrGLSLShaderVar gLightArgs[] = { | 1776 static const GrGLSLShaderVar gLightArgs[] = { |
| 1777 GrGLSLShaderVar("normal", kVec3f_GrSLType), | 1777 GrGLSLShaderVar("normal", kVec3f_GrSLType), |
| 1778 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType), | 1778 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType), |
| 1779 GrGLSLShaderVar("lightColor", kVec3f_GrSLType) | 1779 GrGLSLShaderVar("lightColor", kVec3f_GrSLType) |
| 1780 }; | 1780 }; |
| 1781 SkString lightBody; | 1781 SkString lightBody; |
| 1782 lightBody.appendf("\tfloat colorScale = %s * dot(normal, surfaceToLight);\n"
, kd); | 1782 lightBody.appendf("\tfloat colorScale = %s * dot(normal, surfaceToLight);\n"
, kd); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1844 } | 1844 } |
| 1845 | 1845 |
| 1846 /////////////////////////////////////////////////////////////////////////////// | 1846 /////////////////////////////////////////////////////////////////////////////// |
| 1847 | 1847 |
| 1848 void GrGLSpecularLightingEffect::emitLightFunc(GrGLSLUniformHandler* uniformHand
ler, | 1848 void GrGLSpecularLightingEffect::emitLightFunc(GrGLSLUniformHandler* uniformHand
ler, |
| 1849 GrGLSLFragmentBuilder* fragBuilde
r, | 1849 GrGLSLFragmentBuilder* fragBuilde
r, |
| 1850 SkString* funcName) { | 1850 SkString* funcName) { |
| 1851 const char* ks; | 1851 const char* ks; |
| 1852 const char* shininess; | 1852 const char* shininess; |
| 1853 | 1853 |
| 1854 fKSUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibili
ty, | 1854 fKSUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1855 kFloat_GrSLType, kDefault_GrSLPrecision,
"KS", &ks); | 1855 kFloat_GrSLType, kDefault_GrSLPrecision,
"KS", &ks); |
| 1856 fShininessUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_V
isibility, | 1856 fShininessUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1857 kFloat_GrSLType, | 1857 kFloat_GrSLType, |
| 1858 kDefault_GrSLPrecision, | 1858 kDefault_GrSLPrecision, |
| 1859 "Shininess", | 1859 "Shininess", |
| 1860 &shininess); | 1860 &shininess); |
| 1861 | 1861 |
| 1862 static const GrGLSLShaderVar gLightArgs[] = { | 1862 static const GrGLSLShaderVar gLightArgs[] = { |
| 1863 GrGLSLShaderVar("normal", kVec3f_GrSLType), | 1863 GrGLSLShaderVar("normal", kVec3f_GrSLType), |
| 1864 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType), | 1864 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType), |
| 1865 GrGLSLShaderVar("lightColor", kVec3f_GrSLType) | 1865 GrGLSLShaderVar("lightColor", kVec3f_GrSLType) |
| 1866 }; | 1866 }; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1880 void GrGLSpecularLightingEffect::onSetData(const GrGLSLProgramDataManager& pdman
, | 1880 void GrGLSpecularLightingEffect::onSetData(const GrGLSLProgramDataManager& pdman
, |
| 1881 const GrProcessor& effect) { | 1881 const GrProcessor& effect) { |
| 1882 INHERITED::onSetData(pdman, effect); | 1882 INHERITED::onSetData(pdman, effect); |
| 1883 const GrSpecularLightingEffect& spec = effect.cast<GrSpecularLightingEffect>
(); | 1883 const GrSpecularLightingEffect& spec = effect.cast<GrSpecularLightingEffect>
(); |
| 1884 pdman.set1f(fKSUni, spec.ks()); | 1884 pdman.set1f(fKSUni, spec.ks()); |
| 1885 pdman.set1f(fShininessUni, spec.shininess()); | 1885 pdman.set1f(fShininessUni, spec.shininess()); |
| 1886 } | 1886 } |
| 1887 | 1887 |
| 1888 /////////////////////////////////////////////////////////////////////////////// | 1888 /////////////////////////////////////////////////////////////////////////////// |
| 1889 void GrGLLight::emitLightColorUniform(GrGLSLUniformHandler* uniformHandler) { | 1889 void GrGLLight::emitLightColorUniform(GrGLSLUniformHandler* uniformHandler) { |
| 1890 fColorUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visib
ility, | 1890 fColorUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1891 kVec3f_GrSLType, kDefault_GrSLPrecisi
on, | 1891 kVec3f_GrSLType, kDefault_GrSLPrecisi
on, |
| 1892 "LightColor"); | 1892 "LightColor"); |
| 1893 } | 1893 } |
| 1894 | 1894 |
| 1895 void GrGLLight::emitLightColor(GrGLSLUniformHandler* uniformHandler, | 1895 void GrGLLight::emitLightColor(GrGLSLUniformHandler* uniformHandler, |
| 1896 GrGLSLFragmentBuilder* fragBuilder, | 1896 GrGLSLFragmentBuilder* fragBuilder, |
| 1897 const char *surfaceToLight) { | 1897 const char *surfaceToLight) { |
| 1898 fragBuilder->codeAppend(uniformHandler->getUniformCStr(this->lightColorUni()
)); | 1898 fragBuilder->codeAppend(uniformHandler->getUniformCStr(this->lightColorUni()
)); |
| 1899 } | 1899 } |
| 1900 | 1900 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1911 INHERITED::setData(pdman, light); | 1911 INHERITED::setData(pdman, light); |
| 1912 SkASSERT(light->type() == SkImageFilterLight::kDistant_LightType); | 1912 SkASSERT(light->type() == SkImageFilterLight::kDistant_LightType); |
| 1913 const SkDistantLight* distantLight = static_cast<const SkDistantLight*>(ligh
t); | 1913 const SkDistantLight* distantLight = static_cast<const SkDistantLight*>(ligh
t); |
| 1914 setUniformNormal3(pdman, fDirectionUni, distantLight->direction()); | 1914 setUniformNormal3(pdman, fDirectionUni, distantLight->direction()); |
| 1915 } | 1915 } |
| 1916 | 1916 |
| 1917 void GrGLDistantLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, | 1917 void GrGLDistantLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, |
| 1918 GrGLSLFragmentBuilder* fragBuilder, | 1918 GrGLSLFragmentBuilder* fragBuilder, |
| 1919 const char* z) { | 1919 const char* z) { |
| 1920 const char* dir; | 1920 const char* dir; |
| 1921 fDirectionUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_V
isibility, | 1921 fDirectionUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1922 kVec3f_GrSLType, kDefault_GrSLPre
cision, | 1922 kVec3f_GrSLType, kDefault_GrSLPre
cision, |
| 1923 "LightDirection", &dir); | 1923 "LightDirection", &dir); |
| 1924 fragBuilder->codeAppend(dir); | 1924 fragBuilder->codeAppend(dir); |
| 1925 } | 1925 } |
| 1926 | 1926 |
| 1927 /////////////////////////////////////////////////////////////////////////////// | 1927 /////////////////////////////////////////////////////////////////////////////// |
| 1928 | 1928 |
| 1929 void GrGLPointLight::setData(const GrGLSLProgramDataManager& pdman, | 1929 void GrGLPointLight::setData(const GrGLSLProgramDataManager& pdman, |
| 1930 const SkImageFilterLight* light) const { | 1930 const SkImageFilterLight* light) const { |
| 1931 INHERITED::setData(pdman, light); | 1931 INHERITED::setData(pdman, light); |
| 1932 SkASSERT(light->type() == SkImageFilterLight::kPoint_LightType); | 1932 SkASSERT(light->type() == SkImageFilterLight::kPoint_LightType); |
| 1933 const SkPointLight* pointLight = static_cast<const SkPointLight*>(light); | 1933 const SkPointLight* pointLight = static_cast<const SkPointLight*>(light); |
| 1934 setUniformPoint3(pdman, fLocationUni, pointLight->location()); | 1934 setUniformPoint3(pdman, fLocationUni, pointLight->location()); |
| 1935 } | 1935 } |
| 1936 | 1936 |
| 1937 void GrGLPointLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, | 1937 void GrGLPointLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, |
| 1938 GrGLSLFragmentBuilder* fragBuilder, | 1938 GrGLSLFragmentBuilder* fragBuilder, |
| 1939 const char* z) { | 1939 const char* z) { |
| 1940 const char* loc; | 1940 const char* loc; |
| 1941 fLocationUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Vi
sibility, | 1941 fLocationUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1942 kVec3f_GrSLType, kDefault_GrSLPrec
ision, | 1942 kVec3f_GrSLType, kDefault_GrSLPrec
ision, |
| 1943 "LightLocation", &loc); | 1943 "LightLocation", &loc); |
| 1944 fragBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", | 1944 fragBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", |
| 1945 loc, fragBuilder->fragmentPosition(), z); | 1945 loc, fragBuilder->fragmentPosition(), z); |
| 1946 } | 1946 } |
| 1947 | 1947 |
| 1948 /////////////////////////////////////////////////////////////////////////////// | 1948 /////////////////////////////////////////////////////////////////////////////// |
| 1949 | 1949 |
| 1950 void GrGLSpotLight::setData(const GrGLSLProgramDataManager& pdman, | 1950 void GrGLSpotLight::setData(const GrGLSLProgramDataManager& pdman, |
| 1951 const SkImageFilterLight* light) const { | 1951 const SkImageFilterLight* light) const { |
| 1952 INHERITED::setData(pdman, light); | 1952 INHERITED::setData(pdman, light); |
| 1953 SkASSERT(light->type() == SkImageFilterLight::kSpot_LightType); | 1953 SkASSERT(light->type() == SkImageFilterLight::kSpot_LightType); |
| 1954 const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light); | 1954 const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light); |
| 1955 setUniformPoint3(pdman, fLocationUni, spotLight->location()); | 1955 setUniformPoint3(pdman, fLocationUni, spotLight->location()); |
| 1956 pdman.set1f(fExponentUni, spotLight->specularExponent()); | 1956 pdman.set1f(fExponentUni, spotLight->specularExponent()); |
| 1957 pdman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle()); | 1957 pdman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle()); |
| 1958 pdman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle()); | 1958 pdman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle()); |
| 1959 pdman.set1f(fConeScaleUni, spotLight->coneScale()); | 1959 pdman.set1f(fConeScaleUni, spotLight->coneScale()); |
| 1960 setUniformNormal3(pdman, fSUni, spotLight->s()); | 1960 setUniformNormal3(pdman, fSUni, spotLight->s()); |
| 1961 } | 1961 } |
| 1962 | 1962 |
| 1963 void GrGLSpotLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, | 1963 void GrGLSpotLight::emitSurfaceToLight(GrGLSLUniformHandler* uniformHandler, |
| 1964 GrGLSLFragmentBuilder* fragBuilder, | 1964 GrGLSLFragmentBuilder* fragBuilder, |
| 1965 const char* z) { | 1965 const char* z) { |
| 1966 const char* location; | 1966 const char* location; |
| 1967 fLocationUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Vi
sibility, | 1967 fLocationUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1968 kVec3f_GrSLType, kDefault_GrSLPrec
ision, | 1968 kVec3f_GrSLType, kDefault_GrSLPrec
ision, |
| 1969 "LightLocation", &location); | 1969 "LightLocation", &location); |
| 1970 | 1970 |
| 1971 fragBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", | 1971 fragBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", |
| 1972 location, fragBuilder->fragmentPosition(), z); | 1972 location, fragBuilder->fragmentPosition(), z); |
| 1973 } | 1973 } |
| 1974 | 1974 |
| 1975 void GrGLSpotLight::emitLightColor(GrGLSLUniformHandler* uniformHandler, | 1975 void GrGLSpotLight::emitLightColor(GrGLSLUniformHandler* uniformHandler, |
| 1976 GrGLSLFragmentBuilder* fragBuilder, | 1976 GrGLSLFragmentBuilder* fragBuilder, |
| 1977 const char *surfaceToLight) { | 1977 const char *surfaceToLight) { |
| 1978 | 1978 |
| 1979 const char* color = uniformHandler->getUniformCStr(this->lightColorUni()); /
/ created by parent class. | 1979 const char* color = uniformHandler->getUniformCStr(this->lightColorUni()); /
/ created by parent class. |
| 1980 | 1980 |
| 1981 const char* exponent; | 1981 const char* exponent; |
| 1982 const char* cosInner; | 1982 const char* cosInner; |
| 1983 const char* cosOuter; | 1983 const char* cosOuter; |
| 1984 const char* coneScale; | 1984 const char* coneScale; |
| 1985 const char* s; | 1985 const char* s; |
| 1986 fExponentUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Vi
sibility, | 1986 fExponentUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1987 kFloat_GrSLType, kDefault_GrSLPrec
ision, | 1987 kFloat_GrSLType, kDefault_GrSLPrec
ision, |
| 1988 "Exponent", &exponent); | 1988 "Exponent", &exponent); |
| 1989 fCosInnerConeAngleUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFr
agment_Visibility, | 1989 fCosInnerConeAngleUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1990 kFloat_GrSLType, kDefault
_GrSLPrecision, | 1990 kFloat_GrSLType, kDefault
_GrSLPrecision, |
| 1991 "CosInnerConeAngle", &cos
Inner); | 1991 "CosInnerConeAngle", &cos
Inner); |
| 1992 fCosOuterConeAngleUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFr
agment_Visibility, | 1992 fCosOuterConeAngleUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1993 kFloat_GrSLType, kDefault
_GrSLPrecision, | 1993 kFloat_GrSLType, kDefault
_GrSLPrecision, |
| 1994 "CosOuterConeAngle", &cos
Outer); | 1994 "CosOuterConeAngle", &cos
Outer); |
| 1995 fConeScaleUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_V
isibility, | 1995 fConeScaleUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1996 kFloat_GrSLType, kDefault_GrSLPre
cision, | 1996 kFloat_GrSLType, kDefault_GrSLPre
cision, |
| 1997 "ConeScale", &coneScale); | 1997 "ConeScale", &coneScale); |
| 1998 fSUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibilit
y, | 1998 fSUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 1999 kVec3f_GrSLType, kDefault_GrSLPrecision,
"S", &s); | 1999 kVec3f_GrSLType, kDefault_GrSLPrecision,
"S", &s); |
| 2000 | 2000 |
| 2001 static const GrGLSLShaderVar gLightColorArgs[] = { | 2001 static const GrGLSLShaderVar gLightColorArgs[] = { |
| 2002 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType) | 2002 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType) |
| 2003 }; | 2003 }; |
| 2004 SkString lightColorBody; | 2004 SkString lightColorBody; |
| 2005 lightColorBody.appendf("\tfloat cosAngle = -dot(surfaceToLight, %s);\n", s); | 2005 lightColorBody.appendf("\tfloat cosAngle = -dot(surfaceToLight, %s);\n", s); |
| 2006 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosOuter); | 2006 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosOuter); |
| 2007 lightColorBody.appendf("\t\treturn vec3(0);\n"); | 2007 lightColorBody.appendf("\t\treturn vec3(0);\n"); |
| 2008 lightColorBody.appendf("\t}\n"); | 2008 lightColorBody.appendf("\t}\n"); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2021 | 2021 |
| 2022 fragBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 2022 fragBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
| 2023 } | 2023 } |
| 2024 | 2024 |
| 2025 #endif | 2025 #endif |
| 2026 | 2026 |
| 2027 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 2027 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
| 2028 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 2028 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
| 2029 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 2029 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
| 2030 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 2030 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |