mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-14 12:04:29 +00:00
sw_engine: ialpha function pointer used instead of 255 - alpha
This commit is contained in:
parent
5690f1ab0d
commit
3f82522f60
1 changed files with 22 additions and 22 deletions
|
@ -247,7 +247,7 @@ static bool _translucentImageRle(SwSurface* surface, const SwImage* image, uint3
|
|||
auto alpha = ALPHA_MULTIPLY(span->coverage, opacity);
|
||||
for (uint32_t x = 0; x < span->len; ++x, ++dst, ++img) {
|
||||
auto src = ALPHA_BLEND(*img, alpha);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -313,7 +313,7 @@ static bool _translucentImageRle(SwSurface* surface, const SwImage* image, uint3
|
|||
auto rY = static_cast<uint32_t>(roundf((span->x + x) * itransform->e21 + ey2));
|
||||
if (rX >= w || rY >= h) continue;
|
||||
auto src = ALPHA_BLEND(img[rY * image->stride + rX], alpha);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -394,7 +394,7 @@ static bool _translucentUpScaleImageRle(SwSurface* surface, const SwImage* image
|
|||
uint32_t src;
|
||||
if (rX == w - 1 || rY == h - 1) src = ALPHA_BLEND(img[rY * image->stride + rX], alpha);
|
||||
else src = ALPHA_BLEND(_applyBilinearInterpolation(img, image->stride, h, fX, fY), alpha);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -482,7 +482,7 @@ static bool _translucentDownScaleImageRle(SwSurface* surface, const SwImage* ima
|
|||
uint32_t src;
|
||||
if (rX < halfScale || rY < halfScale || rX >= w - halfScale || rY >= h - halfScale) src = ALPHA_BLEND(img[rY * image->stride + rX], alpha);
|
||||
else src = ALPHA_BLEND(_average2Nx2NPixel(surface, img, image->stride, h, rX, rY, halfScale), alpha);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -561,7 +561,7 @@ static bool _rasterImageRle(SwSurface* surface, const SwImage* image)
|
|||
} else {
|
||||
for (uint32_t x = 0; x < span->len; ++x, ++dst, ++img) {
|
||||
auto src = ALPHA_BLEND(*img, span->coverage);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -585,7 +585,7 @@ static bool _rasterImageRle(SwSurface* surface, const SwImage* image, const Matr
|
|||
auto rY = static_cast<uint32_t>(roundf((span->x + x) * itransform->e21 + ey2));
|
||||
if (rX >= w || rY >= h) continue;
|
||||
auto src = ALPHA_BLEND(img[rY * image->stride + rX], span->coverage);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -612,7 +612,7 @@ static bool _rasterUpScaleImageRle(SwSurface* surface, const SwImage* image, con
|
|||
uint32_t src;
|
||||
if (rX == w - 1 || rY == h - 1) src = ALPHA_BLEND(img[rY * image->stride + rX], span->coverage);
|
||||
else src = ALPHA_BLEND(_applyBilinearInterpolation(img, image->stride, h, fX, fY), span->coverage);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -637,7 +637,7 @@ static bool _rasterDownScaleImageRle(SwSurface* surface, const SwImage* image, c
|
|||
uint32_t src;
|
||||
if (rX < halfScale || rY < halfScale || rX >= w - halfScale || rY >= h - halfScale) src = ALPHA_BLEND(img[rY * image->stride + rX], span->coverage);
|
||||
else src = ALPHA_BLEND(_average2Nx2NPixel(surface, img, image->stride, h, rX, rY, halfScale), span->coverage);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -660,7 +660,7 @@ static bool _translucentImage(SwSurface* surface, const SwImage* image, uint32_t
|
|||
auto rY = static_cast<uint32_t>(roundf(x * itransform->e21 + ey2));
|
||||
if (rX >= w || rY >= h) continue;
|
||||
auto src = ALPHA_BLEND(img[rX + (rY * image->stride)], opacity);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
dbuffer += surface->stride;
|
||||
}
|
||||
|
@ -731,7 +731,7 @@ static bool _translucentUpScaleImage(SwSurface* surface, const SwImage* image, u
|
|||
uint32_t src;
|
||||
if (rX == w - 1 || rY == h - 1) src = ALPHA_BLEND(img[rX + (rY * image->stride)], opacity);
|
||||
else src = ALPHA_BLEND(_applyBilinearInterpolation(img, image->stride, h, fX, fY), opacity);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
dbuffer += surface->stride;
|
||||
}
|
||||
|
@ -804,7 +804,7 @@ static bool _translucentDownScaleImage(SwSurface* surface, const SwImage* image,
|
|||
uint32_t src;
|
||||
if (rX < halfScale || rY < halfScale || rX >= w - halfScale || rY >= h - halfScale) src = ALPHA_BLEND(img[rX + (rY * w)], opacity);
|
||||
else src = ALPHA_BLEND(_average2Nx2NPixel(surface, img, w, h, rX, rY, halfScale), opacity);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
dbuffer += surface->stride;
|
||||
}
|
||||
|
@ -870,7 +870,7 @@ static bool _translucentImage(SwSurface* surface, const SwImage* image, uint32_t
|
|||
auto src = sbuffer;
|
||||
for (auto x = region.min.x; x < region.max.x; ++x, ++dst, ++src) {
|
||||
auto p = ALPHA_BLEND(*src, opacity);
|
||||
*dst = p + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(p));
|
||||
*dst = p + ALPHA_BLEND(*dst, surface->blender.ialpha(p));
|
||||
}
|
||||
dbuffer += surface->stride;
|
||||
sbuffer += image->stride;
|
||||
|
@ -929,7 +929,7 @@ static bool _rasterImage(SwSurface* surface, const SwImage* image, const SwBBox&
|
|||
auto dst = dbuffer;
|
||||
auto src = sbuffer;
|
||||
for (auto x = region.min.x; x < region.max.x; x++, dst++, src++) {
|
||||
*dst = *src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(*src));
|
||||
*dst = *src + ALPHA_BLEND(*dst, surface->blender.ialpha(*src));
|
||||
}
|
||||
dbuffer += surface->stride;
|
||||
sbuffer += image->stride;
|
||||
|
@ -953,7 +953,7 @@ static bool _rasterImage(SwSurface* surface, const SwImage* image, const SwBBox&
|
|||
auto rY = static_cast<uint32_t>(roundf(x * itransform->e21 + ey2));
|
||||
if (rX >= w || rY >= h) continue;
|
||||
auto src = img[rX + (rY * image->stride)];
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -979,7 +979,7 @@ static bool _rasterUpScaleImage(SwSurface* surface, const SwImage* image, const
|
|||
uint32_t src;
|
||||
if (rX == w - 1 || rY == h - 1) src = img[rX + (rY * w)];
|
||||
else src = _applyBilinearInterpolation(img, w, h, fX, fY);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -1006,7 +1006,7 @@ static bool _rasterDownScaleImage(SwSurface* surface, const SwImage* image, cons
|
|||
uint32_t src;
|
||||
if (rX < halfScale || rY < halfScale || rX >= w - halfScale || rY >= h - halfScale) src = img[rX + (rY * w)];
|
||||
else src = _average2Nx2NPixel(surface, img, w, h, rX, rY, halfScale);
|
||||
*dst = src + ALPHA_BLEND(*dst, 255 - surface->blender.alpha(src));
|
||||
*dst = src + ALPHA_BLEND(*dst, surface->blender.ialpha(src));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -1032,7 +1032,7 @@ static bool _translucentLinearGradientRect(SwSurface* surface, const SwBBox& reg
|
|||
for (uint32_t y = 0; y < h; ++y) {
|
||||
fillFetchLinear(fill, sbuffer, region.min.y + y, region.min.x, w);
|
||||
for (uint32_t x = 0; x < w; ++x) {
|
||||
dst[x] = sbuffer[x] + ALPHA_BLEND(dst[x], 255 - surface->blender.alpha(sbuffer[x]));
|
||||
dst[x] = sbuffer[x] + ALPHA_BLEND(dst[x], surface->blender.ialpha(sbuffer[x]));
|
||||
}
|
||||
dst += surface->stride;
|
||||
}
|
||||
|
@ -1112,7 +1112,7 @@ static bool _translucentRadialGradientRect(SwSurface* surface, const SwBBox& reg
|
|||
for (uint32_t y = 0; y < h; ++y) {
|
||||
fillFetchRadial(fill, sbuffer, region.min.y + y, region.min.x, w);
|
||||
for (uint32_t x = 0; x < w; ++x) {
|
||||
dst[x] = sbuffer[x] + ALPHA_BLEND(dst[x], 255 - surface->blender.alpha(sbuffer[x]));
|
||||
dst[x] = sbuffer[x] + ALPHA_BLEND(dst[x], surface->blender.ialpha(sbuffer[x]));
|
||||
}
|
||||
dst += surface->stride;
|
||||
}
|
||||
|
@ -1191,12 +1191,12 @@ static bool _translucentLinearGradientRle(SwSurface* surface, const SwRleData* r
|
|||
fillFetchLinear(fill, buffer, span->y, span->x, span->len);
|
||||
if (span->coverage == 255) {
|
||||
for (uint32_t i = 0; i < span->len; ++i) {
|
||||
dst[i] = buffer[i] + ALPHA_BLEND(dst[i], 255 - surface->blender.alpha(buffer[i]));
|
||||
dst[i] = buffer[i] + ALPHA_BLEND(dst[i], surface->blender.ialpha(buffer[i]));
|
||||
}
|
||||
} else {
|
||||
for (uint32_t i = 0; i < span->len; ++i) {
|
||||
auto tmp = ALPHA_BLEND(buffer[i], span->coverage);
|
||||
dst[i] = tmp + ALPHA_BLEND(dst[i], 255 - surface->blender.alpha(tmp));
|
||||
dst[i] = tmp + ALPHA_BLEND(dst[i], surface->blender.ialpha(tmp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1290,12 +1290,12 @@ static bool _translucentRadialGradientRle(SwSurface* surface, const SwRleData* r
|
|||
fillFetchRadial(fill, buffer, span->y, span->x, span->len);
|
||||
if (span->coverage == 255) {
|
||||
for (uint32_t i = 0; i < span->len; ++i) {
|
||||
dst[i] = buffer[i] + ALPHA_BLEND(dst[i], 255 - surface->blender.alpha(buffer[i]));
|
||||
dst[i] = buffer[i] + ALPHA_BLEND(dst[i], surface->blender.ialpha(buffer[i]));
|
||||
}
|
||||
} else {
|
||||
for (uint32_t i = 0; i < span->len; ++i) {
|
||||
auto tmp = ALPHA_BLEND(buffer[i], span->coverage);
|
||||
dst[i] = tmp + ALPHA_BLEND(dst[i], 255 - surface->blender.alpha(tmp));
|
||||
dst[i] = tmp + ALPHA_BLEND(dst[i], surface->blender.ialpha(tmp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue