From f62767988247f3a61948b72a1679e3bc5044ec58 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Mon, 15 Jun 2020 21:01:46 +0900 Subject: [PATCH] common initializer: replace engine class with intializer This initializer will take over the global environments of tvg engines. Change-Id: I7b99973dafaea57ddd3134800bd442ef4dc319ae --- inc/tizenvg.h | 67 ++++++++++--------- src/lib/meson.build | 2 +- src/lib/{tvgEngine.cpp => tvgInitializer.cpp} | 43 ++++++------ src/lib/tvgRenderCommon.h | 14 ++-- test/testBlending.cpp | 4 +- test/testBoundary.cpp | 4 +- test/testComposition.cpp | 4 +- test/testDirectUpdate.cpp | 4 +- test/testGradient.cpp | 4 +- test/testGradientTransform.cpp | 4 +- test/testLinearGradient.cpp | 4 +- test/testMultiShapes.cpp | 4 +- test/testPath.cpp | 4 +- test/testPathCopy.cpp | 4 +- test/testRadialGradient.cpp | 4 +- test/testScene.cpp | 4 +- test/testSceneTransform.cpp | 4 +- test/testShape.cpp | 4 +- test/testStroke.cpp | 4 +- test/testStrokeLine.cpp | 4 +- test/testTransform.cpp | 4 +- test/testUpdate.cpp | 4 +- 22 files changed, 102 insertions(+), 96 deletions(-) rename src/lib/{tvgEngine.cpp => tvgInitializer.cpp} (58%) diff --git a/inc/tizenvg.h b/inc/tizenvg.h index 044cdfeb..abb08d67 100644 --- a/inc/tizenvg.h +++ b/inc/tizenvg.h @@ -69,7 +69,7 @@ enum class TVG_EXPORT PathCommand { Close = 0, MoveTo, LineTo, CubicTo }; enum class TVG_EXPORT StrokeCap { Square = 0, Round, Butt }; enum class TVG_EXPORT StrokeJoin { Bevel = 0, Round, Miter }; enum class TVG_EXPORT FillSpread { Pad = 0, Reflect, Repeat }; - +enum class TVG_EXPORT CanvasEngine { Sw = 0, Gl }; struct Point { @@ -130,6 +130,34 @@ public: }; +/** + * @class Canvas + * + * @ingroup TizenVG + * + * @brief description... + * + */ +class TVG_EXPORT Canvas +{ +public: + Canvas(RenderMethod*); + virtual ~Canvas(); + + Result reserve(uint32_t n) noexcept; + virtual Result push(std::unique_ptr paint) noexcept; + virtual Result clear() noexcept; + virtual Result update() noexcept; + virtual Result update(Paint* paint) noexcept; + virtual Result draw(bool async = true) noexcept; + virtual Result sync() = 0; + + _TVG_DECLARE_ACCESSOR(Scene); + _TVG_DECLARE_PRIVATE(Canvas); +}; + + + /** * @class LinearGradient * @@ -174,32 +202,6 @@ public: }; -/** - * @class Canvas - * - * @ingroup TizenVG - * - * @brief description... - * - */ -class TVG_EXPORT Canvas -{ -public: - Canvas(RenderMethod*); - virtual ~Canvas(); - - Result reserve(uint32_t n) noexcept; - virtual Result push(std::unique_ptr paint) noexcept; - virtual Result clear() noexcept; - virtual Result update() noexcept; - virtual Result update(Paint* paint) noexcept; - virtual Result draw(bool async = true) noexcept; - virtual Result sync() = 0; - - _TVG_DECLARE_ACCESSOR(Scene); - _TVG_DECLARE_PRIVATE(Canvas); -}; - /** * @class Shape @@ -277,7 +279,7 @@ class TVG_EXPORT Scene final : public Paint public: ~Scene(); - Result push(std::unique_ptr shape) noexcept; + Result push(std::unique_ptr paint) noexcept; Result reserve(uint32_t size) noexcept; Result rotate(float degree) noexcept override; @@ -347,9 +349,10 @@ public: * @brief description... * */ -class TVG_EXPORT Engine final +class TVG_EXPORT Initializer final { public: + /** * @brief ... * @@ -361,10 +364,10 @@ public: * * @see ... */ - static Result init() noexcept; - static Result term() noexcept; + static Result init(CanvasEngine engine) noexcept; + static Result term(CanvasEngine engine) noexcept; - _TVG_DISABLE_CTOR(Engine); + _TVG_DISABLE_CTOR(Initializer); }; } //namespace diff --git a/src/lib/meson.build b/src/lib/meson.build index 5aba9bb1..c936501b 100644 --- a/src/lib/meson.build +++ b/src/lib/meson.build @@ -9,9 +9,9 @@ source_file = [ 'tvgShapePath.h', 'tvgShapeImpl.h', 'tvgCanvas.cpp', - 'tvgEngine.cpp', 'tvgFill.cpp', 'tvgGlCanvas.cpp', + 'tvgInitializer.cpp', 'tvgLinearGradient.cpp', 'tvgRadialGradient.cpp', 'tvgScene.cpp', diff --git a/src/lib/tvgEngine.cpp b/src/lib/tvgInitializer.cpp similarity index 58% rename from src/lib/tvgEngine.cpp rename to src/lib/tvgInitializer.cpp index 5038cb80..ac6ce3ab 100644 --- a/src/lib/tvgEngine.cpp +++ b/src/lib/tvgInitializer.cpp @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef _TVG_ENGINE_CPP_ -#define _TVG_ENGINE_CPP_ +#ifndef _TVG_INITIALIZER_CPP_ +#define _TVG_INITIALIZER_CPP_ #include "tvgCommon.h" #include "tvgSwRenderer.h" @@ -24,39 +24,42 @@ /************************************************************************/ /* Internal Class Implementation */ /************************************************************************/ -static bool initialized = false; - - /************************************************************************/ /* External Class Implementation */ /************************************************************************/ -Result Engine::init() noexcept +Result Initializer::init(CanvasEngine engine) noexcept { - if (initialized) return Result::InsufficientCondition; + if (engine == CanvasEngine::Sw) { + if (!SwRenderer::init()) return Result::InsufficientCondition; + } else if (engine == CanvasEngine::Gl) { + if (!GlRenderer::init()) return Result::InsufficientCondition; + } else { + return Result::InvalidArguments; + } - //TODO: Initialize Raster engines by configuration. - SwRenderer::init(); - GlRenderer::init(); - - initialized = true; + //TODO: check modules then enable them + //1. TVG + //2. SVG return Result::Success; } -Result Engine::term() noexcept +Result Initializer::term(CanvasEngine engine) noexcept { - if (!initialized) return Result::InsufficientCondition; + //TODO: deinitialize modules - //TODO: Terminate only allowed engines. - SwRenderer::term(); - GlRenderer::term(); - - initialized = false; + if (engine == CanvasEngine::Sw) { + if (!SwRenderer::term()) return Result::InsufficientCondition; + } else if (engine == CanvasEngine::Gl) { + if (!GlRenderer::term()) return Result::InsufficientCondition; + } else { + return Result::InvalidArguments; + } return Result::Success; } -#endif /* _TVG_ENGINE_CPP_ */ +#endif /* _TVG_INITIALIZER_CPP_ */ diff --git a/src/lib/tvgRenderCommon.h b/src/lib/tvgRenderCommon.h index f89d9492..a581067b 100644 --- a/src/lib/tvgRenderCommon.h +++ b/src/lib/tvgRenderCommon.h @@ -136,28 +136,28 @@ struct RenderInitializer uint32_t refCnt = 0; bool initialized = false; - static int init(RenderInitializer& renderInit, RenderMethod* engine) + static bool init(RenderInitializer& renderInit, RenderMethod* engine) { assert(engine); - if (renderInit.pInst || renderInit.refCnt > 0) return -1; + if (renderInit.pInst || renderInit.refCnt > 0) return false; renderInit.pInst = engine; renderInit.refCnt = 0; renderInit.initialized = true; - return 0; + return true; } - static int term(RenderInitializer& renderInit) + static bool term(RenderInitializer& renderInit) { - if (!renderInit.pInst || !renderInit.initialized) return -1; + if (!renderInit.pInst || !renderInit.initialized) return false; renderInit.initialized = false; //Still it's refered.... - if (renderInit.refCnt > 0) return 0; + if (renderInit.refCnt > 0) return true; delete(renderInit.pInst); renderInit.pInst = nullptr; - return 0; + return true; } static uint32_t unref(RenderInitializer& renderInit) diff --git a/test/testBlending.cpp b/test/testBlending.cpp index 58ae0251..a5559d49 100644 --- a/test/testBlending.cpp +++ b/test/testBlending.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -63,7 +63,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testBoundary.cpp b/test/testBoundary.cpp index c5d39f62..701bb840 100644 --- a/test/testBoundary.cpp +++ b/test/testBoundary.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -53,7 +53,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testComposition.cpp b/test/testComposition.cpp index 57a8e435..d8ca9794 100644 --- a/test/testComposition.cpp +++ b/test/testComposition.cpp @@ -10,7 +10,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; int main(int argc, char **argv) { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Composition Source Canvas auto canvas1 = tvg::SwCanvas::gen(buffer, WIDTH, HEIGHT); @@ -31,5 +31,5 @@ int main(int argc, char **argv) canvas2->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } diff --git a/test/testDirectUpdate.cpp b/test/testDirectUpdate.cpp index e1a4c608..eb3a9dc6 100644 --- a/test/testDirectUpdate.cpp +++ b/test/testDirectUpdate.cpp @@ -69,7 +69,7 @@ win_del(void *data, Evas_Object *o, void *ev) int main(int argc, char **argv) { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); tvgtest(); @@ -100,5 +100,5 @@ int main(int argc, char **argv) elm_shutdown(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } diff --git a/test/testGradient.cpp b/test/testGradient.cpp index 6a7b6ba7..cf33a1ef 100644 --- a/test/testGradient.cpp +++ b/test/testGradient.cpp @@ -10,7 +10,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; int main(int argc, char **argv) { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(buffer, WIDTH, HEIGHT); @@ -48,5 +48,5 @@ int main(int argc, char **argv) canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } diff --git a/test/testGradientTransform.cpp b/test/testGradientTransform.cpp index 0b4b677c..90fab168 100644 --- a/test/testGradientTransform.cpp +++ b/test/testGradientTransform.cpp @@ -135,7 +135,7 @@ win_del(void *data, Evas_Object *o, void *ev) int main(int argc, char **argv) { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); tvgtest(); @@ -166,5 +166,5 @@ int main(int argc, char **argv) elm_shutdown(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } diff --git a/test/testLinearGradient.cpp b/test/testLinearGradient.cpp index 08cdb667..decf263d 100644 --- a/test/testLinearGradient.cpp +++ b/test/testLinearGradient.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -81,7 +81,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testMultiShapes.cpp b/test/testMultiShapes.cpp index 25393822..e6db3bb7 100644 --- a/test/testMultiShapes.cpp +++ b/test/testMultiShapes.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -41,7 +41,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testPath.cpp b/test/testPath.cpp index c2ca8754..3d520037 100644 --- a/test/testPath.cpp +++ b/test/testPath.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -56,7 +56,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testPathCopy.cpp b/test/testPathCopy.cpp index 28d19eb9..8ce33c3c 100644 --- a/test/testPathCopy.cpp +++ b/test/testPathCopy.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -96,7 +96,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testRadialGradient.cpp b/test/testRadialGradient.cpp index f9ed87d5..b50204b8 100644 --- a/test/testRadialGradient.cpp +++ b/test/testRadialGradient.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -81,7 +81,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testScene.cpp b/test/testScene.cpp index f7c9ea5b..e134237f 100644 --- a/test/testScene.cpp +++ b/test/testScene.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -87,7 +87,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testSceneTransform.cpp b/test/testSceneTransform.cpp index 975f4faf..11dade09 100644 --- a/test/testSceneTransform.cpp +++ b/test/testSceneTransform.cpp @@ -129,7 +129,7 @@ win_del(void *data, Evas_Object *o, void *ev) int main(int argc, char **argv) { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); tvgtest(); @@ -159,5 +159,5 @@ int main(int argc, char **argv) elm_shutdown(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } diff --git a/test/testShape.cpp b/test/testShape.cpp index 8cff17d2..16fc1a0e 100644 --- a/test/testShape.cpp +++ b/test/testShape.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -35,7 +35,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testStroke.cpp b/test/testStroke.cpp index b17c3a10..a7ae5d09 100644 --- a/test/testStroke.cpp +++ b/test/testStroke.cpp @@ -12,7 +12,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -80,7 +80,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testStrokeLine.cpp b/test/testStrokeLine.cpp index 1288c075..61e035e5 100644 --- a/test/testStrokeLine.cpp +++ b/test/testStrokeLine.cpp @@ -11,7 +11,7 @@ static uint32_t buffer[WIDTH * HEIGHT]; void tvgtest() { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); //Create a Canvas auto canvas = tvg::SwCanvas::gen(); @@ -116,7 +116,7 @@ void tvgtest() canvas->sync(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } void diff --git a/test/testTransform.cpp b/test/testTransform.cpp index 0a126cc5..a99708d0 100644 --- a/test/testTransform.cpp +++ b/test/testTransform.cpp @@ -98,7 +98,7 @@ win_del(void *data, Evas_Object *o, void *ev) int main(int argc, char **argv) { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); tvgtest(); @@ -129,5 +129,5 @@ int main(int argc, char **argv) elm_shutdown(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); } diff --git a/test/testUpdate.cpp b/test/testUpdate.cpp index 453b47c0..0ee9412d 100644 --- a/test/testUpdate.cpp +++ b/test/testUpdate.cpp @@ -59,7 +59,7 @@ win_del(void *data, Evas_Object *o, void *ev) int main(int argc, char **argv) { //Initialize TizenVG Engine - tvg::Engine::init(); + tvg::Initializer::init(tvg::CanvasEngine::Sw); tvgtest(); @@ -90,5 +90,5 @@ int main(int argc, char **argv) elm_shutdown(); //Terminate TizenVG Engine - tvg::Engine::term(); + tvg::Initializer::term(tvg::CanvasEngine::Sw); }