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 38dce2583acccb41758ea0ededfcb14a956bded8..9e1df1969e8020ed93207e19dec02c53c5c98873 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 3eba653b0ab93b75eace8b9202ed6a5736226ca4..ec66e7af5a29f9666c7da6c56c100d6300fad260 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 9c379e4d9ea663e77eaafb8ae2320b8c66496aa7..2e18495db1cb7be4dcf6fca4415865c8eaccaead 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 c964ec76723b05fdca7844151d802cf854c1c9a3..2913318e363c4fdab2e2e33c453d74841982fef6 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 32eaaef940def8fe52ba5cabaf4230f693631586..2e79ea5f8dadbcee8e25f408af2e13979cae3652 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);