Commit graph

53 commits

Author SHA1 Message Date
Hermet Park
4f48c856f6 sw_engie: fix wrong boundary check.
this bounding box max indicates absolute positions,
not width/height size.

because of this, shape couldn't rendered properly,
when it's clipped out.

Change-Id: I0afb0d6e63d1b511b83716c55f55e3fd5370fdb8
2020-06-23 14:15:47 +09:00
Hermet Park
a9d712e06e Merge "common transform: support matrix transform interface." into tizen 2020-06-23 02:31:23 +00:00
Hermet Park
c6742e9590 common transform: support matrix transform interface.
this interface is designed for user-defined arbitrary affine-transform paints.

required by svg loader.

Change-Id: I7f08023605d224e36cef3770098d3757aee81848
2020-06-23 11:28:20 +09:00
Hermet Park
ab5c1bc441 common bezier: code refactoring.
Organize bezier functions for internal share.

this bezier can be used in svg loader.

Change-Id: I78acd3273c0528688ca46ff7c29d78607bd729bd
2020-06-22 17:07:53 +09:00
Hermet Park
01e52c7c7a common loader: build up loader infrastructure.
Change-Id: I62aaed43015301ec39e414833f37d6c5485d8043
2020-06-19 15:46:02 +09:00
Hermet Park
ec03afa83a sw_engine renderer: accept stroke less 1 width size.
Change-Id: I5fe6a0993ab5c1abc79d89834ea04c25b059c320
2020-06-18 10:41:58 +09:00
Hermet Park
7435b5b414 sw_engine: support gradient transformation properly
added testGradientTransform

Change-Id: I29037d08ce951e5ceb2eef31cb414efc25296417
2020-06-15 20:14:37 +09:00
Hermet Park
7366e8949b sw_engine: implement gradial gradient feature
also added testRadialGradient

Change-Id: If4a278cb4667c38c7842ad30edf5aa2fdd56fff7
2020-06-15 17:43:52 +09:00
Hermet Park
5c988d01a5 sw_engine: implement linear gradient feature
also added testLinearGradient

Change-Id: I9cce74b9fc40c4ebd978939ee50955e44e7f44f2
2020-06-13 12:09:39 +09:00
Hermet Park
f3afd2a636 common fill: added spread mode.
Change-Id: I95d47bc492d5a22326a745a591d243e56a26bae4
2020-06-11 14:27:20 +09:00
Hermet Park
498a024df8 common: ++optimization
replace dynamic_cast to static_cast,

This can be a controversial choice between optmization and clean code.

Obviously we know the converting types,
try avoiding a bit heavier casting some cases.

Change-Id: Id763e6d1db449a229a492ab5b1a901a195936152
2020-06-09 20:32:22 +09:00
Hermet Park
58de99aea3 common interface: replace arguements size_t to uint32_t
We prefer to build up a tiny compact engine at memory rather than compatibility,
this engine is not considerd for end-users but designed for middle-level framework
and some low-level users.

Thus, we won't consider 64bits data size,
use explicit 32 bits data until coming next upgrade...

Change-Id: I0704d5f1e0eb909cccc10922bc5972e115fbbcc0
2020-06-09 15:36:34 +09:00
Hermet Park
33e1d4b170 common interface: concrete return type.
Introduce Result type for notifying caller more detailed info.

We should implement the result values for each apis, with practical values.

Change-Id: Ia47abcb56a8efca7094ac3eed0178aeac8aa2910
2020-06-09 15:16:25 +09:00
Hermet Park
4e3f8284e8 sw_engine: grow cell memory buffer up to allow larger shapes
Change-Id: I7a8feaa11d3dad81dd1004782e07a8ac4a768d91
2020-06-09 11:03:18 +09:00
Hermet Park
9aa2566b45 sw_engine: support stroke dash feature
Change-Id: Ibed8bcb6a07952a059bb9a7355f7c43db97aa672
2020-06-06 12:21:30 +09:00
Hermet Park
dc5f9f7430 common: retyped the color value size_t -> uint8_t
since it's range is 0 - 255.

Change-Id: I16e0569341c4a94acab9488d076f235bf90ff4db
2020-06-04 17:49:10 +09:00
Hermet Park
98edb4112b sw_engine shape: ++ comment for later optimization
Change-Id: Ie6cd622748b88e2bce0c9d9a79cc4528a95c9c5c
2020-06-03 19:17:42 +09:00
Hermet Park
f335779ce5 sw_engine stroke: stabilizing line drawing.
Also added StrokeLine test

