mirror of https://github.com/encounter/SDL.git
egl: Check for a NULL pointer in SDL_EGL_GetProcAddress.
This happens on kmsdrm if you try to GetProcAddress before creating a window. Fixes #5399.
This commit is contained in:
parent
f3cc99fb93
commit
44d7b8b91d
|
@ -244,27 +244,28 @@ SDL_bool SDL_EGL_HasExtension(_THIS, SDL_EGL_ExtensionType type, const char *ext
|
||||||
void *
|
void *
|
||||||
SDL_EGL_GetProcAddress(_THIS, const char *proc)
|
SDL_EGL_GetProcAddress(_THIS, const char *proc)
|
||||||
{
|
{
|
||||||
const Uint32 eglver = (((Uint32) _this->egl_data->egl_version_major) << 16) | ((Uint32) _this->egl_data->egl_version_minor);
|
|
||||||
const SDL_bool is_egl_15_or_later = eglver >= ((((Uint32) 1) << 16) | 5);
|
|
||||||
void *retval = NULL;
|
void *retval = NULL;
|
||||||
|
if (_this->egl_data != NULL) {
|
||||||
|
const Uint32 eglver = (((Uint32) _this->egl_data->egl_version_major) << 16) | ((Uint32) _this->egl_data->egl_version_minor);
|
||||||
|
const SDL_bool is_egl_15_or_later = eglver >= ((((Uint32) 1) << 16) | 5);
|
||||||
|
|
||||||
/* EGL 1.5 can use eglGetProcAddress() for any symbol. 1.4 and earlier can't use it for core entry points. */
|
/* EGL 1.5 can use eglGetProcAddress() for any symbol. 1.4 and earlier can't use it for core entry points. */
|
||||||
if (!retval && is_egl_15_or_later && _this->egl_data->eglGetProcAddress) {
|
if (!retval && is_egl_15_or_later && _this->egl_data->eglGetProcAddress) {
|
||||||
retval = _this->egl_data->eglGetProcAddress(proc);
|
retval = _this->egl_data->eglGetProcAddress(proc);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(__EMSCRIPTEN__) && !defined(SDL_VIDEO_DRIVER_VITA) /* LoadFunction isn't needed on Emscripten and will call dlsym(), causing other problems. */
|
||||||
|
/* Try SDL_LoadFunction() first for EGL <= 1.4, or as a fallback for >= 1.5. */
|
||||||
|
if (!retval) {
|
||||||
|
retval = SDL_LoadFunction(_this->egl_data->opengl_dll_handle, proc);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Try eglGetProcAddress if we're on <= 1.4 and still searching... */
|
||||||
|
if (!retval && !is_egl_15_or_later && _this->egl_data->eglGetProcAddress) {
|
||||||
|
retval = _this->egl_data->eglGetProcAddress(proc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(__EMSCRIPTEN__) && !defined(SDL_VIDEO_DRIVER_VITA) /* LoadFunction isn't needed on Emscripten and will call dlsym(), causing other problems. */
|
|
||||||
/* Try SDL_LoadFunction() first for EGL <= 1.4, or as a fallback for >= 1.5. */
|
|
||||||
if (!retval) {
|
|
||||||
retval = SDL_LoadFunction(_this->egl_data->opengl_dll_handle, proc);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Try eglGetProcAddress if we're on <= 1.4 and still searching... */
|
|
||||||
if (!retval && !is_egl_15_or_later && _this->egl_data->eglGetProcAddress) {
|
|
||||||
retval = _this->egl_data->eglGetProcAddress(proc);
|
|
||||||
}
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue