6 #include "parameter.hh"
8 static Parameter<int> dualx11size("dualx11size", "Dual X11 window size",
11 DualX11Output::DualX11Output() {
12 display= XOpenDisplay(0);
13 Colormap cmap= DefaultColormap(display,DefaultScreen(display));
15 XAllocColorCells(display,cmap,
21 XColor colours[4], *cp= colours;
22 for (int i=0; i<2; i++)
23 for (int j=0; j<2; j++, cp++) {
24 cp->pixel= pixelbase + (i? planemasks[0] :0) + (j? planemasks[1] :0);
25 cp->red= i?65535:0; cp->green= j?/*65535*/32000:0; cp->blue= 0;
26 cp->flags= DoRed|DoGreen|DoBlue;
28 XStoreColors(display,cmap,colours,4);
30 window= XCreateSimpleWindow(display,
31 DefaultRootWindow(display),
32 0,0, dualx11size,dualx11size, 0,0, pixelbase);
37 gcvalues.plane_mask= planemasks[i];
39 gcvalues.function= GXclear;
40 fabric[i]= XCreateGC(display,window,
41 GCFunction|GCPlaneMask,
44 gcvalues.function= GXset;
45 mesh[i]= XCreateGC(display,window,
46 GCFunction|GCPlaneMask,
49 XSelectInput(display,window,0);
50 XMapWindow(display,window);
54 void DualX11Output::startimage() {
55 XClearWindow(display,window);
58 void DualX11Output::endimage() {
62 DualX11Output::~DualX11Output() {
63 XCloseDisplay(display);
66 void DualX11Output::drawcell(const Point* list, int n, Colour colour) {
67 static Parameter<double>
68 eyeseparation("eyesep", "Distance from projection eye to origin",
71 for (int i=0; i<2; i++) {
75 Point::seteyex(eyeseparation*(i-0.5));
78 case grid: fill= fabric[i]; draw= true; break;
79 case solidblack: fill= fabric[i]; draw= false; break;
80 case solidwhite: fill= mesh[i]; draw= false; break;
85 for (int j=0; j<n; j++) {
86 Onscreen here= Onscreen(list[j]);
87 xp[j].x= (int)((here.x+1.0)*(dualx11size*0.5));
88 xp[j].y= (int)((-here.y+1.0)*(dualx11size*0.5));
91 XFillPolygon(display,window,fill,xp,n,Nonconvex,CoordModeOrigin);
94 XDrawLines(display,window,mesh[i],xp,n+1,CoordModeOrigin);