diff options
author | joshualitt <joshualitt@chromium.org> | 2014-07-22 09:52:11 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-07-22 09:52:12 -0700 |
commit | ac9779234ef7a8cf3d791ab7690ef8c388662836 (patch) | |
tree | 7912c66686c9d53df81bf4025f9195ec2eaf4253 /src/gpu/effects/GrMatrixConvolutionEffect.h | |
parent | 6c354881b63935626a0700366937530d38b8b1e8 (diff) |
Initial change to move 2D kernel to its own file.
BUG=skia:
R=bsalomon@chromium.org, senorblanco@chromium.org, bsalomon@google.com
Author: joshualitt@chromium.org
Review URL: https://codereview.chromium.org/379253003
Diffstat (limited to 'src/gpu/effects/GrMatrixConvolutionEffect.h')
-rw-r--r-- | src/gpu/effects/GrMatrixConvolutionEffect.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.h b/src/gpu/effects/GrMatrixConvolutionEffect.h new file mode 100644 index 0000000000..6fdd85b7c7 --- /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 |