| 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 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 880 return SkNEW_ARGS(SkSpecularLightingImageFilter, | 880 return SkNEW_ARGS(SkSpecularLightingImageFilter, |
| 881 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl
e, lightColor)), | 881 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl
e, lightColor)), |
| 882 surfaceScale, ks, shininess, input, cropRect)); | 882 surfaceScale, ks, shininess, input, cropRect)); |
| 883 } | 883 } |
| 884 | 884 |
| 885 SkLightingImageFilter::~SkLightingImageFilter() { | 885 SkLightingImageFilter::~SkLightingImageFilter() { |
| 886 SkSafeUnref(fLight); | 886 SkSafeUnref(fLight); |
| 887 } | 887 } |
| 888 | 888 |
| 889 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) | 889 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) |
| 890 : INHERITED(buffer) { | 890 : INHERITED(1, buffer) { |
| 891 fLight = SkLight::UnflattenLight(buffer); | 891 fLight = SkLight::UnflattenLight(buffer); |
| 892 fSurfaceScale = buffer.readScalar(); | 892 fSurfaceScale = buffer.readScalar(); |
| 893 buffer.validate(SkScalarIsFinite(fSurfaceScale)); | 893 buffer.validate(SkScalarIsFinite(fSurfaceScale)); |
| 894 } | 894 } |
| 895 | 895 |
| 896 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { | 896 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { |
| 897 this->INHERITED::flatten(buffer); | 897 this->INHERITED::flatten(buffer); |
| 898 fLight->flattenLight(buffer); | 898 fLight->flattenLight(buffer); |
| 899 buffer.writeScalar(fSurfaceScale); | 899 buffer.writeScalar(fSurfaceScale); |
| 900 } | 900 } |
| 901 | 901 |
| 902 /////////////////////////////////////////////////////////////////////////////// | 902 /////////////////////////////////////////////////////////////////////////////// |
| 903 | 903 |
| 904 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca
lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect =
NULL) | 904 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca
lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect =
NULL) |
| 905 : SkLightingImageFilter(light, surfaceScale, input, cropRect), | 905 : SkLightingImageFilter(light, surfaceScale, input, cropRect), |
| 906 fKD(kd) | 906 // According to the spec, kd can be any non-negative number : |
| 907 // http://www.w3.org/TR/SVG/filters.html#feDiffuseLightingElement |
| 908 fKD(kd < 0 ? 0 : kd) |
| 907 { | 909 { |
| 908 } | 910 } |
| 909 | 911 |
| 910 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
er& buffer) | 912 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
er& buffer) |
| 911 : INHERITED(buffer) | 913 : INHERITED(buffer) |
| 912 { | 914 { |
| 913 fKD = buffer.readScalar(); | 915 fKD = buffer.readScalar(); |
| 914 buffer.validate(SkScalarIsFinite(fKD)); | 916 buffer.validate(SkScalarIsFinite(fKD) && (fKD >= 0)); |
| 915 } | 917 } |
| 916 | 918 |
| 917 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con
st { | 919 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con
st { |
| 918 this->INHERITED::flatten(buffer); | 920 this->INHERITED::flatten(buffer); |
| 919 buffer.writeScalar(fKD); | 921 buffer.writeScalar(fKD); |
| 920 } | 922 } |
| 921 | 923 |
| 922 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy, | 924 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy, |
| 923 const SkBitmap& source, | 925 const SkBitmap& source, |
| 924 const SkMatrix& ctm, | 926 const SkMatrix& ctm, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, matri
x, kd()); | 980 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, matri
x, kd()); |
| 979 } | 981 } |
| 980 return true; | 982 return true; |
| 981 } | 983 } |
| 982 #endif | 984 #endif |
| 983 | 985 |
| 984 /////////////////////////////////////////////////////////////////////////////// | 986 /////////////////////////////////////////////////////////////////////////////// |
| 985 | 987 |
| 986 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS
calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const
CropRect* cropRect) | 988 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS
calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const
CropRect* cropRect) |
| 987 : SkLightingImageFilter(light, surfaceScale, input, cropRect), | 989 : SkLightingImageFilter(light, surfaceScale, input, cropRect), |
| 988 fKS(ks), | 990 // According to the spec, ks can be any non-negative number : |
| 991 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingElement |
| 992 fKS(ks < 0 ? 0 : ks), |
| 989 fShininess(shininess) | 993 fShininess(shininess) |
| 990 { | 994 { |
| 991 } | 995 } |
| 992 | 996 |
| 993 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
ffer& buffer) | 997 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
ffer& buffer) |
| 994 : INHERITED(buffer) | 998 : INHERITED(buffer) |
| 995 { | 999 { |
| 996 fKS = buffer.readScalar(); | 1000 fKS = buffer.readScalar(); |
| 997 fShininess = buffer.readScalar(); | 1001 fShininess = buffer.readScalar(); |
| 998 buffer.validate(SkScalarIsFinite(fKS) && | 1002 buffer.validate(SkScalarIsFinite(fKS) && (fKS >= 0) && |
| 999 SkScalarIsFinite(fShininess)); | 1003 SkScalarIsFinite(fShininess)); |
| 1000 } | 1004 } |
| 1001 | 1005 |
| 1002 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co
nst { | 1006 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co
nst { |
| 1003 this->INHERITED::flatten(buffer); | 1007 this->INHERITED::flatten(buffer); |
| 1004 buffer.writeScalar(fKS); | 1008 buffer.writeScalar(fKS); |
| 1005 buffer.writeScalar(fShininess); | 1009 buffer.writeScalar(fShininess); |
| 1006 } | 1010 } |
| 1007 | 1011 |
| 1008 bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy, | 1012 bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy, |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1593 | 1597 |
| 1594 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 1598 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
| 1595 } | 1599 } |
| 1596 | 1600 |
| 1597 #endif | 1601 #endif |
| 1598 | 1602 |
| 1599 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 1603 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
| 1600 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 1604 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
| 1601 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 1605 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
| 1602 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1606 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |