Change SkLightingImageFilter to derive from SkSingleInputImageFilter, so that it can participate in filter DAGs.
No tests yet. Review URL: https://codereview.appspot.com/6620055 git-svn-id: http://skia.googlecode.com/svn/trunk@5832 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
8b129aa337
commit
254eae2b04
@ -9,7 +9,7 @@
|
||||
#ifndef SkLightingImageFilter_DEFINED
|
||||
#define SkLightingImageFilter_DEFINED
|
||||
|
||||
#include "SkImageFilter.h"
|
||||
#include "SkSingleInputImageFilter.h"
|
||||
#include "SkColor.h"
|
||||
|
||||
class SK_API SkPoint3 {
|
||||
@ -47,38 +47,41 @@ public:
|
||||
|
||||
class SkLight;
|
||||
|
||||
class SK_API SkLightingImageFilter : public SkImageFilter {
|
||||
class SK_API SkLightingImageFilter : public SkSingleInputImageFilter {
|
||||
public:
|
||||
static SkImageFilter* CreateDistantLitDiffuse(const SkPoint3& direction,
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar kd);
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar kd,
|
||||
SkImageFilter* input = NULL);
|
||||
static SkImageFilter* CreatePointLitDiffuse(const SkPoint3& location,
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar kd);
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar kd,
|
||||
SkImageFilter* input = NULL);
|
||||
static SkImageFilter* CreateSpotLitDiffuse(const SkPoint3& location,
|
||||
const SkPoint3& target, SkScalar specularExponent, SkScalar cutoffAngle,
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar kd);
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar kd,
|
||||
SkImageFilter* input = NULL);
|
||||
static SkImageFilter* CreateDistantLitSpecular(const SkPoint3& direction,
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar ks,
|
||||
SkScalar shininess);
|
||||
SkScalar shininess, SkImageFilter* input = NULL);
|
||||
static SkImageFilter* CreatePointLitSpecular(const SkPoint3& location,
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar ks,
|
||||
SkScalar shininess);
|
||||
SkScalar shininess, SkImageFilter* input = NULL);
|
||||
static SkImageFilter* CreateSpotLitSpecular(const SkPoint3& location,
|
||||
const SkPoint3& target, SkScalar specularExponent, SkScalar cutoffAngle,
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar ks,
|
||||
SkScalar shininess);
|
||||
SkScalar shininess, SkImageFilter* input = NULL);
|
||||
~SkLightingImageFilter();
|
||||
|
||||
SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
|
||||
|
||||
protected:
|
||||
SkLightingImageFilter(SkLight* light, SkScalar surfaceScale);
|
||||
SkLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkImageFilter* input);
|
||||
explicit SkLightingImageFilter(SkFlattenableReadBuffer& buffer);
|
||||
virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
|
||||
const SkLight* light() const { return fLight; }
|
||||
SkScalar surfaceScale() const { return fSurfaceScale; }
|
||||
|
||||
private:
|
||||
typedef SkImageFilter INHERITED;
|
||||
typedef SkSingleInputImageFilter INHERITED;
|
||||
SkLight* fLight;
|
||||
SkScalar fSurfaceScale;
|
||||
};
|
||||
|
@ -267,7 +267,8 @@ void writePoint3(const SkPoint3& point, SkFlattenableWriteBuffer& buffer) {
|
||||
|
||||
class SkDiffuseLightingImageFilter : public SkLightingImageFilter {
|
||||
public:
|
||||
SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar kd);
|
||||
SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale,
|
||||
SkScalar kd, SkImageFilter* input);
|
||||
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFilter)
|
||||
|
||||
virtual bool asNewCustomStage(GrCustomStage** stage, GrTexture*) const SK_OVERRIDE;
|
||||
@ -287,7 +288,7 @@ private:
|
||||
|
||||
class SkSpecularLightingImageFilter : public SkLightingImageFilter {
|
||||
public:
|
||||
SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar ks, SkScalar shininess);
|
||||
SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input);
|
||||
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageFilter)
|
||||
|
||||
virtual bool asNewCustomStage(GrCustomStage** stage, GrTexture*) const SK_OVERRIDE;
|
||||
@ -695,8 +696,9 @@ private:
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceScale)
|
||||
: fLight(light),
|
||||
SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkImageFilter* input)
|
||||
: INHERITED(input),
|
||||
fLight(light),
|
||||
fSurfaceScale(SkScalarDiv(surfaceScale, SkIntToScalar(255)))
|
||||
{
|
||||
SkASSERT(fLight);
|
||||
@ -706,49 +708,55 @@ SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceSca
|
||||
|
||||
SkImageFilter* SkLightingImageFilter::CreateDistantLitDiffuse(
|
||||
const SkPoint3& direction, SkColor lightColor, SkScalar surfaceScale,
|
||||
SkScalar kd) {
|
||||
SkScalar kd, SkImageFilter* input) {
|
||||
return SkNEW_ARGS(SkDiffuseLightingImageFilter,
|
||||
(SkNEW_ARGS(SkDistantLight, (direction, lightColor)), surfaceScale, kd));
|
||||
(SkNEW_ARGS(SkDistantLight, (direction, lightColor)), surfaceScale, kd,
|
||||
input));
|
||||
}
|
||||
|
||||
SkImageFilter* SkLightingImageFilter::CreatePointLitDiffuse(
|
||||
const SkPoint3& location, SkColor lightColor, SkScalar surfaceScale,
|
||||
SkScalar kd) {
|
||||
SkScalar kd, SkImageFilter* input) {
|
||||
return SkNEW_ARGS(SkDiffuseLightingImageFilter,
|
||||
(SkNEW_ARGS(SkPointLight, (location, lightColor)), surfaceScale, kd));
|
||||
(SkNEW_ARGS(SkPointLight, (location, lightColor)), surfaceScale, kd,
|
||||
input));
|
||||
}
|
||||
|
||||
SkImageFilter* SkLightingImageFilter::CreateSpotLitDiffuse(
|
||||
const SkPoint3& location, const SkPoint3& target,
|
||||
SkScalar specularExponent, SkScalar cutoffAngle,
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar kd) {
|
||||
SkColor lightColor, SkScalar surfaceScale, SkScalar kd,
|
||||
SkImageFilter* input) {
|
||||
return SkNEW_ARGS(SkDiffuseLightingImageFilter,
|
||||
(SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngle, lightColor)),
|
||||
surfaceScale, kd));
|
||||
(SkNEW_ARGS(SkSpotLight, (location, target, specularExponent,
|
||||
cutoffAngle, lightColor)),
|
||||
surfaceScale, kd, input));
|
||||
}
|
||||
|
||||
SkImageFilter* SkLightingImageFilter::CreateDistantLitSpecular(
|
||||
const SkPoint3& direction, SkColor lightColor, SkScalar surfaceScale,
|
||||
SkScalar ks, SkScalar shininess) {
|
||||
SkScalar ks, SkScalar shininess, SkImageFilter* input) {
|
||||
return SkNEW_ARGS(SkSpecularLightingImageFilter,
|
||||
(SkNEW_ARGS(SkDistantLight, (direction, lightColor)), surfaceScale, ks, shininess));
|
||||
(SkNEW_ARGS(SkDistantLight, (direction, lightColor)),
|
||||
surfaceScale, ks, shininess, input));
|
||||
}
|
||||
|
||||
SkImageFilter* SkLightingImageFilter::CreatePointLitSpecular(
|
||||
const SkPoint3& location, SkColor lightColor, SkScalar surfaceScale,
|
||||
SkScalar ks, SkScalar shininess) {
|
||||
SkScalar ks, SkScalar shininess, SkImageFilter* input) {
|
||||
return SkNEW_ARGS(SkSpecularLightingImageFilter,
|
||||
(SkNEW_ARGS(SkPointLight, (location, lightColor)), surfaceScale, ks, shininess));
|
||||
(SkNEW_ARGS(SkPointLight, (location, lightColor)),
|
||||
surfaceScale, ks, shininess, input));
|
||||
}
|
||||
|
||||
SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular(
|
||||
const SkPoint3& location, const SkPoint3& target,
|
||||
SkScalar specularExponent, SkScalar cutoffAngle,
|
||||
SkColor lightColor, SkScalar surfaceScale,
|
||||
SkScalar ks, SkScalar shininess) {
|
||||
SkScalar ks, SkScalar shininess, SkImageFilter* input) {
|
||||
return SkNEW_ARGS(SkSpecularLightingImageFilter,
|
||||
(SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngle, lightColor)),
|
||||
surfaceScale, ks, shininess));
|
||||
surfaceScale, ks, shininess, input));
|
||||
}
|
||||
|
||||
SkLightingImageFilter::~SkLightingImageFilter() {
|
||||
@ -770,8 +778,8 @@ void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar kd)
|
||||
: SkLightingImageFilter(light, surfaceScale),
|
||||
SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar kd, SkImageFilter* input)
|
||||
: SkLightingImageFilter(light, surfaceScale, input),
|
||||
fKD(kd)
|
||||
{
|
||||
}
|
||||
@ -836,8 +844,8 @@ bool SkDiffuseLightingImageFilter::asNewCustomStage(GrCustomStage** stage,
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar ks, SkScalar shininess)
|
||||
: SkLightingImageFilter(light, surfaceScale),
|
||||
SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input)
|
||||
: SkLightingImageFilter(light, surfaceScale, input),
|
||||
fKS(ks),
|
||||
fShininess(shininess)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user