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

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

Issue 1110033004: Make XPFragmentBuilder only Builder with access to DstCopy. (Closed) Base URL: https://skia.googlesource.com/skia.git@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 1623 matching lines...) Expand 10 before | Expand all | Expand 10 after
1634 static const GrGLShaderVar gSobelArgs[] = { 1634 static const GrGLShaderVar gSobelArgs[] = {
1635 GrGLShaderVar("a", kFloat_GrSLType), 1635 GrGLShaderVar("a", kFloat_GrSLType),
1636 GrGLShaderVar("b", kFloat_GrSLType), 1636 GrGLShaderVar("b", kFloat_GrSLType),
1637 GrGLShaderVar("c", kFloat_GrSLType), 1637 GrGLShaderVar("c", kFloat_GrSLType),
1638 GrGLShaderVar("d", kFloat_GrSLType), 1638 GrGLShaderVar("d", kFloat_GrSLType),
1639 GrGLShaderVar("e", kFloat_GrSLType), 1639 GrGLShaderVar("e", kFloat_GrSLType),
1640 GrGLShaderVar("f", kFloat_GrSLType), 1640 GrGLShaderVar("f", kFloat_GrSLType),
1641 GrGLShaderVar("scale", kFloat_GrSLType), 1641 GrGLShaderVar("scale", kFloat_GrSLType),
1642 }; 1642 };
1643 SkString sobelFuncName; 1643 SkString sobelFuncName;
1644 GrGLFPFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 1644 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
1645 SkString coords2D = fsBuilder->ensureFSCoords2D(coords, 0); 1645 SkString coords2D = fsBuilder->ensureFSCoords2D(coords, 0);
1646 1646
1647 fsBuilder->emitFunction(kFloat_GrSLType, 1647 fsBuilder->emitFunction(kFloat_GrSLType,
1648 "sobel", 1648 "sobel",
1649 SK_ARRAY_COUNT(gSobelArgs), 1649 SK_ARRAY_COUNT(gSobelArgs),
1650 gSobelArgs, 1650 gSobelArgs,
1651 "\treturn (-a + b - 2.0 * c + 2.0 * d -e + f) * scal e;\n", 1651 "\treturn (-a + b - 2.0 * c + 2.0 * d -e + f) * scal e;\n",
1652 &sobelFuncName); 1652 &sobelFuncName);
1653 static const GrGLShaderVar gPointToNormalArgs[] = { 1653 static const GrGLShaderVar gPointToNormalArgs[] = {
1654 GrGLShaderVar("x", kFloat_GrSLType), 1654 GrGLShaderVar("x", kFloat_GrSLType),
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1899 SkASSERT(light->type() == SkLight::kPoint_LightType); 1899 SkASSERT(light->type() == SkLight::kPoint_LightType);
1900 const SkPointLight* pointLight = static_cast<const SkPointLight*>(light); 1900 const SkPointLight* pointLight = static_cast<const SkPointLight*>(light);
1901 setUniformPoint3(pdman, fLocationUni, pointLight->location()); 1901 setUniformPoint3(pdman, fLocationUni, pointLight->location());
1902 } 1902 }
1903 1903
1904 void GrGLPointLight::emitSurfaceToLight(GrGLFPBuilder* builder, const char* z) { 1904 void GrGLPointLight::emitSurfaceToLight(GrGLFPBuilder* builder, const char* z) {
1905 const char* loc; 1905 const char* loc;
1906 fLocationUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1906 fLocationUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1907 kVec3f_GrSLType, kDefault_GrSLPrecision, 1907 kVec3f_GrSLType, kDefault_GrSLPrecision,
1908 "LightLocation", &loc); 1908 "LightLocation", &loc);
1909 GrGLFPFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 1909 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
1910 fsBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", 1910 fsBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))",
1911 loc, fsBuilder->fragmentPosition(), z); 1911 loc, fsBuilder->fragmentPosition(), z);
1912 } 1912 }
1913 1913
1914 /////////////////////////////////////////////////////////////////////////////// 1914 ///////////////////////////////////////////////////////////////////////////////
1915 1915
1916 void GrGLSpotLight::setData(const GrGLProgramDataManager& pdman, 1916 void GrGLSpotLight::setData(const GrGLProgramDataManager& pdman,
1917 const SkLight* light) const { 1917 const SkLight* light) const {
1918 INHERITED::setData(pdman, light); 1918 INHERITED::setData(pdman, light);
1919 SkASSERT(light->type() == SkLight::kSpot_LightType); 1919 SkASSERT(light->type() == SkLight::kSpot_LightType);
1920 const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light); 1920 const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light);
1921 setUniformPoint3(pdman, fLocationUni, spotLight->location()); 1921 setUniformPoint3(pdman, fLocationUni, spotLight->location());
1922 pdman.set1f(fExponentUni, spotLight->specularExponent()); 1922 pdman.set1f(fExponentUni, spotLight->specularExponent());
1923 pdman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle()); 1923 pdman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle());
1924 pdman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle()); 1924 pdman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle());
1925 pdman.set1f(fConeScaleUni, spotLight->coneScale()); 1925 pdman.set1f(fConeScaleUni, spotLight->coneScale());
1926 setUniformNormal3(pdman, fSUni, spotLight->s()); 1926 setUniformNormal3(pdman, fSUni, spotLight->s());
1927 } 1927 }
1928 1928
1929 void GrGLSpotLight::emitSurfaceToLight(GrGLFPBuilder* builder, const char* z) { 1929 void GrGLSpotLight::emitSurfaceToLight(GrGLFPBuilder* builder, const char* z) {
1930 const char* location; 1930 const char* location;
1931 fLocationUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1931 fLocationUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1932 kVec3f_GrSLType, kDefault_GrSLPrecision, 1932 kVec3f_GrSLType, kDefault_GrSLPrecision,
1933 "LightLocation", &location); 1933 "LightLocation", &location);
1934 1934
1935 GrGLFPFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 1935 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
1936 fsBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))", 1936 fsBuilder->codeAppendf("normalize(%s - vec3(%s.xy, %s))",
1937 location, fsBuilder->fragmentPosition(), z); 1937 location, fsBuilder->fragmentPosition(), z);
1938 } 1938 }
1939 1939
1940 void GrGLSpotLight::emitLightColor(GrGLFPBuilder* builder, 1940 void GrGLSpotLight::emitLightColor(GrGLFPBuilder* builder,
1941 const char *surfaceToLight) { 1941 const char *surfaceToLight) {
1942 1942
1943 const char* color = builder->getUniformCStr(this->lightColorUni()); // creat ed by parent class. 1943 const char* color = builder->getUniformCStr(this->lightColorUni()); // creat ed by parent class.
1944 1944
1945 const char* exponent; 1945 const char* exponent;
(...skipping 23 matching lines...) Expand all
1969 lightColorBody.appendf("\tfloat cosAngle = -dot(surfaceToLight, %s);\n", s); 1969 lightColorBody.appendf("\tfloat cosAngle = -dot(surfaceToLight, %s);\n", s);
1970 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosOuter); 1970 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosOuter);
1971 lightColorBody.appendf("\t\treturn vec3(0);\n"); 1971 lightColorBody.appendf("\t\treturn vec3(0);\n");
1972 lightColorBody.appendf("\t}\n"); 1972 lightColorBody.appendf("\t}\n");
1973 lightColorBody.appendf("\tfloat scale = pow(cosAngle, %s);\n", exponent); 1973 lightColorBody.appendf("\tfloat scale = pow(cosAngle, %s);\n", exponent);
1974 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosInner); 1974 lightColorBody.appendf("\tif (cosAngle < %s) {\n", cosInner);
1975 lightColorBody.appendf("\t\treturn %s * scale * (cosAngle - %s) * %s;\n", 1975 lightColorBody.appendf("\t\treturn %s * scale * (cosAngle - %s) * %s;\n",
1976 color, cosOuter, coneScale); 1976 color, cosOuter, coneScale);
1977 lightColorBody.appendf("\t}\n"); 1977 lightColorBody.appendf("\t}\n");
1978 lightColorBody.appendf("\treturn %s;\n", color); 1978 lightColorBody.appendf("\treturn %s;\n", color);
1979 GrGLFPFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 1979 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
1980 fsBuilder->emitFunction(kVec3f_GrSLType, 1980 fsBuilder->emitFunction(kVec3f_GrSLType,
1981 "lightColor", 1981 "lightColor",
1982 SK_ARRAY_COUNT(gLightColorArgs), 1982 SK_ARRAY_COUNT(gLightColorArgs),
1983 gLightColorArgs, 1983 gLightColorArgs,
1984 lightColorBody.c_str(), 1984 lightColorBody.c_str(),
1985 &fLightColorFunc); 1985 &fLightColorFunc);
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