Explorar o código

Added example

yeswecan %!s(int64=9) %!d(string=hai) anos
pai
achega
1ce1cf6d55
Modificáronse 68 ficheiros con 5260 adicións e 0 borrados
  1. 13 0
      example/Makefile
  2. 17 0
      example/Project.xcconfig
  3. 1 0
      example/addons.make
  4. 0 0
      example/bin/data/.gitkeep
  5. 1 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/GLUT
  6. 1 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Headers
  7. 1 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Resources
  8. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/GLUT
  9. 18 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/copy.h
  10. 96 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/extrude.h
  11. 137 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmap.h
  12. 102 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmapint.h
  13. 648 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glut.h
  14. 30 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutbitmap.h
  15. 90 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutf90.h
  16. 42 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutstroke.h
  17. 89 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/gutil.h
  18. 391 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/intersect.h
  19. 298 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/port.h
  20. 98 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/rot.h
  21. 98 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/segment.h
  22. 203 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube.h
  23. 78 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube_gc.h
  24. 1339 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/vvector.h
  25. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Caution.tiff
  26. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUT.nib/objects.nib
  27. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/objects.nib
  28. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/objects.nib
  29. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTUI.strings
  30. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/InfoPlist.strings
  31. 28 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Info.plist
  32. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/blankCursor.tiff
  33. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomCursor.tiff
  34. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomleftCursor.tiff
  35. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomrightCursor.tiff
  36. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/crossCursor.tiff
  37. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/cycleCursor.tiff
  38. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/destroyCursor.tiff
  39. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/fingerCursor.tiff
  40. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/helpCursor.tiff
  41. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftCursor.tiff
  42. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftRightCursor.tiff
  43. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightArrowCursor.tiff
  44. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightCursor.tiff
  45. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/sprayCursor.tiff
  46. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topCursor.tiff
  47. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topleftCursor.tiff
  48. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/toprightCursor.tiff
  49. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/upDownCursor.tiff
  50. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/waitCursor.tiff
  51. 1 0
      example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current
  52. BIN=BIN
      example/bin/exampleDebug.app/Contents/Frameworks/libfmodex.dylib
  53. 42 0
      example/bin/exampleDebug.app/Contents/Info.plist
  54. BIN=BIN
      example/bin/exampleDebug.app/Contents/MacOS/exampleDebug
  55. 1 0
      example/bin/exampleDebug.app/Contents/PkgInfo
  56. BIN=BIN
      example/bin/exampleDebug.app/Contents/Resources/icon-debug.icns
  57. 142 0
      example/config.make
  58. 959 0
      example/example.xcodeproj/project.pbxproj
  59. 7 0
      example/example.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  60. 30 0
      example/example.xcodeproj/project.xcworkspace/xcshareddata/example.xcscmblueprint
  61. BIN=BIN
      example/example.xcodeproj/project.xcworkspace/xcuserdata/zebra.xcuserdatad/UserInterfaceState.xcuserstate
  62. 86 0
      example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme
  63. 86 0
      example/example.xcodeproj/xcshareddata/xcschemes/example Release.xcscheme
  64. 14 0
      example/example.xcodeproj/xcuserdata/zebra.xcuserdatad/xcschemes/xcschememanagement.plist
  65. 22 0
      example/openFrameworks-Info.plist
  66. 13 0
      example/src/main.cpp
  67. 22 0
      example/src/ofApp.cpp
  68. 16 0
      example/src/ofApp.h

+ 13 - 0
example/Makefile

@@ -0,0 +1,13 @@
+# Attempt to load a config.make file.
+# If none is found, project defaults in config.project.make will be used.
+ifneq ($(wildcard config.make),)
+	include config.make
+endif
+
+# make sure the the OF_ROOT location is defined
+ifndef OF_ROOT
+    OF_ROOT=$(realpath ../../..)
+endif
+
+# call the project makefile!
+include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk

+ 17 - 0
example/Project.xcconfig

@@ -0,0 +1,17 @@
+//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT.
+//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED
+OF_PATH = ../../..
+
+//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE
+#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig"
+
+//ICONS - NEW IN 0072 
+ICON_NAME_DEBUG = icon-debug.icns
+ICON_NAME_RELEASE = icon.icns
+ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/
+
+//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to:
+//ICON_FILE_PATH = bin/data/
+
+OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS)
+HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS)

+ 1 - 0
example/addons.make

@@ -0,0 +1 @@
+ofxPlotter

+ 0 - 0
example/bin/data/.gitkeep


+ 1 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/GLUT

@@ -0,0 +1 @@
+Versions/Current/GLUT

+ 1 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Headers

@@ -0,0 +1 @@
+Versions/Current/Headers

+ 1 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Resources

@@ -0,0 +1 @@
+Versions/Current/Resources

BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/GLUT


+ 18 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/copy.h

@@ -0,0 +1,18 @@
+
+/*
+ *
+ * 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);	\
+}
+
+/* ============================================================= */

+ 96 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/extrude.h

@@ -0,0 +1,96 @@
+
+/*
+ * 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 -------------------------------- */

+ 137 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmap.h

@@ -0,0 +1,137 @@
+#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__ */

+ 102 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glsmapint.h

@@ -0,0 +1,102 @@
+#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__ */

+ 648 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glut.h

@@ -0,0 +1,648 @@
+#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
+#define GLUT_KEY_PAGE_UP		104
+#define GLUT_KEY_PAGE_DOWN		105
+#define GLUT_KEY_HOME			106
+#define GLUT_KEY_END			107
+#define GLUT_KEY_INSERT			108
+#endif
+
+/* Entry/exit  state. */
+#define GLUT_LEFT			0
+#define GLUT_ENTERED			1
+
+/* Menu usage  state. */
+#define GLUT_MENU_NOT_IN_USE		0
+#define GLUT_MENU_IN_USE		1
+
+/* Visibility  state. */
+#define GLUT_NOT_VISIBLE		0
+#define GLUT_VISIBLE			1
+
+/* Window status  state. */
+#define GLUT_HIDDEN			0
+#define GLUT_FULLY_RETAINED		1
+#define GLUT_PARTIALLY_RETAINED		2
+#define GLUT_FULLY_COVERED		3
+
+/* Color index component selection values. */
+#define GLUT_RED			0
+#define GLUT_GREEN			1
+#define GLUT_BLUE			2
+
+/* Layers for use. */
+#define GLUT_NORMAL			0
+#define GLUT_OVERLAY			1
+
+#if defined(_WIN32)
+/* Stroke font constants (use these in GLUT program). */
+#define GLUT_STROKE_ROMAN		((void*)0)
+#define GLUT_STROKE_MONO_ROMAN		((void*)1)
+
+/* Bitmap font constants (use these in GLUT program). */
+#define GLUT_BITMAP_9_BY_15		((void*)2)
+#define GLUT_BITMAP_8_BY_13		((void*)3)
+#define GLUT_BITMAP_TIMES_ROMAN_10	((void*)4)
+#define GLUT_BITMAP_TIMES_ROMAN_24	((void*)5)
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_BITMAP_HELVETICA_10	((void*)6)
+#define GLUT_BITMAP_HELVETICA_12	((void*)7)
+#define GLUT_BITMAP_HELVETICA_18	((void*)8)
+#endif
+#else
+/* Stroke font opaque addresses (use constants instead in source code). */
+extern void *glutStrokeRoman;
+extern void *glutStrokeMonoRoman;
+
+/* Stroke font constants (use these in GLUT program). */
+#define GLUT_STROKE_ROMAN		(&glutStrokeRoman)
+#define GLUT_STROKE_MONO_ROMAN		(&glutStrokeMonoRoman)
+
+/* Bitmap font opaque addresses (use constants instead in source code). */
+extern void *glutBitmap9By15;
+extern void *glutBitmap8By13;
+extern void *glutBitmapTimesRoman10;
+extern void *glutBitmapTimesRoman24;
+extern void *glutBitmapHelvetica10;
+extern void *glutBitmapHelvetica12;
+extern void *glutBitmapHelvetica18;
+
+/* Bitmap font constants (use these in GLUT program). */
+#define GLUT_BITMAP_9_BY_15		(&glutBitmap9By15)
+#define GLUT_BITMAP_8_BY_13		(&glutBitmap8By13)
+#define GLUT_BITMAP_TIMES_ROMAN_10	(&glutBitmapTimesRoman10)
+#define GLUT_BITMAP_TIMES_ROMAN_24	(&glutBitmapTimesRoman24)
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_BITMAP_HELVETICA_10	(&glutBitmapHelvetica10)
+#define GLUT_BITMAP_HELVETICA_12	(&glutBitmapHelvetica12)
+#define GLUT_BITMAP_HELVETICA_18	(&glutBitmapHelvetica18)
+#endif
+#endif
+
+/* glutGet parameters. */
+#define GLUT_WINDOW_X			100
+#define GLUT_WINDOW_Y			101
+#define GLUT_WINDOW_WIDTH		102
+#define GLUT_WINDOW_HEIGHT		103
+#define GLUT_WINDOW_BUFFER_SIZE		104
+#define GLUT_WINDOW_STENCIL_SIZE	105
+#define GLUT_WINDOW_DEPTH_SIZE		106
+#define GLUT_WINDOW_RED_SIZE		107
+#define GLUT_WINDOW_GREEN_SIZE		108
+#define GLUT_WINDOW_BLUE_SIZE		109
+#define GLUT_WINDOW_ALPHA_SIZE		110
+#define GLUT_WINDOW_ACCUM_RED_SIZE	111
+#define GLUT_WINDOW_ACCUM_GREEN_SIZE	112
+#define GLUT_WINDOW_ACCUM_BLUE_SIZE	113
+#define GLUT_WINDOW_ACCUM_ALPHA_SIZE	114
+#define GLUT_WINDOW_DOUBLEBUFFER	115
+#define GLUT_WINDOW_RGBA		116
+#define GLUT_WINDOW_PARENT		117
+#define GLUT_WINDOW_NUM_CHILDREN	118
+#define GLUT_WINDOW_COLORMAP_SIZE	119
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_WINDOW_NUM_SAMPLES		120
+#define GLUT_WINDOW_STEREO		121
+#endif
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_WINDOW_CURSOR		122
+#endif
+#define GLUT_SCREEN_WIDTH		200
+#define GLUT_SCREEN_HEIGHT		201
+#define GLUT_SCREEN_WIDTH_MM		202
+#define GLUT_SCREEN_HEIGHT_MM		203
+#define GLUT_MENU_NUM_ITEMS		300
+#define GLUT_DISPLAY_MODE_POSSIBLE	400
+#define GLUT_INIT_WINDOW_X		500
+#define GLUT_INIT_WINDOW_Y		501
+#define GLUT_INIT_WINDOW_WIDTH		502
+#define GLUT_INIT_WINDOW_HEIGHT		503
+#define GLUT_INIT_DISPLAY_MODE		504
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_ELAPSED_TIME		700
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+#define GLUT_WINDOW_FORMAT_ID		123
+#endif
+
+#if (GLUT_API_VERSION >= 2)
+/* glutDeviceGet parameters. */
+#define GLUT_HAS_KEYBOARD		600
+#define GLUT_HAS_MOUSE			601
+#define GLUT_HAS_SPACEBALL		602
+#define GLUT_HAS_DIAL_AND_BUTTON_BOX	603
+#define GLUT_HAS_TABLET			604
+#define GLUT_NUM_MOUSE_BUTTONS		605
+#define GLUT_NUM_SPACEBALL_BUTTONS	606
+#define GLUT_NUM_BUTTON_BOX_BUTTONS	607
+#define GLUT_NUM_DIALS			608
+#define GLUT_NUM_TABLET_BUTTONS		609
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+#define GLUT_DEVICE_IGNORE_KEY_REPEAT   610
+#define GLUT_DEVICE_KEY_REPEAT          611
+#define GLUT_HAS_JOYSTICK		612
+#define GLUT_OWNS_JOYSTICK		613
+#define GLUT_JOYSTICK_BUTTONS		614
+#define GLUT_JOYSTICK_AXES		615
+#define GLUT_JOYSTICK_POLL_RATE		616
+#endif
+
+#if (GLUT_API_VERSION >= 3)
+/* glutLayerGet parameters. */
+#define GLUT_OVERLAY_POSSIBLE           800
+#define GLUT_LAYER_IN_USE		801
+#define GLUT_HAS_OVERLAY		802
+#define GLUT_TRANSPARENT_INDEX		803
+#define GLUT_NORMAL_DAMAGED		804
+#define GLUT_OVERLAY_DAMAGED		805
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+/* glutVideoResizeGet parameters. */
+#define GLUT_VIDEO_RESIZE_POSSIBLE	900
+#define GLUT_VIDEO_RESIZE_IN_USE	901
+#define GLUT_VIDEO_RESIZE_X_DELTA	902
+#define GLUT_VIDEO_RESIZE_Y_DELTA	903
+#define GLUT_VIDEO_RESIZE_WIDTH_DELTA	904
+#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA	905
+#define GLUT_VIDEO_RESIZE_X		906
+#define GLUT_VIDEO_RESIZE_Y		907
+#define GLUT_VIDEO_RESIZE_WIDTH		908
+#define GLUT_VIDEO_RESIZE_HEIGHT	909
+#endif
+
+/* glutUseLayer parameters. */
+#define GLUT_NORMAL			0
+#define GLUT_OVERLAY			1
+
+/* glutGetModifiers return mask. */
+#define GLUT_ACTIVE_SHIFT               1
+#define GLUT_ACTIVE_CTRL                2
+#define GLUT_ACTIVE_ALT                 4
+
+/* glutSetCursor parameters. */
+/* Basic arrows. */
+#define GLUT_CURSOR_RIGHT_ARROW		0
+#define GLUT_CURSOR_LEFT_ARROW		1
+/* Symbolic cursor shapes. */
+#define GLUT_CURSOR_INFO		2
+#define GLUT_CURSOR_DESTROY		3
+#define GLUT_CURSOR_HELP		4
+#define GLUT_CURSOR_CYCLE		5
+#define GLUT_CURSOR_SPRAY		6
+#define GLUT_CURSOR_WAIT		7
+#define GLUT_CURSOR_TEXT		8
+#define GLUT_CURSOR_CROSSHAIR		9
+/* Directional cursors. */
+#define GLUT_CURSOR_UP_DOWN		10
+#define GLUT_CURSOR_LEFT_RIGHT		11
+/* Sizing cursors. */
+#define GLUT_CURSOR_TOP_SIDE		12
+#define GLUT_CURSOR_BOTTOM_SIDE		13
+#define GLUT_CURSOR_LEFT_SIDE		14
+#define GLUT_CURSOR_RIGHT_SIDE		15
+#define GLUT_CURSOR_TOP_LEFT_CORNER	16
+#define GLUT_CURSOR_TOP_RIGHT_CORNER	17
+#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER	18
+#define GLUT_CURSOR_BOTTOM_LEFT_CORNER	19
+/* Inherit from parent window. */
+#define GLUT_CURSOR_INHERIT		100
+/* Blank cursor. */
+#define GLUT_CURSOR_NONE		101
+/* Fullscreen crosshair (if available). */
+#define GLUT_CURSOR_FULL_CROSSHAIR	102
+#endif
+
+/* GLUT initialization sub-API. */
+extern void APIENTRY glutInit(int *argcp, char **argv);
+extern void APIENTRY glutInitDisplayMode(unsigned int mode);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+extern void APIENTRY glutInitDisplayString(const char *string);
+#endif
+extern void APIENTRY glutInitWindowPosition(int x, int y);
+extern void APIENTRY glutInitWindowSize(int width, int height);
+extern void APIENTRY glutMainLoop(void);
+
+/* GLUT window sub-API. */
+extern int APIENTRY glutCreateWindow(const char *title);
+extern int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height);
+extern void APIENTRY glutDestroyWindow(int win);
+extern void APIENTRY glutPostRedisplay(void);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
+extern void APIENTRY glutPostWindowRedisplay(int win);
+#endif
+extern void APIENTRY glutSwapBuffers(void);
+extern int APIENTRY glutGetWindow(void);
+extern void APIENTRY glutSetWindow(int win);
+extern void APIENTRY glutSetWindowTitle(const char *title);
+extern void APIENTRY glutSetIconTitle(const char *title);
+extern void APIENTRY glutPositionWindow(int x, int y);
+extern void APIENTRY glutReshapeWindow(int width, int height);
+extern void APIENTRY glutPopWindow(void);
+extern void APIENTRY glutPushWindow(void);
+extern void APIENTRY glutIconifyWindow(void);
+extern void APIENTRY glutShowWindow(void);
+extern void APIENTRY glutHideWindow(void);
+#if (GLUT_API_VERSION >= 3)
+extern void APIENTRY glutFullScreen(void);
+extern void APIENTRY glutSetCursor(int cursor);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+extern void APIENTRY glutWarpPointer(int x, int y);
+#if (GLUT_MACOSX_IMPLEMENTATION >= 1)
+/* surface texturing API Mac OS X specific
+*  Note:
+*	glutSurfaceTexture has been deprecated, use GL_EXT_framebuffer_object
+*/
+#ifdef MAC_OS_X_VERSION_10_5
+extern void APIENTRY glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin); AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+#else
+extern void APIENTRY glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin);
+#endif
+#endif
+#if (GLUT_MACOSX_IMPLEMENTATION >= 2)
+/* Mac OS X specific API */
+extern void APIENTRY glutWMCloseFunc(void (*func)(void));
+extern void APIENTRY glutCheckLoop(void);
+#endif
+#endif
+
+/* GLUT overlay sub-API. */
+extern void APIENTRY glutEstablishOverlay(void);
+extern void APIENTRY glutRemoveOverlay(void);
+extern void APIENTRY glutUseLayer(GLenum layer);
+extern void APIENTRY glutPostOverlayRedisplay(void);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
+extern void APIENTRY glutPostWindowOverlayRedisplay(int win);
+#endif
+extern void APIENTRY glutShowOverlay(void);
+extern void APIENTRY glutHideOverlay(void);
+#endif
+
+/* GLUT menu sub-API. */
+extern int APIENTRY glutCreateMenu(void (*)(int));
+extern void APIENTRY glutDestroyMenu(int menu);
+extern int APIENTRY glutGetMenu(void);
+extern void APIENTRY glutSetMenu(int menu);
+extern void APIENTRY glutAddMenuEntry(const char *label, int value);
+extern void APIENTRY glutAddSubMenu(const char *label, int submenu);
+extern void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value);
+extern void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu);
+extern void APIENTRY glutRemoveMenuItem(int item);
+extern void APIENTRY glutAttachMenu(int button);
+extern void APIENTRY glutDetachMenu(int button);
+
+/* GLUT window callback sub-API. */
+extern void APIENTRY glutDisplayFunc(void (*func)(void));
+extern void APIENTRY glutReshapeFunc(void (*func)(int width, int height));
+extern void APIENTRY glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
+extern void APIENTRY glutMouseFunc(void (*func)(int button, int state, int x, int y));
+extern void APIENTRY glutMotionFunc(void (*func)(int x, int y));
+extern void APIENTRY glutPassiveMotionFunc(void (*func)(int x, int y));
+extern void APIENTRY glutEntryFunc(void (*func)(int state));
+extern void APIENTRY glutVisibilityFunc(void (*func)(int state));
+extern void APIENTRY glutIdleFunc(void (*func)(void));
+extern void APIENTRY glutTimerFunc(unsigned int millis, void (*func)(int value), int value);
+extern void APIENTRY glutMenuStateFunc(void (*func)(int state));
+#if (GLUT_API_VERSION >= 2)
+extern void APIENTRY glutSpecialFunc(void (*func)(int key, int x, int y));
+extern void APIENTRY glutSpaceballMotionFunc(void (*func)(int x, int y, int z));
+extern void APIENTRY glutSpaceballRotateFunc(void (*func)(int x, int y, int z));
+extern void APIENTRY glutSpaceballButtonFunc(void (*func)(int button, int state));
+extern void APIENTRY glutButtonBoxFunc(void (*func)(int button, int state));
+extern void APIENTRY glutDialsFunc(void (*func)(int dial, int value));
+extern void APIENTRY glutTabletMotionFunc(void (*func)(int x, int y));
+extern void APIENTRY glutTabletButtonFunc(void (*func)(int button, int state, int x, int y));
+#if (GLUT_API_VERSION >= 3)
+extern void APIENTRY glutMenuStatusFunc(void (*func)(int status, int x, int y));
+extern void APIENTRY glutOverlayDisplayFunc(void (*func)(void));
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+extern void APIENTRY glutWindowStatusFunc(void (*func)(int state));
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+extern void APIENTRY glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y));
+extern void APIENTRY glutSpecialUpFunc(void (*func)(int key, int x, int y));
+extern void APIENTRY glutJoystickFunc(void (*func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);
+//#ifdef GLUT_OF_007_HACK
+extern void APIENTRY glutDragEventFunc(void (*func)(char ** fileNames, int nFiles, int dragX, int dragY));
+//#endif	
+#endif
+#endif
+#endif
+
+/* GLUT color index sub-API. */
+extern void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
+extern GLfloat APIENTRY glutGetColor(int ndx, int component);
+extern void APIENTRY glutCopyColormap(int win);
+
+/* GLUT state retrieval sub-API. */
+extern int APIENTRY glutGet(GLenum type);
+extern int APIENTRY glutDeviceGet(GLenum type);
+#if (GLUT_API_VERSION >= 2)
+/* GLUT extension support sub-API */
+extern int APIENTRY glutExtensionSupported(const char *name);
+#endif
+#if (GLUT_API_VERSION >= 3)
+extern int APIENTRY glutGetModifiers(void);
+extern int APIENTRY glutLayerGet(GLenum type);
+#endif
+#if (GLUT_API_VERSION >= 5)
+extern void * APIENTRY glutGetProcAddress(const char *procName);
+#endif
+
+/* GLUT font sub-API */
+extern void APIENTRY glutBitmapCharacter(void *font, int character);
+extern int APIENTRY glutBitmapWidth(void *font, int character);
+extern void APIENTRY glutStrokeCharacter(void *font, int character);
+extern int APIENTRY glutStrokeWidth(void *font, int character);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+extern int APIENTRY glutBitmapLength(void *font, const unsigned char *string);
+extern int APIENTRY glutStrokeLength(void *font, const unsigned char *string);
+#endif
+
+/* GLUT pre-built models sub-API */
+extern void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
+extern void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
+extern void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+extern void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+extern void APIENTRY glutWireCube(GLdouble size);
+extern void APIENTRY glutSolidCube(GLdouble size);
+extern void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+extern void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+extern void APIENTRY glutWireDodecahedron(void);
+extern void APIENTRY glutSolidDodecahedron(void);
+extern void APIENTRY glutWireTeapot(GLdouble size);
+extern void APIENTRY glutSolidTeapot(GLdouble size);
+extern void APIENTRY glutWireOctahedron(void);
+extern void APIENTRY glutSolidOctahedron(void);
+extern void APIENTRY glutWireTetrahedron(void);
+extern void APIENTRY glutSolidTetrahedron(void);
+extern void APIENTRY glutWireIcosahedron(void);
+extern void APIENTRY glutSolidIcosahedron(void);
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+/* GLUT video resize sub-API. */
+extern int APIENTRY glutVideoResizeGet(GLenum param);
+extern void APIENTRY glutSetupVideoResizing(void);
+extern void APIENTRY glutStopVideoResizing(void);
+extern void APIENTRY glutVideoResize(int x, int y, int width, int height);
+extern void APIENTRY glutVideoPan(int x, int y, int width, int height);
+
+/* GLUT debugging sub-API. */
+extern void APIENTRY glutReportErrors(void);
+#endif
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+/* GLUT device control sub-API. */
+/* glutSetKeyRepeat modes. */
+#define GLUT_KEY_REPEAT_OFF		0
+#define GLUT_KEY_REPEAT_ON		1
+#define GLUT_KEY_REPEAT_DEFAULT		2
+
+/* Joystick button masks. */
+#define GLUT_JOYSTICK_BUTTON_A		1
+#define GLUT_JOYSTICK_BUTTON_B		2
+#define GLUT_JOYSTICK_BUTTON_C		4
+#define GLUT_JOYSTICK_BUTTON_D		8
+
+extern void APIENTRY glutIgnoreKeyRepeat(int ignore);
+extern void APIENTRY glutSetKeyRepeat(int repeatMode);
+extern void APIENTRY glutForceJoystickFunc(void);
+
+/* GLUT game mode sub-API. */
+/* glutGameModeGet. */
+#define GLUT_GAME_MODE_ACTIVE           0
+#define GLUT_GAME_MODE_POSSIBLE         1
+#define GLUT_GAME_MODE_WIDTH            2
+#define GLUT_GAME_MODE_HEIGHT           3
+#define GLUT_GAME_MODE_PIXEL_DEPTH      4
+#define GLUT_GAME_MODE_REFRESH_RATE     5
+#define GLUT_GAME_MODE_DISPLAY_CHANGED  6
+
+extern void APIENTRY glutGameModeString(const char *string);
+extern int APIENTRY glutEnterGameMode(void);
+extern void APIENTRY glutLeaveGameMode(void);
+extern int APIENTRY glutGameModeGet(GLenum mode);
+#endif
+
+#ifdef __cplusplus
+}
+
+#endif
+
+#ifdef GLUT_APIENTRY_DEFINED
+# undef GLUT_APIENTRY_DEFINED
+# undef APIENTRY
+#endif
+
+#ifdef GLUT_WINGDIAPI_DEFINED
+# undef GLUT_WINGDIAPI_DEFINED
+# undef WINGDIAPI
+#endif
+
+#endif                  /* __glut_h__ */

+ 30 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutbitmap.h

@@ -0,0 +1,30 @@
+#ifndef __glutbitmap_h__
+#define __glutbitmap_h__
+
+/* Copyright (c) Mark J. Kilgard, 1994. */
+
+/* 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 "glut.h"
+
+typedef struct {
+  const GLsizei width;
+  const GLsizei height;
+  const GLfloat xorig;
+  const GLfloat yorig;
+  const GLfloat advance;
+  const GLubyte *bitmap;
+} BitmapCharRec, *BitmapCharPtr;
+
+typedef struct {
+  const char *name;
+  const int num_chars;
+  const int first;
+  const BitmapCharRec * const *ch;
+} BitmapFontRec, *BitmapFontPtr;
+
+typedef void *GLUTbitmapFont;
+
+#endif /* __glutbitmap_h__ */

+ 90 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutf90.h

@@ -0,0 +1,90 @@
+#ifndef __glutf90_h__
+#define __glutf90_h__
+
+/* Copyright (c) Mark J. Kilgard & Willam F. Mitchell, 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. */
+
+/* This header provides the binding interface for William Mitchell's
+   f90gl Fortran 90 GLUT binding.  Other GLUT language bindings
+   can and should use this interace. */
+
+/* I appreciate the guidance from William Mitchell
+   (mitchell@cam.nist.gov) in developing this friend interface
+   for use by the f90gl package.  See ../../README.fortran */
+
+#include <GLUT/glut.h>
+
+#ifndef GLUTCALLBACK
+	#define GLUTCALLBACK
+#endif
+#ifndef APIENTRY
+	#define APIENTRY
+#endif
+
+/* Which callback enumerants for the __glutSetFCB/__glutGetFCB routines. */
+/* NOTE These values are part of a binary interface for the f90gl Fortran
+   90 binding and so must NOT changes (additions are allowed). */
+
+/* GLUTwindow callbacks. */
+#define GLUT_FCB_DISPLAY         0    /* GLUTdisplayFCB */
+#define GLUT_FCB_RESHAPE         1    /* GLUTreshapeFCB */
+#define GLUT_FCB_MOUSE           2    /* GLUTmouseFCB */
+#define GLUT_FCB_MOTION          3    /* GLUTmotionFCB */
+#define GLUT_FCB_PASSIVE         4    /* GLUTpassiveFCB */
+#define GLUT_FCB_ENTRY           5    /* GLUTentryFCB */
+#define GLUT_FCB_KEYBOARD        6    /* GLUTkeyboardFCB */
+#define GLUT_FCB_KEYBOARD_UP     7    /* GLUTkeyboardFCB */
+#define GLUT_FCB_WINDOW_STATUS   8    /* GLUTwindowStatusFCB */
+#define GLUT_FCB_VISIBILITY      9    /* GLUTvisibilityFCB */
+#define GLUT_FCB_SPECIAL         10   /* GLUTspecialFCB */
+#define GLUT_FCB_SPECIAL_UP      11   /* GLUTspecialFCB */
+#define GLUT_FCB_BUTTON_BOX      12   /* GLUTbuttonBoxFCB */
+#define GLUT_FCB_DIALS           13   /* GLUTdialsFCB */
+#define GLUT_FCB_SPACE_MOTION    14   /* GLUTspaceMotionFCB */
+#define GLUT_FCB_SPACE_ROTATE    15   /* GLUTspaceRotateFCB */
+#define GLUT_FCB_SPACE_BUTTON    16   /* GLUTspaceButtonFCB */
+#define GLUT_FCB_TABLET_MOTION   17   /* GLUTtabletMotionFCB */
+#define GLUT_FCB_TABLET_BUTTON   18   /* GLUTtabletButtonFCB */
+#define GLUT_FCB_JOYSTICK        19   /* GLUTjoystickFCB */
+#define GLUT_FCB_WMCLOSE         20   /* GLUTwmcloseFCB */
+/* Non-GLUTwindow callbacks. */
+#define GLUT_FCB_OVERLAY_DISPLAY 100  /* GLUTdisplayFCB */
+#define GLUT_FCB_SELECT          101  /* GLUTselectFCB */
+#define GLUT_FCB_TIMER           102  /* GLUTtimerFCB */
+
+/* GLUT Fortran callback function types. */
+typedef void (GLUTCALLBACK *GLUTdisplayFCB) (void);
+typedef void (GLUTCALLBACK *GLUTwmcloseFCB) (void);
+typedef void (GLUTCALLBACK *GLUTreshapeFCB) (int *, int *);
+/* NOTE the pressed key is int, not unsigned char for Fortran! */
+typedef void (GLUTCALLBACK *GLUTkeyboardFCB) (int *, int *, int *);
+typedef void (GLUTCALLBACK *GLUTmouseFCB) (int *, int *, int *, int *);
+typedef void (GLUTCALLBACK *GLUTmotionFCB) (int *, int *);
+typedef void (GLUTCALLBACK *GLUTpassiveFCB) (int *, int *);
+typedef void (GLUTCALLBACK *GLUTentryFCB) (int *);
+typedef void (GLUTCALLBACK *GLUTwindowStatusFCB) (int *);
+typedef void (GLUTCALLBACK *GLUTvisibilityFCB) (int *);
+typedef void (GLUTCALLBACK *GLUTspecialFCB) (int *, int *, int *);
+typedef void (GLUTCALLBACK *GLUTbuttonBoxFCB) (int *, int *);
+typedef void (GLUTCALLBACK *GLUTdialsFCB) (int *, int *);
+typedef void (GLUTCALLBACK *GLUTspaceMotionFCB) (int *, int *, int *);
+typedef void (GLUTCALLBACK *GLUTspaceRotateFCB) (int *, int *, int *);
+typedef void (GLUTCALLBACK *GLUTspaceButtonFCB) (int *, int *);
+typedef void (GLUTCALLBACK *GLUTtabletMotionFCB) (int *, int *);
+typedef void (GLUTCALLBACK *GLUTtabletButtonFCB) (int *, int *, int *, int *);
+typedef void (GLUTCALLBACK *GLUTjoystickFCB) (unsigned int *buttonMask, int *x, int *y, int *z);
+
+typedef void (GLUTCALLBACK *GLUTselectFCB) (int *);
+typedef void (GLUTCALLBACK *GLUTtimerFCB) (int *);
+typedef void (GLUTCALLBACK *GLUTmenuStateFCB) (int *);  /* DEPRICATED. */
+typedef void (GLUTCALLBACK *GLUTmenuStatusFCB) (int *, int *, int *);
+typedef void (GLUTCALLBACK *GLUTidleFCB) (void);
+
+/* Functions that set and return Fortran callback functions. */
+extern void* APIENTRY __glutGetFCB(int which);
+extern void APIENTRY __glutSetFCB(int which, void *func);
+
+#endif  /* __glutf90_h__ */

+ 42 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/glutstroke.h

@@ -0,0 +1,42 @@
+#ifndef __glutstroke_h__
+#define __glutstroke_h__
+
+/* Copyright (c) Mark J. Kilgard, 1994. */
+
+/* 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)
+#pragma warning (disable:4244)  /* disable bogus conversion warnings */
+#pragma warning (disable:4305)  /* VC++ 5.0 version of above warning. */
+#endif
+
+typedef struct {
+  float x;
+  float y;
+} CoordRec, *CoordPtr;
+
+typedef struct {
+  int num_coords;
+  const CoordRec *coord;
+} StrokeRec, *StrokePtr;
+
+typedef struct {
+  int num_strokes;
+  const StrokeRec *stroke;
+  float center;
+  float right;
+} StrokeCharRec, *StrokeCharPtr;
+
+typedef struct {
+  const char *name;
+  int num_chars;
+  const StrokeCharRec *ch;
+  float top;
+  float bottom;
+} StrokeFontRec, *StrokeFontPtr;
+
+typedef void *GLUTstrokeFont;
+
+#endif /* __glutstroke_h__ */

+ 89 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/gutil.h

@@ -0,0 +1,89 @@
+
+/*
+ * gutil.h
+ *
+ * FUNCTION:
+ * Provide utilities that allow rotation to occur 
+ * around any axis.
+ * 
+ * HISTORY:
+ * created by Linas Vepstas  1990
+ * added single & double precision, June 1991, Linas Vepstas
+ */
+
+#ifndef __GUTIL_H__
+#define __GUTIL_H__
+
+#ifdef __GUTIL_DOUBLE
+#define gutDouble double
+#else
+#define gutDouble float  
+#endif
+
+
+#ifdef _NO_PROTO		/* NO ANSI C PROTOTYPING */
+
+/* Rotation Utilities */
+extern void rot_axis_f ();
+extern void rot_about_axis_f ();
+extern void rot_omega_f ();
+extern void urot_axis_f ();
+extern void urot_about_axis_f ();
+extern void urot_omega_f ();
+
+/* double-precision versions */
+extern void rot_axis_d ();
+extern void rot_about_axis_d ();
+extern void rot_omega_d ();
+extern void urot_axis_d ();
+extern void urot_about_axis_d ();
+extern void urot_omega_d ();
+
+/* viewpoint functions */
+extern void uview_direction_d ();
+extern void uview_direction_f ();
+extern void uviewpoint_d ();
+extern void uviewpoint_f ();
+
+#else /* _NO_PROTO */		/* ANSI C PROTOTYPING */
+
+/* Rotation Utilities */
+extern void rot_axis_f (float omega, float axis[3]);
+extern void rot_about_axis_f (float angle, float axis[3]);
+extern void rot_omega_f (float axis[3]);
+extern void urot_axis_f (float m[4][4], float omega, float axis[3]);
+extern void urot_about_axis_f (float m[4][4], float angle, float axis[3]);
+extern void urot_omega_f (float m[4][4], float axis[3]);
+
+/* double-precision versions */
+extern void rot_axis_d (double omega, double axis[3]);
+extern void rot_about_axis_d (double angle, double axis[3]);
+extern void rot_omega_d (double axis[3]);
+extern void urot_axis_d (double m[4][4], double omega, double axis[3]);
+extern void urot_about_axis_d (double m[4][4], double angle, double axis[3]);
+extern void urot_omega_d (double m[4][4], double axis[3]);
+
+/* viewpoint functions */
+extern void uview_direction_d (double m[4][4],		/* returned */
+                        double v21[3],		/* input */
+                        double up[3]);		/* input */
+
+extern void uview_direction_f (float m[4][4],		/* returned */
+                        float v21[3],		/* input */
+                        float up[3]);		/* input */
+
+extern void uviewpoint_d (double m[4][4],		/* returned */
+                   double v1[3],		/* input */
+                   double v2[3],		/* input */
+                   double up[3]);		/* input */
+
+extern void uviewpoint_f (float m[4][4],		/* returned */
+                   float v1[3],		/* input */
+                   float v2[3],		/* input */
+                   float up[3]);		/* input */
+
+#endif /* _NO_PROTO */
+
+#endif /* _GUTIL_H__ */
+
+/* ------------------- end of file ---------------------- */

+ 391 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/intersect.h

@@ -0,0 +1,391 @@
+/*
+ * FUNCTION:
+ * This file contains a number of utilities useful to 3D graphics in
+ * general, and to the generation of tubing and extrusions in particular
+ * 
+ * HISTORY:
+ * Written by Linas Vepstas, August 1991
+ * Updated to correctly handle degenerate cases, Linas,  February 1993 
+ */
+
+#include <math.h>
+#include "port.h"
+#include "vvector.h"
+
+#define BACKWARDS_INTERSECT (2)
+
+/* ========================================================== */
+/*
+ * the Degenerate_Tolerance token represents the greatest amount by
+ * which different scales in a graphics environment can differ before
+ * they should be considered "degenerate".   That is, when one vector is
+ * a million times longer than another, changces are that the second will
+ * be less than a pixel int, and therefore was probably meant to be
+ * degenerate (by the CAD package, etc.)  But what should this tolerance
+ * be?  At least 1 in onethousand (since screen sizes are 1K pixels), but
+ * les than 1 in 4 million (since this is the limit of single-precision
+ * floating point accuracy).  Of course, if double precision were used,
+ * then the tolerance could be increased.
+ * 
+ * Potentially, this naive assumption could cause problems if the CAD
+ * package attempts to zoom in on small details, and turns out, certain
+ * points should not hvae been degenerate.  The problem presented here
+ * is that the tolerance could run out before single-precision ran
+ * out, and so the CAD packages would perceive this as a "bug".
+ * One alternative is to fiddle around & try to tighten the tolerance.
+ * However, the right alternative is to code the graphics pipeline in
+ * double-precision (and tighten the tolerance).
+ *
+ * By the way, note that Degernate Tolerance is a "dimensionless"
+ * quantitiy -- it has no units -- it does not measure feet, inches,
+ * millimeters or pixels.  It is used only in the computations of ratios
+ * and relative lengths.
+ */
+
+/* 
+ * Right now, the tolerance is set to 2 parts in a million, which
+ * corresponds to a 19-bit distinction of mantissas. Note that
+ * single-precsion numbers have 24 bit mantissas.
+ */
+
+#define DEGENERATE_TOLERANCE   (0.000002)
+
+/* ========================================================== */
+/* 
+ * The macro and subroutine INTERSECT are designed to compute the
+ * intersection of a line (defined by the points v1 and v2) and a plane
+ * (defined as plane which is normal to the vector n, and contains the
+ * point p).  Both return the point sect, which is the point of
+ * interesection.
+ *
+ * This MACRO attemps to be fairly robust by checking for a divide by
+ * zero.
+ */
+
+/* ========================================================== */
+/*
+ * HACK ALERT
+ * The intersection parameter t has the nice property that if t>1,
+ * then the intersection is "in front of" p1, and if t<0, then the
+ * intersection is "behind" p2. Unfortunately, as the intersecting plane
+ * and the line become parallel, t wraps through infinity -- i.e. t can
+ * become so large that t becomes "greater than infinity" and comes back 
+ * as a negative number (i.e. winding number hopped by one unit).  We 
+ * have no way of detecting this situation without adding gazzillions 
+ * of lines of code of topological algebra to detect the winding number;
+ * and this would be incredibly difficult, and ruin performance.
+ * 
+ * Thus, we've installed a cheap hack for use by the "cut style" drawing
+ * routines. If t proves to be a large negative number (more negative
+ * than -5), then we assume that t was positive and wound through
+ * infinity.  This makes most cuts look good, without introducing bogus
+ * cuts at infinity.
+ */
+/* ========================================================== */
+
+#define INTERSECT(sect,p,n,v1,v2)			\
+{							\
+   gleDouble deno, numer, t, omt;			\
+							\
+   deno = (v1[0] - v2[0]) * n[0];			\
+   deno += (v1[1] - v2[1]) * n[1];			\
+   deno += (v1[2] - v2[2]) * n[2];			\
+   							\
+   if (deno == 0.0) {					\
+      VEC_COPY (n, v1);					\
+      /* printf ("Intersect: Warning: line is coplanar with plane \n"); */ \
+   } else {						\
+							\
+      numer = (p[0] - v2[0]) * n[0];			\
+      numer += (p[1] - v2[1]) * n[1];			\
+      numer += (p[2] - v2[2]) * n[2];			\
+							\
+      t = numer / deno;					\
+      omt = 1.0 - t;					\
+							\
+      sect[0] = t * v1[0] + omt * v2[0];		\
+      sect[1] = t * v1[1] + omt * v2[1];		\
+      sect[2] = t * v1[2] + omt * v2[2];		\
+   }							\
+}
+
+/* ========================================================== */
+/* 
+ * The macro and subroutine BISECTING_PLANE compute a normal vector that
+ * describes the bisecting plane between three points (v1, v2 and v3).  
+ * This bisecting plane has the following properties:
+ * 1) it contains the point v2
+ * 2) the angle it makes with v21 == v2 - v1 is equal to the angle it 
+ *    makes with v32 == v3 - v2 
+ * 3) it is perpendicular to the plane defined by v1, v2, v3.
+ *
+ * Having input v1, v2, and v3, it returns a unit vector n.
+ *
+ * In some cases, the user may specify degenerate points, and still
+ * expect "reasonable" or "obvious" behaviour.  The "expected"
+ * behaviour for these degenerate cases is:
+ *
+ * 1) if v1 == v2 == v3, then return n=0
+ * 2) if v1 == v2, then return v32 (normalized).
+ * 3) if v2 == v3, then return v21 (normalized).
+ * 4) if v1, v2 and v3 co-linear, then return v21 (normalized).
+ *
+ * Mathematically, these special cases "make sense" -- we just have to
+ * code around potential divide-by-zero's in the code below.
+ */
+
+/* ========================================================== */
+
+#define BISECTING_PLANE(valid,n,v1,v2,v3)			\
+{								\
+   double v21[3], v32[3];					\
+   double len21, len32;						\
+   double vdot;							\
+								\
+   VEC_DIFF (v21, v2, v1);					\
+   VEC_DIFF (v32, v3, v2);					\
+								\
+   VEC_LENGTH (len21, v21);					\
+   VEC_LENGTH (len32, v32);					\
+								\
+   if (len21 <= DEGENERATE_TOLERANCE * len32) {			\
+								\
+      if (len32 == 0.0) {					\
+         /* all three points lie ontop of one-another */	\
+         VEC_ZERO (n);						\
+         valid = FALSE;						\
+      } else {							\
+         /* return a normalized copy of v32 as bisector */	\
+         len32 = 1.0 / len32;					\
+         VEC_SCALE (n, len32, v32);				\
+         valid = TRUE;						\
+      }								\
+								\
+   } else {							\
+								\
+      valid = TRUE;						\
+								\
+      if (len32 <= DEGENERATE_TOLERANCE * len21) {		\
+         /* return a normalized copy of v21 as bisector */	\
+         len21 = 1.0 / len21;					\
+         VEC_SCALE (n, len21, v21);				\
+								\
+      } else {							\
+								\
+         /* normalize v21 to be of unit length */		\
+         len21 = 1.0 / len21;					\
+         VEC_SCALE (v21, len21, v21);				\
+								\
+         /* normalize v32 to be of unit length */		\
+         len32 = 1.0 / len32;					\
+         VEC_SCALE (v32, len32, v32);				\
+								\
+         VEC_DOT_PRODUCT (vdot, v32, v21);			\
+								\
+         /* if vdot == 1 or -1, then points are colinear */	\
+         if ((vdot >= (1.0-DEGENERATE_TOLERANCE)) || 		\
+             (vdot <= (-1.0+DEGENERATE_TOLERANCE))) {		\
+            VEC_COPY (n, v21);					\
+         } else {						\
+   								\
+            /* go do the full computation */ 			\
+            n[0] = vdot * (v32[0] + v21[0]) - v32[0] - v21[0];	\
+            n[1] = vdot * (v32[1] + v21[1]) - v32[1] - v21[1];	\
+            n[2] = vdot * (v32[2] + v21[2]) - v32[2] - v21[2];	\
+								\
+            /* if above if-test's passed, 			\
+             * n should NEVER be of zero length */		\
+            VEC_NORMALIZE (n);					\
+         } 							\
+      } 							\
+   } 								\
+}
+
+/* ========================================================== */
+/*
+ * The block of code below is ifdef'd out, and is here for reference
+ * purposes only.  It performs the "mathematically right thing" for
+ * computing a bisecting plane, but is, unfortunately, subject ot noise
+ * in the presence of near degenerate points.  Since computer graphics,
+ * due to sloppy coding, laziness, or correctness, is filled with
+ * degenerate points, we can't really use this version.  The code above
+ * is far more appropriate for graphics.
+ */
+
+#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER
+#define BISECTING_PLANE(n,v1,v2,v3)				\
+{								\
+   double v21[3], v32[3];					\
+   double len21, len32;						\
+   double vdot;							\
+								\
+   VEC_DIFF (v21, v2, v1);					\
+   VEC_DIFF (v32, v3, v2);					\
+								\
+   VEC_LENGTH (len21, v21);					\
+   VEC_LENGTH (len32, v32);					\
+								\
+   if (len21 == 0.0) {						\
+								\
+      if (len32 == 0.0) {					\
+         /* all three points lie ontop of one-another */	\
+         VEC_ZERO (n);						\
+         valid = FALSE;						\
+      } else {							\
+         /* return a normalized copy of v32 as bisector */	\
+         len32 = 1.0 / len32;					\
+         VEC_SCALE (n, len32, v32);				\
+      }								\
+								\
+   } else {							\
+								\
+      /* normalize v21 to be of unit length */			\
+      len21 = 1.0 / len21;					\
+      VEC_SCALE (v21, len21, v21);				\
+								\
+      if (len32 == 0.0) {					\
+         /* return a normalized copy of v21 as bisector */	\
+         VEC_COPY (n, v21);					\
+      } else {							\
+								\
+         /* normalize v32 to be of unit length */		\
+         len32 = 1.0 / len32;					\
+         VEC_SCALE (v32, len32, v32);				\
+								\
+         VEC_DOT_PRODUCT (vdot, v32, v21);			\
+								\
+         /* if vdot == 1 or -1, then points are colinear */	\
+         if ((vdot == 1.0) || (vdot == -1.0)) {			\
+            VEC_COPY (n, v21);					\
+         } else {						\
+   								\
+            /* go do the full computation */ 			\
+            n[0] = vdot * (v32[0] + v21[0]) - v32[0] - v21[0];	\
+            n[1] = vdot * (v32[1] + v21[1]) - v32[1] - v21[1];	\
+            n[2] = vdot * (v32[2] + v21[2]) - v32[2] - v21[2];	\
+								\
+            /* if above if-test's passed, 			\
+             * n should NEVER be of zero length */		\
+            VEC_NORMALIZE (n);					\
+         } 							\
+      } 							\
+   } 								\
+}
+#endif
+
+/* ========================================================== */
+/*
+ * This macro computes the plane perpendicular to the the plane
+ * defined by three points, and whose normal vector is givven as the
+ * difference between the two vectors ...
+ * 
+ * (See way below for the "math" model if you want to understand this.
+ * The comments about relative errors above apply here.)
+ */
+
+#define CUTTING_PLANE(valid,n,v1,v2,v3)				\
+{								\
+   double v21[3], v32[3];					\
+   double len21, len32;						\
+   double lendiff;						\
+								\
+   VEC_DIFF (v21, v2, v1);					\
+   VEC_DIFF (v32, v3, v2);					\
+								\
+   VEC_LENGTH (len21, v21);					\
+   VEC_LENGTH (len32, v32);					\
+								\
+   if (len21 <= DEGENERATE_TOLERANCE * len32) {			\
+								\
+      if (len32 == 0.0) {					\
+         /* all three points lie ontop of one-another */	\
+         VEC_ZERO (n);						\
+         valid = FALSE;						\
+      } else {							\
+         /* return a normalized copy of v32 as cut-vector */	\
+         len32 = 1.0 / len32;					\
+         VEC_SCALE (n, len32, v32);				\
+         valid = TRUE;						\
+      }								\
+								\
+   } else {							\
+								\
+      valid = TRUE;						\
+								\
+      if (len32 <= DEGENERATE_TOLERANCE * len21) {		\
+         /* return a normalized copy of v21 as cut vector */	\
+         len21 = 1.0 / len21;					\
+         VEC_SCALE (n, len21, v21);				\
+      } else {							\
+								\
+         /* normalize v21 to be of unit length */		\
+         len21 = 1.0 / len21;					\
+         VEC_SCALE (v21, len21, v21);				\
+								\
+         /* normalize v32 to be of unit length */		\
+         len32 = 1.0 / len32;					\
+         VEC_SCALE (v32, len32, v32);				\
+								\
+         VEC_DIFF (n, v21, v32);				\
+         VEC_LENGTH (lendiff, n);				\
+								\
+         /* if the perp vector is very small, then the two 	\
+          * vectors are darn near collinear, and the cut 	\
+          * vector is probably poorly defined. */		\
+         if (lendiff < DEGENERATE_TOLERANCE) {			\
+            VEC_ZERO (n);					\
+            valid = FALSE;					\
+         } else {						\
+            lendiff = 1.0 / lendiff;				\
+            VEC_SCALE (n, lendiff, n);				\
+         } 							\
+      } 							\
+   } 								\
+}
+
+/* ========================================================== */
+
+#ifdef MATHEMATICALLY_EXACT_GRAPHICALLY_A_KILLER
+#define CUTTING_PLANE(n,v1,v2,v3)		\
+{						\
+   double v21[3], v32[3];			\
+						\
+   VEC_DIFF (v21, v2, v1);			\
+   VEC_DIFF (v32, v3, v2);			\
+						\
+   VEC_NORMALIZE (v21);				\
+   VEC_NORMALIZE (v32);				\
+						\
+   VEC_DIFF (n, v21, v32);			\
+   VEC_NORMALIZE (n);				\
+}
+#endif
+
+
+/* ============================================================ */
+/* This macro is used in several places to cycle through a series of
+ * points to find the next non-degenerate point in a series */
+
+#define FIND_NON_DEGENERATE_POINT(inext,npoints,len,diff,point_array)   \
+{                                                                       \
+   gleDouble slen;							\
+   gleDouble summa[3];							\
+   									\
+   do {                                                                 \
+      /* get distance to next point */                                  \
+      VEC_DIFF (diff, point_array[inext+1], point_array[inext]);        \
+      VEC_LENGTH (len, diff);                                           \
+      VEC_SUM (summa, point_array[inext+1], point_array[inext]);        \
+      VEC_LENGTH (slen, summa);                                         \
+      slen *= DEGENERATE_TOLERANCE;					\
+      inext ++;                                                         \
+   } while ((len <= slen) && (inext < npoints-1));                      \
+}
+
+/* ========================================================== */
+
+extern int bisecting_plane (gleDouble n[3],    /* returned */
+                      gleDouble v1[3],  /* input */
+                      gleDouble v2[3],  /* input */
+                      gleDouble v3[3]);  /* input */
+

+ 298 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/port.h

@@ -0,0 +1,298 @@
+
+/*
+ * port.h 
+ *
+ * FUNCTION:
+ * This file contains defines for porting the tubing toolkit from GL to
+ * OpenGL to some callback scheme.
+ *
+ * HISTORY:
+ * Created by Linas Vepstas --  February 1993
+ * Added auto texture coord generation hacks, Linas April 1994 
+ */
+
+#ifndef __GLE_PORT_H__
+#define __GLE_PORT_H__
+
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+/* ====================================================== */
+/* Some compilers can't handle multiply-subscripted array's */
+
+#ifdef FUNKY_C
+typedef gleDouble gleVector;
+#define AVAL(arr,n,i,j)  arr(6*n+3*i+j)
+#define VVAL(arr,n,i)  arr(3*n+i)
+
+#else  /* FUNKY_C */
+typedef double gleVector[3];
+typedef double glePoint[2];
+#define AVAL(arr,n,i,j)  arr[n][i][j]
+#define VVAL(arr,n,i)  arr[n][i];
+
+#endif /* FUNKY_C */
+
+/* ====================================================== */
+/* These are used to convey info about topography to the 
+ * texture mapping routines */
+
+#define FRONT 		1
+#define BACK 		2
+#define FRONT_CAP 	3
+#define BACK_CAP	4
+#define FILLET		5
+
+/* ====================================================== */
+
+#define __GLE_DOUBLE
+
+/* ====================================================== */
+
+#ifdef __GLE_DOUBLE
+#ifndef gleDouble
+    #define gleDouble 		double
+#endif
+#define urot_axis(a,b,c) 	urot_axis_d(a,b,c)
+#define uview_direction(a,b,c) 	uview_direction_d(a,b,c)
+#define uviewpoint(a,b,c,d) 	uviewpoint_d(a,b,c,d)
+#define MULTMATRIX(m)		MULTMATRIX_D(m)
+#define LOADMATRIX(m)		LOADMATRIX_D(m)
+#define V3F(x,j,id)		V3F_D(x,j,id)
+#define N3F(x)			N3F_D(x)
+#define T2F(x,y)		T2F_D(x,y)
+#else 
+#define gleDouble 		float
+#define urot_axis(a,b,c) 	urot_axis_f(a,b,c)
+#define uview_direction(a,b,c) 	uview_direction_f(a,b,c)
+#define uviewpoint(a,b,c,d) 	uviewpoint_f(a,b,c,d)
+#define MULTMATRIX(m)		MULTMATRIX_F(m)
+#define LOADMATRIX(m)		LOADMATRIX_F(m)
+#define V3F(x,j,id)		V3F_F(x,j,id)
+#define N3F(x)			N3F_F(x)
+#define T2F(x,y)		T2F_F(x,y)
+#endif 
+
+/* ====================================================== */
+
+#if (defined DEBUG_GL_32 || DEBUG_OPENGL_10)
+#undef GL_32
+#undef OPENGL_10
+
+#define BGNTMESH(i,len)	printf ("bgntmesh() \n");
+#define ENDTMESH()      printf ("endtmesh() \n");
+#define BGNPOLYGON()	printf ("bgnpolygon() \n");
+#define ENDPOLYGON()	printf ("endpolygon() \n");
+#define V3F_F(x,j,id)	printf ("v3f(x)		%f %f %f \n", x[0], x[1], x[2]);
+#define V3F_D(x,j,id)	printf ("v3d(x) 	%f %f %f \n", x[0], x[1], x[2]);
+#define	N3F_F(x)	printf ("n3f(x) 	%f %f %f \n", x[0], x[1], x[2]);
+#define	N3F_D(x)	printf ("n3d(x)		%f %f %f \n", x[0], x[1], x[2]);
+#define	C3F(x)		printf ("c3f(x) 	%f %f %f \n", x[0], x[1], x[2]);
+
+#define	POPMATRIX()	printf ("popmatrix () \n");
+#define	PUSHMATRIX()	printf ("pushmatrix() \n");
+#define	MULTMATRIX_F(x)	MULTMATRIX_D(x)
+#define	LOADMATRIX_F(x)	LOADMATRIX_D(x)
+
+
+#define LOADMATRIX_D(x) {				\
+   int i, j; 						\
+   printf ("loadmatrix (x) \n");			\
+   for (i=0; i<4; i++) {				\
+      for (j=0; j<4; j++) {				\
+         printf ( "%f ", x[i][j]);			\
+      }							\
+      printf (" \n");					\
+   }							\
+}
+
+#define MULTMATRIX_D(x) {				\
+   int i, j; 						\
+   printf ("multmatrix (x) \n");			\
+   for (i=0; i<4; i++) {				\
+      for (j=0; j<4; j++) {				\
+         printf ( "%f ", x[i][j]);			\
+      }							\
+      printf (" \n");					\
+   }							\
+}
+
+#define __IS_LIGHTING_ON  (1)
+
+#endif
+
+/* ====================================================== */
+
+#ifdef GL_32
+
+#include <gl/gl.h>
+
+#define BGNTMESH(i,len)	bgntmesh()
+#define ENDTMESH()	endtmesh()
+#define BGNPOLYGON()	bgnpolygon()
+#define ENDPOLYGON()	endpolygon()
+#define V3F_F(x,j,id)	v3f(x)
+#define V3F_D(x,j,id)	v3d(x)
+#define	N3F_F(x)	n3f(x)
+#define	T2F_F(x,y)
+#define	T2F_D(x,y)
+#define	C3F(x)		c3f(x)
+
+#define	POPMATRIX()	popmatrix ()
+#define	PUSHMATRIX()	pushmatrix()
+#define	MULTMATRIX_F(x)	multmatrix (x)
+#define	LOADMATRIX_F(x)	loadmatrix (x)
+
+#define	N3F_D(x) {					\
+   float nnn[3];					\
+   nnn[0] = (float) x[0]; 				\
+   nnn[1] = (float) x[1]; 				\
+   nnn[2] = (float) x[2]; 				\
+   n3f (nnn);						\
+}
+
+#define LOADMATRIX_D(x) {				\
+   int i, j; 						\
+   float mmm[4][4];					\
+   for (i=0; i<4; i++) {				\
+      for (j=0; j<4; j++) {				\
+         mmm[i][j] = (float) x[i][j];			\
+      }							\
+   }							\
+   loadmatrix(mmm);					\
+}
+
+#define MULTMATRIX_D(x) {				\
+   int i, j; 						\
+   float mmm[4][4];					\
+   for (i=0; i<4; i++) {				\
+      for (j=0; j<4; j++) {				\
+         mmm[i][j] = (float) x[i][j];			\
+      }							\
+   }							\
+   multmatrix(mmm);					\
+}
+
+/* #define __IS_LIGHTING_ON  (MSINGLE == getmmode()) */
+#define __IS_LIGHTING_ON  (extrusion_join_style & TUBE_LIGHTING_ON)
+
+#endif /* GL_32 */
+
+/* ====================================================== */
+#ifdef OPENGL_10
+
+#if defined(_WIN32)
+#include <windows.h>
+#pragma warning (disable:4244)          /* disable bogus conversion warnings */
+#endif
+#include <OpenGL/gl.h>
+#include <OpenGL/glu.h>
+
+/*
+#define	N3F_F(x) {					\
+   float nnn[3];					\
+   nnn[0] = - (float) x[0]; 				\
+   nnn[1] = - (float) x[1]; 				\
+   nnn[2] = - (float) x[2]; 				\
+   glNormal3fv (nnn);						\
+}
+#define	N3F_D(x) {					\
+   float nnn[3];					\
+   nnn[0] = - (float) x[0]; 				\
+   nnn[1] = - (float) x[1]; 				\
+   nnn[2] = - (float) x[2]; 				\
+   glNormal3fv (nnn);						\
+}
+*/
+
+#define	C3F(x)		glColor3fv(x)
+#define	T2F_F(x,y)	glTexCoord2f(x,y)
+#define	T2F_D(x,y)	glTexCoord2d(x,y)
+
+#define	POPMATRIX()	glPopMatrix()
+#define	PUSHMATRIX()	glPushMatrix()
+
+#define	MULTMATRIX_F(x)	glMultMatrixf ((const GLfloat *)x)
+#define	LOADMATRIX_F(x)	glLoadMatrixf ((const GLfloat *)x)
+
+#define	MULTMATRIX_D(x)	glMultMatrixd ((const GLdouble *)x)
+#define	LOADMATRIX_D(x)	glLoadMatrixd ((const GLdouble *)x)
+
+#define __IS_LIGHTING_ON  (glIsEnabled(GL_LIGHTING))
+
+/* ====================================================== */
+#ifdef AUTO_TEXTURE
+
+#define BGNTMESH(i,len) { 					\
+	if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))(i,len);\
+	glBegin (GL_TRIANGLE_STRIP); 			\
+}
+
+#define BGNPOLYGON() { 					\
+	if(_gle_gc -> bgn_gen_texture) (*(_gle_gc -> bgn_gen_texture))();\
+	glBegin (GL_POLYGON);				\
+}
+
+#define N3F_F(x) { 					\
+	if(_gle_gc -> n3f_gen_texture) (*(_gle_gc -> n3f_gen_texture))(x); \
+	glNormal3fv(x); 				\
+}
+
+#define N3F_D(x) { 					\
+	if(_gle_gc -> n3d_gen_texture) (*(_gle_gc -> n3d_gen_texture))(x); \
+	glNormal3dv(x); 				\
+}
+
+#define V3F_F(x,j,id) { 					\
+	if(_gle_gc -> v3f_gen_texture) (*(_gle_gc -> v3f_gen_texture))(x,j,id);\
+	glVertex3fv(x); 				\
+}
+
+#define V3F_D(x,j,id) { 					\
+	if(_gle_gc -> v3d_gen_texture) (*(_gle_gc -> v3d_gen_texture))(x,j,id); \
+	glVertex3dv(x); 				\
+}
+
+#define ENDTMESH() {					\
+	if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \
+	glEnd ();					\
+}
+
+#define ENDPOLYGON() {					\
+	if(_gle_gc -> end_gen_texture) (*(_gle_gc -> end_gen_texture))(); \
+	glEnd ();					\
+}
+
+/* ====================================================== */
+#else /* AUTO_TEXTURE */
+
+#define BGNTMESH(i,len)	glBegin (GL_TRIANGLE_STRIP);
+#define BGNPOLYGON() 	glBegin (GL_POLYGON);
+
+#define	N3F_F(x)	glNormal3fv(x)
+#define	N3F_D(x)	glNormal3dv(x)
+#define V3F_F(x,j,id)	glVertex3fv(x);
+#define V3F_D(x,j,id)	glVertex3dv(x);
+
+#define ENDTMESH()	glEnd ()
+#define ENDPOLYGON()	glEnd()
+
+#endif /* AUTO_TEXTURE */
+
+#endif /* OPENGL_10 */
+
+/* ====================================================== */
+
+
+#endif /* __GLE_PORT_H__ */
+/* ================== END OF FILE ======================= */

+ 98 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/rot.h

@@ -0,0 +1,98 @@
+
+/*
+ * rot.h
+ *
+ * FUNCTION:
+ * rotation matrix utilities
+ *
+ * HISTORY:
+ * Linas Vepstas Aug 1990
+ */
+
+/* ========================================================== */
+/* 
+ * The MACROS below generate and return more traditional rotation
+ * matrices -- matrices for rotations about principal axes.
+ */
+/* ========================================================== */
+
+#define ROTX_CS(m,cosine,sine)		\
+{					\
+   /* rotation about the x-axis */	\
+					\
+   m[0][0] = 1.0;			\
+   m[0][1] = 0.0;			\
+   m[0][2] = 0.0;			\
+   m[0][3] = 0.0;			\
+					\
+   m[1][0] = 0.0;			\
+   m[1][1] = (cosine);			\
+   m[1][2] = (sine);			\
+   m[1][3] = 0.0;			\
+					\
+   m[2][0] = 0.0;			\
+   m[2][1] = -(sine);			\
+   m[2][2] = (cosine);			\
+   m[2][3] = 0.0;			\
+					\
+   m[3][0] = 0.0;			\
+   m[3][1] = 0.0;			\
+   m[3][2] = 0.0;			\
+   m[3][3] = 1.0;			\
+}				
+
+/* ========================================================== */
+
+#define ROTY_CS(m,cosine,sine)		\
+{					\
+   /* rotation about the y-axis */	\
+					\
+   m[0][0] = (cosine);			\
+   m[0][1] = 0.0;			\
+   m[0][2] = -(sine);			\
+   m[0][3] = 0.0;			\
+					\
+   m[1][0] = 0.0;			\
+   m[1][1] = 1.0;			\
+   m[1][2] = 0.0;			\
+   m[1][3] = 0.0;			\
+					\
+   m[2][0] = (sine);			\
+   m[2][1] = 0.0;			\
+   m[2][2] = (cosine);			\
+   m[2][3] = 0.0;			\
+					\
+   m[3][0] = 0.0;			\
+   m[3][1] = 0.0;			\
+   m[3][2] = 0.0;			\
+   m[3][3] = 1.0;			\
+}
+
+/* ========================================================== */
+
+#define ROTZ_CS(m,cosine,sine)		\
+{					\
+   /* rotation about the z-axis */	\
+					\
+   m[0][0] = (cosine);			\
+   m[0][1] = (sine);			\
+   m[0][2] = 0.0;			\
+   m[0][3] = 0.0;			\
+					\
+   m[1][0] = -(sine);			\
+   m[1][1] = (cosine);			\
+   m[1][2] = 0.0;			\
+   m[1][3] = 0.0;			\
+					\
+   m[2][0] = 0.0;			\
+   m[2][1] = 0.0;			\
+   m[2][2] = 1.0;			\
+   m[2][3] = 0.0;			\
+					\
+   m[3][0] = 0.0;			\
+   m[3][1] = 0.0;			\
+   m[3][2] = 0.0;			\
+   m[3][3] = 1.0;			\
+}
+
+/* ========================================================== */

+ 98 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/segment.h

@@ -0,0 +1,98 @@
+
+/*
+ * MODULE: segment.h
+ *
+ * FUNCTION:
+ * Contains function prototypes for segment drawing subroutines.
+ * These are used only internally, and are not to be exported to
+ * the user.
+ *
+ * HISTORY:
+ * Create by Linas Vepstas
+ * Added tube.h include to define gleDouble, tad February 2002
+ */
+
+/* ============================================================ */
+
+#include "tube.h"
+
+extern void draw_segment_plain (int ncp,       /* number of contour points */
+                           gleDouble front_contour[][3],
+                           gleDouble back_contour[][3],
+                           int inext, double len);
+
+extern void draw_segment_color (int ncp,       /* number of contour points */
+                           gleDouble front_contour[][3],
+                           gleDouble back_contour[][3],
+                           float color_last[3],
+                           float color_next[3],
+                           int inext, double len);
+
+extern void draw_segment_edge_n (int ncp,      /* number of contour points */
+                           gleDouble front_contour[][3],
+                           gleDouble back_contour[][3],
+                           double norm_cont[][3],
+                           int inext, double len);
+
+extern void draw_segment_c_and_edge_n (int ncp,   
+                           gleDouble front_contour[][3],
+                           gleDouble back_contour[][3],
+                           double norm_cont[][3],
+                           float color_last[3],
+                           float color_next[3],
+                           int inext, double len);
+
+extern void draw_segment_facet_n (int ncp,     
+                           gleDouble front_contour[][3],
+                           gleDouble back_contour[][3],
+                           double norm_cont[][3],
+                           int inext, double len);
+
+extern void draw_segment_c_and_facet_n (int ncp,    
+                           gleDouble front_contour[][3],
+                           gleDouble back_contour[][3],
+                           double norm_cont[][3],
+                           float color_last[3],
+                           float color_next[3],
+                           int inext, double len);
+
+/* ============================================================ */
+
+extern void draw_binorm_segment_edge_n (int ncp,  
+                           double front_contour[][3],
+                           double back_contour[][3],
+                           double front_norm[][3],
+                           double back_norm[][3],
+                           int inext, double len);
+
+extern void draw_binorm_segment_c_and_edge_n (int ncp,   
+                           double front_contour[][3],
+                           double back_contour[][3],
+                           double front_norm[][3],
+                           double back_norm[][3],
+                           float color_last[3],
+                           float color_next[3],
+                           int inext, double len);
+
+extern void draw_binorm_segment_facet_n (int ncp, 
+                           double front_contour[][3],
+                           double back_contour[][3],
+                           double front_norm[][3],
+                           double back_norm[][3],
+                           int inext, double len);
+
+extern void draw_binorm_segment_c_and_facet_n (int ncp,    
+                           double front_contour[][3],
+                           double back_contour[][3],
+                           double front_norm[][3],
+                           double back_norm[][3],
+                           float color_last[3],
+                           float color_next[3],
+                           int inext, double len);
+
+extern void draw_angle_style_back_cap (int ncp,        /* number of contour points */
+                           gleDouble bi[3],             /* biscetor */
+                           gleDouble point_array[][3]);  /* polyline */
+
+/* -------------------------- end of file -------------------------------- */
+

+ 203 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube.h

@@ -0,0 +1,203 @@
+/* 
+ * tube.h
+ *
+ * FUNCTION:
+ * Tubing and Extrusion header file.
+ * This file provides protypes and defines for the extrusion 
+ * and tubing primitives.
+ *
+ * HISTORY:
+ * Linas Vepstas 1990, 1991
+ */
+
+#ifndef __TUBE_H__
+#define __TUBE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ GLE API revision history:
+ 
+ GLE_API_VERSION is updated to reflect GLE API changes (interface
+ changes, semantic changes, deletions, or additions).
+ 
+ GLE_API_VERSION=228  GLUT 3.7 release of GLE.
+**/
+#ifndef GLE_API_VERSION  /* allow this to be overriden */
+#define GLE_API_VERSION                228
+#endif
+
+/* some types */
+#ifndef gleDouble
+    #define gleDouble double
+#endif
+typedef gleDouble gleAffine[2][3];
+
+/* ====================================================== */
+
+/* defines for tubing join styles */
+#define TUBE_JN_RAW          0x1
+#define TUBE_JN_ANGLE        0x2
+#define TUBE_JN_CUT          0x3
+#define TUBE_JN_ROUND        0x4
+#define TUBE_JN_MASK         0xf    /* mask bits */
+#define TUBE_JN_CAP          0x10
+
+/* determine how normal vectors are to be handled */
+#define TUBE_NORM_FACET      0x100
+#define TUBE_NORM_EDGE       0x200
+#define TUBE_NORM_PATH_EDGE  0x400 /* for spiral, lathe, helix primitives */
+#define TUBE_NORM_MASK       0xf00    /* mask bits */
+
+/* closed or open countours */
+#define TUBE_CONTOUR_CLOSED	0x1000
+
+#define GLE_TEXTURE_ENABLE	0x10000
+#define GLE_TEXTURE_STYLE_MASK	0xff
+#define GLE_TEXTURE_VERTEX_FLAT		1
+#define GLE_TEXTURE_NORMAL_FLAT		2
+#define GLE_TEXTURE_VERTEX_CYL		3
+#define GLE_TEXTURE_NORMAL_CYL		4
+#define GLE_TEXTURE_VERTEX_SPH		5
+#define GLE_TEXTURE_NORMAL_SPH		6
+#define GLE_TEXTURE_VERTEX_MODEL_FLAT	7
+#define GLE_TEXTURE_NORMAL_MODEL_FLAT	8
+#define GLE_TEXTURE_VERTEX_MODEL_CYL	9
+#define GLE_TEXTURE_NORMAL_MODEL_CYL	10
+#define GLE_TEXTURE_VERTEX_MODEL_SPH	11
+#define GLE_TEXTURE_NORMAL_MODEL_SPH	12
+
+#ifdef GL_32
+/* HACK for GL 3.2 -- needed because no way to tell if lighting is on.  */
+#define TUBE_LIGHTING_ON	0x80000000
+
+#define gleExtrusion		extrusion
+#define gleSetJoinStyle		setjoinstyle
+#define gleGetJoinStyle		getjoinstyle
+#define glePolyCone		polycone
+#define glePolyCylinder		polycylinder
+#define	gleSuperExtrusion	super_extrusion
+#define	gleTwistExtrusion	twist_extrusion
+#define	gleSpiral		spiral
+#define	gleLathe		lathe
+#define	gleHelicoid		helicoid
+#define	gleToroid		toroid
+#define	gleScrew		screw
+
+#endif /* GL_32 */
+
+extern int gleGetJoinStyle (void);
+extern void gleSetJoinStyle (int style);	/* bitwise OR of flags */
+extern int gleGetNumSlices(void);
+extern void gleSetNumSlices(int slices);
+
+/* draw polyclinder, specified as a polyline */
+extern void glePolyCylinder (int npoints,	/* num points in polyline */
+                   gleDouble point_array[][3],	/* polyline vertces */
+                   float color_array[][3],	/* colors at polyline verts */
+                   gleDouble radius);		/* radius of polycylinder */
+
+/* draw polycone, specified as a polyline with radii */
+extern void glePolyCone (int npoints,	 /* numpoints in poly-line */
+                   gleDouble point_array[][3],	/* polyline vertices */
+                   float color_array[][3],	/* colors at polyline verts */
+                   gleDouble radius_array[]); /* cone radii at polyline verts */
+
+/* extrude arbitrary 2D contour along arbitrary 3D path */
+extern void gleExtrusion (int ncp,         /* number of contour points */
+                gleDouble contour[][2],     /* 2D contour */
+                gleDouble cont_normal[][2], /* 2D contour normals */
+                gleDouble up[3],            /* up vector for contour */
+                int npoints,            /* numpoints in poly-line */
+                gleDouble point_array[][3], /* polyline vertices */
+                float color_array[][3]); /* colors at polyline verts */
+
+/* extrude 2D contour, specifying local rotations (twists) */
+extern void gleTwistExtrusion (int ncp,         /* number of contour points */
+                gleDouble contour[][2],    /* 2D contour */
+                gleDouble cont_normal[][2], /* 2D contour normals */
+                gleDouble up[3],           /* up vector for contour */
+                int npoints,           /* numpoints in poly-line */
+                gleDouble point_array[][3],        /* polyline vertices */
+                float color_array[][3],        /* color at polyline verts */
+                gleDouble twist_array[]);   /* countour twists (in degrees) */
+
+/* extrude 2D contour, specifying local affine tranformations */
+extern void gleSuperExtrusion (int ncp,  /* number of contour points */
+                gleDouble contour[][2],    /* 2D contour */
+                gleDouble cont_normal[][2], /* 2D contour normals */
+                gleDouble up[3],           /* up vector for contour */
+                int npoints,           /* numpoints in poly-line */
+                gleDouble point_array[][3],        /* polyline vertices */
+                float color_array[][3],        /* color at polyline verts */
+                gleDouble xform_array[][2][3]);   /* 2D contour xforms */
+
+/* spiral moves contour along helical path by parallel transport */
+extern void gleSpiral (int ncp,        /* number of contour points */
+             gleDouble contour[][2],    /* 2D contour */
+             gleDouble cont_normal[][2], /* 2D contour normals */
+             gleDouble up[3],           /* up vector for contour */
+             gleDouble startRadius,	/* spiral starts in x-y plane */
+             gleDouble drdTheta,        /* change in radius per revolution */
+             gleDouble startZ,		/* starting z value */
+             gleDouble dzdTheta,        /* change in Z per revolution */
+             gleDouble startXform[2][3], /* starting contour affine xform */
+             gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */
+             gleDouble startTheta,	/* start angle in x-y plane */
+             gleDouble sweepTheta);	/* degrees to spiral around */
+
+/* lathe moves contour along helical path by helically shearing 3D space */
+extern void gleLathe (int ncp,        /* number of contour points */
+             gleDouble contour[][2],    /* 2D contour */
+             gleDouble cont_normal[][2], /* 2D contour normals */
+             gleDouble up[3],           /* up vector for contour */
+             gleDouble startRadius,	/* spiral starts in x-y plane */
+             gleDouble drdTheta,        /* change in radius per revolution */
+             gleDouble startZ,		/* starting z value */
+             gleDouble dzdTheta,        /* change in Z per revolution */
+             gleDouble startXform[2][3], /* starting contour affine xform */
+             gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */
+             gleDouble startTheta,	/* start angle in x-y plane */
+             gleDouble sweepTheta);	/* degrees to spiral around */
+
+/* similar to spiral, except contour is a circle */
+extern void gleHelicoid (gleDouble rToroid, /* circle contour (torus) radius */
+             gleDouble startRadius,	/* spiral starts in x-y plane */
+             gleDouble drdTheta,        /* change in radius per revolution */
+             gleDouble startZ,		/* starting z value */
+             gleDouble dzdTheta,        /* change in Z per revolution */
+             gleDouble startXform[2][3], /* starting contour affine xform */
+             gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */
+             gleDouble startTheta,	/* start angle in x-y plane */
+             gleDouble sweepTheta);	/* degrees to spiral around */
+
+/* similar to lathe, except contour is a circle */
+extern void gleToroid (gleDouble rToroid, /* circle contour (torus) radius */
+             gleDouble startRadius,	/* spiral starts in x-y plane */
+             gleDouble drdTheta,        /* change in radius per revolution */
+             gleDouble startZ,		/* starting z value */
+             gleDouble dzdTheta,        /* change in Z per revolution */
+             gleDouble startXform[2][3], /* starting contour affine xform */
+             gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */
+             gleDouble startTheta,	/* start angle in x-y plane */
+             gleDouble sweepTheta);	/* degrees to spiral around */
+
+/* draws a screw shape */
+extern void gleScrew (int ncp,          /* number of contour points */
+             gleDouble contour[][2],    /* 2D contour */
+             gleDouble cont_normal[][2], /* 2D contour normals */
+             gleDouble up[3],           /* up vector for contour */
+             gleDouble startz,          /* start of segment */
+             gleDouble endz,            /* end of segment */
+             gleDouble twist);          /* number of rotations */
+
+extern void gleTextureMode (int mode);
+
+#ifdef __cplusplus
+}
+
+#endif
+#endif /* __TUBE_H__ */
+/* ================== END OF FILE ======================= */

+ 78 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/tube_gc.h

@@ -0,0 +1,78 @@
+
+/*
+ * tube_gc.h
+ *
+ * FUNCTION:
+ * This file allows for easy changes to changes in the way the extrusion
+ * library handles state info (i.e. context).
+ *
+ * HISTORY:
+ * Linas Vepstas --- February 1993
+ * Added auto texture coord generation hacks, Linas April 1994
+ * Added tube.h include to define gleDouble, tad February 2002
+ */
+
+#include "tube.h"
+#include "port.h" /* for gleVector */
+
+typedef float gleColor[3];
+typedef double gleTwoVec[2];
+
+typedef struct {
+
+   /* public methods */
+   void (*bgn_gen_texture) (int, double);
+   void (*n3f_gen_texture) (float *);
+   void (*n3d_gen_texture) (double *);
+   void (*v3f_gen_texture) (float *, int, int);
+   void (*v3d_gen_texture) (double *, int, int);
+   void (*end_gen_texture) (void);
+
+   /* protected members -- "general knowledge" stuff */
+   int join_style;
+
+   /* arguments passed into extrusion code */ 
+   int ncp;     /* number of contour points */
+   gleTwoVec *contour;    /* 2D contour */
+   gleTwoVec *cont_normal;  /* 2D contour normals */
+   gleDouble *up;               /* up vector */
+   int npoints;  /* number of points in polyline */
+   gleVector *point_array;     /* path */
+   gleColor *color_array;         /* path colors */
+   gleAffine *xform_array;  /* contour xforms */
+
+   /* private members, used by texturing code */
+   int num_vert;
+   int segment_number;
+   double segment_length;
+   double accum_seg_len;
+   double prev_x;
+   double prev_y;
+
+   void (*save_bgn_gen_texture) (int, double);
+   void (*save_n3f_gen_texture) (float *);
+   void (*save_n3d_gen_texture) (double *);
+   void (*save_v3f_gen_texture) (float *, int, int);
+   void (*save_v3d_gen_texture) (double *, int, int);
+   void (*save_end_gen_texture) (void);
+
+} gleGC;
+
+extern gleGC *_gle_gc;
+extern gleGC * gleCreateGC (void);
+
+#define INIT_GC() {if (!_gle_gc) _gle_gc = gleCreateGC(); }
+#define extrusion_join_style (_gle_gc->join_style)
+
+#define __TUBE_CLOSE_CONTOUR (extrusion_join_style & TUBE_CONTOUR_CLOSED)
+#define __TUBE_DRAW_CAP (extrusion_join_style & TUBE_JN_CAP)
+#define __TUBE_DRAW_FACET_NORMALS (extrusion_join_style & TUBE_NORM_FACET)
+#define __TUBE_DRAW_PATH_EDGE_NORMALS (extrusion_join_style & TUBE_NORM_PATH_EDGE)
+
+#define __TUBE_STYLE (extrusion_join_style & TUBE_JN_MASK)
+#define __TUBE_RAW_JOIN (extrusion_join_style & TUBE_JN_RAW)
+#define __TUBE_CUT_JOIN (extrusion_join_style & TUBE_JN_CUT)
+#define __TUBE_ANGLE_JOIN (extrusion_join_style & TUBE_JN_ANGLE)
+#define __TUBE_ROUND_JOIN (extrusion_join_style & TUBE_JN_ROUND)
+
+/* ======================= END OF FILE ========================== */

+ 1339 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Headers/vvector.h

@@ -0,0 +1,1339 @@
+
+/*
+ * vvector.h
+ *
+ * FUNCTION:
+ * This file contains a number of utilities useful for handling
+ * 3D vectors
+ * 
+ * HISTORY:
+ * Written by Linas Vepstas, August 1991
+ * Added 2D code, March 1993
+ * Added Outer products, C++ proofed, Linas Vepstas October 1993
+ */
+
+#ifndef __GUTIL_VECTOR_H__
+#define __GUTIL_VECTOR_H__
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+
+#include <math.h>
+#include "port.h"
+
+/* ========================================================== */
+/* Zero out a 2D vector */
+
+#define VEC_ZERO_2(a)				\
+{						\
+   (a)[0] = (a)[1] = 0.0;			\
+}
+
+/* ========================================================== */
+/* Zero out a 3D vector */
+
+#define VEC_ZERO(a)				\
+{						\
+   (a)[0] = (a)[1] = (a)[2] = 0.0;		\
+}
+
+/* ========================================================== */
+/* Zero out a 4D vector */
+
+#define VEC_ZERO_4(a)				\
+{						\
+   (a)[0] = (a)[1] = (a)[2] = (a)[3] = 0.0;	\
+}
+
+/* ========================================================== */
+/* Vector copy */
+
+#define VEC_COPY_2(b,a)				\
+{						\
+   (b)[0] = (a)[0];				\
+   (b)[1] = (a)[1];				\
+}
+
+/* ========================================================== */
+/* Copy 3D vector */
+
+#define VEC_COPY(b,a)				\
+{						\
+   (b)[0] = (a)[0];				\
+   (b)[1] = (a)[1];				\
+   (b)[2] = (a)[2];				\
+}
+
+/* ========================================================== */
+/* Copy 4D vector */
+
+#define VEC_COPY_4(b,a)				\
+{						\
+   (b)[0] = (a)[0];				\
+   (b)[1] = (a)[1];				\
+   (b)[2] = (a)[2];				\
+   (b)[3] = (a)[3];				\
+}
+
+/* ========================================================== */
+/* Vector difference */
+
+#define VEC_DIFF_2(v21,v2,v1)			\
+{						\
+   (v21)[0] = (v2)[0] - (v1)[0];		\
+   (v21)[1] = (v2)[1] - (v1)[1];		\
+}
+
+/* ========================================================== */
+/* Vector difference */
+
+#define VEC_DIFF(v21,v2,v1)			\
+{						\
+   (v21)[0] = (v2)[0] - (v1)[0];		\
+   (v21)[1] = (v2)[1] - (v1)[1];		\
+   (v21)[2] = (v2)[2] - (v1)[2];		\
+}
+
+/* ========================================================== */
+/* Vector difference */
+
+#define VEC_DIFF_4(v21,v2,v1)			\
+{						\
+   (v21)[0] = (v2)[0] - (v1)[0];		\
+   (v21)[1] = (v2)[1] - (v1)[1];		\
+   (v21)[2] = (v2)[2] - (v1)[2];		\
+   (v21)[3] = (v2)[3] - (v1)[3];		\
+}
+
+/* ========================================================== */
+/* Vector sum */
+
+#define VEC_SUM_2(v21,v2,v1)			\
+{						\
+   (v21)[0] = (v2)[0] + (v1)[0];		\
+   (v21)[1] = (v2)[1] + (v1)[1];		\
+}
+
+/* ========================================================== */
+/* Vector sum */
+
+#define VEC_SUM(v21,v2,v1)			\
+{						\
+   (v21)[0] = (v2)[0] + (v1)[0];		\
+   (v21)[1] = (v2)[1] + (v1)[1];		\
+   (v21)[2] = (v2)[2] + (v1)[2];		\
+}
+
+/* ========================================================== */
+/* Vector sum */
+
+#define VEC_SUM_4(v21,v2,v1)			\
+{						\
+   (v21)[0] = (v2)[0] + (v1)[0];		\
+   (v21)[1] = (v2)[1] + (v1)[1];		\
+   (v21)[2] = (v2)[2] + (v1)[2];		\
+   (v21)[3] = (v2)[3] + (v1)[3];		\
+}
+
+/* ========================================================== */
+/* scalar times vector */
+
+#define VEC_SCALE_2(c,a,b)			\
+{						\
+   (c)[0] = (a)*(b)[0];				\
+   (c)[1] = (a)*(b)[1];				\
+}
+
+/* ========================================================== */
+/* scalar times vector */
+
+#define VEC_SCALE(c,a,b)			\
+{						\
+   (c)[0] = (a)*(b)[0];				\
+   (c)[1] = (a)*(b)[1];				\
+   (c)[2] = (a)*(b)[2];				\
+}
+
+/* ========================================================== */
+/* scalar times vector */
+
+#define VEC_SCALE_4(c,a,b)			\
+{						\
+   (c)[0] = (a)*(b)[0];				\
+   (c)[1] = (a)*(b)[1];				\
+   (c)[2] = (a)*(b)[2];				\
+   (c)[3] = (a)*(b)[3];				\
+}
+
+/* ========================================================== */
+/* accumulate scaled vector */
+
+#define VEC_ACCUM_2(c,a,b)			\
+{						\
+   (c)[0] += (a)*(b)[0];			\
+   (c)[1] += (a)*(b)[1];			\
+}
+
+/* ========================================================== */
+/* accumulate scaled vector */
+
+#define VEC_ACCUM(c,a,b)			\
+{						\
+   (c)[0] += (a)*(b)[0];			\
+   (c)[1] += (a)*(b)[1];			\
+   (c)[2] += (a)*(b)[2];			\
+}
+
+/* ========================================================== */
+/* accumulate scaled vector */
+
+#define VEC_ACCUM_4(c,a,b)			\
+{						\
+   (c)[0] += (a)*(b)[0];			\
+   (c)[1] += (a)*(b)[1];			\
+   (c)[2] += (a)*(b)[2];			\
+   (c)[3] += (a)*(b)[3];			\
+}
+
+/* ========================================================== */
+/* Vector dot product */
+
+#define VEC_DOT_PRODUCT_2(c,a,b)			\
+{							\
+   c = (a)[0]*(b)[0] + (a)[1]*(b)[1];			\
+}
+
+/* ========================================================== */
+/* Vector dot product */
+
+#define VEC_DOT_PRODUCT(c,a,b)				\
+{							\
+   c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2];	\
+}
+
+/* ========================================================== */
+/* Vector dot product */
+
+#define VEC_DOT_PRODUCT_4(c,a,b)			\
+{							\
+   c = (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] + (a)[3]*(b)[3] ;	\
+}
+
+/* ========================================================== */
+/* vector impact parameter (squared) */
+
+#define VEC_IMPACT_SQ(bsq,direction,position)		\
+{							\
+   gleDouble vlen, llel;					\
+   VEC_DOT_PRODUCT (vlen, position, position);		\
+   VEC_DOT_PRODUCT (llel, direction, position);		\
+   bsq = vlen - llel*llel;				\
+}
+
+/* ========================================================== */
+/* vector impact parameter */
+
+#define VEC_IMPACT(bsq,direction,position)		\
+{							\
+   VEC_IMPACT_SQ(bsq,direction,position);		\
+   bsq = sqrt (bsq);					\
+}
+
+/* ========================================================== */
+/* Vector length */
+
+#define VEC_LENGTH_2(vlen,a)			\
+{						\
+   vlen = a[0]*a[0] + a[1]*a[1];			\
+   vlen = sqrt (vlen);				\
+}
+
+/* ========================================================== */
+/* Vector length */
+
+#define VEC_LENGTH(vlen,a)			\
+{						\
+   vlen = (a)[0]*(a)[0] + (a)[1]*(a)[1];		\
+   vlen += (a)[2]*(a)[2];			\
+   vlen = sqrt (vlen);				\
+}
+
+/* ========================================================== */
+/* Vector length */
+
+#define VEC_LENGTH_4(vlen,a)			\
+{						\
+   vlen = (a)[0]*(a)[0] + (a)[1]*(a)[1];		\
+   vlen += (a)[2]*(a)[2];			\
+   vlen += (a)[3] * (a)[3];			\
+   vlen = sqrt (vlen);				\
+}
+
+/* ========================================================== */
+/* distance between two points */
+
+#define VEC_DISTANCE(vlen,va,vb)			\
+{						\
+    gleDouble tmp[4];				\
+    VEC_DIFF (tmp, vb, va);			\
+    VEC_LENGTH (vlen, tmp);			\
+}
+
+/* ========================================================== */
+/* Vector length */
+
+#define VEC_CONJUGATE_LENGTH(vlen,a)		\
+{						\
+   vlen = 1.0 - a[0]*a[0] - a[1]*a[1] - a[2]*a[2];\
+   vlen = sqrt (vlen);				\
+}
+
+/* ========================================================== */
+/* Vector length */
+
+#define VEC_NORMALIZE(a)			\
+{						\
+   double vlen;					\
+   VEC_LENGTH (vlen,a);				\
+   if (vlen != 0.0) {				\
+      vlen = 1.0 / vlen;				\
+      a[0] *= vlen;				\
+      a[1] *= vlen;				\
+      a[2] *= vlen;				\
+   }						\
+}
+
+/* ========================================================== */
+/* Vector length */
+
+#define VEC_RENORMALIZE(a,newlen)		\
+{						\
+   double vlen;					\
+   VEC_LENGTH (vlen,a);				\
+   if (vlen != 0.0) {				\
+      vlen = newlen / vlen;				\
+      a[0] *= vlen;				\
+      a[1] *= vlen;				\
+      a[2] *= vlen;				\
+   }						\
+}
+
+/* ========================================================== */
+/* 3D Vector cross product yeilding vector */
+
+#define VEC_CROSS_PRODUCT(c,a,b)		\
+{						\
+   c[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1];	\
+   c[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2];	\
+   c[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0];	\
+}
+
+/* ========================================================== */
+/* Vector perp -- assumes that n is of unit length 
+ * accepts vector v, subtracts out any component parallel to n */
+
+#define VEC_PERP(vp,v,n)			\
+{						\
+   double vdot;					\
+						\
+   VEC_DOT_PRODUCT (vdot, v, n);			\
+   vp[0] = (v)[0] - (vdot) * (n)[0];		\
+   vp[1] = (v)[1] - (vdot) * (n)[1];		\
+   vp[2] = (v)[2] - (vdot) * (n)[2];		\
+}
+
+/* ========================================================== */
+/* Vector parallel -- assumes that n is of unit length 
+ * accepts vector v, subtracts out any component perpendicular to n */
+
+#define VEC_PARALLEL(vp,v,n)			\
+{						\
+   double vdot;					\
+						\
+   VEC_DOT_PRODUCT (vdot, v, n);			\
+   vp[0] = (vdot) * (n)[0];			\
+   vp[1] = (vdot) * (n)[1];			\
+   vp[2] = (vdot) * (n)[2];			\
+}
+
+/* ========================================================== */
+/* Vector reflection -- assumes n is of unit length */
+/* Takes vector v, reflects it against reflector n, and returns vr */
+
+#define VEC_REFLECT(vr,v,n)			\
+{						\
+   double vdot;					\
+						\
+   VEC_DOT_PRODUCT (vdot, v, n);			\
+   vr[0] = (v)[0] - 2.0 * (vdot) * (n)[0];	\
+   vr[1] = (v)[1] - 2.0 * (vdot) * (n)[1];	\
+   vr[2] = (v)[2] - 2.0 * (vdot) * (n)[2];	\
+}
+
+/* ========================================================== */
+/* Vector blending */
+/* Takes two vectors a, b, blends them together */ 
+
+#define VEC_BLEND(vr,sa,a,sb,b)			\
+{						\
+						\
+   vr[0] = (sa) * (a)[0] + (sb) * (b)[0];	\
+   vr[1] = (sa) * (a)[1] + (sb) * (b)[1];	\
+   vr[2] = (sa) * (a)[2] + (sb) * (b)[2];	\
+}
+
+/* ========================================================== */
+/* Vector print */
+
+#define VEC_PRINT_2(a)					\
+{							\
+   double vlen;						\
+   VEC_LENGTH_2 (vlen, a);					\
+   printf (" a is %f %f length of a is %f \n", a[0], a[1], vlen); \
+}
+
+/* ========================================================== */
+/* Vector print */
+
+#define VEC_PRINT(a)					\
+{							\
+   double vlen;						\
+   VEC_LENGTH (vlen, (a));				\
+   printf (" a is %f %f %f length of a is %f \n", (a)[0], (a)[1], (a)[2], vlen); \
+}
+
+/* ========================================================== */
+/* Vector print */
+
+#define VEC_PRINT_4(a)					\
+{							\
+   double vlen;						\
+   VEC_LENGTH_4 (vlen, (a));				\
+   printf (" a is %f %f %f %f length of a is %f \n",	\
+       (a)[0], (a)[1], (a)[2], (a)[3], vlen);		\
+}
+
+/* ========================================================== */
+/* print matrix */
+
+#define MAT_PRINT_4X4(mmm) {				\
+   int i,j;						\
+   printf ("matrix mmm is \n");				\
+   if (mmm == NULL) {					\
+      printf (" Null \n");				\
+   } else {						\
+      for (i=0; i<4; i++) {				\
+         for (j=0; j<4; j++) {				\
+            printf ("%f ", mmm[i][j]);			\
+         }						\
+         printf (" \n");				\
+      }							\
+   }							\
+}
+
+/* ========================================================== */
+/* print matrix */
+
+#define MAT_PRINT_3X3(mmm) {				\
+   int i,j;						\
+   printf ("matrix mmm is \n");				\
+   if (mmm == NULL) {					\
+      printf (" Null \n");				\
+   } else {						\
+      for (i=0; i<3; i++) {				\
+         for (j=0; j<3; j++) {				\
+            printf ("%f ", mmm[i][j]);			\
+         }						\
+         printf (" \n");				\
+      }							\
+   }							\
+}
+
+/* ========================================================== */
+/* print matrix */
+
+#define MAT_PRINT_2X3(mmm) {				\
+   int i,j;						\
+   printf ("matrix mmm is \n");				\
+   if (mmm == NULL) {					\
+      printf (" Null \n");				\
+   } else {						\
+      for (i=0; i<2; i++) {				\
+         for (j=0; j<3; j++) {				\
+            printf ("%f ", mmm[i][j]);			\
+         }						\
+         printf (" \n");				\
+      }							\
+   }							\
+}
+
+/* ========================================================== */
+/* initialize matrix */
+
+#define IDENTIFY_MATRIX_3X3(m)			\
+{						\
+   m[0][0] = 1.0;				\
+   m[0][1] = 0.0;				\
+   m[0][2] = 0.0;				\
+						\
+   m[1][0] = 0.0;				\
+   m[1][1] = 1.0;				\
+   m[1][2] = 0.0;				\
+						\
+   m[2][0] = 0.0;				\
+   m[2][1] = 0.0;				\
+   m[2][2] = 1.0;				\
+}
+
+/* ========================================================== */
+/* initialize matrix */
+
+#define IDENTIFY_MATRIX_4X4(m)			\
+{						\
+   m[0][0] = 1.0;				\
+   m[0][1] = 0.0;				\
+   m[0][2] = 0.0;				\
+   m[0][3] = 0.0;				\
+						\
+   m[1][0] = 0.0;				\
+   m[1][1] = 1.0;				\
+   m[1][2] = 0.0;				\
+   m[1][3] = 0.0;				\
+						\
+   m[2][0] = 0.0;				\
+   m[2][1] = 0.0;				\
+   m[2][2] = 1.0;				\
+   m[2][3] = 0.0;				\
+						\
+   m[3][0] = 0.0;				\
+   m[3][1] = 0.0;				\
+   m[3][2] = 0.0;				\
+   m[3][3] = 1.0;				\
+}
+
+/* ========================================================== */
+/* matrix copy */
+
+#define COPY_MATRIX_2X2(b,a)	\
+{				\
+   b[0][0] = a[0][0];		\
+   b[0][1] = a[0][1];		\
+				\
+   b[1][0] = a[1][0];		\
+   b[1][1] = a[1][1];		\
+				\
+}
+
+/* ========================================================== */
+/* matrix copy */
+
+#define COPY_MATRIX_2X3(b,a)	\
+{				\
+   b[0][0] = a[0][0];		\
+   b[0][1] = a[0][1];		\
+   b[0][2] = a[0][2];		\
+				\
+   b[1][0] = a[1][0];		\
+   b[1][1] = a[1][1];		\
+   b[1][2] = a[1][2];		\
+}
+
+/* ========================================================== */
+/* matrix copy */
+
+#define COPY_MATRIX_3X3(b,a)	\
+{				\
+   b[0][0] = a[0][0];		\
+   b[0][1] = a[0][1];		\
+   b[0][2] = a[0][2];		\
+				\
+   b[1][0] = a[1][0];		\
+   b[1][1] = a[1][1];		\
+   b[1][2] = a[1][2];		\
+				\
+   b[2][0] = a[2][0];		\
+   b[2][1] = a[2][1];		\
+   b[2][2] = a[2][2];		\
+}
+
+/* ========================================================== */
+/* matrix copy */
+
+#define COPY_MATRIX_4X4(b,a)	\
+{				\
+   b[0][0] = a[0][0];		\
+   b[0][1] = a[0][1];		\
+   b[0][2] = a[0][2];		\
+   b[0][3] = a[0][3];		\
+				\
+   b[1][0] = a[1][0];		\
+   b[1][1] = a[1][1];		\
+   b[1][2] = a[1][2];		\
+   b[1][3] = a[1][3];		\
+				\
+   b[2][0] = a[2][0];		\
+   b[2][1] = a[2][1];		\
+   b[2][2] = a[2][2];		\
+   b[2][3] = a[2][3];		\
+				\
+   b[3][0] = a[3][0];		\
+   b[3][1] = a[3][1];		\
+   b[3][2] = a[3][2];		\
+   b[3][3] = a[3][3];		\
+}
+
+/* ========================================================== */
+/* matrix transpose */
+
+#define TRANSPOSE_MATRIX_2X2(b,a)	\
+{				\
+   b[0][0] = a[0][0];		\
+   b[0][1] = a[1][0];		\
+				\
+   b[1][0] = a[0][1];		\
+   b[1][1] = a[1][1];		\
+}
+
+/* ========================================================== */
+/* matrix transpose */
+
+#define TRANSPOSE_MATRIX_3X3(b,a)	\
+{				\
+   b[0][0] = a[0][0];		\
+   b[0][1] = a[1][0];		\
+   b[0][2] = a[2][0];		\
+				\
+   b[1][0] = a[0][1];		\
+   b[1][1] = a[1][1];		\
+   b[1][2] = a[2][1];		\
+				\
+   b[2][0] = a[0][2];		\
+   b[2][1] = a[1][2];		\
+   b[2][2] = a[2][2];		\
+}
+
+/* ========================================================== */
+/* matrix transpose */
+
+#define TRANSPOSE_MATRIX_4X4(b,a)	\
+{				\
+   b[0][0] = a[0][0];		\
+   b[0][1] = a[1][0];		\
+   b[0][2] = a[2][0];		\
+   b[0][3] = a[3][0];		\
+				\
+   b[1][0] = a[0][1];		\
+   b[1][1] = a[1][1];		\
+   b[1][2] = a[2][1];		\
+   b[1][3] = a[3][1];		\
+				\
+   b[2][0] = a[0][2];		\
+   b[2][1] = a[1][2];		\
+   b[2][2] = a[2][2];		\
+   b[2][3] = a[3][2];		\
+				\
+   b[3][0] = a[0][3];		\
+   b[3][1] = a[1][3];		\
+   b[3][2] = a[2][3];		\
+   b[3][3] = a[3][3];		\
+}
+
+/* ========================================================== */
+/* multiply matrix by scalar */
+
+#define SCALE_MATRIX_2X2(b,s,a)		\
+{					\
+   b[0][0] = (s) * a[0][0];		\
+   b[0][1] = (s) * a[0][1];		\
+					\
+   b[1][0] = (s) * a[1][0];		\
+   b[1][1] = (s) * a[1][1];		\
+}
+
+/* ========================================================== */
+/* multiply matrix by scalar */
+
+#define SCALE_MATRIX_3X3(b,s,a)		\
+{					\
+   b[0][0] = (s) * a[0][0];		\
+   b[0][1] = (s) * a[0][1];		\
+   b[0][2] = (s) * a[0][2];		\
+					\
+   b[1][0] = (s) * a[1][0];		\
+   b[1][1] = (s) * a[1][1];		\
+   b[1][2] = (s) * a[1][2];		\
+					\
+   b[2][0] = (s) * a[2][0];		\
+   b[2][1] = (s) * a[2][1];		\
+   b[2][2] = (s) * a[2][2];		\
+}
+
+/* ========================================================== */
+/* multiply matrix by scalar */
+
+#define SCALE_MATRIX_4X4(b,s,a)		\
+{					\
+   b[0][0] = (s) * a[0][0];		\
+   b[0][1] = (s) * a[0][1];		\
+   b[0][2] = (s) * a[0][2];		\
+   b[0][3] = (s) * a[0][3];		\
+					\
+   b[1][0] = (s) * a[1][0];		\
+   b[1][1] = (s) * a[1][1];		\
+   b[1][2] = (s) * a[1][2];		\
+   b[1][3] = (s) * a[1][3];		\
+					\
+   b[2][0] = (s) * a[2][0];		\
+   b[2][1] = (s) * a[2][1];		\
+   b[2][2] = (s) * a[2][2];		\
+   b[2][3] = (s) * a[2][3];		\
+					\
+   b[3][0] = s * a[3][0];		\
+   b[3][1] = s * a[3][1];		\
+   b[3][2] = s * a[3][2];		\
+   b[3][3] = s * a[3][3];		\
+}
+
+/* ========================================================== */
+/* multiply matrix by scalar */
+
+#define ACCUM_SCALE_MATRIX_2X2(b,s,a)		\
+{					\
+   b[0][0] += (s) * a[0][0];		\
+   b[0][1] += (s) * a[0][1];		\
+					\
+   b[1][0] += (s) * a[1][0];		\
+   b[1][1] += (s) * a[1][1];		\
+}
+
+/* +========================================================== */
+/* multiply matrix by scalar */
+
+#define ACCUM_SCALE_MATRIX_3X3(b,s,a)		\
+{					\
+   b[0][0] += (s) * a[0][0];		\
+   b[0][1] += (s) * a[0][1];		\
+   b[0][2] += (s) * a[0][2];		\
+					\
+   b[1][0] += (s) * a[1][0];		\
+   b[1][1] += (s) * a[1][1];		\
+   b[1][2] += (s) * a[1][2];		\
+					\
+   b[2][0] += (s) * a[2][0];		\
+   b[2][1] += (s) * a[2][1];		\
+   b[2][2] += (s) * a[2][2];		\
+}
+
+/* +========================================================== */
+/* multiply matrix by scalar */
+
+#define ACCUM_SCALE_MATRIX_4X4(b,s,a)		\
+{					\
+   b[0][0] += (s) * a[0][0];		\
+   b[0][1] += (s) * a[0][1];		\
+   b[0][2] += (s) * a[0][2];		\
+   b[0][3] += (s) * a[0][3];		\
+					\
+   b[1][0] += (s) * a[1][0];		\
+   b[1][1] += (s) * a[1][1];		\
+   b[1][2] += (s) * a[1][2];		\
+   b[1][3] += (s) * a[1][3];		\
+					\
+   b[2][0] += (s) * a[2][0];		\
+   b[2][1] += (s) * a[2][1];		\
+   b[2][2] += (s) * a[2][2];		\
+   b[2][3] += (s) * a[2][3];		\
+					\
+   b[3][0] += (s) * a[3][0];		\
+   b[3][1] += (s) * a[3][1];		\
+   b[3][2] += (s) * a[3][2];		\
+   b[3][3] += (s) * a[3][3];		\
+}
+
+/* +========================================================== */
+/* matrix product */
+/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/
+
+#define MATRIX_PRODUCT_2X2(c,a,b)		\
+{						\
+   c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0];	\
+   c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1];	\
+						\
+   c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0];	\
+   c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1];	\
+						\
+}
+
+/* ========================================================== */
+/* matrix product */
+/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/
+
+#define MATRIX_PRODUCT_3X3(c,a,b)				\
+{								\
+   c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0];	\
+   c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1];	\
+   c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2];	\
+								\
+   c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0];	\
+   c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1];	\
+   c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2];	\
+								\
+   c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0];	\
+   c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1];	\
+   c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2];	\
+}
+
+/* ========================================================== */
+/* matrix product */
+/* c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/
+
+#define MATRIX_PRODUCT_4X4(c,a,b)		\
+{						\
+   c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]+a[0][3]*b[3][0];\
+   c[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]+a[0][3]*b[3][1];\
+   c[0][2] = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]+a[0][3]*b[3][2];\
+   c[0][3] = a[0][0]*b[0][3]+a[0][1]*b[1][3]+a[0][2]*b[2][3]+a[0][3]*b[3][3];\
+						\
+   c[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]+a[1][3]*b[3][0];\
+   c[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1];\
+   c[1][2] = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2];\
+   c[1][3] = a[1][0]*b[0][3]+a[1][1]*b[1][3]+a[1][2]*b[2][3]+a[1][3]*b[3][3];\
+						\
+   c[2][0] = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]+a[2][3]*b[3][0];\
+   c[2][1] = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]+a[2][3]*b[3][1];\
+   c[2][2] = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]+a[2][3]*b[3][2];\
+   c[2][3] = a[2][0]*b[0][3]+a[2][1]*b[1][3]+a[2][2]*b[2][3]+a[2][3]*b[3][3];\
+						\
+   c[3][0] = a[3][0]*b[0][0]+a[3][1]*b[1][0]+a[3][2]*b[2][0]+a[3][3]*b[3][0];\
+   c[3][1] = a[3][0]*b[0][1]+a[3][1]*b[1][1]+a[3][2]*b[2][1]+a[3][3]*b[3][1];\
+   c[3][2] = a[3][0]*b[0][2]+a[3][1]*b[1][2]+a[3][2]*b[2][2]+a[3][3]*b[3][2];\
+   c[3][3] = a[3][0]*b[0][3]+a[3][1]*b[1][3]+a[3][2]*b[2][3]+a[3][3]*b[3][3];\
+}
+
+/* ========================================================== */
+/* matrix times vector */
+
+#define MAT_DOT_VEC_2X2(p,m,v)					\
+{								\
+   p[0] = m[0][0]*v[0] + m[0][1]*v[1];				\
+   p[1] = m[1][0]*v[0] + m[1][1]*v[1];				\
+}
+
+/* ========================================================== */
+/* matrix times vector */
+
+#define MAT_DOT_VEC_3X3(p,m,v)					\
+{								\
+   p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2];		\
+   p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2];		\
+   p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2];		\
+}
+
+/* ========================================================== */
+/* matrix times vector */
+
+#define MAT_DOT_VEC_4X4(p,m,v)					\
+{								\
+   p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2] + m[0][3]*v[3];	\
+   p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2] + m[1][3]*v[3];	\
+   p[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2] + m[2][3]*v[3];	\
+   p[3] = m[3][0]*v[0] + m[3][1]*v[1] + m[3][2]*v[2] + m[3][3]*v[3];	\
+}
+
+/* ========================================================== */
+/* vector transpose times matrix */
+/* p[j] = v[0]*m[0][j] + v[1]*m[1][j] + v[2]*m[2][j]; */
+
+#define VEC_DOT_MAT_3X3(p,v,m)					\
+{								\
+   p[0] = v[0]*m[0][0] + v[1]*m[1][0] + v[2]*m[2][0];		\
+   p[1] = v[0]*m[0][1] + v[1]*m[1][1] + v[2]*m[2][1];		\
+   p[2] = v[0]*m[0][2] + v[1]*m[1][2] + v[2]*m[2][2];		\
+}
+
+/* ========================================================== */
+/* affine matrix times vector */
+/* The matrix is assumed to be an affine matrix, with last two 
+ * entries representing a translation */
+
+#define MAT_DOT_VEC_2X3(p,m,v)					\
+{								\
+   p[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2];		\
+   p[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2];		\
+}
+
+/* ========================================================== */
+/* inverse transpose of matrix times vector
+ *
+ * This macro computes inverse transpose of matrix m, 
+ * and multiplies vector v into it, to yeild vector p
+ *
+ * DANGER !!! Do Not use this on normal vectors!!!
+ * It will leave normals the wrong length !!!
+ * See macro below for use on normals.
+ */
+
+#define INV_TRANSP_MAT_DOT_VEC_2X2(p,m,v)			\
+{								\
+   gleDouble det;						\
+								\
+   det = m[0][0]*m[1][1] - m[0][1]*m[1][0];			\
+   p[0] = m[1][1]*v[0] - m[1][0]*v[1];				\
+   p[1] = - m[0][1]*v[0] + m[0][0]*v[1];			\
+								\
+   /* if matrix not singular, and not orthonormal, then renormalize */ \
+   if ((det!=1.0) && (det != 0.0)) {				\
+      det = 1.0 / det;						\
+      p[0] *= det;						\
+      p[1] *= det;						\
+   }								\
+}
+
+/* ========================================================== */
+/* transform normal vector by inverse transpose of matrix 
+ * and then renormalize the vector 
+ *
+ * This macro computes inverse transpose of matrix m, 
+ * and multiplies vector v into it, to yeild vector p
+ * Vector p is then normalized.
+ */
+
+
+#define NORM_XFORM_2X2(p,m,v)					\
+{								\
+   double mlen;							\
+								\
+   /* do nothing if off-diagonals are zero and diagonals are 	\
+    * equal */							\
+   if ((m[0][1] != 0.0) || (m[1][0] != 0.0) || (m[0][0] != m[1][1])) { \
+      p[0] = m[1][1]*v[0] - m[1][0]*v[1];			\
+      p[1] = - m[0][1]*v[0] + m[0][0]*v[1];			\
+								\
+      mlen = p[0]*p[0] + p[1]*p[1];				\
+      mlen = 1.0 / sqrt (mlen);					\
+      p[0] *= mlen;						\
+      p[1] *= mlen;						\
+   } else {							\
+      VEC_COPY_2 (p, v);					\
+   }								\
+}
+
+/* ========================================================== */
+/* outer product of vector times vector transpose 
+ *
+ * The outer product of vector v and vector transpose t yeilds 
+ * dyadic matrix m.
+ */
+
+#define OUTER_PRODUCT_2X2(m,v,t)				\
+{								\
+   m[0][0] = v[0] * t[0];					\
+   m[0][1] = v[0] * t[1];					\
+								\
+   m[1][0] = v[1] * t[0];					\
+   m[1][1] = v[1] * t[1];					\
+}
+
+/* ========================================================== */
+/* outer product of vector times vector transpose 
+ *
+ * The outer product of vector v and vector transpose t yeilds 
+ * dyadic matrix m.
+ */
+
+#define OUTER_PRODUCT_3X3(m,v,t)				\
+{								\
+   m[0][0] = v[0] * t[0];					\
+   m[0][1] = v[0] * t[1];					\
+   m[0][2] = v[0] * t[2];					\
+								\
+   m[1][0] = v[1] * t[0];					\
+   m[1][1] = v[1] * t[1];					\
+   m[1][2] = v[1] * t[2];					\
+								\
+   m[2][0] = v[2] * t[0];					\
+   m[2][1] = v[2] * t[1];					\
+   m[2][2] = v[2] * t[2];					\
+}
+
+/* ========================================================== */
+/* outer product of vector times vector transpose 
+ *
+ * The outer product of vector v and vector transpose t yeilds 
+ * dyadic matrix m.
+ */
+
+#define OUTER_PRODUCT_4X4(m,v,t)				\
+{								\
+   m[0][0] = v[0] * t[0];					\
+   m[0][1] = v[0] * t[1];					\
+   m[0][2] = v[0] * t[2];					\
+   m[0][3] = v[0] * t[3];					\
+								\
+   m[1][0] = v[1] * t[0];					\
+   m[1][1] = v[1] * t[1];					\
+   m[1][2] = v[1] * t[2];					\
+   m[1][3] = v[1] * t[3];					\
+								\
+   m[2][0] = v[2] * t[0];					\
+   m[2][1] = v[2] * t[1];					\
+   m[2][2] = v[2] * t[2];					\
+   m[2][3] = v[2] * t[3];					\
+								\
+   m[3][0] = v[3] * t[0];					\
+   m[3][1] = v[3] * t[1];					\
+   m[3][2] = v[3] * t[2];					\
+   m[3][3] = v[3] * t[3];					\
+}
+
+/* +========================================================== */
+/* outer product of vector times vector transpose 
+ *
+ * The outer product of vector v and vector transpose t yeilds 
+ * dyadic matrix m.
+ */
+
+#define ACCUM_OUTER_PRODUCT_2X2(m,v,t)				\
+{								\
+   m[0][0] += v[0] * t[0];					\
+   m[0][1] += v[0] * t[1];					\
+								\
+   m[1][0] += v[1] * t[0];					\
+   m[1][1] += v[1] * t[1];					\
+}
+
+/* +========================================================== */
+/* outer product of vector times vector transpose 
+ *
+ * The outer product of vector v and vector transpose t yeilds 
+ * dyadic matrix m.
+ */
+
+#define ACCUM_OUTER_PRODUCT_3X3(m,v,t)				\
+{								\
+   m[0][0] += v[0] * t[0];					\
+   m[0][1] += v[0] * t[1];					\
+   m[0][2] += v[0] * t[2];					\
+								\
+   m[1][0] += v[1] * t[0];					\
+   m[1][1] += v[1] * t[1];					\
+   m[1][2] += v[1] * t[2];					\
+								\
+   m[2][0] += v[2] * t[0];					\
+   m[2][1] += v[2] * t[1];					\
+   m[2][2] += v[2] * t[2];					\
+}
+
+/* +========================================================== */
+/* outer product of vector times vector transpose 
+ *
+ * The outer product of vector v and vector transpose t yeilds 
+ * dyadic matrix m.
+ */
+
+#define ACCUM_OUTER_PRODUCT_4X4(m,v,t)				\
+{								\
+   m[0][0] += v[0] * t[0];					\
+   m[0][1] += v[0] * t[1];					\
+   m[0][2] += v[0] * t[2];					\
+   m[0][3] += v[0] * t[3];					\
+								\
+   m[1][0] += v[1] * t[0];					\
+   m[1][1] += v[1] * t[1];					\
+   m[1][2] += v[1] * t[2];					\
+   m[1][3] += v[1] * t[3];					\
+								\
+   m[2][0] += v[2] * t[0];					\
+   m[2][1] += v[2] * t[1];					\
+   m[2][2] += v[2] * t[2];					\
+   m[2][3] += v[2] * t[3];					\
+								\
+   m[3][0] += v[3] * t[0];					\
+   m[3][1] += v[3] * t[1];					\
+   m[3][2] += v[3] * t[2];					\
+   m[3][3] += v[3] * t[3];					\
+}
+
+/* +========================================================== */
+/* determinant of matrix
+ *
+ * Computes determinant of matrix m, returning d
+ */
+
+#define DETERMINANT_2X2(d,m)					\
+{								\
+   d = m[0][0] * m[1][1] - m[0][1] * m[1][0];			\
+}
+
+/* ========================================================== */
+/* determinant of matrix
+ *
+ * Computes determinant of matrix m, returning d
+ */
+
+#define DETERMINANT_3X3(d,m)					\
+{								\
+   d = m[0][0] * (m[1][1]*m[2][2] - m[1][2] * m[2][1]);		\
+   d -= m[0][1] * (m[1][0]*m[2][2] - m[1][2] * m[2][0]);	\
+   d += m[0][2] * (m[1][0]*m[2][1] - m[1][1] * m[2][0]);	\
+}
+
+/* ========================================================== */
+/* i,j,th cofactor of a 4x4 matrix
+ *
+ */
+
+#define COFACTOR_4X4_IJ(fac,m,i,j) 				\
+{								\
+   int ii[4], jj[4], k;						\
+								\
+   /* compute which row, columnt to skip */			\
+   for (k=0; k<i; k++) ii[k] = k;				\
+   for (k=i; k<3; k++) ii[k] = k+1;				\
+   for (k=0; k<j; k++) jj[k] = k;				\
+   for (k=j; k<3; k++) jj[k] = k+1;				\
+								\
+   (fac) = m[ii[0]][jj[0]] * (m[ii[1]][jj[1]]*m[ii[2]][jj[2]] 	\
+                            - m[ii[1]][jj[2]]*m[ii[2]][jj[1]]); \
+   (fac) -= m[ii[0]][jj[1]] * (m[ii[1]][jj[0]]*m[ii[2]][jj[2]]	\
+                             - m[ii[1]][jj[2]]*m[ii[2]][jj[0]]);\
+   (fac) += m[ii[0]][jj[2]] * (m[ii[1]][jj[0]]*m[ii[2]][jj[1]]	\
+                             - m[ii[1]][jj[1]]*m[ii[2]][jj[0]]);\
+								\
+   /* compute sign */						\
+   k = i+j;							\
+   if ( k != (k/2)*2) {						\
+      (fac) = -(fac);						\
+   }								\
+}
+
+/* ========================================================== */
+/* determinant of matrix
+ *
+ * Computes determinant of matrix m, returning d
+ */
+
+#define DETERMINANT_4X4(d,m)					\
+{								\
+   double cofac;						\
+   COFACTOR_4X4_IJ (cofac, m, 0, 0);				\
+   d = m[0][0] * cofac;						\
+   COFACTOR_4X4_IJ (cofac, m, 0, 1);				\
+   d += m[0][1] * cofac;					\
+   COFACTOR_4X4_IJ (cofac, m, 0, 2);				\
+   d += m[0][2] * cofac;					\
+   COFACTOR_4X4_IJ (cofac, m, 0, 3);				\
+   d += m[0][3] * cofac;					\
+}
+
+/* ========================================================== */
+/* cofactor of matrix
+ *
+ * Computes cofactor of matrix m, returning a
+ */
+
+#define COFACTOR_2X2(a,m)					\
+{								\
+   a[0][0] = (m)[1][1];						\
+   a[0][1] = - (m)[1][0];						\
+   a[1][0] = - (m)[0][1];						\
+   a[1][1] = (m)[0][0];						\
+}
+
+/* ========================================================== */
+/* cofactor of matrix
+ *
+ * Computes cofactor of matrix m, returning a
+ */
+
+#define COFACTOR_3X3(a,m)					\
+{								\
+   a[0][0] = m[1][1]*m[2][2] - m[1][2]*m[2][1];			\
+   a[0][1] = - (m[1][0]*m[2][2] - m[2][0]*m[1][2]);		\
+   a[0][2] = m[1][0]*m[2][1] - m[1][1]*m[2][0];			\
+   a[1][0] = - (m[0][1]*m[2][2] - m[0][2]*m[2][1]);		\
+   a[1][1] = m[0][0]*m[2][2] - m[0][2]*m[2][0];			\
+   a[1][2] = - (m[0][0]*m[2][1] - m[0][1]*m[2][0]);		\
+   a[2][0] = m[0][1]*m[1][2] - m[0][2]*m[1][1];			\
+   a[2][1] = - (m[0][0]*m[1][2] - m[0][2]*m[1][0]);		\
+   a[2][2] = m[0][0]*m[1][1] - m[0][1]*m[1][0]);		\
+}
+
+/* ========================================================== */
+/* cofactor of matrix
+ *
+ * Computes cofactor of matrix m, returning a
+ */
+
+#define COFACTOR_4X4(a,m)					\
+{								\
+   int i,j;							\
+								\
+   for (i=0; i<4; i++) {					\
+      for (j=0; j<4; j++) {					\
+         COFACTOR_4X4_IJ (a[i][j], m, i, j);			\
+      }								\
+   }								\
+}
+
+/* ========================================================== */
+/* adjoint of matrix
+ *
+ * Computes adjoint of matrix m, returning a
+ * (Note that adjoint is just the transpose of the cofactor matrix)
+ */
+
+#define ADJOINT_2X2(a,m)					\
+{								\
+   a[0][0] = (m)[1][1];						\
+   a[1][0] = - (m)[1][0];						\
+   a[0][1] = - (m)[0][1];						\
+   a[1][1] = (m)[0][0];						\
+}
+
+/* ========================================================== */
+/* adjoint of matrix
+ *
+ * Computes adjoint of matrix m, returning a
+ * (Note that adjoint is just the transpose of the cofactor matrix)
+ */
+
+
+#define ADJOINT_3X3(a,m)					\
+{								\
+   a[0][0] = m[1][1]*m[2][2] - m[1][2]*m[2][1];			\
+   a[1][0] = - (m[1][0]*m[2][2] - m[2][0]*m[1][2]);		\
+   a[2][0] = m[1][0]*m[2][1] - m[1][1]*m[2][0];			\
+   a[0][1] = - (m[0][1]*m[2][2] - m[0][2]*m[2][1]);		\
+   a[1][1] = m[0][0]*m[2][2] - m[0][2]*m[2][0];			\
+   a[2][1] = - (m[0][0]*m[2][1] - m[0][1]*m[2][0]);		\
+   a[0][2] = m[0][1]*m[1][2] - m[0][2]*m[1][1];			\
+   a[1][2] = - (m[0][0]*m[1][2] - m[0][2]*m[1][0]);		\
+   a[2][2] = m[0][0]*m[1][1] - m[0][1]*m[1][0]);		\
+}
+
+/* ========================================================== */
+/* adjoint of matrix
+ *
+ * Computes adjoint of matrix m, returning a
+ * (Note that adjoint is just the transpose of the cofactor matrix)
+ */
+
+#define ADJOINT_4X4(a,m)					\
+{								\
+   int i,j;							\
+								\
+   for (i=0; i<4; i++) {					\
+      for (j=0; j<4; j++) {					\
+         COFACTOR_4X4_IJ (a[j][i], m, i, j);			\
+      }								\
+   }								\
+}
+
+/* ========================================================== */
+/* compute adjoint of matrix and scale
+ *
+ * Computes adjoint of matrix m, scales it by s, returning a
+ */
+
+#define SCALE_ADJOINT_2X2(a,s,m)				\
+{								\
+   a[0][0] = (s) * m[1][1];					\
+   a[1][0] = - (s) * m[1][0];					\
+   a[0][1] = - (s) * m[0][1];					\
+   a[1][1] = (s) * m[0][0];					\
+}
+
+/* ========================================================== */
+/* compute adjoint of matrix and scale
+ *
+ * Computes adjoint of matrix m, scales it by s, returning a
+ */
+
+#define SCALE_ADJOINT_3X3(a,s,m)				\
+{								\
+   a[0][0] = (s) * (m[1][1] * m[2][2] - m[1][2] * m[2][1]);	\
+   a[1][0] = (s) * (m[1][2] * m[2][0] - m[1][0] * m[2][2]);	\
+   a[2][0] = (s) * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);	\
+								\
+   a[0][1] = (s) * (m[0][2] * m[2][1] - m[0][1] * m[2][2]);	\
+   a[1][1] = (s) * (m[0][0] * m[2][2] - m[0][2] * m[2][0]);	\
+   a[2][1] = (s) * (m[0][1] * m[2][0] - m[0][0] * m[2][1]);	\
+								\
+   a[0][2] = (s) * (m[0][1] * m[1][2] - m[0][2] * m[1][1]);	\
+   a[1][2] = (s) * (m[0][2] * m[1][0] - m[0][0] * m[1][2]);	\
+   a[2][2] = (s) * (m[0][0] * m[1][1] - m[0][1] * m[1][0]);	\
+}
+
+/* ========================================================== */
+/* compute adjoint of matrix and scale
+ *
+ * Computes adjoint of matrix m, scales it by s, returning a
+ */
+
+#define SCALE_ADJOINT_4X4(a,s,m)				\
+{								\
+   int i,j;							\
+								\
+   for (i=0; i<4; i++) {					\
+      for (j=0; j<4; j++) {					\
+         COFACTOR_4X4_IJ (a[j][i], m, i, j);			\
+         a[j][i] *= s;						\
+      }								\
+   }								\
+}
+
+/* ========================================================== */
+/* inverse of matrix 
+ *
+ * Compute inverse of matrix a, returning determinant m and 
+ * inverse b
+ */
+
+#define INVERT_2X2(b,det,a)			\
+{						\
+   double tmp;					\
+   DETERMINANT_2X2 (det, a);			\
+   tmp = 1.0 / (det);				\
+   SCALE_ADJOINT_2X2 (b, tmp, a);		\
+}
+
+/* ========================================================== */
+/* inverse of matrix 
+ *
+ * Compute inverse of matrix a, returning determinant m and 
+ * inverse b
+ */
+
+#define INVERT_3X3(b,det,a)			\
+{						\
+   double tmp;					\
+   DETERMINANT_3X3 (det, a);			\
+   tmp = 1.0 / (det);				\
+   SCALE_ADJOINT_3X3 (b, tmp, a);		\
+}
+
+/* ========================================================== */
+/* inverse of matrix 
+ *
+ * Compute inverse of matrix a, returning determinant m and 
+ * inverse b
+ */
+
+#define INVERT_4X4(b,det,a)			\
+{						\
+   double tmp;					\
+   DETERMINANT_4X4 (det, a);			\
+   tmp = 1.0 / (det);				\
+   SCALE_ADJOINT_4X4 (b, tmp, a);		\
+}
+
+/* ========================================================== */
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+#endif /* __GUTIL_VECTOR_H__ */
+/* ===================== END OF FILE ======================== */

BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Caution.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUT.nib/objects.nib


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTClipboard.nib/objects.nib


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTPreferences.nib/objects.nib


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/GLUTUI.strings


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/English.lproj/InfoPlist.strings


+ 28 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/Info.plist

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>GLUT</string>
+	<key>CFBundleGetInfoString</key>
+	<string>3.4.0, Copyright (c) 2001-2008 Apple Inc., All Rights Reserved</string>
+	<key>CFBundleIconFile</key>
+	<string></string>
+	<key>CFBundleIdentifier</key>
+	<string>com.apple.glut</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>3.4.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>GLUT-3.4.0</string>
+	<key>NSPrincipalClass</key>
+	<string></string>
+</dict>
+</plist>

BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/blankCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomleftCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/bottomrightCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/crossCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/cycleCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/destroyCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/fingerCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/helpCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/leftRightCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightArrowCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/rightCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/sprayCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/topleftCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/toprightCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/upDownCursor.tiff


BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/A/Resources/waitCursor.tiff


+ 1 - 0
example/bin/exampleDebug.app/Contents/Frameworks/GLUT.framework/Versions/Current

@@ -0,0 +1 @@
+A

BIN=BIN
example/bin/exampleDebug.app/Contents/Frameworks/libfmodex.dylib


+ 42 - 0
example/bin/exampleDebug.app/Contents/Info.plist

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>BuildMachineOSBuild</key>
+	<string>15D21</string>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>exampleDebug</string>
+	<key>CFBundleIconFile</key>
+	<string>icon-debug.icns</string>
+	<key>CFBundleIdentifier</key>
+	<string>cc.openFrameworks.ofapp</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleSupportedPlatforms</key>
+	<array>
+		<string>MacOSX</string>
+	</array>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>DTCompiler</key>
+	<string>com.apple.compilers.llvm.clang.1_0</string>
+	<key>DTPlatformBuild</key>
+	<string>7C68</string>
+	<key>DTPlatformVersion</key>
+	<string>GM</string>
+	<key>DTSDKBuild</key>
+	<string>15C43</string>
+	<key>DTSDKName</key>
+	<string>macosx10.11</string>
+	<key>DTXcode</key>
+	<string>0720</string>
+	<key>DTXcodeBuild</key>
+	<string>7C68</string>
+</dict>
+</plist>

BIN=BIN
example/bin/exampleDebug.app/Contents/MacOS/exampleDebug


+ 1 - 0
example/bin/exampleDebug.app/Contents/PkgInfo

@@ -0,0 +1 @@
+APPL????

BIN=BIN
example/bin/exampleDebug.app/Contents/Resources/icon-debug.icns


+ 142 - 0
example/config.make

@@ -0,0 +1,142 @@
+################################################################################
+# CONFIGURE PROJECT MAKEFILE (optional)
+#   This file is where we make project specific configurations.
+################################################################################
+
+################################################################################
+# OF ROOT
+#   The location of your root openFrameworks installation
+#       (default) OF_ROOT = ../../.. 
+################################################################################
+# OF_ROOT = ../../..
+
+################################################################################
+# PROJECT ROOT
+#   The location of the project - a starting place for searching for files
+#       (default) PROJECT_ROOT = . (this directory)
+#    
+################################################################################
+# PROJECT_ROOT = .
+
+################################################################################
+# PROJECT SPECIFIC CHECKS
+#   This is a project defined section to create internal makefile flags to 
+#   conditionally enable or disable the addition of various features within 
+#   this makefile.  For instance, if you want to make changes based on whether
+#   GTK is installed, one might test that here and create a variable to check. 
+################################################################################
+# None
+
+################################################################################
+# PROJECT EXTERNAL SOURCE PATHS
+#   These are fully qualified paths that are not within the PROJECT_ROOT folder.
+#   Like source folders in the PROJECT_ROOT, these paths are subject to 
+#   exlclusion via the PROJECT_EXLCUSIONS list.
+#
+#     (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) 
+#
+#   Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_EXTERNAL_SOURCE_PATHS = 
+
+################################################################################
+# PROJECT EXCLUSIONS
+#   These makefiles assume that all folders in your current project directory 
+#   and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations
+#   to look for source code. The any folders or files that match any of the 
+#   items in the PROJECT_EXCLUSIONS list below will be ignored.
+#
+#   Each item in the PROJECT_EXCLUSIONS list will be treated as a complete 
+#   string unless teh user adds a wildcard (%) operator to match subdirectories.
+#   GNU make only allows one wildcard for matching.  The second wildcard (%) is
+#   treated literally.
+#
+#      (default) PROJECT_EXCLUSIONS = (blank)
+#
+#		Will automatically exclude the following:
+#
+#			$(PROJECT_ROOT)/bin%
+#			$(PROJECT_ROOT)/obj%
+#			$(PROJECT_ROOT)/%.xcodeproj
+#
+#   Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_EXCLUSIONS =
+
+################################################################################
+# PROJECT LINKER FLAGS
+#	These flags will be sent to the linker when compiling the executable.
+#
+#		(default) PROJECT_LDFLAGS = -Wl,-rpath=./libs
+#
+#   Note: Leave a leading space when adding list items with the += operator
+################################################################################
+
+# Currently, shared libraries that are needed are copied to the 
+# $(PROJECT_ROOT)/bin/libs directory.  The following LDFLAGS tell the linker to
+# add a runtime path to search for those shared libraries, since they aren't 
+# incorporated directly into the final executable application binary.
+# TODO: should this be a default setting?
+# PROJECT_LDFLAGS=-Wl,-rpath=./libs
+
+################################################################################
+# PROJECT DEFINES
+#   Create a space-delimited list of DEFINES. The list will be converted into 
+#   CFLAGS with the "-D" flag later in the makefile.
+#
+#		(default) PROJECT_DEFINES = (blank)
+#
+#   Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_DEFINES = 
+
+################################################################################
+# PROJECT CFLAGS
+#   This is a list of fully qualified CFLAGS required when compiling for this 
+#   project.  These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS 
+#   defined in your platform specific core configuration files. These flags are
+#   presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. 
+#
+#		(default) PROJECT_CFLAGS = (blank)
+#
+#   Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in 
+#   your platform specific configuration file will be applied by default and 
+#   further flags here may not be needed.
+#
+#   Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_CFLAGS = 
+
+################################################################################
+# PROJECT OPTIMIZATION CFLAGS
+#   These are lists of CFLAGS that are target-specific.  While any flags could 
+#   be conditionally added, they are usually limited to optimization flags. 
+#   These flags are added BEFORE the PROJECT_CFLAGS.
+#
+#   PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets.
+#
+#		(default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank)
+#
+#   PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets.
+#
+#		(default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank)
+#
+#   Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the 
+#   PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration 
+#   file will be applied by default and further optimization flags here may not 
+#   be needed.
+#
+#   Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = 
+# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = 
+
+################################################################################
+# PROJECT COMPILERS
+#   Custom compilers can be set for CC and CXX
+#		(default) PROJECT_CXX = (blank)
+#		(default) PROJECT_CC = (blank)
+#   Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_CXX = 
+# PROJECT_CC = 

+ 959 - 0
example/example.xcodeproj/project.pbxproj

