common initializer: don't try initialize engine duplicatedly.

Change-Id: I58c715745b8db40fe759582545082f2e6e10626a
This commit is contained in:
Hermet Park 2020-08-21 15:56:04 +09:00
parent 657e6daddb
commit 8efef7714c
2 changed files with 14 additions and 6 deletions

View file

@ -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 StrokeCap { Square = 0, Round, Butt };
enum class TVG_EXPORT StrokeJoin { Bevel = 0, Round, Miter }; enum class TVG_EXPORT StrokeJoin { Bevel = 0, Round, Miter };
enum class TVG_EXPORT FillSpread { Pad = 0, Reflect, Repeat }; 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 struct Point

View file

@ -34,7 +34,7 @@
/************************************************************************/ /************************************************************************/
/* Internal Class Implementation */ /* Internal Class Implementation */
/************************************************************************/ /************************************************************************/
static bool initialized = false;
/************************************************************************/ /************************************************************************/
/* External Class Implementation */ /* External Class Implementation */
@ -42,14 +42,16 @@
Result Initializer::init(CanvasEngine engine, uint32_t threads) noexcept Result Initializer::init(CanvasEngine engine, uint32_t threads) noexcept
{ {
if (initialized) return Result::InsufficientCondition;
auto nonSupport = true; auto nonSupport = true;
if (engine == CanvasEngine::Sw) { if (static_cast<uint32_t>(engine) & static_cast<uint32_t>(CanvasEngine::Sw)) {
#ifdef THORVG_SW_RASTER_SUPPORT #ifdef THORVG_SW_RASTER_SUPPORT
if (!SwRenderer::init()) return Result::InsufficientCondition; if (!SwRenderer::init()) return Result::InsufficientCondition;
nonSupport = false; nonSupport = false;
#endif #endif
} else if (engine == CanvasEngine::Gl) { } else if (static_cast<uint32_t>(engine) & static_cast<uint32_t>(CanvasEngine::Gl)) {
#ifdef THORVG_GL_RASTER_SUPPORT #ifdef THORVG_GL_RASTER_SUPPORT
if (!GlRenderer::init()) return Result::InsufficientCondition; if (!GlRenderer::init()) return Result::InsufficientCondition;
nonSupport = false; nonSupport = false;
@ -64,20 +66,24 @@ Result Initializer::init(CanvasEngine engine, uint32_t threads) noexcept
TaskScheduler::init(threads); TaskScheduler::init(threads);
initialized = true;
return Result::Success; return Result::Success;
} }
Result Initializer::term(CanvasEngine engine) noexcept Result Initializer::term(CanvasEngine engine) noexcept
{ {
if (!initialized) return Result::InsufficientCondition;
auto nonSupport = true; auto nonSupport = true;
if (engine == CanvasEngine::Sw) { if (static_cast<uint32_t>(engine) & static_cast<uint32_t>(CanvasEngine::Sw)) {
#ifdef THORVG_SW_RASTER_SUPPORT #ifdef THORVG_SW_RASTER_SUPPORT
if (!SwRenderer::term()) return Result::InsufficientCondition; if (!SwRenderer::term()) return Result::InsufficientCondition;
nonSupport = false; nonSupport = false;
#endif #endif
} else if (engine == CanvasEngine::Gl) { } else if (static_cast<uint32_t>(engine) & static_cast<uint32_t>(CanvasEngine::Gl)) {
#ifdef THORVG_GL_RASTER_SUPPORT #ifdef THORVG_GL_RASTER_SUPPORT
if (!GlRenderer::term()) return Result::InsufficientCondition; if (!GlRenderer::term()) return Result::InsufficientCondition;
nonSupport = false; nonSupport = false;
@ -92,5 +98,7 @@ Result Initializer::term(CanvasEngine engine) noexcept
if (!LoaderMgr::term()) return Result::Unknown; if (!LoaderMgr::term()) return Result::Unknown;
initialized = false;
return Result::Success; return Result::Success;
} }