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 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 surfaceToLight = l->surfaceToLight(x, y, m[4], surfaceScale); | 242 surfaceToLight = l->surfaceToLight(x, y, m[4], surfaceScale); |
243 *dptr++ = lightingType.light(bottomRightNormal(m, surfaceScale), surface
ToLight, l->lightColor(surfaceToLight)); | 243 *dptr++ = lightingType.light(bottomRightNormal(m, surfaceScale), surface
ToLight, l->lightColor(surfaceToLight)); |
244 } | 244 } |
245 } | 245 } |
246 | 246 |
247 SkPoint3 readPoint3(SkFlattenableReadBuffer& buffer) { | 247 SkPoint3 readPoint3(SkFlattenableReadBuffer& buffer) { |
248 SkPoint3 point; | 248 SkPoint3 point; |
249 point.fX = buffer.readScalar(); | 249 point.fX = buffer.readScalar(); |
250 point.fY = buffer.readScalar(); | 250 point.fY = buffer.readScalar(); |
251 point.fZ = buffer.readScalar(); | 251 point.fZ = buffer.readScalar(); |
| 252 buffer.validateData(SkScalarIsFinite(point.fX) && |
| 253 SkScalarIsFinite(point.fY) && |
| 254 SkScalarIsFinite(point.fZ)); |
252 return point; | 255 return point; |
253 }; | 256 }; |
254 | 257 |
255 void writePoint3(const SkPoint3& point, SkFlattenableWriteBuffer& buffer) { | 258 void writePoint3(const SkPoint3& point, SkFlattenableWriteBuffer& buffer) { |
256 buffer.writeScalar(point.fX); | 259 buffer.writeScalar(point.fX); |
257 buffer.writeScalar(point.fY); | 260 buffer.writeScalar(point.fY); |
258 buffer.writeScalar(point.fZ); | 261 buffer.writeScalar(point.fZ); |
259 }; | 262 }; |
260 | 263 |
261 class SkDiffuseLightingImageFilter : public SkLightingImageFilter { | 264 class SkDiffuseLightingImageFilter : public SkLightingImageFilter { |
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 | 737 |
735 protected: | 738 protected: |
736 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { | 739 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { |
737 fLocation = readPoint3(buffer); | 740 fLocation = readPoint3(buffer); |
738 fTarget = readPoint3(buffer); | 741 fTarget = readPoint3(buffer); |
739 fSpecularExponent = buffer.readScalar(); | 742 fSpecularExponent = buffer.readScalar(); |
740 fCosOuterConeAngle = buffer.readScalar(); | 743 fCosOuterConeAngle = buffer.readScalar(); |
741 fCosInnerConeAngle = buffer.readScalar(); | 744 fCosInnerConeAngle = buffer.readScalar(); |
742 fConeScale = buffer.readScalar(); | 745 fConeScale = buffer.readScalar(); |
743 fS = readPoint3(buffer); | 746 fS = readPoint3(buffer); |
| 747 buffer.validateData(SkScalarIsFinite(fSpecularExponent) && |
| 748 SkScalarIsFinite(fCosOuterConeAngle) && |
| 749 SkScalarIsFinite(fCosInnerConeAngle) && |
| 750 SkScalarIsFinite(fConeScale)); |
744 } | 751 } |
745 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu
larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co
neScale, const SkPoint3& s, const SkPoint3& color) | 752 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu
larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co
neScale, const SkPoint3& s, const SkPoint3& color) |
746 : INHERITED(color), | 753 : INHERITED(color), |
747 fLocation(location), | 754 fLocation(location), |
748 fTarget(target), | 755 fTarget(target), |
749 fSpecularExponent(specularExponent), | 756 fSpecularExponent(specularExponent), |
750 fCosOuterConeAngle(cosOuterConeAngle), | 757 fCosOuterConeAngle(cosOuterConeAngle), |
751 fCosInnerConeAngle(cosInnerConeAngle), | 758 fCosInnerConeAngle(cosInnerConeAngle), |
752 fConeScale(coneScale), | 759 fConeScale(coneScale), |
753 fS(s) | 760 fS(s) |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 | 862 |
856 SkLightingImageFilter::~SkLightingImageFilter() { | 863 SkLightingImageFilter::~SkLightingImageFilter() { |
857 fLight->unref(); | 864 fLight->unref(); |
858 } | 865 } |
859 | 866 |
860 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) | 867 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) |
861 : INHERITED(buffer) | 868 : INHERITED(buffer) |
862 { | 869 { |
863 fLight = buffer.readFlattenableT<SkLight>(); | 870 fLight = buffer.readFlattenableT<SkLight>(); |
864 fSurfaceScale = buffer.readScalar(); | 871 fSurfaceScale = buffer.readScalar(); |
| 872 buffer.validateData(SkScalarIsFinite(fSurfaceScale)); |
865 } | 873 } |
866 | 874 |
867 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { | 875 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { |
868 this->INHERITED::flatten(buffer); | 876 this->INHERITED::flatten(buffer); |
869 buffer.writeFlattenable(fLight); | 877 buffer.writeFlattenable(fLight); |
870 buffer.writeScalar(fSurfaceScale); | 878 buffer.writeScalar(fSurfaceScale); |
871 } | 879 } |
872 | 880 |
873 /////////////////////////////////////////////////////////////////////////////// | 881 /////////////////////////////////////////////////////////////////////////////// |
874 | 882 |
875 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca
lar surfaceScale, SkScalar kd, SkImageFilter* input, const SkIRect* cropRect = N
ULL) | 883 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca
lar surfaceScale, SkScalar kd, SkImageFilter* input, const SkIRect* cropRect = N
ULL) |
876 : SkLightingImageFilter(light, surfaceScale, input, cropRect), | 884 : SkLightingImageFilter(light, surfaceScale, input, cropRect), |
877 fKD(kd) | 885 fKD(kd) |
878 { | 886 { |
879 } | 887 } |
880 | 888 |
881 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
er& buffer) | 889 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
er& buffer) |
882 : INHERITED(buffer) | 890 : INHERITED(buffer) |
883 { | 891 { |
884 fKD = buffer.readScalar(); | 892 fKD = buffer.readScalar(); |
| 893 buffer.validateData(SkScalarIsFinite(fKD)); |
885 } | 894 } |
886 | 895 |
887 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con
st { | 896 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con
st { |
888 this->INHERITED::flatten(buffer); | 897 this->INHERITED::flatten(buffer); |
889 buffer.writeScalar(fKD); | 898 buffer.writeScalar(fKD); |
890 } | 899 } |
891 | 900 |
892 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*, | 901 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*, |
893 const SkBitmap& src, | 902 const SkBitmap& src, |
894 const SkMatrix& ctm, | 903 const SkMatrix& ctm, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 fKS(ks), | 961 fKS(ks), |
953 fShininess(shininess) | 962 fShininess(shininess) |
954 { | 963 { |
955 } | 964 } |
956 | 965 |
957 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
ffer& buffer) | 966 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
ffer& buffer) |
958 : INHERITED(buffer) | 967 : INHERITED(buffer) |
959 { | 968 { |
960 fKS = buffer.readScalar(); | 969 fKS = buffer.readScalar(); |
961 fShininess = buffer.readScalar(); | 970 fShininess = buffer.readScalar(); |
| 971 buffer.validateData(SkScalarIsFinite(fKS) && |
| 972 SkScalarIsFinite(fShininess)); |
962 } | 973 } |
963 | 974 |
964 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co
nst { | 975 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co
nst { |
965 this->INHERITED::flatten(buffer); | 976 this->INHERITED::flatten(buffer); |
966 buffer.writeScalar(fKS); | 977 buffer.writeScalar(fKS); |
967 buffer.writeScalar(fShininess); | 978 buffer.writeScalar(fShininess); |
968 } | 979 } |
969 | 980 |
970 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*, | 981 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*, |
971 const SkBitmap& src, | 982 const SkBitmap& src, |
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1564 | 1575 |
1565 #endif | 1576 #endif |
1566 | 1577 |
1567 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 1578 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
1568 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 1579 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
1569 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 1580 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
1570 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight) | 1581 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight) |
1571 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight) | 1582 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight) |
1572 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight) | 1583 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight) |
1573 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1584 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |