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

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

Issue 751283002: Add XferProcessor factory in GrPaint and GrDrawState. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix comiple bug Created 6 years 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
« no previous file with comments | « gyp/gpu.gypi ('k') | include/gpu/GrBackendProcessorFactory.h » ('j') | no next file with comments »
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 SkXfermode_DEFINED 10 #ifndef SkXfermode_DEFINED
11 #define SkXfermode_DEFINED 11 #define SkXfermode_DEFINED
12 12
13 #include "SkFlattenable.h" 13 #include "SkFlattenable.h"
14 #include "SkColor.h" 14 #include "SkColor.h"
15 15
16 class GrFragmentProcessor; 16 class GrFragmentProcessor;
17 class GrTexture; 17 class GrTexture;
18 class GrXPFactory;
18 class SkString; 19 class SkString;
19 20
20 /** \class SkXfermode 21 /** \class SkXfermode
21 * 22 *
22 * SkXfermode is the base class for objects that are called to implement custom 23 * SkXfermode is the base class for objects that are called to implement custom
23 * "transfer-modes" in the drawing pipeline. The static function Create(Modes) 24 * "transfer-modes" in the drawing pipeline. The static function Create(Modes)
24 * can be called to return an instance of any of the predefined subclasses as 25 * can be called to return an instance of any of the predefined subclasses as
25 * specified in the Modes enum. When an SkXfermode is assigned to an SkPaint, 26 * specified in the Modes enum. When an SkXfermode is assigned to an SkPaint,
26 * then objects drawn with that paint have the xfermode applied. 27 * then objects drawn with that paint have the xfermode applied.
27 * 28 *
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 192
192 /** A subclass may implement this factory function to work with the GPU back end. It is legal 193 /** A subclass may implement this factory function to work with the GPU back end. It is legal
193 to call this with all params NULL to simply test the return value. If ef fect is non-NULL 194 to call this with all params NULL to simply test the return value. If ef fect is non-NULL
194 then the xfermode may optionally allocate an effect to return and the ca ller as *effect. 195 then the xfermode may optionally allocate an effect to return and the ca ller as *effect.
195 The caller will install it and own a ref to it. Since the xfermode may o r may not assign 196 The caller will install it and own a ref to it. Since the xfermode may o r may not assign
196 *effect, the caller should set *effect to NULL beforehand. background sp ecifies the 197 *effect, the caller should set *effect to NULL beforehand. background sp ecifies the
197 texture to use as the background for compositing, and should be accessed in the effect's 198 texture to use as the background for compositing, and should be accessed in the effect's
198 fragment shader. If NULL, the effect should request access to destinatio n color 199 fragment shader. If NULL, the effect should request access to destinatio n color
199 (setWillReadDstColor()), and use that in the fragment shader (builder->d stColor()). 200 (setWillReadDstColor()), and use that in the fragment shader (builder->d stColor()).
200 */ 201 */
202 // TODO: Once all custom xp's have been created the background parameter wil l be required here.
203 // We will always use the XPFactory if there is no background texture and the fragment if
204 // there is one.
201 virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture* backgroun d = NULL) const; 205 virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture* backgroun d = NULL) const;
202 206
203 /** Returns true if the xfermode can be expressed as coeffs (src, dst), or a s an effect 207 /** A subclass may implement this factory function to work with the GPU back end. It is legal
204 (effect). This helper calls the asCoeff() and asFragmentProcessor() virt uals. If the 208 to call this with xpf NULL to simply test the return value. If xpf is no n-NULL then the
205 xfermode is NULL, it is treated as kSrcOver_Mode. It is legal to call th is with all params 209 xfermode may optionally allocate a factory to return to the caller as *x pf. The caller
206 NULL to simply test the return value. effect, src, and dst must all be NULL or all 210 will install it and own a ref to it. Since the xfermode may or may not a ssign *xpf, the
207 non-NULL. 211 caller should set *xpf to NULL beforehand. XP's cannot use a background texture since they
212 have no coord transforms.
208 */ 213 */
209 static bool asFragmentProcessorOrCoeff(SkXfermode*, GrFragmentProcessor**, C oeff* src, 214 virtual bool asXPFactory(GrXPFactory** xpf) const;
210 Coeff* dst, GrTexture* background = N ULL); 215
216 /** Returns true if the xfermode can be expressed as an xfer processor facto ry (xpFactory),
217 or a fragment processor. This helper calls the asCoeff(), asXPFactory(),
218 and asFragmentProcessor() virtuals. If the xfermode is NULL, it is treat ed as kSrcOver_Mode.
219 It is legal to call this with all params NULL to simply test the return value.
220 fp, xpf, src, and dst must all be NULL or all non-NULL.
221 */
222 static bool AsFragmentProcessorOrXPFactory(SkXfermode*, GrFragmentProcessor* *,
223 GrXPFactory**, Coeff* src, Coeff* dst);
211 224
212 SK_TO_STRING_PUREVIRT() 225 SK_TO_STRING_PUREVIRT()
213 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() 226 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
214 SK_DEFINE_FLATTENABLE_TYPE(SkXfermode) 227 SK_DEFINE_FLATTENABLE_TYPE(SkXfermode)
215 228
216 protected: 229 protected:
217 SkXfermode() {} 230 SkXfermode() {}
218 /** The default implementation of xfer32/xfer16/xferA8 in turn call this 231 /** The default implementation of xfer32/xfer16/xferA8 in turn call this
219 method, 1 color at a time (upscaled to a SkPMColor). The default 232 method, 1 color at a time (upscaled to a SkPMColor). The default
220 implmentation of this method just returns dst. If performance is 233 implmentation of this method just returns dst. If performance is
221 important, your subclass should override xfer32/xfer16/xferA8 directly. 234 important, your subclass should override xfer32/xfer16/xferA8 directly.
222 235
223 This method will not be called directly by the client, so it need not 236 This method will not be called directly by the client, so it need not
224 be implemented if your subclass has overridden xfer32/xfer16/xferA8 237 be implemented if your subclass has overridden xfer32/xfer16/xferA8
225 */ 238 */
226 virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const; 239 virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const;
227 240
228 private: 241 private:
229 enum { 242 enum {
230 kModeCount = kLastMode + 1 243 kModeCount = kLastMode + 1
231 }; 244 };
232 245
233 typedef SkFlattenable INHERITED; 246 typedef SkFlattenable INHERITED;
234 }; 247 };
235 248
236 #endif 249 #endif
OLDNEW
« no previous file with comments | « gyp/gpu.gypi ('k') | include/gpu/GrBackendProcessorFactory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698