From 8efef7714c17dc615b1dc13537b9c423ac6b9ec0 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 21 Aug 2020 15:56:04 +0900 Subject: [PATCH] common initializer: don't try initialize engine duplicatedly. Change-Id: I58c715745b8db40fe759582545082f2e6e10626a --- inc/thorvg.h | 2 +- src/lib/tvgInitializer.cpp | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/inc/thorvg.h b/inc/thorvg.h index 0de9bc02..16252fe9 100644 --- a/inc/thorvg.h +++ b/inc/thorvg.h @@ -56,7 +56,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 }; +enum class TVG_EXPORT CanvasEngine { Sw = (1 << 1), Gl = (1 << 2)}; struct Point diff --git a/src/lib/tvgInitializer.cpp b/src/lib/tvgInitializer.cpp index 17b91a00..7dcc8b91 100644 --- a/src/lib/tvgInitializer.cpp +++ b/src/lib/tvgInitializer.cpp @@ -34,7 +34,7 @@ /************************************************************************/ /* Internal Class Implementation */ /************************************************************************/ - +static bool initialized = false; /************************************************************************/ /* External Class Implementation */ @@ -42,14 +42,16 @@ Result Initializer::init(CanvasEngine engine, uint32_t threads) noexcept { + if (initialized) return Result::InsufficientCondition; + auto nonSupport = true; - if (engine == CanvasEngine::Sw) { + if (static_cast(engine) & static_cast(CanvasEngine::Sw)) { #ifdef THORVG_SW_RASTER_SUPPORT if (!SwRenderer::init()) return Result::InsufficientCondition; nonSupport = false; #endif - } else if (engine == CanvasEngine::Gl) { + } else if (static_cast(engine) & static_cast(CanvasEngine::Gl)) { #ifdef THORVG_GL_RASTER_SUPPORT if (!GlRenderer::init()) return Result::InsufficientCondition; nonSupport = false; @@ -64,20 +66,24 @@ Result Initializer::init(CanvasEngine engine, uint32_t threads) noexcept TaskScheduler::init(threads); + initialized = true; + return Result::Success; } Result Initializer::term(CanvasEngine engine) noexcept { + if (!initialized) return Result::InsufficientCondition; + auto nonSupport = true; - if (engine == CanvasEngine::Sw) { + if (static_cast(engine) & static_cast(CanvasEngine::Sw)) { #ifdef THORVG_SW_RASTER_SUPPORT if (!SwRenderer::term()) return Result::InsufficientCondition; nonSupport = false; #endif - } else if (engine == CanvasEngine::Gl) { + } else if (static_cast(engine) & static_cast(CanvasEngine::Gl)) { #ifdef THORVG_GL_RASTER_SUPPORT if (!GlRenderer::term()) return Result::InsufficientCondition; nonSupport = false; @@ -92,5 +98,7 @@ Result Initializer::term(CanvasEngine engine) noexcept if (!LoaderMgr::term()) return Result::Unknown; + initialized = false; + return Result::Success; } \ No newline at end of file