/* 
 * Mtrl.h - Transfer function abstract data type include file.
 * 
 * Author:	L. Van Warren
 * Date:	April 1984
 * Copyright (c) 1984 L. Van Warren * All Rights Reserved
 * 
 */

typedef struct
{
    int    type; /* Whether Obj is source or filt.                   */
    Vec reflClr; /* Reflective transfer coefficients.                */
    Vec refrClr; /* Refractive transfer coefficients.                */
    Vec   gains; /* ambient, diffuse, specular                       */
    double noni;  /* Ratio of indices of refraction, n_outer/n_inner. */
} Mtrl;

typedef struct
{
	int currMtrl;        /* Current   transfer function.                 */
	int  numMtrl;        /* Number of transfer functions.                */
	Mtrl   *mtrl;        /* Array  of transfer functions.                */
} Mtrltbl;

extern Mtrltbl addMtrlToMtrltbl();

/* Material Types */
#define SOURCE		  1
#define REFL		  2
#define REFR		  3 /* Refractors are reflectors too.             */

extern Mtrl asnMtrl(int, Vec, Vec, Vec, double);

extern void fprintMtrl(FILE*, Mtrl);
extern Mtrl fscanMtrl (FILE*);

extern void fwriteMtrl(FILE*, Mtrl);
extern Mtrl freadMtrl (FILE*);