From 2f789d0ca3b5c23b437e55896214b482d28b95e5 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Sat, 23 Oct 2021 21:31:02 +0200 Subject: [PATCH] sw_engine: rasterization region edited in the case of fast tracking Since no antialiasing is applied for the fastTracking cases, the shape's rasterization region needs to be edited. To establish the rastered bbox, the rounding is performed before the bbox corners are casted to the SwCoords. --- src/lib/sw_engine/tvgSwShape.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/lib/sw_engine/tvgSwShape.cpp b/src/lib/sw_engine/tvgSwShape.cpp index 08cd694..0d93b55 100644 --- a/src/lib/sw_engine/tvgSwShape.cpp +++ b/src/lib/sw_engine/tvgSwShape.cpp @@ -22,6 +22,7 @@ #include "tvgSwCommon.h" #include "tvgBezier.h" #include +#include /************************************************************************/ /* Internal Class Implementation */ @@ -508,8 +509,33 @@ bool shapeGenRle(SwShape* shape, TVG_UNUSED const Shape* sdata, bool antiAlias, //if (shape.outline->opened) return true; //Case A: Fast Track Rectangle Drawing - if (!hasComposite && (shape->rect = _fastTrack(shape->outline))) return true; - //Case B: Normale Shape RLE Drawing + if (!hasComposite && (shape->rect = _fastTrack(shape->outline))) { + //Since no antialiasing is applied in the Fast Track case, + //the rasterization region has to be modified + auto corner1 = shape->outline->pts; + auto corner3 = shape->outline->pts + 2; + + auto xMin = corner1->x; + auto xMax = corner3->x; + if (xMin > xMax) { + xMax = xMin; + xMin = corner3->x; + } + auto yMin = corner1->y; + auto yMax = corner3->y; + if (yMin > yMax) { + yMax = yMin; + yMin = corner3->y; + } + + shape->bbox.min.x = static_cast(round(xMin / 64.0f)); + shape->bbox.max.x = static_cast(round(xMax / 64.0f)); + shape->bbox.min.y = static_cast(round(yMin / 64.0f)); + shape->bbox.max.y = static_cast(round(yMax / 64.0f)); + + return true; + } + //Case B: Normal Shape RLE Drawing if ((shape->rle = rleRender(shape->rle, shape->outline, shape->bbox, antiAlias))) return true; return false; -- 2.7.4