Fixed Mac OS X OpenGL context creation to match other backends, where we only care about the actual version we request if it's 3.0 or newer or a special profile context.
Eventually we'll probably move the version checking to higher level code and report the actual version of context that got created, but to avoid breakage we'll leave it like this for now.main
parent
e99dc1f1bd
commit
b677d1d883
|
@ -162,9 +162,6 @@ SDL_GLContext
|
||||||
Cocoa_GL_CreateContext(_THIS, SDL_Window * window)
|
Cocoa_GL_CreateContext(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
|
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
|
||||||
/*
|
|
||||||
const GLubyte *(APIENTRY * glGetStringFunc)(GLenum) = NULL;
|
|
||||||
*/
|
|
||||||
NSAutoreleasePool *pool;
|
NSAutoreleasePool *pool;
|
||||||
SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
|
SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
|
||||||
SDL_DisplayData *displaydata = (SDL_DisplayData *)display->driverdata;
|
SDL_DisplayData *displaydata = (SDL_DisplayData *)display->driverdata;
|
||||||
|
@ -278,49 +275,46 @@ Cocoa_GL_CreateContext(_THIS, SDL_Window * window)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No other backend does this version checking.
|
if (_this->gl_config.major_version < 3 &&
|
||||||
If we enable it, we should consider whether it should be done at a
|
_this->gl_config.profile_mask == 0 &&
|
||||||
higher level for all platforms. We'll have to think through the implications
|
_this->gl_config.flags == 0) {
|
||||||
of this.
|
/* This is a legacy profile, so to match other backends, we're done. */
|
||||||
|
} else {
|
||||||
|
const GLubyte *(APIENTRY * glGetStringFunc)(GLenum);
|
||||||
|
|
||||||
For example, Mac OS X 10.6 will only report OpenGL 2.0, but we ask for 2.1
|
glGetStringFunc = (const GLubyte *(APIENTRY *)(GLenum)) SDL_GL_GetProcAddress("glGetString");
|
||||||
by default. If we don't get 2.1, then the renderer will set the requested
|
if (!glGetStringFunc) {
|
||||||
version and try to recreate the window, which causes all kinds of problems.
|
Cocoa_GL_DeleteContext(_this, context);
|
||||||
|
SDL_SetError ("Failed getting OpenGL glGetString entry point");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
For now, we'll just disable this code until we can think about it more.
|
glversion = (const char *)glGetStringFunc(GL_VERSION);
|
||||||
*/
|
if (glversion == NULL) {
|
||||||
#if 0
|
Cocoa_GL_DeleteContext(_this, context);
|
||||||
glGetStringFunc = (const GLubyte *(APIENTRY *)(GLenum)) SDL_GL_GetProcAddress("glGetString");
|
SDL_SetError ("Failed getting OpenGL context version");
|
||||||
if (!glGetStringFunc) {
|
return NULL;
|
||||||
Cocoa_GL_DeleteContext(_this, context);
|
}
|
||||||
SDL_SetError ("Failed getting OpenGL glGetString entry point");
|
|
||||||
return NULL;
|
if (SDL_sscanf(glversion, "%d.%d", &glversion_major, &glversion_minor) != 2) {
|
||||||
|
Cocoa_GL_DeleteContext(_this, context);
|
||||||
|
SDL_SetError ("Failed parsing OpenGL context version");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((glversion_major < _this->gl_config.major_version) ||
|
||||||
|
((glversion_major == _this->gl_config.major_version) && (glversion_minor < _this->gl_config.minor_version))) {
|
||||||
|
Cocoa_GL_DeleteContext(_this, context);
|
||||||
|
SDL_SetError ("Failed creating OpenGL context at version requested");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* In the future we'll want to do this, but to match other platforms
|
||||||
|
we'll leave the OpenGL version the way it is for now
|
||||||
|
*/
|
||||||
|
/*_this->gl_config.major_version = glversion_major;*/
|
||||||
|
/*_this->gl_config.minor_version = glversion_minor;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
glversion = (const char *)glGetStringFunc(GL_VERSION);
|
|
||||||
if (glversion == NULL) {
|
|
||||||
Cocoa_GL_DeleteContext(_this, context);
|
|
||||||
SDL_SetError ("Failed getting OpenGL context version");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SDL_sscanf(glversion, "%d.%d", &glversion_major, &glversion_minor) != 2) {
|
|
||||||
Cocoa_GL_DeleteContext(_this, context);
|
|
||||||
SDL_SetError ("Failed parsing OpenGL context version");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((glversion_major < _this->gl_config.major_version) ||
|
|
||||||
((glversion_major == _this->gl_config.major_version) && (glversion_minor < _this->gl_config.minor_version))) {
|
|
||||||
Cocoa_GL_DeleteContext(_this, context);
|
|
||||||
SDL_SetError ("Failed creating OpenGL context at version requested");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
_this->gl_config.major_version = glversion_major;
|
|
||||||
_this->gl_config.minor_version = glversion_minor;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -616,13 +616,13 @@ WIN_GL_CreateContext(_THIS, SDL_Window * window)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_this->gl_config.major_version < 3 &&
|
if (_this->gl_config.major_version < 3 &&
|
||||||
_this->gl_config.profile_mask == 0 &&
|
_this->gl_config.profile_mask == 0 &&
|
||||||
_this->gl_config.flags == 0) {
|
_this->gl_config.flags == 0) {
|
||||||
/* Create legacy context */
|
/* Create legacy context */
|
||||||
context = _this->gl_data->wglCreateContext(hdc);
|
context = _this->gl_data->wglCreateContext(hdc);
|
||||||
if( share_context != 0 ) {
|
if( share_context != 0 ) {
|
||||||
_this->gl_data->wglShareLists(share_context, context);
|
_this->gl_data->wglShareLists(share_context, context);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB;
|
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB;
|
||||||
HGLRC temp_context = _this->gl_data->wglCreateContext(hdc);
|
HGLRC temp_context = _this->gl_data->wglCreateContext(hdc);
|
||||||
|
|
Loading…
Reference in New Issue