/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkDisplacementMapEffect_DEFINED #define SkDisplacementMapEffect_DEFINED #include "SkImageFilter.h" #include "SkBitmap.h" class SK_API SkDisplacementMapEffect : public SkImageFilter { public: enum ChannelSelectorType { kUnknown_ChannelSelectorType, kR_ChannelSelectorType, kG_ChannelSelectorType, kB_ChannelSelectorType, kA_ChannelSelectorType, kKeyBits = 3 // Max value is 4, so 3 bits are required at most }; SkDisplacementMapEffect(ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, SkScalar scale, SkImageFilter* displacement, SkImageFilter* color = NULL, const CropRect* cropRect = NULL); ~SkDisplacementMapEffect(); SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDisplacementMapEffect) virtual bool onFilterImage(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm, SkBitmap* dst, SkIPoint* offset) SK_OVERRIDE; #if SK_SUPPORT_GPU virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; } virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm, SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; #endif protected: explicit SkDisplacementMapEffect(SkFlattenableReadBuffer& buffer); virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; private: ChannelSelectorType fXChannelSelector; ChannelSelectorType fYChannelSelector; SkScalar fScale; typedef SkImageFilter INHERITED; SkImageFilter* getDisplacementInput() { return getInput(0); } SkImageFilter* getColorInput() { return getInput(1); } }; #endif