| Index: src/gpu/effects/GrMatrixConvolutionEffect.h
|
| diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.h b/src/gpu/effects/GrMatrixConvolutionEffect.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6fdd85b7c74d5de862dc097fdc7b65024f281592
|
| --- /dev/null
|
| +++ b/src/gpu/effects/GrMatrixConvolutionEffect.h
|
| @@ -0,0 +1,98 @@
|
| +/*
|
| + * Copyright 2014 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef GrMatrixConvolutionEffect_DEFINED
|
| +#define GrMatrixConvolutionEffect_DEFINED
|
| +
|
| +#include "GrSingleTextureEffect.h"
|
| +
|
| +// A little bit less than the minimum # uniforms required by DX9SM2 (32).
|
| +// Allows for a 5x5 kernel (or 25x1, for that matter).
|
| +#define MAX_KERNEL_SIZE 25
|
| +
|
| +class GrGLMatrixConvolutionEffect;
|
| +
|
| +class GrMatrixConvolutionEffect : public GrSingleTextureEffect {
|
| +public:
|
| + /*! \enum TileMode */
|
| + enum TileMode {
|
| + kClamp_TileMode = 0, /*!< Clamp to the image's edge pixels. */
|
| + kRepeat_TileMode, /*!< Wrap around to the image's opposite edge. */
|
| + kClampToBlack_TileMode, /*!< Fill with transparent black. */
|
| + kMax_TileMode = kClampToBlack_TileMode
|
| + };
|
| +
|
| + typedef GrMatrixConvolutionEffect::TileMode TileMode;
|
| + static GrEffect* Create(GrTexture* texture,
|
| + const SkIRect& bounds,
|
| + const SkISize& kernelSize,
|
| + const SkScalar* kernel,
|
| + SkScalar gain,
|
| + SkScalar bias,
|
| + const SkIPoint& kernelOffset,
|
| + TileMode tileMode,
|
| + bool convolveAlpha) {
|
| + return SkNEW_ARGS(GrMatrixConvolutionEffect, (texture,
|
| + bounds,
|
| + kernelSize,
|
| + kernel,
|
| + gain,
|
| + bias,
|
| + kernelOffset,
|
| + tileMode,
|
| + convolveAlpha));
|
| + }
|
| + virtual ~GrMatrixConvolutionEffect();
|
| +
|
| + virtual void getConstantColorComponents(GrColor* color,
|
| + uint32_t* validFlags) const SK_OVERRIDE {
|
| + // TODO: Try to do better?
|
| + *validFlags = 0;
|
| + }
|
| +
|
| + static const char* Name() { return "MatrixConvolution"; }
|
| + const SkIRect& bounds() const { return fBounds; }
|
| + const SkISize& kernelSize() const { return fKernelSize; }
|
| + const float* kernelOffset() const { return fKernelOffset; }
|
| + const float* kernel() const { return fKernel; }
|
| + float gain() const { return fGain; }
|
| + float bias() const { return fBias; }
|
| + TileMode tileMode() const { return fTileMode; }
|
| + bool convolveAlpha() const { return fConvolveAlpha; }
|
| +
|
| + typedef GrGLMatrixConvolutionEffect GLEffect;
|
| +
|
| + virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
|
| +
|
| +private:
|
| + GrMatrixConvolutionEffect(GrTexture*,
|
| + const SkIRect& bounds,
|
| + const SkISize& kernelSize,
|
| + const SkScalar* kernel,
|
| + SkScalar gain,
|
| + SkScalar bias,
|
| + const SkIPoint& kernelOffset,
|
| + TileMode tileMode,
|
| + bool convolveAlpha);
|
| +
|
| + virtual bool onIsEqual(const GrEffect&) const SK_OVERRIDE;
|
| +
|
| + SkIRect fBounds;
|
| + SkISize fKernelSize;
|
| + float *fKernel;
|
| + float fGain;
|
| + float fBias;
|
| + float fKernelOffset[2];
|
| + TileMode fTileMode;
|
| + bool fConvolveAlpha;
|
| +
|
| + GR_DECLARE_EFFECT_TEST;
|
| +
|
| + typedef GrSingleTextureEffect INHERITED;
|
| +};
|
| +
|
| +#endif
|
|
|