ftp.nice.ch/pub/next/graphics/3d/geomview.1.4.1.s.tar.gz#/Geomview/src/lib/mg/common/mg.h

This is mg.h in view mode; [Download] [Up]

/* Copyright (c) 1992 The Geometry Center; University of Minnesota
   1300 South Second Street;  Minneapolis, MN  55454, USA;
   
This file is part of geomview/OOGL. geomview/OOGL is free software;
you can redistribute it and/or modify it only under the terms given in
the file COPYING, which you should have received along with this file.
This and other related software may be obtained via anonymous ftp from
geom.umn.edu; email: software@geom.umn.edu. */

/* Authors: Charlie Gunn, Stuart Levy, Tamara Munzner, Mark Phillips */

#ifndef MINNEGRAPHICSDEFS
#define MINNEGRAPHICSDEFS

/*
 * Public interface to mg (minnegraphics) package.
 */

#include "color.h"
#include "point.h"
#include "transform.h"
#include "window.h"
#include "camera.h"
#include "appearance.h"

typedef struct mgcontext mgcontext;	/* Opaque typedef */

typedef int (*mgshadefunc)( int npoints, HPoint3 *points, Point3 *normals,
				ColorA *colors, ColorA *newcolors );
typedef int (*mgmapfunc)( void *NDinfo, void *NDpoint, HPoint3 *newpoint,
				ColorA *newcolor );

struct mgfuncs {  /* mg member functions; potentially changed per device */

  short  	mg_devno;	/* Current device number */

  int		(*mg_setdevice)();
  int		(*mg_feature)(/* int feature */);
  mgcontext *	(*mg_ctxcreate)(/* int a1, ... */);
  void		(*mg_ctxdelete)(/* mgcontext *ctx */);
  void		(*mg_ctxset)(/* a1, ...  */);
  int		(*mg_ctxget)(/* int attr, void* valueptr */);
  int		(*mg_ctxselect)(/* mgcontext *ctx */);
  void		(*mg_sync)(/* void */);
  void		(*mg_worldbegin)(/* void */);
  void		(*mg_worldend)(/* void */);
  void		(*mg_reshapeviewport)(/* void */);
  void		(*mg_settransform)(/* Transform T */);
  void		(*mg_gettransform)(/* Transform T */);
  void		(*mg_identity)(/* void */);
  void		(*mg_transform)(/* const Transform T */);
  int		(*mg_pushtransform)(/* void */);
  int		(*mg_poptransform)(/* void */);
  int		(*mg_pushappearance)(/* void */);
  int		(*mg_popappearance)(/* void */);
  Appearance *	(*mg_setappearance)(/* Appearance* app, int merge */);
  Appearance *	(*mg_getappearance)(/* void */);
  int		(*mg_setcamera)(/* Camera* cam */);
  void		(*mg_polygon)(/* int nv, Point3 *v, int nn,
			        Point3 *n, int nc,ColorA *c */);
  void		(*mg_polylist)(/* int np, Poly *p, int nv, Vertex *v, 
				  int plflags */);
  void		(*mg_mesh)(/* int wrap,int nu,int nv,HPoint3 *p,
		             Point3 *n,ColorA *c */);
  void		(*mg_line)(/* HPoint3 *p1, HPoint3 *p2 */);
  void		(*mg_polyline)(/* int nv, HPoint3 *v, int nc, ColorA *c, 
				  int wrapped */);
  void		(*mg_quads)(/* int nquads, HPoint3 *v, Point3 *n, ColorA *c */);
  void		(*mg_bezier)(/* int du, int dv, int dimn, float *ctrlpts,
  				float *txmapst, ColorA *c */);
};

extern struct mgfuncs _mgf;

/* Common mg attributes -- for mgctxcreate(), mgctxset(), mgctxget() */

#define MG_END          0
#define	MG_WINDOW	128	/* WnWindow *				*/
#define	MG_PARENT	129	/* mgcontext *context (of parent window)*/
#define	MG_SHOW		130	/* int visible  (make window visible)   */
#define	MG_SETOPTIONS	131	/* int mask (of options to enable) see  */
#define MG_UNSETOPTIONS	132	/* int mask (options to disable)   mg.h */
#define MG_BACKGROUND	133	/* ColorA *				*/
#define	MG_CAMERA	134	/* Camera *				*/
#define MG_APPEAR       135	/* Appearance *default_appearance	*/
#define MG_ApSet        136	/* Appearance create list         	*/
#define MG_WnSet        137	/* Window create list         	*/
#define MG_CamSet       138	/* Camera create list         	*/
#define	MG_ZNUDGE	139	/* float; fraction of Z-range by which lines &
				 * edges are nudged nearer than polygons.
				 */

#define	MG_NDMAP	140	/* int (*mapfunc)(void *NDdata, HPointN*, HPoint3*, ColorA*) */
				  /* function returns 1 if color was applied,
				   * else 0
				   */
#define	MG_NDINFO	141	/* void *NDinfo */

/* Note 140, 141, 142 used to be MG_EUCLIDEAN, MG_HYPERBOLIC, and
   MG_SPHERICAL, which are now obsolete.  These numbers may be reused now. */

#define	MG_SHADER	143	/* mgshadefunc *shader_function		*/
#define	MG_SHADERDATA	144	/* void *shaderdata (interpreted by shader) */

#define MG_ABLOCK	145	/* void *ablock */

#define MG_SPACE	146	/* TM_EUCLIDEAN, TM_HYPERBOLIC,
				   or TM_SPHERICAL */

/* NOTE:  the MG_SPACE attribute specifies the space in which the
   objects being drawn live.  It serves the same purpose as the
   NeXT-specific attribute MG_GEOMTYPE, which should eventually
   be phased out. mbp Fri Dec 11 14:51:30 1992 */

