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

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

Issue 1684063006: Add GrShaderFlags enum (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Bit->Flag Created 4 years, 10 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/SkMagnifierImageFilter.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 1635 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/effects/SkDisplacementMapEffect.cpp ('k') | src/effects/SkMagnifierImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698