ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/glrad.c
(Generate patch)

Comparing ray/src/util/glrad.c (file contents):
Revision 3.7 by gwlarson, Tue Jul 7 08:58:34 1998 UTC vs.
Revision 3.16 by schorsch, Mon Jun 30 14:59:13 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1998 Silicon Graphics, Inc. */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ SGI";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Program to display Radiance scene using OpenGL.
6   */
7  
11 #include "radogl.h"
12 #include "view.h"
13 #include "paths.h"
8   #include <sys/types.h>
9   #include <GL/glx.h>
10   #ifndef NOSTEREO
11   #include <X11/extensions/SGIStereo.h>
12   #endif
13   #include <ctype.h>
14 + #include <string.h>
15 + #include <time.h>
16 +
17 + #include "radogl.h"
18 + #include "view.h"
19 + #include "paths.h"
20   #include "glradicon.h"
21 + #include "rtprocess.h"
22  
23   #ifndef MAXVIEW
24   #define MAXVIEW         63              /* maximum number of standard views */
# Line 74 | Line 75 | char   *scene[MAXSCENE+1];             /* material and scene file l
75   int     nscenef = 0;                    /* number of scene files */
76   char    *octree;                        /* octree name (NULL if unnec.) */
77  
78 < int     rtpd[3];                        /* rtrace process descriptors */
78 > SUBPROC rtpd;                   /* rtrace process descriptors */
79  
80   int     silent = 0;                     /* run rad silently? */
81   int     backvis = 1;                    /* back faces visible? */
# Line 92 | Line 93 | int    displist;                       /* our scene display list */
93  
94   int     no_render = 0;                  /* don't rerender */
95  
96 < #ifdef BSD
96 < #define strchr          index
97 < #endif
98 <
99 < extern char     *strchr(), *fgets(), *fgetline(), *atos(), *scan4var();
96 > extern char     *fgetline(), *atos(), *scan4var();
97   extern int      nowarn;                 /* turn warnings off? */
101 extern time_t   time();
98  
99  
100   main(argc, argv)
# Line 161 | Line 157 | char   *argv[];
157          dev_open(radfile = argv[i]);
158                                          /* load octree or scene files */
159          if (octree != NULL) {
160 <                displist = rgl_octlist(octree, NULL, NULL);
160 >                displist = rgl_octlist(octree, NULL, NULL, NULL);
161                  startrtrace(octree);
162          } else
163 <                displist = rgl_filelist(nscenef, scene);
163 >                displist = rgl_filelist(nscenef, scene, NULL);
164                                          /* set initial view */
165          dev_view(currentview < 0 ? &thisview : vwl[currentview].v);
166                                          /* input/render loop */
# Line 173 | Line 169 | char   *argv[];
169                                          /* all done */
170          quit(0);
171   userr:
172 <        fprintf(stderr, "Usage: %s [-w][-b][-v view] rfile [VAR=value]..\n",
172 >        fprintf(stderr,
173 >                "Usage: %s [-w][-s][-b][-S][-v view] rfile [VAR=value]..\n",
174                          argv[0]);
175          quit(1);
176   }
177  
178  
179 + void
180   quit(code)                              /* exit gracefully */
181   int     code;
182   {
183          if (ourdisplay != NULL)
184                  dev_close();
185 <        if (rtpd[2] > 0) {
186 <                if (close_process(rtpd) > 0)
185 >        /* if (rtpd.pid > 0) { */
186 >        if (rtpd.running) {
187 >                if (close_process(&rtpd) > 0)
188                          wputs("bad exit status from rtrace\n");
189 <                rtpd[2] = 0;
189 >                /* rtpd.pid = 0; */
190          }
191          exit(code);
192   }
# Line 203 | Line 202 | char   *octname;
202          if (nowarn) av[ac++] = "-w-";
203          av[ac++] = octname;
204          av[ac] = NULL;
205 <        if (open_process(rtpd, av) <= 0)
205 >        if (open_process(&rtpd, av) <= 0)
206                  error(SYSTEM, "cannot start rtrace process");
207   }
208  
# Line 297 | Line 296 | char   **av;
296                                          atof(sskip2(buf+4,1)),
297                                          atof(sskip2(buf+4,2)));
298                  else if (backvis && !strncmp(buf, "-bv", 3) &&
299 <                                (!buf[3] || strchr(" 0-FfNn", buf[3]) != NULL))
299 >                                (!buf[3] || strchr("0-FfNn \n",buf[3])!=NULL))
300                          backvis = 0;
301          fclose(fp);
302          unlink(optfile);                        /* delete options file */
# Line 425 | Line 424 | char  *id;
424          glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
425          glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
426          glEnable(GL_LIGHTING);
427 +        glFrontFace(GL_CCW);
428 +        glCullFace(GL_BACK);
429          if (backvis)
430                  glDisable(GL_CULL_FACE);
431 <        else {
431 <                glFrontFace(GL_CCW);
432 <                glCullFace(GL_BACK);
431 >        else
432                  glEnable(GL_CULL_FACE);
434        }
433          glDrawBuffer(GL_BACK);
434                                          /* figure out sensible view */
435          pwidth = (double)DisplayWidthMM(ourdisplay, ourscreen) /
# Line 626 | Line 624 | int    dx, dy, mov, orb;
624   }
625  
626  
627 + static
628 + waitabit()                              /* pause a moment */
629 + {
630 +        struct timespec ts;
631 +        ts.tv_sec = 0;
632 +        ts.tv_nsec = 5000000;
633 +        nanosleep(&ts, NULL);
634 + }
635 +
636 +
637   getmove(ebut)                           /* get view change */
638   XButtonPressedEvent     *ebut;
639   {
# Line 642 | Line 650 | XButtonPressedEvent    *ebut;
650  
651          while (!XCheckMaskEvent(ourdisplay,
652                          ButtonReleaseMask, levptr(XEvent))) {
653 +                                        /* pause so as not to move too fast */
654 +                waitabit();
655  
656                  if (!XQueryPointer(ourdisplay, gwind, &rootw, &childw,
657                                  &rootx, &rooty, &wx, &wy, &statemask))
# Line 669 | Line 679 | double md;
679   {
680          float   fbuf[6];
681                                  /* check to see if rtrace is running */
682 <        if (rtpd[2] <= 0)
682 >        /* if (rtpd.pid <= 0) */
683 >        if (!rtpd.running)
684                  return(0);
685                                  /* assign origin */
686          fbuf[0] = org[0]; fbuf[1] = org[1]; fbuf[2] = org[2];
# Line 677 | Line 688 | double md;
688          if (md <= FTINY) md = FHUGE;
689          fbuf[3] = dir[0]*md; fbuf[4] = dir[1]*md; fbuf[5] = dir[2]*md;
690                                  /* trace that ray */
691 <        if (process(rtpd, fbuf, fbuf, 4*sizeof(float), 6*sizeof(float)) !=
692 <                        4*sizeof(float))
691 >        if (process(&rtpd, (char *)fbuf, (char *)fbuf,
692 >                        4*sizeof(float), 6*sizeof(float)) != 4*sizeof(float))
693                  error(INTERNAL, "error getting data back from rtrace process");
694          if (fbuf[3] >= .99*FHUGE)
695                  return(0);      /* missed local objects */
# Line 820 | Line 831 | VIEW   *vp;
831   {
832          FILE    *fp;
833                                          /* check if already in there */
834 <        if (!bcmp(&thisview, vwl[currentview].v, sizeof(VIEW))) {
834 >        if (!memcmp(&thisview, vwl[currentview].v, sizeof(VIEW))) {
835                  error(COMMAND, "view already in standard list");
836                  return;
837          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines