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

Comparing ray/src/hd/rhd_geom.c (file contents):
Revision 3.3 by gwlarson, Mon Dec 21 11:42:37 1998 UTC vs.
Revision 3.8 by gwlarson, Fri Jan 29 15:33:36 1999 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1998 Silicon Graphics, Inc. */
1 > /* Copyright (c) 1999 Silicon Graphics, Inc. */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ SGI";
# Line 19 | Line 19 | static char SCCSid[] = "$SunId$ SGI";
19   #endif
20  
21   int     gmPortals = 0;                  /* current portal GL list id */
22 + static int      Nlists = 0;             /* number of lists allocated */
23   static char     *curportlist[MAXPORT];  /* current portal list */
24   static char     *newportlist[MAXPORT];  /* new portal file list */
25  
# Line 27 | Line 28 | static struct gmEntry {
28          FVECT   cent;                   /* centroid */
29          FLOAT   rad;                    /* radius */
30          int     listid;                 /* display list identifier */
31 +        int     nlists;                 /* number of lists allocated */
32   } gmCurrent[MAXGEO], gmNext[MAXGEO];    /* current and next list */
33  
34   #define FORALLGEOM(ot,i)        for (i=0;i<MAXGEO&&ot[i].gfile!=NULL;i++)
35  
36   #define FORALLPORT(pl,i)                for (i=0;i<MAXPORT&&pl[i]!=NULL;i++)
37  
38 < extern char     *atos(), *sskip(), *sskip2();
38 > extern char     *nextword();
39  
40  
41   gmNewGeom(file)                 /* add new geometry to next list */
# Line 55 | Line 57 | char   *file;
57                          return;
58                  }
59                                          /* else load new octree */
60 <        gmNext[i].gfile = file;
60 >        gmNext[i].gfile = savestr(file);
61          dolights = 0;
62          domats = 1;
63 <        gmNext[i].listid = rgl_octlist(file, gmNext[i].cent, &gmNext[i].rad);
63 >        gmNext[i].listid = rgl_octlist(file, gmNext[i].cent, &gmNext[i].rad,
64 >                                        &gmNext[i].nlists);
65 >        gmNext[i].rad *= 1.732;         /* go to corners */
66   #ifdef DEBUG
67          fprintf(stderr, "Loaded octree \"%s\" into listID %d with radius %f\n",
68                          file, gmNext[i].listid, gmNext[i].rad);
# Line 74 | Line 78 | gmEndGeom()                    /* make next list current */
78                  FORALLGEOM(gmNext, j)
79                          if (gmNext[j].listid == gmCurrent[i].listid)
80                                  break;
81 <                if (j >= MAXGEO || gmNext[j].gfile == NULL)
82 <                        glDeleteLists(gmCurrent[i].listid, 1);  /* not found */
81 >                if (j >= MAXGEO || gmNext[j].gfile == NULL) {
82 >                        glDeleteLists(gmCurrent[i].listid,      /* not found */
83 >                                        gmCurrent[i].nlists);
84 >                        freestr(gmCurrent[i].gfile);
85 >                }
86          }
87          bcopy((char *)gmNext, (char *)gmCurrent, sizeof(gmNext));
88          bzero((char *)gmNext, sizeof(gmNext));
# Line 83 | Line 90 | gmEndGeom()                    /* make next list current */
90  
91  
92   int
93 < gmDrawGeom()                    /* draw current list of octrees (and ports) */
93 > gmDrawGeom()                    /* draw current list of octrees */
94   {
95          register int    n;
96  
# Line 102 | Line 109 | int    r, g, b, a;
109                          GL_POLYGON_BIT|GL_LIGHTING_BIT);
110          glDisable(GL_LIGHTING);
111          glDisable(GL_DITHER);
112 <        glShadeModel(GL_SMOOTH);
112 >        glShadeModel(GL_FLAT);
113          glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
114                                          /* don't actually write depth */
115          glDepthMask(GL_FALSE);
# Line 144 | Line 151 | char   *pflist;
151  
152          if (pflist == NULL)
153                  return;
154 <        while (*pflist) {
148 <                atos(newfile, sizeof(newfile), pflist);
149 <                if (!*newfile)
150 <                        break;
151 <                pflist = sskip(pflist);
154 >        while ((pflist = nextword(newfile, sizeof(newfile), pflist)) != NULL) {
155                  FORALLPORT(newportlist,i)
156                          if (!strcmp(newportlist[i], newfile))
157                                  goto endloop;   /* in list already */
# Line 178 | Line 181 | gmEndPortal()                  /* close portal list and return GL lis
181          FORALLPORT(newportlist, n);
182          if (!n) {                       /* free old GL list */
183                  if (gmPortals)
184 <                        glDeleteLists(gmPortals, 1);
184 >                        glDeleteLists(gmPortals, Nlists);
185                  gmPortals = 0;
186          } else
187                  qsort(newportlist, n, sizeof(char *), sstrcmp);
# Line 191 | Line 194 | gmEndPortal()                  /* close portal list and return GL lis
194                          FORALLPORT(newportlist, n);
195                          dolights = 0;
196                          domats = 0;
197 <                        gmPortals = rgl_filelist(n, newportlist);
197 >                        gmPortals = rgl_filelist(n, newportlist, &Nlists);
198                          break;
199                  }
200          FORALLPORT(curportlist, n)              /* free old file list */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines