From 7be4bf4c4f9e1acb884fdf203a4b96fb3a8282b7 Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Wed, 25 Aug 2021 14:36:35 +0200 Subject: [PATCH] wasm: intoduce saveTvg via File System API This patch adds saveTvg() function into thorvgwasm.cpp. Functions saves tvg using File System API. To enable fs, changed build flag: -s FORCE_FILESYSTEM=1. Increase in result thorvg-wasm.js size: about 68kB to about 125kB. --- src/wasm/thorvgwasm.cpp | 23 ++++++++++++++++++++++- wasm_cross.txt | 4 ++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/wasm/thorvgwasm.cpp b/src/wasm/thorvgwasm.cpp index f709a8f1..be81e604 100644 --- a/src/wasm/thorvgwasm.cpp +++ b/src/wasm/thorvgwasm.cpp @@ -139,6 +139,25 @@ public: return val(typed_memory_view(mWidth * mHeight * 4, mBuffer.get())); } + bool saveTvg() + { + mErrorMsg = "None"; + + auto saver = tvg::Saver::gen(); + auto duplicate = unique_ptr(static_cast(mPicture->duplicate())); + if (!saver || !duplicate) { + mErrorMsg = "Saving initialization failed"; + return false; + } + if (saver->save(move(duplicate), "file.tvg") != tvg::Result::Success) { + mErrorMsg = "Tvg saving failed"; + return false; + } + saver->sync(); + + return true; + } + private: explicit ThorvgWasm() { @@ -183,5 +202,7 @@ EMSCRIPTEN_BINDINGS(thorvg_bindings) { .function("getDefaultData", &ThorvgWasm::getDefaultData, allow_raw_pointers()) .function("load", &ThorvgWasm::load) .function("update", &ThorvgWasm::update) - .function("render", &ThorvgWasm::render); + .function("render", &ThorvgWasm::render) + + .function("saveTvg", &ThorvgWasm::saveTvg); } diff --git a/wasm_cross.txt b/wasm_cross.txt index eaf7e162..6d72bb73 100644 --- a/wasm_cross.txt +++ b/wasm_cross.txt @@ -5,8 +5,8 @@ ar = 'EMSDK:upstream/emscripten/emar.py' [properties] root = 'EMSDK:upstream/emscripten/system' -cpp_args = ['--bind' , '-s' , 'WASM=1' , '-s' , 'ALLOW_MEMORY_GROWTH=1' , '-s' , 'FILESYSTEM=0' , '-O2'] -cpp_link_args = ['--bind' , '-s' , 'WASM=1' , '-s' , 'ALLOW_MEMORY_GROWTH=1' , '-s' , 'FILESYSTEM=0' , '-O2'] +cpp_args = ['--bind' , '-s' , 'WASM=1' , '-s' , 'ALLOW_MEMORY_GROWTH=1' , '-s' , 'FORCE_FILESYSTEM=1' , '-O2'] +cpp_link_args = ['--bind' , '-s' , 'WASM=1' , '-s' , 'ALLOW_MEMORY_GROWTH=1' , '-s' , 'FORCE_FILESYSTEM=1' , '-O2'] shared_lib_suffix = 'js' static_lib_suffix = 'js' shared_module_suffix = 'js'