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