Index: client/deps/glbench/src/glx_stuff.cc |
diff --git a/client/deps/glbench/src/glx_stuff.cc b/client/deps/glbench/src/glx_stuff.cc |
index 57b481dd17814bd00ee044b3bad2d89d8fe23b07..758ea29346bb74206d75c94045c9bbb30654567b 100644 |
--- a/client/deps/glbench/src/glx_stuff.cc |
+++ b/client/deps/glbench/src/glx_stuff.cc |
@@ -3,11 +3,12 @@ |
// found in the LICENSE file. |
#include <string.h> |
+#include <GL/glx.h> |
#include "main.h" |
#include "xlib_window.h" |
-GLXContext glx_context = NULL; |
+static GLXContext glx_context = NULL; |
#define F(fun, type) type fun = NULL; |
LIST_PROC_FUNCTIONS(F) |
@@ -17,24 +18,33 @@ bool Init() { |
return XlibInit(); |
} |
+VisualID GetVisualID() { |
+ int screen = DefaultScreen(xlib_display); |
+ int attrib[] = { |
+ GLX_DOUBLEBUFFER, True, |
+ GLX_RED_SIZE, 1, |
+ GLX_GREEN_SIZE, 1, |
+ GLX_BLUE_SIZE, 1, |
+ GLX_DEPTH_SIZE, 1, |
+ GLX_STENCIL_SIZE, 1, |
+ GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, |
+ None |
+ }; |
+ int nelements; |
+ GLXFBConfig *fbconfigs = glXChooseFBConfig(xlib_display, screen, |
+ attrib, &nelements); |
+ CHECK(nelements >= 1); |
+ int visual_id; |
+ glXGetFBConfigAttrib(xlib_display, fbconfigs[0], GLX_VISUAL_ID, &visual_id); |
+ XFree(fbconfigs); |
+ return static_cast<VisualID>(visual_id); |
+} |
+ |
bool InitContext() { |
- XWindowAttributes attributes; |
- XGetWindowAttributes(xlib_display, xlib_window, &attributes); |
- XVisualInfo visual_info_template; |
- visual_info_template.visualid = XVisualIDFromVisual(attributes.visual); |
- int visual_info_count = 0; |
- XVisualInfo *visual_info_list = XGetVisualInfo(xlib_display, VisualIDMask, |
- &visual_info_template, |
- &visual_info_count); |
- glx_context = 0; |
- for (int i = 0; i < visual_info_count; ++i) { |
- glx_context = glXCreateContext(xlib_display, visual_info_list + i, 0, True); |
- if (glx_context) break; |
- } |
- XFree(visual_info_list); |
- if (!glx_context) { |
+ glx_context = glXCreateContext(xlib_display, xlib_visinfo, 0, True); |
+ if (!glx_context) |
return false; |
- } |
+ |
if (!glXMakeCurrent(xlib_display, xlib_window, glx_context)) { |
glXDestroyContext(xlib_display, glx_context); |
return false; |