From af002df5ff0e31401f306e9f6538fa309b180e22 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Thu, 5 Aug 2021 20:05:03 +0900 Subject: [PATCH] tvg_saver: optimize binary format. Skip to save transform data by accumulating them through the scene tree, and then applying the final transform to the path points. Assume that each transform have 36 bytes, it could be increased linear to paints node count if every paints has transform in the worst case. Fudamentally, this save their memory and only remains to Bitmap Pictures, also helps to reduce the loading/rendering workloads since it doesn't need to perform any transform jobs after converting. --- src/examples/images/test.tvg | Bin 302268 -> 302022 bytes src/savers/tvg/tvgTvgSaver.cpp | 98 ++++++++++++++++++++++++--------- src/savers/tvg/tvgTvgSaver.h | 13 +++-- 3 files changed, 80 insertions(+), 31 deletions(-) diff --git a/src/examples/images/test.tvg b/src/examples/images/test.tvg index 5a61851b499660427290f7aa54b3e2ff95bc5ef2..4ea5404e26893bfd11372e95634f7d70b891b1e9 100644 GIT binary patch delta 51201 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 HWBvaCDBnNh delta 51478 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 * rhs->e11 + lhs->e12 * rhs->e21 + lhs->e13 * rhs->e31; + m.e12 = lhs->e11 * rhs->e12 + lhs->e12 * rhs->e22 + lhs->e13 * rhs->e32; + m.e13 = lhs->e11 * rhs->e13 + lhs->e12 * rhs->e23 + lhs->e13 * rhs->e33; + + m.e21 = lhs->e21 * rhs->e11 + lhs->e22 * rhs->e21 + lhs->e23 * rhs->e31; + m.e22 = lhs->e21 * rhs->e12 + lhs->e22 * rhs->e22 + lhs->e23 * rhs->e32; + m.e23 = lhs->e21 * rhs->e13 + lhs->e22 * rhs->e23 + lhs->e23 * rhs->e33; + + m.e31 = lhs->e31 * rhs->e11 + lhs->e32 * rhs->e21 + lhs->e33 * rhs->e31; + m.e32 = lhs->e31 * rhs->e12 + lhs->e32 * rhs->e22 + lhs->e33 * rhs->e32; + m.e33 = lhs->e31 * rhs->e13 + lhs->e32 * rhs->e23 + lhs->e33 * rhs->e33; + + return m; +} + + +static void _multiply(Point* pt, const Matrix* transform) +{ + auto tx = pt->x * transform->e11 + pt->y * transform->e12 + transform->e13; + auto ty = pt->x * transform->e21 + pt->y * transform->e22 + transform->e23; + pt->x = tx; + pt->y = ty; +} + + bool TvgSaver::flushTo(const std::string& path) { FILE* fp = fopen(path.c_str(), "w+"); @@ -45,7 +74,6 @@ bool TvgSaver::flushTo(const std::string& path) fclose(fp); return false; } - fclose(fp); return true; @@ -137,6 +165,19 @@ TvgBinCounter TvgSaver::writeTagProperty(TvgBinTag tag, TvgBinCounter cnt, const } +TvgBinCounter TvgSaver::writeTransform(const Matrix* transform) +{ + if (!transform) return 0; + + if (fabs(transform->e11 - 1) > FLT_EPSILON || fabs(transform->e12) > FLT_EPSILON || fabs(transform->e13) > FLT_EPSILON || + fabs(transform->e21) > FLT_EPSILON || fabs(transform->e22 - 1) > FLT_EPSILON || fabs(transform->e23) > FLT_EPSILON || + fabs(transform->e31) > FLT_EPSILON || fabs(transform->e32) > FLT_EPSILON || fabs(transform->e33 - 1) > FLT_EPSILON) { + return writeTagProperty(TVG_TAG_PAINT_TRANSFORM, SIZE(Matrix), transform); + } + return 0; +} + + TvgBinCounter TvgSaver::serializePaint(const Paint* paint) { TvgBinCounter cnt = 0; @@ -147,14 +188,6 @@ TvgBinCounter TvgSaver::serializePaint(const Paint* paint) cnt += writeTagProperty(TVG_TAG_PAINT_OPACITY, SIZE(opacity), &opacity); } - //transform - auto m = const_cast(paint)->transform(); - if (fabs(m.e11 - 1) > FLT_EPSILON || fabs(m.e12) > FLT_EPSILON || fabs(m.e13) > FLT_EPSILON || - fabs(m.e21) > FLT_EPSILON || fabs(m.e22 - 1) > FLT_EPSILON || fabs(m.e23) > FLT_EPSILON || - fabs(m.e31) > FLT_EPSILON || fabs(m.e32) > FLT_EPSILON || fabs(m.e33 - 1) > FLT_EPSILON) { - cnt += writeTagProperty(TVG_TAG_PAINT_TRANSFORM, SIZE(m), &m); - } - //composite const Paint* cmpTarget = nullptr; auto cmpMethod = paint->composite(&cmpTarget); @@ -166,12 +199,12 @@ TvgBinCounter TvgSaver::serializePaint(const Paint* paint) } -TvgBinCounter TvgSaver::serializeScene(const Scene* scene) +TvgBinCounter TvgSaver::serializeScene(const Scene* scene, const Matrix* transform) { writeTag(TVG_TAG_CLASS_SCENE); reserveCount(); - auto cnt = serializeChildren(scene) + serializePaint(scene); + auto cnt = serializeChildren(scene, transform) + serializePaint(scene); writeReservedCount(cnt); @@ -258,7 +291,7 @@ TvgBinCounter TvgSaver::serializeStroke(const Shape* shape) } -TvgBinCounter TvgSaver::serializePath(const Shape* shape) +TvgBinCounter TvgSaver::serializePath(const Shape* shape, const Matrix* transform) { const PathCommand* cmds = nullptr; auto cmdCnt = shape->pathCommands(&cmds); @@ -280,6 +313,15 @@ TvgBinCounter TvgSaver::serializePath(const Shape* shape) auto cnt = writeData(&cmdCnt, SIZE(cmdCnt)); cnt += writeData(&ptsCnt, SIZE(ptsCnt)); cnt += writeData(outCmds, SIZE(outCmds)); + + //transform? + if (fabs(transform->e11 - 1) > FLT_EPSILON || fabs(transform->e12) > FLT_EPSILON || fabs(transform->e13) > FLT_EPSILON || + fabs(transform->e21) > FLT_EPSILON || fabs(transform->e22 - 1) > FLT_EPSILON || fabs(transform->e23) > FLT_EPSILON || + fabs(transform->e31) > FLT_EPSILON || fabs(transform->e32) > FLT_EPSILON || fabs(transform->e33 - 1) > FLT_EPSILON) { + auto p = const_cast(pts); + for (uint32_t i = 0; i < ptsCnt; ++i) _multiply(p++, transform); + } + cnt += writeData(pts, ptsCnt * SIZE(pts[0])); writeReservedCount(cnt); @@ -288,7 +330,7 @@ TvgBinCounter TvgSaver::serializePath(const Shape* shape) } -TvgBinCounter TvgSaver::serializeShape(const Shape* shape) +TvgBinCounter TvgSaver::serializeShape(const Shape* shape, const Matrix* transform) { writeTag(TVG_TAG_CLASS_SHAPE); reserveCount(); @@ -315,7 +357,7 @@ TvgBinCounter TvgSaver::serializeShape(const Shape* shape) if (color[3] > 0) cnt += writeTagProperty(TVG_TAG_SHAPE_COLOR, SIZE(color), color); } - cnt += serializePath(shape); + cnt += serializePath(shape, transform); cnt += serializePaint(shape); writeReservedCount(cnt); @@ -324,7 +366,7 @@ TvgBinCounter TvgSaver::serializeShape(const Shape* shape) } -TvgBinCounter TvgSaver::serializePicture(const Picture* picture) +TvgBinCounter TvgSaver::serializePicture(const Picture* picture, const Matrix* transform) { writeTag(TVG_TAG_CLASS_PICTURE); reserveCount(); @@ -345,9 +387,12 @@ TvgBinCounter TvgSaver::serializePicture(const Picture* picture) cnt += writeData(&h, sizeCnt); cnt += writeData(pixels, imgSize); cnt += SIZE(TvgBinTag) + SIZE(TvgBinCounter); + + //Only Bitmap picture needs the transform info. + cnt += writeTransform(transform); //Vector Image } else { - cnt += serializeChildren(picture); + cnt += serializeChildren(picture, transform); } cnt += serializePaint(picture); @@ -366,7 +411,7 @@ TvgBinCounter TvgSaver::serializeComposite(const Paint* cmpTarget, CompositeMeth auto flag = static_cast(cmpMethod); auto cnt = writeTagProperty(TVG_TAG_PAINT_CMP_METHOD, SIZE(TvgBinFlag), &flag); - cnt += serialize(cmpTarget); + cnt += serialize(cmpTarget, nullptr); writeReservedCount(cnt); @@ -374,7 +419,7 @@ TvgBinCounter TvgSaver::serializeComposite(const Paint* cmpTarget, CompositeMeth } -TvgBinCounter TvgSaver::serializeChildren(const Paint* paint) +TvgBinCounter TvgSaver::serializeChildren(const Paint* paint, const Matrix* transform) { auto it = this->iterator(paint); if (!it) return 0; @@ -382,7 +427,7 @@ TvgBinCounter TvgSaver::serializeChildren(const Paint* paint) TvgBinCounter cnt = 0; while (auto p = it->next()) - cnt += serialize(p); + cnt += serialize(p, transform); delete(it); @@ -390,14 +435,17 @@ TvgBinCounter TvgSaver::serializeChildren(const Paint* paint) } -TvgBinCounter TvgSaver::serialize(const Paint* paint) +TvgBinCounter TvgSaver::serialize(const Paint* paint, const Matrix* transform) { if (!paint) return 0; + auto m = const_cast(paint)->transform(); + if (transform) m = _multiply(transform, &m); + switch (paint->id()) { - case TVG_CLASS_ID_SHAPE: return serializeShape(static_cast(paint)); - case TVG_CLASS_ID_SCENE: return serializeScene(static_cast(paint)); - case TVG_CLASS_ID_PICTURE: return serializePicture(static_cast(paint)); + case TVG_CLASS_ID_SHAPE: return serializeShape(static_cast(paint), &m); + case TVG_CLASS_ID_SCENE: return serializeScene(static_cast(paint), &m); + case TVG_CLASS_ID_PICTURE: return serializePicture(static_cast(paint), &m); } return 0; @@ -407,7 +455,7 @@ TvgBinCounter TvgSaver::serialize(const Paint* paint) void TvgSaver::run(unsigned tid) { if (!writeHeader()) return; - if (serialize(paint) == 0) return; + if (serialize(paint, nullptr) == 0) return; if (!flushTo(path)) return; } @@ -457,4 +505,4 @@ bool TvgSaver::save(Paint* paint, const string& path) TaskScheduler::request(this); return true; -} \ No newline at end of file +} diff --git a/src/savers/tvg/tvgTvgSaver.h b/src/savers/tvg/tvgTvgSaver.h index 6f800eec..fb8190ba 100644 --- a/src/savers/tvg/tvgTvgSaver.h +++ b/src/savers/tvg/tvgTvgSaver.h @@ -47,17 +47,18 @@ private: void writeReservedCount(TvgBinCounter cnt); TvgBinCounter writeData(const void* data, TvgBinCounter cnt); TvgBinCounter writeTagProperty(TvgBinTag tag, TvgBinCounter cnt, const void* data); + TvgBinCounter writeTransform(const Matrix* transform); - TvgBinCounter serialize(const Paint* paint); + TvgBinCounter serialize(const Paint* paint, const Matrix* transform); + TvgBinCounter serializeScene(const Scene* scene, const Matrix* transform); + TvgBinCounter serializeShape(const Shape* shape, const Matrix* transform); + TvgBinCounter serializePicture(const Picture* picture, const Matrix* transform); TvgBinCounter serializePaint(const Paint* paint); - TvgBinCounter serializeScene(const Scene* scene); - TvgBinCounter serializeShape(const Shape* shape); - TvgBinCounter serializePicture(const Picture* picture); TvgBinCounter serializeFill(const Fill* fill, TvgBinTag tag); TvgBinCounter serializeStroke(const Shape* shape); - TvgBinCounter serializePath(const Shape* shape); + TvgBinCounter serializePath(const Shape* shape, const Matrix* transform); TvgBinCounter serializeComposite(const Paint* cmpTarget, CompositeMethod cmpMethod); - TvgBinCounter serializeChildren(const Paint* paint); + TvgBinCounter serializeChildren(const Paint* paint, const Matrix* transform); public: ~TvgSaver();