egl: add hint to disable eglGetDisplay fallback when eglGetPlatformDisplay fails

This fallback is undesirable when using ANGLE, because it will end up
using some default configuration (e.g. on Windows it defaults to the
D3D11 backend).
main
Steven Noonan 2022-08-25 21:29:30 -07:00
parent c608cf6222
commit fb1a581209
No known key found for this signature in database
GPG Key ID: 408EEB508ED0CD4D
2 changed files with 15 additions and 1 deletions

View File

@ -1643,6 +1643,18 @@ extern "C" {
*/ */
#define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" #define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY"
/**
* \brief If eglGetPlatformDisplay fails, fall back to calling eglGetDisplay.
*
* This variable can be set to one of the following values:
* "0" - Do not fall back to eglGetDisplay
* "1" - Fall back to eglGetDisplay if eglGetPlatformDisplay fails.
*
* By default, SDL will fall back to eglGetDisplay if eglGetPlatformDisplay
* fails.
*/
#define SDL_HINT_VIDEO_EGL_ALLOW_GETDISPLAY_FALLBACK "SDL_VIDEO_EGL_GETDISPLAY_FALLBACK"
/** /**
* \brief A variable controlling whether the graphics context is externally managed. * \brief A variable controlling whether the graphics context is externally managed.
* *

View File

@ -526,7 +526,9 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa
} }
#endif #endif
/* Try the implementation-specific eglGetDisplay even if eglGetPlatformDisplay fails */ /* Try the implementation-specific eglGetDisplay even if eglGetPlatformDisplay fails */
if ((_this->egl_data->egl_display == EGL_NO_DISPLAY) && (_this->egl_data->eglGetDisplay != NULL)) { if ((_this->egl_data->egl_display == EGL_NO_DISPLAY) &&
(_this->egl_data->eglGetDisplay != NULL) &&
SDL_GetHintBoolean(SDL_HINT_VIDEO_EGL_ALLOW_GETDISPLAY_FALLBACK, SDL_TRUE)) {
_this->egl_data->egl_display = _this->egl_data->eglGetDisplay(native_display); _this->egl_data->egl_display = _this->egl_data->eglGetDisplay(native_display);
} }
if (_this->egl_data->egl_display == EGL_NO_DISPLAY) { if (_this->egl_data->egl_display == EGL_NO_DISPLAY) {