--- ray/src/hd/rhd_x11.c 1998/01/04 08:32:01 3.22 +++ ray/src/hd/rhd_x11.c 1998/08/19 17:43:08 3.27 @@ -1,4 +1,4 @@ -/* Copyright (c) 1997 Silicon Graphics, Inc. */ +/* Copyright (c) 1998 Silicon Graphics, Inc. */ #ifndef lint static char SCCSid[] = "$SunId$ SGI"; @@ -96,8 +96,10 @@ dev_open(id) /* initialize X11 driver */ char *id; { extern char *getenv(); - char *gv; + static RGBPRIMS myprims = STDPRIMS; + char *ev; double gamval = GAMMA; + RGBPRIMP dpri = stdprims; int nplanes; XSetWindowAttributes ourwinattr; XWMHints ourxwmhints; @@ -130,10 +132,17 @@ char *id; ourwhite = WhitePixel(ourdisplay,ourscreen); } /* set gamma and tone mapping */ - if ((gv = XGetDefault(ourdisplay, "radiance", "gamma")) != NULL - || (gv = getenv("DISPLAY_GAMMA")) != NULL) - gamval = atof(gv); - if (tmInit(mytmflags(), stdprims, gamval) == NULL) + if ((ev = XGetDefault(ourdisplay, "radiance", "gamma")) != NULL + || (ev = getenv("DISPLAY_GAMMA")) != NULL) + gamval = atof(ev); + if ((ev = getenv("DISPLAY_PRIMARIES")) != NULL && + sscanf(ev, "%f %f %f %f %f %f %f %f", + &myprims[RED][CIEX],&myprims[RED][CIEY], + &myprims[GRN][CIEX],&myprims[GRN][CIEY], + &myprims[BLU][CIEX],&myprims[BLU][CIEY], + &myprims[WHT][CIEX],&myprims[WHT][CIEY]) >= 6) + dpri = myprims; + if (tmInit(mytmflags(), dpri, gamval) == NULL) error(SYSTEM, "not enough memory in dev_open"); /* open window */ ourwinattr.background_pixel = ourblack; @@ -199,6 +208,16 @@ dev_close() /* close our display */ } + +dev_clear() /* clear our quadtree */ +{ + qtCompost(100); + if (ncolors > 0) + new_ctab(ncolors); + rayqleft = 0; /* hold off update */ +} + + int dev_view(nv) /* assign new driver view */ VIEW *nv; @@ -246,6 +265,26 @@ VIEW *nv; } +dev_auxcom(cmd, args) /* process an auxiliary command */ +char *cmd, *args; +{ + sprintf(errmsg, "%s: unknown command", cmd); + error(COMMAND, errmsg); +} + + +VIEW * +dev_auxview(n, hvres) /* return nth auxiliary view */ +int n; +int hvres[2]; +{ + if (n) + return(NULL); + hvres[0] = odev.hres; hvres[1] = odev.vres; + return(&odev.v); +} + + int dev_input() /* get X11 input */ { @@ -254,8 +293,10 @@ dev_input() /* get X11 input */ do getevent(); - while (XQLength(ourdisplay) > 0); + while (XPending(ourdisplay) > 0); + odev.inpready = 0; + return(inpresflags); } @@ -283,7 +324,7 @@ dev_flush() /* flush output */ { qtUpdate(); rayqleft = RAYQLEN; - return(XPending(ourdisplay)); + return(odev.inpready = XPending(ourdisplay)); }