| 2829 | #endif |
| 2830 | #if defined(VK_USE_PLATFORM_XLIB_KHR) |
| 2831 | static void demo_create_xlib_window(struct demo *demo) { |
| 2832 | const char *display_envar = getenv("DISPLAY"); |
| 2833 | if (display_envar == NULL || display_envar[0] == '\0') { |
| 2834 | printf("Environment variable DISPLAY requires a valid value.\nExiting ...\n"); |
| 2835 | fflush(stdout); |
| 2836 | exit(1); |
| 2837 | } |
| 2838 | |
| 2839 | XInitThreads(); |
| 2840 | demo->xlib_display = XOpenDisplay(NULL); |
| 2841 | long visualMask = VisualScreenMask; |
| 2842 | int numberOfVisuals; |
| 2843 | XVisualInfo vInfoTemplate = {}; |
| 2844 | vInfoTemplate.screen = DefaultScreen(demo->xlib_display); |
| 2845 | XVisualInfo *visualInfo = XGetVisualInfo(demo->xlib_display, visualMask, &vInfoTemplate, &numberOfVisuals); |
| 2846 | |
| 2847 | Colormap colormap = |
| 2848 | XCreateColormap(demo->xlib_display, RootWindow(demo->xlib_display, vInfoTemplate.screen), visualInfo->visual, AllocNone); |
| 2849 | |
| 2850 | XSetWindowAttributes windowAttributes = {}; |
| 2851 | windowAttributes.colormap = colormap; |
| 2852 | windowAttributes.background_pixel = 0xFFFFFFFF; |
| 2853 | windowAttributes.border_pixel = 0; |
| 2854 | windowAttributes.event_mask = KeyPressMask | KeyReleaseMask | StructureNotifyMask | ExposureMask; |
| 2855 | |
| 2856 | demo->xlib_window = XCreateWindow(demo->xlib_display, RootWindow(demo->xlib_display, vInfoTemplate.screen), 0, 0, demo->width, |
| 2857 | demo->height, 0, visualInfo->depth, InputOutput, visualInfo->visual, |
| 2858 | CWBackPixel | CWBorderPixel | CWEventMask | CWColormap, &windowAttributes); |
| 2859 | |
| 2860 | XSelectInput(demo->xlib_display, demo->xlib_window, ExposureMask | KeyPressMask); |
| 2861 | XMapWindow(demo->xlib_display, demo->xlib_window); |
| 2862 | XFlush(demo->xlib_display); |
| 2863 | demo->xlib_wm_delete_window = XInternAtom(demo->xlib_display, "WM_DELETE_WINDOW", False); |
| 2864 | XSetWMProtocols(demo->xlib_display, demo->xlib_window, &demo->xlib_wm_delete_window, 1); |
| 2865 | } |
| 2866 | static void demo_handle_xlib_event(struct demo *demo, const XEvent *event) { |
| 2867 | switch (event->type) { |
| 2868 | case ClientMessage: |