From e4f027e13b1bb497cd1840e94acc38d8db75fe7c Mon Sep 17 00:00:00 2001 From: BZLZHH Date: Thu, 1 Jan 2026 11:15:53 +0800 Subject: [PATCH] [Fix] (MG_Util): Skip GLES initializing if the libs do not exist. --- MobileGL/Init.cpp | 1 - MobileGL/MG_Backend/Init.cpp | 13 ++++++++++--- MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.cpp | 7 ++++++- MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.h | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/MobileGL/Init.cpp b/MobileGL/Init.cpp index 308f1fb1..7bdc4815 100644 --- a/MobileGL/Init.cpp +++ b/MobileGL/Init.cpp @@ -19,7 +19,6 @@ namespace MobileGL { MGLOG_I("Initializing MobileGL..."); MG_State::Init(); MGLOG_D("MobileGL State initialized"); - // return; MG_Backend::Init(); MGLOG_D("MobileGL Backend initialized"); MG_Impl::Init(); diff --git a/MobileGL/MG_Backend/Init.cpp b/MobileGL/MG_Backend/Init.cpp index 58125171..7dd2dc30 100644 --- a/MobileGL/MG_Backend/Init.cpp +++ b/MobileGL/MG_Backend/Init.cpp @@ -40,16 +40,19 @@ namespace MobileGL { } } - void InitSpecificBackendLibs() { + Bool InitSpecificBackendLibs() { #if MOBILEGL_BACKEND == MOBILEGL_BACKEND_DILIGENT // Nothing to do MGLOG_D("Diligent Engine backend loaded"); + return true; #elif MOBILEGL_BACKEND == MOBILEGL_BACKEND_TYPE_DIRECT_GLES - MG_Util::BackendLoader::GLES::Init(); + Bool result = MG_Util::BackendLoader::GLES::Init(); MGLOG_D("DirectGLES backend loaded, GLES version: %d.%d", MG_External::GLES::g_glesCaps.version.Major, MG_External::GLES::g_glesCaps.version.Minor); + return result; #else MGLOG_W("Unknown backend, skipping backend initialization"); + return false; #endif } @@ -73,7 +76,11 @@ namespace MobileGL { MG_Config::RendererInfoPtr = MakeUnique(Unknown::RendererInfoUnknown); #endif - InitSpecificBackendLibs(); + Bool result = InitSpecificBackendLibs(); + if (!result) { + MGLOG_W("Failed to initialize MobileGL backend libraries"); + return; + } LogBackendInfo(); } } // namespace MG_Backend diff --git a/MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.cpp b/MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.cpp index d809c867..e2b0da31 100644 --- a/MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.cpp +++ b/MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.cpp @@ -433,11 +433,16 @@ namespace MobileGL { namespace MG_Util { namespace BackendLoader::GLES { - void Init() { + Bool Init() { LoadLibs(); + if (libGLES == nullptr || libEGL == nullptr || + (glGetError_PTR)ProcAddress(libGLES, "glGetError") == nullptr) { + return false; + } InitEGL(); InitGLES(); DestroyTempEGLCtx(); + return true; } void *libGLES = nullptr, *libEGL = nullptr; diff --git a/MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.h b/MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.h index caf26845..8e7e4d87 100644 --- a/MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.h +++ b/MobileGL/MG_Util/BackendLoaders/OpenGL/Loader.h @@ -940,7 +940,7 @@ namespace MobileGL { namespace MG_Util { namespace BackendLoader { namespace GLES { - void Init(); + Bool Init(); extern void *libGLES, *libEGL; void* ProcAddress(void* lib, const char* name);