| 2819 | // subwindows |
| 2820 | |
| 2821 | int subWinTest(void) |
| 2822 | { |
| 2823 | Display *dpy = NULL; Window win = 0, win1 = 0, win2 = 0; |
| 2824 | #ifdef FAKEXCB |
| 2825 | xcb_connection_t *conn = NULL; |
| 2826 | #endif |
| 2827 | TestColor clr(0); |
| 2828 | int dpyw, dpyh, retval = 1, lastFrame = 0; |
| 2829 | int glxattribs[] = { GLX_DOUBLEBUFFER, GLX_RGBA, GLX_RED_SIZE, 8, |
| 2830 | GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, None }; |
| 2831 | XVisualInfo *vis = NULL; |
| 2832 | GLXContext ctx = 0; |
| 2833 | XSetWindowAttributes swa; |
| 2834 | |
| 2835 | printf("Subwindow destruction test:\n\n"); |
| 2836 | |
| 2837 | try |
| 2838 | { |
| 2839 | try |
| 2840 | { |
| 2841 | for(int i = 0; i < 20; i++) |
| 2842 | { |
| 2843 | if(!dpy && !(dpy = XOpenDisplay(0))) |
| 2844 | THROW("Could not open display"); |
| 2845 | dpyw = DisplayWidth(dpy, DefaultScreen(dpy)); |
| 2846 | dpyh = DisplayHeight(dpy, DefaultScreen(dpy)); |
| 2847 | |
| 2848 | if((vis = glXChooseVisual(dpy, DefaultScreen(dpy), |
| 2849 | glxattribs)) == NULL) |
| 2850 | THROW("Could not find a suitable visual"); |
| 2851 | |
| 2852 | Window root = RootWindow(dpy, DefaultScreen(dpy)); |
| 2853 | swa.colormap = XCreateColormap(dpy, root, vis->visual, AllocNone); |
| 2854 | swa.border_pixel = 0; |
| 2855 | swa.background_pixel = 0; |
| 2856 | swa.event_mask = 0; |
| 2857 | if(!win && (win = XCreateWindow(dpy, root, 0, 0, dpyw / 2, dpyh / 2, 0, |
| 2858 | vis->depth, InputOutput, vis->visual, |
| 2859 | CWBorderPixel | CWColormap | CWEventMask, &swa)) == 0) |
| 2860 | THROW("Could not create window"); |
| 2861 | if((win1 = XCreateWindow(dpy, win, 0, 0, dpyw / 2, dpyh / 2, 0, |
| 2862 | vis->depth, InputOutput, vis->visual, |
| 2863 | CWBorderPixel | CWColormap | CWEventMask, &swa)) == 0) |
| 2864 | THROW("Could not create subwindow"); |
| 2865 | if((win2 = XCreateWindow(dpy, win1, 0, 0, dpyw / 2, dpyh / 2, 0, |
| 2866 | vis->depth, InputOutput, vis->visual, |
| 2867 | CWBorderPixel | CWColormap | CWEventMask, &swa)) == 0) |
| 2868 | THROW("Could not create subwindow"); |
| 2869 | XMapSubwindows(dpy, win); |
| 2870 | XMapWindow(dpy, win); |
| 2871 | |
| 2872 | lastFrame = 0; |
| 2873 | if(!(ctx = glXCreateContext(dpy, vis, NULL, True))) |
| 2874 | THROW("Could not create context"); |
| 2875 | XFree(vis); vis = NULL; |
| 2876 | if(!(glXMakeCurrent(dpy, win2, ctx))) |
| 2877 | THROWNL("Could not make context current"); |
| 2878 | clr.clear(GL_BACK); |
no test coverage detected