/* surface.h  (Steve Hill)  1.1  3/9/90$ */

/* surface.h
 *
 * Header for surface.h
 */

typedef struct surface_s
{
	colour_t	*ambient,
			*diffuse,
			*mirror,
			*transmit;

	real_t		index,
			specular,
			power;

	/* Pattern function and possibly matrix in here */
}
surface_t;

#define SurfaceNull	((surface_t *) NULL)

#define DEFAULT_AMBIENT		{(real_t) 0.1, (real_t) 0.1, (real_t) 0.1}
#define DEFAULT_DIFFUSE		{(real_t) 0.7, (real_t) 0.7, (real_t) 0.7}
#define DEFAULT_MIRROR		{REAL_ZERO, REAL_ZERO, REAL_ZERO}
#define DEFAULT_TRANSMIT	{REAL_ZERO, REAL_ZERO, REAL_ZERO}
#define DEFAULT_INDEX		((real_t) 1.0)
#define DEFAULT_SPECULAR	((real_t) 0.0)
#define DEFAULT_POWER		((real_t) 0.0)

extern colour_t		default_ambient,
			default_diffuse,
			default_mirror,
			default_transmit;

extern real_t		default_index,
			default_specular,
			default_power;

extern surface_t	default_surface;

surface_t	*Surface PROTO((colour_t *, colour_t *, colour_t *, colour_t *,
			 real_t, real_t, real_t)),
		*SurfaceCopy PROTO((surface_t *));

void		SurfaceFree PROTO((surface_t *)),
		SurfacePrint PROTO((FILE *, surface_t *));
