From 8ce022ddd71c875bc4420f9f77e1ecfea6fdb53f Mon Sep 17 00:00:00 2001 From: Mike_lee Date: Mon, 13 Mar 2023 19:03:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=86=85=E5=AD=98=E9=87=8A?= =?UTF-8?q?=E6=94=BE=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mike_lee --- .../entry/src/main/cpp/manager/plugin_manager.cpp | 2 ++ .../XComponent/entry/src/main/cpp/render/egl_core.cpp | 7 +++++++ .../XComponent/entry/src/main/cpp/render/egl_core.h | 1 + .../entry/src/main/cpp/render/plugin_render.cpp | 11 +++++++++++ .../entry/src/main/cpp/render/plugin_render.h | 2 ++ 5 files changed, 23 insertions(+) diff --git a/NativeAPI/XComponent/entry/src/main/cpp/manager/plugin_manager.cpp b/NativeAPI/XComponent/entry/src/main/cpp/manager/plugin_manager.cpp index 38dce258..9e1df196 100644 --- a/NativeAPI/XComponent/entry/src/main/cpp/manager/plugin_manager.cpp +++ b/NativeAPI/XComponent/entry/src/main/cpp/manager/plugin_manager.cpp @@ -20,6 +20,7 @@ #include #include "plugin_manager.h" +#include "render/plugin_render.h" enum ContextType { @@ -180,6 +181,7 @@ napi_value PluginManager::NapiOnHide(napi_env env, napi_callback_info info) napi_value PluginManager::NapiOnDestroy(napi_env env, napi_callback_info info) { OH_LOG_Print(LOG_APP, LOG_INFO, 0xFF00, "PluginManager", "NapiOnDestroy"); + PluginRender::releaseEgl(); // do something return nullptr; } diff --git a/NativeAPI/XComponent/entry/src/main/cpp/render/egl_core.cpp b/NativeAPI/XComponent/entry/src/main/cpp/render/egl_core.cpp index 3eba653b..ec66e7af 100644 --- a/NativeAPI/XComponent/entry/src/main/cpp/render/egl_core.cpp +++ b/NativeAPI/XComponent/entry/src/main/cpp/render/egl_core.cpp @@ -265,4 +265,11 @@ GLuint EGLCore::createProgram(const char * vertexShader, const char * fragShader glDeleteShader(vertex); glDeleteShader(fragment); return program; +} + +void EGLCore::release() +{ + eglDestroySurface(mEglDisplay, mEglSurface); + eglDestroyContext(mEglDisplay, mEglContext); + eglTerminate(mEglDisplay); } \ No newline at end of file diff --git a/NativeAPI/XComponent/entry/src/main/cpp/render/egl_core.h b/NativeAPI/XComponent/entry/src/main/cpp/render/egl_core.h index 9c379e4d..2e18495d 100644 --- a/NativeAPI/XComponent/entry/src/main/cpp/render/egl_core.h +++ b/NativeAPI/XComponent/entry/src/main/cpp/render/egl_core.h @@ -29,6 +29,7 @@ public: void eglContextInit(void* window, int w, int h); void draw(); void changeColor(); + void release(); public: std::string id_; diff --git a/NativeAPI/XComponent/entry/src/main/cpp/render/plugin_render.cpp b/NativeAPI/XComponent/entry/src/main/cpp/render/plugin_render.cpp index c964ec76..2913318e 100644 --- a/NativeAPI/XComponent/entry/src/main/cpp/render/plugin_render.cpp +++ b/NativeAPI/XComponent/entry/src/main/cpp/render/plugin_render.cpp @@ -191,6 +191,17 @@ napi_value PluginRender::NapiDrawRectangle(napi_env env, napi_callback_info info return nullptr; } +PluginRender* PluginRender::releaseEgl() +{ + char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {}; + std::string id(idStr); + PluginRender* render = PluginRender::getInstance(id); + if (render) { + render->eglCore_->release(); + } + return nullptr; +} + #ifdef __cplusplus } diff --git a/NativeAPI/XComponent/entry/src/main/cpp/render/plugin_render.h b/NativeAPI/XComponent/entry/src/main/cpp/render/plugin_render.h index 32eaaef9..2e79ea5f 100644 --- a/NativeAPI/XComponent/entry/src/main/cpp/render/plugin_render.h +++ b/NativeAPI/XComponent/entry/src/main/cpp/render/plugin_render.h @@ -15,6 +15,7 @@ #ifndef PLUGIN_RENDER_H #define PLUGIN_RENDER_H +#include #include #include @@ -29,6 +30,7 @@ public: explicit PluginRender(std::string& id); ~PluginRender() {} static PluginRender* getInstance(std::string& id); + static PluginRender* releaseEgl(); public: napi_value Export(napi_env env, napi_value exports); -- Gitee