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

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

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Serialization with strings as ID Created 7 years, 2 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 | Annotate | Revision Log
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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 virtual LightType type() const = 0; 522 virtual LightType type() const = 0;
520 const SkPoint3& color() const { return fColor; } 523 const SkPoint3& color() const { return fColor; }
521 virtual GrGLLight* createGLLight() const = 0; 524 virtual GrGLLight* createGLLight() const = 0;
522 virtual bool isEqual(const SkLight& other) const { 525 virtual bool isEqual(const SkLight& other) const {
523 return fColor == other.fColor; 526 return fColor == other.fColor;
524 } 527 }
525 // Called to know whether the generated GrGLLight will require access to the fragment position. 528 // Called to know whether the generated GrGLLight will require access to the fragment position.
526 virtual bool requiresFragmentPosition() const = 0; 529 virtual bool requiresFragmentPosition() const = 0;
527 virtual SkLight* transform(const SkMatrix& matrix) const = 0; 530 virtual SkLight* transform(const SkMatrix& matrix) const = 0;
528 531
532 SK_DEFINE_FLATTENABLE_TYPE(SkLight)
533
529 protected: 534 protected:
530 SkLight(SkColor color) 535 SkLight(SkColor color)
531 : fColor(SkIntToScalar(SkColorGetR(color)), 536 : fColor(SkIntToScalar(SkColorGetR(color)),
532 SkIntToScalar(SkColorGetG(color)), 537 SkIntToScalar(SkColorGetG(color)),
533 SkIntToScalar(SkColorGetB(color))) {} 538 SkIntToScalar(SkColorGetB(color))) {}
534 SkLight(const SkPoint3& color) 539 SkLight(const SkPoint3& color)
535 : fColor(color) {} 540 : fColor(color) {}
536 SkLight(SkFlattenableReadBuffer& buffer) 541 SkLight(SkFlattenableReadBuffer& buffer)
537 : INHERITED(buffer) { 542 : INHERITED(buffer) {
538 fColor = readPoint3(buffer); 543 fColor = readPoint3(buffer);
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 738
734 protected: 739 protected:
735 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 740 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {
736 fLocation = readPoint3(buffer); 741 fLocation = readPoint3(buffer);
737 fTarget = readPoint3(buffer); 742 fTarget = readPoint3(buffer);
738 fSpecularExponent = buffer.readScalar(); 743 fSpecularExponent = buffer.readScalar();
739 fCosOuterConeAngle = buffer.readScalar(); 744 fCosOuterConeAngle = buffer.readScalar();
740 fCosInnerConeAngle = buffer.readScalar(); 745 fCosInnerConeAngle = buffer.readScalar();
741 fConeScale = buffer.readScalar(); 746 fConeScale = buffer.readScalar();
742 fS = readPoint3(buffer); 747 fS = readPoint3(buffer);
748 buffer.validate(SkScalarIsFinite(fSpecularExponent) &&
749 SkScalarIsFinite(fCosOuterConeAngle) &&
750 SkScalarIsFinite(fCosInnerConeAngle) &&
751 SkScalarIsFinite(fConeScale));
743 } 752 }
744 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co neScale, const SkPoint3& s, const SkPoint3& color) 753 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co neScale, const SkPoint3& s, const SkPoint3& color)
745 : INHERITED(color), 754 : INHERITED(color),
746 fLocation(location), 755 fLocation(location),
747 fTarget(target), 756 fTarget(target),
748 fSpecularExponent(specularExponent), 757 fSpecularExponent(specularExponent),
749 fCosOuterConeAngle(cosOuterConeAngle), 758 fCosOuterConeAngle(cosOuterConeAngle),
750 fCosInnerConeAngle(cosInnerConeAngle), 759 fCosInnerConeAngle(cosInnerConeAngle),
751 fConeScale(coneScale), 760 fConeScale(coneScale),
752 fS(s) 761 fS(s)
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 const SkPoint3& location, const SkPoint3& target, 863 const SkPoint3& location, const SkPoint3& target,
855 SkScalar specularExponent, SkScalar cutoffAngle, 864 SkScalar specularExponent, SkScalar cutoffAngle,
856 SkColor lightColor, SkScalar surfaceScale, 865 SkColor lightColor, SkScalar surfaceScale,
857 SkScalar ks, SkScalar shininess, SkImageFilter* input, const SkIRect* cropRe ct) { 866 SkScalar ks, SkScalar shininess, SkImageFilter* input, const SkIRect* cropRe ct) {
858 return SkNEW_ARGS(SkSpecularLightingImageFilter, 867 return SkNEW_ARGS(SkSpecularLightingImageFilter,
859 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl e, lightColor)), 868 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl e, lightColor)),
860 surfaceScale, ks, shininess, input, cropRect)); 869 surfaceScale, ks, shininess, input, cropRect));
861 } 870 }
862 871
863 SkLightingImageFilter::~SkLightingImageFilter() { 872 SkLightingImageFilter::~SkLightingImageFilter() {
864 fLight->unref(); 873 SkSafeUnref(fLight);
865 } 874 }
866 875
867 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) 876 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer)
868 : INHERITED(buffer) 877 : INHERITED(buffer)
869 { 878 {
870 fLight = buffer.readFlattenableT<SkLight>(); 879 fLight = buffer.readFlattenableT<SkLight>();
871 fSurfaceScale = buffer.readScalar(); 880 fSurfaceScale = buffer.readScalar();
881 buffer.validate(SkScalarIsFinite(fSurfaceScale));
872 } 882 }
873 883
874 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { 884 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
875 this->INHERITED::flatten(buffer); 885 this->INHERITED::flatten(buffer);
876 buffer.writeFlattenable(fLight); 886 buffer.writeFlattenable(fLight);
877 buffer.writeScalar(fSurfaceScale); 887 buffer.writeScalar(fSurfaceScale);
878 } 888 }
879 889
880 /////////////////////////////////////////////////////////////////////////////// 890 ///////////////////////////////////////////////////////////////////////////////
881 891
882 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const SkIRect* cropRect = N ULL) 892 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const SkIRect* cropRect = N ULL)
883 : SkLightingImageFilter(light, surfaceScale, input, cropRect), 893 : SkLightingImageFilter(light, surfaceScale, input, cropRect),
884 fKD(kd) 894 fKD(kd)
885 { 895 {
886 } 896 }
887 897
888 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff er& buffer) 898 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff er& buffer)
889 : INHERITED(buffer) 899 : INHERITED(buffer)
890 { 900 {
891 fKD = buffer.readScalar(); 901 fKD = buffer.readScalar();
902 buffer.validate(SkScalarIsFinite(fKD));
892 } 903 }
893 904
894 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con st { 905 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con st {
895 this->INHERITED::flatten(buffer); 906 this->INHERITED::flatten(buffer);
896 buffer.writeScalar(fKD); 907 buffer.writeScalar(fKD);
897 } 908 }
898 909
899 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*, 910 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*,
900 const SkBitmap& src, 911 const SkBitmap& src,
901 const SkMatrix& ctm, 912 const SkMatrix& ctm,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 fKS(ks), 970 fKS(ks),
960 fShininess(shininess) 971 fShininess(shininess)
961 { 972 {
962 } 973 }
963 974
964 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu ffer& buffer) 975 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu ffer& buffer)
965 : INHERITED(buffer) 976 : INHERITED(buffer)
966 { 977 {
967 fKS = buffer.readScalar(); 978 fKS = buffer.readScalar();
968 fShininess = buffer.readScalar(); 979 fShininess = buffer.readScalar();
980 buffer.validate(SkScalarIsFinite(fKS) &&
981 SkScalarIsFinite(fShininess));
969 } 982 }
970 983
971 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co nst { 984 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co nst {
972 this->INHERITED::flatten(buffer); 985 this->INHERITED::flatten(buffer);
973 buffer.writeScalar(fKS); 986 buffer.writeScalar(fKS);
974 buffer.writeScalar(fShininess); 987 buffer.writeScalar(fShininess);
975 } 988 }
976 989
977 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*, 990 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*,
978 const SkBitmap& src, 991 const SkBitmap& src,
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
1559 1572
1560 #endif 1573 #endif
1561 1574
1562 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 1575 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
1563 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 1576 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
1564 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 1577 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
1565 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight) 1578 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight)
1566 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight) 1579 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight)
1567 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight) 1580 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight)
1568 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1581 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698