From b12869221cbdfa9ecd56a1306debfaf3e5dcb770 Mon Sep 17 00:00:00 2001 From: Mateusz Palkowski Date: Thu, 11 Mar 2021 13:52:24 +0100 Subject: [PATCH] Added png loading example --- src/examples/LoadPng.cpp | 126 ++++++++++++++++++++++++++++++++++++++++++ src/examples/meson.build | 1 + src/examples/pngs/samsung.png | Bin 0 -> 38487 bytes 3 files changed, 127 insertions(+) create mode 100644 src/examples/LoadPng.cpp create mode 100644 src/examples/pngs/samsung.png diff --git a/src/examples/LoadPng.cpp b/src/examples/LoadPng.cpp new file mode 100644 index 0000000..dad51ba --- /dev/null +++ b/src/examples/LoadPng.cpp @@ -0,0 +1,126 @@ +#include "Common.h" +#include +/************************************************************************/ +/* Drawing Commands */ +/************************************************************************/ + +void tvgDrawCmds(tvg::Canvas* canvas) +{ + if (!canvas) return; + + for (int i = 0; i < 40; ++i) { + auto png = tvg::Picture::gen(); + if (png->load(EXAMPLE_DIR"/../pngs/samsung.png") != tvg::Result::Success) return; + png->translate(i* 5, i * 10); + png->rotate(10 * i); + if (canvas->push(move(png)) != tvg::Result::Success) return; + } + // if (canvas->push(move(png3)) != tvg::Result::Success) return; +} + + +/************************************************************************/ +/* Sw Engine Test Code */ +/************************************************************************/ + +static unique_ptr swCanvas; + +void tvgSwTest(uint32_t* buffer) +{ + //Create a Canvas + swCanvas = tvg::SwCanvas::gen(); + swCanvas->target(buffer, WIDTH, WIDTH, HEIGHT, tvg::SwCanvas::ARGB8888); + + /* Push the shape into the Canvas drawing list + When this shape is into the canvas list, the shape could update & prepare + internal data asynchronously for coming rendering. + Canvas keeps this shape node unless user call canvas->clear() */ + tvgDrawCmds(swCanvas.get()); +} + +void drawSwView(void* data, Eo* obj) +{ + if (swCanvas->draw() == tvg::Result::Success) { + swCanvas->sync(); + } +} + + +/************************************************************************/ +/* GL Engine Test Code */ +/************************************************************************/ + +static unique_ptr glCanvas; + +void initGLview(Evas_Object *obj) +{ + static constexpr auto BPP = 4; + + //Create a Canvas + glCanvas = tvg::GlCanvas::gen(); + glCanvas->target(nullptr, WIDTH * BPP, WIDTH, HEIGHT); + + /* Push the shape into the Canvas drawing list + When this shape is into the canvas list, the shape could update & prepare + internal data asynchronously for coming rendering. + Canvas keeps this shape node unless user call canvas->clear() */ + tvgDrawCmds(glCanvas.get()); +} + +void drawGLview(Evas_Object *obj) +{ + auto gl = elm_glview_gl_api_get(obj); + gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + gl->glClear(GL_COLOR_BUFFER_BIT); + + if (glCanvas->draw() == tvg::Result::Success) { + glCanvas->sync(); + } +} + + +/************************************************************************/ +/* Main Code */ +/************************************************************************/ + +int main(int argc, char **argv) +{ + tvg::CanvasEngine tvgEngine = tvg::CanvasEngine::Sw; + + if (argc > 1) { + if (!strcmp(argv[1], "gl")) tvgEngine = tvg::CanvasEngine::Gl; + } + + //Initialize ThorVG Engine + if (tvgEngine == tvg::CanvasEngine::Sw) { + cout << "tvg engine: software" << endl; + } else { + cout << "tvg engine: opengl" << endl; + } + + //Threads Count + auto threads = std::thread::hardware_concurrency(); + + //Initialize ThorVG Engine + if (tvg::Initializer::init(tvgEngine, threads) == tvg::Result::Success) { + + elm_init(argc, argv); + + if (tvgEngine == tvg::CanvasEngine::Sw) { + createSwView(); + } else { + createGlView(); + } + + elm_run(); + elm_shutdown(); + + //Terminate ThorVG Engine + tvg::Initializer::term(tvg::CanvasEngine::Sw); + + + } else { + cout << "engine is not supported" << endl; + } + return 0; +} diff --git a/src/examples/meson.build b/src/examples/meson.build index 7124a84..4d2ae0c 100644 --- a/src/examples/meson.build +++ b/src/examples/meson.build @@ -36,6 +36,7 @@ source_file = [ 'InvMasking.cpp', 'GradientMasking.cpp', 'AnimateMasking.cpp', + 'LoadPng.cpp', ] foreach current_file : source_file diff --git a/src/examples/pngs/samsung.png b/src/examples/pngs/samsung.png new file mode 100644 index 0000000000000000000000000000000000000000..814659ebd25533a20249aa2ca9822c4548e107d5 GIT binary patch literal 38487 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