Change-Id: I91143039823d744bf9287534227927556a2f51e1
2020-06-03 19:10:14 +09:00
Hermet Park
01b550497c sw_engine: support stroke transformation properly.
also updated transform test cases.

Yet, this engine is not well optimized,
If they are too mch sluggish,
you can use ELM_FPS envrionment lowing down the fps
when you launch test cases...

ex) $ELM_FPS=30 ./testSceneTransform

Change-Id: I1871d5bedee010d5d6a3d877d95e257120796e8b
2020-06-03 12:08:48 +09:00
Hermet Park
3bb272877a sw_engine: fix a missing of variable initializing.
Change-Id: I6451b07709fbc56441363e8f0ee0f4647404ae10
2020-06-03 11:27:34 +09:00
Hermet Park
7ee25cd783 sw_engine: fix mistached c style alloc/free
these are allocated by c style mem alloc.
Thus, they should be freed with free()

Change-Id: I320fff4d5a5bce2374ace6495a9f96c3e1034cfc
2020-06-03 11:15:40 +09:00
Hermet Park
8614a2efee sw_engine: fix stroke join round result.
a trivial reversed value was returned that
brought the inverted arc drawing...

Change-Id: I928f05b3400772a367d1653496d385354032cbad
2020-06-02 20:25:54 +09:00
Hermet Park
1686af7643 sw_engine: implement stroke rle part
Current stroke fails to merged shapes case...

you can test with testStroke example

Change-Id: I488af728949cba1d01b88723eb1dc4c49bac6c9b
2020-06-02 18:46:43 +09:00
Hermet Park
41dbd9774a sw_engine: implement stroke cubicto, arcto, lineto
Change-Id: I59e95b1031ebfaf54e966cab334e045613ca3830
2020-06-01 19:20:29 +09:00
JunsuChoi
6744838453 sw_engine: Fix build error (no match type)
../src/lib/sw_engine/tvgSwStroke.cpp:282:72: error: no match for ‘operator<’ (operand types are ‘long int’ and ‘const SwPoint’)
         if (border->ptsCnt > 0 && abs(diff.x) < EPSILON && abs(diff.y) < EPSILON) return;

Change-Id: I426f8980ba718e3dc908dc32a62fb897b5b5fbbf
2020-05-29 15:31:43 +09:00
Hermet Park
c51241f26b sw_engine: implment basic stroke functions.
Change-Id: Ib9203b4d133ce7ffd80b40d7ad0cac3519b5273d
2020-05-28 20:32:55 +09:00
Hermet Park
a5f15a588c common scene: complete scene tranfsormation feature.
Each scene could conserve its own transformation,
the origin could be the parent Paint (if they were beloned to)

Thus, you can compose the multi-tranformed scene group which
simultenoulsly working in own spaces.

See testTransform and testSceneTransform, how they work.

Change-Id: I51deb4d66f8fcd024f8dc7a1e1af57c398a9d7fe
2020-05-17 21:38:15 +09:00
Hermet Park
fdbf42f478 common: support Scene Transform
this contains testSceneTransform example

Change-Id: I460b05dc8bc4a842e26e950c800c5c35f8d3da7f
2020-05-17 16:50:47 +09:00
Hermet Park
40ef2f1575 fix wrong flag operation.
just correct mistakes.

Change-Id: I8de0fe68cd298cacf3bdc951f67657095c5fa5fe
2020-05-06 11:56:17 +09:00
Hermet Park
b08d144dc9 common shape: introduce transformation matrix
Paint supports translate, rotate, scale functions for transformation

The origin of these transformation is center of the paint,
thus you have to consider the center-aligned vertices if you'd like to use
these transformation functions.

This policy has been considered for scene transformation.

Change-Id: I78b63d7965faec0ec5b9a98a7776993744534b54
2020-05-06 02:05:09 +09:00
Hermet Park
682bc25298 common shape: revise scale/rotate approach.
Come to think of it, this optimized method is not so useful,
it could just bring the user misunderstanding and
not to efficient as I expected in the most cases.

So, changed policy for transformation behaviors.
it keeps the properties as others but leaves it to the backend implementation.

Plus, this change contains the correct RenderUpdateFlag.
You can refer the flag in the backend to figure out which kinds of properites has been updated

Change-Id: Ibe0494712598a8161950b9ae2e22ac45bed1c47b
2020-05-03 15:03:29 +09:00
Hermet Park
42c56757df common: redesigned interfaces
PaintNode -> Paint
ShapeNode -> Shape
SceneNode -> Scene

We can keep clean and neat shorter names.

