| 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 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 const SkPoint3& s() const { return fS; } | 728 const SkPoint3& s() const { return fS; } |
| 726 | 729 |
| 727 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { | 730 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { |
| 728 fLocation = readPoint3(buffer); | 731 fLocation = readPoint3(buffer); |
| 729 fTarget = readPoint3(buffer); | 732 fTarget = readPoint3(buffer); |
| 730 fSpecularExponent = buffer.readScalar(); | 733 fSpecularExponent = buffer.readScalar(); |
| 731 fCosOuterConeAngle = buffer.readScalar(); | 734 fCosOuterConeAngle = buffer.readScalar(); |
| 732 fCosInnerConeAngle = buffer.readScalar(); | 735 fCosInnerConeAngle = buffer.readScalar(); |
| 733 fConeScale = buffer.readScalar(); | 736 fConeScale = buffer.readScalar(); |
| 734 fS = readPoint3(buffer); | 737 fS = readPoint3(buffer); |
| 738 buffer.validate(SkScalarIsFinite(fSpecularExponent) && |
| 739 SkScalarIsFinite(fCosOuterConeAngle) && |
| 740 SkScalarIsFinite(fCosInnerConeAngle) && |
| 741 SkScalarIsFinite(fConeScale)); |
| 735 } | 742 } |
| 736 protected: | 743 protected: |
| 737 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu
larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co
neScale, const SkPoint3& s, const SkPoint3& color) | 744 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu
larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co
neScale, const SkPoint3& s, const SkPoint3& color) |
| 738 : INHERITED(color), | 745 : INHERITED(color), |
| 739 fLocation(location), | 746 fLocation(location), |
| 740 fTarget(target), | 747 fTarget(target), |
| 741 fSpecularExponent(specularExponent), | 748 fSpecularExponent(specularExponent), |
| 742 fCosOuterConeAngle(cosOuterConeAngle), | 749 fCosOuterConeAngle(cosOuterConeAngle), |
| 743 fCosInnerConeAngle(cosInnerConeAngle), | 750 fCosInnerConeAngle(cosInnerConeAngle), |
| 744 fConeScale(coneScale), | 751 fConeScale(coneScale), |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 869 const SkPoint3& location, const SkPoint3& target, | 876 const SkPoint3& location, const SkPoint3& target, |
| 870 SkScalar specularExponent, SkScalar cutoffAngle, | 877 SkScalar specularExponent, SkScalar cutoffAngle, |
| 871 SkColor lightColor, SkScalar surfaceScale, | 878 SkColor lightColor, SkScalar surfaceScale, |
| 872 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR
ect) { | 879 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR
ect) { |
| 873 return SkNEW_ARGS(SkSpecularLightingImageFilter, | 880 return SkNEW_ARGS(SkSpecularLightingImageFilter, |
| 874 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl
e, lightColor)), | 881 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl
e, lightColor)), |
| 875 surfaceScale, ks, shininess, input, cropRect)); | 882 surfaceScale, ks, shininess, input, cropRect)); |
| 876 } | 883 } |
| 877 | 884 |
| 878 SkLightingImageFilter::~SkLightingImageFilter() { | 885 SkLightingImageFilter::~SkLightingImageFilter() { |
| 879 fLight->unref(); | 886 SkSafeUnref(fLight); |
| 880 } | 887 } |
| 881 | 888 |
| 882 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) | 889 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) |
| 883 : INHERITED(buffer) { | 890 : INHERITED(buffer) { |
| 884 fLight = SkLight::UnflattenLight(buffer); | 891 fLight = SkLight::UnflattenLight(buffer); |
| 885 fSurfaceScale = buffer.readScalar(); | 892 fSurfaceScale = buffer.readScalar(); |
| 893 buffer.validate(SkScalarIsFinite(fSurfaceScale)); |
| 886 } | 894 } |
| 887 | 895 |
| 888 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { | 896 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { |
| 889 this->INHERITED::flatten(buffer); | 897 this->INHERITED::flatten(buffer); |
| 890 fLight->flattenLight(buffer); | 898 fLight->flattenLight(buffer); |
| 891 buffer.writeScalar(fSurfaceScale); | 899 buffer.writeScalar(fSurfaceScale); |
| 892 } | 900 } |
| 893 | 901 |
| 894 /////////////////////////////////////////////////////////////////////////////// | 902 /////////////////////////////////////////////////////////////////////////////// |
| 895 | 903 |
| 896 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) |
| 897 : SkLightingImageFilter(light, surfaceScale, input, cropRect), | 905 : SkLightingImageFilter(light, surfaceScale, input, cropRect), |
| 898 fKD(kd) | 906 fKD(kd) |
| 899 { | 907 { |
| 900 } | 908 } |
| 901 | 909 |
| 902 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
er& buffer) | 910 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
er& buffer) |
| 903 : INHERITED(buffer) | 911 : INHERITED(buffer) |
| 904 { | 912 { |
| 905 fKD = buffer.readScalar(); | 913 fKD = buffer.readScalar(); |
| 914 buffer.validate(SkScalarIsFinite(fKD)); |
| 906 } | 915 } |
| 907 | 916 |
| 908 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con
st { | 917 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con
st { |
| 909 this->INHERITED::flatten(buffer); | 918 this->INHERITED::flatten(buffer); |
| 910 buffer.writeScalar(fKD); | 919 buffer.writeScalar(fKD); |
| 911 } | 920 } |
| 912 | 921 |
| 913 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*, | 922 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*, |
| 914 const SkBitmap& src, | 923 const SkBitmap& src, |
| 915 const SkMatrix& ctm, | 924 const SkMatrix& ctm, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 973 fKS(ks), | 982 fKS(ks), |
| 974 fShininess(shininess) | 983 fShininess(shininess) |
| 975 { | 984 { |
| 976 } | 985 } |
| 977 | 986 |
| 978 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
ffer& buffer) | 987 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
ffer& buffer) |
| 979 : INHERITED(buffer) | 988 : INHERITED(buffer) |
| 980 { | 989 { |
| 981 fKS = buffer.readScalar(); | 990 fKS = buffer.readScalar(); |
| 982 fShininess = buffer.readScalar(); | 991 fShininess = buffer.readScalar(); |
| 992 buffer.validate(SkScalarIsFinite(fKS) && |
| 993 SkScalarIsFinite(fShininess)); |
| 983 } | 994 } |
| 984 | 995 |
| 985 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co
nst { | 996 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co
nst { |
| 986 this->INHERITED::flatten(buffer); | 997 this->INHERITED::flatten(buffer); |
| 987 buffer.writeScalar(fKS); | 998 buffer.writeScalar(fKS); |
| 988 buffer.writeScalar(fShininess); | 999 buffer.writeScalar(fShininess); |
| 989 } | 1000 } |
| 990 | 1001 |
| 991 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*, | 1002 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*, |
| 992 const SkBitmap& src, | 1003 const SkBitmap& src, |
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1570 | 1581 |
| 1571 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 1582 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
| 1572 } | 1583 } |
| 1573 | 1584 |
| 1574 #endif | 1585 #endif |
| 1575 | 1586 |
| 1576 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 1587 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
| 1577 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 1588 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
| 1578 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 1589 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
| 1579 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1590 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |