--- ray/src/common/rglmat.c 2003/02/25 02:47:22 3.3 +++ ray/src/common/rglmat.c 2003/11/14 17:22:06 3.6 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rglmat.c,v 3.3 2003/02/25 02:47:22 greg Exp $"; +static const char RCSid[] = "$Id: rglmat.c,v 3.6 2003/11/14 17:22:06 schorsch Exp $"; #endif /* * Routines for Radiance -> OpenGL materials. @@ -54,15 +54,25 @@ register OBJREC *o; goto memerr; strcpy(lup->key, o->oname); } else if (lup->data != NULL) - freemtl((MATREC *)lup->data); + freemtl(lup->data); if ((lup->data = o->os) != NULL) /* make material reference */ ((MATREC *)lup->data)->nlinks++; - return; + return(0); memerr: error(SYSTEM, "out of memory in o_default"); + return(0); } +int +o_unsupported(o) /* unsupported object primitive */ +OBJREC *o; +{ + objerror(o, WARNING, "unsupported type"); + return(0); +} + + MATREC * newmaterial(nam) /* get an entry for a new material */ char *nam; @@ -77,7 +87,7 @@ char *nam; goto memerr; strcpy(lup->key, nam); } else if (lup->data != NULL) - freemtl((MATREC *)lup->data); + freemtl(lup->data); lup->data = (char *)malloc(sizeof(MATREC)); if (lup->data == NULL) goto memerr; @@ -85,13 +95,16 @@ char *nam; return((MATREC *)lup->data); memerr: error(SYSTEM, "out of memory in newmaterial"); + return NULL; /* pro forma return */ } void -freemtl(mp) /* free a material */ -register MATREC *mp; +freemtl(p) /* free a material */ +void *p; { + register MATREC *mp = (MATREC *)p; + if (!--mp->nlinks) free((void *)mp); } @@ -126,6 +139,7 @@ register OBJREC *o; m->u.m.specexp = 2./(o->oargs.farg[4]*o->oargs.farg[4]); if (m->u.m.specexp > MAXSPECEXP) m->u.m.specexp = MAXSPECEXP; + return(0); } @@ -158,6 +172,7 @@ register OBJREC *o; m->u.m.specexp = 2./(o->oargs.farg[4]*o->oargs.farg[5]); if (m->u.m.specexp > MAXSPECEXP) m->u.m.specexp = MAXSPECEXP; + return(0); } @@ -172,6 +187,7 @@ OBJREC *o; setcolor(m->u.m.ambdiff, 0., 0., 0.); setcolor(m->u.m.specular, .08, .08, .08); m->u.m.specexp = MAXSPECEXP; + return(0); } @@ -199,6 +215,7 @@ register OBJREC *o; scalecolor(m->u.m.ambdiff, 1.-o->oargs.farg[4]); } m->u.m.specexp = UNKSPECEXP; + return(0); } @@ -219,6 +236,7 @@ register OBJREC *o; /* guess the rest */ setcolor(m->u.m.specular, .1, .1, .1); m->u.m.specexp = UNKSPECEXP; + return(0); } @@ -248,6 +266,7 @@ register OBJREC *o; m->u.l.spotdir[0] = m->u.l.spotdir[1] = 0.; m->u.l.spotdir[2] = -1.; } + return(0); } @@ -265,6 +284,7 @@ register OBJREC *o; setcolor(m->u.m.specular, o->oargs.farg[0], o->oargs.farg[1], o->oargs.farg[2]); m->u.m.specexp = MAXSPECEXP; + return(0); } @@ -279,4 +299,5 @@ register OBJREC *o; setcolor(m->u.m.ambdiff, 0.2, 0.2, 0.2); setcolor(m->u.m.specular, 0.1, 0.1, 0.1); m->u.m.specexp = UNKSPECEXP; + return(0); }