| Index: include/core/SkMaskFilter.h
|
| ===================================================================
|
| --- include/core/SkMaskFilter.h (revision 9883)
|
| +++ include/core/SkMaskFilter.h (working copy)
|
| @@ -14,6 +14,7 @@
|
| #include "SkMask.h"
|
| #include "SkPaint.h"
|
|
|
| +class SkBitmap;
|
| class SkBlitter;
|
| class SkBounder;
|
| class SkMatrix;
|
| @@ -58,29 +59,58 @@
|
| virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
|
| SkIPoint* margin) const;
|
|
|
| - enum BlurType {
|
| - kNone_BlurType, //!< this maskfilter is not a blur
|
| - kNormal_BlurType, //!< fuzzy inside and outside
|
| - kSolid_BlurType, //!< solid inside, fuzzy outside
|
| - kOuter_BlurType, //!< nothing inside, fuzzy outside
|
| - kInner_BlurType //!< fuzzy inside, nothing outside
|
| - };
|
| +#if SK_SUPPORT_GPU
|
| + /**
|
| + * Returns true if the filter can be expressed a single-pass
|
| + * GrEffect, used to process this filter on the GPU, or false if
|
| + * not.
|
| + *
|
| + * If effect is non-NULL, a new GrEffect instance is stored
|
| + * in it. The caller assumes ownership of the stage, and it is up to the
|
| + * caller to unref it.
|
| + */
|
| + virtual bool asNewEffect(GrEffectRef** effect, GrTexture*) const;
|
|
|
| - struct BlurInfo {
|
| - SkScalar fRadius;
|
| - bool fIgnoreTransform;
|
| - bool fHighQuality;
|
| - };
|
| + /**
|
| + * Returns true if the filter can be processed on the GPU. This is most
|
| + * often used for multi-pass effects, where intermediate results must be
|
| + * rendered to textures. For single-pass effects, use asNewEffect().
|
| + *
|
| + * 'maskRect' returns the device space portion of the mask the the filter
|
| + * needs. The mask passed into 'filterMaskGPU' should have the same extent
|
| + * as 'maskRect' but be translated to the upper-left corner of the mask
|
| + * (i.e., (maskRect.fLeft, maskRect.fTop) appears at (0, 0) in the mask).
|
| + */
|
| + virtual bool canFilterMaskGPU(const SkRect& devBounds,
|
| + const SkIRect& clipBounds,
|
| + const SkMatrix& ctm,
|
| + SkRect* maskRect) const;
|
|
|
| /**
|
| - * Optional method for maskfilters that can be described as a blur. If so,
|
| - * they return the corresponding BlurType and set the fields in BlurInfo
|
| - * (if not null). If they cannot be described as a blur, they return
|
| - * kNone_BlurType and ignore the info parameter.
|
| + * Perform this mask filter on the GPU. This is most often used for
|
| + * multi-pass effects, where intermediate results must be rendered to
|
| + * textures. For single-pass effects, use asNewEffect(). 'src' is the
|
| + * source image for processing, as a texture-backed bitmap. 'result' is
|
| + * the destination bitmap, which should contain a texture-backed pixelref
|
| + * on success. 'maskRect' should be the rect returned from canFilterMaskGPU.
|
| */
|
| - virtual BlurType asABlur(BlurInfo*) const;
|
| + bool filterMaskGPU(GrContext* context,
|
| + const SkBitmap& src,
|
| + const SkRect& maskRect,
|
| + SkBitmap* result) const;
|
|
|
| /**
|
| + * This flavor of 'filterMaskGPU' provides a more direct means of accessing
|
| + * the filtering capabilities. Setting 'canOverwriteSrc' can allow some
|
| + * filters to skip the allocation of an additional texture.
|
| + */
|
| + virtual bool filterMaskGPU(GrTexture* src,
|
| + const SkRect& maskRect,
|
| + GrTexture** result,
|
| + bool canOverwriteSrc) const;
|
| +#endif
|
| +
|
| + /**
|
| * The fast bounds function is used to enable the paint to be culled early
|
| * in the drawing pipeline. This function accepts the current bounds of the
|
| * paint as its src param and the filter adjust those bounds using its
|
|
|