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.4 by gwlarson, Wed Jun 10 17:52:18 1998 UTC vs.
Revision 3.13 by greg, Sat Feb 22 02:07:30 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 <time.h>
15 + #include "radogl.h"
16 + #include "view.h"
17 + #include "paths.h"
18   #include "glradicon.h"
19  
20   #ifndef MAXVIEW
# Line 33 | Line 31 | static char SCCSid[] = "$SunId$ SGI";
31   #define MOVDEG          (-5)            /* degrees to orbit CW/down /frame */
32   #define MOVORB(s)       ((s)&ShiftMask ? 1 : (s)&ControlMask ? -1 : 0)
33  
36 #define MINWIDTH        480             /* minimum graphics window width */
37 #define MINHEIGHT       400             /* minimum graphics window height */
38
34   #define BORWIDTH        5               /* border width */
35  
36   #define  ourscreen      DefaultScreen(ourdisplay)
# Line 93 | Line 88 | int    stereo = 0;                     /* do stereo? */
88  
89   int     displist;                       /* our scene display list */
90  
91 < int     in_dev_view = 0;                /* currently in dev_view() */
91 > int     no_render = 0;                  /* don't rerender */
92  
93   #ifdef BSD
94   #define strchr          index
# Line 164 | Line 159 | char   *argv[];
159          dev_open(radfile = argv[i]);
160                                          /* load octree or scene files */
161          if (octree != NULL) {
162 <                displist = rgl_octlist(octree, NULL, NULL);
162 >                displist = rgl_octlist(octree, NULL, NULL, NULL);
163                  startrtrace(octree);
164          } else
165 <                displist = rgl_filelist(nscenef, scene);
165 >                displist = rgl_filelist(nscenef, scene, NULL);
166                                          /* set initial view */
167          dev_view(currentview < 0 ? &thisview : vwl[currentview].v);
168                                          /* input/render loop */
# Line 176 | Line 171 | char   *argv[];
171                                          /* all done */
172          quit(0);
173   userr:
174 <        fprintf(stderr, "Usage: %s [-w][-b][-v view] rfile [VAR=value]..\n",
174 >        fprintf(stderr,
175 >                "Usage: %s [-w][-s][-b][-S][-v view] rfile [VAR=value]..\n",
176                          argv[0]);
177          quit(1);
178   }
179  
180  
181 + void
182   quit(code)                              /* exit gracefully */
183   int     code;
184   {
# Line 300 | Line 297 | char   **av;
297                                          atof(sskip2(buf+4,1)),
298                                          atof(sskip2(buf+4,2)));
299                  else if (backvis && !strncmp(buf, "-bv", 3) &&
300 <                                (!buf[3] || strchr(" 0-FfNn", buf[3]) != NULL))
300 >                                (!buf[3] || strchr("0-FfNn \n",buf[3])!=NULL))
301                          backvis = 0;
302          fclose(fp);
303          unlink(optfile);                        /* delete options file */
# Line 374 | Line 371 | char  *id;
371                                  GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE,15, None};
372          XSetWindowAttributes    ourwinattr;
373          XWMHints        ourxwmhints;
377        XSizeHints      oursizhints;
374                                          /* open display server */
375          ourdisplay = XOpenDisplay(NULL);
376          if (ourdisplay == NULL)
# Line 421 | Line 417 | char  *id;
417          ourxwmhints.icon_pixmap = XCreateBitmapFromData(ourdisplay,
418                  gwind, glradicon_bits, glradicon_width, glradicon_height);
419          XSetWMHints(ourdisplay, gwind, &ourxwmhints);
424        oursizhints.min_width = MINWIDTH;
425        oursizhints.min_height = stereo ? MINHEIGHT/2 : MINHEIGHT;
426        oursizhints.flags = PMinSize;
427        XSetNormalHints(ourdisplay, gwind, &oursizhints);
420                                          /* set GLX context */
421          glXMakeCurrent(ourdisplay, gwind, gctx);
422          glEnable(GL_DEPTH_TEST);
423          glDepthFunc(GL_LESS);
424          glShadeModel(GL_SMOOTH);
425          glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
426 <        glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
426 >        glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
427          glEnable(GL_LIGHTING);
428 +        glFrontFace(GL_CCW);
429 +        glCullFace(GL_BACK);
430          if (backvis)
431                  glDisable(GL_CULL_FACE);
432 <        else {
439 <                glFrontFace(GL_CCW);
440 <                glCullFace(GL_BACK);
432 >        else
433                  glEnable(GL_CULL_FACE);
442        }
434          glDrawBuffer(GL_BACK);
435                                          /* figure out sensible view */
436          pwidth = (double)DisplayWidthMM(ourdisplay, ourscreen) /
# Line 452 | Line 443 | char  *id;
443          }
444                                          /* map the window */
445          XMapWindow(ourdisplay, gwind);
446 +        no_render++;
447          do
448                  dev_input(0);           /* get resize event */
449          while (hres == 0 & vres == 0);
450 +        no_render--;
451          rgl_checkerr("initializing GLX");
452   }
453  
# Line 505 | Line 498 | register VIEW  *nv;
498                          }
499                  }
500                  if (newhres != hres | newvres != vres) {
501 <                        in_dev_view++;
501 >                        no_render++;
502                          XResizeWindow(ourdisplay, gwind, newhres, newvres);
503                          do
504                                  dev_input(0);           /* get resize event */
505                          while (newhres != hres | newvres != vres);
506 <                        in_dev_view--;
506 >                        no_render--;
507                  }
508          }
509          copystruct(&thisview, nv);
# Line 564 | Line 557 | render()                       /* render our display list and swap buffers
557   {
558          double  d;
559  
560 <        if (!mapped)
560 >        if (!mapped | no_render)
561                  return;
562          glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
563          glCallList(displist);
# Line 632 | Line 625 | int    dx, dy, mov, orb;
625   }
626  
627  
628 + static
629 + waitabit()                              /* pause a moment */
630 + {
631 +        struct timespec ts;
632 +        ts.tv_sec = 0;
633 +        ts.tv_nsec = 5000000;
634 +        nanosleep(&ts, NULL);
635 + }
636 +
637 +
638   getmove(ebut)                           /* get view change */
639   XButtonPressedEvent     *ebut;
640   {
# Line 648 | Line 651 | XButtonPressedEvent    *ebut;
651  
652          while (!XCheckMaskEvent(ourdisplay,
653                          ButtonReleaseMask, levptr(XEvent))) {
654 +                                        /* pause so as not to move too fast */
655 +                waitabit();
656  
657                  if (!XQueryPointer(ourdisplay, gwind, &rootw, &childw,
658                                  &rootx, &rooty, &wx, &wy, &statemask))
# Line 683 | 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 815 | Line 820 | int    vwnum;
820                          ;
821          else if (vwnum >= MAXVIEW || vwl[vwnum].v == NULL)
822                  vwnum = 0;
818        if (vwnum == currentview)
819                return;
823          copylastv("standard view");
824          dev_view(vwl[currentview=vwnum].v);
825   }
# Line 890 | Line 893 | register XConfigureEvent  *ersz;
893          glViewport(0, 0, hres=ersz->width, vres=ersz->height);
894          if (hres > maxhres) maxhres = hres;
895          if (vres > maxvres) maxvres = vres;
896 <        if (in_dev_view)
896 >        if (no_render)
897                  return;
898          wa = (vres*pheight)/(hres*pwidth);
899          va = viewaspect(&thisview);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines