| 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 |