Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1035)

Side by Side Diff: include/core/SkMaskFilter.h

Issue 18110012: Add canFilterMaskGPU & filterMaskGPU to SkMaskFilter (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: added comments & fixed nits Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/core/SkMaskFilter.cpp » ('j') | src/core/SkMaskFilter.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #ifndef SkMaskFilter_DEFINED 10 #ifndef SkMaskFilter_DEFINED
11 #define SkMaskFilter_DEFINED 11 #define SkMaskFilter_DEFINED
12 12
13 #include "SkFlattenable.h" 13 #include "SkFlattenable.h"
14 #include "SkMask.h" 14 #include "SkMask.h"
15 #include "SkPaint.h" 15 #include "SkPaint.h"
16 16
17 class SkBitmap;
17 class SkBlitter; 18 class SkBlitter;
18 class SkBounder; 19 class SkBounder;
19 class SkMatrix; 20 class SkMatrix;
20 class SkPath; 21 class SkPath;
21 class SkRasterClip; 22 class SkRasterClip;
22 23
23 /** \class SkMaskFilter 24 /** \class SkMaskFilter
24 25
25 SkMaskFilter is the base class for object that perform transformations on 26 SkMaskFilter is the base class for object that perform transformations on
26 an alpha-channel mask before drawing it. A subclass of SkMaskFilter may be 27 an alpha-channel mask before drawing it. A subclass of SkMaskFilter may be
(...skipping 24 matching lines...) Expand all
51 @param src the original image to be filtered. 52 @param src the original image to be filtered.
52 @param matrix the CTM 53 @param matrix the CTM
53 @param margin if not null, return the buffer dx/dy need when calculati ng the effect. Used when 54 @param margin if not null, return the buffer dx/dy need when calculati ng the effect. Used when
54 drawing a clipped object to know how much larger to allo cate the src before 55 drawing a clipped object to know how much larger to allo cate the src before
55 applying the filter. If returning false, ignore this par ameter. 56 applying the filter. If returning false, ignore this par ameter.
56 @return true if the dst mask was correctly created. 57 @return true if the dst mask was correctly created.
57 */ 58 */
58 virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, 59 virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
59 SkIPoint* margin) const; 60 SkIPoint* margin) const;
60 61
61 enum BlurType { 62 #if SK_SUPPORT_GPU
62 kNone_BlurType, //!< this maskfilter is not a blur 63 /**
63 kNormal_BlurType, //!< fuzzy inside and outside 64 * Returns true if the filter can be expressed a single-pass
64 kSolid_BlurType, //!< solid inside, fuzzy outside 65 * GrEffect, used to process this filter on the GPU, or false if
65 kOuter_BlurType, //!< nothing inside, fuzzy outside 66 * not.
66 kInner_BlurType //!< fuzzy inside, nothing outside 67 *
67 }; 68 * If effect is non-NULL, a new GrEffect instance is stored
68 69 * in it. The caller assumes ownership of the stage, and it is up to the
69 struct BlurInfo { 70 * caller to unref it.
70 SkScalar fRadius; 71 */
71 bool fIgnoreTransform; 72 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*) const;
72 bool fHighQuality;
73 };
74 73
75 /** 74 /**
76 * Optional method for maskfilters that can be described as a blur. If so, 75 * Returns true if the filter can be processed on the GPU. This is most
77 * they return the corresponding BlurType and set the fields in BlurInfo 76 * often used for multi-pass effects, where intermediate results must be
78 * (if not null). If they cannot be described as a blur, they return 77 * rendered to textures. For single-pass effects, use asNewEffect().
79 * kNone_BlurType and ignore the info parameter. 78 *
79 * 'maskRect' returns the device space portion of the mask the the filter
80 * needs. The mask passed into 'filterMaskGPU' should have the same extent
81 * as 'maskRect' but be translated to the upper-left corner of the mask
82 * (i.e., (maskRect.fLeft, maskRect.fTop) appears at (0, 0) in the mask).
80 */ 83 */
81 virtual BlurType asABlur(BlurInfo*) const; 84 virtual bool canFilterMaskGPU(const SkRect& devBounds,
85 const SkIRect& clipBounds,
86 const SkMatrix& ctm,
87 SkRect* maskRect) const;
88
89 /**
90 * Perform this mask filter on the GPU. This is most often used for
91 * multi-pass effects, where intermediate results must be rendered to
92 * textures. For single-pass effects, use asNewEffect(). 'src' is the
93 * source image for processing, as a texture-backed bitmap. 'result' is
94 * the destination bitmap, which should contain a texture-backed pixelref
95 * on success. 'maskRect' should be the rect returned from canFilterMaskGPU .
96 */
97 bool filterMaskGPU(GrContext* context,
98 const SkBitmap& src,
99 const SkRect& maskRect,
100 SkBitmap* result) const;
101
102 /**
103 * This flavor of 'filterMaskGPU' provides a more direct means of accessing
104 * the filtering capabilities. Setting 'canOverwriteSrc' can allow some
105 * filters to skip the allocation of an additional texture.
106 */
107 virtual bool filterMaskGPU(GrTexture* src,
108 const SkRect& maskRect,
109 GrTexture** result,
110 bool canOverwriteSrc) const;
111 #endif
82 112
83 /** 113 /**
84 * The fast bounds function is used to enable the paint to be culled early 114 * The fast bounds function is used to enable the paint to be culled early
85 * in the drawing pipeline. This function accepts the current bounds of the 115 * in the drawing pipeline. This function accepts the current bounds of the
86 * paint as its src param and the filter adjust those bounds using its 116 * paint as its src param and the filter adjust those bounds using its
87 * current mask and returns the result using the dest param. Callers are 117 * current mask and returns the result using the dest param. Callers are
88 * allowed to provide the same struct for both src and dest so each 118 * allowed to provide the same struct for both src and dest so each
89 * implementation must accomodate that behavior. 119 * implementation must accomodate that behavior.
90 * 120 *
91 * The default impl calls filterMask with the src mask having no image, 121 * The default impl calls filterMask with the src mask having no image,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 This method is not exported to java. 170 This method is not exported to java.
141 */ 171 */
142 bool filterPath(const SkPath& devPath, const SkMatrix& devMatrix, 172 bool filterPath(const SkPath& devPath, const SkMatrix& devMatrix,
143 const SkRasterClip&, SkBounder*, SkBlitter* blitter, 173 const SkRasterClip&, SkBounder*, SkBlitter* blitter,
144 SkPaint::Style style) const; 174 SkPaint::Style style) const;
145 175
146 typedef SkFlattenable INHERITED; 176 typedef SkFlattenable INHERITED;
147 }; 177 };
148 178
149 #endif 179 #endif
OLDNEW
« no previous file with comments | « no previous file | src/core/SkMaskFilter.cpp » ('j') | src/core/SkMaskFilter.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698