--- ray/src/common/rglfile.c 1998/06/09 11:18:35 3.1 +++ ray/src/common/rglfile.c 2003/02/25 02:47:22 3.5 @@ -1,29 +1,24 @@ -/* Copyright (c) 1998 Silicon Graphics, Inc. */ - #ifndef lint -static char SCCSid[] = "$SunId$ SGI"; +static const char RCSid[] = "$Id: rglfile.c,v 3.5 2003/02/25 02:47:22 greg Exp $"; #endif - /* * Load Radiance object(s) and create OpenGL display lists */ +#include "copyright.h" + #include "radogl.h" #ifndef NLIST2ALLOC #define NLIST2ALLOC 16 /* batch of display lists to get */ #endif -extern int o_sphere(), o_face(), o_cone(), o_ring(), - o_source(), o_instance(); - -extern int m_normal(), m_glass(), m_aniso(), m_brdf(), m_brdf2(), - m_light(), m_prism(), m_mirror(); - FUN ofun[NUMOTYPE] = INIT_OTYPE; +static int nextlist, nlistleft = 0; -static + +static void initotypes() /* initialize ofun array */ { if (ofun[OBJ_SPHERE].funp == o_sphere) @@ -69,16 +64,17 @@ initotypes() /* initialize ofun array */ int newglist() /* allocate an OGL list id */ { - static int nextlist, nleft = 0; - - if (!nleft--) { + if (!nlistleft--) { nextlist = glGenLists(NLIST2ALLOC); - nleft = NLIST2ALLOC-1; + if (!nextlist) + error(SYSTEM, "no list space left in newglist"); + nlistleft = NLIST2ALLOC-1; } return(nextlist++); } +void rgl_checkerr(where) /* check for GL or GLU error */ char *where; { @@ -93,9 +89,10 @@ char *where; int -rgl_filelist(ic, inp) /* load scene files into display list */ +rgl_filelist(ic, inp, nl) /* load scene files into display list */ int ic; char **inp; +int *nl; /* returned number of lists (optional) */ { int listid; @@ -110,15 +107,18 @@ char **inp; glEndList(); /* end of top display list */ lightdefs(); /* define light sources */ loadoctrees(); /* load octrees (sublists) for instances */ + if (nl != NULL) /* return total number of lists allocated */ + *nl = nextlist - listid; return(listid); /* all done -- return list id */ } int -rgl_octlist(fname, cent, radp) /* load octree objects into display list */ +rgl_octlist(fname, cent, radp, nl) /* load scen into display list */ char *fname; FVECT cent; /* returned octree center (optional) */ -double *radp; /* returned octree size (optional) */ +FLOAT *radp; /* returned octree size (optional) */ +int *nl; /* returned number of lists (optional) */ { double r; int listid; @@ -137,10 +137,13 @@ double *radp; /* returned octree size (optional) */ glEndList(); /* close top list */ lightdefs(); /* define light sources */ loadoctrees(); /* load referenced octrees into sublists */ + if (nl != NULL) /* return total number of lists allocated */ + *nl = nextlist - listid; return(listid); } +void rgl_load(inpspec) /* convert scene description into OGL calls */ char *inpspec; { @@ -183,6 +186,7 @@ char *inpspec; } +void rgl_object(name, fp) /* read the next object */ char *name; FILE *fp;