/* Possible MG Features */
#define MGF_BEZIER	100	/* Driver supports mgbezier */

		/* Bitwise ORable options for mg_ctxset MG_[UN]SETOPTIONS */
#define MGO_DOUBLEBUFFER	0x1		/* Default single buffered */
#define MGO_HIDDEN		0x2		/* Default not Z-buffered */
#define MGO_BACKFACECULL	0x4		/* Default back-faces shown */
#define MGO_INHIBITBACKGROUND	0x8		/* Default background drawn */
#define	MGO_INHIBITCLEAR	0x10		/* Default clear at worldbegin*/
#define	MGO_INHIBITSWAP		0x20		/* Default swapbufs at worldend */
#define	MGO_NORED		0x40		/* Inhibit drawing into red */
#define	MGO_NOGREEN		0x80		/* ... green ... */
#define	MGO_NOBLUE		0x100		/* ... or blue planes */

#define	MGO_INHIBITCAM		0x200		/* Don't load matrix in worldbegin() */

		/* mgmesh 'style' values */
#define MM_NOWRAP	0
#define MM_UWRAP	1
#define MM_VWRAP	2

/* mergeflag values for mgsetappearance() */
#define MG_SET		0
#define MG_MERGE	1

#define	mgctxselect( mgc )		(*_mgf.mg_ctxselect)( mgc )
#define mgctxcreate			(*_mgf.mg_ctxcreate)
#define	mgctxdelete( mgc )		(*_mgf.mg_ctxdelete)( mgc )
#define	mgctxset			(*_mgf.mg_ctxset)
#define	mgctxget( attr, valuep )	(*_mgf.mg_ctxget)( attr, valuep )
#define	mgpushappearance()		(*_mgf.mg_pushappearance)()
#define	mgpopappearance()		(*_mgf.mg_popappearance)()


#define	mgsetappearance( ap, merge )	(*_mgf.mg_setappearance)( ap, merge )
#define	mggetappearance()		(*_mgf.mg_getappearance)()
#define	mgsetcamera( cam )			(*_mgf.mg_setcamera)( cam )

#define	mgsettransform( T )		(*_mgf.mg_settransform)( T )
#define mggettransform( T )		(*_mgf.mg_gettransform)( T )
#define	mgidentity()			(*_mgf.mg_identity)()
#define	mgtransform( T )		(*_mgf.mg_transform)( T )
#define	mgpushtransform()		(*_mgf.mg_pushtransform)()
#define	mgpoptransform()		(*_mgf.mg_poptransform)()

#define	mgreshapeviewport()		(*_mgf.mg_reshapeviewport)()


#define	mgworldbegin()			(*_mgf.mg_worldbegin)()
#define	mgsync( )			(*_mgf.mg_sync)()
#define	mgworldend()			(*_mgf.mg_worldend)()

#define	mgpolygon( nv,v, nn,n, nc,c )	(*_mgf.mg_polygon)( nv,v, nn,n, nc,c )
#define	mgpolylist( np,p, nv,v, flags )	(*_mgf.mg_polylist)( np,p, nv,v, flags )
#define	mgmesh( style, nu,nv, v,n,c )	(*_mgf.mg_mesh)( style, nu,nv, v,n,c )
#define	mgline( p1, p2 )		(*_mgf.mg_line)( p1, p2 )
#define	mgpolyline( nv,v, nc,c, wrap )	(*_mgf.mg_polyline)( nv,v, nc,c, wrap )
#define	mgquads( nquad, v, n, c )	(*_mgf.mg_quads)( nquad, v, n, c )
#define mgbezier( du,dv, dimn, ctrlpts, tx, c )	(*_mgf.mg_bezier)( du, dv, \
						  dimn, ctrlpts, tx, c )
#define mgfeature( feature )		(*_mgf.mg_feature)( feature )

extern mgcontext *mgcurrentcontext();		/* Get ptr to current context */
extern int mgbegin( void );			/* Init, select default dev */
extern int mgend( void );			/* Shut down */ 

extern mgset4to3( Transform T, int seq );	/* Set 4D->3D transform */
extern int mgget4to3( Transform T );		/* Get 4D->3D; return seq */

	/*
	 * Sample software-shading function, usable as MG_SHADER.
	 */
extern int mg_eucshade( int npoints, HPoint3 *points, Point3 *normals,
				ColorA *colors, ColorA *newcolors );

	/*
	 * Device select routines -- set default for future mgctxcreate()'s
	 */
extern int mgdevice_GL( void );		
extern int mgdevice_X11( void );
extern int mgdevice_XGL( void );
extern int mgdevice_RIB( void );
extern int mgdevice_RI( void );
extern int mgdevice_PS( void );
extern int mgdevice_VT100( void );
extern int mgdevice_XT( void );
extern int mgdevice_MAC( void );
extern int mgdevice_TEK( void );
extern int mgdevice_TELETYPE( void );
extern int mgdevice_PUNCHCARD( void );
extern int mgdevice_SIMSTIM( void );
extern int mgdevice_NULL( void );

extern int mgdevice( int deviceno );	/* Alternative to the above */

#define  MGD_NODEV	-1	/* error return: can't select that device */
#define  MGD_NULL	0	/* no device, just return current one */
#define  MGD_GL		1	/* SGI GL */
#define  MGD_XGL	2	/* Sun XGL */
#define  MGD_X11	3	/* Generic X11 */
#define	 MGD_RIB	4	/* Renderman RIB*/
#define	 MGD_PS		5	/* Postscript */
#define  MGD_RI		6	/* Quick Renderman */
				/* what else? raster buffer? */

#endif

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.