Hermet Park [Fri, 17 Dec 2021 08:23:55 +0000 (17:23 +0900)]
sw_engine raster: fix a crash at the texmap clipping.
Handle correctly duplicated spans from the multiple y span data.
Previous logic only expected the one single y span data from the rle.
However rle might have multiple y span data if the anti-aliasing is applied.
This patch also removed the bad design of the common engine
which handles the anti-alising option to ignore the anti-aliasing rle generation.
Just realized, it's difficult to control that condition due to scene-composition.
Change-Id: I0caab0e22b0bb88bf0c7ed25b58229c216579086
Hermet Park [Fri, 17 Dec 2021 03:43:49 +0000 (12:43 +0900)]
sw_engine raster: ++safety of the scaled image rasterization
Prevent out of buffer boundary access.
@Issues: https://github.com/Samsung/thorvg/pull/1119
Change-Id: I9d007b00f4193448fe2fd05194621190144ad7ce
Hermet Park [Fri, 22 Oct 2021 12:04:15 +0000 (21:04 +0900)]
common: introduce iterator
+++
auto picture = tvg::Picture::gen();
auto func = [](const tvg::Paint* paint, const tvg::Paint* parent, bool hasChildren) -> int
{
if (paint->identifier() == Shape::identifier())
//TODO: override properties.
//return true to continue, return false to stop.
return true;
};
picture = tvg::Iteratorv::iterate(move(picture), func);
Change-Id: I2ea956cb46b20547239686969c2e403e23fc8943
Mira Grudzinska [Thu, 16 Dec 2021 19:13:36 +0000 (20:13 +0100)]
capi: missing arg description added
Change-Id: If9b6a81ac27a0f7f7b52f791e0c6205bf014d9df
Hermet Park [Tue, 14 Dec 2021 10:26:58 +0000 (19:26 +0900)]
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
Hermet Park [Fri, 26 Nov 2021 03:10:23 +0000 (12:10 +0900)]
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
Chun [Mon, 14 Nov 2022 01:23:09 +0000 (01:23 +0000)]
Revert "svg_loader: the preserveAspectRatio attrib handled"
This reverts commit
2111930048843b2373907f4e9813f97a3b2d6206.
Change-Id: I608f73c16e8bb9c6caf2a3fb40254e6eca056dcf
Mira Grudzinska [Mon, 22 Aug 2022 13:53:37 +0000 (15:53 +0200)]
svg_loader: the preserveAspectRatio attrib handled
The preserveAspectRatio attribute handled according
to the svg standard.
Change-Id: Ie7292ba47341994cf703b3634016c267292a22d2
jykeon [Wed, 19 Jan 2022 08:16:29 +0000 (17:16 +0900)]
bump up 0.6.7
Change-Id: Ib07f04d7c74b5f3be2ec6aaf6b76e3a88f2dbe2f
Signed-off-by: jykeon <jykeon@samsung.com>
Michal Maciola [Fri, 14 Jan 2022 13:19:55 +0000 (14:19 +0100)]
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
Michal Maciola [Fri, 14 Jan 2022 13:06:39 +0000 (14:06 +0100)]
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
jykeon [Fri, 7 Jan 2022 01:41:57 +0000 (10:41 +0900)]
bump up 0.6.6
Change-Id: I1106ae0d6d5623ca397232964f06bc99aeaadd42
Signed-off-by: jykeon <jykeon@samsung.com>
Hermet Park [Thu, 6 Jan 2022 03:32:16 +0000 (12:32 +0900)]
sw_engine raster: fix a regression bug.
Picture example were broken by
90fa26b7bb75cb938290170882e65da8d9fc5d9e
the correct condition must be like this change.
Change-Id: Ie3af07bca9d44872073b111874c60575fa4b38f4
JunsuChoi [Wed, 5 Jan 2022 01:42:41 +0000 (17:42 -0800)]
sw_engine SwRaster: Initialize uninitialized transform value
Change-Id: I7aac462c6d6e481655c35a10b237970de7dbea76
jykeon [Mon, 27 Dec 2021 01:36:22 +0000 (10:36 +0900)]
bump up 0.6.5
Change-Id: I8431f13558ce30db255650ab2f52f794729e7c57
Signed-off-by: jykeon <jykeon@samsung.com>
JunsuChoi [Wed, 22 Dec 2021 02:30:51 +0000 (18:30 -0800)]
capi: rename tvg_paint_get_bounds
Apply the changed code of 9db4a49
Change-Id: I101ec1b5ac3876a0cba76f4da97e953d0894e8f0
JunsuChoi [Wed, 15 Dec 2021 04:29:01 +0000 (20:29 -0800)]
sw_engine SwShape: Fix coding style
JunsuChoi [Wed, 15 Dec 2021 04:19:14 +0000 (20:19 -0800)]
sw_engine SwShape: Prevent null access
strokeOutline returned strokeExportOutline() is the address of mpool->strokeOutline[idx].
Assuming this value is null, mpoolRetStrokeOutline on line 617 will access mpool->strokeOutline[idx].
Logically, the logic of the mpool* functions does not occur in this case.
Hermet Park [Tue, 14 Dec 2021 07:33:17 +0000 (16:33 +0900)]
png_loaders: fix the wrong premultiplying operations.
It should not modify the alpha channel value while premultiplying
that turned out with the wrong visual result.
@Issue: https://github.com/Samsung/thorvg/issues/655
Hermet Park [Mon, 13 Dec 2021 11:34:43 +0000 (20:34 +0900)]
common paint: code refactoring
Grouping the composite data to add source paint necessarily.
this refactoring is a prerequisite job for the texmap anti-aliasing.
Hermet Park [Mon, 13 Dec 2021 10:26:56 +0000 (19:26 +0900)]
common picture: remove unused variable.
Hermet Park [Mon, 13 Dec 2021 09:56:25 +0000 (18:56 +0900)]
common: revise the identifier() implementation
Migrate the id property to the base class internals
so that pimpl classes could access the data easier.
This is a sort of prerequisite change for the coming texmap anti-aliasing.
jykeon [Tue, 14 Dec 2021 07:09:26 +0000 (16:09 +0900)]
bump up version 0.6.4
Change-Id: I2f1e645ab71d37430503341c4b16d32e053331f1
Signed-off-by: jykeon <jykeon@samsung.com>
Hermet Park [Mon, 6 Dec 2021 04:37:10 +0000 (13:37 +0900)]
capi: removed tizen only code.
These APIs have been removed in thorvg,
Nowhere used in tizen anymore.
Change-Id: I21940cdc982e226d4f8e2e6fdc1487ec3a434bbd
Hermet Park [Wed, 1 Dec 2021 05:16:01 +0000 (14:16 +0900)]
sw_engine image: support non-premultiplied alpha images.
Previously, translucent png images are not displayed properly
due to alpha channels premultiplication.
This patch implements that missing part to support it properly
by introducing the Surface data between canvas engine & rasterizer
@Issue: https://github.com/Samsung/thorvg/issues/655
Change-Id: I42d2b8d6854517f61cdc0eaf3ae105a426e0c61b
Hermet Park [Wed, 1 Dec 2021 05:31:04 +0000 (14:31 +0900)]
sw_engine raster: remove unnecessary functions.
These alpha/inverse alpha blender table is not useful so far,
we remove them since it just decrease the performance by by-pass addressing.
JunsuChoi [Wed, 1 Dec 2021 06:07:54 +0000 (15:07 +0900)]
sw_engine SwCommon: Change spans's x,y value type
The x and y of spans cannot be negative
because they are specified as coordinates inside the buffer.
Change the type to fix warnings and potential problems
that occur in conversion between int16_t and uint32_t.
JunsuChoi [Tue, 30 Nov 2021 06:31:12 +0000 (15:31 +0900)]
sw_engine SWRaster: Explicitly declare type cast to uint32_t
JunsuChoi [Tue, 30 Nov 2021 03:56:46 +0000 (12:56 +0900)]
sw_engine SWRaster: Initialize uninitialized local variable
jykeon [Tue, 30 Nov 2021 04:40:01 +0000 (13:40 +0900)]
bump up version 0.6.3
Change-Id: I7ee8ad468f02ac8b69ce3baf0d7918a5b9e6879a
Signed-off-by: jykeon <jykeon@samsung.com>
Hermet Park [Mon, 29 Nov 2021 02:38:29 +0000 (11:38 +0900)]
sw_engine raster: fix the regression bug of the image simple scaling rendering.
Gave up the optimization this logic.
It brings too many digressed code, not good for maintenance...
Change-Id: I6adafcba58e58b0f6d389159a92b7dfd2ea68444
Hermet Park [Fri, 26 Nov 2021 11:05:48 +0000 (20:05 +0900)]
sw_engine texmap: remove unnecessary conditions.
remove exceptional handling for the performance.
Mira Grudzinska [Wed, 24 Nov 2021 22:07:35 +0000 (23:07 +0100)]
svg_loader: a function to establish shapes boundries without a stroke introduced
To handle the objectBoundingBox units, the shape's boundaries have to be known.
According to the SVG standard, a stroke shouldn't be taken into account. Since
the bounds() api uses the shape's stroke information, a new function is introduced,
that compensates this and returns boundaries without any strokes.
Mira Grudzinska [Wed, 24 Nov 2021 20:57:40 +0000 (21:57 +0100)]
svg_loader: struct used to pass 1 args instead of 4 of them
The Box struct is introduced to replace the four functions
args: vx, vy, vw, vh, so all of them can be passed at once.
Hermet Park [Fri, 26 Nov 2021 08:14:44 +0000 (17:14 +0900)]
sw_engine raster: fix the texmap regression bug.
Wrong inline function with C-preprocessing doesn't work at all...
Correct them with including the separate files instead.
Hermet Park [Fri, 26 Nov 2021 08:21:27 +0000 (17:21 +0900)]
Revert "sw_engine raster: code refactoring."
This reverts commit
860068301a7992f375a74a1f6b95e96e3bb3eb80.
found a regression bug. this macro doesn't work actually.
Change-Id: Id3c734ed8bae10451227ecf172c4e47bc06b6753
Hermet Park [Thu, 25 Nov 2021 08:25:25 +0000 (17:25 +0900)]
sw_engine: code refactoring
unified the two color interpolate methods.
Change-Id: I7ff67af280fa78b11d3b083aec790ac043387b1a
Hermet Park [Thu, 25 Nov 2021 09:31:00 +0000 (18:31 +0900)]
sw_engine texmap: code refactoring.
Unrolled the blending stages by applying macro magics.
I know this is a bit bad for code readibility
but good for the performance and the optimal LOC.
Hermet Park [Thu, 18 Nov 2021 02:03:29 +0000 (11:03 +0900)]
sw_engine texmap: introduced texture mapping polygon drawing.
Introduced the texture-mapping algorithm for the image-scaler.
With this approach, we can support any arbitrary forms of the transformed shapes
while appling the scale factors - x/y separately.
Also this is more efficient when the transformed image is far from the rectangular form
because our current normal image rasterizer based on the given drawing region whereas
our new approach is span-based.
Thus, we applied this mechanism only for the transformed images.
Hermet Park [Thu, 25 Nov 2021 06:04:56 +0000 (15:04 +0900)]
sw_engien renderer: ++safety
+exceptional handling for the drawing region.
Hermet Park [Thu, 25 Nov 2021 05:48:16 +0000 (14:48 +0900)]
sw_engine raster: fix a regression bug.
mistaken by
8ef31f6cd031b1369ec52e18cc0c97b6efaca6ab
Hermet Park [Thu, 25 Nov 2021 02:47:26 +0000 (11:47 +0900)]
sw_engine raster: fix compiler warnings.
popped up unused-functions when simd enabled.
jykeon [Thu, 25 Nov 2021 01:13:51 +0000 (10:13 +0900)]
bump up version 0.6.2
Change-Id: I3f732e458c85133e3b5d17bd2ca19b5f5cf17254
Signed-off-by: jykeon <jykeon@samsung.com>
Hermet Park [Wed, 24 Nov 2021 11:51:05 +0000 (20:51 +0900)]
sw_engine raster: fix a mistake by the previous hot refactoring.
Hermet Park [Wed, 24 Nov 2021 11:25:47 +0000 (20:25 +0900)]
sw_engine raster: code refactoring
+neat and clean code
Hermet Park [Wed, 24 Nov 2021 10:26:10 +0000 (19:26 +0900)]
sw_engine image: improvement sequeqnce of the transformed rle rgba image drawing.
implement composition by translucent / opaque.
yet this transformed rle rgba image drawing is on the enhancement stage.
Hermet Park [Wed, 24 Nov 2021 10:02:07 +0000 (19:02 +0900)]
sw_engine image: complete sequeqnce of the scaled rgba rle image drawing.
implement composition by translucent / opaque
Hermet Park [Wed, 24 Nov 2021 09:47:30 +0000 (18:47 +0900)]
sw_engine image: improvement sequeqnce of the direct rgba rle image drawing.
implement composition by translucent / opaque.
+ correct compositor stride reference.
Hermet Park [Wed, 24 Nov 2021 09:28:13 +0000 (18:28 +0900)]
sw_engine image: improvement sequeqnce of the transformed rgba image drawing.
implement composition by translucent / opaque.
yet this transformed rgba image drawing is on the enhancement stage.
Hermet Park [Wed, 24 Nov 2021 08:47:27 +0000 (17:47 +0900)]
sw_engine image: complete sequeqnce of the scaled rgb image drawing.
implement composition by translucent / opaque.
Hermet Park [Wed, 24 Nov 2021 08:29:39 +0000 (17:29 +0900)]
sw_engine image: complete sequeqnce of the direct rgb image drawing.
implement composition by translucent / opaque.
Hermet Park [Wed, 24 Nov 2021 06:48:47 +0000 (15:48 +0900)]
sw_engine image: refactoring before further development.
separate internal functions per context
and keep the coding convention.
Hermet Park [Wed, 24 Nov 2021 06:58:49 +0000 (15:58 +0900)]
Update CONTRIBUTING.md
Hermet Park [Tue, 23 Nov 2021 09:29:00 +0000 (18:29 +0900)]
sw_engine image: support separate logics for scaled rle rgba image
+ scaled rle rgba image
+ scaled masked rle rgba image
+ scaled translucent rle rga image
Mira Grudzinska [Tue, 23 Nov 2021 18:56:35 +0000 (19:56 +0100)]
common: nothing was rendered after an empty masked node came across
The problem was observed for empty masked scenes (except the fastTrack
cases). Solved by imimediate returning from the func without passing 'false'
as its result.
Hermet Park [Tue, 23 Nov 2021 07:16:09 +0000 (16:16 +0900)]
examples: replaced png resource to verify alpha channel.
alpha blending looks a bit awkward.. need to fix it.
Hermet Park [Tue, 23 Nov 2021 06:19:50 +0000 (15:19 +0900)]
sw_engine image: apply rgba blending.
rgba requires the default blending.
JunsuChoi [Tue, 23 Nov 2021 05:06:41 +0000 (14:06 +0900)]
infra stylebot: Delete existing comments
In order to avoid duplication of the already created comment,
already created results will be deleted.
Hermet Park [Tue, 23 Nov 2021 03:14:31 +0000 (12:14 +0900)]
sw_engine image: code refactoring
Clarify image sequences by renaming & adding TODO comments.
Hermet Park [Fri, 19 Nov 2021 04:46:25 +0000 (13:46 +0900)]
sw_engine image: introduced scaled image raster logics.
These raster functions are accelerated only for the scaled images.
(no rotation, skrewed)
Hermet Park [Mon, 22 Nov 2021 08:40:06 +0000 (17:40 +0900)]
examples: remove boundary samples.
Removed these tests from the example since it's not so proper showcases
for user scenaro.
Hermet Park [Mon, 22 Nov 2021 03:31:23 +0000 (12:31 +0900)]
common paint: fix the wrong fast track logic.
There was a missing sorting between the left-top & right-bottom corner.
that results in the negative values of the viewport...
Now fixed it.
+ refactored to use math functions...
+ still it's a buggy, sometimes no draw at 90' in stress. don't know reason. :(
JunsuChoi [Mon, 22 Nov 2021 07:09:54 +0000 (16:09 +0900)]
tvg_saver TvgBinInterpreter: prevent misaligned memory access
When parsing a binary stored as a char type,
interpreter can access the misaligned memory while accessing it with a pointer.
To prevent that, pass the array copied to memcpy as tvg Object.
JunsuChoi [Mon, 22 Nov 2021 03:59:43 +0000 (12:59 +0900)]
test capiSwCanvas: remove a invalid test case.
This test depends on the machine environment.
it's not guaranteed the same result so we remove it.
jykeon [Wed, 24 Nov 2021 00:36:10 +0000 (09:36 +0900)]
bump up version 0.6.1
Change-Id: Iecd88582c2ff6ee095eae3b83f083e32063c8124
Signed-off-by: jykeon <jykeon@samsung.com>
Hermet Park [Fri, 19 Nov 2021 11:16:06 +0000 (20:16 +0900)]
common paint: fix a typo.
jykeon [Fri, 19 Nov 2021 07:18:30 +0000 (16:18 +0900)]
svg_loader: Add nullptr check.
Signed-off-by: jykeon <jykeon@samsung.com>
Hermet Park [Fri, 19 Nov 2021 07:11:08 +0000 (16:11 +0900)]
example stress: adjusted loading count.
This example loads all the svgs even if they are out of the screen space.
Hermet Park [Fri, 19 Nov 2021 04:22:32 +0000 (13:22 +0900)]
sw_engine image: code refactoring
Image raster sequence is getting quite complex...
Clean up before further image optimization.
Hermet Park [Fri, 19 Nov 2021 04:32:13 +0000 (13:32 +0900)]
example stroke: updated the sample
Hermet Park [Fri, 19 Nov 2021 04:22:32 +0000 (13:22 +0900)]
sw_engine image: code refactoring
+++
Hermet Park [Fri, 19 Nov 2021 04:11:21 +0000 (13:11 +0900)]
sw_engine raster: clarify the internal function name.
"Solid" in this raster context is "Opaque" actually.
So remove the solid from it.
Hermet Park [Thu, 18 Nov 2021 04:18:23 +0000 (13:18 +0900)]
sw_engine raster: remove the condition which is out of the genearal case.
Hermet Park [Thu, 18 Nov 2021 11:50:03 +0000 (20:50 +0900)]
sw_engine raster: updated tvglog messages
Hermet Park [Thu, 18 Nov 2021 02:31:15 +0000 (11:31 +0900)]
common shape: fix memory access violation
asan report:
../src/lib/tvgShapeImpl.h:94:15: runtime error: null pointer passed as argument 2, which is declared to never be null
../src/lib/tvgShapeImpl.h:101:15: runtime error: null pointer passed as argument 2, which is declared to never be null
Hermet Park [Wed, 17 Nov 2021 07:40:33 +0000 (16:40 +0900)]
examples: added image scale up/down samples.
Hermet Park [Wed, 17 Nov 2021 03:19:39 +0000 (12:19 +0900)]
example boundary2: added image boundary check sample.
Mira Grudzinska [Wed, 17 Nov 2021 14:09:56 +0000 (15:09 +0100)]
example: added different stroke's caps
Hermet Park [Wed, 17 Nov 2021 11:44:39 +0000 (20:44 +0900)]
sw_engine raster: optimize the image raster
these solid images shouldn't apply the alpha blending...
Hermet Park [Wed, 17 Nov 2021 03:04:44 +0000 (12:04 +0900)]
example stroke: added vertical line samples.
Michal Maciola [Wed, 17 Nov 2021 11:00:38 +0000 (12:00 +0100)]
all: fix compilation errors on non-windows clang
Thorvg couldn't be compiled on macos as non-portable microsoft calls used.
Changed definitions checking to Visual Studio only.
Hermet Park [Wed, 17 Nov 2021 10:38:35 +0000 (19:38 +0900)]
sw_engine raster: code refactoring
changed internal function names, keep the neat & clean thorvg style code.
JunsuChoi [Wed, 17 Nov 2021 09:52:15 +0000 (18:52 +0900)]
infra bot: Add Memcheck bot (AddressSanitizer)
If a leak occurs in the test result, the bot notifies the PR as a comment.
This notify may not be directly related to the created current PR.
JunsuChoi [Wed, 17 Nov 2021 02:25:47 +0000 (11:25 +0900)]
infra: Use latest meson version
0.45 -> latest. For b_sanitize option. (0.45 version is not supported).
Hermet Park [Wed, 17 Nov 2021 03:42:00 +0000 (12:42 +0900)]
examples: remove low quality sample images.
jykeon [Thu, 18 Nov 2021 03:27:32 +0000 (12:27 +0900)]
bump up version 0.6.0
Change-Id: I75ad4b7c3a0e98c811153726d25ec9004784c59d
Signed-off-by: jykeon <jykeon@samsung.com>
jykeon [Wed, 17 Nov 2021 23:46:19 +0000 (08:46 +0900)]
bump up version v0.5.4
Change-Id: I1b8b9e0dddd20c661d2e8736eaf7ce9ce9b08e67
Signed-off-by: jykeon <jykeon@samsung.com>
Hermet Park [Tue, 16 Nov 2021 10:25:18 +0000 (19:25 +0900)]
sw_engine raster: code refactoring
clarfy & regroup the internal functions which have been messed up by rendering options.
no logical changes
Hermet Park [Tue, 16 Nov 2021 08:18:51 +0000 (17:18 +0900)]
sw_engine neon: code refactoring.
keep the internal function name consistency.
Mira Grudzinska [Tue, 16 Nov 2021 01:45:06 +0000 (02:45 +0100)]
sw_engine: ialpha function pointer used instead of 255 - alpha
Hermet Park [Mon, 15 Nov 2021 09:06:59 +0000 (18:06 +0900)]
examples pictures: updated for case cover.
+ test opacity
Hermet Park [Mon, 15 Nov 2021 05:47:11 +0000 (14:47 +0900)]
sw_engine image: ++optimization
apply fast track to fast up the image rasterization.
only shifted image doesn't need to have the matrix-transform computation,
we can avoid it by just shifting offset xy by simple caculating.
@Issue: https://github.com/Samsung/thorvg/issues/206
Hermet Park [Mon, 15 Nov 2021 03:17:36 +0000 (12:17 +0900)]
common math: code refactoring
introduced mathZero(), mathEqual() for floating variables.
Hermet Park [Mon, 15 Nov 2021 02:26:31 +0000 (11:26 +0900)]
sw_engine image: code refactoring
revert
d520da2db8966db19ae83897549a107c01c475c1
After considered the scneario seriously,
this doesn't helpful for the performance at all...
just increased code complexity. earlier bad decision... revert it.
Mira Grudzinska [Sat, 13 Nov 2021 23:30:18 +0000 (00:30 +0100)]
sw_engine: avxRasterTranslucentRle implemented
Hermet Park [Fri, 12 Nov 2021 10:06:41 +0000 (19:06 +0900)]
common paint: improve rotation condition precision
cover the four cases: 0, 90, 180, 270 degrees...
Hermet Park [Fri, 12 Nov 2021 08:09:40 +0000 (17:09 +0900)]
common paint: improve rotation condition precision
JunsuChoi [Fri, 12 Nov 2021 07:35:07 +0000 (16:35 +0900)]
infra bot: Hotfix memcheck bot for push event
Hermet Park [Fri, 12 Nov 2021 07:37:10 +0000 (16:37 +0900)]
common paint: fix invalid memory access in unit test
casting the paint to shape is not allowed if the compositor target
is not shape, here it concretely checking the the type before casting....
Hermet Park [Fri, 12 Nov 2021 05:55:04 +0000 (14:55 +0900)]
sw_engine image: optimized image rendering.
Applied the fast-track routine for axis-aligned images.
This helps to remove outline generation if no clips.