common initializer: replace engine class with intializer

This initializer will take over the global environments of tvg engines.

Change-Id: I7b99973dafaea57ddd3134800bd442ef4dc319ae
This commit is contained in:
Hermet Park 2020-06-15 21:01:46 +09:00
parent fb208defed
commit f627679882
22 changed files with 102 additions and 96 deletions

View file

@ -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> 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> 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<Paint> shape) noexcept;
Result push(std::unique_ptr<Paint> 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

View file

@ -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',

View file

@ -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_ */

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);
}

View file

@ -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);
}