# HG changeset patch # User reimar # Date 1132408835 0 # Node ID fd178c06dc847604f938d38f139f9d2850239092 # Parent baf593fcf7384d26ad14e26b540bec2a1bdc4a62 Also parse glX extension string, makes -vo gl:swapinterval work again on linux diff -r baf593fcf738 -r fd178c06dc84 libvo/gl_common.c --- a/libvo/gl_common.c Fri Nov 18 16:28:26 2005 +0000 +++ b/libvo/gl_common.c Sat Nov 19 14:00:35 2005 +0000 @@ -249,9 +249,13 @@ /** * \brief find the function pointers of some useful OpenGL extensions * \param getProcAddress function to resolve function names, may be NULL + * \param ext2 an extra extension string */ -static void getFunctions(void *(*getProcAddress)(const GLubyte *)) { +static void getFunctions(void *(*getProcAddress)(const GLubyte *), + const char *ext2) { const char *extensions = glGetString(GL_EXTENSIONS); + if (!extensions) extensions = ""; + if (!ext2) ext2 = ""; if (!getProcAddress) getProcAddress = setNull; GenBuffers = getProcAddress("glGenBuffers"); @@ -324,7 +328,7 @@ ProgramEnvParameter4f = getProcAddress("glProgramEnvParameter4fARB"); if (!ProgramEnvParameter4f) ProgramEnvParameter4f = getProcAddress("glProgramEnvParameter4fNV"); - if (!extensions || !strstr(extensions, "_swap_control")) + if (!strstr(extensions, "_swap_control") && !strstr(ext2, "_swap_control")) SwapInterval = NULL; else { SwapInterval = getProcAddress("glXSwapInterval"); @@ -1003,7 +1007,7 @@ wglDeleteContext(*context); *context = new_context; *vinfo = new_vinfo; - getFunctions(w32gpa); + getFunctions(w32gpa, NULL); // and inform that reinit is neccessary return SET_WINDOW_REINIT; @@ -1117,6 +1121,7 @@ } if (!keep_context) { void *(*getProcAddress)(const GLubyte *); + const char *(*glXExtStr)(Display *, int); if (*context) glXDestroyContext(mDisplay, *context); *context = new_context; @@ -1128,7 +1133,9 @@ getProcAddress = getdladdr("glXGetProcAddressARB"); if (!getProcAddress) getProcAddress = getdladdr; - getFunctions(getProcAddress); + glXExtStr = getdladdr("glXQueryExtensionsString"); + getFunctions(getProcAddress, !glXExtStr ? NULL : + glXExtStr(mDisplay, DefaultScreen(mDisplay))); // and inform that reinit is neccessary return SET_WINDOW_REINIT;