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

Unified Diff: src/effects/SkLightingImageFilter.cpp

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: New serialization method Created 7 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 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 ca52b981e53bde666af997597ae00c0b3a4164dd..9c1dbf1b232ee67e260a99a8f97a1506f80351a6 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -249,6 +249,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;
};
@@ -259,6 +262,8 @@ void writePoint3(const SkPoint3& point, SkFlattenableWriteBuffer& buffer) {
};
class SkDiffuseLightingImageFilter : public SkLightingImageFilter {
+ typedef SkLightingImageFilter INHERITED;
+
public:
SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale,
SkScalar kd, SkImageFilter* input, const SkIRect* cropRect);
@@ -277,11 +282,12 @@ protected:
private:
- typedef SkLightingImageFilter INHERITED;
SkScalar fKD;
};
class SkSpecularLightingImageFilter : public SkLightingImageFilter {
+ typedef SkLightingImageFilter INHERITED;
+
public:
SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const SkIRect* cropRect);
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageFilter)
@@ -300,7 +306,6 @@ protected:
SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
private:
- typedef SkLightingImageFilter INHERITED;
SkScalar fKS;
SkScalar fShininess;
};
@@ -509,6 +514,8 @@ class GrGLLight;
///////////////////////////////////////////////////////////////////////////////
class SkLight : public SkFlattenable {
+ typedef SkFlattenable INHERITED;
+
public:
SK_DECLARE_INST_COUNT(SkLight)
@@ -527,6 +534,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)),
@@ -544,7 +553,6 @@ protected:
}
private:
- typedef SkFlattenable INHERITED;
SkPoint3 fColor;
};
@@ -553,6 +561,8 @@ SK_DEFINE_INST_COUNT(SkLight)
///////////////////////////////////////////////////////////////////////////////
class SkDistantLight : public SkLight {
+ typedef SkLight INHERITED;
+
public:
SkDistantLight(const SkPoint3& direction, SkColor color)
: INHERITED(color), fDirection(direction) {
@@ -602,13 +612,14 @@ protected:
}
private:
- typedef SkLight INHERITED;
SkPoint3 fDirection;
};
///////////////////////////////////////////////////////////////////////////////
class SkPointLight : public SkLight {
+ typedef SkLight INHERITED;
+
public:
SkPointLight(const SkPoint3& location, SkColor color)
: INHERITED(color), fLocation(location) {}
@@ -661,13 +672,14 @@ protected:
}
private:
- typedef SkLight INHERITED;
SkPoint3 fLocation;
};
///////////////////////////////////////////////////////////////////////////////
class SkSpotLight : public SkLight {
+ typedef SkLight INHERITED;
+
public:
SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specularExponent, SkScalar cutoffAngle, SkColor color)
: INHERITED(color),
@@ -741,6 +753,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),
@@ -781,7 +797,6 @@ private:
static const SkScalar kSpecularExponentMin;
static const SkScalar kSpecularExponentMax;
- typedef SkLight INHERITED;
SkPoint3 fLocation;
SkPoint3 fTarget;
SkScalar fSpecularExponent;
@@ -861,6 +876,42 @@ SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular(
surfaceScale, ks, shininess, input, cropRect));
}
+SkFlattenable::Factory SkLightingImageFilter::GetFactory(SkFlattenable::Type type) {
+ switch(type) {
+ case SkFlattenable::kSkDiffuseLightingImageFilter:
+ return SkDiffuseLightingImageFilter::CreateProc;
+ case SkFlattenable::kSkDistantLight:
+ return SkDistantLight::CreateProc;
+ case SkFlattenable::kSkPointLight:
+ return SkPointLight::CreateProc;
+ case SkFlattenable::kSkSpecularLightingImageFilter:
+ return SkSpecularLightingImageFilter::CreateProc;
+ case SkFlattenable::kSkSpotLight:
+ return SkSpotLight::CreateProc;
+ default:
+ break;
+ }
+ return NULL;
+}
+
+SkFlattenable::TypeCheck SkLightingImageFilter::GetTypeCheck(SkFlattenable::Type type) {
+ switch(type) {
+ case SkFlattenable::kSkDiffuseLightingImageFilter:
+ return SkDiffuseLightingImageFilter::IsA;
+ case SkFlattenable::kSkDistantLight:
+ return SkDistantLight::IsA;
+ case SkFlattenable::kSkPointLight:
+ return SkPointLight::IsA;
+ case SkFlattenable::kSkSpecularLightingImageFilter:
+ return SkSpecularLightingImageFilter::IsA;
+ case SkFlattenable::kSkSpotLight:
+ return SkSpotLight::IsA;
+ default:
+ break;
+ }
+ return NULL;
+}
+
SkLightingImageFilter::~SkLightingImageFilter() {
fLight->unref();
}
@@ -870,6 +921,7 @@ SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer)
{
fLight = buffer.readFlattenableT<SkLight>();
fSurfaceScale = buffer.readScalar();
+ buffer.validate(SkScalarIsFinite(fSurfaceScale));
}
void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
@@ -890,6 +942,7 @@ SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff
: INHERITED(buffer)
{
fKD = buffer.readScalar();
+ buffer.validate(SkScalarIsFinite(fKD));
}
void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
@@ -967,6 +1020,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