Fixes bug #2040, prepare SDL_GL_CONTEXT_EGL for deprecation on v2.1
SDL_GL_CONTEXT_EGL = 1 is now internally treated as profile_mask = SDL_GL_CONTEXT_PROFILE_ES
parent
eec4710c53
commit
ace1e98a18
|
@ -280,7 +280,7 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
GLint value;
|
GLint value;
|
||||||
Uint32 windowFlags;
|
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_MAJOR_VERSION, 1);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
|
||||||
|
|
||||||
|
|
|
@ -1628,7 +1628,7 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||||
Uint32 windowFlags;
|
Uint32 windowFlags;
|
||||||
GLint window_framebuffer;
|
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_MAJOR_VERSION, 2);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
||||||
|
|
||||||
|
|
|
@ -477,26 +477,21 @@ SDL_VideoInit(const char *driver_name)
|
||||||
_this->gl_config.multisamplesamples = 0;
|
_this->gl_config.multisamplesamples = 0;
|
||||||
_this->gl_config.retained_backing = 1;
|
_this->gl_config.retained_backing = 1;
|
||||||
_this->gl_config.accelerated = -1; /* accelerated or not, both are fine */
|
_this->gl_config.accelerated = -1; /* accelerated or not, both are fine */
|
||||||
|
_this->gl_config.profile_mask = 0;
|
||||||
#if SDL_VIDEO_OPENGL
|
#if SDL_VIDEO_OPENGL
|
||||||
_this->gl_config.major_version = 2;
|
_this->gl_config.major_version = 2;
|
||||||
_this->gl_config.minor_version = 1;
|
_this->gl_config.minor_version = 1;
|
||||||
_this->gl_config.use_egl = 0;
|
|
||||||
#elif SDL_VIDEO_OPENGL_ES
|
#elif SDL_VIDEO_OPENGL_ES
|
||||||
_this->gl_config.major_version = 1;
|
_this->gl_config.major_version = 1;
|
||||||
_this->gl_config.minor_version = 1;
|
_this->gl_config.minor_version = 1;
|
||||||
#if SDL_VIDEO_OPENGL_EGL
|
_this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES;
|
||||||
_this->gl_config.use_egl = 1;
|
|
||||||
#endif
|
|
||||||
#elif SDL_VIDEO_OPENGL_ES2
|
#elif SDL_VIDEO_OPENGL_ES2
|
||||||
_this->gl_config.major_version = 2;
|
_this->gl_config.major_version = 2;
|
||||||
_this->gl_config.minor_version = 0;
|
_this->gl_config.minor_version = 0;
|
||||||
#if SDL_VIDEO_OPENGL_EGL
|
_this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES;
|
||||||
_this->gl_config.use_egl = 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
_this->gl_config.flags = 0;
|
_this->gl_config.flags = 0;
|
||||||
_this->gl_config.profile_mask = 0;
|
|
||||||
_this->gl_config.share_with_current_context = 0;
|
_this->gl_config.share_with_current_context = 0;
|
||||||
|
|
||||||
_this->current_glwin_tls = SDL_TLSCreate();
|
_this->current_glwin_tls = SDL_TLSCreate();
|
||||||
|
@ -2516,7 +2511,12 @@ SDL_GL_SetAttribute(SDL_GLattr attr, int value)
|
||||||
_this->gl_config.minor_version = value;
|
_this->gl_config.minor_version = value;
|
||||||
break;
|
break;
|
||||||
case SDL_GL_CONTEXT_EGL:
|
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;
|
break;
|
||||||
case SDL_GL_CONTEXT_FLAGS:
|
case SDL_GL_CONTEXT_FLAGS:
|
||||||
if( value & ~(SDL_GL_CONTEXT_DEBUG_FLAG |
|
if( value & ~(SDL_GL_CONTEXT_DEBUG_FLAG |
|
||||||
|
@ -2686,8 +2686,14 @@ SDL_GL_GetAttribute(SDL_GLattr attr, int *value)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case SDL_GL_CONTEXT_EGL:
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
case SDL_GL_CONTEXT_FLAGS:
|
case SDL_GL_CONTEXT_FLAGS:
|
||||||
|
|
|
@ -210,36 +210,31 @@ X11_GL_LoadLibrary(_THIS, const char *path)
|
||||||
/* Initialize extensions */
|
/* Initialize extensions */
|
||||||
X11_GL_InitExtensions(_this);
|
X11_GL_InitExtensions(_this);
|
||||||
|
|
||||||
/* If SDL_GL_CONTEXT_EGL has been changed to 1, and there's
|
/* If we need a GL ES context and there's no
|
||||||
* no GLX_EXT_create_context_es2_profile extension switch over to X11_GLES functions */
|
* 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) {
|
if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES &&
|
||||||
/* We cheat a little bit here by using GLX instead of EGL
|
! _this->gl_data->HAS_GLX_EXT_create_context_es2_profile ) {
|
||||||
* 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 SDL_VIDEO_OPENGL_EGL
|
#if SDL_VIDEO_OPENGL_EGL
|
||||||
X11_GL_UnloadLibrary(_this);
|
X11_GL_UnloadLibrary(_this);
|
||||||
/* Better avoid conflicts! */
|
/* Better avoid conflicts! */
|
||||||
if (_this->gl_config.dll_handle != NULL ) {
|
if (_this->gl_config.dll_handle != NULL ) {
|
||||||
GL_UnloadObject(_this->gl_config.dll_handle);
|
GL_UnloadObject(_this->gl_config.dll_handle);
|
||||||
_this->gl_config.dll_handle = NULL;
|
_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
|
|
||||||
}
|
}
|
||||||
|
_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;
|
return 0;
|
||||||
|
|
|
@ -33,8 +33,8 @@ X11_GLES_LoadLibrary(_THIS, const char *path) {
|
||||||
|
|
||||||
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
|
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
|
||||||
|
|
||||||
/* If SDL_GL_CONTEXT_EGL has been changed to 0, switch over to X11_GL functions */
|
/* If the profile requested is not GL ES, switch over to X11_GL functions */
|
||||||
if (_this->gl_config.use_egl == 0) {
|
if (_this->gl_config.profile_mask != SDL_GL_CONTEXT_PROFILE_ES) {
|
||||||
#if SDL_VIDEO_OPENGL_GLX
|
#if SDL_VIDEO_OPENGL_GLX
|
||||||
_this->GL_LoadLibrary = X11_GL_LoadLibrary;
|
_this->GL_LoadLibrary = X11_GL_LoadLibrary;
|
||||||
_this->GL_GetProcAddress = X11_GL_GetProcAddress;
|
_this->GL_GetProcAddress = X11_GL_GetProcAddress;
|
||||||
|
|
|
@ -366,10 +366,11 @@ X11_CreateWindow(_THIS, SDL_Window * window)
|
||||||
|
|
||||||
#if SDL_VIDEO_OPENGL_GLX || SDL_VIDEO_OPENGL_EGL
|
#if SDL_VIDEO_OPENGL_GLX || SDL_VIDEO_OPENGL_EGL
|
||||||
if (window->flags & SDL_WINDOW_OPENGL) {
|
if (window->flags & SDL_WINDOW_OPENGL) {
|
||||||
XVisualInfo *vinfo;
|
XVisualInfo *vinfo = NULL;
|
||||||
|
|
||||||
#if SDL_VIDEO_OPENGL_EGL
|
#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);
|
vinfo = X11_GLES_GetVisual(_this, display, screen);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
@ -378,6 +379,7 @@ X11_CreateWindow(_THIS, SDL_Window * window)
|
||||||
vinfo = X11_GL_GetVisual(_this, display, screen);
|
vinfo = X11_GL_GetVisual(_this, display, screen);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vinfo) {
|
if (!vinfo) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -551,7 +553,9 @@ X11_CreateWindow(_THIS, SDL_Window * window)
|
||||||
windowdata = (SDL_WindowData *) window->driverdata;
|
windowdata = (SDL_WindowData *) window->driverdata;
|
||||||
|
|
||||||
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
|
#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) {
|
if (!_this->egl_data) {
|
||||||
XDestroyWindow(display, w);
|
XDestroyWindow(display, w);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue