diff --git a/src/render/opengles/SDL_render_gles.c b/src/render/opengles/SDL_render_gles.c index 1b3ea0f79..b3ce79096 100644 --- a/src/render/opengles/SDL_render_gles.c +++ b/src/render/opengles/SDL_render_gles.c @@ -280,7 +280,7 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags) GLint value; Uint32 windowFlags; - SDL_GL_SetAttribute(SDL_GL_CONTEXT_EGL, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c index db030c6c0..484186e33 100644 --- a/src/render/opengles2/SDL_render_gles2.c +++ b/src/render/opengles2/SDL_render_gles2.c @@ -1628,7 +1628,7 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) Uint32 windowFlags; GLint window_framebuffer; - SDL_GL_SetAttribute(SDL_GL_CONTEXT_EGL, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 53e6e0208..72bd07470 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -477,26 +477,21 @@ SDL_VideoInit(const char *driver_name) _this->gl_config.multisamplesamples = 0; _this->gl_config.retained_backing = 1; _this->gl_config.accelerated = -1; /* accelerated or not, both are fine */ + _this->gl_config.profile_mask = 0; #if SDL_VIDEO_OPENGL _this->gl_config.major_version = 2; _this->gl_config.minor_version = 1; - _this->gl_config.use_egl = 0; #elif SDL_VIDEO_OPENGL_ES _this->gl_config.major_version = 1; _this->gl_config.minor_version = 1; -#if SDL_VIDEO_OPENGL_EGL - _this->gl_config.use_egl = 1; -#endif + _this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES; #elif SDL_VIDEO_OPENGL_ES2 _this->gl_config.major_version = 2; _this->gl_config.minor_version = 0; -#if SDL_VIDEO_OPENGL_EGL - _this->gl_config.use_egl = 1; -#endif - + _this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES; #endif _this->gl_config.flags = 0; - _this->gl_config.profile_mask = 0; + _this->gl_config.share_with_current_context = 0; _this->current_glwin_tls = SDL_TLSCreate(); @@ -2516,7 +2511,12 @@ SDL_GL_SetAttribute(SDL_GLattr attr, int value) _this->gl_config.minor_version = value; break; case SDL_GL_CONTEXT_EGL: - _this->gl_config.use_egl = value; + /* FIXME: SDL_GL_CONTEXT_EGL to be deprecated in SDL 2.1 */ + if (value != 0) { + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); + } else { + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0); + }; break; case SDL_GL_CONTEXT_FLAGS: if( value & ~(SDL_GL_CONTEXT_DEBUG_FLAG | @@ -2686,8 +2686,14 @@ SDL_GL_GetAttribute(SDL_GLattr attr, int *value) return 0; } case SDL_GL_CONTEXT_EGL: + /* FIXME: SDL_GL_CONTEXT_EGL to be deprecated in SDL 2.1 */ { - *value = _this->gl_config.use_egl; + if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) { + *value = 1; + } + else { + *value = 0; + } return 0; } case SDL_GL_CONTEXT_FLAGS: diff --git a/src/video/x11/SDL_x11opengl.c b/src/video/x11/SDL_x11opengl.c index 6f1cc8b6b..67a4b06cc 100644 --- a/src/video/x11/SDL_x11opengl.c +++ b/src/video/x11/SDL_x11opengl.c @@ -210,36 +210,31 @@ X11_GL_LoadLibrary(_THIS, const char *path) /* Initialize extensions */ X11_GL_InitExtensions(_this); - /* If SDL_GL_CONTEXT_EGL has been changed to 1, and there's - * no GLX_EXT_create_context_es2_profile extension switch over to X11_GLES functions */ - if (_this->gl_config.use_egl == 1) { - if (_this->gl_data->HAS_GLX_EXT_create_context_es2_profile) { - /* We cheat a little bit here by using GLX instead of EGL - * to improve our chances of getting hardware acceleration */ - _this->gl_config.use_egl = 0; - _this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES; - } else { + /* If we need a GL ES context and there's no + * GLX_EXT_create_context_es2_profile extension, switch over to X11_GLES functions + */ + if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES && + ! _this->gl_data->HAS_GLX_EXT_create_context_es2_profile ) { #if SDL_VIDEO_OPENGL_EGL - X11_GL_UnloadLibrary(_this); - /* Better avoid conflicts! */ - if (_this->gl_config.dll_handle != NULL ) { - GL_UnloadObject(_this->gl_config.dll_handle); - _this->gl_config.dll_handle = NULL; - } - _this->GL_LoadLibrary = X11_GLES_LoadLibrary; - _this->GL_GetProcAddress = X11_GLES_GetProcAddress; - _this->GL_UnloadLibrary = X11_GLES_UnloadLibrary; - _this->GL_CreateContext = X11_GLES_CreateContext; - _this->GL_MakeCurrent = X11_GLES_MakeCurrent; - _this->GL_SetSwapInterval = X11_GLES_SetSwapInterval; - _this->GL_GetSwapInterval = X11_GLES_GetSwapInterval; - _this->GL_SwapWindow = X11_GLES_SwapWindow; - _this->GL_DeleteContext = X11_GLES_DeleteContext; - return X11_GLES_LoadLibrary(_this, NULL); -#else - return SDL_SetError("SDL not configured with EGL support"); -#endif + X11_GL_UnloadLibrary(_this); + /* Better avoid conflicts! */ + if (_this->gl_config.dll_handle != NULL ) { + GL_UnloadObject(_this->gl_config.dll_handle); + _this->gl_config.dll_handle = NULL; } + _this->GL_LoadLibrary = X11_GLES_LoadLibrary; + _this->GL_GetProcAddress = X11_GLES_GetProcAddress; + _this->GL_UnloadLibrary = X11_GLES_UnloadLibrary; + _this->GL_CreateContext = X11_GLES_CreateContext; + _this->GL_MakeCurrent = X11_GLES_MakeCurrent; + _this->GL_SetSwapInterval = X11_GLES_SetSwapInterval; + _this->GL_GetSwapInterval = X11_GLES_GetSwapInterval; + _this->GL_SwapWindow = X11_GLES_SwapWindow; + _this->GL_DeleteContext = X11_GLES_DeleteContext; + return X11_GLES_LoadLibrary(_this, NULL); +#else + return SDL_SetError("SDL not configured with EGL support"); +#endif } return 0; diff --git a/src/video/x11/SDL_x11opengles.c b/src/video/x11/SDL_x11opengles.c index 2d2054ae3..98183258f 100644 --- a/src/video/x11/SDL_x11opengles.c +++ b/src/video/x11/SDL_x11opengles.c @@ -33,8 +33,8 @@ X11_GLES_LoadLibrary(_THIS, const char *path) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - /* If SDL_GL_CONTEXT_EGL has been changed to 0, switch over to X11_GL functions */ - if (_this->gl_config.use_egl == 0) { + /* If the profile requested is not GL ES, switch over to X11_GL functions */ + if (_this->gl_config.profile_mask != SDL_GL_CONTEXT_PROFILE_ES) { #if SDL_VIDEO_OPENGL_GLX _this->GL_LoadLibrary = X11_GL_LoadLibrary; _this->GL_GetProcAddress = X11_GL_GetProcAddress; diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index 6bc2eb950..a8915289e 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -366,10 +366,11 @@ X11_CreateWindow(_THIS, SDL_Window * window) #if SDL_VIDEO_OPENGL_GLX || SDL_VIDEO_OPENGL_EGL if (window->flags & SDL_WINDOW_OPENGL) { - XVisualInfo *vinfo; + XVisualInfo *vinfo = NULL; #if SDL_VIDEO_OPENGL_EGL - if (_this->gl_config.use_egl == 1) { + if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES && + ( !_this->gl_data || ! _this->gl_data->HAS_GLX_EXT_create_context_es2_profile )) { vinfo = X11_GLES_GetVisual(_this, display, screen); } else #endif @@ -378,6 +379,7 @@ X11_CreateWindow(_THIS, SDL_Window * window) vinfo = X11_GL_GetVisual(_this, display, screen); #endif } + if (!vinfo) { return -1; } @@ -551,7 +553,9 @@ X11_CreateWindow(_THIS, SDL_Window * window) windowdata = (SDL_WindowData *) window->driverdata; #if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 - if ((window->flags & SDL_WINDOW_OPENGL) && (_this->gl_config.use_egl == 1)) { + if ((window->flags & SDL_WINDOW_OPENGL) && + _this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES && + (!_this->gl_data || ! _this->gl_data->HAS_GLX_EXT_create_context_es2_profile) ) { if (!_this->egl_data) { XDestroyWindow(display, w); return -1;