Mercurial > sdl-ios-xcode
diff src/video/x11/SDL_x11opengl.c @ 3105:cdeee9f9b14b
Fixed bug #721
From michalziulek@gmail.com 2009-03-28 07:43:34 (-) [reply]
There is a bug in OpenGL 3.x context creation code.
Function glXGetProcAddress is used directly where it should be:
_this->gl_data->glXGetProcAddress. I have attached patch which fixes this on
x11 and win32. Thanks.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 03 Apr 2009 17:19:05 +0000 |
parents | 7dc982143c06 |
children | 7f684f249ec9 |
line wrap: on
line diff
--- a/src/video/x11/SDL_x11opengl.c Fri Apr 03 13:35:05 2009 +0000 +++ b/src/video/x11/SDL_x11opengl.c Fri Apr 03 17:19:05 2009 +0000 @@ -413,21 +413,24 @@ }; /* Get a pointer to the context creation function for GL 3.0 */ - PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribs = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress((GLubyte*)"glXCreateContextAttribsARB"); + PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribs = (PFNGLXCREATECONTEXTATTRIBSARBPROC)_this->gl_data->glXGetProcAddress((GLubyte*)"glXCreateContextAttribsARB"); if (!glXCreateContextAttribs) { SDL_SetError("GL 3.x is not supported"); context = temp_context; } else { - /* Create a GL 3.0 context */ + /* Create a GL 3.x context */ GLXFBConfig *framebuffer_config = NULL; int fbcount = 0; - framebuffer_config = glXChooseFBConfig(display, DefaultScreen(display), NULL, &fbcount); - if (!framebuffer_config) { - SDL_SetError("No good framebuffers found. GL 3.0 disabled"); + GLXFBConfig* (*glXChooseFBConfig)(Display* disp, int screen, const int* attrib_list, int* nelements); + + glXChooseFBConfig = (GLXFBConfig* (*)(Display*, int, const int*, int*))_this->gl_data->glXGetProcAddress((GLubyte*)"glXChooseFBConfig"); + + if (!glXChooseFBConfig || !(framebuffer_config = glXChooseFBConfig(display, DefaultScreen(display), NULL, &fbcount))) { + SDL_SetError("No good framebuffers found. GL 3.x disabled"); context = temp_context; } else { context = glXCreateContextAttribs(display, framebuffer_config[0], NULL, True, attribs); - glXDestroyContext(display, temp_context); + _this->gl_data->glXDestroyContext(display, temp_context); } } }