Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1259)

Side by Side Diff: src/effects/SkLightingImageFilter.cpp

Issue 503833002: Reimplement deserialization of SkImageFilter's uniqueID. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/SkDropShadowImageFilter.cpp ('k') | src/effects/SkMatrixConvolutionImageFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale, SkScalar kd, SkImageFilter*, 267 static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale, SkScalar kd, SkImageFilter*,
268 const CropRect*); 268 const CropRect*, uint32_t uniqueID = 0);
269 269
270 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter) 270 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter)
271 SkScalar kd() const { return fKD; } 271 SkScalar kd() const { return fKD; }
272 272
273 protected: 273 protected:
274 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, 274 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale,
275 SkScalar kd, SkImageFilter* input, const CropRe ct* cropRect); 275 SkScalar kd, SkImageFilter* input, const CropRe ct* cropRect,
276 uint32_t uniqueID);
276 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 277 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
277 explicit SkDiffuseLightingImageFilter(SkReadBuffer& buffer); 278 explicit SkDiffuseLightingImageFilter(SkReadBuffer& buffer);
278 #endif 279 #endif
279 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; 280 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
280 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, 281 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
281 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE; 282 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE;
282 #if SK_SUPPORT_GPU 283 #if SK_SUPPORT_GPU
283 virtual bool asNewEffect(GrEffect** effect, GrTexture*, const SkMatrix& matr ix, 284 virtual bool asNewEffect(GrEffect** effect, GrTexture*, const SkMatrix& matr ix,
284 const SkIRect& bounds) const SK_OVERRIDE; 285 const SkIRect& bounds) const SK_OVERRIDE;
285 #endif 286 #endif
286 287
287 private: 288 private:
288 friend class SkLightingImageFilter; 289 friend class SkLightingImageFilter;
289 typedef SkLightingImageFilter INHERITED; 290 typedef SkLightingImageFilter INHERITED;
290 SkScalar fKD; 291 SkScalar fKD;
291 }; 292 };
292 293
293 class SkSpecularLightingImageFilter : public SkLightingImageFilter { 294 class SkSpecularLightingImageFilter : public SkLightingImageFilter {
294 public: 295 public:
295 static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale, 296 static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale,
296 SkScalar ks, SkScalar shininess, SkImageFilter* , const CropRect*); 297 SkScalar ks, SkScalar shininess, SkImageFilter* , const CropRect*, uint32_t uniqueID = 0);
297 298
298 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter) 299 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter)
299 300
300 SkScalar ks() const { return fKS; } 301 SkScalar ks() const { return fKS; }
301 SkScalar shininess() const { return fShininess; } 302 SkScalar shininess() const { return fShininess; }
302 303
303 protected: 304 protected:
304 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks, 305 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks,
305 SkScalar shininess, SkImageFilter* input, cons t CropRect*); 306 SkScalar shininess, SkImageFilter* input, cons t CropRect*,
307 uint32_t uniqueID);
306 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 308 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
307 explicit SkSpecularLightingImageFilter(SkReadBuffer& buffer); 309 explicit SkSpecularLightingImageFilter(SkReadBuffer& buffer);
308 #endif 310 #endif
309 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; 311 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
310 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, 312 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
311 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE; 313 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE;
312 #if SK_SUPPORT_GPU 314 #if SK_SUPPORT_GPU
313 virtual bool asNewEffect(GrEffect** effect, GrTexture*, const SkMatrix& matr ix, 315 virtual bool asNewEffect(GrEffect** effect, GrTexture*, const SkMatrix& matr ix,
314 const SkIRect& bounds) const SK_OVERRIDE; 316 const SkIRect& bounds) const SK_OVERRIDE;
315 #endif 317 #endif
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 case SkLight::kSpot_LightType: return SkNEW_ARGS(SkSpotLight, (buffer )); 839 case SkLight::kSpot_LightType: return SkNEW_ARGS(SkSpotLight, (buffer ));
838 default: 840 default:
839 SkDEBUGFAIL("Unknown LightType."); 841 SkDEBUGFAIL("Unknown LightType.");
840 buffer.validate(false); 842 buffer.validate(false);
841 return NULL; 843 return NULL;
842 } 844 }
843 } 845 }
844 /////////////////////////////////////////////////////////////////////////////// 846 ///////////////////////////////////////////////////////////////////////////////
845 847
846 SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceSca le, 848 SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceSca le,
847 SkImageFilter* input, const CropRec t* cropRect) 849 SkImageFilter* input, const CropRec t* cropRect,
848 : INHERITED(1, &input, cropRect) 850 uint32_t uniqueID)
851 : INHERITED(1, &input, cropRect, uniqueID)
849 , fLight(SkRef(light)) 852 , fLight(SkRef(light))
850 , fSurfaceScale(surfaceScale / 255) 853 , fSurfaceScale(surfaceScale / 255)
851 {} 854 {}
852 855
853 SkImageFilter* SkLightingImageFilter::CreateDistantLitDiffuse(const SkPoint3& di rection, 856 SkImageFilter* SkLightingImageFilter::CreateDistantLitDiffuse(const SkPoint3& di rection,
854 SkColor lightColor , 857 SkColor lightColor ,
855 SkScalar surfaceSc ale, 858 SkScalar surfaceSc ale,
856 SkScalar kd, 859 SkScalar kd,
857 SkImageFilter* inp ut, 860 SkImageFilter* inp ut,
858 const CropRect* cr opRect) { 861 const CropRect* cr opRect) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 937
935 void SkLightingImageFilter::flatten(SkWriteBuffer& buffer) const { 938 void SkLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
936 this->INHERITED::flatten(buffer); 939 this->INHERITED::flatten(buffer);
937 fLight->flattenLight(buffer); 940 fLight->flattenLight(buffer);
938 buffer.writeScalar(fSurfaceScale * 255); 941 buffer.writeScalar(fSurfaceScale * 255);
939 } 942 }
940 943
941 /////////////////////////////////////////////////////////////////////////////// 944 ///////////////////////////////////////////////////////////////////////////////
942 945
943 SkImageFilter* SkDiffuseLightingImageFilter::Create(SkLight* light, SkScalar sur faceScale, 946 SkImageFilter* SkDiffuseLightingImageFilter::Create(SkLight* light, SkScalar sur faceScale,
944 SkScalar kd, SkImageFilter* input, const Cro pRect* cropRect) { 947 SkScalar kd, SkImageFilter* input, const Cro pRect* cropRect, uint32_t uniqueID) {
945 if (NULL == light) { 948 if (NULL == light) {
946 return NULL; 949 return NULL;
947 } 950 }
948 if (!SkScalarIsFinite(surfaceScale) || !SkScalarIsFinite(kd)) { 951 if (!SkScalarIsFinite(surfaceScale) || !SkScalarIsFinite(kd)) {
949 return NULL; 952 return NULL;
950 } 953 }
951 // According to the spec, kd can be any non-negative number : 954 // According to the spec, kd can be any non-negative number :
952 // http://www.w3.org/TR/SVG/filters.html#feDiffuseLightingElement 955 // http://www.w3.org/TR/SVG/filters.html#feDiffuseLightingElement
953 if (kd < 0) { 956 if (kd < 0) {
954 return NULL; 957 return NULL;
955 } 958 }
956 return SkNEW_ARGS(SkDiffuseLightingImageFilter, (light, surfaceScale, kd, in put, cropRect)); 959 return SkNEW_ARGS(SkDiffuseLightingImageFilter, (light, surfaceScale, kd, in put, cropRect, uniqueID));
957 } 960 }
958 961
959 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect = NULL) 962 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect, u int32_t uniqueID)
960 : SkLightingImageFilter(light, surfaceScale, input, cropRect), 963 : SkLightingImageFilter(light, surfaceScale, input, cropRect, uniqueID),
961 fKD(kd) 964 fKD(kd)
962 { 965 {
963 } 966 }
964 967
965 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 968 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
966 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkReadBuffer& buffer) 969 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkReadBuffer& buffer)
967 : INHERITED(buffer) 970 : INHERITED(buffer)
968 { 971 {
969 fKD = buffer.readScalar(); 972 fKD = buffer.readScalar();
970 buffer.validate(SkScalarIsFinite(fKD) && (fKD >= 0)); 973 buffer.validate(SkScalarIsFinite(fKD) && (fKD >= 0));
971 } 974 }
972 #endif 975 #endif
973 976
974 SkFlattenable* SkDiffuseLightingImageFilter::CreateProc(SkReadBuffer& buffer) { 977 SkFlattenable* SkDiffuseLightingImageFilter::CreateProc(SkReadBuffer& buffer) {
975 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); 978 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
976 SkAutoTUnref<SkLight> light(SkLight::UnflattenLight(buffer)); 979 SkAutoTUnref<SkLight> light(SkLight::UnflattenLight(buffer));
977 SkScalar surfaceScale = buffer.readScalar(); 980 SkScalar surfaceScale = buffer.readScalar();
978 SkScalar kd = buffer.readScalar(); 981 SkScalar kd = buffer.readScalar();
979 return Create(light, surfaceScale, kd, common.getInput(0), &common.cropRect( )); 982 return Create(light, surfaceScale, kd, common.getInput(0), &common.cropRect( ), common.uniqueID());
980 } 983 }
981 984
982 void SkDiffuseLightingImageFilter::flatten(SkWriteBuffer& buffer) const { 985 void SkDiffuseLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
983 this->INHERITED::flatten(buffer); 986 this->INHERITED::flatten(buffer);
984 buffer.writeScalar(fKD); 987 buffer.writeScalar(fKD);
985 } 988 }
986 989
987 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy, 990 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy,
988 const SkBitmap& source, 991 const SkBitmap& source,
989 const Context& ctx, 992 const Context& ctx,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); 1048 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255));
1046 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, matri x, kd()); 1049 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, matri x, kd());
1047 } 1050 }
1048 return true; 1051 return true;
1049 } 1052 }
1050 #endif 1053 #endif
1051 1054
1052 /////////////////////////////////////////////////////////////////////////////// 1055 ///////////////////////////////////////////////////////////////////////////////
1053 1056
1054 SkImageFilter* SkSpecularLightingImageFilter::Create(SkLight* light, SkScalar su rfaceScale, 1057 SkImageFilter* SkSpecularLightingImageFilter::Create(SkLight* light, SkScalar su rfaceScale,
1055 SkScalar ks, SkScalar shininess, SkImageFilter* input, const Cro pRect* cropRect) { 1058 SkScalar ks, SkScalar shininess, SkImageFilter* input, const Cro pRect* cropRect, uint32_t uniqueID) {
1056 if (NULL == light) { 1059 if (NULL == light) {
1057 return NULL; 1060 return NULL;
1058 } 1061 }
1059 if (!SkScalarIsFinite(surfaceScale) || !SkScalarIsFinite(ks) || !SkScalarIsF inite(shininess)) { 1062 if (!SkScalarIsFinite(surfaceScale) || !SkScalarIsFinite(ks) || !SkScalarIsF inite(shininess)) {
1060 return NULL; 1063 return NULL;
1061 } 1064 }
1062 // According to the spec, ks can be any non-negative number : 1065 // According to the spec, ks can be any non-negative number :
1063 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingElement 1066 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingElement
1064 if (ks < 0) { 1067 if (ks < 0) {
1065 return NULL; 1068 return NULL;
1066 } 1069 }
1067 return SkNEW_ARGS(SkSpecularLightingImageFilter, 1070 return SkNEW_ARGS(SkSpecularLightingImageFilter,
1068 (light, surfaceScale, ks, shininess, input, cropRect)); 1071 (light, surfaceScale, ks, shininess, input, cropRect, uniq ueID));
1069 } 1072 }
1070 1073
1071 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect) 1074 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect, uint32_t uniqueID)
1072 : SkLightingImageFilter(light, surfaceScale, input, cropRect), 1075 : SkLightingImageFilter(light, surfaceScale, input, cropRect, uniqueID),
1073 fKS(ks), 1076 fKS(ks),
1074 fShininess(shininess) 1077 fShininess(shininess)
1075 { 1078 {
1076 } 1079 }
1077 1080
1078 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 1081 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
1079 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkReadBuffer& buffe r) 1082 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkReadBuffer& buffe r)
1080 : INHERITED(buffer) 1083 : INHERITED(buffer)
1081 { 1084 {
1082 fKS = buffer.readScalar(); 1085 fKS = buffer.readScalar();
1083 fShininess = buffer.readScalar(); 1086 fShininess = buffer.readScalar();
1084 buffer.validate(SkScalarIsFinite(fKS) && (fKS >= 0) && 1087 buffer.validate(SkScalarIsFinite(fKS) && (fKS >= 0) &&
1085 SkScalarIsFinite(fShininess)); 1088 SkScalarIsFinite(fShininess));
1086 } 1089 }
1087 #endif 1090 #endif
1088 1091
1089 SkFlattenable* SkSpecularLightingImageFilter::CreateProc(SkReadBuffer& buffer) { 1092 SkFlattenable* SkSpecularLightingImageFilter::CreateProc(SkReadBuffer& buffer) {
1090 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); 1093 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
1091 SkAutoTUnref<SkLight> light(SkLight::UnflattenLight(buffer)); 1094 SkAutoTUnref<SkLight> light(SkLight::UnflattenLight(buffer));
1092 SkScalar surfaceScale = buffer.readScalar(); 1095 SkScalar surfaceScale = buffer.readScalar();
1093 SkScalar ks = buffer.readScalar(); 1096 SkScalar ks = buffer.readScalar();
1094 SkScalar shine = buffer.readScalar(); 1097 SkScalar shine = buffer.readScalar();
1095 return Create(light, surfaceScale, ks, shine, common.getInput(0), &common.cr opRect()); 1098 return Create(light, surfaceScale, ks, shine, common.getInput(0), &common.cr opRect(), common.uniqueID());
1096 } 1099 }
1097 1100
1098 void SkSpecularLightingImageFilter::flatten(SkWriteBuffer& buffer) const { 1101 void SkSpecularLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
1099 this->INHERITED::flatten(buffer); 1102 this->INHERITED::flatten(buffer);
1100 buffer.writeScalar(fKS); 1103 buffer.writeScalar(fKS);
1101 buffer.writeScalar(fShininess); 1104 buffer.writeScalar(fShininess);
1102 } 1105 }
1103 1106
1104 bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy, 1107 bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy,
1105 const SkBitmap& source, 1108 const SkBitmap& source,
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
1700 1703
1701 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); 1704 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight);
1702 } 1705 }
1703 1706
1704 #endif 1707 #endif
1705 1708
1706 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 1709 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
1707 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 1710 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
1708 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 1711 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
1709 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1712 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkDropShadowImageFilter.cpp ('k') | src/effects/SkMatrixConvolutionImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698