Lines Matching +full:- +full:r
2 * Copyright (c) 2020 - 2024 the ThorVG project. All rights reserved.
116 …return ((((v&0xff)*54) + (((v>>8)&0xff)*183) + (((v>>16)&0xff)*19))) >> 8; //0.2125*R + 0.7154*G +… in _abgrLuma()
123 …(((v&0xff)*19) + (((v>>8)&0xff)*183) + (((v>>16)&0xff)*54))) >> 8; //0.0721*B + 0.7154*G + 0.2125*R in _argbLuma()
139 static inline uint32_t _abgrJoin(uint8_t r, uint8_t g, uint8_t b, uint8_t a) in _abgrJoin() argument
141 return (a << 24 | b << 16 | g << 8 | r); in _abgrJoin()
145 static inline uint32_t _argbJoin(uint8_t r, uint8_t g, uint8_t b, uint8_t a) in _argbJoin() argument
147 return (a << 24 | r << 16 | g << 8 | b); in _argbJoin()
152 return (surface->blender) ? true : false; in _blending()
160 …if (!surface->compositor || (int)surface->compositor->method <= (int)CompositeMethod::ClipPath) re… in _compositing()
167 if ((int)surface->compositor->method < (int)CompositeMethod::AddMask) return true; in _matting()
184 return MULTIPLY(s, 255 - d); in _opMaskSubtract()
196 return MULTIPLY(s, 255 - d) + MULTIPLY(d, a); in _opMaskDifference()
235 auto dbuffer = &surface->buf8[region.min.y * surface->stride + region.min.x]; in _compositeMaskImage()
236 …auto sbuffer = image->buf8 + (region.min.y + image->oy) * image->stride + (region.min.x + image->o… in _compositeMaskImage()
244 dbuffer += surface->stride; in _compositeMaskImage()
245 sbuffer += image->stride; in _compositeMaskImage()
272 if (rx2 >= w) rx2 = w - 1; in _interpUpScaler()
274 if (ry2 >= h) ry2 = h - 1; in _interpUpScaler()
276 auto dx = (sx > 0.0f) ? static_cast<uint8_t>((sx - rx) * 255.0f) : 0; in _interpUpScaler()
277 auto dy = (sy > 0.0f) ? static_cast<uint8_t>((sy - ry) * 255.0f) : 0; in _interpUpScaler()
294 int32_t minx = (int32_t)sx - n; in _interpDownScaler()
330 …MaskedRect(SwSurface* surface, const SwBBox& region, SwMask maskOp, uint8_t r, uint8_t g, uint8_t … in _rasterCompositeMaskedRect() argument
332 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterCompositeMaskedRect()
333 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterCompositeMaskedRect()
334 auto cstride = surface->compositor->image.stride; in _rasterCompositeMaskedRect()
335 …auto cbuffer = surface->compositor->image.buf8 + (region.min.y * cstride + region.min.x); //comp… in _rasterCompositeMaskedRect()
336 auto ialpha = 255 - a; in _rasterCompositeMaskedRect()
345 return _compositeMaskImage(surface, &surface->compositor->image, surface->compositor->bbox); in _rasterCompositeMaskedRect()
349 …MaskedRect(SwSurface* surface, const SwBBox& region, SwMask maskOp, uint8_t r, uint8_t g, uint8_t … in _rasterDirectMaskedRect() argument
351 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterDirectMaskedRect()
352 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterDirectMaskedRect()
353 …auto cbuffer = surface->compositor->image.buf8 + (region.min.y * surface->compositor->image.stride… in _rasterDirectMaskedRect()
354 …auto dbuffer = surface->buf8 + (region.min.y * surface->stride + region.min.x); //destination bu… in _rasterDirectMaskedRect()
363 cbuffer += surface->compositor->image.stride; in _rasterDirectMaskedRect()
364 dbuffer += surface->stride; in _rasterDirectMaskedRect()
370 static bool _rasterMaskedRect(SwSurface* surface, const SwBBox& region, uint8_t r, uint8_t g, uint8… in _rasterMaskedRect() argument
373 if (surface->channelSize != sizeof(uint8_t)) return false; in _rasterMaskedRect()
375 …lu %lu %lu %lu]", (int)surface->compositor->method, region.min.x, region.min.y, region.max.x - reg… in _rasterMaskedRect()
377 auto maskOp = _getMaskOp(surface->compositor->method); in _rasterMaskedRect()
378 …if (_direct(surface->compositor->method)) return _rasterDirectMaskedRect(surface, region, maskOp, … in _rasterMaskedRect()
379 else return _rasterCompositeMaskedRect(surface, region, maskOp, r, g, b, a); in _rasterMaskedRect()
384 static bool _rasterMattedRect(SwSurface* surface, const SwBBox& region, uint8_t r, uint8_t g, uint8… in _rasterMattedRect() argument
386 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterMattedRect()
387 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterMattedRect()
388 auto csize = surface->compositor->image.channelSize; in _rasterMattedRect()
389 …auto cbuffer = surface->compositor->image.buf8 + ((region.min.y * surface->compositor->image.strid… in _rasterMattedRect()
390 auto alpha = surface->alpha(surface->compositor->method); in _rasterMattedRect()
392 …TVGLOG("SW_ENGINE", "Matted(%d) Rect [Region: %lu %lu %u %u]", (int)surface->compositor->method, r… in _rasterMattedRect()
395 if (surface->channelSize == sizeof(uint32_t)) { in _rasterMattedRect()
396 auto color = surface->join(r, g, b, a); in _rasterMattedRect()
397 auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; in _rasterMattedRect()
399 auto dst = &buffer[y * surface->stride]; in _rasterMattedRect()
400 auto cmp = &cbuffer[y * surface->compositor->image.stride * csize]; in _rasterMattedRect()
407 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterMattedRect()
408 auto buffer = surface->buf8 + (region.min.y * surface->stride) + region.min.x; in _rasterMattedRect()
410 auto dst = &buffer[y * surface->stride]; in _rasterMattedRect()
411 auto cmp = &cbuffer[y * surface->compositor->image.stride * csize]; in _rasterMattedRect()
421 static bool _rasterBlendingRect(SwSurface* surface, const SwBBox& region, uint8_t r, uint8_t g, uin… in _rasterBlendingRect() argument
423 if (surface->channelSize != sizeof(uint32_t)) return false; in _rasterBlendingRect()
425 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterBlendingRect()
426 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterBlendingRect()
427 auto color = surface->join(r, g, b, a); in _rasterBlendingRect()
428 auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; in _rasterBlendingRect()
431 auto dst = &buffer[y * surface->stride]; in _rasterBlendingRect()
433 *dst = surface->blender(color, *dst, 255); in _rasterBlendingRect()
440 static bool _rasterTranslucentRect(SwSurface* surface, const SwBBox& region, uint8_t r, uint8_t g, … in _rasterTranslucentRect() argument
443 return avxRasterTranslucentRect(surface, region, r, g, b, a); in _rasterTranslucentRect()
445 return neonRasterTranslucentRect(surface, region, r, g, b, a); in _rasterTranslucentRect()
447 return cRasterTranslucentRect(surface, region, r, g, b, a); in _rasterTranslucentRect()
452 static bool _rasterSolidRect(SwSurface* surface, const SwBBox& region, uint8_t r, uint8_t g, uint8_… in _rasterSolidRect() argument
454 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterSolidRect()
455 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterSolidRect()
458 if (surface->channelSize == sizeof(uint32_t)) { in _rasterSolidRect()
459 auto color = surface->join(r, g, b, 255); in _rasterSolidRect()
460 auto buffer = surface->buf32 + (region.min.y * surface->stride); in _rasterSolidRect()
462 rasterPixel32(buffer + y * surface->stride, color, region.min.x, w); in _rasterSolidRect()
467 if (surface->channelSize == sizeof(uint8_t)) { in _rasterSolidRect()
469 … rasterGrayscale8(surface->buf8, 255, (y + region.min.y) * surface->stride + region.min.x, w); in _rasterSolidRect()
477 static bool _rasterRect(SwSurface* surface, const SwBBox& region, uint8_t r, uint8_t g, uint8_t b, … in _rasterRect() argument
480 if (_matting(surface)) return _rasterMattedRect(surface, region, r, g, b, a); in _rasterRect()
481 else return _rasterMaskedRect(surface, region, r, g, b, a); in _rasterRect()
483 return _rasterBlendingRect(surface, region, r, g, b, a); in _rasterRect()
485 if (a == 255) return _rasterSolidRect(surface, region, r, g, b); in _rasterRect()
486 else return _rasterTranslucentRect(surface, region, r, g, b, a); in _rasterRect()
496 static bool _rasterCompositeMaskedRle(SwSurface* surface, SwRle* rle, SwMask maskOp, uint8_t r, uin… in _rasterCompositeMaskedRle() argument
498 auto span = rle->spans; in _rasterCompositeMaskedRle()
499 auto cbuffer = surface->compositor->image.buf8; in _rasterCompositeMaskedRle()
500 auto cstride = surface->compositor->image.stride; in _rasterCompositeMaskedRle()
503 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterCompositeMaskedRle()
504 auto cmp = &cbuffer[span->y * cstride + span->x]; in _rasterCompositeMaskedRle()
505 if (span->coverage == 255) src = a; in _rasterCompositeMaskedRle()
506 else src = MULTIPLY(a, span->coverage); in _rasterCompositeMaskedRle()
507 auto ialpha = 255 - src; in _rasterCompositeMaskedRle()
508 for (auto x = 0; x < span->len; ++x, ++cmp) { in _rasterCompositeMaskedRle()
512 return _compositeMaskImage(surface, &surface->compositor->image, surface->compositor->bbox); in _rasterCompositeMaskedRle()
516 static bool _rasterDirectMaskedRle(SwSurface* surface, SwRle* rle, SwMask maskOp, uint8_t r, uint8_… in _rasterDirectMaskedRle() argument
518 auto span = rle->spans; in _rasterDirectMaskedRle()
519 auto cbuffer = surface->compositor->image.buf8; in _rasterDirectMaskedRle()
520 auto cstride = surface->compositor->image.stride; in _rasterDirectMaskedRle()
523 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterDirectMaskedRle()
524 auto cmp = &cbuffer[span->y * cstride + span->x]; in _rasterDirectMaskedRle()
525 auto dst = &surface->buf8[span->y * surface->stride + span->x]; in _rasterDirectMaskedRle()
526 if (span->coverage == 255) src = a; in _rasterDirectMaskedRle()
527 else src = MULTIPLY(a, span->coverage); in _rasterDirectMaskedRle()
528 for (auto x = 0; x < span->len; ++x, ++cmp, ++dst) { in _rasterDirectMaskedRle()
537 static bool _rasterMaskedRle(SwSurface* surface, SwRle* rle, uint8_t r, uint8_t g, uint8_t b, uint8… in _rasterMaskedRle() argument
539 TVGLOG("SW_ENGINE", "Masked(%d) Rle", (int)surface->compositor->method); in _rasterMaskedRle()
542 if (surface->channelSize != sizeof(uint8_t)) return false; in _rasterMaskedRle()
544 auto maskOp = _getMaskOp(surface->compositor->method); in _rasterMaskedRle()
545 …if (_direct(surface->compositor->method)) return _rasterDirectMaskedRle(surface, rle, maskOp, r, g… in _rasterMaskedRle()
546 else return _rasterCompositeMaskedRle(surface, rle, maskOp, r, g, b, a); in _rasterMaskedRle()
551 static bool _rasterMattedRle(SwSurface* surface, SwRle* rle, uint8_t r, uint8_t g, uint8_t b, uint8… in _rasterMattedRle() argument
553 TVGLOG("SW_ENGINE", "Matted(%d) Rle", (int)surface->compositor->method); in _rasterMattedRle()
555 auto span = rle->spans; in _rasterMattedRle()
556 auto cbuffer = surface->compositor->image.buf8; in _rasterMattedRle()
557 auto csize = surface->compositor->image.channelSize; in _rasterMattedRle()
558 auto alpha = surface->alpha(surface->compositor->method); in _rasterMattedRle()
561 if (surface->channelSize == sizeof(uint32_t)) { in _rasterMattedRle()
563 auto color = surface->join(r, g, b, a); in _rasterMattedRle()
564 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterMattedRle()
565 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterMattedRle()
566 auto cmp = &cbuffer[(span->y * surface->compositor->image.stride + span->x) * csize]; in _rasterMattedRle()
567 if (span->coverage == 255) src = color; in _rasterMattedRle()
568 else src = ALPHA_BLEND(color, span->coverage); in _rasterMattedRle()
569 for (uint32_t x = 0; x < span->len; ++x, ++dst, cmp += csize) { in _rasterMattedRle()
575 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterMattedRle()
577 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterMattedRle()
578 auto dst = &surface->buf8[span->y * surface->stride + span->x]; in _rasterMattedRle()
579 auto cmp = &cbuffer[(span->y * surface->compositor->image.stride + span->x) * csize]; in _rasterMattedRle()
580 if (span->coverage == 255) src = a; in _rasterMattedRle()
581 else src = MULTIPLY(a, span->coverage); in _rasterMattedRle()
582 for (uint32_t x = 0; x < span->len; ++x, ++dst, cmp += csize) { in _rasterMattedRle()
591 static bool _rasterBlendingRle(SwSurface* surface, const SwRle* rle, uint8_t r, uint8_t g, uint8_t … in _rasterBlendingRle() argument
593 if (surface->channelSize != sizeof(uint32_t)) return false; in _rasterBlendingRle()
595 auto span = rle->spans; in _rasterBlendingRle()
596 auto color = surface->join(r, g, b, a); in _rasterBlendingRle()
598 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterBlendingRle()
599 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterBlendingRle()
600 if (span->coverage == 255) { in _rasterBlendingRle()
601 for (uint32_t x = 0; x < span->len; ++x, ++dst) { in _rasterBlendingRle()
602 *dst = surface->blender(color, *dst, 255); in _rasterBlendingRle()
605 for (uint32_t x = 0; x < span->len; ++x, ++dst) { in _rasterBlendingRle()
606 auto tmp = surface->blender(color, *dst, 255); in _rasterBlendingRle()
607 *dst = INTERPOLATE(tmp, *dst, span->coverage); in _rasterBlendingRle()
615 static bool _rasterTranslucentRle(SwSurface* surface, const SwRle* rle, uint8_t r, uint8_t g, uint8… in _rasterTranslucentRle() argument
618 return avxRasterTranslucentRle(surface, rle, r, g, b, a); in _rasterTranslucentRle()
620 return neonRasterTranslucentRle(surface, rle, r, g, b, a); in _rasterTranslucentRle()
622 return cRasterTranslucentRle(surface, rle, r, g, b, a); in _rasterTranslucentRle()
627 static bool _rasterSolidRle(SwSurface* surface, const SwRle* rle, uint8_t r, uint8_t g, uint8_t b) in _rasterSolidRle() argument
629 auto span = rle->spans; in _rasterSolidRle()
632 if (surface->channelSize == sizeof(uint32_t)) { in _rasterSolidRle()
633 auto color = surface->join(r, g, b, 255); in _rasterSolidRle()
634 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterSolidRle()
635 if (span->coverage == 255) { in _rasterSolidRle()
636 … rasterPixel32(surface->buf32 + span->y * surface->stride, color, span->x, span->len); in _rasterSolidRle()
638 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterSolidRle()
639 auto src = ALPHA_BLEND(color, span->coverage); in _rasterSolidRle()
640 auto ialpha = 255 - span->coverage; in _rasterSolidRle()
641 for (uint32_t x = 0; x < span->len; ++x, ++dst) { in _rasterSolidRle()
647 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterSolidRle()
648 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterSolidRle()
649 if (span->coverage == 255) { in _rasterSolidRle()
650 … rasterGrayscale8(surface->buf8, span->coverage, span->y * surface->stride + span->x, span->len); in _rasterSolidRle()
652 auto dst = &surface->buf8[span->y * surface->stride + span->x]; in _rasterSolidRle()
653 auto ialpha = 255 - span->coverage; in _rasterSolidRle()
654 for (uint32_t x = 0; x < span->len; ++x, ++dst) { in _rasterSolidRle()
655 *dst = span->coverage + MULTIPLY(*dst, ialpha); in _rasterSolidRle()
664 static bool _rasterRle(SwSurface* surface, SwRle* rle, uint8_t r, uint8_t g, uint8_t b, uint8_t a) in _rasterRle() argument
669 if (_matting(surface)) return _rasterMattedRle(surface, rle, r, g, b, a); in _rasterRle()
670 else return _rasterMaskedRle(surface, rle, r, g, b, a); in _rasterRle()
672 return _rasterBlendingRle(surface, rle, r, g, b, a); in _rasterRle()
674 if (a == 255) return _rasterSolidRle(surface, rle, r, g, b); in _rasterRle()
675 else return _rasterTranslucentRle(surface, rle, r, g, b, a); in _rasterRle()
686 auto sy = (y) * itransform->e22 + itransform->e23 - 0.49f; \
687 if (sy <= -0.5f || (uint32_t)(sy + 0.5f) >= image->h) continue; \
690 miny = my - (int32_t)sampleSize; \
693 if (maxy >= (int32_t)image->h) maxy = (int32_t)image->h; \
697 auto sx = (x) * itransform->e11 + itransform->e13 - 0.49f; \
698 if (sx <= -0.5f || (uint32_t)(sx + 0.5f) >= image->w) continue; \
702 …TVGERR("SW_ENGINE", "Not Supported Scaled Masked(%d) Rle Image", (int)surface->compositor->method); in _rasterScaledMaskedRleImage()
709 TVGLOG("SW_ENGINE", "Scaled Matted(%d) Rle Image", (int)surface->compositor->method); in _rasterScaledMattedRleImage()
711 auto span = image->rle->spans; in _rasterScaledMattedRleImage()
712 auto csize = surface->compositor->image.channelSize; in _rasterScaledMattedRleImage()
713 auto alpha = surface->alpha(surface->compositor->method); in _rasterScaledMattedRleImage()
714 auto scaleMethod = image->scale < DOWN_SCALE_TOLERANCE ? _interpDownScaler : _interpUpScaler; in _rasterScaledMattedRleImage()
715 auto sampleSize = _sampleSize(image->scale); in _rasterScaledMattedRleImage()
718 for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { in _rasterScaledMattedRleImage()
719 SCALED_IMAGE_RANGE_Y(span->y) in _rasterScaledMattedRleImage()
720 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterScaledMattedRleImage()
721 …auto cmp = &surface->compositor->image.buf8[(span->y * surface->compositor->image.stride + span->x… in _rasterScaledMattedRleImage()
722 auto a = MULTIPLY(span->coverage, opacity); in _rasterScaledMattedRleImage()
723 …for (uint32_t x = static_cast<uint32_t>(span->x); x < static_cast<uint32_t>(span->x) + span->len; … in _rasterScaledMattedRleImage()
725 …auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sample… in _rasterScaledMattedRleImage()
736 auto span = image->rle->spans; in _rasterScaledBlendingRleImage()
737 auto scaleMethod = image->scale < DOWN_SCALE_TOLERANCE ? _interpDownScaler : _interpUpScaler; in _rasterScaledBlendingRleImage()
738 auto sampleSize = _sampleSize(image->scale); in _rasterScaledBlendingRleImage()
741 for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { in _rasterScaledBlendingRleImage()
742 SCALED_IMAGE_RANGE_Y(span->y) in _rasterScaledBlendingRleImage()
743 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterScaledBlendingRleImage()
744 auto alpha = MULTIPLY(span->coverage, opacity); in _rasterScaledBlendingRleImage()
746 …for (uint32_t x = static_cast<uint32_t>(span->x); x < static_cast<uint32_t>(span->x) + span->len; … in _rasterScaledBlendingRleImage()
748 …auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sample… in _rasterScaledBlendingRleImage()
749 auto tmp = surface->blender(src, *dst, 255); in _rasterScaledBlendingRleImage()
753 …for (uint32_t x = static_cast<uint32_t>(span->x); x < static_cast<uint32_t>(span->x) + span->len; … in _rasterScaledBlendingRleImage()
755 …auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sample… in _rasterScaledBlendingRleImage()
756 auto tmp = surface->blender(src, *dst, 255); in _rasterScaledBlendingRleImage()
767 auto span = image->rle->spans; in _rasterScaledRleImage()
768 auto scaleMethod = image->scale < DOWN_SCALE_TOLERANCE ? _interpDownScaler : _interpUpScaler; in _rasterScaledRleImage()
769 auto sampleSize = _sampleSize(image->scale); in _rasterScaledRleImage()
772 for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { in _rasterScaledRleImage()
773 SCALED_IMAGE_RANGE_Y(span->y) in _rasterScaledRleImage()
774 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterScaledRleImage()
775 auto alpha = MULTIPLY(span->coverage, opacity); in _rasterScaledRleImage()
776 …for (uint32_t x = static_cast<uint32_t>(span->x); x < static_cast<uint32_t>(span->x) + span->len; … in _rasterScaledRleImage()
778 …auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sample… in _rasterScaledRleImage()
789 if (surface->channelSize == sizeof(uint8_t)) { in _scaledRleImage()
816 TVGLOG("SW_ENGINE", "Direct Matted(%d) Rle Image", (int)surface->compositor->method); in _rasterDirectMattedRleImage()
818 auto span = image->rle->spans; in _rasterDirectMattedRleImage()
819 auto csize = surface->compositor->image.channelSize; in _rasterDirectMattedRleImage()
820 auto cbuffer = surface->compositor->image.buf8; in _rasterDirectMattedRleImage()
821 auto alpha = surface->alpha(surface->compositor->method); in _rasterDirectMattedRleImage()
823 for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { in _rasterDirectMattedRleImage()
824 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterDirectMattedRleImage()
825 auto cmp = &cbuffer[(span->y * surface->compositor->image.stride + span->x) * csize]; in _rasterDirectMattedRleImage()
826 auto img = image->buf32 + (span->y + image->oy) * image->stride + (span->x + image->ox); in _rasterDirectMattedRleImage()
827 auto a = MULTIPLY(span->coverage, opacity); in _rasterDirectMattedRleImage()
829 for (uint32_t x = 0; x < span->len; ++x, ++dst, ++img, cmp += csize) { in _rasterDirectMattedRleImage()
834 for (uint32_t x = 0; x < span->len; ++x, ++dst, ++img, cmp += csize) { in _rasterDirectMattedRleImage()
846 auto span = image->rle->spans; in _rasterDirectBlendingRleImage()
848 for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { in _rasterDirectBlendingRleImage()
849 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterDirectBlendingRleImage()
850 auto img = image->buf32 + (span->y + image->oy) * image->stride + (span->x + image->ox); in _rasterDirectBlendingRleImage()
851 auto alpha = MULTIPLY(span->coverage, opacity); in _rasterDirectBlendingRleImage()
853 for (uint32_t x = 0; x < span->len; ++x, ++dst, ++img) { in _rasterDirectBlendingRleImage()
854 *dst = surface->blender(*img, *dst, 255); in _rasterDirectBlendingRleImage()
857 for (uint32_t x = 0; x < span->len; ++x, ++dst, ++img) { in _rasterDirectBlendingRleImage()
858 auto tmp = surface->blender(*img, *dst, 255); in _rasterDirectBlendingRleImage()
869 auto span = image->rle->spans; in _rasterDirectRleImage()
871 for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { in _rasterDirectRleImage()
872 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterDirectRleImage()
873 auto img = image->buf32 + (span->y + image->oy) * image->stride + (span->x + image->ox); in _rasterDirectRleImage()
874 auto alpha = MULTIPLY(span->coverage, opacity); in _rasterDirectRleImage()
876 for (uint32_t x = 0; x < span->len; ++x, ++dst, ++img) { in _rasterDirectRleImage()
880 for (uint32_t x = 0; x < span->len; ++x, ++dst, ++img) { in _rasterDirectRleImage()
892 …TVGERR("SW_ENGINE", "Not Supported Direct Masked(%d) Rle Image", (int)surface->compositor->method); in _rasterDirectMaskedRleImage()
899 if (surface->channelSize == sizeof(uint8_t)) { in _directRleImage()
929 if (surface->channelSize == sizeof(uint8_t)) { in _rasterScaledMattedImage()
934 auto dbuffer = surface->buf32 + (region.min.y * surface->stride + region.min.x); in _rasterScaledMattedImage()
935 auto csize = surface->compositor->image.channelSize; in _rasterScaledMattedImage()
936 …auto cbuffer = surface->compositor->image.buf8 + (region.min.y * surface->compositor->image.stride… in _rasterScaledMattedImage()
937 auto alpha = surface->alpha(surface->compositor->method); in _rasterScaledMattedImage()
939 …lu %lu %lu %lu]", (int)surface->compositor->method, region.min.x, region.min.y, region.max.x - reg… in _rasterScaledMattedImage()
941 auto scaleMethod = image->scale < DOWN_SCALE_TOLERANCE ? _interpDownScaler : _interpUpScaler; in _rasterScaledMattedImage()
942 auto sampleSize = _sampleSize(image->scale); in _rasterScaledMattedImage()
951 …auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sample… in _rasterScaledMattedImage()
955 dbuffer += surface->stride; in _rasterScaledMattedImage()
956 cbuffer += surface->compositor->image.stride * csize; in _rasterScaledMattedImage()
964 if (surface->channelSize == sizeof(uint8_t)) { in _rasterScaledBlendingImage()
969 auto dbuffer = surface->buf32 + (region.min.y * surface->stride + region.min.x); in _rasterScaledBlendingImage()
970 auto scaleMethod = image->scale < DOWN_SCALE_TOLERANCE ? _interpDownScaler : _interpUpScaler; in _rasterScaledBlendingImage()
971 auto sampleSize = _sampleSize(image->scale); in _rasterScaledBlendingImage()
974 for (auto y = region.min.y; y < region.max.y; ++y, dbuffer += surface->stride) { in _rasterScaledBlendingImage()
979 …auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sample… in _rasterScaledBlendingImage()
980 auto tmp = surface->blender(src, *dst, 255); in _rasterScaledBlendingImage()
990 auto scaleMethod = image->scale < DOWN_SCALE_TOLERANCE ? _interpDownScaler : _interpUpScaler; in _rasterScaledImage()
991 auto sampleSize = _sampleSize(image->scale); in _rasterScaledImage()
995 if (surface->channelSize == sizeof(uint32_t)) { in _rasterScaledImage()
996 auto buffer = surface->buf32 + (region.min.y * surface->stride + region.min.x); in _rasterScaledImage()
997 for (auto y = region.min.y; y < region.max.y; ++y, buffer += surface->stride) { in _rasterScaledImage()
1002 …auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sample… in _rasterScaledImage()
1007 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterScaledImage()
1008 auto buffer = surface->buf8 + (region.min.y * surface->stride + region.min.x); in _rasterScaledImage()
1009 for (auto y = region.min.y; y < region.max.y; ++y, buffer += surface->stride) { in _rasterScaledImage()
1014 …auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sample… in _rasterScaledImage()
1054 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterDirectMattedImage()
1055 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterDirectMattedImage()
1056 auto csize = surface->compositor->image.channelSize; in _rasterDirectMattedImage()
1057 auto alpha = surface->alpha(surface->compositor->method); in _rasterDirectMattedImage()
1058 …auto sbuffer = image->buf32 + (region.min.y + image->oy) * image->stride + (region.min.x + image->… in _rasterDirectMattedImage()
1059 …auto cbuffer = surface->compositor->image.buf8 + (region.min.y * surface->compositor->image.stride… in _rasterDirectMattedImage()
1061 …INE", "Direct Matted(%d) Image [Region: %lu %lu %u %u]", (int)surface->compositor->method, region… in _rasterDirectMattedImage()
1064 if (surface->channelSize == sizeof(uint32_t)) { in _rasterDirectMattedImage()
1065 auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; in _rasterDirectMattedImage()
1081 buffer += surface->stride; in _rasterDirectMattedImage()
1082 cbuffer += surface->compositor->image.stride * csize; in _rasterDirectMattedImage()
1083 sbuffer += image->stride; in _rasterDirectMattedImage()
1086 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterDirectMattedImage()
1087 auto buffer = surface->buf8 + (region.min.y * surface->stride) + region.min.x; in _rasterDirectMattedImage()
1095 *dst = tmp + MULTIPLY(*dst, 255 - tmp); in _rasterDirectMattedImage()
1100 *dst = tmp + MULTIPLY(*dst, 255 - tmp); in _rasterDirectMattedImage()
1103 buffer += surface->stride; in _rasterDirectMattedImage()
1104 cbuffer += surface->compositor->image.stride * csize; in _rasterDirectMattedImage()
1105 sbuffer += image->stride; in _rasterDirectMattedImage()
1114 if (surface->channelSize == sizeof(uint8_t)) { in _rasterDirectBlendingImage()
1119 auto dbuffer = &surface->buf32[region.min.y * surface->stride + region.min.x]; in _rasterDirectBlendingImage()
1120 …auto sbuffer = image->buf32 + (region.min.y + image->oy) * image->stride + (region.min.x + image->… in _rasterDirectBlendingImage()
1127 auto tmp = surface->blender(*src, *dst, 255); in _rasterDirectBlendingImage()
1132 auto tmp = surface->blender(*src, *dst, 255); in _rasterDirectBlendingImage()
1136 dbuffer += surface->stride; in _rasterDirectBlendingImage()
1137 sbuffer += image->stride; in _rasterDirectBlendingImage()
1145 …auto sbuffer = image->buf32 + (region.min.y + image->oy) * image->stride + (region.min.x + image->… in _rasterDirectImage()
1148 if (surface->channelSize == sizeof(uint32_t)) { in _rasterDirectImage()
1149 auto dbuffer = &surface->buf32[region.min.y * surface->stride + region.min.x]; in _rasterDirectImage()
1164 dbuffer += surface->stride; in _rasterDirectImage()
1165 sbuffer += image->stride; in _rasterDirectImage()
1168 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterDirectImage()
1169 auto dbuffer = &surface->buf8[region.min.y * surface->stride + region.min.x]; in _rasterDirectImage()
1171 …uto y = region.min.y; y < region.max.y; ++y, dbuffer += surface->stride, sbuffer += image->stride)… in _rasterDirectImage()
1191 if (surface->channelSize == sizeof(uint8_t)) { in _rasterDirectMattedBlendingImage()
1196 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterDirectMattedBlendingImage()
1197 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterDirectMattedBlendingImage()
1198 auto csize = surface->compositor->image.channelSize; in _rasterDirectMattedBlendingImage()
1199 auto alpha = surface->alpha(surface->compositor->method); in _rasterDirectMattedBlendingImage()
1200 …auto sbuffer = image->buf32 + (region.min.y + image->oy) * image->stride + (region.min.x + image->… in _rasterDirectMattedBlendingImage()
1201 …auto cbuffer = surface->compositor->image.buf8 + (region.min.y * surface->compositor->image.stride… in _rasterDirectMattedBlendingImage()
1202 auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; in _rasterDirectMattedBlendingImage()
1211 *dst = INTERPOLATE(surface->blender(tmp, *dst, 255), *dst, A(tmp)); in _rasterDirectMattedBlendingImage()
1216 … *dst = INTERPOLATE(surface->blender(tmp, *dst, 255), *dst, MULTIPLY(opacity, A(tmp))); in _rasterDirectMattedBlendingImage()
1219 buffer += surface->stride; in _rasterDirectMattedBlendingImage()
1220 cbuffer += surface->compositor->image.stride * csize; in _rasterDirectMattedBlendingImage()
1221 sbuffer += image->stride; in _rasterDirectMattedBlendingImage()
1227 //Blenders for the following scenarios: [Composition / Non-Composition] * [Opaque / Translucent]
1248 if (image->rle) { in _rasterImage()
1249 if (image->direct) return _directRleImage(surface, image, opacity); in _rasterImage()
1250 else if (image->scaled) return _scaledRleImage(surface, image, transform, region, opacity); in _rasterImage()
1254 if (image->direct) return _directImage(surface, image, region, opacity); in _rasterImage()
1255 else if (image->scaled) return _scaledImage(surface, image, transform, region, opacity); in _rasterImage()
1268 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterCompositeGradientMaskedRect()
1269 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterCompositeGradientMaskedRect()
1270 auto cstride = surface->compositor->image.stride; in _rasterCompositeGradientMaskedRect()
1271 auto cbuffer = surface->compositor->image.buf8 + (region.min.y * cstride + region.min.x); in _rasterCompositeGradientMaskedRect()
1275 cbuffer += surface->stride; in _rasterCompositeGradientMaskedRect()
1277 return _compositeMaskImage(surface, &surface->compositor->image, surface->compositor->bbox); in _rasterCompositeGradientMaskedRect()
1284 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterDirectGradientMaskedRect()
1285 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterDirectGradientMaskedRect()
1286 auto cstride = surface->compositor->image.stride; in _rasterDirectGradientMaskedRect()
1287 auto cbuffer = surface->compositor->image.buf8 + (region.min.y * cstride + region.min.x); in _rasterDirectGradientMaskedRect()
1288 auto dbuffer = surface->buf8 + (region.min.y * surface->stride + region.min.x); in _rasterDirectGradientMaskedRect()
1293 dbuffer += surface->stride; in _rasterDirectGradientMaskedRect()
1302 auto method = surface->compositor->method; in _rasterGradientMaskedRect()
1304 …%lu]", (int)method, region.min.x, region.min.y, region.max.x - region.min.x, region.max.y - region… in _rasterGradientMaskedRect()
1318 auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; in _rasterGradientMattedRect()
1319 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterGradientMattedRect()
1320 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterGradientMattedRect()
1321 auto csize = surface->compositor->image.channelSize; in _rasterGradientMattedRect()
1322 …auto cbuffer = surface->compositor->image.buf8 + (region.min.y * surface->compositor->image.stride… in _rasterGradientMattedRect()
1323 auto alpha = surface->alpha(surface->compositor->method); in _rasterGradientMattedRect()
1325 …TVGLOG("SW_ENGINE", "Matted(%d) Gradient [Region: %lu %lu %u %u]", (int)surface->compositor->metho… in _rasterGradientMattedRect()
1329 buffer += surface->stride; in _rasterGradientMattedRect()
1330 cbuffer += surface->stride * csize; in _rasterGradientMattedRect()
1339 auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; in _rasterBlendingGradientRect()
1340 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterBlendingGradientRect()
1341 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterBlendingGradientRect()
1343 if (fill->translucent) { in _rasterBlendingGradientRect()
1345 …fillMethod()(fill, buffer + y * surface->stride, region.min.y + y, region.min.x, w, opBlendPreNorm… in _rasterBlendingGradientRect()
1349 …fillMethod()(fill, buffer + y * surface->stride, region.min.y + y, region.min.x, w, opBlendSrcOver… in _rasterBlendingGradientRect()
1358 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterTranslucentGradientRect()
1359 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterTranslucentGradientRect()
1362 if (surface->channelSize == sizeof(uint32_t)) { in _rasterTranslucentGradientRect()
1363 auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; in _rasterTranslucentGradientRect()
1366 buffer += surface->stride; in _rasterTranslucentGradientRect()
1369 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterTranslucentGradientRect()
1370 auto buffer = surface->buf8 + (region.min.y * surface->stride) + region.min.x; in _rasterTranslucentGradientRect()
1373 buffer += surface->stride; in _rasterTranslucentGradientRect()
1383 auto w = static_cast<uint32_t>(region.max.x - region.min.x); in _rasterSolidGradientRect()
1384 auto h = static_cast<uint32_t>(region.max.y - region.min.y); in _rasterSolidGradientRect()
1387 if (surface->channelSize == sizeof(uint32_t)) { in _rasterSolidGradientRect()
1388 auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; in _rasterSolidGradientRect()
1391 buffer += surface->stride; in _rasterSolidGradientRect()
1394 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterSolidGradientRect()
1395 auto buffer = surface->buf8 + (region.min.y * surface->stride) + region.min.x; in _rasterSolidGradientRect()
1398 buffer += surface->stride; in _rasterSolidGradientRect()
1413 … if (fill->translucent) return _rasterTranslucentGradientRect<FillLinear>(surface, region, fill); in _rasterLinearGradientRect()
1428 … if (fill->translucent) return _rasterTranslucentGradientRect<FillRadial>(surface, region, fill); in _rasterRadialGradientRect()
1442 auto span = rle->spans; in _rasterCompositeGradientMaskedRle()
1443 auto cstride = surface->compositor->image.stride; in _rasterCompositeGradientMaskedRle()
1444 auto cbuffer = surface->compositor->image.buf8; in _rasterCompositeGradientMaskedRle()
1446 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterCompositeGradientMaskedRle()
1447 auto cmp = &cbuffer[span->y * cstride + span->x]; in _rasterCompositeGradientMaskedRle()
1448 fillMethod()(fill, cmp, span->y, span->x, span->len, maskOp, span->coverage); in _rasterCompositeGradientMaskedRle()
1450 return _compositeMaskImage(surface, &surface->compositor->image, surface->compositor->bbox); in _rasterCompositeGradientMaskedRle()
1457 auto span = rle->spans; in _rasterDirectGradientMaskedRle()
1458 auto cstride = surface->compositor->image.stride; in _rasterDirectGradientMaskedRle()
1459 auto cbuffer = surface->compositor->image.buf8; in _rasterDirectGradientMaskedRle()
1460 auto dbuffer = surface->buf8; in _rasterDirectGradientMaskedRle()
1462 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterDirectGradientMaskedRle()
1463 auto cmp = &cbuffer[span->y * cstride + span->x]; in _rasterDirectGradientMaskedRle()
1464 auto dst = &dbuffer[span->y * surface->stride + span->x]; in _rasterDirectGradientMaskedRle()
1465 fillMethod()(fill, dst, span->y, span->x, span->len, cmp, maskOp, span->coverage); in _rasterDirectGradientMaskedRle()
1474 auto method = surface->compositor->method; in _rasterGradientMaskedRle()
1489 TVGLOG("SW_ENGINE", "Matted(%d) Rle Linear Gradient", (int)surface->compositor->method); in _rasterGradientMattedRle()
1491 auto span = rle->spans; in _rasterGradientMattedRle()
1492 auto csize = surface->compositor->image.channelSize; in _rasterGradientMattedRle()
1493 auto cbuffer = surface->compositor->image.buf8; in _rasterGradientMattedRle()
1494 auto alpha = surface->alpha(surface->compositor->method); in _rasterGradientMattedRle()
1496 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterGradientMattedRle()
1497 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterGradientMattedRle()
1498 auto cmp = &cbuffer[(span->y * surface->compositor->image.stride + span->x) * csize]; in _rasterGradientMattedRle()
1499 fillMethod()(fill, dst, span->y, span->x, span->len, cmp, alpha, csize, span->coverage); in _rasterGradientMattedRle()
1508 auto span = rle->spans; in _rasterBlendingGradientRle()
1510 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterBlendingGradientRle()
1511 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterBlendingGradientRle()
1512 …fillMethod()(fill, dst, span->y, span->x, span->len, opBlendPreNormal, surface->blender, span->cov… in _rasterBlendingGradientRle()
1521 auto span = rle->spans; in _rasterTranslucentGradientRle()
1524 if (surface->channelSize == sizeof(uint32_t)) { in _rasterTranslucentGradientRle()
1525 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterTranslucentGradientRle()
1526 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterTranslucentGradientRle()
1527 …if (span->coverage == 255) fillMethod()(fill, dst, span->y, span->x, span->len, opBlendPreNormal, … in _rasterTranslucentGradientRle()
1528 … else fillMethod()(fill, dst, span->y, span->x, span->len, opBlendNormal, span->coverage); in _rasterTranslucentGradientRle()
1531 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterTranslucentGradientRle()
1532 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterTranslucentGradientRle()
1533 auto dst = &surface->buf8[span->y * surface->stride + span->x]; in _rasterTranslucentGradientRle()
1534 fillMethod()(fill, dst, span->y, span->x, span->len, _opMaskAdd, span->coverage); in _rasterTranslucentGradientRle()
1544 auto span = rle->spans; in _rasterSolidGradientRle()
1547 if (surface->channelSize == sizeof(uint32_t)) { in _rasterSolidGradientRle()
1548 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterSolidGradientRle()
1549 auto dst = &surface->buf32[span->y * surface->stride + span->x]; in _rasterSolidGradientRle()
1550 …if (span->coverage == 255) fillMethod()(fill, dst, span->y, span->x, span->len, opBlendSrcOver, 25… in _rasterSolidGradientRle()
1551 … else fillMethod()(fill, dst, span->y, span->x, span->len, opBlendInterp, span->coverage); in _rasterSolidGradientRle()
1554 } else if (surface->channelSize == sizeof(uint8_t)) { in _rasterSolidGradientRle()
1555 for (uint32_t i = 0; i < rle->size; ++i, ++span) { in _rasterSolidGradientRle()
1556 auto dst = &surface->buf8[span->y * surface->stride + span->x]; in _rasterSolidGradientRle()
1557 … if (span->coverage == 255) fillMethod()(fill, dst, span->y, span->x, span->len, _opMaskNone, 255); in _rasterSolidGradientRle()
1558 else fillMethod()(fill, dst, span->y, span->x, span->len, _opMaskAdd, span->coverage); in _rasterSolidGradientRle()
1576 if (fill->translucent) return _rasterTranslucentGradientRle<FillLinear>(surface, rle, fill); in _rasterLinearGradientRle()
1593 if (fill->translucent) return _rasterTranslucentGradientRle<FillRadial>(surface, rle, fill); in _rasterRadialGradientRle()
1632 surface->alphas[0] = _alpha; in rasterCompositor()
1633 surface->alphas[1] = _ialpha; in rasterCompositor()
1635 if (surface->cs == ColorSpace::ABGR8888 || surface->cs == ColorSpace::ABGR8888S) { in rasterCompositor()
1636 surface->join = _abgrJoin; in rasterCompositor()
1637 surface->alphas[2] = _abgrLuma; in rasterCompositor()
1638 surface->alphas[3] = _abgrInvLuma; in rasterCompositor()
1639 } else if (surface->cs == ColorSpace::ARGB8888 || surface->cs == ColorSpace::ARGB8888S) { in rasterCompositor()
1640 surface->join = _argbJoin; in rasterCompositor()
1641 surface->alphas[2] = _argbLuma; in rasterCompositor()
1642 surface->alphas[3] = _argbInvLuma; in rasterCompositor()
1644 TVGERR("SW_ENGINE", "Unsupported Colorspace(%d) is expected!", surface->cs); in rasterCompositor()
1653 …if (!surface || !surface->buf32 || surface->stride == 0 || surface->w == 0 || surface->h == 0) ret… in rasterClear()
1656 if (surface->channelSize == sizeof(uint32_t)) { in rasterClear()
1658 if (w == surface->stride) { in rasterClear()
1659 rasterPixel32(surface->buf32, val, surface->stride * y, w * h); in rasterClear()
1663 … rasterPixel32(surface->buf32, val, (surface->stride * y + x) + (surface->stride * i), w); in rasterClear()
1667 } else if (surface->channelSize == sizeof(uint8_t)) { in rasterClear()
1669 if (w == surface->stride) { in rasterClear()
1670 rasterGrayscale8(surface->buf8, 0x00, surface->stride * y, w * h); in rasterClear()
1674 … rasterGrayscale8(surface->buf8, 0x00, (surface->stride * y + x) + (surface->stride * i), w); in rasterClear()
1684 if (surface->channelSize != sizeof(uint32_t)) return; in rasterUnpremultiply()
1686 TVGLOG("SW_ENGINE", "Unpremultiply [Size: %d x %d]", surface->w, surface->h); in rasterUnpremultiply()
1689 for (uint32_t y = 0; y < surface->h; y++) { in rasterUnpremultiply()
1690 auto buffer = surface->buf32 + surface->stride * y; in rasterUnpremultiply()
1691 for (uint32_t x = 0; x < surface->w; ++x) { in rasterUnpremultiply()
1698 uint16_t r = ((buffer[x] >> 8) & 0xff00) / a; in rasterUnpremultiply() local
1701 if (r > 0xff) r = 0xff; in rasterUnpremultiply()
1704 buffer[x] = (a << 24) | (r << 16) | (g << 8) | (b); in rasterUnpremultiply()
1708 surface->premultiplied = false; in rasterUnpremultiply()
1714 ScopedLock lock(surface->key); in rasterPremultiply()
1715 if (surface->premultiplied || (surface->channelSize != sizeof(uint32_t))) return; in rasterPremultiply()
1716 surface->premultiplied = true; in rasterPremultiply()
1718 TVGLOG("SW_ENGINE", "Premultiply [Size: %d x %d]", surface->w, surface->h); in rasterPremultiply()
1721 auto buffer = surface->buf32; in rasterPremultiply()
1722 for (uint32_t y = 0; y < surface->h; ++y, buffer += surface->stride) { in rasterPremultiply()
1724 for (uint32_t x = 0; x < surface->w; ++x, ++dst) { in rasterPremultiply()
1735 if (!shape->fill) return false; in rasterGradientShape()
1737 if (auto color = fillFetchSolid(shape->fill, fdata)) { in rasterGradientShape()
1738 auto a = MULTIPLY(color->a, opacity); in rasterGradientShape()
1739 return a > 0 ? rasterShape(surface, shape, color->r, color->g, color->b, a) : true; in rasterGradientShape()
1742 auto type = fdata->type(); in rasterGradientShape()
1743 if (shape->fastTrack) { in rasterGradientShape()
1744 …(type == Type::LinearGradient) return _rasterLinearGradientRect(surface, shape->bbox, shape->fill); in rasterGradientShape()
1745 … (type == Type::RadialGradient)return _rasterRadialGradientRect(surface, shape->bbox, shape->fill); in rasterGradientShape()
1747 …f (type == Type::LinearGradient) return _rasterLinearGradientRle(surface, shape->rle, shape->fill); in rasterGradientShape()
1748 …f (type == Type::RadialGradient) return _rasterRadialGradientRle(surface, shape->rle, shape->fill); in rasterGradientShape()
1756 if (!shape->stroke || !shape->stroke->fill || !shape->strokeRle) return false; in rasterGradientStroke()
1758 if (auto color = fillFetchSolid(shape->stroke->fill, fdata)) { in rasterGradientStroke()
1759 auto a = MULTIPLY(color->a, opacity); in rasterGradientStroke()
1760 return a > 0 ? rasterStroke(surface, shape, color->r, color->g, color->b, a) : true; in rasterGradientStroke()
1763 auto type = fdata->type(); in rasterGradientStroke()
1764 …e::LinearGradient) return _rasterLinearGradientRle(surface, shape->strokeRle, shape->stroke->fill); in rasterGradientStroke()
1765 …e::RadialGradient) return _rasterRadialGradientRle(surface, shape->strokeRle, shape->stroke->fill); in rasterGradientStroke()
1771 bool rasterShape(SwSurface* surface, SwShape* shape, uint8_t r, uint8_t g, uint8_t b, uint8_t a) in rasterShape() argument
1774 r = MULTIPLY(r, a); in rasterShape()
1778 if (shape->fastTrack) return _rasterRect(surface, shape->bbox, r, g, b, a); in rasterShape()
1779 else return _rasterRle(surface, shape->rle, r, g, b, a); in rasterShape()
1783 bool rasterStroke(SwSurface* surface, SwShape* shape, uint8_t r, uint8_t g, uint8_t b, uint8_t a) in rasterStroke() argument
1786 r = MULTIPLY(r, a); in rasterStroke()
1791 return _rasterRle(surface, shape->strokeRle, r, g, b, a); in rasterStroke()
1798 …y < 0 || bbox.min.x >= static_cast<SwCoord>(surface->w) || bbox.min.y >= static_cast<SwCoord>(surf… in rasterImage()
1806 ScopedLock lock(surface->key); in rasterConvertCS()
1807 if (surface->cs == to) return true; in rasterConvertCS()
1810 auto from = surface->cs; in rasterConvertCS()
1813 surface->cs = to; in rasterConvertCS()
1817 surface->cs = to; in rasterConvertCS()
1838 auto bx = std::min(w, x + BLOCK) - x; in rasterXYFlip()
1844 auto by = std::min(h, y + BLOCK) - y; in rasterXYFlip()
1851 p += 1 - by * stride; in rasterXYFlip()
1852 q += stride - by; in rasterXYFlip()