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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
257 }; | 257 }; |
258 | 258 |
259 void writePoint3(const SkPoint3& point, SkWriteBuffer& buffer) { | 259 void writePoint3(const SkPoint3& point, SkWriteBuffer& buffer) { |
260 buffer.writeScalar(point.fX); | 260 buffer.writeScalar(point.fX); |
261 buffer.writeScalar(point.fY); | 261 buffer.writeScalar(point.fY); |
262 buffer.writeScalar(point.fZ); | 262 buffer.writeScalar(point.fZ); |
263 }; | 263 }; |
264 | 264 |
265 class SkDiffuseLightingImageFilter : public SkLightingImageFilter { | 265 class SkDiffuseLightingImageFilter : public SkLightingImageFilter { |
266 public: | 266 public: |
267 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, | 267 static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale, SkScalar kd, SkImageFilter*, |
268 SkScalar kd, SkImageFilter* input, const CropRe ct* cropRect); | 268 const CropRect*); |
269 | |
269 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter) | 270 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter) |
270 SkScalar kd() const { return fKD; } | 271 SkScalar kd() const { return fKD; } |
271 | 272 |
272 protected: | 273 protected: |
274 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, | |
275 SkScalar kd, SkImageFilter* input, const CropRe ct* cropRect); | |
276 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING | |
273 explicit SkDiffuseLightingImageFilter(SkReadBuffer& buffer); | 277 explicit SkDiffuseLightingImageFilter(SkReadBuffer& buffer); |
278 #endif | |
274 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; | 279 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; |
275 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, | 280 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, |
276 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE; | 281 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE; |
277 #if SK_SUPPORT_GPU | 282 #if SK_SUPPORT_GPU |
278 virtual bool asNewEffect(GrEffect** effect, GrTexture*, const SkMatrix& matr ix, | 283 virtual bool asNewEffect(GrEffect** effect, GrTexture*, const SkMatrix& matr ix, |
279 const SkIRect& bounds) const SK_OVERRIDE; | 284 const SkIRect& bounds) const SK_OVERRIDE; |
280 #endif | 285 #endif |
281 | 286 |
282 private: | 287 private: |
283 typedef SkLightingImageFilter INHERITED; | 288 typedef SkLightingImageFilter INHERITED; |
284 SkScalar fKD; | 289 SkScalar fKD; |
285 }; | 290 }; |
286 | 291 |
287 class SkSpecularLightingImageFilter : public SkLightingImageFilter { | 292 class SkSpecularLightingImageFilter : public SkLightingImageFilter { |
288 public: | 293 public: |
289 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect); | 294 static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale, |
295 SkScalar ks, SkScalar shininess, SkImageFilter* , const CropRect*); | |
296 | |
290 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter) | 297 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter) |
291 | 298 |
292 SkScalar ks() const { return fKS; } | 299 SkScalar ks() const { return fKS; } |
293 SkScalar shininess() const { return fShininess; } | 300 SkScalar shininess() const { return fShininess; } |
294 | 301 |
295 protected: | 302 protected: |
303 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks, | |
304 SkScalar shininess, SkImageFilter* input, cons t CropRect*); | |
305 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING | |
296 explicit SkSpecularLightingImageFilter(SkReadBuffer& buffer); | 306 explicit SkSpecularLightingImageFilter(SkReadBuffer& buffer); |
307 #endif | |
297 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; | 308 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; |
298 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, | 309 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, |
299 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE; | 310 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE; |
300 #if SK_SUPPORT_GPU | 311 #if SK_SUPPORT_GPU |
301 virtual bool asNewEffect(GrEffect** effect, GrTexture*, const SkMatrix& matr ix, | 312 virtual bool asNewEffect(GrEffect** effect, GrTexture*, const SkMatrix& matr ix, |
302 const SkIRect& bounds) const SK_OVERRIDE; | 313 const SkIRect& bounds) const SK_OVERRIDE; |
303 #endif | 314 #endif |
304 | 315 |
305 private: | 316 private: |
306 typedef SkLightingImageFilter INHERITED; | 317 typedef SkLightingImageFilter INHERITED; |
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
826 SkDEBUGFAIL("Unknown LightType."); | 837 SkDEBUGFAIL("Unknown LightType."); |
827 buffer.validate(false); | 838 buffer.validate(false); |
828 return NULL; | 839 return NULL; |
829 } | 840 } |
830 } | 841 } |
831 /////////////////////////////////////////////////////////////////////////////// | 842 /////////////////////////////////////////////////////////////////////////////// |
832 | 843 |
833 SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceSca le, | 844 SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceSca le, |
834 SkImageFilter* input, const CropRec t* cropRect) | 845 SkImageFilter* input, const CropRec t* cropRect) |
835 : INHERITED(1, &input, cropRect), | 846 : INHERITED(1, &input, cropRect), |
836 fLight(light), | 847 fLight(SkRef(light)), |
837 fSurfaceScale(SkScalarDiv(surfaceScale, SkIntToScalar(255))) | 848 fSurfaceScale(surfaceScale / 255) |
838 { | 849 { |
839 SkASSERT(fLight); | 850 SkASSERT(fLight); |
840 // our caller knows that we take ownership of the light, so we don't | 851 // our caller knows that we take ownership of the light, so we don't |
Stephen White
2014/08/18 18:17:26
I think this comment should now be removed, since
reed1
2014/08/18 22:39:16
Done.
| |
841 // need to call ref() here. | 852 // need to call ref() here. |
842 } | 853 } |
843 | 854 |
844 SkImageFilter* SkLightingImageFilter::CreateDistantLitDiffuse( | 855 SkImageFilter* SkLightingImageFilter::CreateDistantLitDiffuse(const SkPoint3& di rection, |
845 const SkPoint3& direction, SkColor lightColor, SkScalar surfaceScale, | 856 SkColor lightColor , |
846 SkScalar kd, SkImageFilter* input, const CropRect* cropRect) { | 857 SkScalar surfaceSc ale, |
847 return SkNEW_ARGS(SkDiffuseLightingImageFilter, | 858 SkScalar kd, |
848 (SkNEW_ARGS(SkDistantLight, (direction, lightColor)), surfaceScale, kd, | 859 SkImageFilter* inp ut, |
849 input, cropRect)); | 860 const CropRect* cr opRect) { |
861 SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkDistantLight, (direction, lightColo r))); | |
862 return SkDiffuseLightingImageFilter::Create(light, surfaceScale, kd, input, cropRect); | |
850 } | 863 } |
851 | 864 |
852 SkImageFilter* SkLightingImageFilter::CreatePointLitDiffuse( | 865 SkImageFilter* SkLightingImageFilter::CreatePointLitDiffuse(const SkPoint3& loca tion, |
853 const SkPoint3& location, SkColor lightColor, SkScalar surfaceScale, | 866 SkColor lightColor, |
854 SkScalar kd, SkImageFilter* input, const CropRect* cropRect) { | 867 SkScalar surfaceScal e, |
855 return SkNEW_ARGS(SkDiffuseLightingImageFilter, | 868 SkScalar kd, |
856 (SkNEW_ARGS(SkPointLight, (location, lightColor)), surfaceScale, kd, | 869 SkImageFilter* input , |
857 input, cropRect)); | 870 const CropRect* crop Rect) { |
871 SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkPointLight, (location, lightColor)) ); | |
872 return SkDiffuseLightingImageFilter::Create(light, surfaceScale, kd, input, cropRect); | |
858 } | 873 } |
859 | 874 |
860 SkImageFilter* SkLightingImageFilter::CreateSpotLitDiffuse( | 875 SkImageFilter* SkLightingImageFilter::CreateSpotLitDiffuse(const SkPoint3& locat ion, |
861 const SkPoint3& location, const SkPoint3& target, | 876 const SkPoint3& targe t, |
862 SkScalar specularExponent, SkScalar cutoffAngle, | 877 SkScalar specularExpo nent, |
863 SkColor lightColor, SkScalar surfaceScale, SkScalar kd, | 878 SkScalar cutoffAngle, |
864 SkImageFilter* input, const CropRect* cropRect) { | 879 SkColor lightColor, |
865 return SkNEW_ARGS(SkDiffuseLightingImageFilter, | 880 SkScalar surfaceScale , |
866 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, | 881 SkScalar kd, |
867 cutoffAngle, lightColor)), | 882 SkImageFilter* input, |
868 surfaceScale, kd, input, cropRect)); | 883 const CropRect* cropR ect) { |
884 SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkSpotLight, (location, target, specu larExponent, | |
885 cutoffAngle, lightColor ))); | |
886 return SkDiffuseLightingImageFilter::Create(light, surfaceScale, kd, input, cropRect); | |
869 } | 887 } |
870 | 888 |
871 SkImageFilter* SkLightingImageFilter::CreateDistantLitSpecular( | 889 SkImageFilter* SkLightingImageFilter::CreateDistantLitSpecular(const SkPoint3& d irection, |
872 const SkPoint3& direction, SkColor lightColor, SkScalar surfaceScale, | 890 SkColor lightColo r, |
873 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR ect) { | 891 SkScalar surfaceS cale, |
874 return SkNEW_ARGS(SkSpecularLightingImageFilter, | 892 SkScalar ks, |
875 (SkNEW_ARGS(SkDistantLight, (direction, lightColor)), | 893 SkScalar shine, |
876 surfaceScale, ks, shininess, input, cropRect)); | 894 SkImageFilter* in put, |
895 const CropRect* c ropRect) { | |
896 SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkDistantLight, (direction, lightColo r))); | |
897 return SkSpecularLightingImageFilter::Create(light, surfaceScale, ks, shine, input, cropRect); | |
877 } | 898 } |
878 | 899 |
879 SkImageFilter* SkLightingImageFilter::CreatePointLitSpecular( | 900 SkImageFilter* SkLightingImageFilter::CreatePointLitSpecular(const SkPoint3& loc ation, |
880 const SkPoint3& location, SkColor lightColor, SkScalar surfaceScale, | 901 SkColor lightColor, |
881 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR ect) { | 902 SkScalar surfaceSca le, |
882 return SkNEW_ARGS(SkSpecularLightingImageFilter, | 903 SkScalar ks, |
883 (SkNEW_ARGS(SkPointLight, (location, lightColor)), | 904 SkScalar shine, |
884 surfaceScale, ks, shininess, input, cropRect)); | 905 SkImageFilter* inpu t, |
906 const CropRect* cro pRect) { | |
907 SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkPointLight, (location, lightColor)) ); | |
908 return SkSpecularLightingImageFilter::Create(light, surfaceScale, ks, shine, input, cropRect); | |
885 } | 909 } |
886 | 910 |
887 SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular( | 911 SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular(const SkPoint3& loca tion, |
888 const SkPoint3& location, const SkPoint3& target, | 912 const SkPoint3& targ et, |
889 SkScalar specularExponent, SkScalar cutoffAngle, | 913 SkScalar specularExp onent, |
890 SkColor lightColor, SkScalar surfaceScale, | 914 SkScalar cutoffAngle , |
891 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR ect) { | 915 SkColor lightColor, |
892 return SkNEW_ARGS(SkSpecularLightingImageFilter, | 916 SkScalar surfaceScal e, |
893 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl e, lightColor)), | 917 SkScalar ks, |
894 surfaceScale, ks, shininess, input, cropRect)); | 918 SkScalar shine, |
919 SkImageFilter* input , | |
920 const CropRect* crop Rect) { | |
921 SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkSpotLight, (location, target, specu larExponent, | |
922 cutoffAngle, lightColor ))); | |
923 return SkSpecularLightingImageFilter::Create(light, surfaceScale, ks, shine, input, cropRect); | |
895 } | 924 } |
896 | 925 |
897 SkLightingImageFilter::~SkLightingImageFilter() { | 926 SkLightingImageFilter::~SkLightingImageFilter() {} |
898 SkSafeUnref(fLight); | |
899 } | |
900 | 927 |
928 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING | |
901 SkLightingImageFilter::SkLightingImageFilter(SkReadBuffer& buffer) | 929 SkLightingImageFilter::SkLightingImageFilter(SkReadBuffer& buffer) |
902 : INHERITED(1, buffer) { | 930 : INHERITED(1, buffer) { |
903 fLight = SkLight::UnflattenLight(buffer); | 931 fLight.reset(SkLight::UnflattenLight(buffer)); |
904 fSurfaceScale = buffer.readScalar(); | 932 fSurfaceScale = buffer.readScalar(); |
905 buffer.validate(SkScalarIsFinite(fSurfaceScale)); | 933 buffer.validate(SkScalarIsFinite(fSurfaceScale)); |
906 } | 934 } |
935 #endif | |
907 | 936 |
908 void SkLightingImageFilter::flatten(SkWriteBuffer& buffer) const { | 937 void SkLightingImageFilter::flatten(SkWriteBuffer& buffer) const { |
909 this->INHERITED::flatten(buffer); | 938 this->INHERITED::flatten(buffer); |
910 fLight->flattenLight(buffer); | 939 fLight->flattenLight(buffer); |
911 buffer.writeScalar(fSurfaceScale); | 940 buffer.writeScalar(fSurfaceScale * 255); |
912 } | 941 } |
913 | 942 |
914 /////////////////////////////////////////////////////////////////////////////// | 943 /////////////////////////////////////////////////////////////////////////////// |
915 | 944 |
945 SkImageFilter* SkDiffuseLightingImageFilter::Create(SkLight* light, SkScalar sur faceScale, | |
946 SkScalar kd, SkImageFilter* input, const Cro pRect* cropRect) { | |
947 if (NULL == light) { | |
948 return NULL; | |
949 } | |
950 if (!SkScalarIsFinite(surfaceScale) || !SkScalarIsFinite(kd)) { | |
951 return NULL; | |
952 } | |
953 // According to the spec, kd can be any non-negative number : | |
954 // http://www.w3.org/TR/SVG/filters.html#feDiffuseLightingElement | |
955 if (kd < 0) { | |
956 return NULL; | |
957 } | |
958 return SkNEW_ARGS(SkDiffuseLightingImageFilter, (light, surfaceScale, kd, in put, cropRect)); | |
959 } | |
960 | |
916 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect = NULL) | 961 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect = NULL) |
917 : SkLightingImageFilter(light, surfaceScale, input, cropRect), | 962 : SkLightingImageFilter(light, surfaceScale, input, cropRect), |
918 // According to the spec, kd can be any non-negative number : | 963 fKD(kd) |
919 // http://www.w3.org/TR/SVG/filters.html#feDiffuseLightingElement | |
920 fKD(kd < 0 ? 0 : kd) | |
921 { | 964 { |
922 } | 965 } |
923 | 966 |
967 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING | |
924 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkReadBuffer& buffer) | 968 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkReadBuffer& buffer) |
925 : INHERITED(buffer) | 969 : INHERITED(buffer) |
926 { | 970 { |
927 fKD = buffer.readScalar(); | 971 fKD = buffer.readScalar(); |
928 buffer.validate(SkScalarIsFinite(fKD) && (fKD >= 0)); | 972 buffer.validate(SkScalarIsFinite(fKD) && (fKD >= 0)); |
929 } | 973 } |
974 #endif | |
975 | |
976 SkFlattenable* SkDiffuseLightingImageFilter::CreateProc(SkReadBuffer& buffer) { | |
977 SK_IMAGEFILTER_UNFLATTEN_COMMON(1); | |
978 SkAutoTUnref<SkLight> light(SkLight::UnflattenLight(buffer)); | |
979 SkScalar surfaceScale = buffer.readScalar(); | |
980 SkScalar kd = buffer.readScalar(); | |
981 return Create(light, surfaceScale, kd, common.inputAt(0), &common.cropRect() ); | |
982 } | |
930 | 983 |
931 void SkDiffuseLightingImageFilter::flatten(SkWriteBuffer& buffer) const { | 984 void SkDiffuseLightingImageFilter::flatten(SkWriteBuffer& buffer) const { |
932 this->INHERITED::flatten(buffer); | 985 this->INHERITED::flatten(buffer); |
933 buffer.writeScalar(fKD); | 986 buffer.writeScalar(fKD); |
934 } | 987 } |
935 | 988 |
936 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy, | 989 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy, |
937 const SkBitmap& source, | 990 const SkBitmap& source, |
938 const Context& ctx, | 991 const Context& ctx, |
939 SkBitmap* dst, | 992 SkBitmap* dst, |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
993 if (effect) { | 1046 if (effect) { |
994 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); | 1047 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); |
995 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, matri x, kd()); | 1048 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, matri x, kd()); |
996 } | 1049 } |
997 return true; | 1050 return true; |
998 } | 1051 } |
999 #endif | 1052 #endif |
1000 | 1053 |
1001 /////////////////////////////////////////////////////////////////////////////// | 1054 /////////////////////////////////////////////////////////////////////////////// |
1002 | 1055 |
1056 SkImageFilter* SkSpecularLightingImageFilter::Create(SkLight* light, SkScalar su rfaceScale, | |
1057 SkScalar ks, SkScalar shininess, SkImageFilter* input, const Cro pRect* cropRect) { | |
1058 if (NULL == light) { | |
1059 return NULL; | |
1060 } | |
1061 if (!SkScalarIsFinite(surfaceScale) || !SkScalarIsFinite(ks) || !SkScalarIsF inite(shininess)) { | |
1062 return NULL; | |
1063 } | |
1064 // According to the spec, ks can be any non-negative number : | |
1065 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingElement | |
1066 if (ks < 0) { | |
1067 return NULL; | |
1068 } | |
1069 return SkNEW_ARGS(SkSpecularLightingImageFilter, | |
1070 (light, surfaceScale, ks, shininess, input, cropRect)); | |
1071 } | |
1072 | |
1003 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect) | 1073 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect) |
1004 : SkLightingImageFilter(light, surfaceScale, input, cropRect), | 1074 : SkLightingImageFilter(light, surfaceScale, input, cropRect), |
1005 // According to the spec, ks can be any non-negative number : | 1075 fKS(ks), |
1006 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingElement | |
1007 fKS(ks < 0 ? 0 : ks), | |
1008 fShininess(shininess) | 1076 fShininess(shininess) |
1009 { | 1077 { |
1010 } | 1078 } |
1011 | 1079 |
1012 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkReadBuffer& buffe r) | 1080 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING |
1081 kSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkReadBuffer& buffer ) | |
1013 : INHERITED(buffer) | 1082 : INHERITED(buffer) |
1014 { | 1083 { |
1015 fKS = buffer.readScalar(); | 1084 fKS = buffer.readScalar(); |
1016 fShininess = buffer.readScalar(); | 1085 fShininess = buffer.readScalar(); |
1017 buffer.validate(SkScalarIsFinite(fKS) && (fKS >= 0) && | 1086 buffer.validate(SkScalarIsFinite(fKS) && (fKS >= 0) && |
1018 SkScalarIsFinite(fShininess)); | 1087 SkScalarIsFinite(fShininess)); |
1019 } | 1088 } |
1089 #endif | |
1090 | |
1091 SkFlattenable* SkSpecularLightingImageFilter::CreateProc(SkReadBuffer& buffer) { | |
1092 SK_IMAGEFILTER_UNFLATTEN_COMMON(1); | |
1093 SkAutoTUnref<SkLight> light(SkLight::UnflattenLight(buffer)); | |
1094 SkScalar surfaceScale = buffer.readScalar(); | |
1095 SkScalar ks = buffer.readScalar(); | |
1096 SkScalar shine = buffer.readScalar(); | |
1097 return Create(light, surfaceScale, ks, shine, common.inputAt(0), &common.cro pRect()); | |
1098 } | |
1020 | 1099 |
1021 void SkSpecularLightingImageFilter::flatten(SkWriteBuffer& buffer) const { | 1100 void SkSpecularLightingImageFilter::flatten(SkWriteBuffer& buffer) const { |
1022 this->INHERITED::flatten(buffer); | 1101 this->INHERITED::flatten(buffer); |
1023 buffer.writeScalar(fKS); | 1102 buffer.writeScalar(fKS); |
1024 buffer.writeScalar(fShininess); | 1103 buffer.writeScalar(fShininess); |
1025 } | 1104 } |
1026 | 1105 |
1027 bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy, | 1106 bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy, |
1028 const SkBitmap& source, | 1107 const SkBitmap& source, |
1029 const Context& ctx, | 1108 const Context& ctx, |
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1616 | 1695 |
1617 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 1696 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
1618 } | 1697 } |
1619 | 1698 |
1620 #endif | 1699 #endif |
1621 | 1700 |
1622 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 1701 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
1623 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 1702 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
1624 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 1703 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
1625 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1704 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |