| // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "glbench/xlib_window.h" |
| |
| #include <gflags/gflags.h> |
| #include <stdio.h> |
| |
| #include "base/logging.h" |
| |
| #include "glbench/glinterface.h" |
| #include "glbench/main.h" |
| |
| |
| Display *g_xlib_display = NULL; |
| Window g_xlib_window = 0; |
| |
| GLint g_width = WINDOW_WIDTH; |
| GLint g_height = WINDOW_HEIGHT; |
| DEFINE_bool(override_redirect, true, "Use an override redirect window"); |
| |
| |
| bool XlibInit() { |
| // Prevent multiple initializations. |
| if (g_xlib_window) |
| return true; |
| |
| g_xlib_display = XOpenDisplay(0); |
| if (!g_xlib_display) { |
| printf("# Error: in xlib_window.cc::XlibInit() could not open " |
| "default display.\n"); |
| return false; |
| } |
| |
| int screen = DefaultScreen(g_xlib_display); |
| Window root_window = RootWindow(g_xlib_display, screen); |
| |
| XWindowAttributes attributes; |
| XGetWindowAttributes(g_xlib_display, root_window, &attributes); |
| |
| g_width = g_width == -1 ? attributes.width : g_width; |
| g_height = g_height == -1 ? attributes.height : g_height; |
| XVisualInfo* xlib_visinfo = g_main_gl_interface->GetXVisual(); |
| |
| unsigned long mask = // NOLINT(runtime/int) |
| CWBackPixel | CWBorderPixel | CWColormap | CWEventMask | |
| CWOverrideRedirect; |
| XSetWindowAttributes attr; |
| attr.background_pixel = 0; |
| attr.border_pixel = 0; |
| attr.colormap = XCreateColormap(g_xlib_display, root_window, |
| xlib_visinfo->visual, AllocNone); |
| attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask; |
| attr.override_redirect = FLAGS_override_redirect ? True : False; |
| g_xlib_window = XCreateWindow(g_xlib_display, root_window, |
| 0, 0, g_width, g_height, 0, |
| xlib_visinfo->depth, InputOutput, |
| xlib_visinfo->visual, mask, &attr); |
| |
| XMapWindow(g_xlib_display, g_xlib_window); |
| XSync(g_xlib_display, True); |
| |
| XGetWindowAttributes(g_xlib_display, g_xlib_window, &attributes); |
| g_width = attributes.width; |
| g_height = attributes.height; |
| |
| XFree(xlib_visinfo); |
| |
| return true; |
| } |