Home | History | Annotate | Download | only in effects
      1 /*
      2  * Copyright 2012 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef Gr1DKernelEffect_DEFINED
      9 #define Gr1DKernelEffect_DEFINED
     10 
     11 #include "GrSingleTextureEffect.h"
     12 #include "SkMatrix.h"
     13 
     14 /**
     15  * Base class for 1D kernel effects. The kernel operates either in X or Y and
     16  * has a pixel radius. The kernel is specified in the src texture's space
     17  * and the kernel center is pinned to a texel's center. The radius specifies
     18  * the number of texels on either side of the center texel in X or Y that are
     19  * read. Since the center pixel is also read, the total width is one larger than
     20  * two times the radius.
     21  */
     22 
     23 class Gr1DKernelEffect : public GrSingleTextureEffect {
     24 
     25 public:
     26     enum Direction {
     27         kX_Direction,
     28         kY_Direction,
     29     };
     30 
     31     Gr1DKernelEffect(GrTexture* texture,
     32                      Direction direction,
     33                      int radius)
     34         : GrSingleTextureEffect(texture, MakeDivByTextureWHMatrix(texture))
     35         , fDirection(direction)
     36         , fRadius(radius) {}
     37 
     38     virtual ~Gr1DKernelEffect() {};
     39 
     40     static int WidthFromRadius(int radius) { return 2 * radius + 1; }
     41 
     42     int radius() const { return fRadius; }
     43     int width() const { return WidthFromRadius(fRadius); }
     44     Direction direction() const { return fDirection; }
     45 
     46 private:
     47 
     48     Direction       fDirection;
     49     int             fRadius;
     50 
     51     typedef GrSingleTextureEffect INHERITED;
     52 };
     53 
     54 #endif
     55