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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: src/effects/SkLightingImageFilter.cpp
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index aac54625fee1a6197f125e4dee9f95eda7b0b704..ce31857093cd2f0d1f31c2e1f28e61d0a534c940 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -248,6 +248,9 @@ SkPoint3 readPoint3(SkFlattenableReadBuffer& buffer) {
point.fX = buffer.readScalar();
point.fY = buffer.readScalar();
point.fZ = buffer.readScalar();
+ buffer.validate(SkScalarIsFinite(point.fX) &&
+ SkScalarIsFinite(point.fY) &&
+ SkScalarIsFinite(point.fZ));
return point;
};
@@ -526,6 +529,8 @@ public:
virtual bool requiresFragmentPosition() const = 0;
virtual SkLight* transform(const SkMatrix& matrix) const = 0;
+ SK_DEFINE_FLATTENABLE_TYPE(SkLight)
+
protected:
SkLight(SkColor color)
: fColor(SkIntToScalar(SkColorGetR(color)),
@@ -740,6 +745,10 @@ protected:
fCosInnerConeAngle = buffer.readScalar();
fConeScale = buffer.readScalar();
fS = readPoint3(buffer);
+ buffer.validate(SkScalarIsFinite(fSpecularExponent) &&
+ SkScalarIsFinite(fCosOuterConeAngle) &&
+ SkScalarIsFinite(fCosInnerConeAngle) &&
+ SkScalarIsFinite(fConeScale));
}
SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specularExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar coneScale, const SkPoint3& s, const SkPoint3& color)
: INHERITED(color),
@@ -860,8 +869,44 @@ SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular(
surfaceScale, ks, shininess, input, cropRect));
}
+SkFlattenable::Factory SkLightingImageFilter::GetFactory(SkFlattenable::Type type) {
+ switch(type) {
+ case SkFlattenable::kSkDiffuseLightingImageFilter_Type:
+ return SkDiffuseLightingImageFilter::CreateProc;
+ case SkFlattenable::kSkDistantLight_Type:
+ return SkDistantLight::CreateProc;
+ case SkFlattenable::kSkPointLight_Type:
+ return SkPointLight::CreateProc;
+ case SkFlattenable::kSkSpecularLightingImageFilter_Type:
+ return SkSpecularLightingImageFilter::CreateProc;
+ case SkFlattenable::kSkSpotLight_Type:
+ return SkSpotLight::CreateProc;
+ default:
+ break;
+ }
+ return NULL;
+}
+
+SkFlattenable::TypeCheck SkLightingImageFilter::GetTypeCheck(SkFlattenable::Type type) {
+ switch(type) {
+ case SkFlattenable::kSkDiffuseLightingImageFilter_Type:
+ return SkDiffuseLightingImageFilter::IsA;
+ case SkFlattenable::kSkDistantLight_Type:
+ return SkDistantLight::IsA;
+ case SkFlattenable::kSkPointLight_Type:
+ return SkPointLight::IsA;
+ case SkFlattenable::kSkSpecularLightingImageFilter_Type:
+ return SkSpecularLightingImageFilter::IsA;
+ case SkFlattenable::kSkSpotLight_Type:
+ return SkSpotLight::IsA;
+ default:
+ break;
+ }
+ return NULL;
+}
+
SkLightingImageFilter::~SkLightingImageFilter() {
- fLight->unref();
+ SkSafeUnref(fLight);
}
SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer)
@@ -869,6 +914,7 @@ SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer)
{
fLight = buffer.readFlattenableT<SkLight>();
fSurfaceScale = buffer.readScalar();
+ buffer.validate(SkScalarIsFinite(fSurfaceScale));
}
void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
@@ -889,6 +935,7 @@ SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
: INHERITED(buffer)
{
fKD = buffer.readScalar();
+ buffer.validate(SkScalarIsFinite(fKD));
}
void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
@@ -966,6 +1013,8 @@ SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu
{
fKS = buffer.readScalar();
fShininess = buffer.readScalar();
+ buffer.validate(SkScalarIsFinite(fKS) &&
+ SkScalarIsFinite(fShininess));
}
void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {

Powered by Google App Engine
This is Rietveld 408576698