| OLD | NEW |
| 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 #include "SkCoreBlitters.h" | 10 #include "SkCoreBlitters.h" |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 } | 343 } |
| 344 | 344 |
| 345 y += 1; | 345 y += 1; |
| 346 device += fDevice.rowBytes(); | 346 device += fDevice.rowBytes(); |
| 347 alpha += mask.fRowBytes; | 347 alpha += mask.fRowBytes; |
| 348 } | 348 } |
| 349 } | 349 } |
| 350 | 350 |
| 351 /////////////////////////////////////////////////////////////////////////////// | 351 /////////////////////////////////////////////////////////////////////////////// |
| 352 | 352 |
| 353 #define SK_A8_COVERAGE_BLIT_SKIP_ZEROS | |
| 354 | |
| 355 SkA8_Coverage_Blitter::SkA8_Coverage_Blitter(const SkBitmap& device, | 353 SkA8_Coverage_Blitter::SkA8_Coverage_Blitter(const SkBitmap& device, |
| 356 const SkPaint& paint) : SkRasterBlitter(device) { | 354 const SkPaint& paint) : SkRasterBlitter(device) { |
| 357 SkASSERT(NULL == paint.getShader()); | 355 SkASSERT(NULL == paint.getShader()); |
| 358 SkASSERT(NULL == paint.getXfermode()); | 356 SkASSERT(NULL == paint.getXfermode()); |
| 359 SkASSERT(NULL == paint.getColorFilter()); | 357 SkASSERT(NULL == paint.getColorFilter()); |
| 360 } | 358 } |
| 361 | 359 |
| 362 void SkA8_Coverage_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], | 360 void SkA8_Coverage_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], |
| 363 const int16_t runs[]) { | 361 const int16_t runs[]) { |
| 364 SkASSERT(0 == x); | |
| 365 | |
| 366 uint8_t* device = fDevice.getAddr8(x, y); | 362 uint8_t* device = fDevice.getAddr8(x, y); |
| 367 SkDEBUGCODE(int totalCount = 0;) | 363 SkDEBUGCODE(int totalCount = 0;) |
| 368 | 364 |
| 369 for (;;) { | 365 for (;;) { |
| 370 int count = runs[0]; | 366 int count = runs[0]; |
| 371 SkASSERT(count >= 0); | 367 SkASSERT(count >= 0); |
| 372 if (count == 0) { | 368 if (count == 0) { |
| 373 return; | 369 return; |
| 374 } | 370 } |
| 375 #ifdef SK_A8_COVERAGE_BLIT_SKIP_ZEROS | 371 if (antialias[0]) { |
| 376 if (antialias[0]) | |
| 377 #endif | |
| 378 { | |
| 379 memset(device, antialias[0], count); | 372 memset(device, antialias[0], count); |
| 380 } | 373 } |
| 381 runs += count; | 374 runs += count; |
| 382 antialias += count; | 375 antialias += count; |
| 383 device += count; | 376 device += count; |
| 384 | 377 |
| 385 SkDEBUGCODE(totalCount += count;) | 378 SkDEBUGCODE(totalCount += count;) |
| 386 } | 379 } |
| 387 SkASSERT(fDevice.width() == totalCount); | 380 SkASSERT(fDevice.width() == totalCount); |
| 388 } | 381 } |
| 389 | 382 |
| 390 void SkA8_Coverage_Blitter::blitH(int x, int y, int width) { | 383 void SkA8_Coverage_Blitter::blitH(int x, int y, int width) { |
| 391 memset(fDevice.getAddr8(x, y), 0xFF, width); | 384 memset(fDevice.getAddr8(x, y), 0xFF, width); |
| 392 } | 385 } |
| 393 | 386 |
| 394 void SkA8_Coverage_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { | 387 void SkA8_Coverage_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { |
| 395 #ifdef SK_A8_COVERAGE_BLIT_SKIP_ZEROS | |
| 396 if (0 == alpha) { | 388 if (0 == alpha) { |
| 397 return; | 389 return; |
| 398 } | 390 } |
| 399 #endif | 391 |
| 400 uint8_t* dst = fDevice.getAddr8(x, y); | 392 uint8_t* dst = fDevice.getAddr8(x, y); |
| 401 const size_t dstRB = fDevice.rowBytes(); | 393 const size_t dstRB = fDevice.rowBytes(); |
| 402 while (--height >= 0) { | 394 while (--height >= 0) { |
| 403 *dst = alpha; | 395 *dst = alpha; |
| 404 dst += dstRB; | 396 dst += dstRB; |
| 405 } | 397 } |
| 406 } | 398 } |
| 407 | 399 |
| 408 void SkA8_Coverage_Blitter::blitRect(int x, int y, int width, int height) { | 400 void SkA8_Coverage_Blitter::blitRect(int x, int y, int width, int height) { |
| 409 uint8_t* dst = fDevice.getAddr8(x, y); | 401 uint8_t* dst = fDevice.getAddr8(x, y); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 430 while (--height >= 0) { | 422 while (--height >= 0) { |
| 431 memcpy(dst, src, width); | 423 memcpy(dst, src, width); |
| 432 dst += dstRB; | 424 dst += dstRB; |
| 433 src += srcRB; | 425 src += srcRB; |
| 434 } | 426 } |
| 435 } | 427 } |
| 436 | 428 |
| 437 const SkBitmap* SkA8_Coverage_Blitter::justAnOpaqueColor(uint32_t*) { | 429 const SkBitmap* SkA8_Coverage_Blitter::justAnOpaqueColor(uint32_t*) { |
| 438 return NULL; | 430 return NULL; |
| 439 } | 431 } |
| OLD | NEW |