| 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 #include "SkCoreBlitters.h" | 8 #include "SkCoreBlitters.h" |
| 9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
| 10 #include "SkShader.h" | 10 #include "SkShader.h" |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 uint32_t sc = SkAlphaMulQ(color, SkAlpha255To256(aa)); | 99 uint32_t sc = SkAlphaMulQ(color, SkAlpha255To256(aa)); |
| 100 fColor32Proc(device, device, count, sc); | 100 fColor32Proc(device, device, count, sc); |
| 101 } | 101 } |
| 102 } | 102 } |
| 103 runs += count; | 103 runs += count; |
| 104 antialias += count; | 104 antialias += count; |
| 105 device += count; | 105 device += count; |
| 106 } | 106 } |
| 107 } | 107 } |
| 108 | 108 |
| 109 #ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 | |
| 110 void SkARGB32_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { | |
| 111 uint32_t* device = fDevice.getAddr32(x, y); | |
| 112 SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) | |
| 113 | |
| 114 device[0] = SkBlendARGB32(fPMColor, device[0], a0); | |
| 115 device[1] = SkBlendARGB32(fPMColor, device[1], a1); | |
| 116 } | |
| 117 | |
| 118 void SkARGB32_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { | |
| 119 uint32_t* device = fDevice.getAddr32(x, y); | |
| 120 SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) | |
| 121 | |
| 122 device[0] = SkBlendARGB32(fPMColor, device[0], a0); | |
| 123 device = (uint32_t*)((char*)device + fDevice.rowBytes()); | |
| 124 device[0] = SkBlendARGB32(fPMColor, device[0], a1); | |
| 125 } | |
| 126 #endif | |
| 127 | |
| 128 ////////////////////////////////////////////////////////////////////////////////
////// | 109 ////////////////////////////////////////////////////////////////////////////////
////// |
| 129 | 110 |
| 130 #define solid_8_pixels(mask, dst, color) \ | 111 #define solid_8_pixels(mask, dst, color) \ |
| 131 do { \ | 112 do { \ |
| 132 if (mask & 0x80) dst[0] = color; \ | 113 if (mask & 0x80) dst[0] = color; \ |
| 133 if (mask & 0x40) dst[1] = color; \ | 114 if (mask & 0x40) dst[1] = color; \ |
| 134 if (mask & 0x20) dst[2] = color; \ | 115 if (mask & 0x20) dst[2] = color; \ |
| 135 if (mask & 0x10) dst[3] = color; \ | 116 if (mask & 0x10) dst[3] = color; \ |
| 136 if (mask & 0x08) dst[4] = color; \ | 117 if (mask & 0x08) dst[4] = color; \ |
| 137 if (mask & 0x04) dst[5] = color; \ | 118 if (mask & 0x04) dst[5] = color; \ |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 return; | 173 return; |
| 193 } | 174 } |
| 194 | 175 |
| 195 if (mask.fFormat == SkMask::kBW_Format) { | 176 if (mask.fFormat == SkMask::kBW_Format) { |
| 196 SkARGB32_BlitBW(fDevice, mask, clip, fPMColor); | 177 SkARGB32_BlitBW(fDevice, mask, clip, fPMColor); |
| 197 } else if (SkMask::kARGB32_Format == mask.fFormat) { | 178 } else if (SkMask::kARGB32_Format == mask.fFormat) { |
| 198 SkARGB32_Blit32(fDevice, mask, clip, fPMColor); | 179 SkARGB32_Blit32(fDevice, mask, clip, fPMColor); |
| 199 } | 180 } |
| 200 } | 181 } |
| 201 | 182 |
| 202 #ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 | |
| 203 void SkARGB32_Opaque_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { | |
| 204 uint32_t* device = fDevice.getAddr32(x, y); | |
| 205 SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) | |
| 206 | |
| 207 device[0] = SkFastFourByteInterp(fPMColor, device[0], a0); | |
| 208 device[1] = SkFastFourByteInterp(fPMColor, device[1], a1); | |
| 209 } | |
| 210 | |
| 211 void SkARGB32_Opaque_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { | |
| 212 uint32_t* device = fDevice.getAddr32(x, y); | |
| 213 SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) | |
| 214 | |
| 215 device[0] = SkFastFourByteInterp(fPMColor, device[0], a0); | |
| 216 device = (uint32_t*)((char*)device + fDevice.rowBytes()); | |
| 217 device[0] = SkFastFourByteInterp(fPMColor, device[0], a1); | |
| 218 } | |
| 219 #endif | |
| 220 | |
| 221 /////////////////////////////////////////////////////////////////////////////// | 183 /////////////////////////////////////////////////////////////////////////////// |
| 222 | 184 |
| 223 void SkARGB32_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { | 185 void SkARGB32_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { |
| 224 if (alpha == 0 || fSrcA == 0) { | 186 if (alpha == 0 || fSrcA == 0) { |
| 225 return; | 187 return; |
| 226 } | 188 } |
| 227 | 189 |
| 228 uint32_t* device = fDevice.getAddr32(x, y); | 190 uint32_t* device = fDevice.getAddr32(x, y); |
| 229 uint32_t color = fPMColor; | 191 uint32_t color = fPMColor; |
| 230 | 192 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 device[n] = src + SkAlphaMulQ(device[n], dst_scale); | 249 device[n] = src + SkAlphaMulQ(device[n], dst_scale); |
| 288 } while (n > 0); | 250 } while (n > 0); |
| 289 } | 251 } |
| 290 } | 252 } |
| 291 runs += count; | 253 runs += count; |
| 292 antialias += count; | 254 antialias += count; |
| 293 device += count; | 255 device += count; |
| 294 } | 256 } |
| 295 } | 257 } |
| 296 | 258 |
| 297 #ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 | |
| 298 void SkARGB32_Black_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { | |
| 299 uint32_t* device = fDevice.getAddr32(x, y); | |
| 300 SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) | |
| 301 | |
| 302 device[0] = (a0 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a0); | |
| 303 device[1] = (a1 << SK_A32_SHIFT) + SkAlphaMulQ(device[1], 256 - a1); | |
| 304 } | |
| 305 | |
| 306 void SkARGB32_Black_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { | |
| 307 uint32_t* device = fDevice.getAddr32(x, y); | |
| 308 SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) | |
| 309 | |
| 310 device[0] = (a0 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a0); | |
| 311 device = (uint32_t*)((char*)device + fDevice.rowBytes()); | |
| 312 device[0] = (a1 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a1); | |
| 313 } | |
| 314 #endif | |
| 315 | |
| 316 /////////////////////////////////////////////////////////////////////////////// | 259 /////////////////////////////////////////////////////////////////////////////// |
| 317 | 260 |
| 318 // Special version of SkBlitRow::Factory32 that knows we're in kSrc_Mode, | 261 // Special version of SkBlitRow::Factory32 that knows we're in kSrc_Mode, |
| 319 // instead of kSrcOver_Mode | 262 // instead of kSrcOver_Mode |
| 320 static void blend_srcmode(SkPMColor* SK_RESTRICT device, | 263 static void blend_srcmode(SkPMColor* SK_RESTRICT device, |
| 321 const SkPMColor* SK_RESTRICT span, | 264 const SkPMColor* SK_RESTRICT span, |
| 322 int count, U8CPU aa) { | 265 int count, U8CPU aa) { |
| 323 int aa256 = SkAlpha255To256(aa); | 266 int aa256 = SkAlpha255To256(aa); |
| 324 for (int i = 0; i < count; ++i) { | 267 for (int i = 0; i < count; ++i) { |
| 325 device[i] = SkFourByteInterp256(span[i], device[i], aa256); | 268 device[i] = SkFourByteInterp256(span[i], device[i], aa256); |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 SkBlitRow::Proc32 proc = (255 == alpha) ? fProc32 : fProc32Blend; | 626 SkBlitRow::Proc32 proc = (255 == alpha) ? fProc32 : fProc32Blend; |
| 684 do { | 627 do { |
| 685 shaderContext->shadeSpan(x, y, span, 1); | 628 shaderContext->shadeSpan(x, y, span, 1); |
| 686 proc(device, span, 1, alpha); | 629 proc(device, span, 1, alpha); |
| 687 y += 1; | 630 y += 1; |
| 688 device = (uint32_t*)((char*)device + deviceRB); | 631 device = (uint32_t*)((char*)device + deviceRB); |
| 689 } while (--height > 0); | 632 } while (--height > 0); |
| 690 } | 633 } |
| 691 } | 634 } |
| 692 } | 635 } |
| OLD | NEW |