Change-Id: Ic8521d456d947985e5fbe1ba2bde06faa1f52469
2020-05-02 18:20:50 +09:00
Hermet Park
60d104a40a sw_engine: code refactoring.
renamed internal variables for better readibility.

Change-Id: I1ba7938401e8b7249c8bcc396be1ba3c109716cd
2020-05-02 17:44:49 +09:00
Hermet Park
a8864390e2 canvas: code refactoring
accept an extra argument in the clear() to clear paints node

and clear buffer selectively.

Change-Id: I83721e74358f546f325bb03fd1f36c7565174dd7
2020-05-02 11:25:07 +09:00
Hermet Park
11e070d167 sw_engine: support anti-aliasing
Change-Id: I9b79c8b4022ddf2ae4fe980f480ba3ec140750d3
2020-05-01 17:48:21 +09:00
Hermet Park
74d2f275e7 sw_engine: support color blending
this contains testBlending as well

Change-Id: Ia0aadea804a973cfe8ec981ed1b21c1b44512ef2
2020-05-01 14:45:16 +09:00
Hermet Park
700a44c623 common shape: added path commands interfaces for user convenient.
+lineTo()
+moveTo()
+cubicTo()
+close()

These interfaces might not perfect optmizied,
but you can build path commands easier than manual data set.

Change-Id: Icb934ca256d3107ca0c938d28015d767fb93355e
2020-04-30 23:36:28 +09:00
Hermet Park
e0ecd680a0 sw_engine: fix crash at merge shape test
increased spare cell memory for rasterizing.

Change-Id: I391dfbfae0ef028d213c55fe1ceca023e272e676
2020-04-30 15:43:13 +09:00
Hermet Park
46ba3352a8 sw_engine: case cover out of surface boundary.
Also added surface boundary test code.

Change-Id: Ib4c327d12ce52d506f1b8a566ffa48e5b5b8c03e
2020-04-30 15:19:46 +09:00
Hermet Park
a15e2c9ca0 sw_engine: fix wrong comparison that brings broken shapes.
These implementation is still at hot coding,
we still need to improve a lot.

Change-Id: I61398bff75395ff5e692ca48f4d62243f74bed85
2020-04-26 14:57:14 +09:00
Hermet Park
fe9c2c9162 common shape: implement appendCircle body.
Change-Id: Ib8507366f84532db3119f04c8d55e0d4e8206f9f
2020-04-26 11:38:06 +09:00
Hermet Park
37d34eeb19 sw_engine: concrete shape rendering sequence.
Succeed first sw backend screen up!

Change-Id: I882fb1726ed1f45e92e73fbc36170e93645dfbd2
2020-04-19 18:28:01 +09:00
Hermet Park
2628a5a935 sw_engine: tag one optimization point for future work.
Change-Id: Ib41b18c097d24636efbba633972e1c8b7f9a63ef
2020-04-19 11:55:19 +09:00
Hermet Park
75f2bc5f38 sw_engine: optimization++
Adjust rle span generation size to reduce memory allocation.
This span growing is experimentally increased, undeterministic.
Thus We need too increase them every requests, if we increase their
size x 4, we can avoid a lot of memory copy in advance.

Change-Id: Idd24024204a69fa3b6857728b95aa63a3ac26c5e
2020-04-19 11:13:28 +09:00
Hermet Park
7097940c22 code refactoring.
revise internal class & variable names for better code readibility.

Change-Id: I7f1b4474f3129c3be04444350496485f000afd15
2020-04-18 23:07:15 +09:00
Hermet Park
9b7337622d rename class names.
RasterMethod -> RenderMethod
SwEngine -> SwRenderer
GlEngine -> GlRenderer

Change-Id: Ic2ded698e49c4373fe21fe31fa34baca01bf43a2
2020-04-18 23:00:44 +09:00
Hermet Park
c8d800f6c6 sw_engine: implement line and curve raster
Change-Id: I22a77892544cd510cfe646aee60093cebb848806
2020-04-18 19:56:10 +09:00
Hermet Park
de242b018b replace backend class names.
SwRaster to SwEngine
GlRaster to GlEngine

Change-Id: I3cf70e168b78c64754807a62c221e13c11b95c35
2020-04-18 12:44:40 +09:00
Hermet Park
2a39617527 implement rle path parts.
Change-Id: I7200d80320404d6e7fb722042b8f330961bee76d
2020-04-15 21:55:53 +09:00
Hermet Park
70c9860d8f implement rle raster.
Change-Id: Ie21dfbf0ff1aed43bfa750eeef3b8c033a986416
2020-04-13 13:42:24 +09:00