From 5ef121f7c70759f3e89940955f308a96a4107b09 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 21 Dec 2021 18:30:51 -0800 Subject: [PATCH 01/16] capi: rename tvg_paint_get_bounds Apply the changed code of 9db4a49 Change-Id: I101ec1b5ac3876a0cba76f4da97e953d0894e8f0 --- src/bindings/capi/thorvg_capi.h | 3 +-- src/bindings/capi/tvgCapi.cpp | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/bindings/capi/thorvg_capi.h b/src/bindings/capi/thorvg_capi.h index 0f99966..404f1ff 100644 --- a/src/bindings/capi/thorvg_capi.h +++ b/src/bindings/capi/thorvg_capi.h @@ -855,8 +855,7 @@ TVG_EXPORT Tvg_Paint* tvg_paint_duplicate(Tvg_Paint* paint); * * \note The bounding box doesn't indicate the actual drawing region. It's the smallest rectangle that encloses the object. */ -//TIZEN_ONLY: RENAME TO tvg_paint_get_bounds() AFTER DUPLICATED API IS REMOVED -TVG_EXPORT Tvg_Result _tvg_paint_get_bounds(const Tvg_Paint* paint, float* x, float* y, float* w, float* h, bool transformed); +TVG_EXPORT Tvg_Result tvg_paint_get_bounds(const Tvg_Paint* paint, float* x, float* y, float* w, float* h, bool transformed); /*! * \brief Sets the composition target object and the composition method. diff --git a/src/bindings/capi/tvgCapi.cpp b/src/bindings/capi/tvgCapi.cpp index 4ae221e..7c2fd12 100644 --- a/src/bindings/capi/tvgCapi.cpp +++ b/src/bindings/capi/tvgCapi.cpp @@ -199,8 +199,7 @@ TVG_EXPORT Tvg_Result tvg_paint_get_opacity(const Tvg_Paint* paint, uint8_t* opa } -//TIZEN_ONLY: RENAME TO tvg_paint_get_bounds() AFTER DUPLICATED API IS REMOVED -TVG_EXPORT Tvg_Result _tvg_paint_get_bounds(const Tvg_Paint* paint, float* x, float* y, float* w, float* h, bool transformed) +TVG_EXPORT Tvg_Result tvg_paint_get_bounds(const Tvg_Paint* paint, float* x, float* y, float* w, float* h, bool transformed) { if (!paint) return TVG_RESULT_INVALID_ARGUMENT; return (Tvg_Result) reinterpret_cast(paint)->bounds(x, y, w, h, transformed); -- 2.7.4 From d8aa8aab516b602bbdb61a447eca49dc2a8f85ef Mon Sep 17 00:00:00 2001 From: jykeon Date: Mon, 27 Dec 2021 10:36:22 +0900 Subject: [PATCH 02/16] bump up 0.6.5 Change-Id: I8431f13558ce30db255650ab2f52f794729e7c57 Signed-off-by: jykeon --- packaging/thorvg.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/thorvg.spec b/packaging/thorvg.spec index 16eba8a..84db581 100644 --- a/packaging/thorvg.spec +++ b/packaging/thorvg.spec @@ -1,6 +1,6 @@ Name: thorvg Summary: Thor Vector Graphics Library -Version: 0.6.4 +Version: 0.6.5 Release: 1 Group: Graphics System/Rendering Engine License: MIT -- 2.7.4 From eac74b661ad55c5eaf6c23b15ec205f99773bf39 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 4 Jan 2022 17:42:41 -0800 Subject: [PATCH 03/16] sw_engine SwRaster: Initialize uninitialized transform value Change-Id: I7aac462c6d6e481655c35a10b237970de7dbea76 --- src/lib/sw_engine/tvgSwRaster.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/sw_engine/tvgSwRaster.cpp b/src/lib/sw_engine/tvgSwRaster.cpp index 28b1e59..6602998 100644 --- a/src/lib/sw_engine/tvgSwRaster.cpp +++ b/src/lib/sw_engine/tvgSwRaster.cpp @@ -907,7 +907,9 @@ static bool _rasterScaledRleRGBAImage(SwSurface* surface, const SwImage* image, static bool _scaledRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* transform, const SwBBox& region, uint32_t opacity) { Matrix itransform; + if (transform && !mathInverse(transform, &itransform)) return false; + else mathIdentity(&itransform); auto halfScale = _halfScale(image->scale); @@ -1226,7 +1228,9 @@ static bool _rasterScaledRGBAImage(SwSurface* surface, const SwImage* image, con static bool _scaledRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* transform, const SwBBox& region, uint32_t opacity) { Matrix itransform; + if (transform && !mathInverse(transform, &itransform)) return false; + else mathIdentity(&itransform); auto halfScale = _halfScale(image->scale); -- 2.7.4 From 6e9c82d505f44b81c66691824e089ca86fdd3837 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Thu, 6 Jan 2022 12:32:16 +0900 Subject: [PATCH 04/16] sw_engine raster: fix a regression bug. Picture example were broken by 90fa26b7bb75cb938290170882e65da8d9fc5d9e the correct condition must be like this change. Change-Id: Ie3af07bca9d44872073b111874c60575fa4b38f4 --- src/lib/sw_engine/tvgSwRaster.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lib/sw_engine/tvgSwRaster.cpp b/src/lib/sw_engine/tvgSwRaster.cpp index 6602998..07a8561 100644 --- a/src/lib/sw_engine/tvgSwRaster.cpp +++ b/src/lib/sw_engine/tvgSwRaster.cpp @@ -908,8 +908,9 @@ static bool _scaledRleRGBAImage(SwSurface* surface, const SwImage* image, const { Matrix itransform; - if (transform && !mathInverse(transform, &itransform)) return false; - else mathIdentity(&itransform); + if (transform) { + if (!mathInverse(transform, &itransform)) return false; + } else mathIdentity(&itransform); auto halfScale = _halfScale(image->scale); @@ -1229,8 +1230,9 @@ static bool _scaledRGBAImage(SwSurface* surface, const SwImage* image, const Mat { Matrix itransform; - if (transform && !mathInverse(transform, &itransform)) return false; - else mathIdentity(&itransform); + if (transform) { + if (!mathInverse(transform, &itransform)) return false; + } else mathIdentity(&itransform); auto halfScale = _halfScale(image->scale); -- 2.7.4 From 5c959b1fb7362741143d781b55681a37d0783821 Mon Sep 17 00:00:00 2001 From: jykeon Date: Fri, 7 Jan 2022 10:41:57 +0900 Subject: [PATCH 05/16] bump up 0.6.6 Change-Id: I1106ae0d6d5623ca397232964f06bc99aeaadd42 Signed-off-by: jykeon --- packaging/thorvg.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/thorvg.spec b/packaging/thorvg.spec index 84db581..c13d829 100644 --- a/packaging/thorvg.spec +++ b/packaging/thorvg.spec @@ -1,6 +1,6 @@ Name: thorvg Summary: Thor Vector Graphics Library -Version: 0.6.5 +Version: 0.6.6 Release: 1 Group: Graphics System/Rendering Engine License: MIT -- 2.7.4 From 758d8661f557c4db2beb8dacae7b7d8665e9652f Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Fri, 14 Jan 2022 14:06:39 +0100 Subject: [PATCH 06/16] sw_engine: fixed declaration of 'i' shadows a previous local Some gcc versions and configurations was giving an error: error: "declaration of 'i' shadows a previous local" This patch should fix these errors Change-Id: Ic33bc0095a7ddfd78dd530a7dd4712c000ddd2eb --- src/lib/sw_engine/tvgSwRaster.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/lib/sw_engine/tvgSwRaster.cpp b/src/lib/sw_engine/tvgSwRaster.cpp index 07a8561..7ef47b2 100644 --- a/src/lib/sw_engine/tvgSwRaster.cpp +++ b/src/lib/sw_engine/tvgSwRaster.cpp @@ -1530,12 +1530,12 @@ static bool _rasterTranslucentLinearGradientRle(SwSurface* surface, const SwRleD auto dst = &surface->buffer[span->y * surface->stride + span->x]; fillFetchLinear(fill, buffer, span->y, span->x, span->len); if (span->coverage == 255) { - for (uint32_t i = 0; i < span->len; ++i, ++dst) { - *dst = buffer[i] + ALPHA_BLEND(*dst, _ialpha(buffer[i])); + for (uint32_t x = 0; x < span->len; ++x, ++dst) { + *dst = buffer[x] + ALPHA_BLEND(*dst, _ialpha(buffer[x])); } } else { - for (uint32_t i = 0; i < span->len; ++i, ++dst) { - auto tmp = ALPHA_BLEND(buffer[i], span->coverage); + for (uint32_t x = 0; x < span->len; ++x, ++dst) { + auto tmp = ALPHA_BLEND(buffer[x], span->coverage); *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); } } @@ -1559,8 +1559,8 @@ static bool _rasterSolidLinearGradientRle(SwSurface* surface, const SwRleData* r } else { fillFetchLinear(fill, buf, span->y, span->x, span->len); auto dst = &surface->buffer[span->y * surface->stride + span->x]; - for (uint32_t i = 0; i < span->len; ++i) { - dst[i] = INTERPOLATE(span->coverage, buf[i], dst[i]); + for (uint32_t x = 0; x < span->len; ++x) { + dst[x] = INTERPOLATE(span->coverage, buf[x], dst[x]); } } } @@ -1719,12 +1719,12 @@ static bool _rasterTranslucentRadialGradientRle(SwSurface* surface, const SwRleD auto dst = &surface->buffer[span->y * surface->stride + span->x]; fillFetchRadial(fill, buffer, span->y, span->x, span->len); if (span->coverage == 255) { - for (uint32_t i = 0; i < span->len; ++i, ++dst) { - *dst = buffer[i] + ALPHA_BLEND(*dst, _ialpha(buffer[i])); + for (uint32_t x = 0; x < span->len; ++x, ++dst) { + *dst = buffer[x] + ALPHA_BLEND(*dst, _ialpha(buffer[x])); } } else { - for (uint32_t i = 0; i < span->len; ++i, ++dst) { - auto tmp = ALPHA_BLEND(buffer[i], span->coverage); + for (uint32_t x = 0; x < span->len; ++x, ++dst) { + auto tmp = ALPHA_BLEND(buffer[x], span->coverage); *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); } } @@ -1749,8 +1749,8 @@ static bool _rasterSolidRadialGradientRle(SwSurface* surface, const SwRleData* r } else { fillFetchRadial(fill, buf, span->y, span->x, span->len); auto ialpha = 255 - span->coverage; - for (uint32_t i = 0; i < span->len; ++i, ++dst) { - *dst = ALPHA_BLEND(buf[i], span->coverage) + ALPHA_BLEND(*dst, ialpha); + for (uint32_t x = 0; x < span->len; ++x, ++dst) { + *dst = ALPHA_BLEND(buf[x], span->coverage) + ALPHA_BLEND(*dst, ialpha); } } } -- 2.7.4 From 35bff319244b0847febb9dc6c6e2ba757318834c Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Fri, 14 Jan 2022 14:19:55 +0100 Subject: [PATCH 07/16] sw_engine: fix comparison of integer expressions of different signedness Some gcc versions and configurations was giving an error: error: "comparison of integer expressions of different signedness: 'const SwCoord' {aka 'const long int'} and 'uint32_t' {aka 'unsigned int'} [-Werror=sign-compare]" This patch should fix the error Change-Id: Ie683f35220b130b3548d0059ffe130fa4fc53fdc --- src/lib/sw_engine/tvgSwRaster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/sw_engine/tvgSwRaster.cpp b/src/lib/sw_engine/tvgSwRaster.cpp index 7ef47b2..9987aeb 100644 --- a/src/lib/sw_engine/tvgSwRaster.cpp +++ b/src/lib/sw_engine/tvgSwRaster.cpp @@ -1904,7 +1904,7 @@ bool rasterStroke(SwSurface* surface, SwShape* shape, uint8_t r, uint8_t g, uint bool rasterImage(SwSurface* surface, SwImage* image, const Matrix* transform, const SwBBox& bbox, uint32_t opacity) { //Verify Boundary - if (bbox.max.x < 0 || bbox.max.y < 0 || bbox.min.x >= surface->w || bbox.min.y >= surface->h) return false; + if (bbox.max.x < 0 || bbox.max.y < 0 || bbox.min.x >= static_cast(surface->w) || bbox.min.y >= static_cast(surface->h)) return false; //TOOD: switch (image->format) //TODO: case: _rasterRGBImage() -- 2.7.4 From 32fabcb8e90c963fb7752e6caf111e4f6018de62 Mon Sep 17 00:00:00 2001 From: jykeon Date: Wed, 19 Jan 2022 17:16:29 +0900 Subject: [PATCH 08/16] bump up 0.6.7 Change-Id: Ib07f04d7c74b5f3be2ec6aaf6b76e3a88f2dbe2f Signed-off-by: jykeon --- packaging/thorvg.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/thorvg.spec b/packaging/thorvg.spec index c13d829..b58cec2 100644 --- a/packaging/thorvg.spec +++ b/packaging/thorvg.spec @@ -1,6 +1,6 @@ Name: thorvg Summary: Thor Vector Graphics Library -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: Graphics System/Rendering Engine License: MIT -- 2.7.4 From 2111930048843b2373907f4e9813f97a3b2d6206 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Mon, 22 Aug 2022 15:53:37 +0200 Subject: [PATCH 09/16] svg_loader: the preserveAspectRatio attrib handled The preserveAspectRatio attribute handled according to the svg standard. Change-Id: Ie7292ba47341994cf703b3634016c267292a22d2 --- src/lib/tvgLoadModule.h | 1 - src/loaders/svg/tvgSvgLoader.cpp | 80 ++++++++++++++++--------- src/loaders/svg/tvgSvgLoader.h | 2 + src/loaders/svg/tvgSvgLoaderCommon.h | 23 +++++++- src/loaders/svg/tvgSvgSceneBuilder.cpp | 104 ++++++++++++++++++++++++--------- src/loaders/svg/tvgSvgSceneBuilder.h | 2 +- 6 files changed, 154 insertions(+), 58 deletions(-) diff --git a/src/lib/tvgLoadModule.h b/src/lib/tvgLoadModule.h index 0c34ecb..a496b09 100644 --- a/src/lib/tvgLoadModule.h +++ b/src/lib/tvgLoadModule.h @@ -36,7 +36,6 @@ public: float vw = 0; float vh = 0; float w = 0, h = 0; //default image size - bool preserveAspect = true; //keep aspect ratio by default. virtual ~LoadModule() {} diff --git a/src/loaders/svg/tvgSvgLoader.cpp b/src/loaders/svg/tvgSvgLoader.cpp index def8ae1..050611f 100644 --- a/src/loaders/svg/tvgSvgLoader.cpp +++ b/src/loaders/svg/tvgSvgLoader.cpp @@ -116,6 +116,49 @@ static bool _parseNumber(const char** content, float* number) return true; } + +static constexpr struct +{ + AspectRatioAlign align; + const char* tag; +} alignTags[] = { + { AspectRatioAlign::XMinYMin, "xMinYMin" }, + { AspectRatioAlign::XMidYMin, "xMidYMin" }, + { AspectRatioAlign::XMaxYMin, "xMaxYMin" }, + { AspectRatioAlign::XMinYMid, "xMinYMid" }, + { AspectRatioAlign::XMidYMid, "xMidYMid" }, + { AspectRatioAlign::XMaxYMid, "xMaxYMid" }, + { AspectRatioAlign::XMinYMax, "xMinYMax" }, + { AspectRatioAlign::XMidYMax, "xMidYMax" }, + { AspectRatioAlign::XMaxYMax, "xMaxYMax" }, +}; + + +static void _parseAspectRatio(const char** content, AspectRatioAlign* align, AspectRatioMeetOrSlice* meetOrSlice) +{ + if (!strcmp(*content, "none")) { + *align = AspectRatioAlign::None; + return; + } + + for (unsigned int i = 0; i < sizeof(alignTags) / sizeof(alignTags[0]); i++) { + if (!strncmp(*content, alignTags[i].tag, 8)) { + *align = alignTags[i].align; + *content += 8; + *content = _skipSpace(*content, nullptr); + break; + } + } + + if (!strcmp(*content, "meet")) + *meetOrSlice = AspectRatioMeetOrSlice::Meet; + else if (!strcmp(*content, "slice")) + *meetOrSlice = AspectRatioMeetOrSlice::Slice; + + return; +} + + /** * According to https://www.w3.org/TR/SVG/coords.html#Units */ @@ -783,7 +826,7 @@ static bool _attrParseSvgNode(void* data, const char* key, const char* value) } loader->svgParse->global.x = (int)doc->vx; } else if (!strcmp(key, "preserveAspectRatio")) { - if (!strcmp(value, "none")) doc->preserveAspect = false; + _parseAspectRatio(&value, &doc->align, &doc->meetOrSlice); } else if (!strcmp(key, "style")) { return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader); } @@ -1150,7 +1193,9 @@ static SvgNode* _createSvgNode(SvgLoaderData* loader, SvgNode* parent, const cha loader->svgParse->global.w = 0; loader->svgParse->global.h = 0; - doc->preserveAspect = true; + doc->align = AspectRatioAlign::XMidYMid; + doc->meetOrSlice = AspectRatioMeetOrSlice::Meet; + simpleXmlParseAttributes(buf, bufLength, _attrParseSvgNode, loader); if (loader->svgParse->global.w == 0) { @@ -2846,7 +2891,7 @@ void SvgLoader::run(unsigned tid) if (loaderData.cloneNodes.count > 0) _clonePostponedNodes(&loaderData.cloneNodes); } - root = svgSceneBuild(loaderData.doc, vx, vy, vw, vh, w, h, preserveAspect, svgPath); + root = svgSceneBuild(loaderData.doc, vx, vy, vw, vh, w, h, align, meetOrSlice, svgPath); } @@ -2879,7 +2924,8 @@ bool SvgLoader::header() if (vh < FLT_EPSILON) vh = h; } - preserveAspect = loaderData.doc->node.doc.preserveAspect; + align = loaderData.doc->node.doc.align; + meetOrSlice = loaderData.doc->node.doc.meetOrSlice; } else { TVGLOG("SVG", "No SVG File. There is no "); return false; @@ -2934,31 +2980,9 @@ bool SvgLoader::resize(Paint* paint, float w, float h) auto sx = w / this->w; auto sy = h / this->h; + Matrix m = {sx, 0, 0, 0, sy, 0, 0, 0, 1}; + paint->transform(m); - if (preserveAspect) { - //Scale - auto scale = sx < sy ? sx : sy; - paint->scale(scale); - //Align - auto tx = 0.0f; - auto ty = 0.0f; - auto tw = this->w * scale; - auto th = this->h * scale; - if (tw > th) ty -= (h - th) * 0.5f; - else tx -= (w - tw) * 0.5f; - paint->translate(-tx, -ty); - } else { - //Align - auto tx = 0.0f; - auto ty = 0.0f; - auto tw = this->w * sx; - auto th = this->h * sy; - if (tw > th) ty -= (h - th) * 0.5f; - else tx -= (w - tw) * 0.5f; - - Matrix m = {sx, 0, -tx, 0, sy, -ty, 0, 0, 1}; - paint->transform(m); - } return true; } diff --git a/src/loaders/svg/tvgSvgLoader.h b/src/loaders/svg/tvgSvgLoader.h index 468f058..8c5b233 100644 --- a/src/loaders/svg/tvgSvgLoader.h +++ b/src/loaders/svg/tvgSvgLoader.h @@ -32,6 +32,8 @@ public: string svgPath = ""; const char* content = nullptr; uint32_t size = 0; + AspectRatioAlign align = AspectRatioAlign::XMidYMid; + AspectRatioMeetOrSlice meetOrSlice = AspectRatioMeetOrSlice::Meet; SvgLoaderData loaderData; unique_ptr root; diff --git a/src/loaders/svg/tvgSvgLoaderCommon.h b/src/loaders/svg/tvgSvgLoaderCommon.h index cceef91..0a6f019 100644 --- a/src/loaders/svg/tvgSvgLoaderCommon.h +++ b/src/loaders/svg/tvgSvgLoaderCommon.h @@ -136,6 +136,26 @@ enum class SvgParserLengthType Other }; +enum class AspectRatioAlign +{ + None, + XMinYMin, + XMidYMin, + XMaxYMin, + XMinYMid, + XMidYMid, + XMaxYMid, + XMinYMax, + XMidYMax, + XMaxYMax +}; + +enum class AspectRatioMeetOrSlice +{ + Meet, + Slice +}; + struct SvgDocNode { float w; @@ -145,7 +165,8 @@ struct SvgDocNode float vw; float vh; SvgNode* defs; - bool preserveAspect; + AspectRatioAlign align; + AspectRatioMeetOrSlice meetOrSlice; }; struct SvgGNode diff --git a/src/loaders/svg/tvgSvgSceneBuilder.cpp b/src/loaders/svg/tvgSvgSceneBuilder.cpp index 8701fe3..243fe7b 100644 --- a/src/loaders/svg/tvgSvgSceneBuilder.cpp +++ b/src/loaders/svg/tvgSvgSceneBuilder.cpp @@ -595,11 +595,85 @@ static unique_ptr _sceneBuildHelper(const SvgNode* node, const Box& vBox, } +static Matrix _calculateAspectRatioMatrix(AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, float width, float height, const Box& box) +{ + auto sx = width / box.w; + auto sy = height / box.h; + auto tvx = box.x * sx; + auto tvy = box.y * sy; + + if (align == AspectRatioAlign::None) + return {sx, 0, -tvx, 0, sy, -tvy, 0, 0, 1}; + + //Scale + if (meetOrSlice == AspectRatioMeetOrSlice::Meet) { + if (sx < sy) sy = sx; + else sx = sy; + } else { + if (sx < sy) sx = sy; + else sy = sx; + } + + //Align + tvx = box.x * sx; + tvy = box.y * sy; + auto tvw = box.w * sx; + auto tvh = box.h * sy; + + switch (align) { + case AspectRatioAlign::XMinYMin: { + break; + } + case AspectRatioAlign::XMidYMin: { + tvx -= (width - tvw) * 0.5f; + break; + } + case AspectRatioAlign::XMaxYMin: { + tvx -= width - tvw; + break; + } + case AspectRatioAlign::XMinYMid: { + tvy -= (height - tvh) * 0.5f; + break; + } + case AspectRatioAlign::XMidYMid: { + tvx -= (width - tvw) * 0.5f; + tvy -= (height - tvh) * 0.5f; + break; + } + case AspectRatioAlign::XMaxYMid: { + tvx -= width - tvw; + tvy -= (height - tvh) * 0.5f; + break; + } + case AspectRatioAlign::XMinYMax: { + tvy -= height - tvh; + break; + } + case AspectRatioAlign::XMidYMax: { + tvx -= (width - tvw) * 0.5f; + tvy -= height - tvh; + break; + } + case AspectRatioAlign::XMaxYMax: { + tvx -= width - tvw; + tvy -= height - tvh; + break; + } + default: { + break; + } + } + + return {sx, 0, -tvx, 0, sy, -tvy, 0, 0, 1}; +} + + /************************************************************************/ /* External Class Implementation */ /************************************************************************/ -unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, float vh, float w, float h, bool preserveAspect, const string& svgPath) +unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, float vh, float w, float h, AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, const string& svgPath) { if (!node || (node->type != SvgNodeType::Doc)) return nullptr; @@ -607,32 +681,8 @@ unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, flo auto docNode = _sceneBuildHelper(node, vBox, svgPath, false); if (!mathEqual(w, vw) || !mathEqual(h, vh)) { - auto sx = w / vw; - auto sy = h / vh; - - if (preserveAspect) { - //Scale - auto scale = sx < sy ? sx : sy; - docNode->scale(scale); - //Align - auto tvx = vx * scale; - auto tvy = vy * scale; - auto tvw = vw * scale; - auto tvh = vh * scale; - if (vw > vh) tvy -= (h - tvh) * 0.5f; - else tvx -= (w - tvw) * 0.5f; - docNode->translate(-tvx, -tvy); - } else { - //Align - auto tvx = vx * sx; - auto tvy = vy * sy; - auto tvw = vw * sx; - auto tvh = vh * sy; - if (tvw > tvh) tvy -= (h - tvh) * 0.5f; - else tvx -= (w - tvw) * 0.5f; - Matrix m = {sx, 0, -tvx, 0, sy, -tvy, 0, 0, 1}; - docNode->transform(m); - } + Matrix m = _calculateAspectRatioMatrix(align, meetOrSlice, w, h, vBox); + docNode->transform(m); } else if (!mathZero(vx) || !mathZero(vy)) { docNode->translate(-vx, -vy); } diff --git a/src/loaders/svg/tvgSvgSceneBuilder.h b/src/loaders/svg/tvgSvgSceneBuilder.h index 4232aca..20b6b2b 100644 --- a/src/loaders/svg/tvgSvgSceneBuilder.h +++ b/src/loaders/svg/tvgSvgSceneBuilder.h @@ -25,6 +25,6 @@ #include "tvgCommon.h" -unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, float vh, float w, float h, bool preserveAspect, const string& svgPath); +unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, float vh, float w, float h, AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, const string& svgPath); #endif //_TVG_SVG_SCENE_BUILDER_H_ -- 2.7.4 From f85123c6506371a6fe50879ace0cef3996dc1d10 Mon Sep 17 00:00:00 2001 From: Chun Date: Mon, 14 Nov 2022 01:23:09 +0000 Subject: [PATCH 10/16] Revert "svg_loader: the preserveAspectRatio attrib handled" This reverts commit 2111930048843b2373907f4e9813f97a3b2d6206. Change-Id: I608f73c16e8bb9c6caf2a3fb40254e6eca056dcf --- src/lib/tvgLoadModule.h | 1 + src/loaders/svg/tvgSvgLoader.cpp | 80 +++++++++---------------- src/loaders/svg/tvgSvgLoader.h | 2 - src/loaders/svg/tvgSvgLoaderCommon.h | 23 +------- src/loaders/svg/tvgSvgSceneBuilder.cpp | 104 +++++++++------------------------ src/loaders/svg/tvgSvgSceneBuilder.h | 2 +- 6 files changed, 58 insertions(+), 154 deletions(-) diff --git a/src/lib/tvgLoadModule.h b/src/lib/tvgLoadModule.h index a496b09..0c34ecb 100644 --- a/src/lib/tvgLoadModule.h +++ b/src/lib/tvgLoadModule.h @@ -36,6 +36,7 @@ public: float vw = 0; float vh = 0; float w = 0, h = 0; //default image size + bool preserveAspect = true; //keep aspect ratio by default. virtual ~LoadModule() {} diff --git a/src/loaders/svg/tvgSvgLoader.cpp b/src/loaders/svg/tvgSvgLoader.cpp index 050611f..def8ae1 100644 --- a/src/loaders/svg/tvgSvgLoader.cpp +++ b/src/loaders/svg/tvgSvgLoader.cpp @@ -116,49 +116,6 @@ static bool _parseNumber(const char** content, float* number) return true; } - -static constexpr struct -{ - AspectRatioAlign align; - const char* tag; -} alignTags[] = { - { AspectRatioAlign::XMinYMin, "xMinYMin" }, - { AspectRatioAlign::XMidYMin, "xMidYMin" }, - { AspectRatioAlign::XMaxYMin, "xMaxYMin" }, - { AspectRatioAlign::XMinYMid, "xMinYMid" }, - { AspectRatioAlign::XMidYMid, "xMidYMid" }, - { AspectRatioAlign::XMaxYMid, "xMaxYMid" }, - { AspectRatioAlign::XMinYMax, "xMinYMax" }, - { AspectRatioAlign::XMidYMax, "xMidYMax" }, - { AspectRatioAlign::XMaxYMax, "xMaxYMax" }, -}; - - -static void _parseAspectRatio(const char** content, AspectRatioAlign* align, AspectRatioMeetOrSlice* meetOrSlice) -{ - if (!strcmp(*content, "none")) { - *align = AspectRatioAlign::None; - return; - } - - for (unsigned int i = 0; i < sizeof(alignTags) / sizeof(alignTags[0]); i++) { - if (!strncmp(*content, alignTags[i].tag, 8)) { - *align = alignTags[i].align; - *content += 8; - *content = _skipSpace(*content, nullptr); - break; - } - } - - if (!strcmp(*content, "meet")) - *meetOrSlice = AspectRatioMeetOrSlice::Meet; - else if (!strcmp(*content, "slice")) - *meetOrSlice = AspectRatioMeetOrSlice::Slice; - - return; -} - - /** * According to https://www.w3.org/TR/SVG/coords.html#Units */ @@ -826,7 +783,7 @@ static bool _attrParseSvgNode(void* data, const char* key, const char* value) } loader->svgParse->global.x = (int)doc->vx; } else if (!strcmp(key, "preserveAspectRatio")) { - _parseAspectRatio(&value, &doc->align, &doc->meetOrSlice); + if (!strcmp(value, "none")) doc->preserveAspect = false; } else if (!strcmp(key, "style")) { return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader); } @@ -1193,9 +1150,7 @@ static SvgNode* _createSvgNode(SvgLoaderData* loader, SvgNode* parent, const cha loader->svgParse->global.w = 0; loader->svgParse->global.h = 0; - doc->align = AspectRatioAlign::XMidYMid; - doc->meetOrSlice = AspectRatioMeetOrSlice::Meet; - + doc->preserveAspect = true; simpleXmlParseAttributes(buf, bufLength, _attrParseSvgNode, loader); if (loader->svgParse->global.w == 0) { @@ -2891,7 +2846,7 @@ void SvgLoader::run(unsigned tid) if (loaderData.cloneNodes.count > 0) _clonePostponedNodes(&loaderData.cloneNodes); } - root = svgSceneBuild(loaderData.doc, vx, vy, vw, vh, w, h, align, meetOrSlice, svgPath); + root = svgSceneBuild(loaderData.doc, vx, vy, vw, vh, w, h, preserveAspect, svgPath); } @@ -2924,8 +2879,7 @@ bool SvgLoader::header() if (vh < FLT_EPSILON) vh = h; } - align = loaderData.doc->node.doc.align; - meetOrSlice = loaderData.doc->node.doc.meetOrSlice; + preserveAspect = loaderData.doc->node.doc.preserveAspect; } else { TVGLOG("SVG", "No SVG File. There is no "); return false; @@ -2980,9 +2934,31 @@ bool SvgLoader::resize(Paint* paint, float w, float h) auto sx = w / this->w; auto sy = h / this->h; - Matrix m = {sx, 0, 0, 0, sy, 0, 0, 0, 1}; - paint->transform(m); + if (preserveAspect) { + //Scale + auto scale = sx < sy ? sx : sy; + paint->scale(scale); + //Align + auto tx = 0.0f; + auto ty = 0.0f; + auto tw = this->w * scale; + auto th = this->h * scale; + if (tw > th) ty -= (h - th) * 0.5f; + else tx -= (w - tw) * 0.5f; + paint->translate(-tx, -ty); + } else { + //Align + auto tx = 0.0f; + auto ty = 0.0f; + auto tw = this->w * sx; + auto th = this->h * sy; + if (tw > th) ty -= (h - th) * 0.5f; + else tx -= (w - tw) * 0.5f; + + Matrix m = {sx, 0, -tx, 0, sy, -ty, 0, 0, 1}; + paint->transform(m); + } return true; } diff --git a/src/loaders/svg/tvgSvgLoader.h b/src/loaders/svg/tvgSvgLoader.h index 8c5b233..468f058 100644 --- a/src/loaders/svg/tvgSvgLoader.h +++ b/src/loaders/svg/tvgSvgLoader.h @@ -32,8 +32,6 @@ public: string svgPath = ""; const char* content = nullptr; uint32_t size = 0; - AspectRatioAlign align = AspectRatioAlign::XMidYMid; - AspectRatioMeetOrSlice meetOrSlice = AspectRatioMeetOrSlice::Meet; SvgLoaderData loaderData; unique_ptr root; diff --git a/src/loaders/svg/tvgSvgLoaderCommon.h b/src/loaders/svg/tvgSvgLoaderCommon.h index 0a6f019..cceef91 100644 --- a/src/loaders/svg/tvgSvgLoaderCommon.h +++ b/src/loaders/svg/tvgSvgLoaderCommon.h @@ -136,26 +136,6 @@ enum class SvgParserLengthType Other }; -enum class AspectRatioAlign -{ - None, - XMinYMin, - XMidYMin, - XMaxYMin, - XMinYMid, - XMidYMid, - XMaxYMid, - XMinYMax, - XMidYMax, - XMaxYMax -}; - -enum class AspectRatioMeetOrSlice -{ - Meet, - Slice -}; - struct SvgDocNode { float w; @@ -165,8 +145,7 @@ struct SvgDocNode float vw; float vh; SvgNode* defs; - AspectRatioAlign align; - AspectRatioMeetOrSlice meetOrSlice; + bool preserveAspect; }; struct SvgGNode diff --git a/src/loaders/svg/tvgSvgSceneBuilder.cpp b/src/loaders/svg/tvgSvgSceneBuilder.cpp index 243fe7b..8701fe3 100644 --- a/src/loaders/svg/tvgSvgSceneBuilder.cpp +++ b/src/loaders/svg/tvgSvgSceneBuilder.cpp @@ -595,85 +595,11 @@ static unique_ptr _sceneBuildHelper(const SvgNode* node, const Box& vBox, } -static Matrix _calculateAspectRatioMatrix(AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, float width, float height, const Box& box) -{ - auto sx = width / box.w; - auto sy = height / box.h; - auto tvx = box.x * sx; - auto tvy = box.y * sy; - - if (align == AspectRatioAlign::None) - return {sx, 0, -tvx, 0, sy, -tvy, 0, 0, 1}; - - //Scale - if (meetOrSlice == AspectRatioMeetOrSlice::Meet) { - if (sx < sy) sy = sx; - else sx = sy; - } else { - if (sx < sy) sx = sy; - else sy = sx; - } - - //Align - tvx = box.x * sx; - tvy = box.y * sy; - auto tvw = box.w * sx; - auto tvh = box.h * sy; - - switch (align) { - case AspectRatioAlign::XMinYMin: { - break; - } - case AspectRatioAlign::XMidYMin: { - tvx -= (width - tvw) * 0.5f; - break; - } - case AspectRatioAlign::XMaxYMin: { - tvx -= width - tvw; - break; - } - case AspectRatioAlign::XMinYMid: { - tvy -= (height - tvh) * 0.5f; - break; - } - case AspectRatioAlign::XMidYMid: { - tvx -= (width - tvw) * 0.5f; - tvy -= (height - tvh) * 0.5f; - break; - } - case AspectRatioAlign::XMaxYMid: { - tvx -= width - tvw; - tvy -= (height - tvh) * 0.5f; - break; - } - case AspectRatioAlign::XMinYMax: { - tvy -= height - tvh; - break; - } - case AspectRatioAlign::XMidYMax: { - tvx -= (width - tvw) * 0.5f; - tvy -= height - tvh; - break; - } - case AspectRatioAlign::XMaxYMax: { - tvx -= width - tvw; - tvy -= height - tvh; - break; - } - default: { - break; - } - } - - return {sx, 0, -tvx, 0, sy, -tvy, 0, 0, 1}; -} - - /************************************************************************/ /* External Class Implementation */ /************************************************************************/ -unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, float vh, float w, float h, AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, const string& svgPath) +unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, float vh, float w, float h, bool preserveAspect, const string& svgPath) { if (!node || (node->type != SvgNodeType::Doc)) return nullptr; @@ -681,8 +607,32 @@ unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, flo auto docNode = _sceneBuildHelper(node, vBox, svgPath, false); if (!mathEqual(w, vw) || !mathEqual(h, vh)) { - Matrix m = _calculateAspectRatioMatrix(align, meetOrSlice, w, h, vBox); - docNode->transform(m); + auto sx = w / vw; + auto sy = h / vh; + + if (preserveAspect) { + //Scale + auto scale = sx < sy ? sx : sy; + docNode->scale(scale); + //Align + auto tvx = vx * scale; + auto tvy = vy * scale; + auto tvw = vw * scale; + auto tvh = vh * scale; + if (vw > vh) tvy -= (h - tvh) * 0.5f; + else tvx -= (w - tvw) * 0.5f; + docNode->translate(-tvx, -tvy); + } else { + //Align + auto tvx = vx * sx; + auto tvy = vy * sy; + auto tvw = vw * sx; + auto tvh = vh * sy; + if (tvw > tvh) tvy -= (h - tvh) * 0.5f; + else tvx -= (w - tvw) * 0.5f; + Matrix m = {sx, 0, -tvx, 0, sy, -tvy, 0, 0, 1}; + docNode->transform(m); + } } else if (!mathZero(vx) || !mathZero(vy)) { docNode->translate(-vx, -vy); } diff --git a/src/loaders/svg/tvgSvgSceneBuilder.h b/src/loaders/svg/tvgSvgSceneBuilder.h index 20b6b2b..4232aca 100644 --- a/src/loaders/svg/tvgSvgSceneBuilder.h +++ b/src/loaders/svg/tvgSvgSceneBuilder.h @@ -25,6 +25,6 @@ #include "tvgCommon.h" -unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, float vh, float w, float h, AspectRatioAlign align, AspectRatioMeetOrSlice meetOrSlice, const string& svgPath); +unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, float vh, float w, float h, bool preserveAspect, const string& svgPath); #endif //_TVG_SVG_SCENE_BUILDER_H_ -- 2.7.4 From eb9b7dc59640ddceeecacedb60edac1fb6c78510 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 26 Nov 2021 12:10:23 +0900 Subject: [PATCH 11/16] sw_engine raster: improve the transformed rle image rasterizer. replace the transformed rle rgba image with the texmap raster. this patch removes the several scattered transformed image rasterizer, reuse the unified one texmap method instead. yay, it's much clean and optimal. Change-Id: Ie5c1a99b28c5242639618e1f4e41f8912c443b4c --- src/lib/sw_engine/tvgSwRaster.cpp | 446 +------------------------- src/lib/sw_engine/tvgSwRasterTexmap.h | 29 +- src/lib/sw_engine/tvgSwRasterTexmapInternal.h | 49 ++- src/lib/sw_engine/tvgSwRenderer.cpp | 5 +- src/lib/tvgPaint.cpp | 13 +- src/lib/tvgPaint.h | 3 +- src/lib/tvgRender.h | 2 +- 7 files changed, 81 insertions(+), 466 deletions(-) diff --git a/src/lib/sw_engine/tvgSwRaster.cpp b/src/lib/sw_engine/tvgSwRaster.cpp index 9987aeb..9ef4cc0 100644 --- a/src/lib/sw_engine/tvgSwRaster.cpp +++ b/src/lib/sw_engine/tvgSwRaster.cpp @@ -265,445 +265,16 @@ static bool _rasterRle(SwSurface* surface, SwRleData* rle, uint32_t color, uint8 /* RLE Transformed RGBA Image */ /************************************************************************/ -static bool _rasterTransformedMaskedTranslucentRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t opacity, uint32_t (*blendMethod)(uint32_t)) -{ - TVGLOG("SW_ENGINE", "Transformed Masked Translucent Rle Image"); - - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - auto cbuffer = surface->compositor->image.data; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto cmp = &cbuffer[span->y * surface->compositor->image.stride + span->x]; - auto alpha = _multiplyAlpha(span->coverage, opacity); - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(roundf((span->x + x) * itransform->e21 + ey2)); - if (rX >= w || rY >= h) continue; - auto src = ALPHA_BLEND(img[rY * image->stride + rX], alpha); - auto tmp = ALPHA_BLEND(src, blendMethod(*cmp)); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } - return true; -} - - -static bool _rasterTransformedMaskedRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t (*blendMethod)(uint32_t)) -{ - TVGLOG("SW_ENGINE", "Transformed Masked Rle Image"); - - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - auto cbuffer = surface->compositor->image.data; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto cmp = &cbuffer[span->y * surface->compositor->image.stride + span->x]; - if (span->coverage == 255) { - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(roundf((span->x + x) * itransform->e21 + ey2)); - if (rX >= w || rY >= h) continue; - auto tmp = ALPHA_BLEND(img[rY * image->stride + rX], blendMethod(*cmp)); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } else { - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(roundf((span->x + x) * itransform->e21 + ey2)); - if (rX >= w || rY >= h) continue; - auto src = ALPHA_BLEND(img[rY * image->stride + rX], span->coverage); - auto tmp = ALPHA_BLEND(src, blendMethod(*cmp)); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } - } - return true; -} - - -static bool _rasterTransformedTranslucentRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t opacity) -{ - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto alpha = _multiplyAlpha(span->coverage, opacity); - for (uint32_t x = 0; x < span->len; ++x, ++dst) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(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, _ialpha(src)); - } - } - return true; -} - - -static bool _rasterDownScaledMaskedTranslucentRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t opacity, uint32_t halfScale, uint32_t (*blendMethod)(uint32_t)) -{ - TVGLOG("SW_ENGINE", "Down Scaled Masked Translucent Rle Image"); - - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - auto cbuffer = surface->compositor->image.data; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto cmp = &cbuffer[span->y * surface->compositor->image.stride + span->x]; - auto alpha = _multiplyAlpha(span->coverage, opacity); - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(roundf((span->x + x) * itransform->e21 + ey2)); - if (rX >= w || rY >= h) continue; - 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(_interpDownScaler(img, image->stride, h, rX, rY, halfScale), alpha); - auto tmp = ALPHA_BLEND(src, _multiplyAlpha(alpha, blendMethod(*cmp))); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } - return true; -} - - -static bool _rasterDownScaledMaskedRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t halfScale, uint32_t (*blendMethod)(uint32_t)) -{ - TVGLOG("SW_ENGINE", "Down Scaled Masked Rle Image"); - - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - auto cbuffer = surface->compositor->image.data; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto cmp = &cbuffer[span->y * surface->compositor->image.stride + span->x]; - if (span->coverage == 255) { - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(roundf((span->x + x) * itransform->e21 + ey2)); - if (rX >= w || rY >= h) continue; - uint32_t src; - if (rX < halfScale || rY < halfScale || rX >= w - halfScale || rY >= h - halfScale) src = img[rY * image->stride + rX]; - else src = _interpDownScaler(img, image->stride, h, rX, rY, halfScale); - auto tmp = ALPHA_BLEND(src, blendMethod(*cmp)); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } else { - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(roundf((span->x + x) * itransform->e21 + ey2)); - if (rX >= w || rY >= h) continue; - 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(_interpDownScaler(img, image->stride, h, rX, rY, halfScale), span->coverage); - auto tmp = ALPHA_BLEND(src, _multiplyAlpha(span->coverage, blendMethod(*cmp))); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } - } - return true; -} - - -static bool _rasterDownScaledTranslucentRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t opacity, uint32_t halfScale) -{ - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto alpha = _multiplyAlpha(span->coverage, opacity); - for (uint32_t x = 0; x < span->len; ++x, ++dst) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(roundf((span->x + x) * itransform->e21 + ey2)); - if (rX >= w || rY >= h) continue; - 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(_interpDownScaler(img, image->stride, h, rX, rY, halfScale), alpha); - *dst = src + ALPHA_BLEND(*dst, _ialpha(src)); - } - } - return true; -} - - -static bool _rasterUpScaledMaskedTranslucentRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t opacity, uint32_t (*blendMethod)(uint32_t)) -{ - TVGLOG("SW_ENGINE", "Up Scaled Masked Translucent Rle Image"); - - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - auto cbuffer = surface->compositor->image.data; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto cmp = &cbuffer[span->y * surface->compositor->image.stride + span->x]; - auto alpha = _multiplyAlpha(span->coverage, opacity); - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto fX = (span->x + x) * itransform->e11 + ey1; - auto fY = (span->x + x) * itransform->e21 + ey2; - auto rX = static_cast(roundf(fX)); - auto rY = static_cast(roundf(fY)); - if (rX >= w || rY >= h) continue; - uint32_t src; - if (rX == w - 1 || rY == h - 1) src = ALPHA_BLEND(img[rY * image->stride + rX], alpha); - else src = ALPHA_BLEND(_interpUpScaler(img, image->stride, h, fX, fY), alpha); - auto tmp = ALPHA_BLEND(src, _multiplyAlpha(alpha, blendMethod(*cmp))); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } - return true; -} - - -static bool _rasterUpScaledMaskedRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t (*blendMethod)(uint32_t)) -{ - TVGLOG("SW_ENGINE", "Up Scaled Masked Rle Image"); - - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - auto cbuffer = surface->compositor->image.data; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto cmp = &cbuffer[span->y * surface->compositor->image.stride + span->x]; - if (span->coverage == 255) { - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto fX = (span->x + x) * itransform->e11 + ey1; - auto fY = (span->x + x) * itransform->e21 + ey2; - auto rX = static_cast(roundf(fX)); - auto rY = static_cast(roundf(fY)); - if (rX >= w || rY >= h) continue; - uint32_t src; - if (rX == w - 1 || rY == h - 1) src = img[rY * image->stride + rX]; - else src = _interpUpScaler(img, image->stride, h, fX, fY); - auto tmp = ALPHA_BLEND(src, blendMethod(*cmp)); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } else { - for (uint32_t x = 0; x < span->len; ++x, ++dst, ++cmp) { - auto fX = (span->x + x) * itransform->e11 + ey1; - auto fY = (span->x + x) * itransform->e21 + ey2; - auto rX = static_cast(roundf(fX)); - auto rY = static_cast(roundf(fY)); - if (rX >= w || rY >= h) continue; - uint32_t src; - if (rX == w - 1 || rY == h - 1) src = ALPHA_BLEND(img[rY * image->stride + rX], span->coverage); - else src = ALPHA_BLEND(_interpUpScaler(img, image->stride, h, fX, fY), span->coverage); - auto tmp = ALPHA_BLEND(src, _multiplyAlpha(span->coverage, blendMethod(*cmp))); - *dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp)); - } - } - } - return true; -} - - -static bool _rasterUpScaledTranslucentRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t opacity) -{ - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - auto alpha = _multiplyAlpha(span->coverage, opacity); - for (uint32_t x = 0; x < span->len; ++x, ++dst) { - auto fX = (span->x + x) * itransform->e11 + ey1; - auto fY = (span->x + x) * itransform->e21 + ey2; - auto rX = static_cast(roundf(fX)); - auto rY = static_cast(roundf(fY)); - if (rX >= w || rY >= h) continue; - uint32_t src; - if (rX == w - 1 || rY == h - 1) src = ALPHA_BLEND(img[rY * image->stride + rX], alpha); - else src = ALPHA_BLEND(_interpUpScaler(img, image->stride, h, fX, fY), alpha); - *dst = src + ALPHA_BLEND(*dst, _ialpha(src)); - } - } - return true; -} - - -static bool _rasterTransformedRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform) -{ - auto span = image->rle->spans; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - - for (uint32_t x = 0; x < span->len; ++x, ++dst) { - auto rX = static_cast(roundf((span->x + x) * itransform->e11 + ey1)); - auto rY = static_cast(roundf((span->x + x) * itransform->e21 + ey2)); - if (rX >= image->w || rY >= image->h) continue; - auto src = ALPHA_BLEND(image->data[rY * image->stride + rX], span->coverage); - *dst = src + ALPHA_BLEND(*dst, _ialpha(src)); - } - } - return true; -} - - -static bool _rasterDownScaledRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, uint32_t halfScale) -{ - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - for (uint32_t x = static_cast(span->x); x < static_cast(span->x) + span->len; ++x, ++dst) { - auto rX = static_cast(roundf(x * itransform->e11 + ey1)); - auto rY = static_cast(roundf(x * itransform->e21 + ey2)); - if (rX >= w || rY >= h) continue; - - 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(_interpDownScaler(img, image->stride, h, rX, rY, halfScale), span->coverage); - *dst = src + ALPHA_BLEND(*dst, _ialpha(src)); - } - } - return true; -} - - -static bool _rasterUpScaledRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* itransform) -{ - auto span = image->rle->spans; - auto img = image->data; - auto w = image->w; - auto h = image->h; - - for (uint32_t i = 0; i < image->rle->size; ++i, ++span) { - auto ey1 = span->y * itransform->e12 + itransform->e13; - auto ey2 = span->y * itransform->e22 + itransform->e23; - auto dst = &surface->buffer[span->y * surface->stride + span->x]; - for (uint32_t x = static_cast(span->x); x < static_cast(span->x) + span->len; ++x, ++dst) { - auto fX = x * itransform->e11 + ey1; - auto fY = x * itransform->e21 + ey2; - auto rX = static_cast(roundf(fX)); - auto rY = static_cast(roundf(fY)); - if (rX >= w || rY >= h) continue; - uint32_t src; - if (rX == w - 1 || rY == h - 1) src = ALPHA_BLEND(img[rY * image->stride + rX], span->coverage); - else src = ALPHA_BLEND(_interpUpScaler(img, image->stride, h, fX, fY), span->coverage); - *dst = src + ALPHA_BLEND(*dst, _ialpha(src)); - } - } - return true; -} - - static bool _transformedRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* transform, uint32_t opacity) { - Matrix itransform; - mathIdentity(&itransform); - if (transform && !mathInverse(transform, &itransform)) return false; - - auto halfScale = _halfScale(image->scale); - if (_compositing(surface)) { - if (opacity == 255) { - //Transformed - if (mathEqual(image->scale, 1.0f)) { - if (surface->compositor->method == CompositeMethod::AlphaMask) { - return _rasterTransformedMaskedRleRGBAImage(surface, image, &itransform, _alpha); - } else if (surface->compositor->method == CompositeMethod::InvAlphaMask) { - return _rasterTransformedMaskedRleRGBAImage(surface, image, &itransform, _ialpha); - } - //Transformed + Down Scaled - } else if (image->scale < DOWN_SCALE_TOLERANCE) { - if (surface->compositor->method == CompositeMethod::AlphaMask) { - return _rasterDownScaledMaskedRleRGBAImage(surface, image, &itransform, halfScale, _alpha); - } else if (surface->compositor->method == CompositeMethod::InvAlphaMask) { - return _rasterDownScaledMaskedRleRGBAImage(surface, image, &itransform, halfScale, _ialpha); - } - //Transformed + Up Scaled - } else { - if (surface->compositor->method == CompositeMethod::AlphaMask) { - return _rasterUpScaledMaskedRleRGBAImage(surface, image, &itransform, _alpha); - } else if (surface->compositor->method == CompositeMethod::InvAlphaMask) { - return _rasterUpScaledMaskedRleRGBAImage(surface, image, &itransform, _ialpha); - } - } - } else { - //Transformed - if (mathEqual(image->scale, 1.0f)) { - if (surface->compositor->method == CompositeMethod::AlphaMask) { - return _rasterTransformedMaskedTranslucentRleRGBAImage(surface, image, &itransform, opacity, _alpha); - } else if (surface->compositor->method == CompositeMethod::InvAlphaMask) { - return _rasterTransformedMaskedTranslucentRleRGBAImage(surface, image, &itransform, opacity, _ialpha); - } - //Transformed + Down Scaled - } else if (image->scale < DOWN_SCALE_TOLERANCE) { - if (surface->compositor->method == CompositeMethod::AlphaMask) { - return _rasterDownScaledMaskedTranslucentRleRGBAImage(surface, image, &itransform, opacity, halfScale, _alpha); - } else if (surface->compositor->method == CompositeMethod::InvAlphaMask) { - return _rasterDownScaledMaskedTranslucentRleRGBAImage(surface, image, &itransform, opacity, halfScale, _ialpha); - } - //Transformed + Up Scaled - } else { - if (surface->compositor->method == CompositeMethod::AlphaMask) { - return _rasterUpScaledMaskedTranslucentRleRGBAImage(surface, image, &itransform, opacity, _alpha); - } else if (surface->compositor->method == CompositeMethod::InvAlphaMask) { - return _rasterUpScaledMaskedTranslucentRleRGBAImage(surface, image, &itransform, opacity, _ialpha); - } - } + if (surface->compositor->method == CompositeMethod::AlphaMask) { + return _rasterTexmapPolygon(surface, image, transform, nullptr, opacity, _alpha); + } else if (surface->compositor->method == CompositeMethod::InvAlphaMask) { + return _rasterTexmapPolygon(surface, image, transform, nullptr, opacity, _ialpha); } } else { - if (opacity == 255) { - if (mathEqual(image->scale, 1.0f)) return _rasterTransformedRleRGBAImage(surface, image, &itransform); - else if (image->scale < DOWN_SCALE_TOLERANCE) return _rasterDownScaledRleRGBAImage(surface, image, &itransform, halfScale); - else return _rasterUpScaledRleRGBAImage(surface, image, &itransform); - } else { - if (mathEqual(image->scale, 1.0f)) return _rasterTransformedTranslucentRleRGBAImage(surface, image, &itransform, opacity); - else if (image->scale < DOWN_SCALE_TOLERANCE) return _rasterDownScaledTranslucentRleRGBAImage(surface, image, &itransform, opacity, halfScale); - else return _rasterUpScaledTranslucentRleRGBAImage(surface, image, &itransform, opacity); - } + return _rasterTexmapPolygon(surface, image, transform, nullptr, opacity, nullptr); } return false; } @@ -1066,12 +637,12 @@ static bool _transformedRGBAImage(SwSurface* surface, const SwImage* image, cons { if (_compositing(surface)) { if (surface->compositor->method == CompositeMethod::AlphaMask) { - return _rasterTexmapPolygon(surface, image, transform, region, opacity, _alpha); + return _rasterTexmapPolygon(surface, image, transform, ®ion, opacity, _alpha); } else if (surface->compositor->method == CompositeMethod::InvAlphaMask) { - return _rasterTexmapPolygon(surface, image, transform, region, opacity, _ialpha); + return _rasterTexmapPolygon(surface, image, transform, ®ion, opacity, _ialpha); } } else { - return _rasterTexmapPolygon(surface, image, transform, region, opacity, nullptr); + return _rasterTexmapPolygon(surface, image, transform, ®ion, opacity, nullptr); } return false; } @@ -1385,7 +956,6 @@ static bool _rasterRGBAImage(SwSurface* surface, SwImage* image, const Matrix* t if (image->rle) { if (image->direct) return _directRleRGBAImage(surface, image, opacity); else if (image->scaled) return _scaledRleRGBAImage(surface, image, transform, region, opacity); - //OPTIMIZE_ME: Replace with the TexMap Rasterizer else return _transformedRleRGBAImage(surface, image, transform, opacity); //Whole Image } else { diff --git a/src/lib/sw_engine/tvgSwRasterTexmap.h b/src/lib/sw_engine/tvgSwRasterTexmap.h index ca4e303..c7d225d 100644 --- a/src/lib/sw_engine/tvgSwRasterTexmap.h +++ b/src/lib/sw_engine/tvgSwRasterTexmap.h @@ -31,6 +31,7 @@ struct Polygon Vertex vertex[3]; }; + static inline void _swap(float& a, float& b, float& tmp) { tmp = a; @@ -44,7 +45,7 @@ static float dxdya, dxdyb, dudya, dvdya; static float xa, xb, ua, va; -static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox& region, int ystart, int yend, uint32_t opacity, uint32_t (*blendMethod)(uint32_t)) +static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t opacity, uint32_t (*blendMethod)(uint32_t)) { #define TEXMAP_TRANSLUCENT #define TEXMAP_MASKING @@ -54,7 +55,7 @@ static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, } -static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox& region, int ystart, int yend, uint32_t (*blendMethod)(uint32_t)) +static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t (*blendMethod)(uint32_t)) { #define TEXMAP_MASKING #include "tvgSwRasterTexmapInternal.h" @@ -62,7 +63,7 @@ static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, } -static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox& region, int ystart, int yend, uint32_t opacity) +static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t opacity) { #define TEXMAP_TRANSLUCENT #include "tvgSwRasterTexmapInternal.h" @@ -70,14 +71,15 @@ static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, } -static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox& region, int ystart, int yend) +static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd) { #include "tvgSwRasterTexmapInternal.h" } + /* This mapping algorithm is based on Mikael Kalms's. */ -static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const SwBBox& region, uint32_t opacity, Polygon& polygon, uint32_t (*blendMethod)(uint32_t)) +static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const SwBBox* region, uint32_t opacity, Polygon& polygon, uint32_t (*blendMethod)(uint32_t)) { float x[3] = {polygon.vertex[0].pt.x, polygon.vertex[1].pt.x, polygon.vertex[2].pt.x}; float y[3] = {polygon.vertex[0].pt.y, polygon.vertex[1].pt.y, polygon.vertex[2].pt.y}; @@ -139,6 +141,8 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const if (mathEqual(y[0], y[1])) side = x[0] > x[1]; if (mathEqual(y[1], y[2])) side = x[2] > x[1]; + auto regionTop = region ? region->min.y : image->rle->spans->y; //Normal Image or Rle Image? + //Longer edge is on the left side if (!side) { //Calculate slopes along left edge @@ -154,7 +158,7 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const //Draw upper segment if possibly visible if (yi[0] < yi[1]) { - off_y = y[0] < region.min.y ? (region.min.y - y[0]) : 0; + off_y = y[0] < regionTop ? (regionTop - y[0]) : 0; xa += (off_y * dxdya); ua += (off_y * dudya); va += (off_y * dvdya); @@ -175,7 +179,7 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const } //Draw lower segment if possibly visible if (yi[1] < yi[2]) { - off_y = y[1] < region.min.y ? (region.min.y - y[1]) : 0; + off_y = y[1] < regionTop ? (regionTop - y[1]) : 0; if (!upper) { xa += (off_y * dxdya); ua += (off_y * dudya); @@ -201,7 +205,7 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const //Draw upper segment if possibly visible if (yi[0] < yi[1]) { - off_y = y[0] < region.min.y ? (region.min.y - y[0]) : 0; + off_y = y[0] < regionTop ? (regionTop - y[0]) : 0; xb += (off_y *dxdyb); // Set slopes along left edge and perform subpixel pre-stepping @@ -225,7 +229,7 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const } //Draw lower segment if possibly visible if (yi[1] < yi[2]) { - off_y = y[1] < region.min.y ? (region.min.y - y[1]) : 0; + off_y = y[1] < regionTop ? (regionTop - y[1]) : 0; if (!upper) xb += (off_y *dxdyb); // Set slopes along left edge and perform subpixel pre-stepping @@ -259,8 +263,11 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const | / | 3 -- 2 */ -static bool _rasterTexmapPolygon(SwSurface* surface, const SwImage* image, const Matrix* transform, const SwBBox& region, uint32_t opacity, uint32_t (*blendMethod)(uint32_t)) +static bool _rasterTexmapPolygon(SwSurface* surface, const SwImage* image, const Matrix* transform, const SwBBox* region, uint32_t opacity, uint32_t (*blendMethod)(uint32_t)) { + //Exceptions: No dedicated drawing area? + if (!region && image->rle->size == 0) return false; + /* Prepare vertices. shift XY coordinates to match the sub-pixeling technique. */ Vertex vertices[4]; @@ -286,6 +293,6 @@ static bool _rasterTexmapPolygon(SwSurface* surface, const SwImage* image, const polygon.vertex[2] = vertices[3]; _rasterPolygonImage(surface, image, region, opacity, polygon, blendMethod); - + return true; } \ No newline at end of file diff --git a/src/lib/sw_engine/tvgSwRasterTexmapInternal.h b/src/lib/sw_engine/tvgSwRasterTexmapInternal.h index ce234cf..0a93530 100644 --- a/src/lib/sw_engine/tvgSwRasterTexmapInternal.h +++ b/src/lib/sw_engine/tvgSwRasterTexmapInternal.h @@ -33,28 +33,48 @@ int uu = 0; float dx, u, v, iptr; uint32_t* buf; + int regionTop; + int regionBottom; + SwSpan* span = nullptr; //used only when rle based. + #ifdef TEXMAP_MASKING uint32_t* cmp; #endif + if (region) { + regionTop = region->min.y; + regionBottom = region->max.y; + } else { + regionTop = image->rle->spans->y; + regionBottom = image->rle->spans[image->rle->size - 1].y; + } + //Range exception handling - if (ystart >= region.max.y) return; - if (ystart < region.min.y) ystart = region.min.y; - if (yend > region.max.y) yend = region.max.y; + if (yStart >= regionBottom) return; + if (yStart < regionTop) yStart = regionTop; + if (yEnd > regionBottom) yEnd = regionBottom; //Loop through all lines in the segment - y = ystart; + y = yStart; + + if (!region) span = image->rle->spans + (yStart - regionTop); - while (y < yend) { + while (y < yEnd) { x1 = _xa; x2 = _xb; //Range exception handling - if (x1 < region.min.x) x1 = region.min.x; - if (x2 > region.max.x) x2 = region.max.x; - - if ((x2 - x1) < 1) goto next; - if ((x1 >= region.max.x) || (x2 <= region.min.x)) goto next; + if (region) { + if (x1 < region->min.x) x1 = region->min.x; + if (x2 > region->max.x) x2 = region->max.x; + if ((x2 - x1) < 1) goto next; + if ((x1 >= region->max.x) || (x2 <= region->min.x)) goto next; + } else { + if (x1 < span->x) x1 = span->x; + if (x2 > span->x + span->len) x2 = (span->x + span->len); + if ((x2 - x1) < 1) goto next; + if ((x1 >= (span->x + span->len)) || (x2 <= span->x)) goto next; + } //Perform subtexel pre-stepping on UV dx = 1 - (_xa - x1); @@ -105,7 +125,7 @@ #elif defined(TEXMAP_TRANSLUCENT) auto src = ALPHA_BLEND(px, opacity); #else - auto src = px; + auto src = px; #endif *buf = src + ALPHA_BLEND(*buf, _ialpha(src)); ++buf; @@ -123,7 +143,12 @@ next: _ua += _dudya; _va += _dvdya; - y++; + if (span) { + ++span; + y = span->y; + } else { + y++; + } } xa = _xa; xb = _xb; diff --git a/src/lib/sw_engine/tvgSwRenderer.cpp b/src/lib/sw_engine/tvgSwRenderer.cpp index 1c0c3c2..672b938 100644 --- a/src/lib/sw_engine/tvgSwRenderer.cpp +++ b/src/lib/sw_engine/tvgSwRenderer.cpp @@ -111,11 +111,14 @@ struct SwShapeTask : SwTask //Fill if (flags & (RenderUpdateFlag::Gradient | RenderUpdateFlag::Transform | RenderUpdateFlag::Color)) { if (visibleFill) { + auto antiAlias = (flags & RenderUpdateFlag::IgnoreAliasing) ? false : true; + /* We assume that if stroke width is bigger than 2, shape outline below stroke could be full covered by stroke drawing. Thus it turns off antialising in that condition. Also, it shouldn't be dash style. */ - auto antiAlias = (strokeAlpha == 255 && sdata->strokeWidth() > 2 && sdata->strokeDash(nullptr) == 0) ? false : true; + if (strokeAlpha == 255 && sdata->strokeWidth() > 2 && sdata->strokeDash(nullptr) == 0) antiAlias = false; + if (!shapeGenRle(&shape, sdata, antiAlias)) goto err; } if (auto fill = sdata->fill()) { diff --git a/src/lib/tvgPaint.cpp b/src/lib/tvgPaint.cpp index 909e6be..d258dd5 100644 --- a/src/lib/tvgPaint.cpp +++ b/src/lib/tvgPaint.cpp @@ -201,7 +201,7 @@ void* Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pTransf if (compData) { auto target = compData->target; auto method = compData->method; - target->pImpl->ctxFlag = ContextFlag::Invalid; //reset + target->pImpl->ctxFlag &= ~ContextFlag::FastTrack; //reset /* If transform has no rotation factors && ClipPath / AlphaMasking is a simple rectangle, we can avoid regular ClipPath / AlphaMasking sequence but use viewport for performance */ @@ -223,7 +223,15 @@ void* Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pTransf } } if (!compFastTrack) { - tdata = target->pImpl->update(renderer, pTransform, 255, clips, pFlag); + //Bad design!: ignore anti-aliasing if the bitmap image is the source of the clip-path! + auto tempFlag = pFlag; + + if (id == TVG_CLASS_ID_PICTURE) { + auto picture = static_cast(compData->source); + if (picture->data(nullptr, nullptr)) tempFlag |= RenderUpdateFlag::IgnoreAliasing; + } + + tdata = target->pImpl->update(renderer, pTransform, 255, clips, tempFlag); if (method == CompositeMethod::ClipPath) clips.push(tdata); } } @@ -249,6 +257,7 @@ void* Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pTransf return edata; } + bool Paint::Impl::bounds(float* x, float* y, float* w, float* h, bool transformed) { Matrix* m = nullptr; diff --git a/src/lib/tvgPaint.h b/src/lib/tvgPaint.h index 1f36ec3..4003bdb 100644 --- a/src/lib/tvgPaint.h +++ b/src/lib/tvgPaint.h @@ -67,7 +67,8 @@ namespace tvg uint32_t id; uint8_t opacity = 255; - ~Impl() { + ~Impl() + { if (compData) { delete(compData->target); free(compData); diff --git a/src/lib/tvgRender.h b/src/lib/tvgRender.h index 955816e..7621fe2 100644 --- a/src/lib/tvgRender.h +++ b/src/lib/tvgRender.h @@ -28,7 +28,7 @@ namespace tvg { -enum RenderUpdateFlag {None = 0, Path = 1, Color = 2, Gradient = 4, Stroke = 8, Transform = 16, Image = 32, GradientStroke = 64, All = 127}; +enum RenderUpdateFlag {None = 0, Path = 1, Color = 2, Gradient = 4, Stroke = 8, Transform = 16, Image = 32, GradientStroke = 64, All = 255, IgnoreAliasing = 256}; struct Surface { -- 2.7.4 From 5f9376c443a7f4ea0a0f94853dd59db4f4ed28fe Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 14 Dec 2021 19:26:58 +0900 Subject: [PATCH 12/16] sw_engine texmap: implemented fast span-edge anti-aliasing This Anti-Aliasing mechanism is originated from Hermet Park's idea. To understand this AA logic, you can refer this page: www.hermet.pe.kr/122 (hermetpark@gmail.com) @Issue: https://github.com/Samsung/thorvg/issues/161 Change-Id: Ibf9a3d14057a781e09e4ae3d72393aa522a2c71b --- src/examples/PictureJpg.cpp | 4 +- src/examples/PicturePng.cpp | 4 +- src/lib/sw_engine/tvgSwRasterTexmap.h | 354 ++++++++++++++++++++++++-- src/lib/sw_engine/tvgSwRasterTexmapInternal.h | 59 ++--- test/images/test.tvg | Bin 1005124 -> 1005255 bytes 5 files changed, 360 insertions(+), 61 deletions(-) diff --git a/src/examples/PictureJpg.cpp b/src/examples/PictureJpg.cpp index 0dc6d35..853b61e 100644 --- a/src/examples/PictureJpg.cpp +++ b/src/examples/PictureJpg.cpp @@ -31,10 +31,10 @@ void tvgDrawCmds(tvg::Canvas* canvas) { if (!canvas) return; - auto opacity = 51; + auto opacity = 36; //Load jpg file from path - for (int i = 0; i < 5; ++i) { + for (int i = 0; i < 7; ++i) { auto picture = tvg::Picture::gen(); if (picture->load(EXAMPLE_DIR"/test.jpg") != tvg::Result::Success) { cout << "JPG is not supported. Did you enable JPG Loader?" << endl; diff --git a/src/examples/PicturePng.cpp b/src/examples/PicturePng.cpp index 3798ab1..fae0d48 100644 --- a/src/examples/PicturePng.cpp +++ b/src/examples/PicturePng.cpp @@ -38,9 +38,9 @@ void tvgDrawCmds(tvg::Canvas* canvas) canvas->push(move(bg)); //Load png file from path - auto opacity = 51; + auto opacity = 31; - for (int i = 0; i < 5; ++i) { + for (int i = 0; i < 7; ++i) { auto picture = tvg::Picture::gen(); if (picture->load(EXAMPLE_DIR"/test.png") != tvg::Result::Success) { cout << "PNG is not supported. Did you enable PNG Loader?" << endl; diff --git a/src/lib/sw_engine/tvgSwRasterTexmap.h b/src/lib/sw_engine/tvgSwRasterTexmap.h index c7d225d..ece14eb 100644 --- a/src/lib/sw_engine/tvgSwRasterTexmap.h +++ b/src/lib/sw_engine/tvgSwRasterTexmap.h @@ -31,6 +31,19 @@ struct Polygon Vertex vertex[3]; }; +struct AALine +{ + int32_t x[2]; + int32_t coverage[2]; + int32_t length[2]; +}; + +struct AASpans +{ + AALine *lines; + int32_t yStart; + int32_t yEnd; +}; static inline void _swap(float& a, float& b, float& tmp) { @@ -45,7 +58,29 @@ static float dxdya, dxdyb, dudya, dvdya; static float xa, xb, ua, va; -static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t opacity, uint32_t (*blendMethod)(uint32_t)) +//Y Range exception handling +static bool _arrange(const SwImage* image, const SwBBox* region, int& yStart, int& yEnd) +{ + int32_t regionTop, regionBottom; + + if (region) { + regionTop = region->min.y; + regionBottom = region->max.y; + } else { + regionTop = image->rle->spans->y; + regionBottom = image->rle->spans[image->rle->size - 1].y; + } + + if (yStart >= regionBottom) return false; + + if (yStart < regionTop) yStart = regionTop; + if (yEnd > regionBottom) yEnd = regionBottom; + + return true; +} + + +static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t opacity, uint32_t (*blendMethod)(uint32_t), AASpans* aaSpans) { #define TEXMAP_TRANSLUCENT #define TEXMAP_MASKING @@ -55,7 +90,7 @@ static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, } -static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t (*blendMethod)(uint32_t)) +static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t (*blendMethod)(uint32_t), AASpans* aaSpans) { #define TEXMAP_MASKING #include "tvgSwRasterTexmapInternal.h" @@ -63,7 +98,7 @@ static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, } -static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t opacity) +static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, uint32_t opacity, AASpans* aaSpans) { #define TEXMAP_TRANSLUCENT #include "tvgSwRasterTexmapInternal.h" @@ -71,15 +106,14 @@ static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, } -static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd) +static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, const SwBBox* region, int yStart, int yEnd, AASpans* aaSpans) { #include "tvgSwRasterTexmapInternal.h" } - /* This mapping algorithm is based on Mikael Kalms's. */ -static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const SwBBox* region, uint32_t opacity, Polygon& polygon, uint32_t (*blendMethod)(uint32_t)) +static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const SwBBox* region, uint32_t opacity, Polygon& polygon, uint32_t (*blendMethod)(uint32_t), AASpans* aaSpans) { float x[3] = {polygon.vertex[0].pt.x, polygon.vertex[1].pt.x, polygon.vertex[2].pt.x}; float y[3] = {polygon.vertex[0].pt.y, polygon.vertex[1].pt.y, polygon.vertex[2].pt.y}; @@ -168,11 +202,11 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const xb = x[0] + dy * dxdyb + (off_y * dxdyb); if (blendMethod) { - if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], blendMethod); - else _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], opacity, blendMethod); + if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], blendMethod, aaSpans); + else _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], opacity, blendMethod, aaSpans); } else { - if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1]); - else _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], opacity); + if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], aaSpans); + else _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], opacity, aaSpans); } upper = true; @@ -189,11 +223,11 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const dxdyb = dxdy[2]; xb = x[1] + (1 - (y[1] - yi[1])) * dxdyb + (off_y * dxdyb); if (blendMethod) { - if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], blendMethod); - else _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], opacity, blendMethod); + if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], blendMethod, aaSpans); + else _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], opacity, blendMethod, aaSpans); } else { - if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2]); - else _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], opacity); + if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], aaSpans); + else _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], opacity, aaSpans); } } //Longer edge is on the right side @@ -218,11 +252,11 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const va = v[0] + dy * dvdya + (off_y * dvdya); if (blendMethod) { - if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], blendMethod); - else _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], opacity, blendMethod); + if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], blendMethod, aaSpans); + else _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], opacity, blendMethod, aaSpans); } else { - if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1]); - else _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], opacity); + if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], aaSpans); + else _rasterPolygonImageSegment(surface, image, region, yi[0], yi[1], opacity, aaSpans); } upper = true; @@ -242,17 +276,284 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const va = v[1] + dy * dvdya + (off_y * dvdya); if (blendMethod) { - if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], blendMethod); - else _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], opacity, blendMethod); + if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], blendMethod, aaSpans); + else _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], opacity, blendMethod, aaSpans); } else { - if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2]); - else _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], opacity); + if (opacity == 255) _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], aaSpans); + else _rasterPolygonImageSegment(surface, image, region, yi[1], yi[2], opacity, aaSpans); } } } } +static AASpans* _AASpans(const Vertex* vertices, const SwImage* image, const SwBBox* region) +{ + //Initialize Y range + float ys = FLT_MAX, ye = -1.0f; + + for (int i = 0; i < 4; i++) { + if (vertices[i].pt.y < ys) ys = vertices[i].pt.y; + if (vertices[i].pt.y > ye) ye = vertices[i].pt.y; + } + + auto yStart = static_cast(ys); + auto yEnd = static_cast(ye); + + if (!_arrange(image, region, yStart, yEnd)) return nullptr; + + auto aaSpans = static_cast(malloc(sizeof(AASpans))); + aaSpans->yStart = yStart; + aaSpans->yEnd = yEnd; + + //Initialize X range + auto height = yEnd - yStart; + + aaSpans->lines = static_cast(calloc(height, sizeof(AALine))); + + for (int32_t i = 0; i < height; i++) { + aaSpans->lines[i].x[0] = INT32_MAX; + aaSpans->lines[i].x[1] = INT32_MIN; + } + return aaSpans; +} + + +static void _calcIrregularCoverage(AALine* lines, int32_t eidx, int32_t y, int32_t diagonal, int32_t edgeDist, bool reverse) +{ + if (eidx == 1) reverse = !reverse; + int32_t coverage = (255 / (diagonal + 2)); + int32_t tmp; + for (int32_t ry = 0; ry < (diagonal + 2); ry++) { + tmp = y - ry - edgeDist; + if (tmp < 0) return; + lines[tmp].length[eidx] = 1; + if (reverse) lines[tmp].coverage[eidx] = 255 - (coverage * ry); + else lines[tmp].coverage[eidx] = (coverage * ry); + } +} + + +static void _calcVertCoverage(AALine *lines, int32_t eidx, int32_t y, int32_t rewind, bool reverse) +{ + if (eidx == 1) reverse = !reverse; + int32_t coverage = (255 / (rewind + 1)); + int32_t tmp; + for (int ry = 1; ry < (rewind + 1); ry++) { + tmp = y - ry; + if (tmp < 0) return; + lines[tmp].length[eidx] = 1; + if (reverse) lines[tmp].coverage[eidx] = (255 - (coverage * ry)); + else lines[tmp].coverage[eidx] = (coverage * ry); + } +} + + +static void _calcHorizCoverage(AALine *lines, int32_t eidx, int32_t y, int32_t x, int32_t x2) +{ + if (lines[y].length[eidx] < abs(x - x2)) { + lines[y].length[eidx] = abs(x - x2); + lines[y].coverage[eidx] = (255 / (lines[y].length[eidx] + 1)); + } +} + + +/* + * This Anti-Aliasing mechanism is originated from Hermet Park's idea. + * To understand this AA logic, you can refer this page: + * www.hermet.pe.kr/122 (hermetpark@gmail.com) +*/ +static void _calcAAEdge(AASpans *aaSpans, int32_t eidx) +{ +//Previous edge direction: +#define DirOutHor 0x0011 +#define DirOutVer 0x0001 +#define DirInHor 0x0010 +#define DirInVer 0x0000 +#define DirNone 0x1000 + +#define PUSH_VERTEX() \ + do { \ + pEdge.x = lines[y].x[eidx]; \ + pEdge.y = y; \ + ptx[0] = tx[0]; \ + ptx[1] = tx[1]; \ + } while (0) + + int32_t y = 0; + SwPoint pEdge = {-1, -1}; //previous edge point + SwPoint edgeDiff = {0, 0}; //temporary used for point distance + + /* store bigger to tx[0] between prev and current edge's x positions. */ + int32_t tx[2] = {0, 0}; + /* back up prev tx values */ + int32_t ptx[2] = {0, 0}; + int32_t diagonal = 0; //straight diagonal pixels count + + auto yStart = aaSpans->yStart; + auto yEnd = aaSpans->yEnd; + auto lines = aaSpans->lines; + + int32_t prevDir = DirNone; + int32_t curDir = DirNone; + + yEnd -= yStart; + + //Start Edge + if (y < yEnd) { + pEdge.x = lines[y].x[eidx]; + pEdge.y = y; + } + + //Calculates AA Edges + for (y++; y < yEnd; y++) { + //Ready tx + if (eidx == 0) { + tx[0] = pEdge.x; + tx[1] = lines[y].x[0]; + } else { + tx[0] = lines[y].x[1]; + tx[1] = pEdge.x; + } + edgeDiff.x = (tx[0] - tx[1]); + edgeDiff.y = (y - pEdge.y); + + //Confirm current edge direction + if (edgeDiff.x > 0) { + if (edgeDiff.y == 1) curDir = DirOutHor; + else curDir = DirOutVer; + } else if (edgeDiff.x < 0) { + if (edgeDiff.y == 1) curDir = DirInHor; + else curDir = DirInVer; + } else curDir = DirNone; + + //straight diagonal increase + if ((curDir == prevDir) && (y < yEnd)) { + if ((abs(edgeDiff.x) == 1) && (edgeDiff.y == 1)) { + ++diagonal; + PUSH_VERTEX(); + continue; + } + } + + switch (curDir) { + case DirOutHor: { + _calcHorizCoverage(lines, eidx, y, tx[0], tx[1]); + if (diagonal > 0) { + _calcIrregularCoverage(lines, eidx, y, diagonal, 0, true); + diagonal = 0; + } + /* Increment direction is changed: Outside Vertical -> Outside Horizontal */ + if (prevDir == DirOutVer) _calcHorizCoverage(lines, eidx, pEdge.y, ptx[0], ptx[1]); + + //Trick, but fine-tunning! + if (y == 1) _calcHorizCoverage(lines, eidx, pEdge.y, tx[0], tx[1]); + PUSH_VERTEX(); + } + break; + case DirOutVer: { + _calcVertCoverage(lines, eidx, y, edgeDiff.y, true); + if (diagonal > 0) { + _calcIrregularCoverage(lines, eidx, y, diagonal, edgeDiff.y, false); + diagonal = 0; + } + /* Increment direction is changed: Outside Horizontal -> Outside Vertical */ + if (prevDir == DirOutHor) _calcHorizCoverage(lines, eidx, pEdge.y, ptx[0], ptx[1]); + PUSH_VERTEX(); + } + break; + case DirInHor: { + _calcHorizCoverage(lines, eidx, (y - 1), tx[0], tx[1]); + if (diagonal > 0) { + _calcIrregularCoverage(lines, eidx, y, diagonal, 0, false); + diagonal = 0; + } + /* Increment direction is changed: Outside Horizontal -> Inside Horizontal */ + if (prevDir == DirOutHor) _calcHorizCoverage(lines, eidx, pEdge.y, ptx[0], ptx[1]); + PUSH_VERTEX(); + } + break; + case DirInVer: { + _calcVertCoverage(lines, eidx, y, edgeDiff.y, false); + if (prevDir == DirOutHor) edgeDiff.y -= 1; //Weird, fine tuning????????????????????? + if (diagonal > 0) { + _calcIrregularCoverage(lines, eidx, y, diagonal, edgeDiff.y, true); + diagonal = 0; + } + /* Increment direction is changed: Outside Horizontal -> Inside Vertical */ + if (prevDir == DirOutHor) _calcHorizCoverage(lines, eidx, pEdge.y, ptx[0], ptx[1]); + PUSH_VERTEX(); + } + break; + } + if (curDir != DirNone) prevDir = curDir; + } + + //leftovers...? + if ((edgeDiff.y == 1) && (edgeDiff.x != 0)) { + if (y >= yEnd) y = (yEnd - 1); + _calcHorizCoverage(lines, eidx, y - 1, ptx[0], ptx[1]); + _calcHorizCoverage(lines, eidx, y, tx[0], tx[1]); + } else { + ++y; + if (y > yEnd) y = yEnd; + _calcVertCoverage(lines, eidx, y, (edgeDiff.y + 1), (prevDir & 0x00000001)); + } +} + + +static bool _apply(SwSurface* surface, AASpans* aaSpans) +{ + auto y = aaSpans->yStart; + uint32_t pixel; + uint32_t* dst; + int32_t pos; + + //left side + _calcAAEdge(aaSpans, 0); + //right side + _calcAAEdge(aaSpans, 1); + + while (y < aaSpans->yEnd) { + auto line = &aaSpans->lines[y - aaSpans->yStart]; + auto width = line->x[1] - line->x[0]; + if (width > 0) { + auto offset = y * surface->stride; + + //Left edge + dst = surface->buffer + (offset + line->x[0]); + if (line->x[0] > 1) pixel = *(dst - 1); + else pixel = *dst; + + pos = 1; + while (pos <= line->length[0]) { + *dst = INTERPOLATE((line->coverage[0] * pos), *dst, pixel); + ++dst; + ++pos; + } + + //Right edge + dst = surface->buffer + (offset + line->x[1] - 1); + if (line->x[1] < (int32_t)(surface->w - 1)) pixel = *(dst + 1); + else pixel = *dst; + + pos = width; + while ((int32_t)(width - line->length[1]) < pos) { + *dst = INTERPOLATE(255 - (line->coverage[1] * (line->length[1] - (width - pos))), *dst, pixel); + --dst; + --pos; + } + } + y++; + } + + free(aaSpans->lines); + free(aaSpans); + + return true; +} + + /* 2 triangles constructs 1 mesh. below figure illustrates vert[4] index info. @@ -278,6 +579,9 @@ static bool _rasterTexmapPolygon(SwSurface* surface, const SwImage* image, const for (int i = 0; i < 4; i++) mathMultiply(&vertices[i].pt, transform); + auto aaSpans = _AASpans(vertices, image, region); + if (!aaSpans) return true; + Polygon polygon; //Draw the first polygon @@ -285,14 +589,14 @@ static bool _rasterTexmapPolygon(SwSurface* surface, const SwImage* image, const polygon.vertex[1] = vertices[1]; polygon.vertex[2] = vertices[3]; - _rasterPolygonImage(surface, image, region, opacity, polygon, blendMethod); + _rasterPolygonImage(surface, image, region, opacity, polygon, blendMethod, aaSpans); //Draw the second polygon polygon.vertex[0] = vertices[1]; polygon.vertex[1] = vertices[2]; polygon.vertex[2] = vertices[3]; - _rasterPolygonImage(surface, image, region, opacity, polygon, blendMethod); + _rasterPolygonImage(surface, image, region, opacity, polygon, blendMethod, aaSpans); - return true; + return _apply(surface, aaSpans); } \ No newline at end of file diff --git a/src/lib/sw_engine/tvgSwRasterTexmapInternal.h b/src/lib/sw_engine/tvgSwRasterTexmapInternal.h index 0a93530..f7203e1 100644 --- a/src/lib/sw_engine/tvgSwRasterTexmapInternal.h +++ b/src/lib/sw_engine/tvgSwRasterTexmapInternal.h @@ -25,56 +25,51 @@ float _xa = xa, _xb = xb, _ua = ua, _va = va; auto sbuf = image->data; auto dbuf = surface->buffer; - int sw = static_cast(image->stride); - int sh = image->h; - int dw = surface->stride; - int x1, x2, x, y, ar, ab, iru, irv, px; - int vv = 0; - int uu = 0; + int32_t sw = static_cast(image->stride); + int32_t sh = image->h; + int32_t dw = surface->stride; + int32_t x1, x2, x, y, ar, ab, iru, irv, px, ay; + int32_t vv = 0, uu = 0; + int32_t minx = 0, maxx = 0; float dx, u, v, iptr; uint32_t* buf; - int regionTop; - int regionBottom; SwSpan* span = nullptr; //used only when rle based. #ifdef TEXMAP_MASKING uint32_t* cmp; #endif - if (region) { - regionTop = region->min.y; - regionBottom = region->max.y; - } else { - regionTop = image->rle->spans->y; - regionBottom = image->rle->spans[image->rle->size - 1].y; - } - - //Range exception handling - if (yStart >= regionBottom) return; - if (yStart < regionTop) yStart = regionTop; - if (yEnd > regionBottom) yEnd = regionBottom; + if (!_arrange(image, region, yStart, yEnd)) return; //Loop through all lines in the segment y = yStart; - if (!region) span = image->rle->spans + (yStart - regionTop); + if (region) { + minx = region->min.x; + maxx = region->max.x; + } else { + span = image->rle->spans + (yStart - image->rle->spans->y); + } while (y < yEnd) { x1 = _xa; x2 = _xb; - //Range exception handling - if (region) { - if (x1 < region->min.x) x1 = region->min.x; - if (x2 > region->max.x) x2 = region->max.x; - if ((x2 - x1) < 1) goto next; - if ((x1 >= region->max.x) || (x2 <= region->min.x)) goto next; - } else { - if (x1 < span->x) x1 = span->x; - if (x2 > span->x + span->len) x2 = (span->x + span->len); - if ((x2 - x1) < 1) goto next; - if ((x1 >= (span->x + span->len)) || (x2 <= span->x)) goto next; + if (!region) { + minx = span->x; + maxx = span->x + span->len; } + + if (x1 < minx) x1 = minx; + if (x2 > maxx) x2 = maxx; + + //Anti-Aliasing frames + ay = y - aaSpans->yStart; + if (aaSpans->lines[ay].x[0] > x1) aaSpans->lines[ay].x[0] = x1; + if (aaSpans->lines[ay].x[1] < x2) aaSpans->lines[ay].x[1] = x2; + + //Range exception + if ((x2 - x1) < 1 || (x1 >= maxx) || (x2 <= minx)) goto next; //Perform subtexel pre-stepping on UV dx = 1 - (_xa - x1); diff --git a/test/images/test.tvg b/test/images/test.tvg index 9a989b79f74f3650c8b1e06e9e6080168bd6c60d..68a79851abe65fe6f894c2abb4fb4f513cb52b79 100644 GIT binary patch literal 1005255 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