Commit 8d7d04db authored by jasch's avatar jasch
Browse files

cleanup for publication

parent 9758d918
Versions/Current/Resources
\ No newline at end of file
/*
*
* Written By Linas Vepstas November 1991
*/
#define COPY_THREE_WORDS(A,B) { \
struct three_words { int a, b, c, }; \
*(struct three_words *) (A) = *(struct three_words *) (B); \
}
#define COPY_FOUR_WORDS(A,B) { \
struct four_words { int a, b, c, d, }; \
*(struct four_words *) (A) = *(struct four_words *) (B); \
}
/* ============================================================= */
/*
* extrude.h
*
* FUNCTION:
* prototypes for privately used subroutines for the tubing library
*
* HISTORY:
* Linas Vepstas 1991
*/
#include "port.h" /* for gleDouble */
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
/* ============================================================ */
/*
* Provides choice of calling subroutine, vs. invoking macro.
* Basically, inlines the source, or not.
* Trades performance for executable size.
*/
#define INLINE_INTERSECT
#ifdef INLINE_INTERSECT
#define INNERSECT(sect,p,n,v1,v2) { INTERSECT(sect,p,n,v1,v2); }
#else
#define INNERSECT(sect,p,n,v1,v2) intersect(sect,p,n,v1,v2)
#endif /* INLINE_INTERSECT */
/* ============================================================ */
/* The folowing defines give a kludgy way of accessing the qmesh primitive */
/*
#define bgntmesh _emu_qmesh_bgnqmesh
#define endtmesh _emu_qmesh_endqmesh
#define c3f _emu_qmesh_c3f
#define n3f _emu_qmesh_n3f
#define v3f _emu_qmesh_v3f
*/
/* ============================================================ */
extern void up_sanity_check (gleDouble up[3], /* up vector for contour */
int npoints, /* numpoints in poly-line */
gleDouble point_array[][3]); /* polyline */
extern void draw_raw_style_end_cap (int ncp, /* number of contour points */
gleDouble contour[][2], /* 2D contour */
gleDouble zval, /* where to draw cap */
int frontwards); /* front or back cap */
extern void draw_round_style_cap_callback (int iloop,
double cap[][3],
float face_color[3],
gleDouble cut_vector[3],
gleDouble bisect_vector[3],
double norms[][3],
int frontwards);
extern void draw_angle_style_front_cap (int ncp,
gleDouble bi[3],
gleDouble point_array[][3]);
extern void extrusion_raw_join (int ncp, /* number of contour points */
gleDouble contour[][2], /* 2D contour */
gleDouble cont_normal[][2],/* 2D contour normal vecs */
gleDouble up[3], /* up vector for contour */
int npoints, /* numpoints in poly-line */
gleDouble point_array[][3], /* polyline */
float color_array[][3], /* color of polyline */
gleDouble xform_array[][2][3]); /* 2D contour xforms */
extern void extrusion_round_or_cut_join (int ncp, /* number of contour points */
gleDouble contour[][2], /* 2D contour */
gleDouble cont_normal[][2],/* 2D contour normal vecs */
gleDouble up[3], /* up vector for contour */
int npoints, /* numpoints in poly-line */
gleDouble point_array[][3], /* polyline */
float color_array[][3], /* color of polyline */
gleDouble xform_array[][2][3]); /* 2D contour xforms */
extern void extrusion_angle_join (int ncp, /* number of contour points */
gleDouble contour[][2], /* 2D contour */
gleDouble cont_normal[][2],/* 2D contour normal vecs */
gleDouble up[3], /* up vector for contour */
int npoints, /* numpoints in poly-line */
gleDouble point_array[][3], /* polyline */
float color_array[][3], /* color of polyline */
gleDouble xform_array[][2][3]); /* 2D contour xforms */
/* -------------------------- end of file -------------------------------- */
#ifndef __glsmap_h__
#define __glsmap_h__
/* Copyright (c) Mark J. Kilgard, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#if defined(_WIN32)
/* Try hard to avoid including <windows.h> to avoid name space pollution,
but Win32's <GL/gl.h> needs APIENTRY and WINGDIAPI defined properly. */
# if 0
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# else
/* XXX This is from Win32's <windef.h> */
# ifndef APIENTRY
# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
# define APIENTRY __stdcall
# else
# define APIENTRY
# endif
# endif
# ifndef CALLBACK
/* XXX This is from Win32's <winnt.h> */
# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
# define CALLBACK __stdcall
# else
# define CALLBACK
# endif
# endif
/* XXX This is from Win32's <wingdi.h> and <winnt.h> */
# ifndef WINGDIAPI
# define WINGDIAPI __declspec(dllimport)
# endif
/* XXX This is from Win32's <ctype.h> */
# ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
# define _WCHAR_T_DEFINED
# endif
# endif
#pragma warning (disable:4244) /* Disable bogus conversion warnings. */
#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */
#endif /* _WIN32 */
#include <OpenGL/gl.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
SMAP_CLEAR_SMAP_TEXTURE = 0x1,
SMAP_GENERATE_VIEW_MIPMAPS = 0x2,
SMAP_GENERATE_SMAP_MIPMAPS = 0x4,
SMAP_GENERATE_MIPMAPS = 0x6 /* both of above */
} SphereMapFlags;
/* Cube view enumerants. */
enum {
SMAP_FRONT = 0,
SMAP_TOP = 1,
SMAP_BOTTOM = 2,
SMAP_LEFT = 3,
SMAP_RIGHT = 4,
SMAP_BACK = 5
};
typedef struct _SphereMap SphereMap;
extern SphereMap *smapCreateSphereMap(SphereMap *shareSmap);
extern void smapDestroySphereMap(SphereMap *smap);
extern void smapConfigureSphereMapMesh(SphereMap *smap, int steps, int rings, int edgeExtend);
extern void smapSetSphereMapTexObj(SphereMap *smap, GLuint texobj);
extern void smapSetViewTexObj(SphereMap *smap, GLuint texobj);
extern void smapSetViewTexObjs(SphereMap *smap, GLuint texobjs[6]);
extern void smapGetSphereMapTexObj(SphereMap *smap, GLuint *texobj);
extern void smapGetViewTexObj(SphereMap *smap, GLuint *texobj);
extern void smapGetViewTexObjs(SphereMap *smap, GLuint texobjs[6]);
extern void smapSetFlags(SphereMap *smap, SphereMapFlags flags);
extern void smapGetFlags(SphereMap *smap, SphereMapFlags *flags);
extern void smapSetViewOrigin(SphereMap *smap, GLint x, GLint y);
extern void smapSetSphereMapOrigin(SphereMap *smap, GLint x, GLint y);
extern void smapGetViewOrigin(SphereMap *smap, GLint *x, GLint *y);
extern void smapGetSphereMapOrigin(SphereMap *smap, GLint *x, GLint *y);
extern void smapSetEye(SphereMap *smap, GLfloat eyex, GLfloat eyey, GLfloat eyez);
extern void smapSetEyeVector(SphereMap *smap, GLfloat *eye);
extern void smapSetUp(SphereMap *smap, GLfloat upx, GLfloat upy, GLfloat upz);
extern void smapSetUpVector(SphereMap *smap, GLfloat *up);
extern void smapSetObject(SphereMap *smap, GLfloat objx, GLfloat objy, GLfloat objz);
extern void smapSetObjectVector(SphereMap *smap, GLfloat *obj);
extern void smapGetEye(SphereMap *smap, GLfloat *eyex, GLfloat *eyey, GLfloat *eyez);
extern void smapGetEyeVector(SphereMap *smap, GLfloat *eye);
extern void smapGetUp(SphereMap *smap, GLfloat *upx, GLfloat *upy, GLfloat *upz);
extern void smapGetUpVector(SphereMap *smap, GLfloat *up);
extern void smapGetObject(SphereMap *smap, GLfloat *objx, GLfloat *objy, GLfloat *objz);
extern void smapGetObjectVector(SphereMap *smap, GLfloat *obj);
extern void smapSetNearFar(SphereMap *smap, GLfloat viewNear, GLfloat viewFar);
extern void smapGetNearFar(SphereMap *smap, GLfloat *viewNear, GLfloat *viewFar);
extern void smapSetSphereMapTexDim(SphereMap *smap, GLsizei texdim);
extern void smapSetViewTexDim(SphereMap *smap, GLsizei texdim);
extern void smapGetSphereMapTexDim(SphereMap *smap, GLsizei *texdim);
extern void smapGetViewTexDim(SphereMap *smap, GLsizei *texdim);
extern void smapSetContextData(SphereMap *smap, void *context);
extern void smapGetContextData(SphereMap *smap, void **context);
extern void smapSetPositionLightsFunc(SphereMap *smap, void (*positionLights)(int view, void *context));
extern void smapSetDrawViewFunc(SphereMap *smap, void (*drawView)(int view, void *context));
extern void smapGetPositionLightsFunc(SphereMap *smap, void (**positionLights)(int view, void *context));
extern void smapGetDrawViewFunc(SphereMap *smap, void (**drawView)(int view, void *context));
extern void smapGenViewTex(SphereMap *smap, int view);
extern void smapGenViewTexs(SphereMap *smap);
extern void smapGenSphereMapFromViewTexs(SphereMap *smap);
extern void smapGenSphereMap(SphereMap *smap);
extern void smapGenSphereMapWithOneViewTex(SphereMap *smap);
extern int smapRvecToSt(float rvec[3], float st[2]);
extern void smapStToRvec(float *st, float *rvec);
#ifdef __cplusplus
}
#endif
#endif /* __glsmap_h__ */
#ifndef __glsmapint_h__
#define __glsmapint_h__
/* Copyright (c) Mark J. Kilgard, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#include "glsmap.h"
enum { X = 0, Y = 1, Z = 2 };
#define INITFACE(mesh) \
int steps = mesh->steps; \
int sqsteps = mesh->steps * mesh->steps
#define FACE(side,y,x) \
mesh->face[(side)*sqsteps + (y)*steps + (x)]
#define FACExy(side,i,j) \
(&FACE(side,i,j).x)
#define FACEst(side,i,j) \
(&FACE(side,i,j).s)
#define INITBACK(mesh) \
int allrings = mesh->rings + mesh->edgeExtend; \
int ringedspokes = allrings * mesh->steps
#define BACK(edge,ring,spoke) \
mesh->back[(edge)*ringedspokes + (ring)*mesh->steps + (spoke)]
#define BACKxy(edge,ring,spoke) \
(&BACK(edge,ring,spoke).x)
#define BACKst(edge,ring,spoke) \
(&BACK(edge,ring,spoke).s)
typedef struct _STXY {
GLfloat s, t;
GLfloat x, y;
} STXY;
typedef struct _SphereMapMesh {
int refcnt;
int steps;
int rings;
int edgeExtend;
STXY *face;
STXY *back;
} SphereMapMesh;
struct _SphereMap {
/* Shared sphere map mesh vertex data. */
SphereMapMesh *mesh;
/* Texture object ids. */
GLuint smapTexObj;
GLuint viewTexObjs[6];
GLuint viewTexObj;
/* Flags */
SphereMapFlags flags;
/* Texture dimensions must be a power of two. */
int viewTexDim; /* view texture dimension */
int smapTexDim; /* sphere map texture dimension */
/* Viewport origins for view and sphere map rendering. */
int viewOrigin[2];
int smapOrigin[2];
/* Viewing vectors. */
GLfloat eye[3];
GLfloat up[3];
GLfloat obj[3];
/* Projection parameters. */
GLfloat viewNear;
GLfloat viewFar;
/* Rendering callbacks. */
void (*positionLights)(int view, void *context);
void (*drawView)(int view, void *context);
/* Application specified callback data. */
void *context;
};
/* Library internal routines. */
extern void __smapDrawSphereMapMeshSide(SphereMapMesh *mesh, int side);
extern void __smapDrawSphereMapMeshBack(SphereMapMesh *mesh);
extern void __smapValidateSphereMapMesh(SphereMapMesh *mesh);
#endif /* __glsmapint_h__ */
#ifndef __glut_h__
#define __glut_h__
/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */
/* This program is freely distributable without licensing fees and is
provided without guarantee or warrantee expressed or implied. This
program is -not- in the public domain. */
//#define GLUT_OF_007_HACK
#if defined(_WIN32)
/* GLUT 3.7 now tries to avoid including <windows.h>
to avoid name space pollution, but Win32's <GL/gl.h>
needs APIENTRY and WINGDIAPI defined properly. */
# if 0
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# else
/* XXX This is from Win32's <windef.h> */
# ifndef APIENTRY
# define GLUT_APIENTRY_DEFINED
# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
# define APIENTRY __stdcall
# else
# define APIENTRY
# endif
# endif
/* XXX This is from Win32's <winnt.h> */
# ifndef CALLBACK
# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
# define CALLBACK __stdcall
# else
# define CALLBACK
# endif
# endif
/* XXX This is from Win32's <wingdi.h> and <winnt.h> */
# ifndef WINGDIAPI
# define GLUT_WINGDIAPI_DEFINED
# define WINGDIAPI __declspec(dllimport)
# endif
/* XXX This is from Win32's <ctype.h> */
# ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
# define _WCHAR_T_DEFINED
# endif
# endif
#pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */
#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
#pragma comment (lib, "glu32.lib") /* link with OpenGL Utility lib */
#pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */
#pragma warning (disable:4244) /* Disable bogus conversion warnings. */
#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */
#endif
#if defined(__APPLE__) || defined(MACOSX)
#include <AvailabilityMacros.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#endif
/* define APIENTRY and CALLBACK to null string if we aren't on Win32 */
#if !defined(_WIN32)
#define APIENTRY
#define GLUT_APIENTRY_DEFINED
#define CALLBACK
#endif
#ifdef __cplusplus
extern "C" {
#endif
/**
GLUT API revision history:
GLUT_API_VERSION is updated to reflect incompatible GLUT
API changes (interface changes, semantic changes, deletions,
or additions).
GLUT_API_VERSION=1 First public release of GLUT. 11/29/94
GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling,
extension. Supports new input devices like tablet, dial and button
box, and Spaceball. Easy to query OpenGL extensions.
GLUT_API_VERSION=3 glutMenuStatus added.
GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer,
glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!).
GLUT_API_VERSION=5 glutGetProcAddress (added by BrianP)
**/
#ifndef GLUT_API_VERSION /* allow this to be overriden */
#define GLUT_API_VERSION 5
#endif
/**
GLUT implementation revision history:
GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
API revisions and implementation revisions (ie, bug fixes).
GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of
GLUT Xlib-based implementation. 11/29/94
GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of
GLUT Xlib-based implementation providing GLUT version 2
interfaces.
GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95
GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95
GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95
GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96
GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner
and video resize. 1/3/97
GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines.
GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release.
GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling.
GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support.
GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface.
GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa <GL/glut.h>
**/
#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */
#define GLUT_XLIB_IMPLEMENTATION 15
#endif
/**
MacOS X GLUT implementation revision history:
GLUT_MACOSX_IMPLEMENTATION is updated to reflect MacOS X
specific GLUT API revisions and implementation revisions
(ie, bug fixes).
GLUT_MACOSX_IMPLEMENTATION=1 glutSurfaceTexture.
GLUT_MACOSX_IMPLEMENTATION=2 glutWMCloseFunc, glutCheckLoop.
**/
#ifndef GLUT_MACOSX_IMPLEMENTATION /* Allow this to be overriden. */
#define GLUT_MACOSX_IMPLEMENTATION 2
#endif
/* Display mode bit masks. */
#define GLUT_RGB 0
#define GLUT_RGBA GLUT_RGB
#define GLUT_INDEX 1
#define GLUT_SINGLE 0
#define GLUT_DOUBLE 2
#define GLUT_ACCUM 4
#define GLUT_ALPHA 8
#define GLUT_DEPTH 16
#define GLUT_STENCIL 32
#if (GLUT_API_VERSION >= 2)
#define GLUT_MULTISAMPLE 128
#define GLUT_STEREO 256
#endif
#if (GLUT_API_VERSION >= 3)
#define GLUT_LUMINANCE 512
#endif
#define GLUT_NO_RECOVERY 1024
/* Mouse buttons. */
#define GLUT_LEFT_BUTTON 0
#define GLUT_MIDDLE_BUTTON 1
#define GLUT_RIGHT_BUTTON 2
/* Mouse button state. */
#define GLUT_DOWN 0
#define GLUT_UP 1
#if (GLUT_API_VERSION >= 2)
/* function keys */
#define GLUT_KEY_F1 1
#define GLUT_KEY_F2 2
#define GLUT_KEY_F3 3
#define GLUT_KEY_F4 4
#define GLUT_KEY_F5 5
#define GLUT_KEY_F6 6
#define GLUT_KEY_F7 7
#define GLUT_KEY_F8 8
#define GLUT_KEY_F9 9
#define GLUT_KEY_F10 10
#define GLUT_KEY_F11 11
#define GLUT_KEY_F12 12
/* directional keys */
#define GLUT_KEY_LEFT 100
#define GLUT_KEY_UP 101
#define GLUT_KEY_RIGHT 102
#define GLUT_KEY_DOWN 103