| 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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 surfaceToLight = l->surfaceToLight(x, y, m[4], surfaceScale); | 241 surfaceToLight = l->surfaceToLight(x, y, m[4], surfaceScale); |
| 242 *dptr++ = lightingType.light(bottomRightNormal(m, surfaceScale), surface
ToLight, l->lightColor(surfaceToLight)); | 242 *dptr++ = lightingType.light(bottomRightNormal(m, surfaceScale), surface
ToLight, l->lightColor(surfaceToLight)); |
| 243 } | 243 } |
| 244 } | 244 } |
| 245 | 245 |
| 246 SkPoint3 readPoint3(SkFlattenableReadBuffer& buffer) { | 246 SkPoint3 readPoint3(SkFlattenableReadBuffer& buffer) { |
| 247 SkPoint3 point; | 247 SkPoint3 point; |
| 248 point.fX = buffer.readScalar(); | 248 point.fX = buffer.readScalar(); |
| 249 point.fY = buffer.readScalar(); | 249 point.fY = buffer.readScalar(); |
| 250 point.fZ = buffer.readScalar(); | 250 point.fZ = buffer.readScalar(); |
| 251 buffer.validate(SkScalarIsFinite(point.fX) && |
| 252 SkScalarIsFinite(point.fY) && |
| 253 SkScalarIsFinite(point.fZ)); |
| 251 return point; | 254 return point; |
| 252 }; | 255 }; |
| 253 | 256 |
| 254 void writePoint3(const SkPoint3& point, SkFlattenableWriteBuffer& buffer) { | 257 void writePoint3(const SkPoint3& point, SkFlattenableWriteBuffer& buffer) { |
| 255 buffer.writeScalar(point.fX); | 258 buffer.writeScalar(point.fX); |
| 256 buffer.writeScalar(point.fY); | 259 buffer.writeScalar(point.fY); |
| 257 buffer.writeScalar(point.fZ); | 260 buffer.writeScalar(point.fZ); |
| 258 }; | 261 }; |
| 259 | 262 |
| 260 class SkDiffuseLightingImageFilter : public SkLightingImageFilter { | 263 class SkDiffuseLightingImageFilter : public SkLightingImageFilter { |
| (...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 const SkPoint3& s() const { return fS; } | 731 const SkPoint3& s() const { return fS; } |
| 729 | 732 |
| 730 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { | 733 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { |
| 731 fLocation = readPoint3(buffer); | 734 fLocation = readPoint3(buffer); |
| 732 fTarget = readPoint3(buffer); | 735 fTarget = readPoint3(buffer); |
| 733 fSpecularExponent = buffer.readScalar(); | 736 fSpecularExponent = buffer.readScalar(); |
| 734 fCosOuterConeAngle = buffer.readScalar(); | 737 fCosOuterConeAngle = buffer.readScalar(); |
| 735 fCosInnerConeAngle = buffer.readScalar(); | 738 fCosInnerConeAngle = buffer.readScalar(); |
| 736 fConeScale = buffer.readScalar(); | 739 fConeScale = buffer.readScalar(); |
| 737 fS = readPoint3(buffer); | 740 fS = readPoint3(buffer); |
| 741 buffer.validate(SkScalarIsFinite(fSpecularExponent) && |
| 742 SkScalarIsFinite(fCosOuterConeAngle) && |
| 743 SkScalarIsFinite(fCosInnerConeAngle) && |
| 744 SkScalarIsFinite(fConeScale)); |
| 738 } | 745 } |
| 739 protected: | 746 protected: |
| 740 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu
larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co
neScale, const SkPoint3& s, const SkPoint3& color) | 747 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu
larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co
neScale, const SkPoint3& s, const SkPoint3& color) |
| 741 : INHERITED(color), | 748 : INHERITED(color), |
| 742 fLocation(location), | 749 fLocation(location), |
| 743 fTarget(target), | 750 fTarget(target), |
| 744 fSpecularExponent(specularExponent), | 751 fSpecularExponent(specularExponent), |
| 745 fCosOuterConeAngle(cosOuterConeAngle), | 752 fCosOuterConeAngle(cosOuterConeAngle), |
| 746 fCosInnerConeAngle(cosInnerConeAngle), | 753 fCosInnerConeAngle(cosInnerConeAngle), |
| 747 fConeScale(coneScale), | 754 fConeScale(coneScale), |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 const SkPoint3& location, const SkPoint3& target, | 879 const SkPoint3& location, const SkPoint3& target, |
| 873 SkScalar specularExponent, SkScalar cutoffAngle, | 880 SkScalar specularExponent, SkScalar cutoffAngle, |
| 874 SkColor lightColor, SkScalar surfaceScale, | 881 SkColor lightColor, SkScalar surfaceScale, |
| 875 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR
ect) { | 882 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR
ect) { |
| 876 return SkNEW_ARGS(SkSpecularLightingImageFilter, | 883 return SkNEW_ARGS(SkSpecularLightingImageFilter, |
| 877 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl
e, lightColor)), | 884 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl
e, lightColor)), |
| 878 surfaceScale, ks, shininess, input, cropRect)); | 885 surfaceScale, ks, shininess, input, cropRect)); |
| 879 } | 886 } |
| 880 | 887 |
| 881 SkLightingImageFilter::~SkLightingImageFilter() { | 888 SkLightingImageFilter::~SkLightingImageFilter() { |
| 882 fLight->unref(); | 889 SkSafeUnref(fLight); |
| 883 } | 890 } |
| 884 | 891 |
| 885 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) | 892 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) |
| 886 : INHERITED(buffer) { | 893 : INHERITED(buffer) { |
| 887 fLight = SkLight::UnflattenLight(buffer); | 894 fLight = SkLight::UnflattenLight(buffer); |
| 888 fSurfaceScale = buffer.readScalar(); | 895 fSurfaceScale = buffer.readScalar(); |
| 896 buffer.validate(SkScalarIsFinite(fSurfaceScale)); |
| 889 } | 897 } |
| 890 | 898 |
| 891 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { | 899 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { |
| 892 this->INHERITED::flatten(buffer); | 900 this->INHERITED::flatten(buffer); |
| 893 fLight->flattenLight(buffer); | 901 fLight->flattenLight(buffer); |
| 894 buffer.writeScalar(fSurfaceScale); | 902 buffer.writeScalar(fSurfaceScale); |
| 895 } | 903 } |
| 896 | 904 |
| 897 /////////////////////////////////////////////////////////////////////////////// | 905 /////////////////////////////////////////////////////////////////////////////// |
| 898 | 906 |
| 899 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca
lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect =
NULL) | 907 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca
lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect =
NULL) |
| 900 : SkLightingImageFilter(light, surfaceScale, input, cropRect), | 908 : SkLightingImageFilter(light, surfaceScale, input, cropRect), |
| 901 fKD(kd) | 909 fKD(kd) |
| 902 { | 910 { |
| 903 } | 911 } |
| 904 | 912 |
| 905 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
er& buffer) | 913 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
er& buffer) |
| 906 : INHERITED(buffer) | 914 : INHERITED(buffer) |
| 907 { | 915 { |
| 908 fKD = buffer.readScalar(); | 916 fKD = buffer.readScalar(); |
| 917 buffer.validate(SkScalarIsFinite(fKD)); |
| 909 } | 918 } |
| 910 | 919 |
| 911 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con
st { | 920 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con
st { |
| 912 this->INHERITED::flatten(buffer); | 921 this->INHERITED::flatten(buffer); |
| 913 buffer.writeScalar(fKD); | 922 buffer.writeScalar(fKD); |
| 914 } | 923 } |
| 915 | 924 |
| 916 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*, | 925 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*, |
| 917 const SkBitmap& src, | 926 const SkBitmap& src, |
| 918 const SkMatrix& ctm, | 927 const SkMatrix& ctm, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 fKS(ks), | 985 fKS(ks), |
| 977 fShininess(shininess) | 986 fShininess(shininess) |
| 978 { | 987 { |
| 979 } | 988 } |
| 980 | 989 |
| 981 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
ffer& buffer) | 990 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
ffer& buffer) |
| 982 : INHERITED(buffer) | 991 : INHERITED(buffer) |
| 983 { | 992 { |
| 984 fKS = buffer.readScalar(); | 993 fKS = buffer.readScalar(); |
| 985 fShininess = buffer.readScalar(); | 994 fShininess = buffer.readScalar(); |
| 995 buffer.validate(SkScalarIsFinite(fKS) && |
| 996 SkScalarIsFinite(fShininess)); |
| 986 } | 997 } |
| 987 | 998 |
| 988 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co
nst { | 999 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co
nst { |
| 989 this->INHERITED::flatten(buffer); | 1000 this->INHERITED::flatten(buffer); |
| 990 buffer.writeScalar(fKS); | 1001 buffer.writeScalar(fKS); |
| 991 buffer.writeScalar(fShininess); | 1002 buffer.writeScalar(fShininess); |
| 992 } | 1003 } |
| 993 | 1004 |
| 994 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*, | 1005 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*, |
| 995 const SkBitmap& src, | 1006 const SkBitmap& src, |
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1573 | 1584 |
| 1574 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 1585 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
| 1575 } | 1586 } |
| 1576 | 1587 |
| 1577 #endif | 1588 #endif |
| 1578 | 1589 |
| 1579 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 1590 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
| 1580 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 1591 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
| 1581 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 1592 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
| 1582 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1593 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |