From bfb122dfe2717d00e9fca0a3177acc75d962ad0c Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Thu, 12 Aug 2021 00:39:36 +0900 Subject: [PATCH 01/16] Add files via upload --- res/example_tvgsize.png | Bin 0 -> 138771 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 res/example_tvgsize.png diff --git a/res/example_tvgsize.png b/res/example_tvgsize.png new file mode 100644 index 0000000000000000000000000000000000000000..c2471c0a83cca5ab3d015eae57b9b1c1dd26bf02 GIT binary patch literal 138771 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≦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 literal 0 HcmV?d00001 -- 2.7.4 From d0e83c25adf66b3f094939e7345882a62ccfa1f4 Mon Sep 17 00:00:00 2001 From: Michal Szczecinski Date: Wed, 11 Aug 2021 16:23:04 +0200 Subject: [PATCH 02/16] sw_common neon: Fix issue with unaligned memory. Neon operations should be performed on memory aligned to 8 bytes. This commit fixes this issue and increase stability of neon rasterizer. Change-Id: I348d18137dcd973d26948916758e1e523f565503 --- src/lib/sw_engine/tvgSwRasterNeon.h | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/lib/sw_engine/tvgSwRasterNeon.h b/src/lib/sw_engine/tvgSwRasterNeon.h index 0ca8304..2d32caa 100644 --- a/src/lib/sw_engine/tvgSwRasterNeon.h +++ b/src/lib/sw_engine/tvgSwRasterNeon.h @@ -53,33 +53,39 @@ static inline bool neonRasterTranslucentRle(SwSurface* surface, const SwRleData* { auto span = rle->spans; uint32_t src; + uint8x8_t *vDst = NULL; for (uint32_t i = 0; i < rle->size; ++i) { auto dst = &surface->buffer[span->y * surface->stride + span->x]; + uint32_t align = 0; - uint8x8_t *vDst = (uint8x8_t*) dst; + if ((((uint32_t) dst) & 0x7) != 0) { + vDst = (uint8x8_t*)(dst+1); + align = 1; + } else { + vDst = (uint8x8_t*) dst; + } if (span->coverage < 255) src = ALPHA_BLEND(color, span->coverage); else src = color; auto ialpha = 255 - surface->blender.alpha(src); uint8x8_t vSrc = (uint8x8_t) vdup_n_u32(src); - uint8x8_t vIalpha = (uint8x8_t) vdup_n_u32(ialpha); + uint8x8_t vIalpha = vdup_n_u8((uint8_t) ialpha); - uint32_t iterations = span->len / 2; - uint32_t left = span->len % 2; + uint32_t iterations = (span->len - align) / 2; + uint32_t left = (span->len - align) % 2; - for (uint32_t x = 0; x < iterations; x+=2) { - vDst[x] = vadd_u8(vSrc, ALPHA_BLEND_NEON(vDst[x], vIalpha)); - } + //Fill not aligned byte + if (align) *dst = src + ALPHA_BLEND(*dst, ialpha); + + for (uint32_t x = 0; x < iterations; ++x) vDst[x] = vadd_u8(vSrc, ALPHA_BLEND_NEON(vDst[x], vIalpha)); + + if (left) dst[span->len - 1] = src + ALPHA_BLEND(dst[span->len - 1], ialpha); - if (left) { - dst[span->len] = src + ALPHA_BLEND(dst[span->len], ialpha); - } ++span; } return true; } - #endif \ No newline at end of file -- 2.7.4 From 04b3d882ad96301dcd7631788c446243d30275c0 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 17 Aug 2021 13:02:49 +0900 Subject: [PATCH 03/16] bump up version v0.4.1 Change-Id: I7d35e83af8e3c0be08457a22c835cac85b5e2798 --- packaging/thorvg.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/thorvg.spec b/packaging/thorvg.spec index 18f163b..083a38c 100644 --- a/packaging/thorvg.spec +++ b/packaging/thorvg.spec @@ -1,6 +1,6 @@ Name: thorvg Summary: Thor Vector Graphics Library -Version: 0.4.0 +Version: 0.4.1 Release: 1 Group: Graphics System/Rendering Engine License: MIT -- 2.7.4 From 801ee07bd364a31439f5b6faf4bbbaa97ebd4d40 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 17 Aug 2021 14:14:48 +0900 Subject: [PATCH 04/16] Update README.md --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d576a4b..3cfd9fe 100644 --- a/README.md +++ b/README.md @@ -193,17 +193,21 @@ The result:
## TVG Picture -ThorVG provides the designated vector data format which is called TVG Picture. TVG Picture stores the list of properties of the Paint nodes of the scene in the binary form after processing data optimization through the scene-tree nodes. +ThorVG provides the designated vector data format which is called TVG Picture. TVG Picture stores a list of properties of the Paint nodes of a scene in binary form. The data saved in a TVG Picture is optimized beforehand, keeping the resulting file small and the data loading process fast and efficient. -In that processing, the TVG Saver tries to filter out the unused information, compromise the duplicated properties, merge shapes, compress the data if doable while keeping them compatible with ThorVG behavior policy so that it can reduce the binary size without any breakage. This helps not only keep the application resource size less than any text-based vector formats such as SVG, but also reduces the file I/O operations and the memory bandwidth. Thus this is effective if your program uses a big amount of the vector resources. +To save data in a TVG Picture format, ThorVG uses a dedicated module - TVG Saver. It is responsible for optimizing the data of all the scene-tree nodes and saving them in binary format. In the optimization process, the TVG Saver filters out unused information, removing the duplicated properties, merges the overlapping shapes and compresses the data if possible, but keeping the TVG Pictures compatible with the later version of ThorVG libraries. -Aside from the binary size pros, the TVG data format helps to reduce the resource loading time since it can skip interpreting the data stage. Additionally, its performance can be increased by reducing the amount of the runtime memory as well as reducing the rendering tasks burden. On average, TVG Picture is more than 30% better than SVG in both file size and loading time. Note that the amount of the performance rate is up to the resource size and its complexity. +The final data size is smaller in comparison to any other text-based vector data format, such as SVG, which in turn decreases the required application resources. This helps not only reduce the number of I/O operations but also reduces the memory bandwidth while loading the data. Thus this is effective if your program uses a big amount of the vector resources. + +Additionally, TVG Picture helps to reduce the resource loading tasks since it can skip interpreting the data stage. That brings the reduced amount of the required runtime memory and rendering tasks that increases the performance. + +Utilizing the TVG Picture allows you to reduce the data size and loading time by more than 30%, on average. Note that the charge in the performance rate depends on the resource size and its complexity.

-TVG Saver exports the TVG Pictures to the files whose file extension name is "tvg", TVG Loader imports them, and restores them to the TVG Pictures. You can quickly use the ThorVG Viewer to convert from SVG to TVG files (Coming soon). +While TVG Saver exports the scene-tree to the TVG Picture data files(TVG), the TVG Loader imports and restores it to the programmable instances. You can quickly use the ThorVG Viewer to convert files from SVG to TVG(Coming soon).

-- 2.7.4 From 3a8f816b17c5e2395fcbe4a938e448238f92a034 Mon Sep 17 00:00:00 2001 From: Michal Szczecinski Date: Wed, 18 Aug 2021 09:49:50 +0200 Subject: [PATCH 05/16] build: Fixed simd options detection Change-Id: I58816d8b8a5bedffb9d9986f96f45ddc1ca0069b --- meson.build | 17 +++++++++++------ meson_options.txt | 8 ++++---- src/meson.build | 6 +++--- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/meson.build b/meson.build index cc0ed4e..e03582f 100644 --- a/meson.build +++ b/meson.build @@ -40,12 +40,17 @@ if get_option('savers').contains('tvg_beta') == true config_h.set10('THORVG_TVG_SAVER_SUPPORT', true) endif -if get_option('vectors').contains('avx') == true - config_h.set10('THORVG_AVX_VECTOR_SUPPORT', true) -endif +cpu_avx = false +cpu_neon = false -if get_option('vectors').contains('neon') == true +if get_option('use_simd') == true + if host_machine.cpu_family() == 'x86' or host_machine.cpu_family() == 'x86_64' + config_h.set10('THORVG_AVX_VECTOR_SUPPORT', true) + cpu_avx = true + elif host_machine.cpu_family() == 'arm' config_h.set10('THORVG_NEON_VECTOR_SUPPORT', true) + cpu_neon = true + endif endif if get_option('bindings').contains('capi') == true @@ -98,8 +103,8 @@ Summary: get_option('prefix'), get_option('engines').contains('sw'), get_option('engines').contains('gl'), - get_option('vectors').contains('avx'), - get_option('vectors').contains('neon'), + cpu_avx, + cpu_neon, get_option('loaders').contains('tvg_beta'), get_option('loaders').contains('svg'), get_option('loaders').contains('png'), diff --git a/meson_options.txt b/meson_options.txt index 9c37b53..7ceeb7e 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -16,10 +16,10 @@ option('savers', value: ['tvg_beta'], description: 'Enable File Savers in thorvg') -option('vectors', - type: 'combo', - choices: ['', 'avx', 'neon'], - value: 'neon', + +option('use_simd', + type: 'boolean', + value: true, description: 'Enable CPU Vectorization(SIMD) in thorvg') option('bindings', diff --git a/src/meson.build b/src/meson.build index fc4c352..d0d6f9c 100644 --- a/src/meson.build +++ b/src/meson.build @@ -2,11 +2,11 @@ compiler_flags = ['-DTVG_BUILD'] cc = meson.get_compiler('cpp') if (cc.get_id() != 'msvc') - if get_option('vectors').contains('avx') + if cpu_avx compiler_flags += ['-mavx'] endif - if get_option('vectors').contains('neon') - compiler_flags += ['-mfpu=neon-vfpv4'] + if cpu_neon + compiler_flags += ['-mfpu=neon'] endif if get_option('b_sanitize') == 'none' compiler_flags += ['-fno-exceptions', '-fno-rtti', -- 2.7.4 From a832ac073de6e70d150d334b8c70bf8177b1acc4 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Wed, 18 Aug 2021 19:00:48 +0900 Subject: [PATCH 06/16] build: renamed the cpu vectorization option. Change-Id: Id4de4fe05dcdfc550e81479ffe93e973ef958c94 --- meson.build | 2 +- meson_options.txt | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/meson.build b/meson.build index e03582f..eac5b49 100644 --- a/meson.build +++ b/meson.build @@ -43,7 +43,7 @@ endif cpu_avx = false cpu_neon = false -if get_option('use_simd') == true +if get_option('vector') == true if host_machine.cpu_family() == 'x86' or host_machine.cpu_family() == 'x86_64' config_h.set10('THORVG_AVX_VECTOR_SUPPORT', true) cpu_avx = true diff --git a/meson_options.txt b/meson_options.txt index 7ceeb7e..2e352ae 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -16,8 +16,7 @@ option('savers', value: ['tvg_beta'], description: 'Enable File Savers in thorvg') - -option('use_simd', +option('vector', type: 'boolean', value: true, description: 'Enable CPU Vectorization(SIMD) in thorvg') -- 2.7.4 From 6143e468fcc1ed73182877b856a46544ec0d116f Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Tue, 17 Aug 2021 15:03:19 +0200 Subject: [PATCH 07/16] picture: fix reloading images Calling picture->load after it was already once called resulted in segmentation fault or memory leak (depending on whether the vector (svg, tvg) or raster (jpg, png, raw) file was loaded). This patch checks the image has already been loaded. If so, the load() returns InsufficientCondition. @issue: fixes #719 --- src/lib/tvgPictureImpl.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lib/tvgPictureImpl.h b/src/lib/tvgPictureImpl.h index 19642c1..b5235a9 100644 --- a/src/lib/tvgPictureImpl.h +++ b/src/lib/tvgPictureImpl.h @@ -61,9 +61,9 @@ struct Picture::Impl { shared_ptr loader = nullptr; Paint* paint = nullptr; - uint32_t *pixels = nullptr; - Picture *picture = nullptr; - void *rdata = nullptr; //engine data + uint32_t* pixels = nullptr; + Picture* picture = nullptr; + void* rdata = nullptr; //engine data float w = 0, h = 0; bool resizing = false; @@ -184,6 +184,7 @@ struct Picture::Impl Result load(const string& path) { + if (paint || pixels) return Result::InsufficientCondition; if (loader) loader->close(); bool invalid; //Invalid Path loader = LoaderMgr::loader(path, &invalid); @@ -199,6 +200,7 @@ struct Picture::Impl Result load(const char* data, uint32_t size, const string& mimeType, bool copy) { + if (paint || pixels) return Result::InsufficientCondition; if (loader) loader->close(); loader = LoaderMgr::loader(data, size, mimeType, copy); if (!loader) return Result::NonSupport; @@ -210,6 +212,7 @@ struct Picture::Impl Result load(uint32_t* data, uint32_t w, uint32_t h, bool copy) { + if (paint || pixels) return Result::InsufficientCondition; if (loader) loader->close(); loader = LoaderMgr::loader(data, w, h, copy); if (!loader) return Result::NonSupport; -- 2.7.4 From 743cffbd327478b25a20eaf75741fdb3039fc8c2 Mon Sep 17 00:00:00 2001 From: Michal Maciola <71131832+mmaciola@users.noreply.github.com> Date: Wed, 18 Aug 2021 13:29:10 +0200 Subject: [PATCH 08/16] svg2png: enhance the feature. Svg2png fully redesigned. Introduced whole directory parsing. Created flags interface. Usage: svg2png [svgFileName] [-r resolution] [-b bgColor] Flags: -r set output image resolution. -b set output image background color. Examples: $ svg2png input.svg $ svg2png input.svg -r 200x200 $ svg2png input.svg -r 200x200 -b ff00ff $ svg2png input1.svg input2.svg -r 200x200 -b ff00ff --- src/bin/svg2png/svg2png.cpp | 367 ++++++++++++++++++++++++++++++-------------- 1 file changed, 254 insertions(+), 113 deletions(-) diff --git a/src/bin/svg2png/svg2png.cpp b/src/bin/svg2png/svg2png.cpp index 3e0f56e..c56e39e 100644 --- a/src/bin/svg2png/svg2png.cpp +++ b/src/bin/svg2png/svg2png.cpp @@ -25,180 +25,321 @@ #include #include #include "lodepng.h" +#include +#include +#include using namespace std; - struct PngBuilder { - void build(const std::string &fileName , const uint32_t width, const uint32_t height, uint32_t *buffer) + void build(const string& fileName, const uint32_t width, const uint32_t height, uint32_t* buffer) { - std::vector image; + //Used ARGB8888 so have to move pixels now + vector image; image.resize(width * height * 4); for (unsigned y = 0; y < height; y++) { for (unsigned x = 0; x < width; x++) { - uint32_t n = buffer[ y * width + x ]; + uint32_t n = buffer[y * width + x]; image[4 * width * y + 4 * x + 0] = (n >> 16) & 0xff; image[4 * width * y + 4 * x + 1] = (n >> 8) & 0xff; image[4 * width * y + 4 * x + 2] = n & 0xff; image[4 * width * y + 4 * x + 3] = (n >> 24) & 0xff; } } + unsigned error = lodepng::encode(fileName, image, width, height); //if there's an error, display it - if (error) std::cout << "encoder error " << error << ": "<< lodepng_error_text(error) << std::endl; + if (error) cout << "encoder error " << error << ": " << lodepng_error_text(error) << endl; } }; - -struct App +struct Renderer { - void tvgRender(int w, int h) +public: + int render(const char* path, int w, int h, const string& dst, uint32_t bgColor) { - tvg::CanvasEngine tvgEngine = tvg::CanvasEngine::Sw; - - //Threads Count - auto threads = std::thread::hardware_concurrency(); - - //Initialize ThorVG Engine - if (tvg::Initializer::init(tvgEngine, threads) == tvg::Result::Success) { - //Create a Canvas - auto canvas = tvg::SwCanvas::gen(); + //Canvas + if (!canvas) createCanvas(); + if (!canvas) { + cout << "Error: Canvas failure" << endl; + return 1; + } - //Create a Picture - auto picture = tvg::Picture::gen(); - if (picture->load(fileName) != tvg::Result::Success) return; + //Picture + auto picture = tvg::Picture::gen(); + if (picture->load(path) != tvg::Result::Success) { + cout << "Error: Couldn't load image " << path << endl; + return 1; + } + if (w == 0 || h == 0) { float fw, fh; picture->size(&fw, &fh); + w = static_cast(fw); + h = static_cast(fh); + } else { + picture->size(w, h); + } - //Proper size is not specified, Get default size. - if (w == 0 || h == 0) { - width = static_cast(fw); - height = static_cast(fh); - //Otherwise, transform size to keep aspect ratio - } else { - width = w; - height = h; - picture->size(w, h); - } + //Buffer + createBuffer(w, h); + if (!buffer) { + cout << "Error: Buffer failure" << endl; + return 1; + } - //Setup the canvas - auto buffer = (uint32_t*)malloc(sizeof(uint32_t) * width * height); - canvas->target(buffer, width, width, height, tvg::SwCanvas::ARGB8888); + if (canvas->target(buffer, w, w, h, tvg::SwCanvas::ARGB8888) != tvg::Result::Success) { + cout << "Error: Canvas target failure" << endl; + return 1; + } - //Background color? - if (bgColor != 0xffffffff) { - uint8_t bgColorR = (uint8_t) ((bgColor & 0xff0000) >> 16); - uint8_t bgColorG = (uint8_t) ((bgColor & 0x00ff00) >> 8); - uint8_t bgColorB = (uint8_t) ((bgColor & 0x0000ff)); + //Background color if needed + if (bgColor != 0xffffffff) { + uint8_t r = (uint8_t)((bgColor & 0xff0000) >> 16); + uint8_t g = (uint8_t)((bgColor & 0x00ff00) >> 8); + uint8_t b = (uint8_t)((bgColor & 0x0000ff)); - auto shape = tvg::Shape::gen(); - shape->appendRect(0, 0, width, height, 0, 0); - shape->fill(bgColorR, bgColorG, bgColorB, 255); + auto shape = tvg::Shape::gen(); + shape->appendRect(0, 0, w, h, 0, 0); + shape->fill(r, g, b, 255); - if (canvas->push(move(shape)) != tvg::Result::Success) return; - } + if (canvas->push(move(shape)) != tvg::Result::Success) return 1; + } - //Drawing - canvas->push(move(picture)); - canvas->draw(); - canvas->sync(); + //Drawing + canvas->push(move(picture)); + canvas->draw(); + canvas->sync(); - //Build Png - PngBuilder builder; - builder.build(pngName.data(), width, height, buffer); + //Build Png + PngBuilder builder; + builder.build(dst, w, h, buffer); - //Terminate ThorVG Engine - tvg::Initializer::term(tvg::CanvasEngine::Sw); + cout << "Generated PNG file: " << dst << endl; - free(buffer); + canvas->clear(true); - } else { - cout << "engine is not supported" << endl; - } + return 0; } - int setup(int argc, char **argv, size_t *w, size_t *h) + void terminate() { - char *path{nullptr}; - - *w = *h = 0; - - if (argc > 1) path = argv[1]; - if (argc > 2) { - char tmp[20]; - char *x = strstr(argv[2], "x"); - if (x) { - snprintf(tmp, x - argv[2] + 1, "%s", argv[2]); - *w = atoi(tmp); - snprintf(tmp, sizeof(tmp), "%s", x + 1); - *h = atoi(tmp); - } - } - if (argc > 3) bgColor = strtol(argv[3], NULL, 16); + //Terminate ThorVG Engine + tvg::Initializer::term(tvg::CanvasEngine::Sw); + free(buffer); + } - if (!path) return help(); +private: + void createCanvas() + { + //Canvas Engine + tvg::CanvasEngine tvgEngine = tvg::CanvasEngine::Sw; - std::array memory; + //Threads Count + auto threads = thread::hardware_concurrency(); -#ifdef _WIN32 - path = _fullpath(memory.data(), path, memory.size()); -#else - path = realpath(path, memory.data()); -#endif - if (!path) return help(); + //Initialize ThorVG Engine + if (tvg::Initializer::init(tvgEngine, threads) != tvg::Result::Success) { + cout << "Error: Engine is not supported" << endl; + } - fileName = std::string(path); + //Create a Canvas + canvas = tvg::SwCanvas::gen(); + } - if (!svgFile()) return help(); + void createBuffer(int w, int h) + { + uint32_t size = w * h; + //Reuse old buffer if size is enough + if (buffer && bufferSize >= size) return; - pngName = basename(fileName); - pngName.append(".png"); - return 0; + //Alloc or realloc buffer + buffer = (uint32_t*) realloc(buffer, sizeof(uint32_t) * size); + bufferSize = size; } private: - std::string basename(const std::string &str) - { - return str.substr(str.find_last_of("/\\") + 1); - } + unique_ptr canvas = nullptr; + uint32_t* buffer = nullptr; + uint32_t bufferSize = 0; +}; - bool svgFile() { - std::string extn = ".svg"; - if (fileName.size() <= extn.size() || fileName.substr(fileName.size() - extn.size()) != extn) - return false; +struct App +{ +public: + int setup(int argc, char** argv) + { + vector paths; + + for (int i = 1; i < argc; i++) { + const char* p = argv[i]; + if (*p == '-') { + //flags + const char* p_arg = (i + 1 < argc) ? argv[i] : nullptr; + if (p[1] == 'r') { + //image resolution + if (!p_arg) { + cout << "Error: Missing resolution attribute. Expected eg. -r 200x200." << endl; + return 1; + } + + const char* x = strchr(p_arg, 'x'); + if (x) { + width = atoi(p_arg); + height = atoi(x + 1); + } + if (!x || width <= 0 || height <= 0) { + cout << "Error: Resolution (" << p_arg << ") is corrupted. Expected eg. -r 200x200." << endl; + return 1; + } + + } else if (p[1] == 'b') { + //image background color + if (!p_arg) { + cout << "Error: Missing background color attribute. Expected eg. -b #fa7410." << endl; + return 1; + } + + if (*p_arg == '#') ++p_arg; + bgColor = (uint32_t) strtol(p, NULL, 16); + + } else { + cout << "Warning: Unknown flag (" << p << ")." << endl; + } + } else { + //arguments + paths.push_back(p); + } + } - return true; - } + int ret = 0; + if (paths.empty()) { + //no attributes - print help + return help(); + + } else { + for (auto path : paths) { + auto real_path = realFile(path); + if (real_path) { + DIR* dir = opendir(real_path); + if (dir) { + //load from directory + cout << "Trying load from directory \"" << real_path << "\"." << endl; + if ((ret = handleDirectory(real_path, dir))) break; + + } else if (svgFile(path)) { + //load single file + if ((ret = renderFile(real_path))) break; + } else { + //not a directory and not .svg file + cout << "Warning: File \"" << path << "\" is not a proper svg file." << endl; + } + + } else { + cout << "Warning: File \"" << path << "\" is invalid." << endl; + } + } + } - int result() { - std::cout<<"Generated PNG file : "< 4 && (strcmp(&path[length - 4], ".svg") == 0); + } + + const char* realFile(const char* path) + { + //real path +#ifdef _WIN32 + path = fullpath(full, path, PATH_MAX); +#else + path = realpath(path, full); +#endif + return path; + } - if (app.setup(argc, argv, &w, &h)) return 1; + int renderFile(const char* path) + { + if (!path) return 1; - app.tvgRender(w, h); + //destination png file + const char* dot = strrchr(path, '.'); + if (!dot) return 1; + string dst(path, dot - path); + dst += ".png"; - return 0; + return renderer.render(path, width, height, dst, bgColor); + } + + int handleDirectory(const string& path, DIR* dir) + { + //open directory + if (!dir) { + dir = opendir(path.c_str()); + if (!dir) { + cout << "Couldn't open directory \"" << path.c_str() << "\"." << endl; + return 1; + } + } + + //list directory + int ret = 0; + struct dirent* entry; + while ((entry = readdir(dir)) != NULL) { + if (*entry->d_name == '.' || *entry->d_name == '$') continue; + if (entry->d_type == DT_DIR) { + string subpath = string(path); +#ifdef _WIN32 + subpath += '\\'; +#else + subpath += '/'; +#endif + subpath += entry->d_name; + ret = handleDirectory(subpath, nullptr); + if (ret) break; + + } else { + if (!svgFile(entry->d_name)) continue; + string fullpath = string(path); +#ifdef _WIN32 + fullpath += '\\'; +#else + fullpath += '/'; +#endif + fullpath += entry->d_name; + ret = renderFile(fullpath.c_str()); + if (ret) break; + } + } + closedir(dir); + return ret; + } +}; + +int main(int argc, char** argv) +{ + App app; + return app.setup(argc, argv); } -- 2.7.4 From 1585e8709daee9bcc93f486b95e7bcdfbadb9533 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Wed, 18 Aug 2021 20:47:21 +0900 Subject: [PATCH 09/16] infra: simplify vector meson option. neon/avx can't be resided in together, we replace it with a string variable. --- meson.build | 39 ++++++++++++++++++--------------------- src/meson.build | 4 ++-- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/meson.build b/meson.build index eac5b49..ce2ee11 100644 --- a/meson.build +++ b/meson.build @@ -40,16 +40,15 @@ if get_option('savers').contains('tvg_beta') == true config_h.set10('THORVG_TVG_SAVER_SUPPORT', true) endif -cpu_avx = false -cpu_neon = false +simd_type = 'none' if get_option('vector') == true if host_machine.cpu_family() == 'x86' or host_machine.cpu_family() == 'x86_64' config_h.set10('THORVG_AVX_VECTOR_SUPPORT', true) - cpu_avx = true + simd_type = 'avx' elif host_machine.cpu_family() == 'arm' config_h.set10('THORVG_NEON_VECTOR_SUPPORT', true) - cpu_neon = true + simd_type = 'neon' endif endif @@ -81,30 +80,28 @@ Summary: ThorVG version: @0@ Build Type: @1@ Prefix: @2@ - Raster Engine (SW): @3@ - Raster Engine (GL): @4@ - AVX SIMD Instruction: @5@ - Neon SIMD Instruction: @6@ - Loader (TVG): @7@ - Loader (SVG): @8@ - Loader (PNG): @9@ - Loader (JPG): @10@ - Saver (TVG): @11@ - CAPI Binding: @12@ - Log Message: @13@ - Tests: @14@ - Examples: @15@ - Tool (Svg2Tvg): @16@ - Tool (Svg2Png): @17@ + SIMD Instruction: @3@ + Raster Engine (SW): @4@ + Raster Engine (GL): @5@ + Loader (TVG): @6@ + Loader (SVG): @7@ + Loader (PNG): @8@ + Loader (JPG): @9@ + Saver (TVG): @10@ + CAPI Binding: @11@ + Log Message: @12@ + Tests: @13@ + Examples: @14@ + Tool (Svg2Tvg): @15@ + Tool (Svg2Png): @16@ '''.format( meson.project_version(), get_option('buildtype'), get_option('prefix'), + simd_type, get_option('engines').contains('sw'), get_option('engines').contains('gl'), - cpu_avx, - cpu_neon, get_option('loaders').contains('tvg_beta'), get_option('loaders').contains('svg'), get_option('loaders').contains('png'), diff --git a/src/meson.build b/src/meson.build index d0d6f9c..73cb643 100644 --- a/src/meson.build +++ b/src/meson.build @@ -2,10 +2,10 @@ compiler_flags = ['-DTVG_BUILD'] cc = meson.get_compiler('cpp') if (cc.get_id() != 'msvc') - if cpu_avx + if simd_type == 'avx' compiler_flags += ['-mavx'] endif - if cpu_neon + if simd_type == 'neon' compiler_flags += ['-mfpu=neon'] endif if get_option('b_sanitize') == 'none' -- 2.7.4 From 7a8f96894c97da8861b30da89e0a375181f8fd37 Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Wed, 18 Aug 2021 15:56:59 +0200 Subject: [PATCH 10/16] utc: increase coverage up --- test/images/tag.svg | 10 +++++++--- test/testPicture.cpp | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/test/images/tag.svg b/test/images/tag.svg index 4533376..4d3542a 100644 --- a/test/images/tag.svg +++ b/test/images/tag.svg @@ -1,6 +1,6 @@ - + @@ -20,16 +20,20 @@ + + + + - + - + diff --git a/test/testPicture.cpp b/test/testPicture.cpp index 53b48f4..6be9189 100644 --- a/test/testPicture.cpp +++ b/test/testPicture.cpp @@ -208,8 +208,8 @@ TEST_CASE("Load SVG file and render", "[tvgPicture]") auto canvas = SwCanvas::gen(); REQUIRE(canvas); - uint32_t buffer[100*100]; - REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + uint32_t buffer[1000*1000]; + REQUIRE(canvas->target(buffer, 1000, 1000, 1000, SwCanvas::Colorspace::ABGR8888) == Result::Success); auto picture = Picture::gen(); REQUIRE(picture); @@ -260,3 +260,33 @@ TEST_CASE("Load JPG file and render", "[tvgPicture]") REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); } + +TEST_CASE("Load RAW file and render", "[tvgPicture]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + auto picture = Picture::gen(); + REQUIRE(picture); + + string path(TEST_DIR"/rawimage_200x300.raw"); + + ifstream file(path); + if (!file.is_open()) return; + auto data = (uint32_t*)malloc(sizeof(uint32_t) * (200*300)); + file.read(reinterpret_cast(data), sizeof (uint32_t) * 200 * 300); + file.close(); + + REQUIRE(picture->load(data, 200, 300, false) == Result::Success); + + REQUIRE(canvas->push(move(picture)) == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); + + free(data); +} -- 2.7.4 From 759415dc8cbbd9c0c1715e926bb7cbc6fe6dc555 Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Wed, 18 Aug 2021 17:07:51 +0200 Subject: [PATCH 11/16] utc: increase coverage up #1 --- test/images/tag.svg | 2 +- test/testPicture.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/test/images/tag.svg b/test/images/tag.svg index 4d3542a..a4a6cdb 100644 --- a/test/images/tag.svg +++ b/test/images/tag.svg @@ -34,7 +34,7 @@ - + diff --git a/test/testPicture.cpp b/test/testPicture.cpp index 6be9189..068deeb 100644 --- a/test/testPicture.cpp +++ b/test/testPicture.cpp @@ -217,6 +217,8 @@ TEST_CASE("Load SVG file and render", "[tvgPicture]") REQUIRE(picture->load(TEST_DIR"/tag.svg") == Result::Success); REQUIRE(canvas->push(move(picture)) == Result::Success); + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); } @@ -235,6 +237,8 @@ TEST_CASE("Load PNG file and render", "[tvgPicture]") REQUIRE(picture); REQUIRE(picture->load(TEST_DIR"/test.png") == Result::Success); + REQUIRE(picture->opacity(192) == Result::Success); + REQUIRE(picture->scale(5.0) == Result::Success); REQUIRE(canvas->push(move(picture)) == Result::Success); -- 2.7.4 From c9b9793b302d75fab5e89b78189c5c5fce49aba4 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 20 Aug 2021 12:33:18 +0900 Subject: [PATCH 12/16] wasm: turn off the vectorization. We can visit this feature later when it's stable. --- wasm_build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wasm_build.sh b/wasm_build.sh index ccd659e..6ab7e63 100755 --- a/wasm_build.sh +++ b/wasm_build.sh @@ -8,7 +8,7 @@ fi if [ ! -d "./builddir_wasm" ]; then sed "s|EMSDK:|$1|g" wasm_cross.txt > /tmp/.wasm_cross.txt - meson -Dbindings=[''] -Db_lto=true -Ddefault_library=static -Dlog=true --cross-file /tmp/.wasm_cross.txt builddir_wasm + meson -Dbindings=[''] -Db_lto=true -Ddefault_library=static -Dvector=false -Dlog=true --cross-file /tmp/.wasm_cross.txt builddir_wasm cp ./test/wasm_test.html builddir_wasm/src/index.html fi -- 2.7.4 From f10bffab7f162d9474a61d100d0dae4cd1213c3c Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Thu, 19 Aug 2021 11:53:54 +0200 Subject: [PATCH 13/16] utc: increase coverage SwEngine --- test/meson.build | 1 + test/testSwEngine.cpp | 725 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 726 insertions(+) create mode 100644 test/testSwEngine.cpp diff --git a/test/meson.build b/test/meson.build index 11ed926..0cd4d45 100644 --- a/test/meson.build +++ b/test/meson.build @@ -8,6 +8,7 @@ test_file = [ 'testShape.cpp', 'testSwCanvas.cpp', 'testSwCanvasBase.cpp', + 'testSwEngine.cpp', ] tests = executable('tvgUnitTests', diff --git a/test/testSwEngine.cpp b/test/testSwEngine.cpp new file mode 100644 index 0000000..c010847 --- /dev/null +++ b/test/testSwEngine.cpp @@ -0,0 +1,725 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved. + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include "catch.hpp" + +using namespace tvg; + + +TEST_CASE("Basic draw", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Arc Line + auto shape1 = tvg::Shape::gen(); + REQUIRE(shape1); + + REQUIRE(shape1->appendArc(150, 150, 80, 10, 180, false) == Result::Success); + REQUIRE(shape1->stroke(255, 255, 255, 255) == Result::Success); + REQUIRE(shape1->stroke(2) == Result::Success); + REQUIRE(canvas->push(move(shape1)) == Result::Success); + + //Cubic Line + auto shape2 = tvg::Shape::gen(); + REQUIRE(shape2); + + REQUIRE(shape2->moveTo(50, 25) == Result::Success); + REQUIRE(shape2->cubicTo(62, 25, 75, 38, 75, 50) == Result::Success); + REQUIRE(shape2->close() == Result::Success); + REQUIRE(shape2->stroke(1) == Result::Success); + REQUIRE(canvas->push(move(shape2)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("Rect Draw", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Basic shapes and masking + auto basicShape = tvg::Shape::gen(); + REQUIRE(basicShape); + auto basicMask = tvg::Shape::gen(); + REQUIRE(basicMask); + REQUIRE(basicShape->appendRect(0, 0, 50, 50, 0, 0) == Result::Success); + REQUIRE(basicMask->appendRect(10, 10, 30, 30, 0, 0) == Result::Success); + REQUIRE(basicShape->fill(255, 255, 255, 255) == Result::Success); + + auto basicShape2 = std::unique_ptr(static_cast(basicShape->duplicate())); + REQUIRE(basicShape2); + auto basicMask2 = std::unique_ptr(static_cast(basicMask->duplicate())); + REQUIRE(basicMask2); + + auto basicShape3 = std::unique_ptr(static_cast(basicShape->duplicate())); + REQUIRE(basicShape3); + auto basicMask3 = std::unique_ptr(static_cast(basicMask->duplicate())); + REQUIRE(basicMask3); + + auto basicShape4 = std::unique_ptr(static_cast(basicShape->duplicate())); + REQUIRE(basicShape4); + + REQUIRE(basicShape->composite(move(basicMask), tvg::CompositeMethod::AlphaMask) == Result::Success); + REQUIRE(canvas->push(move(basicShape)) == Result::Success); + + REQUIRE(basicShape2->composite(move(basicMask2), tvg::CompositeMethod::InvAlphaMask) == Result::Success); + REQUIRE(canvas->push(move(basicShape2)) == Result::Success); + + REQUIRE(basicShape3->composite(move(basicMask3), tvg::CompositeMethod::ClipPath) == Result::Success); + REQUIRE(canvas->push(move(basicShape3)) == Result::Success); + + REQUIRE(canvas->push(move(basicShape4)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("RLE Rect Draw", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Basic shapes and masking + auto basicShape = tvg::Shape::gen(); + REQUIRE(basicShape); + auto basicMask = tvg::Shape::gen(); + REQUIRE(basicMask); + REQUIRE(basicShape->appendRect(0, 0, 50, 50, 50, 50) == Result::Success); + REQUIRE(basicMask->appendRect(10, 10, 30, 30, 0, 0) == Result::Success); + REQUIRE(basicShape->fill(255, 255, 255, 100) == Result::Success); + + auto basicShape2 = std::unique_ptr(static_cast(basicShape->duplicate())); + REQUIRE(basicShape2); + auto basicMask2 = std::unique_ptr(static_cast(basicMask->duplicate())); + REQUIRE(basicMask2); + + auto basicShape3 = std::unique_ptr(static_cast(basicShape->duplicate())); + REQUIRE(basicShape3); + auto basicMask3 = std::unique_ptr(static_cast(basicMask->duplicate())); + REQUIRE(basicMask3); + + auto basicShape4 = std::unique_ptr(static_cast(basicShape->duplicate())); + REQUIRE(basicShape4); + + REQUIRE(basicShape->composite(move(basicMask), tvg::CompositeMethod::AlphaMask) == Result::Success); + REQUIRE(canvas->push(move(basicShape)) == Result::Success); + + REQUIRE(basicShape2->composite(move(basicMask2), tvg::CompositeMethod::InvAlphaMask) == Result::Success); + REQUIRE(canvas->push(move(basicShape2)) == Result::Success); + + REQUIRE(basicShape3->composite(move(basicMask3), tvg::CompositeMethod::ClipPath) == Result::Success); + REQUIRE(canvas->push(move(basicShape3)) == Result::Success); + + REQUIRE(canvas->push(move(basicShape4)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("Filling Draw", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + REQUIRE(canvas->push(move(shape3)) == Result::Success); + REQUIRE(canvas->push(move(shape4)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("Filling Opaque Draw", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 255}, + {0.2f, 50, 25, 50, 255}, + {0.5f, 100, 100, 100, 255}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + REQUIRE(canvas->push(move(shape3)) == Result::Success); + REQUIRE(canvas->push(move(shape4)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("Filling AlphaMask", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Mask + auto mask = tvg::Shape::gen(); + REQUIRE(mask); + REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + //Scene + auto scene = tvg::Scene::gen(); + REQUIRE(scene); + REQUIRE(scene->push(move(shape3)) == Result::Success); + REQUIRE(scene->push(move(shape4)) == Result::Success); + REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::AlphaMask) == Result::Success); + REQUIRE(canvas->push(move(scene)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("Filling InvAlphaMask", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Mask + auto mask = tvg::Shape::gen(); + REQUIRE(mask); + REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + //Scene + auto scene = tvg::Scene::gen(); + REQUIRE(scene); + REQUIRE(scene->push(move(shape3)) == Result::Success); + REQUIRE(scene->push(move(shape4)) == Result::Success); + REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::InvAlphaMask) == Result::Success); + REQUIRE(canvas->push(move(scene)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("Filling ClipPath", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Mask + auto mask = tvg::Shape::gen(); + REQUIRE(mask); + REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 0, 0) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 0, 0) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + //Scene + auto scene = tvg::Scene::gen(); + REQUIRE(scene); + REQUIRE(scene->push(move(shape3)) == Result::Success); + REQUIRE(scene->push(move(shape4)) == Result::Success); + REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::ClipPath) == Result::Success); + REQUIRE(canvas->push(move(scene)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("RLE Filling Draw", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + REQUIRE(canvas->push(move(shape3)) == Result::Success); + REQUIRE(canvas->push(move(shape4)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("RLE Filling Opaque Draw", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 255}, + {0.2f, 50, 25, 50, 255}, + {0.5f, 100, 100, 100, 255}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + REQUIRE(canvas->push(move(shape3)) == Result::Success); + REQUIRE(canvas->push(move(shape4)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("RLE Filling AlphaMask", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Mask + auto mask = tvg::Shape::gen(); + REQUIRE(mask); + REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + //Scene + auto scene = tvg::Scene::gen(); + REQUIRE(scene); + REQUIRE(scene->push(move(shape3)) == Result::Success); + REQUIRE(scene->push(move(shape4)) == Result::Success); + REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::AlphaMask) == Result::Success); + REQUIRE(canvas->push(move(scene)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("RLE Filling InvAlphaMask", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Mask + auto mask = tvg::Shape::gen(); + REQUIRE(mask); + REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + //Scene + auto scene = tvg::Scene::gen(); + REQUIRE(scene); + REQUIRE(scene->push(move(shape3)) == Result::Success); + REQUIRE(scene->push(move(shape4)) == Result::Success); + REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::InvAlphaMask) == Result::Success); + REQUIRE(canvas->push(move(scene)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} + + +TEST_CASE("RLE Filling ClipPath", "[tvgSwEngine]") +{ + REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); + + auto canvas = SwCanvas::gen(); + REQUIRE(canvas); + + uint32_t buffer[100*100]; + REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success); + + //Fill + auto linearFill = LinearGradient::gen(); + REQUIRE(linearFill); + + auto radialFill = RadialGradient::gen(); + REQUIRE(radialFill); + + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + REQUIRE(linearFill->colorStops(cs, 4) == Result::Success); + REQUIRE(radialFill->colorStops(cs, 4) == Result::Success); + REQUIRE(linearFill->linear(0.0f, 0.0f, 100.0f, 120.0f) == Result::Success); + REQUIRE(radialFill->radial(50.0f, 50.0f, 50.0f) == Result::Success); + + //Mask + auto mask = tvg::Shape::gen(); + REQUIRE(mask); + REQUIRE(mask->appendCircle(50, 50, 50, 50) == Result::Success); + + //Filled Shapes + auto shape3 = tvg::Shape::gen(); + REQUIRE(shape3); + auto shape4 = tvg::Shape::gen(); + REQUIRE(shape4); + REQUIRE(shape3->appendRect(0, 0, 50, 50, 10, 10) == Result::Success); + REQUIRE(shape4->appendRect(50, 0, 50, 50, 10, 10) == Result::Success); + + REQUIRE(shape3->fill(move(linearFill)) == Result::Success); + REQUIRE(shape4->fill(move(radialFill)) == Result::Success); + + //Scene + auto scene = tvg::Scene::gen(); + REQUIRE(scene); + REQUIRE(scene->push(move(shape3)) == Result::Success); + REQUIRE(scene->push(move(shape4)) == Result::Success); + REQUIRE(scene->composite(move(mask), tvg::CompositeMethod::ClipPath) == Result::Success); + REQUIRE(canvas->push(move(scene)) == Result::Success); + + //Draw + REQUIRE(canvas->draw() == Result::Success); + REQUIRE(canvas->sync() == Result::Success); + + REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success); +} -- 2.7.4 From 2ae7852646d8cd840c33d16eaec582b319ee024c Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Thu, 19 Aug 2021 10:57:51 +0200 Subject: [PATCH 14/16] utc: increase coverage of picture and fill --- test/testFill.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- test/testPicture.cpp | 18 ++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/test/testFill.cpp b/test/testFill.cpp index c9bc189..115e051 100644 --- a/test/testFill.cpp +++ b/test/testFill.cpp @@ -124,7 +124,48 @@ TEST_CASE("Radial Filling", "[tvgFill]") REQUIRE(radius == 0.0f); } -TEST_CASE("Filling Dupliction", "[tvgFill]") +TEST_CASE("Linear Filling Dupliction", "[tvgFill]") +{ + auto fill = LinearGradient::gen(); + REQUIRE(fill); + + //Setup + Fill::ColorStop cs[4] = { + {0.0f, 0, 0, 0, 0}, + {0.2f, 50, 25, 50, 25}, + {0.5f, 100, 100, 100, 125}, + {1.0f, 255, 255, 255, 255} + }; + + REQUIRE(fill->colorStops(cs, 4) == Result::Success); + REQUIRE(fill->spread(FillSpread::Reflect) == Result::Success); + REQUIRE(fill->linear(-10.0f, 10.0f, 100.0f, 120.0f) == Result::Success); + + //Duplication + auto dup = unique_ptr(static_cast(fill->duplicate())); + REQUIRE(dup); + + REQUIRE(dup->spread() == FillSpread::Reflect); + + float x1, y1, x2, y2; + REQUIRE(fill->linear(&x1, &y1, &x2, &y2) == Result::Success); + REQUIRE(x1 == -10.0f); + REQUIRE(y1 == 10.0f); + REQUIRE(x2 == 100.0f); + REQUIRE(y2 == 120.0f); + + const Fill::ColorStop* cs2 = nullptr; + REQUIRE(fill->colorStops(&cs2) == 4); + + for (int i = 0; i < 4; ++i) { + REQUIRE(cs[i].offset == cs2[i].offset); + REQUIRE(cs[i].r == cs2[i].r); + REQUIRE(cs[i].g == cs2[i].g); + REQUIRE(cs[i].b == cs2[i].b); + }; +} + +TEST_CASE("Radial Filling Dupliction", "[tvgFill]") { auto fill = RadialGradient::gen(); REQUIRE(fill); @@ -162,4 +203,4 @@ TEST_CASE("Filling Dupliction", "[tvgFill]") REQUIRE(cs[i].g == cs2[i].g); REQUIRE(cs[i].b == cs2[i].b); }; -} \ No newline at end of file +} diff --git a/test/testPicture.cpp b/test/testPicture.cpp index 068deeb..dd0d308 100644 --- a/test/testPicture.cpp +++ b/test/testPicture.cpp @@ -201,6 +201,23 @@ TEST_CASE("Picture Size", "[tvgPicture]") REQUIRE(picture->size(w, h) == Result::Success); } +TEST_CASE("Picture Duplication", "[tvgPicture]") +{ + auto picture = Picture::gen(); + REQUIRE(picture); + + REQUIRE(picture->load(TEST_DIR"/logo.svg") == Result::Success); + REQUIRE(picture->size(100, 100) == Result::Success); + + auto dup = picture->duplicate(); + REQUIRE(dup); + + float w, h; + REQUIRE(picture->size(&w, &h) == Result::Success); + REQUIRE(w == 100); + REQUIRE(h == 100); +} + TEST_CASE("Load SVG file and render", "[tvgPicture]") { REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success); @@ -287,6 +304,7 @@ TEST_CASE("Load RAW file and render", "[tvgPicture]") file.close(); REQUIRE(picture->load(data, 200, 300, false) == Result::Success); + REQUIRE(picture->size(100, 150) == Result::Success); REQUIRE(canvas->push(move(picture)) == Result::Success); -- 2.7.4 From 3d88a26c737b12a7e214de20be5b7bef4560d250 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Fri, 20 Aug 2021 15:56:54 +0900 Subject: [PATCH 15/16] [Tizen] Enable png, jpg loader NUI's Picture class has been added, so png and jpg loaders are required. Change-Id: If246d4105978048ea0d6d8afb3fb7f4314afba0a --- meson_options.txt | 2 +- packaging/thorvg.spec | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/meson_options.txt b/meson_options.txt index 2e352ae..42eb169 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -7,7 +7,7 @@ option('engines', option('loaders', type: 'array', choices: ['', 'svg', 'png', 'jpg', 'tvg_beta'], - value: ['svg', 'tvg_beta'], + value: ['svg', 'png', 'jpg', 'tvg_beta'], description: 'Enable File Loaders in thorvg') option('savers', diff --git a/packaging/thorvg.spec b/packaging/thorvg.spec index 083a38c..1d398a0 100644 --- a/packaging/thorvg.spec +++ b/packaging/thorvg.spec @@ -11,6 +11,8 @@ BuildRequires: pkgconfig BuildRequires: meson BuildRequires: ninja BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(libpng) +BuildRequires: libjpeg-turbo-devel Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig -- 2.7.4 From 50f2655c332e1b26c3c0c409fc8457af9dd9c6d2 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Thu, 26 Aug 2021 11:35:27 +0900 Subject: [PATCH 16/16] disable simd option. it has some corruption issue on tizen mobile emulator until stabilizing it, we turn off it Change-Id: Iaa5aaa3ef270534f4672b4dc241d9b695ad01185 --- meson_options.txt | 2 +- packaging/thorvg.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meson_options.txt b/meson_options.txt index 42eb169..37ab912 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -18,7 +18,7 @@ option('savers', option('vector', type: 'boolean', - value: true, + value: false, description: 'Enable CPU Vectorization(SIMD) in thorvg') option('bindings', diff --git a/packaging/thorvg.spec b/packaging/thorvg.spec index 1d398a0..fc1b74e 100644 --- a/packaging/thorvg.spec +++ b/packaging/thorvg.spec @@ -1,6 +1,6 @@ Name: thorvg Summary: Thor Vector Graphics Library -Version: 0.4.1 +Version: 0.4.2 Release: 1 Group: Graphics System/Rendering Engine License: MIT -- 2.7.4