-/*\r
- * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.\r
-\r
- * Permission is hereby granted, free of charge, to any person obtaining a copy\r
- * of this software and associated documentation files (the "Software"), to deal\r
- * in the Software without restriction, including without limitation the rights\r
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
- * copies of the Software, and to permit persons to whom the Software is\r
- * furnished to do so, subject to the following conditions:\r
-\r
- * The above copyright notice and this permission notice shall be included in all\r
- * copies or substantial portions of the Software.\r
-\r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
- * SOFTWARE.\r
- */\r
-\r
-#ifndef _TVG_GL_COMMON_H_\r
-#define _TVG_GL_COMMON_H_\r
-\r
-#include <assert.h>\r
-#include <GLES2/gl2.h>\r
-#include "tvgCommon.h"\r
-#include "tvgRender.h"\r
-\r
-\r
-#define GL_CHECK(x) \\r
- x; \\r
- do { \\r
- GLenum glError = glGetError(); \\r
- if(glError != GL_NO_ERROR) { \\r
- TVGERR("GL_ENGINE", "glGetError() = %i (0x%.8x)", glError, glError); \\r
- assert(0); \\r
- } \\r
- } while(0)\r
-\r
-#define EGL_CHECK(x) \\r
- x; \\r
- do { \\r
- EGLint eglError = eglGetError(); \\r
- if(eglError != EGL_SUCCESS) { \\r
- TVGERR("GL_ENGINE", "eglGetError() = %i (0x%.8x)", eglError, eglError); \\r
- assert(0); \\r
- } \\r
- } while(0)\r
-\r
-\r
-class GlGeometry;\r
-\r
-struct GlShape\r
-{\r
- const Shape* shape = nullptr;\r
- float viewWd;\r
- float viewHt;\r
- RenderUpdateFlag updateFlag = None;\r
- unique_ptr<GlGeometry> geometry;\r
-};\r
-\r
-\r
-#endif /* _TVG_GL_COMMON_H_ */\r
+/*
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _TVG_GL_COMMON_H_
+#define _TVG_GL_COMMON_H_
+
+#include <assert.h>
+#include <GLES2/gl2.h>
+#include "tvgCommon.h"
+#include "tvgRender.h"
+
+
+#define GL_CHECK(x) \
+ x; \
+ do { \
+ GLenum glError = glGetError(); \
+ if(glError != GL_NO_ERROR) { \
+ TVGERR("GL_ENGINE", "glGetError() = %i (0x%.8x)", glError, glError); \
+ assert(0); \
+ } \
+ } while(0)
+
+#define EGL_CHECK(x) \
+ x; \
+ do { \
+ EGLint eglError = eglGetError(); \
+ if(eglError != EGL_SUCCESS) { \
+ TVGERR("GL_ENGINE", "eglGetError() = %i (0x%.8x)", eglError, eglError); \
+ assert(0); \
+ } \
+ } while(0)
+
+
+class GlGeometry;
+
+struct GlShape
+{
+ const Shape* shape = nullptr;
+ float viewWd;
+ float viewHt;
+ RenderUpdateFlag updateFlag = None;
+ unique_ptr<GlGeometry> geometry;
+};
+
+
+#endif /* _TVG_GL_COMMON_H_ */
-/*\r
- * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.\r
-\r
- * Permission is hereby granted, free of charge, to any person obtaining a copy\r
- * of this software and associated documentation files (the "Software"), to deal\r
- * in the Software without restriction, including without limitation the rights\r
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
- * copies of the Software, and to permit persons to whom the Software is\r
- * furnished to do so, subject to the following conditions:\r
-\r
- * The above copyright notice and this permission notice shall be included in all\r
- * copies or substantial portions of the Software.\r
-\r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
- * SOFTWARE.\r
- */\r
-\r
-#include <thorvg_capi.h>\r
-#include "../catch.hpp"\r
-\r
-TEST_CASE("Create a Scene", "[capiScene]")\r
-{\r
- Tvg_Paint* scene = tvg_scene_new();\r
- REQUIRE(scene);\r
-\r
- REQUIRE(tvg_paint_del(scene) == TVG_RESULT_SUCCESS);\r
-}\r
-\r
-TEST_CASE("Paints Into a Scene", "[capiScene]")\r
-{\r
- Tvg_Paint* scene = tvg_scene_new();\r
- REQUIRE(scene);\r
-\r
- //Pushing Paints\r
- REQUIRE(tvg_scene_push(scene, tvg_shape_new()) == TVG_RESULT_SUCCESS);\r
- REQUIRE(tvg_scene_push(scene, tvg_picture_new()) == TVG_RESULT_SUCCESS);\r
- REQUIRE(tvg_scene_push(scene, tvg_scene_new()) == TVG_RESULT_SUCCESS);\r
-\r
- //Pushing Null Pointer\r
- REQUIRE(tvg_scene_push(scene, NULL) == TVG_RESULT_INVALID_ARGUMENT);\r
- REQUIRE(tvg_scene_push(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT);\r
-\r
- REQUIRE(tvg_paint_del(scene) == TVG_RESULT_SUCCESS);\r
-}\r
-\r
-TEST_CASE("Scene Reservation", "[capiScene]")\r
-{\r
- Tvg_Paint* scene = tvg_scene_new();\r
- REQUIRE(scene);\r
-\r
- //Check Growth / Reduction\r
- REQUIRE(tvg_scene_reserve(scene, 100) == TVG_RESULT_SUCCESS);\r
- REQUIRE(tvg_scene_reserve(scene, 1000) == TVG_RESULT_SUCCESS);\r
- REQUIRE(tvg_scene_reserve(scene, 100) == TVG_RESULT_SUCCESS);\r
- REQUIRE(tvg_scene_reserve(scene, 0) == TVG_RESULT_SUCCESS);\r
-\r
- //Invalid scene\r
- REQUIRE(tvg_scene_reserve(NULL, 1) == TVG_RESULT_INVALID_ARGUMENT);\r
-\r
- REQUIRE(tvg_paint_del(scene) == TVG_RESULT_SUCCESS);\r
-}\r
-\r
-TEST_CASE("Clear the Scene", "[capiScene]")\r
-{\r
- Tvg_Paint* scene = tvg_scene_new();\r
- REQUIRE(scene);\r
-\r
- REQUIRE(tvg_scene_push(scene, tvg_shape_new()) == TVG_RESULT_SUCCESS);\r
- REQUIRE(tvg_scene_clear(scene, true) == TVG_RESULT_SUCCESS);\r
-\r
- //Invalid scene\r
- REQUIRE(tvg_scene_clear(NULL, false) == TVG_RESULT_INVALID_ARGUMENT);\r
-\r
- REQUIRE(tvg_paint_del(scene) == TVG_RESULT_SUCCESS);\r
-}\r
-\r
-TEST_CASE("Scene reusing paints", "[capiScene]")\r
-{\r
- REQUIRE(tvg_engine_init(TVG_ENGINE_SW, 0) == TVG_RESULT_SUCCESS);\r
-\r
- Tvg_Canvas* canvas = tvg_swcanvas_create();\r
- REQUIRE(canvas);\r
-\r
- uint32_t* buffer = (uint32_t*) malloc(sizeof(uint32_t) * 200 * 200);\r
- REQUIRE(buffer);\r
-\r
- REQUIRE(tvg_swcanvas_set_target(canvas, buffer, 200, 200, 200, TVG_COLORSPACE_ARGB8888) == TVG_RESULT_SUCCESS);\r
-\r
- Tvg_Paint* scene = tvg_scene_new();\r
- REQUIRE(scene);\r
-\r
- Tvg_Paint* shape = tvg_shape_new();\r
- REQUIRE(shape);\r
-\r
- REQUIRE(tvg_scene_push(scene, shape) == TVG_RESULT_SUCCESS);\r
- REQUIRE(tvg_canvas_push(canvas, scene) == TVG_RESULT_SUCCESS);\r
- REQUIRE(tvg_canvas_update(canvas) == TVG_RESULT_SUCCESS);\r
-\r
- //No deallocate shape.\r
- REQUIRE(tvg_scene_clear(scene, false) == TVG_RESULT_SUCCESS);\r
-\r
- //Reuse shape.\r
- REQUIRE(tvg_scene_push(scene, shape) == TVG_RESULT_SUCCESS);\r
-\r
- REQUIRE(tvg_canvas_destroy(canvas) == TVG_RESULT_SUCCESS);\r
-\r
- REQUIRE(tvg_engine_term(TVG_ENGINE_SW) == TVG_RESULT_SUCCESS);\r
-\r
- free(buffer);\r
-}\r
+/*
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <thorvg_capi.h>
+#include "../catch.hpp"
+
+TEST_CASE("Create a Scene", "[capiScene]")
+{
+ Tvg_Paint* scene = tvg_scene_new();
+ REQUIRE(scene);
+
+ REQUIRE(tvg_paint_del(scene) == TVG_RESULT_SUCCESS);
+}
+
+TEST_CASE("Paints Into a Scene", "[capiScene]")
+{
+ Tvg_Paint* scene = tvg_scene_new();
+ REQUIRE(scene);
+
+ //Pushing Paints
+ REQUIRE(tvg_scene_push(scene, tvg_shape_new()) == TVG_RESULT_SUCCESS);
+ REQUIRE(tvg_scene_push(scene, tvg_picture_new()) == TVG_RESULT_SUCCESS);
+ REQUIRE(tvg_scene_push(scene, tvg_scene_new()) == TVG_RESULT_SUCCESS);
+
+ //Pushing Null Pointer
+ REQUIRE(tvg_scene_push(scene, NULL) == TVG_RESULT_INVALID_ARGUMENT);
+ REQUIRE(tvg_scene_push(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT);
+
+ REQUIRE(tvg_paint_del(scene) == TVG_RESULT_SUCCESS);
+}
+
+TEST_CASE("Scene Reservation", "[capiScene]")
+{
+ Tvg_Paint* scene = tvg_scene_new();
+ REQUIRE(scene);
+
+ //Check Growth / Reduction
+ REQUIRE(tvg_scene_reserve(scene, 100) == TVG_RESULT_SUCCESS);
+ REQUIRE(tvg_scene_reserve(scene, 1000) == TVG_RESULT_SUCCESS);
+ REQUIRE(tvg_scene_reserve(scene, 100) == TVG_RESULT_SUCCESS);
+ REQUIRE(tvg_scene_reserve(scene, 0) == TVG_RESULT_SUCCESS);
+
+ //Invalid scene
+ REQUIRE(tvg_scene_reserve(NULL, 1) == TVG_RESULT_INVALID_ARGUMENT);
+
+ REQUIRE(tvg_paint_del(scene) == TVG_RESULT_SUCCESS);
+}
+
+TEST_CASE("Clear the Scene", "[capiScene]")
+{
+ Tvg_Paint* scene = tvg_scene_new();
+ REQUIRE(scene);
+
+ REQUIRE(tvg_scene_push(scene, tvg_shape_new()) == TVG_RESULT_SUCCESS);
+ REQUIRE(tvg_scene_clear(scene, true) == TVG_RESULT_SUCCESS);
+
+ //Invalid scene
+ REQUIRE(tvg_scene_clear(NULL, false) == TVG_RESULT_INVALID_ARGUMENT);
+
+ REQUIRE(tvg_paint_del(scene) == TVG_RESULT_SUCCESS);
+}
+
+TEST_CASE("Scene reusing paints", "[capiScene]")
+{
+ REQUIRE(tvg_engine_init(TVG_ENGINE_SW, 0) == TVG_RESULT_SUCCESS);
+
+ Tvg_Canvas* canvas = tvg_swcanvas_create();
+ REQUIRE(canvas);
+
+ uint32_t* buffer = (uint32_t*) malloc(sizeof(uint32_t) * 200 * 200);
+ REQUIRE(buffer);
+
+ REQUIRE(tvg_swcanvas_set_target(canvas, buffer, 200, 200, 200, TVG_COLORSPACE_ARGB8888) == TVG_RESULT_SUCCESS);
+
+ Tvg_Paint* scene = tvg_scene_new();
+ REQUIRE(scene);
+
+ Tvg_Paint* shape = tvg_shape_new();
+ REQUIRE(shape);
+
+ REQUIRE(tvg_scene_push(scene, shape) == TVG_RESULT_SUCCESS);
+ REQUIRE(tvg_canvas_push(canvas, scene) == TVG_RESULT_SUCCESS);
+ REQUIRE(tvg_canvas_update(canvas) == TVG_RESULT_SUCCESS);
+
+ //No deallocate shape.
+ REQUIRE(tvg_scene_clear(scene, false) == TVG_RESULT_SUCCESS);
+
+ //Reuse shape.
+ REQUIRE(tvg_scene_push(scene, shape) == TVG_RESULT_SUCCESS);
+
+ REQUIRE(tvg_canvas_destroy(canvas) == TVG_RESULT_SUCCESS);
+
+ REQUIRE(tvg_engine_term(TVG_ENGINE_SW) == TVG_RESULT_SUCCESS);
+
+ free(buffer);
+}