| Index: src/effects/SkLightingImageFilter.cpp
|
| diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
|
| index 60904c7f9911625762cdb46f49b8a957c33fa0c0..c63b2ebe50b81a7eb67f606713e57c3621b2e015 100644
|
| --- a/src/effects/SkLightingImageFilter.cpp
|
| +++ b/src/effects/SkLightingImageFilter.cpp
|
| @@ -181,9 +181,12 @@ inline SkPoint3 bottomRightNormal(int m[9], SkScalar surfaceScale) {
|
| surfaceScale);
|
| }
|
|
|
| -template <class LightingType, class LightType> void lightBitmap(
|
| - const LightingType& lightingType, const SkLight* light, const SkBitmap& src, SkBitmap* dst,
|
| - SkScalar surfaceScale, const SkIRect& bounds) {
|
| +template <class LightingType, class LightType> void lightBitmap(const LightingType& lightingType,
|
| + const SkImageFilterLight* light,
|
| + const SkBitmap& src,
|
| + SkBitmap* dst,
|
| + SkScalar surfaceScale,
|
| + const SkIRect& bounds) {
|
| SkASSERT(dst->width() == bounds.width() && dst->height() == bounds.height());
|
| const LightType* l = static_cast<const LightType*>(light);
|
| int left = bounds.left(), right = bounds.right();
|
| @@ -308,7 +311,7 @@ enum BoundaryMode {
|
|
|
| class SkLightingImageFilterInternal : public SkLightingImageFilter {
|
| protected:
|
| - SkLightingImageFilterInternal(SkLight* light,
|
| + SkLightingImageFilterInternal(SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| SkImageFilter* input,
|
| const CropRect* cropRect)
|
| @@ -431,7 +434,8 @@ bool SkLightingImageFilterInternal::filterImageGPU(Proxy* proxy,
|
|
|
| class SkDiffuseLightingImageFilter : public SkLightingImageFilterInternal {
|
| public:
|
| - static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale, SkScalar kd, SkImageFilter*,
|
| + static SkImageFilter* Create(SkImageFilterLight* light, SkScalar surfaceScale,
|
| + SkScalar kd, SkImageFilter*,
|
| const CropRect*);
|
|
|
| SK_TO_STRING_OVERRIDE()
|
| @@ -439,7 +443,7 @@ public:
|
| SkScalar kd() const { return fKD; }
|
|
|
| protected:
|
| - SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale,
|
| + SkDiffuseLightingImageFilter(SkImageFilterLight* light, SkScalar surfaceScale,
|
| SkScalar kd, SkImageFilter* input, const CropRect* cropRect);
|
| void flatten(SkWriteBuffer& buffer) const override;
|
| bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
|
| @@ -457,7 +461,7 @@ private:
|
|
|
| class SkSpecularLightingImageFilter : public SkLightingImageFilterInternal {
|
| public:
|
| - static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale,
|
| + static SkImageFilter* Create(SkImageFilterLight* light, SkScalar surfaceScale,
|
| SkScalar ks, SkScalar shininess, SkImageFilter*, const CropRect*);
|
|
|
| SK_TO_STRING_OVERRIDE()
|
| @@ -467,7 +471,7 @@ public:
|
| SkScalar shininess() const { return fShininess; }
|
|
|
| protected:
|
| - SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar ks,
|
| + SkSpecularLightingImageFilter(SkImageFilterLight* light, SkScalar surfaceScale, SkScalar ks,
|
| SkScalar shininess, SkImageFilter* input, const CropRect*);
|
| void flatten(SkWriteBuffer& buffer) const override;
|
| bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
|
| @@ -488,11 +492,11 @@ private:
|
|
|
| class GrLightingEffect : public GrSingleTextureEffect {
|
| public:
|
| - GrLightingEffect(GrProcessorDataManager*, GrTexture* texture, const SkLight* light,
|
| + GrLightingEffect(GrProcessorDataManager*, GrTexture* texture, const SkImageFilterLight* light,
|
| SkScalar surfaceScale, const SkMatrix& matrix, BoundaryMode boundaryMode);
|
| virtual ~GrLightingEffect();
|
|
|
| - const SkLight* light() const { return fLight; }
|
| + const SkImageFilterLight* light() const { return fLight; }
|
| SkScalar surfaceScale() const { return fSurfaceScale; }
|
| const SkMatrix& filterMatrix() const { return fFilterMatrix; }
|
| BoundaryMode boundaryMode() const { return fBoundaryMode; }
|
| @@ -506,18 +510,19 @@ protected:
|
| }
|
|
|
| private:
|
| - typedef GrSingleTextureEffect INHERITED;
|
| - const SkLight* fLight;
|
| + const SkImageFilterLight* fLight;
|
| SkScalar fSurfaceScale;
|
| SkMatrix fFilterMatrix;
|
| BoundaryMode fBoundaryMode;
|
| +
|
| + typedef GrSingleTextureEffect INHERITED;
|
| };
|
|
|
| class GrDiffuseLightingEffect : public GrLightingEffect {
|
| public:
|
| static GrFragmentProcessor* Create(GrProcessorDataManager* procDataManager,
|
| GrTexture* texture,
|
| - const SkLight* light,
|
| + const SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| const SkMatrix& matrix,
|
| SkScalar kd,
|
| @@ -544,7 +549,7 @@ private:
|
|
|
| GrDiffuseLightingEffect(GrProcessorDataManager*,
|
| GrTexture* texture,
|
| - const SkLight* light,
|
| + const SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| const SkMatrix& matrix,
|
| SkScalar kd,
|
| @@ -559,7 +564,7 @@ class GrSpecularLightingEffect : public GrLightingEffect {
|
| public:
|
| static GrFragmentProcessor* Create(GrProcessorDataManager* procDataManager,
|
| GrTexture* texture,
|
| - const SkLight* light,
|
| + const SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| const SkMatrix& matrix,
|
| SkScalar ks,
|
| @@ -589,7 +594,7 @@ private:
|
|
|
| GrSpecularLightingEffect(GrProcessorDataManager*,
|
| GrTexture* texture,
|
| - const SkLight* light,
|
| + const SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| const SkMatrix& matrix,
|
| SkScalar ks,
|
| @@ -627,8 +632,7 @@ public:
|
|
|
| // This is called from GrGLLightingEffect's setData(). Subclasses of GrGLLight must call
|
| // INHERITED::setData().
|
| - virtual void setData(const GrGLProgramDataManager&,
|
| - const SkLight* light) const;
|
| + virtual void setData(const GrGLProgramDataManager&, const SkImageFilterLight* light) const;
|
|
|
| protected:
|
| /**
|
| @@ -648,7 +652,7 @@ private:
|
| class GrGLDistantLight : public GrGLLight {
|
| public:
|
| virtual ~GrGLDistantLight() {}
|
| - void setData(const GrGLProgramDataManager&, const SkLight* light) const override;
|
| + void setData(const GrGLProgramDataManager&, const SkImageFilterLight* light) const override;
|
| void emitSurfaceToLight(GrGLFPBuilder*, const char* z) override;
|
|
|
| private:
|
| @@ -661,7 +665,7 @@ private:
|
| class GrGLPointLight : public GrGLLight {
|
| public:
|
| virtual ~GrGLPointLight() {}
|
| - void setData(const GrGLProgramDataManager&, const SkLight* light) const override;
|
| + void setData(const GrGLProgramDataManager&, const SkImageFilterLight* light) const override;
|
| void emitSurfaceToLight(GrGLFPBuilder*, const char* z) override;
|
|
|
| private:
|
| @@ -674,7 +678,7 @@ private:
|
| class GrGLSpotLight : public GrGLLight {
|
| public:
|
| virtual ~GrGLSpotLight() {}
|
| - void setData(const GrGLProgramDataManager&, const SkLight* light) const override;
|
| + void setData(const GrGLProgramDataManager&, const SkImageFilterLight* light) const override;
|
| void emitSurfaceToLight(GrGLFPBuilder*, const char* z) override;
|
| void emitLightColor(GrGLFPBuilder*, const char *surfaceToLight) override;
|
|
|
| @@ -699,7 +703,7 @@ class GrGLLight;
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -class SkLight : public SkRefCnt {
|
| +class SkImageFilterLight : public SkRefCnt {
|
| public:
|
|
|
|
|
| @@ -711,26 +715,26 @@ public:
|
| virtual LightType type() const = 0;
|
| const SkPoint3& color() const { return fColor; }
|
| virtual GrGLLight* createGLLight() const = 0;
|
| - virtual bool isEqual(const SkLight& other) const {
|
| + virtual bool isEqual(const SkImageFilterLight& other) const {
|
| return fColor == other.fColor;
|
| }
|
| // Called to know whether the generated GrGLLight will require access to the fragment position.
|
| virtual bool requiresFragmentPosition() const = 0;
|
| - virtual SkLight* transform(const SkMatrix& matrix) const = 0;
|
| + virtual SkImageFilterLight* transform(const SkMatrix& matrix) const = 0;
|
|
|
| // Defined below SkLight's subclasses.
|
| void flattenLight(SkWriteBuffer& buffer) const;
|
| - static SkLight* UnflattenLight(SkReadBuffer& buffer);
|
| + static SkImageFilterLight* UnflattenLight(SkReadBuffer& buffer);
|
|
|
| protected:
|
| - SkLight(SkColor color) {
|
| + SkImageFilterLight(SkColor color) {
|
| fColor = SkPoint3::Make(SkIntToScalar(SkColorGetR(color)),
|
| SkIntToScalar(SkColorGetG(color)),
|
| SkIntToScalar(SkColorGetB(color)));
|
| }
|
| - SkLight(const SkPoint3& color)
|
| + SkImageFilterLight(const SkPoint3& color)
|
| : fColor(color) {}
|
| - SkLight(SkReadBuffer& buffer) {
|
| + SkImageFilterLight(SkReadBuffer& buffer) {
|
| fColor = readPoint3(buffer);
|
| }
|
|
|
| @@ -744,7 +748,7 @@ private:
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -class SkDistantLight : public SkLight {
|
| +class SkDistantLight : public SkImageFilterLight {
|
| public:
|
| SkDistantLight(const SkPoint3& direction, SkColor color)
|
| : INHERITED(color), fDirection(direction) {
|
| @@ -766,7 +770,7 @@ public:
|
| }
|
| bool requiresFragmentPosition() const override { return false; }
|
|
|
| - bool isEqual(const SkLight& other) const override {
|
| + bool isEqual(const SkImageFilterLight& other) const override {
|
| if (other.type() != kDistant_LightType) {
|
| return false;
|
| }
|
| @@ -784,7 +788,7 @@ protected:
|
| SkDistantLight(const SkPoint3& direction, const SkPoint3& color)
|
| : INHERITED(color), fDirection(direction) {
|
| }
|
| - SkLight* transform(const SkMatrix& matrix) const override {
|
| + SkImageFilterLight* transform(const SkMatrix& matrix) const override {
|
| return new SkDistantLight(direction(), color());
|
| }
|
| void onFlattenLight(SkWriteBuffer& buffer) const override {
|
| @@ -792,13 +796,14 @@ protected:
|
| }
|
|
|
| private:
|
| - typedef SkLight INHERITED;
|
| SkPoint3 fDirection;
|
| +
|
| + typedef SkImageFilterLight INHERITED;
|
| };
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -class SkPointLight : public SkLight {
|
| +class SkPointLight : public SkImageFilterLight {
|
| public:
|
| SkPointLight(const SkPoint3& location, SkColor color)
|
| : INHERITED(color), fLocation(location) {}
|
| @@ -823,7 +828,7 @@ public:
|
| #endif
|
| }
|
| bool requiresFragmentPosition() const override { return true; }
|
| - bool isEqual(const SkLight& other) const override {
|
| + bool isEqual(const SkImageFilterLight& other) const override {
|
| if (other.type() != kPoint_LightType) {
|
| return false;
|
| }
|
| @@ -831,7 +836,7 @@ public:
|
| return INHERITED::isEqual(other) &&
|
| fLocation == o.fLocation;
|
| }
|
| - SkLight* transform(const SkMatrix& matrix) const override {
|
| + SkImageFilterLight* transform(const SkMatrix& matrix) const override {
|
| SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY);
|
| matrix.mapPoints(&location2, 1);
|
| // Use X scale and Y scale on Z and average the result
|
| @@ -855,13 +860,14 @@ protected:
|
| }
|
|
|
| private:
|
| - typedef SkLight INHERITED;
|
| SkPoint3 fLocation;
|
| +
|
| + typedef SkImageFilterLight INHERITED;
|
| };
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -class SkSpotLight : public SkLight {
|
| +class SkSpotLight : public SkImageFilterLight {
|
| public:
|
| SkSpotLight(const SkPoint3& location,
|
| const SkPoint3& target,
|
| @@ -881,7 +887,7 @@ public:
|
| fConeScale = SkScalarInvert(antiAliasThreshold);
|
| }
|
|
|
| - SkLight* transform(const SkMatrix& matrix) const override {
|
| + SkImageFilterLight* transform(const SkMatrix& matrix) const override {
|
| SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY);
|
| matrix.mapPoints(&location2, 1);
|
| // Use X scale and Y scale on Z and average the result
|
| @@ -987,7 +993,7 @@ protected:
|
| writePoint3(fS, buffer);
|
| }
|
|
|
| - bool isEqual(const SkLight& other) const override {
|
| + bool isEqual(const SkImageFilterLight& other) const override {
|
| if (other.type() != kSpot_LightType) {
|
| return false;
|
| }
|
| @@ -1004,7 +1010,6 @@ private:
|
| static const SkScalar kSpecularExponentMin;
|
| static const SkScalar kSpecularExponentMax;
|
|
|
| - typedef SkLight INHERITED;
|
| SkPoint3 fLocation;
|
| SkPoint3 fTarget;
|
| SkScalar fSpecularExponent;
|
| @@ -1012,6 +1017,8 @@ private:
|
| SkScalar fCosInnerConeAngle;
|
| SkScalar fConeScale;
|
| SkPoint3 fS;
|
| +
|
| + typedef SkImageFilterLight INHERITED;
|
| };
|
|
|
| // According to the spec, the specular term should be in the range [1, 128] :
|
| @@ -1021,22 +1028,22 @@ const SkScalar SkSpotLight::kSpecularExponentMax = 128.0f;
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void SkLight::flattenLight(SkWriteBuffer& buffer) const {
|
| +void SkImageFilterLight::flattenLight(SkWriteBuffer& buffer) const {
|
| // Write type first, then baseclass, then subclass.
|
| buffer.writeInt(this->type());
|
| writePoint3(fColor, buffer);
|
| this->onFlattenLight(buffer);
|
| }
|
|
|
| -/*static*/ SkLight* SkLight::UnflattenLight(SkReadBuffer& buffer) {
|
| +/*static*/ SkImageFilterLight* SkImageFilterLight::UnflattenLight(SkReadBuffer& buffer) {
|
| // Read type first.
|
| - const SkLight::LightType type = (SkLight::LightType)buffer.readInt();
|
| + const SkImageFilterLight::LightType type = (SkImageFilterLight::LightType)buffer.readInt();
|
| switch (type) {
|
| // Each of these constructors must first call SkLight's, so we'll read the baseclass
|
| // then subclass, same order as flattenLight.
|
| - case SkLight::kDistant_LightType: return SkNEW_ARGS(SkDistantLight, (buffer));
|
| - case SkLight::kPoint_LightType: return SkNEW_ARGS(SkPointLight, (buffer));
|
| - case SkLight::kSpot_LightType: return SkNEW_ARGS(SkSpotLight, (buffer));
|
| + case SkImageFilterLight::kDistant_LightType: return SkNEW_ARGS(SkDistantLight, (buffer));
|
| + case SkImageFilterLight::kPoint_LightType: return SkNEW_ARGS(SkPointLight, (buffer));
|
| + case SkImageFilterLight::kSpot_LightType: return SkNEW_ARGS(SkSpotLight, (buffer));
|
| default:
|
| SkDEBUGFAIL("Unknown LightType.");
|
| buffer.validate(false);
|
| @@ -1045,7 +1052,7 @@ void SkLight::flattenLight(SkWriteBuffer& buffer) const {
|
| }
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceScale,
|
| +SkLightingImageFilter::SkLightingImageFilter(SkImageFilterLight* light, SkScalar surfaceScale,
|
| SkImageFilter* input, const CropRect* cropRect)
|
| : INHERITED(1, &input, cropRect)
|
| , fLight(SkRef(light))
|
| @@ -1058,7 +1065,7 @@ SkImageFilter* SkLightingImageFilter::CreateDistantLitDiffuse(const SkPoint3& di
|
| SkScalar kd,
|
| SkImageFilter* input,
|
| const CropRect* cropRect) {
|
| - SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkDistantLight, (direction, lightColor)));
|
| + SkAutoTUnref<SkImageFilterLight> light(SkNEW_ARGS(SkDistantLight, (direction, lightColor)));
|
| return SkDiffuseLightingImageFilter::Create(light, surfaceScale, kd, input, cropRect);
|
| }
|
|
|
| @@ -1068,7 +1075,7 @@ SkImageFilter* SkLightingImageFilter::CreatePointLitDiffuse(const SkPoint3& loca
|
| SkScalar kd,
|
| SkImageFilter* input,
|
| const CropRect* cropRect) {
|
| - SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkPointLight, (location, lightColor)));
|
| + SkAutoTUnref<SkImageFilterLight> light(SkNEW_ARGS(SkPointLight, (location, lightColor)));
|
| return SkDiffuseLightingImageFilter::Create(light, surfaceScale, kd, input, cropRect);
|
| }
|
|
|
| @@ -1081,8 +1088,9 @@ SkImageFilter* SkLightingImageFilter::CreateSpotLitDiffuse(const SkPoint3& locat
|
| SkScalar kd,
|
| SkImageFilter* input,
|
| const CropRect* cropRect) {
|
| - SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkSpotLight, (location, target, specularExponent,
|
| - cutoffAngle, lightColor)));
|
| + SkAutoTUnref<SkImageFilterLight> light(SkNEW_ARGS(SkSpotLight, (location, target,
|
| + specularExponent,
|
| + cutoffAngle, lightColor)));
|
| return SkDiffuseLightingImageFilter::Create(light, surfaceScale, kd, input, cropRect);
|
| }
|
|
|
| @@ -1093,7 +1101,7 @@ SkImageFilter* SkLightingImageFilter::CreateDistantLitSpecular(const SkPoint3& d
|
| SkScalar shine,
|
| SkImageFilter* input,
|
| const CropRect* cropRect) {
|
| - SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkDistantLight, (direction, lightColor)));
|
| + SkAutoTUnref<SkImageFilterLight> light(SkNEW_ARGS(SkDistantLight, (direction, lightColor)));
|
| return SkSpecularLightingImageFilter::Create(light, surfaceScale, ks, shine, input, cropRect);
|
| }
|
|
|
| @@ -1104,7 +1112,7 @@ SkImageFilter* SkLightingImageFilter::CreatePointLitSpecular(const SkPoint3& loc
|
| SkScalar shine,
|
| SkImageFilter* input,
|
| const CropRect* cropRect) {
|
| - SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkPointLight, (location, lightColor)));
|
| + SkAutoTUnref<SkImageFilterLight> light(SkNEW_ARGS(SkPointLight, (location, lightColor)));
|
| return SkSpecularLightingImageFilter::Create(light, surfaceScale, ks, shine, input, cropRect);
|
| }
|
|
|
| @@ -1118,8 +1126,9 @@ SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular(const SkPoint3& loca
|
| SkScalar shine,
|
| SkImageFilter* input,
|
| const CropRect* cropRect) {
|
| - SkAutoTUnref<SkLight> light(SkNEW_ARGS(SkSpotLight, (location, target, specularExponent,
|
| - cutoffAngle, lightColor)));
|
| + SkAutoTUnref<SkImageFilterLight> light(SkNEW_ARGS(SkSpotLight, (location, target,
|
| + specularExponent,
|
| + cutoffAngle, lightColor)));
|
| return SkSpecularLightingImageFilter::Create(light, surfaceScale, ks, shine, input, cropRect);
|
| }
|
|
|
| @@ -1133,8 +1142,11 @@ void SkLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkImageFilter* SkDiffuseLightingImageFilter::Create(SkLight* light, SkScalar surfaceScale,
|
| - SkScalar kd, SkImageFilter* input, const CropRect* cropRect) {
|
| +SkImageFilter* SkDiffuseLightingImageFilter::Create(SkImageFilterLight* light,
|
| + SkScalar surfaceScale,
|
| + SkScalar kd,
|
| + SkImageFilter* input,
|
| + const CropRect* cropRect) {
|
| if (NULL == light) {
|
| return NULL;
|
| }
|
| @@ -1149,7 +1161,7 @@ SkImageFilter* SkDiffuseLightingImageFilter::Create(SkLight* light, SkScalar sur
|
| return SkNEW_ARGS(SkDiffuseLightingImageFilter, (light, surfaceScale, kd, input, cropRect));
|
| }
|
|
|
| -SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light,
|
| +SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| SkScalar kd,
|
| SkImageFilter* input,
|
| @@ -1161,7 +1173,7 @@ SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light,
|
|
|
| SkFlattenable* SkDiffuseLightingImageFilter::CreateProc(SkReadBuffer& buffer) {
|
| SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
|
| - SkAutoTUnref<SkLight> light(SkLight::UnflattenLight(buffer));
|
| + SkAutoTUnref<SkImageFilterLight> light(SkImageFilterLight::UnflattenLight(buffer));
|
| SkScalar surfaceScale = buffer.readScalar();
|
| SkScalar kd = buffer.readScalar();
|
| return Create(light, surfaceScale, kd, common.getInput(0), &common.cropRect());
|
| @@ -1205,14 +1217,14 @@ bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy,
|
| return false;
|
| }
|
|
|
| - SkAutoTUnref<SkLight> transformedLight(light()->transform(ctx.ctm()));
|
| + SkAutoTUnref<SkImageFilterLight> transformedLight(light()->transform(ctx.ctm()));
|
|
|
| DiffuseLightingType lightingType(fKD);
|
| offset->fX = bounds.left();
|
| offset->fY = bounds.top();
|
| bounds.offset(-srcOffset);
|
| switch (transformedLight->type()) {
|
| - case SkLight::kDistant_LightType:
|
| + case SkImageFilterLight::kDistant_LightType:
|
| lightBitmap<DiffuseLightingType, SkDistantLight>(lightingType,
|
| transformedLight,
|
| src,
|
| @@ -1220,7 +1232,7 @@ bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy,
|
| surfaceScale(),
|
| bounds);
|
| break;
|
| - case SkLight::kPoint_LightType:
|
| + case SkImageFilterLight::kPoint_LightType:
|
| lightBitmap<DiffuseLightingType, SkPointLight>(lightingType,
|
| transformedLight,
|
| src,
|
| @@ -1228,7 +1240,7 @@ bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy,
|
| surfaceScale(),
|
| bounds);
|
| break;
|
| - case SkLight::kSpot_LightType:
|
| + case SkImageFilterLight::kSpot_LightType:
|
| lightBitmap<DiffuseLightingType, SkSpotLight>(lightingType,
|
| transformedLight,
|
| src,
|
| @@ -1265,8 +1277,12 @@ GrFragmentProcessor* SkDiffuseLightingImageFilter::getFragmentProcessor(
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkImageFilter* SkSpecularLightingImageFilter::Create(SkLight* light, SkScalar surfaceScale,
|
| - SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect) {
|
| +SkImageFilter* SkSpecularLightingImageFilter::Create(SkImageFilterLight* light,
|
| + SkScalar surfaceScale,
|
| + SkScalar ks,
|
| + SkScalar shininess,
|
| + SkImageFilter* input,
|
| + const CropRect* cropRect) {
|
| if (NULL == light) {
|
| return NULL;
|
| }
|
| @@ -1282,7 +1298,7 @@ SkImageFilter* SkSpecularLightingImageFilter::Create(SkLight* light, SkScalar su
|
| (light, surfaceScale, ks, shininess, input, cropRect));
|
| }
|
|
|
| -SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light,
|
| +SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| SkScalar ks,
|
| SkScalar shininess,
|
| @@ -1296,7 +1312,7 @@ SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light,
|
|
|
| SkFlattenable* SkSpecularLightingImageFilter::CreateProc(SkReadBuffer& buffer) {
|
| SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
|
| - SkAutoTUnref<SkLight> light(SkLight::UnflattenLight(buffer));
|
| + SkAutoTUnref<SkImageFilterLight> light(SkImageFilterLight::UnflattenLight(buffer));
|
| SkScalar surfaceScale = buffer.readScalar();
|
| SkScalar ks = buffer.readScalar();
|
| SkScalar shine = buffer.readScalar();
|
| @@ -1347,9 +1363,9 @@ bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy,
|
| offset->fX = bounds.left();
|
| offset->fY = bounds.top();
|
| bounds.offset(-srcOffset);
|
| - SkAutoTUnref<SkLight> transformedLight(light()->transform(ctx.ctm()));
|
| + SkAutoTUnref<SkImageFilterLight> transformedLight(light()->transform(ctx.ctm()));
|
| switch (transformedLight->type()) {
|
| - case SkLight::kDistant_LightType:
|
| + case SkImageFilterLight::kDistant_LightType:
|
| lightBitmap<SpecularLightingType, SkDistantLight>(lightingType,
|
| transformedLight,
|
| src,
|
| @@ -1357,7 +1373,7 @@ bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy,
|
| surfaceScale(),
|
| bounds);
|
| break;
|
| - case SkLight::kPoint_LightType:
|
| + case SkImageFilterLight::kPoint_LightType:
|
| lightBitmap<SpecularLightingType, SkPointLight>(lightingType,
|
| transformedLight,
|
| src,
|
| @@ -1365,7 +1381,7 @@ bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy,
|
| surfaceScale(),
|
| bounds);
|
| break;
|
| - case SkLight::kSpot_LightType:
|
| + case SkImageFilterLight::kSpot_LightType:
|
| lightBitmap<SpecularLightingType, SkSpotLight>(lightingType,
|
| transformedLight,
|
| src,
|
| @@ -1409,7 +1425,7 @@ SkPoint3 random_point3(SkRandom* random) {
|
| SkScalarToFloat(random->nextSScalar1()));
|
| }
|
|
|
| -SkLight* create_random_light(SkRandom* random) {
|
| +SkImageFilterLight* create_random_light(SkRandom* random) {
|
| int type = random->nextULessThan(3);
|
| switch (type) {
|
| case 0: {
|
| @@ -1571,7 +1587,7 @@ private:
|
|
|
| GrLightingEffect::GrLightingEffect(GrProcessorDataManager* procDataManager,
|
| GrTexture* texture,
|
| - const SkLight* light,
|
| + const SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| const SkMatrix& matrix,
|
| BoundaryMode boundaryMode)
|
| @@ -1601,7 +1617,7 @@ bool GrLightingEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
|
|
|
| GrDiffuseLightingEffect::GrDiffuseLightingEffect(GrProcessorDataManager* procDataManager,
|
| GrTexture* texture,
|
| - const SkLight* light,
|
| + const SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| const SkMatrix& matrix,
|
| SkScalar kd,
|
| @@ -1630,7 +1646,7 @@ GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDiffuseLightingEffect);
|
| GrFragmentProcessor* GrDiffuseLightingEffect::TestCreate(GrProcessorTestData* d) {
|
| SkScalar surfaceScale = d->fRandom->nextSScalar1();
|
| SkScalar kd = d->fRandom->nextUScalar1();
|
| - SkAutoTUnref<SkLight> light(create_random_light(d->fRandom));
|
| + SkAutoTUnref<SkImageFilterLight> light(create_random_light(d->fRandom));
|
| SkMatrix matrix;
|
| for (int i = 0; i < 9; i++) {
|
| matrix[i] = d->fRandom->nextUScalar1();
|
| @@ -1754,7 +1770,8 @@ void GrGLLightingEffect::onSetData(const GrGLProgramDataManager& pdman,
|
| float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f;
|
| pdman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->height());
|
| pdman.set1f(fSurfaceScaleUni, lighting.surfaceScale());
|
| - SkAutoTUnref<SkLight> transformedLight(lighting.light()->transform(lighting.filterMatrix()));
|
| + SkAutoTUnref<SkImageFilterLight> transformedLight(
|
| + lighting.light()->transform(lighting.filterMatrix()));
|
| fLight->setData(pdman, transformedLight);
|
| }
|
|
|
| @@ -1799,15 +1816,15 @@ void GrGLDiffuseLightingEffect::onSetData(const GrGLProgramDataManager& pdman,
|
|
|
| GrSpecularLightingEffect::GrSpecularLightingEffect(GrProcessorDataManager* procDataManager,
|
| GrTexture* texture,
|
| - const SkLight* light,
|
| + const SkImageFilterLight* light,
|
| SkScalar surfaceScale,
|
| const SkMatrix& matrix,
|
| SkScalar ks,
|
| SkScalar shininess,
|
| BoundaryMode boundaryMode)
|
| - : INHERITED(procDataManager, texture, light, surfaceScale, matrix, boundaryMode),
|
| - fKS(ks),
|
| - fShininess(shininess) {
|
| + : INHERITED(procDataManager, texture, light, surfaceScale, matrix, boundaryMode)
|
| + , fKS(ks)
|
| + , fShininess(shininess) {
|
| this->initClassID<GrSpecularLightingEffect>();
|
| }
|
|
|
| @@ -1833,7 +1850,7 @@ GrFragmentProcessor* GrSpecularLightingEffect::TestCreate(GrProcessorTestData* d
|
| SkScalar surfaceScale = d->fRandom->nextSScalar1();
|
| SkScalar ks = d->fRandom->nextUScalar1();
|
| SkScalar shininess = d->fRandom->nextUScalar1();
|
| - SkAutoTUnref<SkLight> light(create_random_light(d->fRandom));
|
| + SkAutoTUnref<SkImageFilterLight> light(create_random_light(d->fRandom));
|
| SkMatrix matrix;
|
| for (int i = 0; i < 9; i++) {
|
| matrix[i] = d->fRandom->nextUScalar1();
|
| @@ -1899,7 +1916,8 @@ void GrGLLight::emitLightColor(GrGLFPBuilder* builder, const char *surfaceToLigh
|
| builder->getFragmentShaderBuilder()->codeAppend(builder->getUniformCStr(this->lightColorUni()));
|
| }
|
|
|
| -void GrGLLight::setData(const GrGLProgramDataManager& pdman, const SkLight* light) const {
|
| +void GrGLLight::setData(const GrGLProgramDataManager& pdman,
|
| + const SkImageFilterLight* light) const {
|
| setUniformPoint3(pdman, fColorUni,
|
| light->color().makeScale(SkScalarInvert(SkIntToScalar(255))));
|
| }
|
| @@ -1907,9 +1925,9 @@ void GrGLLight::setData(const GrGLProgramDataManager& pdman, const SkLight* ligh
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| void GrGLDistantLight::setData(const GrGLProgramDataManager& pdman,
|
| - const SkLight* light) const {
|
| + const SkImageFilterLight* light) const {
|
| INHERITED::setData(pdman, light);
|
| - SkASSERT(light->type() == SkLight::kDistant_LightType);
|
| + SkASSERT(light->type() == SkImageFilterLight::kDistant_LightType);
|
| const SkDistantLight* distantLight = static_cast<const SkDistantLight*>(light);
|
| setUniformNormal3(pdman, fDirectionUni, distantLight->direction());
|
| }
|
| @@ -1925,9 +1943,9 @@ void GrGLDistantLight::emitSurfaceToLight(GrGLFPBuilder* builder, const char* z)
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| void GrGLPointLight::setData(const GrGLProgramDataManager& pdman,
|
| - const SkLight* light) const {
|
| + const SkImageFilterLight* light) const {
|
| INHERITED::setData(pdman, light);
|
| - SkASSERT(light->type() == SkLight::kPoint_LightType);
|
| + SkASSERT(light->type() == SkImageFilterLight::kPoint_LightType);
|
| const SkPointLight* pointLight = static_cast<const SkPointLight*>(light);
|
| setUniformPoint3(pdman, fLocationUni, pointLight->location());
|
| }
|
| @@ -1945,9 +1963,9 @@ void GrGLPointLight::emitSurfaceToLight(GrGLFPBuilder* builder, const char* z) {
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| void GrGLSpotLight::setData(const GrGLProgramDataManager& pdman,
|
| - const SkLight* light) const {
|
| + const SkImageFilterLight* light) const {
|
| INHERITED::setData(pdman, light);
|
| - SkASSERT(light->type() == SkLight::kSpot_LightType);
|
| + SkASSERT(light->type() == SkImageFilterLight::kSpot_LightType);
|
| const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light);
|
| setUniformPoint3(pdman, fLocationUni, spotLight->location());
|
| pdman.set1f(fExponentUni, spotLight->specularExponent());
|
|
|