diff --git a/src/lib/sw_engine/tvgSwRaster.cpp b/src/lib/sw_engine/tvgSwRaster.cpp index 23a461c3..223c31e4 100644 --- a/src/lib/sw_engine/tvgSwRaster.cpp +++ b/src/lib/sw_engine/tvgSwRaster.cpp @@ -275,7 +275,7 @@ static bool _rasterSolidRle(SwSurface* surface, const SwRleData* rle, uint32_t c /* Image */ /************************************************************************/ -static bool _rasterTranslucentImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity) +static bool _translucentImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity) { auto span = rle->spans; @@ -292,7 +292,23 @@ static bool _rasterTranslucentImageRle(SwSurface* surface, const SwRleData* rle, } -static bool _rasterTranslucentImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform) +static bool _rasterTranslucentImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity) +{ + if (surface->compositor) { + if (surface->compositor->method == CompositeMethod::AlphaMask) { +//TODO: implement +// return _translucentImageRleAlphaMask(surface, rle, img, w, h, opacity); + } + if (surface->compositor->method == CompositeMethod::InvAlphaMask) { +//TODO: implement +// return _translucentImageRleInvAlphaMask(surface, rle, img, w, h, opacity); + } + } + return _translucentImageRle(surface, rle, img, w, h, opacity); +} + + +static bool _translucentImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform) { auto span = rle->spans; @@ -313,7 +329,23 @@ static bool _rasterTranslucentImageRle(SwSurface* surface, const SwRleData* rle, } -static bool _rasterTranslucentUpScaleImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform) +static bool _rasterTranslucentImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform) +{ + if (surface->compositor) { + if (surface->compositor->method == CompositeMethod::AlphaMask) { +//TODO: implement +// return _translucentImageRleAlphaMask(surface, rle, img, w, h, opacity, invTransform); + } + if (surface->compositor->method == CompositeMethod::InvAlphaMask) { +//TODO: implement +// return _translucentImageRleInvAlphaMask(surface, rle, img, w, h, opacity, invTransform); + } + } + return _translucentImageRle(surface, rle, img, w, h, opacity, invTransform); +} + + +static bool _translucentUpScaleImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform) { auto span = rle->spans; for (uint32_t i = 0; i < rle->size; ++i, ++span) { @@ -337,7 +369,23 @@ static bool _rasterTranslucentUpScaleImageRle(SwSurface* surface, const SwRleDat } -static bool _rasterTranslucentDownScaleImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform, float scaling) +static bool _rasterTranslucentUpScaleImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform) +{ + if (surface->compositor) { + if (surface->compositor->method == CompositeMethod::AlphaMask) { +//TODO: implement +// return _translucentUpScaleImageRleAlphaMask(surface, rle, img, w, h, opacity, invTransform); + } + if (surface->compositor->method == CompositeMethod::InvAlphaMask) { +//TODO: implement +// return _translucentUpScaleImageRleInvAlphaMask(surface, rle, img, w, h, opacity, invTransform); + } + } + return _translucentUpScaleImageRle(surface, rle, img, w, h, opacity, invTransform); +} + + +static bool _translucentDownScaleImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform, float scaling) { uint32_t halfScaling = static_cast(0.5f / scaling); if (halfScaling == 0) halfScaling = 1; @@ -361,6 +409,22 @@ static bool _rasterTranslucentDownScaleImageRle(SwSurface* surface, const SwRleD } +static bool _rasterTranslucentDownScaleImageRle(SwSurface* surface, const SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h, uint32_t opacity, const Matrix* invTransform, float scaling) +{ + if (surface->compositor) { + if (surface->compositor->method == CompositeMethod::AlphaMask) { +//TODO: implement +// return _translucentDownScaleImageRleAlphaMask(surface, rle, img, w, h, opacity, invTransform, scaling); + } + if (surface->compositor->method == CompositeMethod::InvAlphaMask) { +//TODO: implement +// return _translucentDownScaleImageRleInvAlphaMask(surface, rle, img, w, h, opacity, invTransform, scaling); + } + } + return _translucentDownScaleImageRle(surface, rle, img, w, h, opacity, invTransform, scaling); +} + + static bool _rasterImageRle(SwSurface* surface, SwRleData* rle, uint32_t *img, uint32_t w, uint32_t h) { auto span = rle->spans;