OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 | 8 |
9 #include "SkSpriteBlitter.h" | 9 #include "SkSpriteBlitter.h" |
10 #include "SkBlitRow.h" | 10 #include "SkBlitRow.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 unsigned src_scale) { | 23 unsigned src_scale) { |
24 uint16_t dc = *dst; | 24 uint16_t dc = *dst; |
25 unsigned sa = SkGetPackedA32(sc); | 25 unsigned sa = SkGetPackedA32(sc); |
26 unsigned dr, dg, db; | 26 unsigned dr, dg, db; |
27 | 27 |
28 if (255 == sa) { | 28 if (255 == sa) { |
29 dr = SkAlphaBlend(SkPacked32ToR16(sc), SkGetPackedR16(dc), src_scale); | 29 dr = SkAlphaBlend(SkPacked32ToR16(sc), SkGetPackedR16(dc), src_scale); |
30 dg = SkAlphaBlend(SkPacked32ToG16(sc), SkGetPackedG16(dc), src_scale); | 30 dg = SkAlphaBlend(SkPacked32ToG16(sc), SkGetPackedG16(dc), src_scale); |
31 db = SkAlphaBlend(SkPacked32ToB16(sc), SkGetPackedB16(dc), src_scale); | 31 db = SkAlphaBlend(SkPacked32ToB16(sc), SkGetPackedB16(dc), src_scale); |
32 } else { | 32 } else { |
| 33 #ifdef SK_SUPPORT_LEGACY_BROKEN_LERP |
33 unsigned dst_scale = 255 - SkAlphaMul(sa, src_scale); | 34 unsigned dst_scale = 255 - SkAlphaMul(sa, src_scale); |
| 35 #else |
| 36 unsigned dst_scale = SkAlphaMulInv256(sa, src_scale); |
| 37 #endif |
34 dr = (SkPacked32ToR16(sc) * src_scale + SkGetPackedR16(dc) * dst_scale)
>> 8; | 38 dr = (SkPacked32ToR16(sc) * src_scale + SkGetPackedR16(dc) * dst_scale)
>> 8; |
35 dg = (SkPacked32ToG16(sc) * src_scale + SkGetPackedG16(dc) * dst_scale)
>> 8; | 39 dg = (SkPacked32ToG16(sc) * src_scale + SkGetPackedG16(dc) * dst_scale)
>> 8; |
36 db = (SkPacked32ToB16(sc) * src_scale + SkGetPackedB16(dc) * dst_scale)
>> 8; | 40 db = (SkPacked32ToB16(sc) * src_scale + SkGetPackedB16(dc) * dst_scale)
>> 8; |
37 } | 41 } |
38 *dst = SkPackRGB16(dr, dg, db); | 42 *dst = SkPackRGB16(dr, dg, db); |
39 } | 43 } |
40 | 44 |
41 #define D16_S32A_Blend_Pixel(dst, sc, src_scale) \ | 45 #define D16_S32A_Blend_Pixel(dst, sc, src_scale) \ |
42 do { if (sc) D16_S32A_Blend_Pixel_helper(dst, sc, src_scale); } while (0) | 46 do { if (sc) D16_S32A_Blend_Pixel_helper(dst, sc, src_scale); } while (0) |
43 | 47 |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 } else { | 364 } else { |
361 blitter = allocator->createT<Sprite_D16_SIndex8A_Blend>(sour
ce, alpha); | 365 blitter = allocator->createT<Sprite_D16_SIndex8A_Blend>(sour
ce, alpha); |
362 } | 366 } |
363 } | 367 } |
364 break; | 368 break; |
365 default: | 369 default: |
366 break; | 370 break; |
367 } | 371 } |
368 return blitter; | 372 return blitter; |
369 } | 373 } |
OLD | NEW |