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