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;
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;
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;
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;
} 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));
}
}
}
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;
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;
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;
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;
}
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;
}
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;
}
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;
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;
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;
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;
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;
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;
}
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;
}
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));
}
}
}
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));
}
}
}