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

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: Minor comment fixes 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular( 862 SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular(
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
872 SkFlattenable::Factory SkLightingImageFilter::GetFactory(SkFlattenable::Type typ e) {
873 switch(type) {
874 case SkFlattenable::kSkDiffuseLightingImageFilter_Type:
875 return SkDiffuseLightingImageFilter::CreateProc;
876 case SkFlattenable::kSkDistantLight_Type:
877 return SkDistantLight::CreateProc;
878 case SkFlattenable::kSkPointLight_Type:
879 return SkPointLight::CreateProc;
880 case SkFlattenable::kSkSpecularLightingImageFilter_Type:
881 return SkSpecularLightingImageFilter::CreateProc;
882 case SkFlattenable::kSkSpotLight_Type:
883 return SkSpotLight::CreateProc;
884 default:
885 break;
886 }
887 return NULL;
888 }
889
890 SkFlattenable::TypeCheck SkLightingImageFilter::GetTypeCheck(SkFlattenable::Type type) {
891 switch(type) {
892 case SkFlattenable::kSkDiffuseLightingImageFilter_Type:
893 return SkDiffuseLightingImageFilter::IsA;
894 case SkFlattenable::kSkDistantLight_Type:
895 return SkDistantLight::IsA;
896 case SkFlattenable::kSkPointLight_Type:
897 return SkPointLight::IsA;
898 case SkFlattenable::kSkSpecularLightingImageFilter_Type:
899 return SkSpecularLightingImageFilter::IsA;
900 case SkFlattenable::kSkSpotLight_Type:
901 return SkSpotLight::IsA;
902 default:
903 break;
904 }
905 return NULL;
906 }
907
863 SkLightingImageFilter::~SkLightingImageFilter() { 908 SkLightingImageFilter::~SkLightingImageFilter() {
864 fLight->unref(); 909 SkSafeUnref(fLight);
865 } 910 }
866 911
867 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) 912 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer)
868 : INHERITED(buffer) 913 : INHERITED(buffer)
869 { 914 {
870 fLight = buffer.readFlattenableT<SkLight>(); 915 fLight = buffer.readFlattenableT<SkLight>();
871 fSurfaceScale = buffer.readScalar(); 916 fSurfaceScale = buffer.readScalar();
917 buffer.validate(SkScalarIsFinite(fSurfaceScale));
872 } 918 }
873 919
874 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { 920 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
875 this->INHERITED::flatten(buffer); 921 this->INHERITED::flatten(buffer);
876 buffer.writeFlattenable(fLight); 922 buffer.writeFlattenable(fLight);
877 buffer.writeScalar(fSurfaceScale); 923 buffer.writeScalar(fSurfaceScale);
878 } 924 }
879 925
880 /////////////////////////////////////////////////////////////////////////////// 926 ///////////////////////////////////////////////////////////////////////////////
881 927
882 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const SkIRect* cropRect = N ULL) 928 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const SkIRect* cropRect = N ULL)
883 : SkLightingImageFilter(light, surfaceScale, input, cropRect), 929 : SkLightingImageFilter(light, surfaceScale, input, cropRect),
884 fKD(kd) 930 fKD(kd)
885 { 931 {
886 } 932 }
887 933
888 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff er& buffer) 934 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff er& buffer)
889 : INHERITED(buffer) 935 : INHERITED(buffer)
890 { 936 {
891 fKD = buffer.readScalar(); 937 fKD = buffer.readScalar();
938 buffer.validate(SkScalarIsFinite(fKD));
892 } 939 }
893 940
894 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con st { 941 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con st {
895 this->INHERITED::flatten(buffer); 942 this->INHERITED::flatten(buffer);
896 buffer.writeScalar(fKD); 943 buffer.writeScalar(fKD);
897 } 944 }
898 945
899 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*, 946 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy*,
900 const SkBitmap& src, 947 const SkBitmap& src,
901 const SkMatrix& ctm, 948 const SkMatrix& ctm,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 fKS(ks), 1006 fKS(ks),
960 fShininess(shininess) 1007 fShininess(shininess)
961 { 1008 {
962 } 1009 }
963 1010
964 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu ffer& buffer) 1011 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu ffer& buffer)
965 : INHERITED(buffer) 1012 : INHERITED(buffer)
966 { 1013 {
967 fKS = buffer.readScalar(); 1014 fKS = buffer.readScalar();
968 fShininess = buffer.readScalar(); 1015 fShininess = buffer.readScalar();
1016 buffer.validate(SkScalarIsFinite(fKS) &&
1017 SkScalarIsFinite(fShininess));
969 } 1018 }
970 1019
971 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co nst { 1020 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co nst {
972 this->INHERITED::flatten(buffer); 1021 this->INHERITED::flatten(buffer);
973 buffer.writeScalar(fKS); 1022 buffer.writeScalar(fKS);
974 buffer.writeScalar(fShininess); 1023 buffer.writeScalar(fShininess);
975 } 1024 }
976 1025
977 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*, 1026 bool SkSpecularLightingImageFilter::onFilterImage(Proxy*,
978 const SkBitmap& src, 1027 const SkBitmap& src,
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
1559 1608
1560 #endif 1609 #endif
1561 1610
1562 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 1611 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
1563 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 1612 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
1564 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 1613 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
1565 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight) 1614 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight)
1566 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight) 1615 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight)
1567 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight) 1616 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight)
1568 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1617 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698