#ifndef _AFNI_RENDER_HEADER_
#define _AFNI_RENDER_HEADER_

/*****************************************************************************
  This software is copyrighted and owned by the Medical College of Wisconsin.
  See the file README.Copyright for details.
******************************************************************************/

#include "mrilib.h"
#include "volpack.h"

/*============================================================================
  AREN = AFNI Renderer, a set of routines for volume rendering 3D bricks.
  Built on top of VolPack, by Philippe Lacroute.
==============================================================================*/

/*--- prototypes ---*/

extern void * new_AREN_renderer(void) ;
extern void   destroy_AREN_renderer( void * ) ;

extern int  AREN_set_graybrick( void * , MRI_IMAGE * ) ;
extern int  AREN_set_opabrick ( void * , MRI_IMAGE * ) ;
extern int  AREN_set_rgbbricks( void * , MRI_IMAGE * , MRI_IMAGE * , MRI_IMAGE * ) ;
extern void AREN_set_viewpoint( void * , float , float ) ;
extern void AREN_set_size     ( void * , float , float , float ) ;

extern MRI_IMAGE * AREN_render( void * , int ) ;

extern void   AREN_be_verbose( void * ) ;
extern void   AREN_be_quiet  ( void * ) ;

/*--- typedefs, etc. ---*/

typedef struct {
   unsigned short rgb ;     /* packed into 15 bits */
   unsigned short alpha ;   /* opacity */
} rgbvox ;

#define EIGHT_TO_FIVE(z) ((z) >> 3)        /* maps 0..255 into 0..31  */
#define FIVE_TO_EIGHT(z) ((z) << 3)        /* maps 0..31  into 0..255 */

#define FIVE_to_short(a,b,c) ((a)<<10 | (b)<<5 | (c))

#define TFSINV 0.00390625
#define TTINV  0.03125
#define TFFINV (1.0/255.0)
#define TOINV  (1.0/31.0)

#define SHORT_to_rrr(s) TT_TO_ZO( ((s) & 0x7c00) >> 10 )
#define SHORT_to_ggg(s) TT_TO_ZO( ((s) & 0x03e0) >>  5 )
#define SHORT_to_bbb(s) TT_TO_ZO( ((s) & 0x001f)       )

#define SHORT_isgray(s) ( ( ((s) & 0x7c00) >> 10 == ((s) & 0x03e0) >> 5 ) &&  \
                          ( ((s) & 0x03e0) >>  5 == ((s) & 0x001f)      )    )

#define MAX_CDIM   32
#define MAX_GRAYS  256
#define MAX_COLORS 32768                   /* = 32 * 32 * 32 */
#define TOT_COLORS (MAX_COLORS+MAX_GRAYS)

extern void init_AREN_colortable(void) ;

/*---------------------------*/

#define AREN_TYPE 9707312

typedef struct {
   int type ;

   vpContext * vpc ;

   int nx,ny,nz , verbose , newdata,newvox ;
   float theta,phi , sx,sy,sz ;

   MRI_IMAGE * grim , * rim , * gim , * bim , * opim ;  /* inputs */

   rgbvox * vox ;   /* encoded color + opacity */
} AREN_stuff ;

#define ISVALID_AREN(ah) ( (ah) != NULL && (ah)->type == AREN_TYPE )

#endif /* _AFNI_RENDER_HEADER_ */


syntax highlighted by Code2HTML, v. 0.9.1