/* RCSid: $Id: radogl.h,v 3.4 2003/02/22 02:07:22 greg Exp $ */
/*
* Header file for Radiance - OpenGL routines.
*/
/* ====================================================================
* The Radiance Software License, Version 1.0
*
* Copyright (c) 1990 - 2002 The Regents of the University of California,
* through Lawrence Berkeley National Laboratory. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes Radiance software
* (http://radsite.lbl.gov/)
* developed by the Lawrence Berkeley National Laboratory
* (http://www.lbl.gov/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
* and "The Regents of the University of California" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact radiance@radsite.lbl.gov.
*
* 5. Products derived from this software may not be called "Radiance",
* nor may "Radiance" appear in their name, without prior written
* permission of Lawrence Berkeley National Laboratory.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of Lawrence Berkeley National Laboratory. For more
* information on Lawrence Berkeley National Laboratory, please see
* .
*/
#include "standard.h"
#include
#include "color.h"
#include "object.h"
#include "otypes.h"
#include "lookup.h"
#define MAXLIGHTS 8 /* number of OGL light sources */
#define MAXSPECEXP 128. /* maximum allowed specular exponent */
#define UNKSPECEXP 25. /* value to use when exponent unknown */
typedef struct {
short type; /* material type (from otypes.h) */
short nlinks; /* number of links to this material */
union {
struct {
COLOR ambdiff; /* ambient and diffuse color */
COLOR specular; /* specular color */
GLfloat specexp; /* specular exponent */
} m; /* regular material */
struct {
COLOR emission; /* emitting component */
GLfloat spotdir[3]; /* spot direction */
GLfloat spotang; /* spot cutoff angle */
} l; /* light source */
} u; /* union of types */
} MATREC; /* OGL material properties */
extern double expval; /* global exposure value */
extern COLOR ambval; /* global ambient value */
extern int glightid[MAXLIGHTS]; /* OpenGL GL_LIGHTi values */
extern int dolights; /* are we outputting light sources? */
extern int domats; /* are we doing materials? */
extern LUTAB mtab; /* material/modifier lookup table */
#define issrcmat(m) ((m) != NULL && islight((m)->type) && \
(m)->type != MAT_GLOW)
#ifdef NOPROTO
extern void domatobj();
extern void domatvert();
extern int newglist();
extern void rgl_checkerr();
extern int rgl_filelist();
extern int rgl_octlist();
extern void rgl_load();
extern void rgl_object();
extern int o_instance();
extern int loadoctrees();
extern double checkoct();
extern int loadoct();
extern void rgl_matclear();
extern MATREC *getmatp();
extern int o_default();
extern MATREC *newmaterial();
extern void freemtl();
extern int m_normal();
extern int m_aniso();
extern int m_glass();
extern int m_brdf();
extern int m_brdf2();
extern int m_light();
extern int m_mirror();
extern int m_prism();
extern void lightinit();
extern void lightclean();
extern void lightdefs();
extern int o_source();
extern int doflatsrc();
extern int dosphsrc();
extern void setmaterial();
extern double polyarea();
extern int o_face();
extern void surfclean();
extern int o_sphere();
extern int o_cone();
extern int o_ring();
#else
/* defined in rgldomat.c */
extern void domatobj(MATREC *mp, FVECT cent);
extern void domatvert(MATREC *mp, FVECT v, FVECT n);
/* defined in rglfile.c */
extern int newglist(void);
extern void rgl_checkerr(char *where);
extern int rgl_filelist(int ic, char **inp, int *nl);
extern int rgl_octlist(char *fname, FVECT cent, FLOAT *radp, int *nl);
extern void rgl_load(char *inpspec);
extern void rgl_object(char *name, FILE *fp);
/* defined in rglinst.c */
extern int o_instance(OBJREC *o);
extern int loadoctrees(void);
extern double checkoct(char *fname, FVECT cent);
extern int loadoct(char *fname);
/* defined in rglmat.c */
extern void rgl_matclear(void);
extern MATREC *getmatp(char *nam);
extern int o_default(OBJREC *o);
extern MATREC *newmaterial(char *nam);
extern void freemtl(MATREC *mp);
extern int m_normal(OBJREC *o);
extern int m_aniso(OBJREC *o);
extern int m_glass(OBJREC *o);
extern int m_brdf(OBJREC *o);
extern int m_brdf2(OBJREC *o);
extern int m_light(OBJREC *o);
extern int m_mirror(OBJREC *o);
extern int m_prism(OBJREC *o);
/* defined in rglsrc.c */
extern void lightinit(void);
extern void lightclean(void);
extern void lightdefs(void);
extern int o_source(OBJREC *o);
extern int doflatsrc(MATREC *m, FVECT pos, FVECT norm, double area);
extern int dosphsrc(MATREC *m, FVECT pos, double area);
/* defined in rglsurf.c */
extern void setmaterial(MATREC *mp, FVECT cent, int ispoly);
extern double polyarea(FVECT cent, FVECT norm, int n, FVECT v[]);
extern int o_face(OBJREC *o);
extern void surfclean(void);
extern int o_sphere(OBJREC *o);
extern int o_cone(OBJREC *o);
extern int o_ring(OBJREC *o);
#endif