@@ -0,0 +1,959 @@
+<?xml version="1.0"?>
+<plist version="1.0">
+	<dict>
+		<key>archiveVersion</key>
+		<string>1</string>
+		<key>classes</key>
+		<dict />
+		<key>objectVersion</key>
+		<string>46</string>
+		<key>objects</key>
+		<dict>
+			<key>5028CC3E64CBB710D7C5F5F4</key>
+			<dict>
+				<key>explicitFileType</key>
+				<string>sourcecode.c.h</string>
+				<key>fileEncoding</key>
+				<string>30</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>name</key>
+				<string>ofxPlotter.h</string>
+				<key>path</key>
+				<string>../../../addons/ofxPlotter/src/ofxPlotter.h</string>
+				<key>sourceTree</key>
+				<string>SOURCE_ROOT</string>
+			</dict>
+			<key>8E28FED48F8FCD9C28F8AD2F</key>
+			<dict>
+				<key>children</key>
+				<array>
+					<string>01F7AC1BB4585A3963F3CCD3</string>
+					<string>5028CC3E64CBB710D7C5F5F4</string>
+				</array>
+				<key>isa</key>
+				<string>PBXGroup</string>
+				<key>name</key>
+				<string>src</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+			<key>2F0987A2A43290DF1E511232</key>
+			<dict>
+				<key>children</key>
+				<array>
+					<string>8E28FED48F8FCD9C28F8AD2F</string>
+				</array>
+				<key>isa</key>
+				<string>PBXGroup</string>
+				<key>name</key>
+				<string>ofxPlotter</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+			<key>BD4117B91A3145AB7B15120D</key>
+			<dict>
+				<key>fileRef</key>
+				<string>01F7AC1BB4585A3963F3CCD3</string>
+				<key>isa</key>
+				<string>PBXBuildFile</string>
+			</dict>
+			<key>01F7AC1BB4585A3963F3CCD3</key>
+			<dict>
+				<key>explicitFileType</key>
+				<string>sourcecode.cpp.cpp</string>
+				<key>fileEncoding</key>
+				<string>30</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>name</key>
+				<string>ofxPlotter.cpp</string>
+				<key>path</key>
+				<string>../../../addons/ofxPlotter/src/ofxPlotter.cpp</string>
+				<key>sourceTree</key>
+				<string>SOURCE_ROOT</string>
+			</dict>
+			<key>6948EE371B920CB800B5AC1A</key>
+			<dict>
+				<key>children</key>
+				<array />
+				<key>isa</key>
+				<string>PBXGroup</string>
+				<key>name</key>
+				<string>local_addons</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+			<key>8466F1851C04CA0E00918B1C</key>
+			<dict>
+				<key>buildActionMask</key>
+				<string>12</string>
+				<key>files</key>
+				<array />
+				<key>inputPaths</key>
+				<array />
+				<key>isa</key>
+				<string>PBXShellScriptBuildPhase</string>
+				<key>outputPaths</key>
+				<array />
+				<key>runOnlyForDeploymentPostprocessing</key>
+				<string>0</string>
+				<key>shellPath</key>
+				<string>/bin/sh</string>
+				<key>shellScript</key>
+				<string>echo "$GCC_PREPROCESSOR_DEFINITIONS";
+APPSTORE=`expr "$GCC_PREPROCESSOR_DEFINITIONS" : ".*APPSTORE=\([0-9]*\)"`
+if [ -z "$APPSTORE" ] ; then
+echo "Note: Not copying bin/data to App Package or doing App Code signing. Use AppStore target for AppStore distribution";
+else
+# Copy bin/data into App/Resources
+rsync -avz --exclude='.DS_Store' "${SRCROOT}/bin/data/" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/"
+
+# ---- Code Sign App Package ----
+ 
+# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY!
+
+# Verify that $CODE_SIGN_IDENTITY is set
+if [ -z "${CODE_SIGN_IDENTITY}" ] ; then
+echo "CODE_SIGN_IDENTITY needs to be set for framework code-signing"
+exit 0
+fi
+
+if [ -z "${CODE_SIGN_ENTITLEMENTS}" ] ; then
+echo "CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!"
+
+if [ "${CONFIGURATION}" = "Release" ] ; then
+exit 1
+else
+# Code-signing is optional for non-release builds.
+exit 0
+fi
+fi
+
+ITEMS=""
+
+FRAMEWORKS_DIR="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+echo "$FRAMEWORKS_DIR"
+if [ -d "$FRAMEWORKS_DIR" ] ; then
+FRAMEWORKS=$(find "${FRAMEWORKS_DIR}" -depth -type d -name "*.framework" -or -name "*.dylib" -or -name "*.bundle" | sed -e "s/\(.*framework\)/\1\/Versions\/A\//")
+RESULT=$?
+if [[ $RESULT != 0 ]] ; then
+exit 1
+fi
+
+ITEMS="${FRAMEWORKS}"
+fi
+
+LOGINITEMS_DIR="${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/"
+if [ -d "$LOGINITEMS_DIR" ] ; then
+LOGINITEMS=$(find "${LOGINITEMS_DIR}" -depth -type d -name "*.app")
+RESULT=$?
+if [[ $RESULT != 0 ]] ; then
+exit 1
+fi
+
+ITEMS="${ITEMS}"$'\n'"${LOGINITEMS}"
+fi
+
+# Prefer the expanded name, if available.
+CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
+if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then
+# Fall back to old behavior.
+CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}"
+fi
+
+echo "Identity:"
+echo "${CODE_SIGN_IDENTITY_FOR_ITEMS}"
+
+echo "Entitlements:"
+echo "${CODE_SIGN_ENTITLEMENTS}"
+
+echo "Found:"
+echo "${ITEMS}"
+
+# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below.
+SAVED_IFS=$IFS
+IFS=$(echo -en "\n\b")
+
+# Loop through all items.
+for ITEM in $ITEMS;
+do
+echo "Signing '${ITEM}'"
+codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" --entitlements "${CODE_SIGN_ENTITLEMENTS}" "${ITEM}"
+RESULT=$?
+if [[ $RESULT != 0 ]] ; then
+echo "Failed to sign '${ITEM}'."
+IFS=$SAVED_IFS
+exit 1
+fi
+done
+
+# Restore $IFS.
+IFS=$SAVED_IFS
+
+fi
+</string>
+			</dict>
+			<key>99FA3DBB1C7456C400CFA0EE</key>
+			<dict>
+				<key>baseConfigurationReference</key>
+				<string>E4EB6923138AFD0F00A09F29</string>
+				<key>buildSettings</key>
+				<dict>
+					<key>HEADER_SEARCH_PATHS</key>
+					<array>
+						<string>$(OF_CORE_HEADERS)</string>
+						<string>../../../addons/ofxPlotter/src</string>
+					</array>
+					<key>CONFIGURATION_BUILD_DIR</key>
+					<string>$(SRCROOT)/bin/</string>
+					<key>COPY_PHASE_STRIP</key>
+					<string>YES</string>
+					<key>DEAD_CODE_STRIPPING</key>
+					<string>YES</string>
+					<key>GCC_AUTO_VECTORIZATION</key>
+					<string>YES</string>
+					<key>GCC_ENABLE_SSE3_EXTENSIONS</key>
+					<string>YES</string>
+					<key>GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS</key>
+					<string>YES</string>
+					<key>GCC_INLINES_ARE_PRIVATE_EXTERN</key>
+					<string>NO</string>
+					<key>GCC_OPTIMIZATION_LEVEL</key>
+					<string>3</string>
+					<key>GCC_PREPROCESSOR_DEFINITIONS[arch=*]</key>
+					<string>DISTRIBUTION=1</string>
+					<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
+					<string>NO</string>
+					<key>GCC_UNROLL_LOOPS</key>
+					<string>YES</string>
+					<key>GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS</key>
+					<string>YES</string>
+					<key>GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO</key>
+					<string>NO</string>
+					<key>GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNINITIALIZED_AUTOS</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNUSED_VALUE</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNUSED_VARIABLE</key>
+					<string>NO</string>
+					<key>MACOSX_DEPLOYMENT_TARGET</key>
+					<string>10.8</string>
+					<key>OTHER_CPLUSPLUSFLAGS</key>
+					<array>
+						<string>-D__MACOSX_CORE__</string>
+						<string>-mtune=native</string>
+					</array>
+					<key>SDKROOT</key>
+					<string>macosx</string>
+				</dict>
+				<key>isa</key>
+				<string>XCBuildConfiguration</string>
+				<key>name</key>
+				<string>AppStore</string>
+			</dict>
+			<key>99FA3DBC1C7456C400CFA0EE</key>
+			<dict>
+				<key>baseConfigurationReference</key>
+				<string>E4EB6923138AFD0F00A09F29</string>
+				<key>buildSettings</key>
+				<dict>
+					<key>HEADER_SEARCH_PATHS</key>
+					<array>
+						<string>$(OF_CORE_HEADERS)</string>
+						<string>../../../addons/ofxPlotter/src</string>
+					</array>
+					<key>COMBINE_HIDPI_IMAGES</key>
+					<string>YES</string>
+					<key>COPY_PHASE_STRIP</key>
+					<string>YES</string>
+					<key>FRAMEWORK_SEARCH_PATHS</key>
+					<array>
+						<string>$(inherited)</string>
+						<string>$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)</string>
+					</array>
+					<key>FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1</key>
+					<string>"$(SRCROOT)/../../../libs/glut/lib/osx"</string>
+					<key>GCC_GENERATE_DEBUGGING_SYMBOLS</key>
+					<string>YES</string>
+					<key>GCC_MODEL_TUNING</key>
+					<string>NONE</string>
+					<key>GCC_PREPROCESSOR_DEFINITIONS[arch=*]</key>
+					<string>APPSTORE=1</string>
+					<key>ICON</key>
+					<string>$(ICON_NAME_RELEASE)</string>
+					<key>ICON_FILE</key>
+					<string>$(ICON_FILE_PATH)$(ICON)</string>
+					<key>INFOPLIST_FILE</key>
+					<string>openFrameworks-Info.plist</string>
+					<key>INSTALL_PATH</key>
+					<string>/Applications</string>
+					<key>LIBRARY_SEARCH_PATHS</key>
+					<string>$(inherited)</string>
+					<key>PRODUCT_NAME</key>
+					<string>$(TARGET_NAME)</string>
+					<key>WRAPPER_EXTENSION</key>
+					<string>app</string>
+					<key>baseConfigurationReference</key>
+					<string>E4EB6923138AFD0F00A09F29</string>
+				</dict>
+				<key>isa</key>
+				<string>XCBuildConfiguration</string>
+				<key>name</key>
+				<string>AppStore</string>
+			</dict>
+			<key>BB4B014C10F69532006C3DED</key>
+			<dict>
+				<key>children</key>
+				<array>
+					<string>2F0987A2A43290DF1E511232</string>
+				</array>
+				<key>isa</key>
+				<string>PBXGroup</string>
+				<key>name</key>
+				<string>addons</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+			<key>E4328143138ABC890047C5CB</key>
+			<dict>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>lastKnownFileType</key>
+				<string>wrapper.pb-project</string>
+				<key>name</key>
+				<string>openFrameworksLib.xcodeproj</string>
+				<key>path</key>
+				<string>../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj</string>
+				<key>sourceTree</key>
+				<string>SOURCE_ROOT</string>
+			</dict>
+			<key>E4328144138ABC890047C5CB</key>
+			<dict>
+				<key>children</key>
+				<array>
+					<string>E4328148138ABC890047C5CB</string>
+				</array>
+				<key>isa</key>
+				<string>PBXGroup</string>
+				<key>name</key>
+				<string>Products</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+			<key>E4328147138ABC890047C5CB</key>
+			<dict>
+				<key>containerPortal</key>
+				<string>E4328143138ABC890047C5CB</string>
+				<key>isa</key>
+				<string>PBXContainerItemProxy</string>
+				<key>proxyType</key>
+				<string>2</string>
+				<key>remoteGlobalIDString</key>
+				<string>E4B27C1510CBEB8E00536013</string>
+				<key>remoteInfo</key>
+				<string>openFrameworks</string>
+			</dict>
+			<key>E4328148138ABC890047C5CB</key>
+			<dict>
+				<key>fileType</key>
+				<string>archive.ar</string>
+				<key>isa</key>
+				<string>PBXReferenceProxy</string>
+				<key>path</key>
+				<string>openFrameworksDebug.a</string>
+				<key>remoteRef</key>
+				<string>E4328147138ABC890047C5CB</string>
+				<key>sourceTree</key>
+				<string>BUILT_PRODUCTS_DIR</string>
+			</dict>
+			<key>E4328149138ABC9F0047C5CB</key>
+			<dict>
+				<key>fileRef</key>
+				<string>E4328148138ABC890047C5CB</string>
+				<key>isa</key>
+				<string>PBXBuildFile</string>
+			</dict>
+			<key>E4B69B4A0A3A1720003C02F2</key>
+			<dict>
+				<key>children</key>
+				<array>
+					<string>E4B6FCAD0C3E899E008CF71C</string>
+					<string>E4EB6923138AFD0F00A09F29</string>
+					<string>E4B69E1C0A3A1BDC003C02F2</string>
+					<string>E4EEC9E9138DF44700A80321</string>
+					<string>BB4B014C10F69532006C3DED</string>
+					<string>6948EE371B920CB800B5AC1A</string>
+					<string>E4B69B5B0A3A1756003C02F2</string>
+				</array>
+				<key>isa</key>
+				<string>PBXGroup</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+			<key>E4B69B4C0A3A1720003C02F2</key>
+			<dict>
+				<key>attributes</key>
+				<dict>
+					<key>LastUpgradeCheck</key>
+					<string>0600</string>
+				</dict>
+				<key>buildConfigurationList</key>
+				<string>E4B69B4D0A3A1720003C02F2</string>
+				<key>compatibilityVersion</key>
+				<string>Xcode 3.2</string>
+				<key>developmentRegion</key>
+				<string>English</string>
+				<key>hasScannedForEncodings</key>
+				<string>0</string>
+				<key>isa</key>
+				<string>PBXProject</string>
+				<key>knownRegions</key>
+				<array>
+					<string>English</string>
+					<string>Japanese</string>
+					<string>French</string>
+					<string>German</string>
+				</array>
+				<key>mainGroup</key>
+				<string>E4B69B4A0A3A1720003C02F2</string>
+				<key>productRefGroup</key>
+				<string>E4B69B4A0A3A1720003C02F2</string>
+				<key>projectDirPath</key>
+				<string />
+				<key>projectReferences</key>
+				<array>
+					<dict>
+						<key>ProductGroup</key>
+						<string>E4328144138ABC890047C5CB</string>
+						<key>ProjectRef</key>
+						<string>E4328143138ABC890047C5CB</string>
+					</dict>
+				</array>
+				<key>projectRoot</key>
+				<string />
+				<key>targets</key>
+				<array>
+					<string>E4B69B5A0A3A1756003C02F2</string>
+				</array>
+			</dict>
+			<key>E4B69B4D0A3A1720003C02F2</key>
+			<dict>
+				<key>buildConfigurations</key>
+				<array>
+					<string>E4B69B4E0A3A1720003C02F2</string>
+					<string>E4B69B4F0A3A1720003C02F2</string>
+					<string>99FA3DBB1C7456C400CFA0EE</string>
+				</array>
+				<key>defaultConfigurationIsVisible</key>
+				<string>0</string>
+				<key>defaultConfigurationName</key>
+				<string>Release</string>
+				<key>isa</key>
+				<string>XCConfigurationList</string>
+			</dict>
+			<key>E4B69B4E0A3A1720003C02F2</key>
+			<dict>
+				<key>baseConfigurationReference</key>
+				<string>E4EB6923138AFD0F00A09F29</string>
+				<key>buildSettings</key>
+				<dict>
+					<key>HEADER_SEARCH_PATHS</key>
+					<array>
+						<string>$(OF_CORE_HEADERS)</string>
+						<string>../../../addons/ofxPlotter/src</string>
+					</array>
+					<key>CONFIGURATION_BUILD_DIR</key>
+					<string>$(SRCROOT)/bin/</string>
+					<key>COPY_PHASE_STRIP</key>
+					<string>NO</string>
+					<key>DEAD_CODE_STRIPPING</key>
+					<string>YES</string>
+					<key>GCC_AUTO_VECTORIZATION</key>
+					<string>YES</string>
+					<key>GCC_ENABLE_SSE3_EXTENSIONS</key>
+					<string>YES</string>
+					<key>GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS</key>
+					<string>YES</string>
+					<key>GCC_INLINES_ARE_PRIVATE_EXTERN</key>
+					<string>NO</string>
+					<key>GCC_OPTIMIZATION_LEVEL</key>
+					<string>0</string>
+					<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
+					<string>NO</string>
+					<key>GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS</key>
+					<string>YES</string>
+					<key>GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO</key>
+					<string>NO</string>
+					<key>GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNINITIALIZED_AUTOS</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNUSED_VALUE</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNUSED_VARIABLE</key>
+					<string>NO</string>
+					<key>MACOSX_DEPLOYMENT_TARGET</key>
+					<string>10.8</string>
+					<key>ONLY_ACTIVE_ARCH</key>
+					<string>YES</string>
+					<key>OTHER_CPLUSPLUSFLAGS</key>
+					<array>
+						<string>-D__MACOSX_CORE__</string>
+						<string>-mtune=native</string>
+					</array>
+					<key>SDKROOT</key>
+					<string>macosx</string>
+				</dict>
+				<key>isa</key>
+				<string>XCBuildConfiguration</string>
+				<key>name</key>
+				<string>Debug</string>
+			</dict>
+			<key>E4B69B4F0A3A1720003C02F2</key>
+			<dict>
+				<key>baseConfigurationReference</key>
+				<string>E4EB6923138AFD0F00A09F29</string>
+				<key>buildSettings</key>
+				<dict>
+					<key>HEADER_SEARCH_PATHS</key>
+					<array>
+						<string>$(OF_CORE_HEADERS)</string>
+						<string>../../../addons/ofxPlotter/src</string>
+					</array>
+					<key>CONFIGURATION_BUILD_DIR</key>
+					<string>$(SRCROOT)/bin/</string>
+					<key>COPY_PHASE_STRIP</key>
+					<string>YES</string>
+					<key>DEAD_CODE_STRIPPING</key>
+					<string>YES</string>
+					<key>GCC_AUTO_VECTORIZATION</key>
+					<string>YES</string>
+					<key>GCC_ENABLE_SSE3_EXTENSIONS</key>
+					<string>YES</string>
+					<key>GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS</key>
+					<string>YES</string>
+					<key>GCC_INLINES_ARE_PRIVATE_EXTERN</key>
+					<string>NO</string>
+					<key>GCC_OPTIMIZATION_LEVEL</key>
+					<string>3</string>
+					<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
+					<string>NO</string>
+					<key>GCC_UNROLL_LOOPS</key>
+					<string>YES</string>
+					<key>GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS</key>
+					<string>YES</string>
+					<key>GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO</key>
+					<string>NO</string>
+					<key>GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNINITIALIZED_AUTOS</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNUSED_VALUE</key>
+					<string>NO</string>
+					<key>GCC_WARN_UNUSED_VARIABLE</key>
+					<string>NO</string>
+					<key>MACOSX_DEPLOYMENT_TARGET</key>
+					<string>10.8</string>
+					<key>OTHER_CPLUSPLUSFLAGS</key>
+					<array>
+						<string>-D__MACOSX_CORE__</string>
+						<string>-mtune=native</string>
+					</array>
+					<key>SDKROOT</key>
+					<string>macosx</string>
+				</dict>
+				<key>isa</key>
+				<string>XCBuildConfiguration</string>
+				<key>name</key>
+				<string>Release</string>
+			</dict>
+			<key>E4B69B580A3A1756003C02F2</key>
+			<dict>
+				<key>buildActionMask</key>
+				<string>2147483647</string>
+				<key>files</key>
+				<array>
+					<string>E4B69E200A3A1BDC003C02F2</string>
+					<string>E4B69E210A3A1BDC003C02F2</string>
+					<string>BD4117B91A3145AB7B15120D</string>
+				</array>
+				<key>isa</key>
+				<string>PBXSourcesBuildPhase</string>
+				<key>runOnlyForDeploymentPostprocessing</key>
+				<string>0</string>
+			</dict>
+			<key>E4B69B590A3A1756003C02F2</key>
+			<dict>
+				<key>buildActionMask</key>
+				<string>2147483647</string>
+				<key>files</key>
+				<array>
+					<string>E4328149138ABC9F0047C5CB</string>
+				</array>
+				<key>isa</key>
+				<string>PBXFrameworksBuildPhase</string>
+				<key>runOnlyForDeploymentPostprocessing</key>
+				<string>0</string>
+			</dict>
+			<key>E4B69B5A0A3A1756003C02F2</key>
+			<dict>
+				<key>buildConfigurationList</key>
+				<string>E4B69B5F0A3A1757003C02F2</string>
+				<key>buildPhases</key>
+				<array>
+					<string>E4B69B580A3A1756003C02F2</string>
+					<string>E4B69B590A3A1756003C02F2</string>
+					<string>E4B6FFFD0C3F9AB9008CF71C</string>
+					<string>E4C2427710CC5ABF004149E2</string>
+					<string>8466F1851C04CA0E00918B1C</string>
+				</array>
+				<key>buildRules</key>
+				<array />
+				<key>dependencies</key>
+				<array>
+					<string>E4EEB9AC138B136A00A80321</string>
+				</array>
+				<key>isa</key>
+				<string>PBXNativeTarget</string>
+				<key>name</key>
+				<string>example</string>
+				<key>productName</key>
+				<string>myOFApp</string>
+				<key>productReference</key>
+				<string>E4B69B5B0A3A1756003C02F2</string>
+				<key>productType</key>
+				<string>com.apple.product-type.application</string>
+			</dict>
+			<key>E4B69B5B0A3A1756003C02F2</key>
+			<dict>
+				<key>explicitFileType</key>
+				<string>wrapper.application</string>
+				<key>includeInIndex</key>
+				<string>0</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>path</key>
+				<string>exampleDebug.app</string>
+				<key>sourceTree</key>
+				<string>BUILT_PRODUCTS_DIR</string>
+			</dict>
+			<key>E4B69B5F0A3A1757003C02F2</key>
+			<dict>
+				<key>buildConfigurations</key>
+				<array>
+					<string>E4B69B600A3A1757003C02F2</string>
+					<string>E4B69B610A3A1757003C02F2</string>
+					<string>99FA3DBC1C7456C400CFA0EE</string>
+				</array>
+				<key>defaultConfigurationIsVisible</key>
+				<string>0</string>
+				<key>defaultConfigurationName</key>
+				<string>Release</string>
+				<key>isa</key>
+				<string>XCConfigurationList</string>
+			</dict>
+			<key>E4B69B600A3A1757003C02F2</key>
+			<dict>
+				<key>baseConfigurationReference</key>
+				<string>E4EB6923138AFD0F00A09F29</string>
+				<key>buildSettings</key>
+				<dict>
+					<key>HEADER_SEARCH_PATHS</key>
+					<array>
+						<string>$(OF_CORE_HEADERS)</string>
+						<string>../../../addons/ofxPlotter/src</string>
+					</array>
+					<key>COMBINE_HIDPI_IMAGES</key>
+					<string>YES</string>
+					<key>COPY_PHASE_STRIP</key>
+					<string>NO</string>
+					<key>FRAMEWORK_SEARCH_PATHS</key>
+					<array>
+						<string>$(inherited)</string>
+						<string>$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)</string>
+					</array>
+					<key>FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1</key>
+					<string>"$(SRCROOT)/../../../libs/glut/lib/osx"</string>
+					<key>GCC_DYNAMIC_NO_PIC</key>
+					<string>NO</string>
+					<key>GCC_GENERATE_DEBUGGING_SYMBOLS</key>
+					<string>YES</string>
+					<key>GCC_MODEL_TUNING</key>
+					<string>NONE</string>
+					<key>ICON</key>
+					<string>$(ICON_NAME_DEBUG)</string>
+					<key>ICON_FILE</key>
+					<string>$(ICON_FILE_PATH)$(ICON)</string>
+					<key>INFOPLIST_FILE</key>
+					<string>openFrameworks-Info.plist</string>
+					<key>INSTALL_PATH</key>
+					<string>/Applications</string>
+					<key>LIBRARY_SEARCH_PATHS</key>
+					<string>$(inherited)</string>
+					<key>PRODUCT_NAME</key>
+					<string>$(TARGET_NAME)Debug</string>
+					<key>WRAPPER_EXTENSION</key>
+					<string>app</string>
+				</dict>
+				<key>isa</key>
+				<string>XCBuildConfiguration</string>
+				<key>name</key>
+				<string>Debug</string>
+			</dict>
+			<key>E4B69B610A3A1757003C02F2</key>
+			<dict>
+				<key>baseConfigurationReference</key>
+				<string>E4EB6923138AFD0F00A09F29</string>
+				<key>buildSettings</key>
+				<dict>
+					<key>HEADER_SEARCH_PATHS</key>
+					<array>
+						<string>$(OF_CORE_HEADERS)</string>
+						<string>../../../addons/ofxPlotter/src</string>
+					</array>
+					<key>COMBINE_HIDPI_IMAGES</key>
+					<string>YES</string>
+					<key>COPY_PHASE_STRIP</key>
+					<string>YES</string>
+					<key>FRAMEWORK_SEARCH_PATHS</key>
+					<array>
+						<string>$(inherited)</string>
+						<string>$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)</string>
+					</array>
+					<key>FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1</key>
+					<string>"$(SRCROOT)/../../../libs/glut/lib/osx"</string>
+					<key>GCC_GENERATE_DEBUGGING_SYMBOLS</key>
+					<string>YES</string>
+					<key>GCC_MODEL_TUNING</key>
+					<string>NONE</string>
+					<key>ICON</key>
+					<string>$(ICON_NAME_RELEASE)</string>
+					<key>ICON_FILE</key>
+					<string>$(ICON_FILE_PATH)$(ICON)</string>
+					<key>INFOPLIST_FILE</key>
+					<string>openFrameworks-Info.plist</string>
+					<key>INSTALL_PATH</key>
+					<string>/Applications</string>
+					<key>LIBRARY_SEARCH_PATHS</key>
+					<string>$(inherited)</string>
+					<key>PRODUCT_NAME</key>
+					<string>$(TARGET_NAME)</string>
+					<key>WRAPPER_EXTENSION</key>
+					<string>app</string>
+					<key>baseConfigurationReference</key>
+					<string>E4EB6923138AFD0F00A09F29</string>
+				</dict>
+				<key>isa</key>
+				<string>XCBuildConfiguration</string>
+				<key>name</key>
+				<string>Release</string>
+			</dict>
+			<key>E4B69E1C0A3A1BDC003C02F2</key>
+			<dict>
+				<key>children</key>
+				<array>
+					<string>E4B69E1D0A3A1BDC003C02F2</string>
+					<string>E4B69E1E0A3A1BDC003C02F2</string>
+					<string>E4B69E1F0A3A1BDC003C02F2</string>
+				</array>
+				<key>isa</key>
+				<string>PBXGroup</string>
+				<key>path</key>
+				<string>src</string>
+				<key>sourceTree</key>
+				<string>SOURCE_ROOT</string>
+			</dict>
+			<key>E4B69E1D0A3A1BDC003C02F2</key>
+			<dict>
+				<key>fileEncoding</key>
+				<string>30</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>lastKnownFileType</key>
+				<string>sourcecode.cpp.cpp</string>
+				<key>name</key>
+				<string>main.cpp</string>
+				<key>path</key>
+				<string>src/main.cpp</string>
+				<key>sourceTree</key>
+				<string>SOURCE_ROOT</string>
+			</dict>
+			<key>E4B69E1E0A3A1BDC003C02F2</key>
+			<dict>
+				<key>explicitFileType</key>
+				<string>sourcecode.cpp.cpp</string>
+				<key>fileEncoding</key>
+				<string>30</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>name</key>
+				<string>ofApp.cpp</string>
+				<key>path</key>
+				<string>src/ofApp.cpp</string>
+				<key>sourceTree</key>
+				<string>SOURCE_ROOT</string>
+			</dict>
+			<key>E4B69E1F0A3A1BDC003C02F2</key>
+			<dict>
+				<key>fileEncoding</key>
+				<string>30</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>lastKnownFileType</key>
+				<string>sourcecode.c.h</string>
+				<key>name</key>
+				<string>ofApp.h</string>
+				<key>path</key>
+				<string>src/ofApp.h</string>
+				<key>sourceTree</key>
+				<string>SOURCE_ROOT</string>
+			</dict>
+			<key>E4B69E200A3A1BDC003C02F2</key>
+			<dict>
+				<key>fileRef</key>
+				<string>E4B69E1D0A3A1BDC003C02F2</string>
+				<key>isa</key>
+				<string>PBXBuildFile</string>
+			</dict>
+			<key>E4B69E210A3A1BDC003C02F2</key>
+			<dict>
+				<key>fileRef</key>
+				<string>E4B69E1E0A3A1BDC003C02F2</string>
+				<key>isa</key>
+				<string>PBXBuildFile</string>
+			</dict>
+			<key>E4B6FCAD0C3E899E008CF71C</key>
+			<dict>
+				<key>fileEncoding</key>
+				<string>30</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>lastKnownFileType</key>
+				<string>text.plist.xml</string>
+				<key>path</key>
+				<string>openFrameworks-Info.plist</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+			<key>E4B6FFFD0C3F9AB9008CF71C</key>
+			<dict>
+				<key>buildActionMask</key>
+				<string>2147483647</string>
+				<key>files</key>
+				<array />
+				<key>inputPaths</key>
+				<array />
+				<key>isa</key>
+				<string>PBXShellScriptBuildPhase</string>
+				<key>outputPaths</key>
+				<array />
+				<key>runOnlyForDeploymentPostprocessing</key>
+				<string>0</string>
+				<key>shellPath</key>
+				<string>/bin/sh</string>
+				<key>shellScript</key>
+				<string>mkdir -p "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/"
+# Copy default icon file into App/Resources
+rsync -aved "$ICON_FILE" "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/"
+# Copy libfmod and change install directory for fmod to run
+rsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/";
+install_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME";
+
+echo "$GCC_PREPROCESSOR_DEFINITIONS";
+APPSTORE=`expr "$GCC_PREPROCESSOR_DEFINITIONS" : ".*APPSTORE=\([0-9]*\)"`
+if [ -z "${APPSTORE}" ] ; then
+echo "Copying GLUT framework";
+# Copy GLUT framework (must remove for AppStore submissions)
+rsync -aved ../../../libs/glut/lib/osx/GLUT.framework "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/"
+else
+echo "Not including GLUT";
+fi
+</string>
+			</dict>
+			<key>E4C2427710CC5ABF004149E2</key>
+			<dict>
+				<key>buildActionMask</key>
+				<string>2147483647</string>
+				<key>dstPath</key>
+				<string />
+				<key>dstSubfolderSpec</key>
+				<string>10</string>
+				<key>files</key>
+				<array />
+				<key>isa</key>
+				<string>PBXCopyFilesBuildPhase</string>
+				<key>runOnlyForDeploymentPostprocessing</key>
+				<string>0</string>
+			</dict>
+			<key>E4EB691F138AFCF100A09F29</key>
+			<dict>
+				<key>fileEncoding</key>
+				<string>4</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>lastKnownFileType</key>
+				<string>text.xcconfig</string>
+				<key>name</key>
+				<string>CoreOF.xcconfig</string>
+				<key>path</key>
+				<string>../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig</string>
+				<key>sourceTree</key>
+				<string>SOURCE_ROOT</string>
+			</dict>
+			<key>E4EB6923138AFD0F00A09F29</key>
+			<dict>
+				<key>fileEncoding</key>
+				<string>4</string>
+				<key>isa</key>
+				<string>PBXFileReference</string>
+				<key>lastKnownFileType</key>
+				<string>text.xcconfig</string>
+				<key>path</key>
+				<string>Project.xcconfig</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+			<key>E4EEB9AB138B136A00A80321</key>
+			<dict>
+				<key>containerPortal</key>
+				<string>E4328143138ABC890047C5CB</string>
+				<key>isa</key>
+				<string>PBXContainerItemProxy</string>
+				<key>proxyType</key>
+				<string>1</string>
+				<key>remoteGlobalIDString</key>
+				<string>E4B27C1410CBEB8E00536013</string>
+				<key>remoteInfo</key>
+				<string>openFrameworks</string>
+			</dict>
+			<key>E4EEB9AC138B136A00A80321</key>
+			<dict>
+				<key>isa</key>
+				<string>PBXTargetDependency</string>
+				<key>name</key>
+				<string>openFrameworks</string>
+				<key>targetProxy</key>
+				<string>E4EEB9AB138B136A00A80321</string>
+			</dict>
+			<key>E4EEC9E9138DF44700A80321</key>
+			<dict>
+				<key>children</key>
+				<array>
+					<string>E4EB691F138AFCF100A09F29</string>
+					<string>E4328143138ABC890047C5CB</string>
+				</array>
+				<key>isa</key>
+				<string>PBXGroup</string>
+				<key>name</key>
+				<string>openFrameworks</string>
+				<key>sourceTree</key>
+				<string>&lt;group&gt;</string>
+			</dict>
+		</dict>
+		<key>rootObject</key>
+		<string>E4B69B4C0A3A1720003C02F2</string>
+	</dict>
+</plist>

+ 7 - 0
example/example.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:">
+   </FileRef>
+</Workspace>

+ 30 - 0
example/example.xcodeproj/project.xcworkspace/xcshareddata/example.xcscmblueprint

@@ -0,0 +1,30 @@
+{
+  "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "6946F9FFB8E67B54642DD2DB4F513BECB5F80264",
+  "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
+
+  },
+  "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
+    "2DE9C8846D9375EAACFABA8963120E8E7719BAF5" : 0,
+    "6946F9FFB8E67B54642DD2DB4F513BECB5F80264" : 0
+  },
+  "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "5E23FD7E-BC89-40D9-8DCD-5569460194BE",
+  "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
+    "2DE9C8846D9375EAACFABA8963120E8E7719BAF5" : "..",
+    "6946F9FFB8E67B54642DD2DB4F513BECB5F80264" : "ofxPlotter\/"
+  },
+  "DVTSourceControlWorkspaceBlueprintNameKey" : "example",
+  "DVTSourceControlWorkspaceBlueprintVersion" : 204,
+  "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "example\/example.xcodeproj",
+  "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
+    {
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/openframeworks\/openFrameworks.git",
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "2DE9C8846D9375EAACFABA8963120E8E7719BAF5"
+    },
+    {
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/yeswecan\/ofxPlotter.git",
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6946F9FFB8E67B54642DD2DB4F513BECB5F80264"
+    }
+  ]
+}

BIN=BIN
example/example.xcodeproj/project.xcworkspace/xcuserdata/zebra.xcuserdatad/UserInterfaceState.xcuserstate


+ 86 - 0
example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0600"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+               BuildableName = "example.app"
+               BlueprintName = "example"
+               ReferencedContainer = "container:example.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+            BuildableName = "example.app"
+            BlueprintName = "example"
+            ReferencedContainer = "container:example.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Debug"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+            BuildableName = "example.app"
+            BlueprintName = "example"
+            ReferencedContainer = "container:example.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Debug"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+            BuildableName = "example.app"
+            BlueprintName = "example"
+            ReferencedContainer = "container:example.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Debug"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 86 - 0
example/example.xcodeproj/xcshareddata/xcschemes/example Release.xcscheme

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0600"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+               BuildableName = "example.app"
+               BlueprintName = "example"
+               ReferencedContainer = "container:example.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Release">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+            BuildableName = "example.app"
+            BlueprintName = "example"
+            ReferencedContainer = "container:example.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+            BuildableName = "example.app"
+            BlueprintName = "example"
+            ReferencedContainer = "container:example.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+            BuildableName = "example.app"
+            BlueprintName = "example"
+            ReferencedContainer = "container:example.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Release">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 14 - 0
example/example.xcodeproj/xcuserdata/zebra.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict>
+		<key>E4B69B5A0A3A1756003C02F2</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 22 - 0
example/openFrameworks-Info.plist

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIdentifier</key>
+	<string>cc.openFrameworks.ofapp</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>CFBundleIconFile</key>
+	<string>${ICON}</string>
+</dict>
+</plist>

+ 13 - 0
example/src/main.cpp

@@ -0,0 +1,13 @@
+#include "ofMain.h"
+#include "ofApp.h"
+
+//========================================================================
+int main( ){
+	ofSetupOpenGL(1024,768,OF_WINDOW);			// <-------- setup the GL context
+
+	// this kicks off the running of my app
+	// can be OF_WINDOW or OF_FULLSCREEN
+	// pass in width and height too:
+	ofRunApp(new ofApp());
+
+}

+ 22 - 0
example/src/ofApp.cpp

@@ -0,0 +1,22 @@
+#include "ofApp.h"
+
+//--------------------------------------------------------------
+void ofApp::setup(){
+    plotter.setWindowSize(2000);
+}
+
+//--------------------------------------------------------------
+void ofApp::update(){
+    plotter["sin1"] << sin(ofGetElapsedTimef() * 1);
+    plotter["sin2"] << sin(ofGetElapsedTimef() * 4);
+    plotter["sin3"] << sin(ofGetElapsedTimef() * 8);
+    
+}
+
+//--------------------------------------------------------------
+void ofApp::draw(){
+    plotter.draw(0, 0, ofGetWidth(), ofGetHeight());
+    
+    
+}
+

+ 16 - 0
example/src/ofApp.h

@@ -0,0 +1,16 @@
+#pragma once
+
+#include "ofMain.h"
+#include "ofxPlotter.h"
+
+class ofApp : public ofBaseApp{
+
+	public:
+		void setup();
+		void update();
+		void draw();
+
+		
+    ofxPlotter plotter;
+    
+};