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

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

Issue 1417123002: Move GrGLShaderVar to GrGLSL (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix gyp Created 5 years, 2 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/SkBlurMaskFilter.cpp ('k') | src/effects/SkPerlinNoiseShader.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 1640 matching lines...) Expand 10 before | Expand all | Expand 10 after
1651 void GrGLLightingEffect::emitCode(EmitArgs& args) { 1651 void GrGLLightingEffect::emitCode(EmitArgs& args) {
1652 fImageIncrementUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment _Visibility, 1652 fImageIncrementUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment _Visibility,
1653 kVec2f_GrSLType, kDefault_GrSLPrec ision, 1653 kVec2f_GrSLType, kDefault_GrSLPrec ision,
1654 "ImageIncrement"); 1654 "ImageIncrement");
1655 fSurfaceScaleUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_V isibility, 1655 fSurfaceScaleUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_V isibility,
1656 kFloat_GrSLType, kDefault_GrSLPrecisi on, 1656 kFloat_GrSLType, kDefault_GrSLPrecisi on,
1657 "SurfaceScale"); 1657 "SurfaceScale");
1658 fLight->emitLightColorUniform(args.fBuilder); 1658 fLight->emitLightColorUniform(args.fBuilder);
1659 SkString lightFunc; 1659 SkString lightFunc;
1660 this->emitLightFunc(args.fBuilder, &lightFunc); 1660 this->emitLightFunc(args.fBuilder, &lightFunc);
1661 static const GrGLShaderVar gSobelArgs[] = { 1661 static const GrGLSLShaderVar gSobelArgs[] = {
1662 GrGLShaderVar("a", kFloat_GrSLType), 1662 GrGLSLShaderVar("a", kFloat_GrSLType),
1663 GrGLShaderVar("b", kFloat_GrSLType), 1663 GrGLSLShaderVar("b", kFloat_GrSLType),
1664 GrGLShaderVar("c", kFloat_GrSLType), 1664 GrGLSLShaderVar("c", kFloat_GrSLType),
1665 GrGLShaderVar("d", kFloat_GrSLType), 1665 GrGLSLShaderVar("d", kFloat_GrSLType),
1666 GrGLShaderVar("e", kFloat_GrSLType), 1666 GrGLSLShaderVar("e", kFloat_GrSLType),
1667 GrGLShaderVar("f", kFloat_GrSLType), 1667 GrGLSLShaderVar("f", kFloat_GrSLType),
1668 GrGLShaderVar("scale", kFloat_GrSLType), 1668 GrGLSLShaderVar("scale", kFloat_GrSLType),
1669 }; 1669 };
1670 SkString sobelFuncName; 1670 SkString sobelFuncName;
1671 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); 1671 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder();
1672 SkString coords2D = fsBuilder->ensureFSCoords2D(args.fCoords, 0); 1672 SkString coords2D = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
1673 1673
1674 fsBuilder->emitFunction(kFloat_GrSLType, 1674 fsBuilder->emitFunction(kFloat_GrSLType,
1675 "sobel", 1675 "sobel",
1676 SK_ARRAY_COUNT(gSobelArgs), 1676 SK_ARRAY_COUNT(gSobelArgs),
1677 gSobelArgs, 1677 gSobelArgs,
1678 "\treturn (-a + b - 2.0 * c + 2.0 * d -e + f) * scal e;\n", 1678 "\treturn (-a + b - 2.0 * c + 2.0 * d -e + f) * scal e;\n",
1679 &sobelFuncName); 1679 &sobelFuncName);
1680 static const GrGLShaderVar gPointToNormalArgs[] = { 1680 static const GrGLSLShaderVar gPointToNormalArgs[] = {
1681 GrGLShaderVar("x", kFloat_GrSLType), 1681 GrGLSLShaderVar("x", kFloat_GrSLType),
1682 GrGLShaderVar("y", kFloat_GrSLType), 1682 GrGLSLShaderVar("y", kFloat_GrSLType),
1683 GrGLShaderVar("scale", kFloat_GrSLType), 1683 GrGLSLShaderVar("scale", kFloat_GrSLType),
1684 }; 1684 };
1685 SkString pointToNormalName; 1685 SkString pointToNormalName;
1686 fsBuilder->emitFunction(kVec3f_GrSLType, 1686 fsBuilder->emitFunction(kVec3f_GrSLType,
1687 "pointToNormal", 1687 "pointToNormal",
1688 SK_ARRAY_COUNT(gPointToNormalArgs), 1688 SK_ARRAY_COUNT(gPointToNormalArgs),
1689 gPointToNormalArgs, 1689 gPointToNormalArgs,
1690 "\treturn normalize(vec3(-x * scale, -y * scale, 1)) ;\n", 1690 "\treturn normalize(vec3(-x * scale, -y * scale, 1)) ;\n",
1691 &pointToNormalName); 1691 &pointToNormalName);
1692 1692
1693 static const GrGLShaderVar gInteriorNormalArgs[] = { 1693 static const GrGLSLShaderVar gInteriorNormalArgs[] = {
1694 GrGLShaderVar("m", kFloat_GrSLType, 9), 1694 GrGLSLShaderVar("m", kFloat_GrSLType, 9),
1695 GrGLShaderVar("surfaceScale", kFloat_GrSLType), 1695 GrGLSLShaderVar("surfaceScale", kFloat_GrSLType),
1696 }; 1696 };
1697 SkString normalBody = emitNormalFunc(fBoundaryMode, 1697 SkString normalBody = emitNormalFunc(fBoundaryMode,
1698 pointToNormalName.c_str(), 1698 pointToNormalName.c_str(),
1699 sobelFuncName.c_str()); 1699 sobelFuncName.c_str());
1700 SkString normalName; 1700 SkString normalName;
1701 fsBuilder->emitFunction(kVec3f_GrSLType, 1701 fsBuilder->emitFunction(kVec3f_GrSLType,
1702 "normal", 1702 "normal",
1703 SK_ARRAY_COUNT(gInteriorNormalArgs), 1703 SK_ARRAY_COUNT(gInteriorNormalArgs),
1704 gInteriorNormalArgs, 1704 gInteriorNormalArgs,
1705 normalBody.c_str(), 1705 normalBody.c_str(),
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 GrGLDiffuseLightingEffect::GrGLDiffuseLightingEffect(const GrProcessor& proc) 1760 GrGLDiffuseLightingEffect::GrGLDiffuseLightingEffect(const GrProcessor& proc)
1761 : INHERITED(proc) { 1761 : INHERITED(proc) {
1762 } 1762 }
1763 1763
1764 void GrGLDiffuseLightingEffect::emitLightFunc(GrGLFPBuilder* builder, SkString* funcName) { 1764 void GrGLDiffuseLightingEffect::emitLightFunc(GrGLFPBuilder* builder, SkString* funcName) {
1765 const char* kd; 1765 const char* kd;
1766 fKDUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1766 fKDUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1767 kFloat_GrSLType, kDefault_GrSLPrecision, 1767 kFloat_GrSLType, kDefault_GrSLPrecision,
1768 "KD", &kd); 1768 "KD", &kd);
1769 1769
1770 static const GrGLShaderVar gLightArgs[] = { 1770 static const GrGLSLShaderVar gLightArgs[] = {
1771 GrGLShaderVar("normal", kVec3f_GrSLType), 1771 GrGLSLShaderVar("normal", kVec3f_GrSLType),
1772 GrGLShaderVar("surfaceToLight", kVec3f_GrSLType), 1772 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType),
1773 GrGLShaderVar("lightColor", kVec3f_GrSLType) 1773 GrGLSLShaderVar("lightColor", kVec3f_GrSLType)
1774 }; 1774 };
1775 SkString lightBody; 1775 SkString lightBody;
1776 lightBody.appendf("\tfloat colorScale = %s * dot(normal, surfaceToLight);\n" , kd); 1776 lightBody.appendf("\tfloat colorScale = %s * dot(normal, surfaceToLight);\n" , kd);
1777 lightBody.appendf("\treturn vec4(lightColor * clamp(colorScale, 0.0, 1.0), 1 .0);\n"); 1777 lightBody.appendf("\treturn vec4(lightColor * clamp(colorScale, 0.0, 1.0), 1 .0);\n");
1778 builder->getFragmentShaderBuilder()->emitFunction(kVec4f_GrSLType, 1778 builder->getFragmentShaderBuilder()->emitFunction(kVec4f_GrSLType,
1779 "light", 1779 "light",
1780 SK_ARRAY_COUNT(gLightArgs) , 1780 SK_ARRAY_COUNT(gLightArgs) ,
1781 gLightArgs, 1781 gLightArgs,
1782 lightBody.c_str(), 1782 lightBody.c_str(),
1783 funcName); 1783 funcName);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1848 const char* shininess; 1848 const char* shininess;
1849 1849
1850 fKSUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1850 fKSUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1851 kFloat_GrSLType, kDefault_GrSLPrecision, "KS", &ks); 1851 kFloat_GrSLType, kDefault_GrSLPrecision, "KS", &ks);
1852 fShininessUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility , 1852 fShininessUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility ,
1853 kFloat_GrSLType, 1853 kFloat_GrSLType,
1854 kDefault_GrSLPrecision, 1854 kDefault_GrSLPrecision,
1855 "Shininess", 1855 "Shininess",
1856 &shininess); 1856 &shininess);
1857 1857
1858 static const GrGLShaderVar gLightArgs[] = { 1858 static const GrGLSLShaderVar gLightArgs[] = {
1859 GrGLShaderVar("normal", kVec3f_GrSLType), 1859 GrGLSLShaderVar("normal", kVec3f_GrSLType),
1860 GrGLShaderVar("surfaceToLight", kVec3f_GrSLType), 1860 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType),
1861 GrGLShaderVar("lightColor", kVec3f_GrSLType) 1861 GrGLSLShaderVar("lightColor", kVec3f_GrSLType)
1862 }; 1862 };
1863 SkString lightBody; 1863 SkString lightBody;
1864 lightBody.appendf("\tvec3 halfDir = vec3(normalize(surfaceToLight + vec3(0, 0, 1)));\n"); 1864 lightBody.appendf("\tvec3 halfDir = vec3(normalize(surfaceToLight + vec3(0, 0, 1)));\n");
1865 lightBody.appendf("\tfloat colorScale = %s * pow(dot(normal, halfDir), %s);\ n", ks, shininess); 1865 lightBody.appendf("\tfloat colorScale = %s * pow(dot(normal, halfDir), %s);\ n", ks, shininess);
1866 lightBody.appendf("\tvec3 color = lightColor * clamp(colorScale, 0.0, 1.0);\ n"); 1866 lightBody.appendf("\tvec3 color = lightColor * clamp(colorScale, 0.0, 1.0);\ n");
1867 lightBody.appendf("\treturn vec4(color, max(max(color.r, color.g), color.b)) ;\n"); 1867 lightBody.appendf("\treturn vec4(color, max(max(color.r, color.g), color.b)) ;\n");
1868 builder->getFragmentShaderBuilder()->emitFunction(kVec4f_GrSLType, 1868 builder->getFragmentShaderBuilder()->emitFunction(kVec4f_GrSLType,
1869 "light", 1869 "light",
1870 SK_ARRAY_COUNT(gLightArgs) , 1870 SK_ARRAY_COUNT(gLightArgs) ,
1871 gLightArgs, 1871 gLightArgs,
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1980 "CosInnerConeAngle", &cosInner); 1980 "CosInnerConeAngle", &cosInner);
1981 fCosOuterConeAngleUni = builder->addUniform(GrGLProgramBuilder::kFragment_Vi sibility, 1981 fCosOuterConeAngleUni = builder->addUniform(GrGLProgramBuilder::kFragment_Vi sibility,
1982 kFloat_GrSLType, kDefault_GrSLPr ecision, 1982 kFloat_GrSLType, kDefault_GrSLPr ecision,
1983 "CosOuterConeAngle", &cosOuter); 1983 "CosOuterConeAngle", &cosOuter);
1984 fConeScaleUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility , 1984 fConeScaleUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility ,
1985 kFloat_GrSLType, kDefault_GrSLPrecision, 1985 kFloat_GrSLType, kDefault_GrSLPrecision,
1986 "ConeScale", &coneScale); 1986 "ConeScale", &coneScale);
1987 fSUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1987 fSUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1988 kVec3f_GrSLType, kDefault_GrSLPrecision, "S", &s ); 1988 kVec3f_GrSLType, kDefault_GrSLPrecision, "S", &s );
1989 1989
1990 static const GrGLShaderVar gLightColorArgs[] = { 1990 static const GrGLSLShaderVar gLightColorArgs[] = {
1991 GrGLShaderVar("surfaceToLight", kVec3f_GrSLType) 1991 GrGLSLShaderVar("surfaceToLight", kVec3f_GrSLType)
1992 }; 1992 };
1993 SkString lightColorBody; 1993 SkString lightColorBody;
1994 lightColorBody.appendf("\tfloat cosAngle = -dot(surfaceToLight, %s);\n", s); 1994 lightColorBody.appendf("\tfloat cosAngle = -dot(surfaceToLight, %s);\n", s);
1995 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosOuter); 1995 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosOuter);
1996 lightColorBody.appendf("\t\treturn vec3(0);\n"); 1996 lightColorBody.appendf("\t\treturn vec3(0);\n");
1997 lightColorBody.appendf("\t}\n"); 1997 lightColorBody.appendf("\t}\n");
1998 lightColorBody.appendf("\tfloat scale = pow(cosAngle, %s);\n", exponent); 1998 lightColorBody.appendf("\tfloat scale = pow(cosAngle, %s);\n", exponent);
1999 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosInner); 1999 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosInner);
2000 lightColorBody.appendf("\t\treturn %s * scale * (cosAngle - %s) * %s;\n", 2000 lightColorBody.appendf("\t\treturn %s * scale * (cosAngle - %s) * %s;\n",
2001 color, cosOuter, coneScale); 2001 color, cosOuter, coneScale);
2002 lightColorBody.appendf("\t}\n"); 2002 lightColorBody.appendf("\t}\n");
2003 lightColorBody.appendf("\treturn %s;\n", color); 2003 lightColorBody.appendf("\treturn %s;\n", color);
2004 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 2004 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
2005 fsBuilder->emitFunction(kVec3f_GrSLType, 2005 fsBuilder->emitFunction(kVec3f_GrSLType,
2006 "lightColor", 2006 "lightColor",
2007 SK_ARRAY_COUNT(gLightColorArgs), 2007 SK_ARRAY_COUNT(gLightColorArgs),
2008 gLightColorArgs, 2008 gLightColorArgs,
2009 lightColorBody.c_str(), 2009 lightColorBody.c_str(),
2010 &fLightColorFunc); 2010 &fLightColorFunc);
2011 2011
2012 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); 2012 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight);
2013 } 2013 }
2014 2014
2015 #endif 2015 #endif
2016 2016
2017 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 2017 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
2018 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 2018 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
2019 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 2019 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
2020 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 2020 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkBlurMaskFilter.cpp ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698