From 3b385d1d5496d27217582c11a34c659e5ac601de Mon Sep 17 00:00:00 2001 From: Pranay Kumar Samanta Date: Wed, 15 Jul 2020 19:02:27 +0530 Subject: [PATCH] gl_engine: Fix crash in animation callback. Refactor test samples draw function. Fix open shape drawing. Change-Id: I9ca2cb3951f2229f36292b69221451e0eaf5b6a1 --- src/lib/gl_engine/tvgGlGeometry.cpp | 8 ++++---- src/lib/gl_engine/tvgGlRenderer.cpp | 5 +++-- test/testAsync.cpp | 6 ------ test/testBlending.cpp | 6 ------ test/testBoundary.cpp | 6 ------ test/testCustomTransform.cpp | 6 ------ test/testDirectUpdate.cpp | 6 ------ test/testGradientTransform.cpp | 6 ------ test/testLinearGradient.cpp | 6 ------ test/testMultiShapes.cpp | 6 ------ test/testPath.cpp | 6 ------ test/testPathCopy.cpp | 6 ------ test/testRadialGradient.cpp | 6 ------ test/testScene.cpp | 6 ------ test/testSceneTransform.cpp | 6 ------ test/testShape.cpp | 6 ------ test/testStroke.cpp | 6 ------ test/testStrokeLine.cpp | 6 ------ test/testSvg.cpp | 6 ------ test/testTransform.cpp | 6 ------ test/testUpdate.cpp | 6 ------ 21 files changed, 7 insertions(+), 120 deletions(-) mode change 100644 => 100755 src/lib/gl_engine/tvgGlGeometry.cpp mode change 100644 => 100755 src/lib/gl_engine/tvgGlRenderer.cpp mode change 100644 => 100755 test/testAsync.cpp mode change 100644 => 100755 test/testBlending.cpp mode change 100644 => 100755 test/testBoundary.cpp mode change 100644 => 100755 test/testCustomTransform.cpp mode change 100644 => 100755 test/testDirectUpdate.cpp mode change 100644 => 100755 test/testGradientTransform.cpp mode change 100644 => 100755 test/testLinearGradient.cpp mode change 100644 => 100755 test/testMultiShapes.cpp mode change 100644 => 100755 test/testPath.cpp mode change 100644 => 100755 test/testPathCopy.cpp mode change 100644 => 100755 test/testRadialGradient.cpp mode change 100644 => 100755 test/testScene.cpp mode change 100644 => 100755 test/testSceneTransform.cpp mode change 100644 => 100755 test/testShape.cpp mode change 100644 => 100755 test/testStroke.cpp mode change 100644 => 100755 test/testStrokeLine.cpp mode change 100644 => 100755 test/testSvg.cpp mode change 100644 => 100755 test/testTransform.cpp mode change 100644 => 100755 test/testUpdate.cpp diff --git a/src/lib/gl_engine/tvgGlGeometry.cpp b/src/lib/gl_engine/tvgGlGeometry.cpp old mode 100644 new mode 100755 index 59b730bd..eba6fbff --- a/src/lib/gl_engine/tvgGlGeometry.cpp +++ b/src/lib/gl_engine/tvgGlGeometry.cpp @@ -84,11 +84,11 @@ bool GlGeometry::generateAAPoints(const Shape &shape, float strokeWd, RenderUpda size_t fPoint = 0; size_t sPoint = 1; - for (size_t i = 0; i < nPoints - 1; ++i) + for (size_t i = 0; i < nPoints; ++i) { fPoint = i; sPoint = i + 1; - if (sPoint == nPoints - 1) + if (fPoint == nPoints - 1) sPoint = 0; GlPoint normal = getNormal(aaPts[fPoint].orgPt, aaPts[sPoint].orgPt); @@ -96,8 +96,8 @@ bool GlGeometry::generateAAPoints(const Shape &shape, float strokeWd, RenderUpda normalInfo[fPoint].normal1 = normal; normalInfo[sPoint].normal2 = normal; } - normalInfo[nPoints - 1].normal1 = normalInfo[0].normal1; - normalInfo[nPoints - 1].normal2 = normalInfo[0].normal2; + normalInfo[0].normal2 = normalInfo[0].normal1; + normalInfo[nPoints - 1].normal1 = normalInfo[nPoints - 1].normal2; for (uint32_t i = 0; i < nPoints; ++i) { diff --git a/src/lib/gl_engine/tvgGlRenderer.cpp b/src/lib/gl_engine/tvgGlRenderer.cpp old mode 100644 new mode 100755 index bef3871b..d9acf619 --- a/src/lib/gl_engine/tvgGlRenderer.cpp +++ b/src/lib/gl_engine/tvgGlRenderer.cpp @@ -64,8 +64,9 @@ bool GlRenderer::flush() bool GlRenderer::preRender() { - //TODO: called just before render() - + // Blend function for pre multiplied alpha + GL_CHECK(glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); + GL_CHECK(glEnable(GL_BLEND)); return true; } diff --git a/test/testAsync.cpp b/test/testAsync.cpp old mode 100644 new mode 100755 index df81020a..4530f1d9 --- a/test/testAsync.cpp +++ b/test/testAsync.cpp @@ -113,14 +113,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); glCanvas->sync(); } diff --git a/test/testBlending.cpp b/test/testBlending.cpp old mode 100644 new mode 100755 index 6765cb67..7db82019 --- a/test/testBlending.cpp +++ b/test/testBlending.cpp @@ -101,14 +101,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testBoundary.cpp b/test/testBoundary.cpp old mode 100644 new mode 100755 index 71dd6a01..a2bb1d8e --- a/test/testBoundary.cpp +++ b/test/testBoundary.cpp @@ -90,14 +90,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testCustomTransform.cpp b/test/testCustomTransform.cpp old mode 100644 new mode 100755 index 59454900..00a3bc30 --- a/test/testCustomTransform.cpp +++ b/test/testCustomTransform.cpp @@ -139,14 +139,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testDirectUpdate.cpp b/test/testDirectUpdate.cpp old mode 100644 new mode 100755 index 67d0240c..164ff612 --- a/test/testDirectUpdate.cpp +++ b/test/testDirectUpdate.cpp @@ -102,14 +102,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testGradientTransform.cpp b/test/testGradientTransform.cpp old mode 100644 new mode 100755 index 1c1b8206..a97ec70d --- a/test/testGradientTransform.cpp +++ b/test/testGradientTransform.cpp @@ -167,14 +167,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testLinearGradient.cpp b/test/testLinearGradient.cpp old mode 100644 new mode 100755 index 826287b0..90656fce --- a/test/testLinearGradient.cpp +++ b/test/testLinearGradient.cpp @@ -119,14 +119,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testMultiShapes.cpp b/test/testMultiShapes.cpp old mode 100644 new mode 100755 index 88601351..d81f7098 --- a/test/testMultiShapes.cpp +++ b/test/testMultiShapes.cpp @@ -79,14 +79,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testPath.cpp b/test/testPath.cpp old mode 100644 new mode 100755 index bcd5ab78..b3a265ea --- a/test/testPath.cpp +++ b/test/testPath.cpp @@ -96,14 +96,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testPathCopy.cpp b/test/testPathCopy.cpp old mode 100644 new mode 100755 index dd008270..724b8b4f --- a/test/testPathCopy.cpp +++ b/test/testPathCopy.cpp @@ -133,14 +133,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testRadialGradient.cpp b/test/testRadialGradient.cpp old mode 100644 new mode 100755 index 054bf12d..c80cb03f --- a/test/testRadialGradient.cpp +++ b/test/testRadialGradient.cpp @@ -119,14 +119,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testScene.cpp b/test/testScene.cpp old mode 100644 new mode 100755 index b796a5b8..c835a921 --- a/test/testScene.cpp +++ b/test/testScene.cpp @@ -126,14 +126,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testSceneTransform.cpp b/test/testSceneTransform.cpp old mode 100644 new mode 100755 index aeaf11eb..9597101d --- a/test/testSceneTransform.cpp +++ b/test/testSceneTransform.cpp @@ -163,14 +163,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testShape.cpp b/test/testShape.cpp old mode 100644 new mode 100755 index 391b55ff..7788817f --- a/test/testShape.cpp +++ b/test/testShape.cpp @@ -69,14 +69,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testStroke.cpp b/test/testStroke.cpp old mode 100644 new mode 100755 index f7c1a88f..36f2a948 --- a/test/testStroke.cpp +++ b/test/testStroke.cpp @@ -116,14 +116,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testStrokeLine.cpp b/test/testStrokeLine.cpp old mode 100644 new mode 100755 index bc3f9601..894c6950 --- a/test/testStrokeLine.cpp +++ b/test/testStrokeLine.cpp @@ -153,14 +153,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testSvg.cpp b/test/testSvg.cpp old mode 100644 new mode 100755 index edb987b8..65fe9d7a --- a/test/testSvg.cpp +++ b/test/testSvg.cpp @@ -93,14 +93,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testTransform.cpp b/test/testTransform.cpp old mode 100644 new mode 100755 index da7c87cd..6d0edbf1 --- a/test/testTransform.cpp +++ b/test/testTransform.cpp @@ -130,14 +130,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync(); diff --git a/test/testUpdate.cpp b/test/testUpdate.cpp old mode 100644 new mode 100755 index c3504356..0d007381 --- a/test/testUpdate.cpp +++ b/test/testUpdate.cpp @@ -91,14 +91,8 @@ void initGLview(Evas_Object *obj) void drawGLview(Evas_Object *obj) { auto gl = elm_glview_gl_api_get(obj); - int w, h; - elm_glview_size_get(obj, &w, &h); - gl->glViewport(0, 0, w, h); gl->glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl->glClear(GL_COLOR_BUFFER_BIT); - gl->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl->glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); - gl->glEnable(GL_BLEND); if (glCanvas->draw() == tvg::Result::Success) { glCanvas->sync();