+ const char *extstr;
+
+ extstr = (char*)glGetString(GL_EXTENSIONS);
+
+ if(strstr(extstr, "ARB_vertex_buffer_object")) {
+ if(!(gl_gen_buffers = get_proc_addr("glGenBuffers"))) {
+ gl_gen_buffers = get_proc_addr("glGenBuffersARB");
+ }
+ if(!(gl_bind_buffer = get_proc_addr("glBindBuffer"))) {
+ gl_bind_buffer = get_proc_addr("glBindBufferARB");
+ }
+ if(!(gl_buffer_data = get_proc_addr("glBufferData"))) {
+ gl_buffer_data = get_proc_addr("glBufferDataARB");
+ }
+ if(!(gl_buffer_sub_data = get_proc_addr("glBufferSubData"))) {
+ gl_buffer_sub_data = get_proc_addr("glBufferSubDataARB");
+ }
+ if(gl_gen_buffers && gl_bind_buffer && gl_buffer_data && gl_buffer_sub_data) {
+ have_vbo = 1;
+ }
+ }
+ if(have_vbo) {
+ printf("Using vertex buffer objects for the GL_POINTS test\n");
+ } else {
+ printf("No VBO extension, using client-side vertex arrays for the GL_POINTS test\n");
+ }
+
+#ifdef BUILD_X11
+ {
+ int scr;
+ XWindowAttributes wattr;
+
+ dpy = glXGetCurrentDisplay();
+ win = glXGetCurrentDrawable();
+
+ XGetWindowAttributes(dpy, win, &wattr);
+ scr = XScreenNumberOfScreen(wattr.screen);
+
+ if(!(extstr = glXQueryExtensionsString(dpy, scr))) {
+ return -1;
+ }
+ }
+
+ if(strstr(extstr, "GLX_EXT_swap_control") && (glx_swap_interval_ext = get_proc_addr("glXSwapIntervalEXT"))) {
+ printf("using GLX_EXT_swap_control to disable vsync\n");
+ glx_swap_interval_ext(dpy, win, 0);
+ } else if(strstr(extstr, "GLX_MESA_swap_control") && (glx_swap_interval_mesa = get_proc_addr("glXSwapIntervalMESA"))) {
+ printf("using GLX_MESA_swap_control to disable vsync\n");
+ glx_swap_interval_mesa(0);
+ } else if(strstr(extstr, "GLX_SGI_swap_control") && (glx_swap_interval_sgi = get_proc_addr("glXSwapIntervalSGI"))) {
+ printf("using GLX_SGI_swap_control to disable vsync\n");
+ glx_swap_interval_sgi(0);
+ } else {
+ fprintf(stderr, "No vsync extension found, you might need to disable vsync externally\n");
+ }
+#endif
+