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

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

Issue 1721223002: simplify/unify xferproc api (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « gm/xfer4f.cpp ('k') | src/core/SkBitmapProcShader.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
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 The xfermode will return a factory for which the caller will get a ref. It is up 213 The xfermode will return a factory for which the caller will get a ref. It is up
214 to the caller to install it. XferProcessors cannot use a background text ure. 214 to the caller to install it. XferProcessors cannot use a background text ure.
215 */ 215 */
216 virtual GrXPFactory* asXPFactory() const; 216 virtual GrXPFactory* asXPFactory() const;
217 #endif 217 #endif
218 218
219 SK_TO_STRING_PUREVIRT() 219 SK_TO_STRING_PUREVIRT()
220 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() 220 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
221 SK_DEFINE_FLATTENABLE_TYPE(SkXfermode) 221 SK_DEFINE_FLATTENABLE_TYPE(SkXfermode)
222 222
223 enum PM4fFlags { 223 enum D32Flags {
224 kSrcIsOpaque_PM4fFlag = 1 << 0, 224 kSrcIsOpaque_D32Flag = 1 << 0,
225 kDstIsSRGB_PM4fFlag = 1 << 1, 225 kSrcIsSingle_D32Flag = 1 << 1,
226 kDstIsSRGB_D32Flag = 1 << 2,
226 }; 227 };
227 struct PM4fState { 228 typedef void (*D32Proc)(const SkXfermode*, uint32_t dst[], const SkPM4f src[ ],
228 const SkXfermode* fXfer; 229 int count, const SkAlpha coverage[]);
229 uint32_t fFlags; 230 static D32Proc GetD32Proc(SkXfermode*, uint32_t flags);
231
232 enum D64Flags {
233 kSrcIsOpaque_D64Flag = 1 << 0,
234 kSrcIsSingle_D64Flag = 1 << 1,
235 kDstIsFloat16_D64Flag = 1 << 2, // else U16 bit components
230 }; 236 };
231 typedef void (*PM4fProc1)(const PM4fState&, uint32_t dst[], const SkPM4f& sr c, 237 typedef void (*D64Proc)(const SkXfermode*, uint64_t dst[], const SkPM4f src[ ], int count,
232 int count, const SkAlpha coverage[]); 238 const SkAlpha coverage[]);
233 typedef void (*PM4fProcN)(const PM4fState&, uint32_t dst[], const SkPM4f src [], 239 static D64Proc GetD64Proc(SkXfermode*, uint32_t flags);
234 int count, const SkAlpha coverage[]);
235
236 static PM4fProc1 GetPM4fProc1(Mode, uint32_t flags);
237 static PM4fProcN GetPM4fProcN(Mode, uint32_t flags);
238 virtual PM4fProc1 getPM4fProc1(uint32_t flags) const;
239 virtual PM4fProcN getPM4fProcN(uint32_t flags) const;
240
241 enum U64Flags {
242 kSrcIsOpaque_U64Flag = 1 << 0,
243 kDstIsFloat16_U64Flag = 1 << 1, // else U16 bit components
244 };
245 struct U64State {
246 const SkXfermode* fXfer;
247 uint32_t fFlags;
248 };
249 typedef void (*U64Proc1)(const U64State&, uint64_t dst[], const SkPM4f& src, int count,
250 const SkAlpha coverage[]);
251 typedef void (*U64ProcN)(const U64State&, uint64_t dst[], const SkPM4f src[] , int count,
252 const SkAlpha coverage[]);
253 static U64Proc1 GetU64Proc1(Mode, uint32_t flags);
254 static U64ProcN GetU64ProcN(Mode, uint32_t flags);
255 240
256 enum LCDFlags { 241 enum LCDFlags {
257 kSrcIsOpaque_LCDFlag = 1 << 0, // else src(s) may have alpha < 1 242 kSrcIsOpaque_LCDFlag = 1 << 0, // else src(s) may have alpha < 1
258 kSrcIsSingle_LCDFlag = 1 << 1, // else src[count] 243 kSrcIsSingle_LCDFlag = 1 << 1, // else src[count]
259 kDstIsLinearInt_LCDFlag = 1 << 2, // else srgb/half-float 244 kDstIsLinearInt_LCDFlag = 1 << 2, // else srgb/half-float
260 }; 245 };
261 typedef void (*LCD32Proc)(uint32_t* dst, const SkPM4f* src, int count, const uint16_t lcd[]); 246 typedef void (*LCD32Proc)(uint32_t* dst, const SkPM4f* src, int count, const uint16_t lcd[]);
262 typedef void (*LCD64Proc)(uint64_t* dst, const SkPM4f* src, int count, const uint16_t lcd[]); 247 typedef void (*LCD64Proc)(uint64_t* dst, const SkPM4f* src, int count, const uint16_t lcd[]);
263 static LCD32Proc GetLCD32Proc(uint32_t flags); 248 static LCD32Proc GetLCD32Proc(uint32_t flags);
264 static LCD64Proc GetLCD64Proc(uint32_t) { return nullptr; } 249 static LCD64Proc GetLCD64Proc(uint32_t) { return nullptr; }
265 250
266 protected: 251 protected:
267 SkXfermode() {} 252 SkXfermode() {}
268 /** The default implementation of xfer32/xfer16/xferA8 in turn call this 253 /** The default implementation of xfer32/xfer16/xferA8 in turn call this
269 method, 1 color at a time (upscaled to a SkPMColor). The default 254 method, 1 color at a time (upscaled to a SkPMColor). The default
270 implementation of this method just returns dst. If performance is 255 implementation of this method just returns dst. If performance is
271 important, your subclass should override xfer32/xfer16/xferA8 directly. 256 important, your subclass should override xfer32/xfer16/xferA8 directly.
272 257
273 This method will not be called directly by the client, so it need not 258 This method will not be called directly by the client, so it need not
274 be implemented if your subclass has overridden xfer32/xfer16/xferA8 259 be implemented if your subclass has overridden xfer32/xfer16/xferA8
275 */ 260 */
276 virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const; 261 virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const;
277 262
263 virtual D32Proc onGetD32Proc(uint32_t flags) const;
264 virtual D64Proc onGetD64Proc(uint32_t flags) const;
265
278 private: 266 private:
279 enum { 267 enum {
280 kModeCount = kLastMode + 1 268 kModeCount = kLastMode + 1
281 }; 269 };
282 270
283 typedef SkFlattenable INHERITED; 271 typedef SkFlattenable INHERITED;
284 }; 272 };
285 273
286 #endif 274 #endif
OLDNEW
« no previous file with comments | « gm/xfer4f.cpp ('k') | src/core/SkBitmapProcShader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698