fix crashes due to X returning garbage when asked for an extension function
that doesn't exist
This commit is contained in:
@@ -630,23 +630,48 @@ void SetupExtensions()
|
|||||||
const float fGLUVersion = (float) atof( (const char *) gluGetString(GLU_VERSION) );
|
const float fGLUVersion = (float) atof( (const char *) gluGetString(GLU_VERSION) );
|
||||||
g_gluVersion = int(roundf(fGLUVersion * 10));
|
g_gluVersion = int(roundf(fGLUVersion * 10));
|
||||||
|
|
||||||
/* Find extension functions. */
|
/* Reset extensions. */
|
||||||
GLExt.Reset();
|
GLExt.Reset();
|
||||||
|
|
||||||
#if !defined(DARWIN)
|
/*
|
||||||
GLExt.wglSwapIntervalEXT = (PWSWAPINTERVALEXTPROC) wind->GetProcAddress("wglSwapIntervalEXT");
|
* Find extension functions.
|
||||||
#else
|
*
|
||||||
GLExt.wglSwapIntervalEXT = wglSwapIntervalEXT;
|
* X11R6.7.0 (or possibly ATI's drivers) seem to be returning bogus values for glBindBufferARB
|
||||||
|
* if we don't actually check for GL_ARB_vertex_buffer_object.
|
||||||
|
* https://sf.net/tracker/download.php?group_id=37892&atid=421366&file_id=88086&aid=958820
|
||||||
|
* https://sf.net/tracker/download.php?group_id=37892&atid=421366&file_id=85542&aid=944836
|
||||||
|
*
|
||||||
|
* Let's check them all, to be safe.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
|
if( HasExtension("WGL_EXT_swap_control") )
|
||||||
|
GLExt.wglSwapIntervalEXT = (PWSWAPINTERVALEXTPROC) wind->GetProcAddress("wglSwapIntervalEXT");
|
||||||
|
#elif defined(DARWIN)
|
||||||
|
GLExt.wglSwapIntervalEXT = wglSwapIntervalEXT;
|
||||||
#endif
|
#endif
|
||||||
GLExt.glColorTableEXT = (PFNGLCOLORTABLEPROC) wind->GetProcAddress("glColorTableEXT");
|
|
||||||
GLExt.glGetColorTableParameterivEXT = (PFNGLCOLORTABLEPARAMETERIVPROC) wind->GetProcAddress("glGetColorTableParameterivEXT");
|
if( HasExtension("EXT_paletted_texture") )
|
||||||
GLExt.glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wind->GetProcAddress("glActiveTextureARB");
|
{
|
||||||
GLExt.glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wind->GetProcAddress("glGenBuffersARB");
|
GLExt.glColorTableEXT = (PFNGLCOLORTABLEPROC) wind->GetProcAddress("glColorTableEXT");
|
||||||
GLExt.glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wind->GetProcAddress("glBindBufferARB");
|
GLExt.glGetColorTableParameterivEXT = (PFNGLCOLORTABLEPARAMETERIVPROC) wind->GetProcAddress("glGetColorTableParameterivEXT");
|
||||||
GLExt.glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wind->GetProcAddress("glBufferDataARB");
|
}
|
||||||
GLExt.glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC) wind->GetProcAddress("glBufferSubDataARB");
|
|
||||||
GLExt.glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) wind->GetProcAddress("glDeleteBuffersARB");
|
if( HasExtension("GL_ARB_multitexture") )
|
||||||
GLExt.glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC) wind->GetProcAddress("glDrawRangeElements");
|
GLExt.glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wind->GetProcAddress("glActiveTextureARB");
|
||||||
|
|
||||||
|
if( HasExtension("GL_ARB_vertex_buffer_object") )
|
||||||
|
{
|
||||||
|
GLExt.glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wind->GetProcAddress("glGenBuffersARB");
|
||||||
|
GLExt.glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wind->GetProcAddress("glBindBufferARB");
|
||||||
|
GLExt.glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wind->GetProcAddress("glBufferDataARB");
|
||||||
|
GLExt.glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC) wind->GetProcAddress("glBufferSubDataARB");
|
||||||
|
GLExt.glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) wind->GetProcAddress("glDeleteBuffersARB");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( HasExtension("GL_EXT_draw_range_elements") )
|
||||||
|
GLExt.glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC) wind->GetProcAddress("glDrawRangeElements");
|
||||||
|
|
||||||
g_bEXT_texture_env_combine = HasExtension("GL_EXT_texture_env_combine");
|
g_bEXT_texture_env_combine = HasExtension("GL_EXT_texture_env_combine");
|
||||||
g_bGL_EXT_bgra = HasExtension("GL_EXT_bgra");
|
g_bGL_EXT_bgra = HasExtension("GL_EXT_bgra");
|
||||||
CheckPalettedTextures();
|
CheckPalettedTextures();
|
||||||
|
|||||||
Reference in New Issue
Block a user