mirror of https://github.com/encounter/SDL.git
Fix KHR_no_error support
This commit is contained in:
parent
d8fc70ea1e
commit
685890a229
|
@ -463,18 +463,6 @@ SDL_EGL_ChooseConfig(_THIS)
|
||||||
attribs[i++] = _this->gl_config.multisamplesamples;
|
attribs[i++] = _this->gl_config.multisamplesamples;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_this->gl_config.no_error) {
|
|
||||||
#ifdef GL_KHR_no_error
|
|
||||||
if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "GL_KHR_no_error")) {
|
|
||||||
attribs[i++] = EGL_CONTEXT_OPENGL_NO_ERROR_KHR;
|
|
||||||
attribs[i++] = _this->gl_config.no_error;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
return SDL_SetError("EGL implementation does not support no_error contexts");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_this->gl_config.framebuffer_srgb_capable) {
|
if (_this->gl_config.framebuffer_srgb_capable) {
|
||||||
#ifdef EGL_KHR_gl_colorspace
|
#ifdef EGL_KHR_gl_colorspace
|
||||||
if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "EGL_KHR_gl_colorspace")) {
|
if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "EGL_KHR_gl_colorspace")) {
|
||||||
|
@ -618,6 +606,19 @@ SDL_EGL_CreateContext(_THIS, EGLSurface egl_surface)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_this->gl_config.no_error) {
|
||||||
|
#ifdef EGL_KHR_create_context_no_error
|
||||||
|
if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "EGL_KHR_create_context_no_error")) {
|
||||||
|
attribs[attr++] = EGL_CONTEXT_OPENGL_NO_ERROR_KHR;
|
||||||
|
attribs[attr++] = _this->gl_config.no_error;
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
SDL_SetError("EGL implementation does not support no_error contexts");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
attribs[attr++] = EGL_NONE;
|
attribs[attr++] = EGL_NONE;
|
||||||
|
|
||||||
/* Bind the API */
|
/* Bind the API */
|
||||||
|
|
|
@ -468,6 +468,11 @@ WIN_GL_InitExtensions(_THIS)
|
||||||
_this->gl_data->HAS_WGL_ARB_create_context_robustness = SDL_TRUE;
|
_this->gl_data->HAS_WGL_ARB_create_context_robustness = SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for WGL_ARB_create_context_no_error */
|
||||||
|
if (HasExtension("WGL_ARB_create_context_no_error", extensions)) {
|
||||||
|
_this->gl_data->HAS_WGL_ARB_create_context_no_error = SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
_this->gl_data->wglMakeCurrent(hdc, NULL);
|
_this->gl_data->wglMakeCurrent(hdc, NULL);
|
||||||
_this->gl_data->wglDeleteContext(hglrc);
|
_this->gl_data->wglDeleteContext(hglrc);
|
||||||
ReleaseDC(hwnd, hdc);
|
ReleaseDC(hwnd, hdc);
|
||||||
|
@ -598,11 +603,6 @@ WIN_GL_SetupWindowInternal(_THIS, SDL_Window * window)
|
||||||
*iAttr++ = _this->gl_config.framebuffer_srgb_capable;
|
*iAttr++ = _this->gl_config.framebuffer_srgb_capable;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_this->gl_config.no_error) {
|
|
||||||
*iAttr++ = WGL_CONTEXT_OPENGL_NO_ERROR_ARB;
|
|
||||||
*iAttr++ = _this->gl_config.no_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We always choose either FULL or NO accel on Windows, because of flaky
|
/* We always choose either FULL or NO accel on Windows, because of flaky
|
||||||
drivers. If the app didn't specify, we use FULL, because that's
|
drivers. If the app didn't specify, we use FULL, because that's
|
||||||
probably what they wanted (and if you didn't care and got FULL, that's
|
probably what they wanted (and if you didn't care and got FULL, that's
|
||||||
|
@ -728,8 +728,8 @@ WIN_GL_CreateContext(_THIS, SDL_Window * window)
|
||||||
SDL_SetError("GL 3.x is not supported");
|
SDL_SetError("GL 3.x is not supported");
|
||||||
context = temp_context;
|
context = temp_context;
|
||||||
} else {
|
} else {
|
||||||
/* max 12 attributes plus terminator */
|
/* max 14 attributes plus terminator */
|
||||||
int attribs[13] = {
|
int attribs[15] = {
|
||||||
WGL_CONTEXT_MAJOR_VERSION_ARB, _this->gl_config.major_version,
|
WGL_CONTEXT_MAJOR_VERSION_ARB, _this->gl_config.major_version,
|
||||||
WGL_CONTEXT_MINOR_VERSION_ARB, _this->gl_config.minor_version,
|
WGL_CONTEXT_MINOR_VERSION_ARB, _this->gl_config.minor_version,
|
||||||
0
|
0
|
||||||
|
@ -764,6 +764,12 @@ WIN_GL_CreateContext(_THIS, SDL_Window * window)
|
||||||
WGL_NO_RESET_NOTIFICATION_ARB;
|
WGL_NO_RESET_NOTIFICATION_ARB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* only set if wgl extension is available */
|
||||||
|
if (_this->gl_data->HAS_WGL_ARB_create_context_no_error) {
|
||||||
|
attribs[iattr++] = WGL_CONTEXT_OPENGL_NO_ERROR_ARB;
|
||||||
|
attribs[iattr++] = _this->gl_config.no_error;
|
||||||
|
}
|
||||||
|
|
||||||
attribs[iattr++] = 0;
|
attribs[iattr++] = 0;
|
||||||
|
|
||||||
/* Create the GL 3.x context */
|
/* Create the GL 3.x context */
|
||||||
|
|
|
@ -31,6 +31,7 @@ struct SDL_GLDriverData
|
||||||
SDL_bool HAS_WGL_EXT_swap_control_tear;
|
SDL_bool HAS_WGL_EXT_swap_control_tear;
|
||||||
SDL_bool HAS_WGL_ARB_context_flush_control;
|
SDL_bool HAS_WGL_ARB_context_flush_control;
|
||||||
SDL_bool HAS_WGL_ARB_create_context_robustness;
|
SDL_bool HAS_WGL_ARB_create_context_robustness;
|
||||||
|
SDL_bool HAS_WGL_ARB_create_context_no_error;
|
||||||
|
|
||||||
/* Max version of OpenGL ES context that can be created if the
|
/* Max version of OpenGL ES context that can be created if the
|
||||||
implementation supports WGL_EXT_create_context_es2_profile.
|
implementation supports WGL_EXT_create_context_es2_profile.
|
||||||
|
|
|
@ -406,6 +406,11 @@ X11_GL_InitExtensions(_THIS)
|
||||||
if (HasExtension("GLX_ARB_create_context_robustness", extensions)) {
|
if (HasExtension("GLX_ARB_create_context_robustness", extensions)) {
|
||||||
_this->gl_data->HAS_GLX_ARB_create_context_robustness = SDL_TRUE;
|
_this->gl_data->HAS_GLX_ARB_create_context_robustness = SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for GLX_ARB_create_context_no_error */
|
||||||
|
if (HasExtension("GLX_ARB_create_context_no_error", extensions)) {
|
||||||
|
_this->gl_data->HAS_GLX_ARB_create_context_no_error = SDL_TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* glXChooseVisual and glXChooseFBConfig have some small differences in
|
/* glXChooseVisual and glXChooseFBConfig have some small differences in
|
||||||
|
@ -501,11 +506,6 @@ X11_GL_GetAttributes(_THIS, Display * display, int screen, int * attribs, int si
|
||||||
attribs[i++] = True; /* always needed, for_FBConfig or not! */
|
attribs[i++] = True; /* always needed, for_FBConfig or not! */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_this->gl_config.no_error) {
|
|
||||||
attribs[i++] = GLX_CONTEXT_OPENGL_NO_ERROR_ARB;
|
|
||||||
attribs[i++] = _this->gl_config.no_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_this->gl_config.accelerated >= 0 &&
|
if (_this->gl_config.accelerated >= 0 &&
|
||||||
_this->gl_data->HAS_GLX_EXT_visual_rating) {
|
_this->gl_data->HAS_GLX_EXT_visual_rating) {
|
||||||
attribs[i++] = GLX_VISUAL_CAVEAT_EXT;
|
attribs[i++] = GLX_VISUAL_CAVEAT_EXT;
|
||||||
|
@ -638,8 +638,8 @@ X11_GL_CreateContext(_THIS, SDL_Window * window)
|
||||||
context =
|
context =
|
||||||
_this->gl_data->glXCreateContext(display, vinfo, share_context, True);
|
_this->gl_data->glXCreateContext(display, vinfo, share_context, True);
|
||||||
} else {
|
} else {
|
||||||
/* max 12 attributes plus terminator */
|
/* max 14 attributes plus terminator */
|
||||||
int attribs[13] = {
|
int attribs[15] = {
|
||||||
GLX_CONTEXT_MAJOR_VERSION_ARB,
|
GLX_CONTEXT_MAJOR_VERSION_ARB,
|
||||||
_this->gl_config.major_version,
|
_this->gl_config.major_version,
|
||||||
GLX_CONTEXT_MINOR_VERSION_ARB,
|
GLX_CONTEXT_MINOR_VERSION_ARB,
|
||||||
|
@ -678,6 +678,12 @@ X11_GL_CreateContext(_THIS, SDL_Window * window)
|
||||||
GLX_NO_RESET_NOTIFICATION_ARB;
|
GLX_NO_RESET_NOTIFICATION_ARB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* only set if glx extension is available */
|
||||||
|
if( _this->gl_data->HAS_GLX_ARB_create_context_no_error ) {
|
||||||
|
attribs[iattr++] = GLX_CONTEXT_OPENGL_NO_ERROR_ARB;
|
||||||
|
attribs[iattr++] = _this->gl_config.no_error;
|
||||||
|
}
|
||||||
|
|
||||||
attribs[iattr++] = 0;
|
attribs[iattr++] = 0;
|
||||||
|
|
||||||
/* Get a pointer to the context creation function for GL 3.0 */
|
/* Get a pointer to the context creation function for GL 3.0 */
|
||||||
|
|
|
@ -36,6 +36,7 @@ struct SDL_GLDriverData
|
||||||
SDL_bool HAS_GLX_EXT_swap_control_tear;
|
SDL_bool HAS_GLX_EXT_swap_control_tear;
|
||||||
SDL_bool HAS_GLX_ARB_context_flush_control;
|
SDL_bool HAS_GLX_ARB_context_flush_control;
|
||||||
SDL_bool HAS_GLX_ARB_create_context_robustness;
|
SDL_bool HAS_GLX_ARB_create_context_robustness;
|
||||||
|
SDL_bool HAS_GLX_ARB_create_context_no_error;
|
||||||
|
|
||||||
/* Max version of OpenGL ES context that can be created if the
|
/* Max version of OpenGL ES context that can be created if the
|
||||||
implementation supports GLX_EXT_create_context_es2_profile.
|
implementation supports GLX_EXT_create_context_es2_profile.
|
||||||
|
|
Loading…
Reference in New Issue