REVIEWED: eglGetPlatformDisplay() usage

This commit is contained in:
Ray
2025-12-31 11:08:10 +01:00
parent 25ce6465d5
commit 02cca28b5f

View File

@ -1420,30 +1420,26 @@ int InitPlatform(void)
EGLint numConfigs = 0; EGLint numConfigs = 0;
// Get an EGL device connection // Get an EGL device connection
// Try eglGetPlatformDisplayEXT for better compatibility with some drivers (e.g. Mali Midgard) // NOTE: eglGetPlatformDisplay() is preferred over eglGetDisplay() legacy call
// REF: https://github.com/raysan5/raylib/issues/5378
platform.device = EGL_NO_DISPLAY; platform.device = EGL_NO_DISPLAY;
#if defined(EGL_VERSION_1_5)
platform.device = eglGetPlatformDisplay(EGL_PLATFORM_GBM_KHR, platform.gbmDevice, NULL);
#else
// Check if extension is available for eglGetPlatformDisplayEXT()
// NOTE: Better compatibility with some drivers (e.g. Mali Midgard)
const char *eglClientExtensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); const char *eglClientExtensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
if (eglClientExtensions != NULL) if (eglClientExtensions != NULL)
{ {
if (strstr(eglClientExtensions, "EGL_EXT_platform_base") != NULL) if (strstr(eglClientExtensions, "EGL_EXT_platform_base") != NULL)
{ {
PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = (PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT");
(PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT"); if (eglGetPlatformDisplayEXT != NULL) platform.device = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_KHR, platform.gbmDevice, NULL);
if (eglGetPlatformDisplayEXT != NULL)
{
platform.device = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_KHR, platform.gbmDevice, NULL);
}
} }
} }
if (platform.device == EGL_NO_DISPLAY) // In case extension not found or display could not be retrieved, try useing legacy version
{ if (platform.device == EGL_NO_DISPLAY) platform.device = eglGetDisplay((EGLNativeDisplayType)platform.gbmDevice);
platform.device = eglGetDisplay((EGLNativeDisplayType)platform.gbmDevice); #endif
}
if (platform.device == EGL_NO_DISPLAY) if (platform.device == EGL_NO_DISPLAY)
{ {
TRACELOG(LOG_WARNING, "DISPLAY: Failed to initialize EGL device"); TRACELOG(LOG_WARNING, "DISPLAY: Failed to initialize EGL device");