Test off-screen rendering
| 1865 | |
| 1866 | // Test off-screen rendering |
| 1867 | int offScreenTest(bool dbPixmap, bool doUseXFont, bool doSelectEvent) |
| 1868 | { |
| 1869 | Display *dpy = NULL; Window win = 0; Pixmap pm0 = 0, pm1 = 0, pm2 = 0; |
| 1870 | GLXPixmap glxpm0 = 0, glxpm1 = 0; GLXPbuffer pb = 0; GLXWindow glxwin = 0; |
| 1871 | int dpyw, dpyh, lastFrame = 0, retval = 1; |
| 1872 | int glxattribs[] = { GLX_DOUBLEBUFFER, 1, GLX_RENDER_TYPE, GLX_RGBA_BIT, |
| 1873 | GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT | GLX_PBUFFER_BIT | GLX_WINDOW_BIT, |
| 1874 | GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, GLX_STENCIL_SIZE, 0, |
| 1875 | None }; |
| 1876 | XVisualInfo *vis = NULL; GLXFBConfig config = 0, *configs = NULL; |
| 1877 | int n = 0; |
| 1878 | GLXContext ctx = 0, ctx2 = 0; |
| 1879 | XSetWindowAttributes swa; |
| 1880 | XFontStruct *fontInfo = NULL; int minChar = 0, maxChar = 0; |
| 1881 | int fontListBase = 0; |
| 1882 | GLuint fbo = 0, rbo = 0; |
| 1883 | TestColor clr(0); |
| 1884 | |
| 1885 | printf("Off-screen rendering test\n\n"); |
| 1886 | |
| 1887 | try |
| 1888 | { |
| 1889 | if(!(dpy = XOpenDisplay(0))) THROW("Could not open display"); |
| 1890 | dpyw = DisplayWidth(dpy, DefaultScreen(dpy)); |
| 1891 | dpyh = DisplayHeight(dpy, DefaultScreen(dpy)); |
| 1892 | |
| 1893 | if(doUseXFont) |
| 1894 | { |
| 1895 | if(!(fontInfo = XLoadQueryFont(dpy, "fixed"))) |
| 1896 | THROW("Could not load X font"); |
| 1897 | minChar = fontInfo->min_char_or_byte2; |
| 1898 | maxChar = fontInfo->max_char_or_byte2; |
| 1899 | } |
| 1900 | |
| 1901 | if((configs = glXChooseFBConfigSGIX(dpy, DefaultScreen(dpy), glxattribs, |
| 1902 | &n)) == NULL || n == 0) |
| 1903 | THROW("Could not find a suitable FB config"); |
| 1904 | config = configs[0]; |
| 1905 | int fbcid = cfgid(dpy, config); |
| 1906 | XFree(configs); configs = NULL; |
| 1907 | if((vis = glXGetVisualFromFBConfigSGIX(dpy, config)) == NULL) |
| 1908 | THROW("Could not find matching visual for FB config"); |
| 1909 | |
| 1910 | Window root = RootWindow(dpy, DefaultScreen(dpy)); |
| 1911 | swa.colormap = XCreateColormap(dpy, root, vis->visual, AllocNone); |
| 1912 | swa.border_pixel = 0; |
| 1913 | swa.background_pixel = 0; |
| 1914 | swa.event_mask = 0; |
| 1915 | if((win = XCreateWindow(dpy, root, 0, 0, dpyw / 2, dpyh / 2, 0, vis->depth, |
| 1916 | InputOutput, vis->visual, CWBorderPixel | CWColormap | CWEventMask, |
| 1917 | &swa)) == 0) |
| 1918 | THROW("Could not create window"); |
| 1919 | XMapWindow(dpy, win); |
| 1920 | if((glxwin = glXCreateWindow(dpy, config, win, NULL)) == 0) |
| 1921 | THROW("Could not create GLX window"); |
| 1922 | checkDrawable(dpy, glxwin, dpyw / 2, dpyh / 2, -1, -1, fbcid); |
| 1923 | |
| 1924 | if((pm0 = XCreatePixmap(dpy, win, dpyw / 2, dpyh / 2, vis->depth)) == 0 |
no test coverage detected