From 05604fd4dab00a2ed8cb166c8d2fb2c7d9dddf43 Mon Sep 17 00:00:00 2001
From: scoliono <2191476+scoliono@users.noreply.github.com>
Date: Thu, 8 Apr 2021 10:27:51 -0700
Subject: [PATCH] initial commit

---
 .gitignore                                    | 364 ++++++++++
 FemboyGeometry.sln                            |  20 +
 FemboyGeometry/FemboyGeometry.cpp             |  62 ++
 FemboyGeometry/FemboyGeometry.vcxproj         |  78 +++
 FemboyGeometry/FemboyGeometry.vcxproj.filters |  22 +
 thirdparty/freeglut/Copying.txt               |  27 +
 thirdparty/freeglut/Readme.txt                | 106 +++
 thirdparty/freeglut/include/GL/freeglut.h     |  22 +
 thirdparty/freeglut/include/GL/freeglut_ext.h | 271 ++++++++
 thirdparty/freeglut/include/GL/freeglut_std.h | 638 ++++++++++++++++++
 thirdparty/freeglut/include/GL/glut.h         |  21 +
 thirdparty/freeglut/lib/freeglut.lib          | Bin 0 -> 39732 bytes
 12 files changed, 1631 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 FemboyGeometry.sln
 create mode 100644 FemboyGeometry/FemboyGeometry.cpp
 create mode 100644 FemboyGeometry/FemboyGeometry.vcxproj
 create mode 100644 FemboyGeometry/FemboyGeometry.vcxproj.filters
 create mode 100644 thirdparty/freeglut/Copying.txt
 create mode 100644 thirdparty/freeglut/Readme.txt
 create mode 100644 thirdparty/freeglut/include/GL/freeglut.h
 create mode 100644 thirdparty/freeglut/include/GL/freeglut_ext.h
 create mode 100644 thirdparty/freeglut/include/GL/freeglut_std.h
 create mode 100644 thirdparty/freeglut/include/GL/glut.h
 create mode 100644 thirdparty/freeglut/lib/freeglut.lib

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ee02846
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,364 @@
+dist/
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
diff --git a/FemboyGeometry.sln b/FemboyGeometry.sln
new file mode 100644
index 0000000..b99776b
--- /dev/null
+++ b/FemboyGeometry.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FemboyGeometry", "FemboyGeometry\FemboyGeometry.vcxproj", "{23F4B47A-7836-427C-A7CD-6D430B3DE504}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{23F4B47A-7836-427C-A7CD-6D430B3DE504}.Debug|Win32.ActiveCfg = Debug|Win32
+		{23F4B47A-7836-427C-A7CD-6D430B3DE504}.Debug|Win32.Build.0 = Debug|Win32
+		{23F4B47A-7836-427C-A7CD-6D430B3DE504}.Release|Win32.ActiveCfg = Release|Win32
+		{23F4B47A-7836-427C-A7CD-6D430B3DE504}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/FemboyGeometry/FemboyGeometry.cpp b/FemboyGeometry/FemboyGeometry.cpp
new file mode 100644
index 0000000..377e135
--- /dev/null
+++ b/FemboyGeometry/FemboyGeometry.cpp
@@ -0,0 +1,62 @@
+#include <iostream>
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+#include <gl/GL.h>
+#include <gl/GLU.h>
+#include <gl/GLUT.h>
+
+
+void display(void)
+{
+/*  clear all pixels  */
+    glClear (GL_COLOR_BUFFER_BIT);
+
+/*  draw white polygon (rectangle) with corners at
+ *  (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)  
+ */
+    glColor3f (1.0, 1.0, 1.0);
+    glBegin(GL_POLYGON);
+        glVertex3f (0.25, 0.25, 0.0);
+        glVertex3f (0.75, 0.25, 0.0);
+        glVertex3f (0.75, 0.75, 0.0);
+        glVertex3f (0.25, 0.75, 0.0);
+    glEnd();
+
+/*  don't wait!  
+ *  start processing buffered OpenGL routines 
+ */
+    glFlush ();
+}
+
+void init (void) 
+{
+/*  select clearing (background) color       */
+    glClearColor (0.0, 0.0, 0.0, 0.0);
+
+/*  initialize viewing values  */
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
+}
+
+/* 
+ *  Declare initial window size, position, and display mode
+ *  (single buffer and RGBA).  Open window with "hello"
+ *  in its title bar.  Call initialization routines.
+ *  Register callback function to display graphics.
+ *  Enter main loop and process events.
+ */
+int main(int argc, char** argv)
+{
+    glutInit(&argc, argv);
+    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
+    glutInitWindowSize (250, 250); 
+    glutInitWindowPosition (100, 100);
+    glutCreateWindow ("hello");
+    init ();
+    glutDisplayFunc(display); 
+    glutMainLoop();
+    return 0;   /* ISO C requires main to return int. */
+}
diff --git a/FemboyGeometry/FemboyGeometry.vcxproj b/FemboyGeometry/FemboyGeometry.vcxproj
new file mode 100644
index 0000000..b42022b
--- /dev/null
+++ b/FemboyGeometry/FemboyGeometry.vcxproj
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{23F4B47A-7836-427C-A7CD-6D430B3DE504}</ProjectGuid>
+    <RootNamespace>FemboyGeometry</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup />
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(SolutionDir)thirdparty\freeglut\include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(SolutionDir)thirdparty\freeglut\lib</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy /y /d  "$(SolutionDir)thirdparty\freeglut\bin\*.dll" "$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>$(SolutionDir)thirdparty\freeglut\include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(SolutionDir)thirdparty\freeglut\lib</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy /y /d  "$(ProjectDir)thirdparty\freeglut\bin\*.dll" "$(ProjectDir)$(OutDir)"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="FemboyGeometry.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/FemboyGeometry/FemboyGeometry.vcxproj.filters b/FemboyGeometry/FemboyGeometry.vcxproj.filters
new file mode 100644
index 0000000..a362d5b
--- /dev/null
+++ b/FemboyGeometry/FemboyGeometry.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="FemboyGeometry.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/thirdparty/freeglut/Copying.txt b/thirdparty/freeglut/Copying.txt
new file mode 100644
index 0000000..fc36ad9
--- /dev/null
+++ b/thirdparty/freeglut/Copying.txt
@@ -0,0 +1,27 @@
+
+  Freeglut Copyright
+  ------------------
+  
+  Freeglut code without an explicit copyright is covered by the following 
+  copyright:
+  
+  Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
+  Permission is hereby granted, free of charge,  to any person obtaining a copy 
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction,  including without limitation the rights 
+  to use, copy,  modify, merge,  publish, distribute,  sublicense,  and/or sell 
+  copies or substantial portions of the Software.
+  
+  The above  copyright notice  and this permission notice  shall be included in 
+  all copies or substantial portions of the Software.
+  
+  THE SOFTWARE  IS PROVIDED "AS IS",  WITHOUT WARRANTY OF ANY KIND,  EXPRESS OR 
+  IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO THE WARRANTIES  OF MERCHANTABILITY, 
+  FITNESS  FOR  A PARTICULAR PURPOSE  AND NONINFRINGEMENT.  IN  NO EVENT  SHALL 
+  PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM,  DAMAGES OR OTHER LIABILITY, WHETHER 
+  IN  AN ACTION  OF CONTRACT,  TORT OR OTHERWISE,  ARISING FROM,  OUT OF  OR IN 
+  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+  
+  Except as contained in this notice,  the name of Pawel W. Olszta shall not be 
+  used  in advertising  or otherwise to promote the sale, use or other dealings 
+  in this Software without prior written authorization from Pawel W. Olszta.
diff --git a/thirdparty/freeglut/Readme.txt b/thirdparty/freeglut/Readme.txt
new file mode 100644
index 0000000..39d90b6
--- /dev/null
+++ b/thirdparty/freeglut/Readme.txt
@@ -0,0 +1,106 @@
+freeglut 3.0.0-1.mp for MSVC
+
+This package contains freeglut import libraries, headers, and Windows DLLs.
+These allow 32 and 64 bit GLUT applications to be compiled on Windows using
+Microsoft Visual C++.
+
+For more information on freeglut, visit http://freeglut.sourceforge.net/.
+
+
+Installation
+
+Create a folder on your PC which is readable by all users, for example
+�C:\Program Files\Common Files\MSVC\freeglut\� on a typical Windows system. Copy
+the �lib\� and �include\� folders from this zip archive to that location.
+
+The appropriate freeglut DLL can either be placed in the same folder as your
+application, or can be installed in a system-wide folder which appears in your
+%PATH% environment variable. Be careful not to mix the 32 bit DLL up with the 64
+bit DLL, as they are not interchangeable.
+
+
+Compiling 32 bit Applications
+
+To create a 32 bit freeglut application, create a new Win32 C++ project in MSVC.
+From the �Win32 Application Wizard�, choose a �Windows application�, check the
+�Empty project� box, and submit.
+
+You�ll now need to configure the compiler and linker settings. Open up the
+project properties, and select �All Configurations� (this is necessary to ensure
+our changes are applied for both debug and release builds). Open up the
+�general� section under �C/C++�, and configure the �include\� folder you created
+above as an �Additional Include Directory�. If you have more than one GLUT
+package which contains a �glut.h� file, it�s important to ensure that the
+freeglut include folder appears above all other GLUT include folders.
+
+Now open up the �general� section under �Linker�, and configure the �lib\�
+folder you created above as an �Additional Library Directory�. A freeglut
+application depends on the import libraries �freeglut.lib� and �opengl32.lib�,
+which can be configured under the �Input� section. However, it shouldn�t be
+necessary to explicitly state these dependencies, since the freeglut headers
+handle this for you. Now open the �Advanced� section, and enter �mainCRTStartup�
+as the �Entry Point� for your application. This is necessary because GLUT
+applications use �main� as the application entry point, not �WinMain��without it
+you�ll get an undefined reference when you try to link your application.
+
+That�s all of your project properties configured, so you can now add source
+files to your project and build the application. If you want your application to
+be compatible with GLUT, you should �#include <GL/glut.h>�. If you want to use
+freeglut specific extensions, you should �#include <GL/freeglut.h>� instead.
+
+Don�t forget to either include the freeglut DLL when distributing applications,
+or provide your users with some method of obtaining it if they don�t already
+have it!
+
+
+Compiling 64 bit Applications
+
+Building 64 bit applications is almost identical to building 32 bit applications.
+When you use the configuration manager to add the x64 platform, it�s easiest to
+copy the settings from the Win32 platform. If you do so, it�s then only necessary
+to change the �Additional Library Directories� configuration so that it
+references the directory containing the 64 bit import library rather
+than the 32 bit one.
+
+
+Problems?
+
+If you have problems using this package (compiler / linker errors etc.), please
+check that you have followed all of the steps in this readme file correctly.
+Almost all of the problems which are reported with these packages are due to
+missing a step or not doing it correctly, for example trying to build a 32 bit
+app against the 64 bit import library. If you have followed all of the steps
+correctly but your application still fails to build, try building a very simple
+but functional program (the example at
+http://www.transmissionzero.co.uk/computing/using-glut-with-mingw/ works fine
+with MSVC). A lot of people try to build very complex applications after
+installing these packages, and often the error is with the application code or
+other library dependencies rather than freeglut.
+
+If you still can�t get it working after trying to compile a simple application,
+then please get in touch via http://www.transmissionzero.co.uk/contact/,
+providing as much detail as you can. Please don�t complain to the freeglut guys
+unless you�re sure it�s a freeglut bug, and have reproduced the issue after
+compiling freeglut from the latest SVN version�if that�s still the case, I�m
+sure they would appreciate a bug report or a patch.
+
+
+Changelog
+
+2015�07�22: Release 3.0.0-2.mp
+
+  � Modified the freeglut_std.h file so that it doesn�t try to link against the
+    freeglutd.lib import library.
+
+2015�03�15: Release 3.0.0-1.mp
+
+  � First 3.0.0 MSVC release. I�ve built the package using Visual Studio 2013,
+    and the only change I�ve made is to the DLL version resource�I�ve changed
+    the description so that my MinGW and MSVC builds are distinguishable from
+    each other (and other builds) using Windows Explorer.
+
+
+Transmission Zero
+2015�07�22
+
+http://www.transmissionzero.co.uk/
diff --git a/thirdparty/freeglut/include/GL/freeglut.h b/thirdparty/freeglut/include/GL/freeglut.h
new file mode 100644
index 0000000..0e6f8c6
--- /dev/null
+++ b/thirdparty/freeglut/include/GL/freeglut.h
@@ -0,0 +1,22 @@
+#ifndef  __FREEGLUT_H__
+#define  __FREEGLUT_H__
+
+/*
+ * freeglut.h
+ *
+ * The freeglut library include file
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "freeglut_std.h"
+#include "freeglut_ext.h"
+
+/*** END OF FILE ***/
+
+#endif /* __FREEGLUT_H__ */
diff --git a/thirdparty/freeglut/include/GL/freeglut_ext.h b/thirdparty/freeglut/include/GL/freeglut_ext.h
new file mode 100644
index 0000000..0c22c4f
--- /dev/null
+++ b/thirdparty/freeglut/include/GL/freeglut_ext.h
@@ -0,0 +1,271 @@
+#ifndef  __FREEGLUT_EXT_H__
+#define  __FREEGLUT_EXT_H__
+
+/*
+ * freeglut_ext.h
+ *
+ * The non-GLUT-compatible extensions to the freeglut library include file
+ *
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>
+ * Creation date: Thu Dec 2 1999
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifdef __cplusplus
+    extern "C" {
+#endif
+
+/*
+ * Additional GLUT Key definitions for the Special key function
+ */
+#define GLUT_KEY_NUM_LOCK           0x006D
+#define GLUT_KEY_BEGIN              0x006E
+#define GLUT_KEY_DELETE             0x006F
+#define GLUT_KEY_SHIFT_L            0x0070
+#define GLUT_KEY_SHIFT_R            0x0071
+#define GLUT_KEY_CTRL_L             0x0072
+#define GLUT_KEY_CTRL_R             0x0073
+#define GLUT_KEY_ALT_L              0x0074
+#define GLUT_KEY_ALT_R              0x0075
+
+/*
+ * GLUT API Extension macro definitions -- behaviour when the user clicks on an "x" to close a window
+ */
+#define GLUT_ACTION_EXIT                         0
+#define GLUT_ACTION_GLUTMAINLOOP_RETURNS         1
+#define GLUT_ACTION_CONTINUE_EXECUTION           2
+
+/*
+ * Create a new rendering context when the user opens a new window?
+ */
+#define GLUT_CREATE_NEW_CONTEXT                  0
+#define GLUT_USE_CURRENT_CONTEXT                 1
+
+/*
+ * Direct/Indirect rendering context options (has meaning only in Unix/X11)
+ */
+#define GLUT_FORCE_INDIRECT_CONTEXT              0
+#define GLUT_ALLOW_DIRECT_CONTEXT                1
+#define GLUT_TRY_DIRECT_CONTEXT                  2
+#define GLUT_FORCE_DIRECT_CONTEXT                3
+
+/*
+ * GLUT API Extension macro definitions -- the glutGet parameters
+ */
+#define  GLUT_INIT_STATE                    0x007C
+
+#define  GLUT_ACTION_ON_WINDOW_CLOSE        0x01F9
+
+#define  GLUT_WINDOW_BORDER_WIDTH           0x01FA
+#define  GLUT_WINDOW_BORDER_HEIGHT          0x01FB
+#define  GLUT_WINDOW_HEADER_HEIGHT          0x01FB  /* Docs say it should always have been GLUT_WINDOW_BORDER_HEIGHT, keep this for backward compatibility */
+
+#define  GLUT_VERSION                       0x01FC
+
+#define  GLUT_RENDERING_CONTEXT             0x01FD
+#define  GLUT_DIRECT_RENDERING              0x01FE
+
+#define  GLUT_FULL_SCREEN                   0x01FF
+
+#define  GLUT_SKIP_STALE_MOTION_EVENTS      0x0204
+
+#define  GLUT_GEOMETRY_VISUALIZE_NORMALS    0x0205
+
+#define  GLUT_STROKE_FONT_DRAW_JOIN_DOTS    0x0206  /* Draw dots between line segments of stroke fonts? */
+
+/*
+ * New tokens for glutInitDisplayMode.
+ * Only one GLUT_AUXn bit may be used at a time.
+ * Value 0x0400 is defined in OpenGLUT.
+ */
+#define  GLUT_AUX                           0x1000
+
+#define  GLUT_AUX1                          0x1000
+#define  GLUT_AUX2                          0x2000
+#define  GLUT_AUX3                          0x4000
+#define  GLUT_AUX4                          0x8000
+
+/*
+ * Context-related flags, see fg_state.c
+ * Set the requested OpenGL version
+ */
+#define  GLUT_INIT_MAJOR_VERSION            0x0200
+#define  GLUT_INIT_MINOR_VERSION            0x0201
+#define  GLUT_INIT_FLAGS                    0x0202
+#define  GLUT_INIT_PROFILE                  0x0203
+
+/*
+ * Flags for glutInitContextFlags, see fg_init.c
+ */
+#define  GLUT_DEBUG                         0x0001
+#define  GLUT_FORWARD_COMPATIBLE            0x0002
+
+
+/*
+ * Flags for glutInitContextProfile, see fg_init.c
+ */
+#define GLUT_CORE_PROFILE                   0x0001
+#define	GLUT_COMPATIBILITY_PROFILE          0x0002
+
+/*
+ * Process loop function, see fg_main.c
+ */
+FGAPI void    FGAPIENTRY glutMainLoopEvent( void );
+FGAPI void    FGAPIENTRY glutLeaveMainLoop( void );
+FGAPI void    FGAPIENTRY glutExit         ( void );
+
+/*
+ * Window management functions, see fg_window.c
+ */
+FGAPI void    FGAPIENTRY glutFullScreenToggle( void );
+FGAPI void    FGAPIENTRY glutLeaveFullScreen( void );
+
+/*
+ * Menu functions
+ */
+FGAPI void    FGAPIENTRY glutSetMenuFont( int menuID, void* font );
+
+/*
+ * Window-specific callback functions, see fg_callbacks.c
+ */
+FGAPI void    FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) );
+FGAPI void    FGAPIENTRY glutPositionFunc( void (* callback)( int, int ) );
+FGAPI void    FGAPIENTRY glutCloseFunc( void (* callback)( void ) );
+FGAPI void    FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) );
+/* And also a destruction callback for menus */
+FGAPI void    FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) );
+
+/*
+ * State setting and retrieval functions, see fg_state.c
+ */
+FGAPI void    FGAPIENTRY glutSetOption ( GLenum option_flag, int value );
+FGAPI int *   FGAPIENTRY glutGetModeValues(GLenum mode, int * size);
+/* A.Donev: User-data manipulation */
+FGAPI void*   FGAPIENTRY glutGetWindowData( void );
+FGAPI void    FGAPIENTRY glutSetWindowData(void* data);
+FGAPI void*   FGAPIENTRY glutGetMenuData( void );
+FGAPI void    FGAPIENTRY glutSetMenuData(void* data);
+
+/*
+ * Font stuff, see fg_font.c
+ */
+FGAPI int     FGAPIENTRY glutBitmapHeight( void* font );
+FGAPI GLfloat FGAPIENTRY glutStrokeHeight( void* font );
+FGAPI void    FGAPIENTRY glutBitmapString( void* font, const unsigned char *string );
+FGAPI void    FGAPIENTRY glutStrokeString( void* font, const unsigned char *string );
+
+/*
+ * Geometry functions, see fg_geometry.c
+ */
+FGAPI void    FGAPIENTRY glutWireRhombicDodecahedron( void );
+FGAPI void    FGAPIENTRY glutSolidRhombicDodecahedron( void );
+FGAPI void    FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, double offset[3], double scale );
+FGAPI void    FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, double offset[3], double scale );
+FGAPI void    FGAPIENTRY glutWireCylinder( double radius, double height, GLint slices, GLint stacks);
+FGAPI void    FGAPIENTRY glutSolidCylinder( double radius, double height, GLint slices, GLint stacks);
+
+/*
+ * Rest of functions for rendering Newell's teaset, found in fg_teapot.c
+ * NB: front facing polygons have clockwise winding, not counter clockwise
+ */
+FGAPI void    FGAPIENTRY glutWireTeacup( double size );
+FGAPI void    FGAPIENTRY glutSolidTeacup( double size );
+FGAPI void    FGAPIENTRY glutWireTeaspoon( double size );
+FGAPI void    FGAPIENTRY glutSolidTeaspoon( double size );
+
+/*
+ * Extension functions, see fg_ext.c
+ */
+typedef void (*GLUTproc)();
+FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName );
+
+/*
+ * Multi-touch/multi-pointer extensions
+ */
+
+#define GLUT_HAS_MULTI 1
+
+/* TODO: add device_id parameter,
+   cf. http://sourceforge.net/mailarchive/forum.php?thread_name=20120518071314.GA28061%40perso.beuc.net&forum_name=freeglut-developer */
+FGAPI void FGAPIENTRY glutMultiEntryFunc( void (* callback)( int, int ) );
+FGAPI void FGAPIENTRY glutMultiButtonFunc( void (* callback)( int, int, int, int, int ) );
+FGAPI void FGAPIENTRY glutMultiMotionFunc( void (* callback)( int, int, int ) );
+FGAPI void FGAPIENTRY glutMultiPassiveFunc( void (* callback)( int, int, int ) );
+
+/*
+ * Joystick functions, see fg_joystick.c
+ */
+/* USE OF THESE FUNCTIONS IS DEPRECATED !!!!! */
+/* If you have a serious need for these functions in your application, please either
+ * contact the "freeglut" developer community at freeglut-developer@lists.sourceforge.net,
+ * switch to the OpenGLUT library, or else port your joystick functionality over to PLIB's
+ * "js" library.
+ */
+int     glutJoystickGetNumAxes( int ident );
+int     glutJoystickGetNumButtons( int ident );
+int     glutJoystickNotWorking( int ident );
+float   glutJoystickGetDeadBand( int ident, int axis );
+void    glutJoystickSetDeadBand( int ident, int axis, float db );
+float   glutJoystickGetSaturation( int ident, int axis );
+void    glutJoystickSetSaturation( int ident, int axis, float st );
+void    glutJoystickSetMinRange( int ident, float *axes );
+void    glutJoystickSetMaxRange( int ident, float *axes );
+void    glutJoystickSetCenter( int ident, float *axes );
+void    glutJoystickGetMinRange( int ident, float *axes );
+void    glutJoystickGetMaxRange( int ident, float *axes );
+void    glutJoystickGetCenter( int ident, float *axes );
+
+/*
+ * Initialization functions, see fg_init.c
+ */
+/* to get the typedef for va_list */
+#include <stdarg.h>
+FGAPI void    FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion );
+FGAPI void    FGAPIENTRY glutInitContextFlags( int flags );
+FGAPI void    FGAPIENTRY glutInitContextProfile( int profile );
+FGAPI void    FGAPIENTRY glutInitErrorFunc( void (* callback)( const char *fmt, va_list ap ) );
+FGAPI void    FGAPIENTRY glutInitWarningFunc( void (* callback)( const char *fmt, va_list ap ) );
+
+/* OpenGL >= 2.0 support */
+FGAPI void    FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib);
+FGAPI void    FGAPIENTRY glutSetVertexAttribNormal(GLint attrib);
+FGAPI void    FGAPIENTRY glutSetVertexAttribTexCoord2(GLint attrib);
+
+/* Mobile platforms lifecycle */
+FGAPI void    FGAPIENTRY glutInitContextFunc(void (* callback)());
+FGAPI void    FGAPIENTRY glutAppStatusFunc(void (* callback)(int));
+/* state flags that can be passed to callback set by glutAppStatusFunc */
+#define GLUT_APPSTATUS_PAUSE                0x0001
+#define GLUT_APPSTATUS_RESUME               0x0002
+
+/*
+ * GLUT API macro definitions -- the display mode definitions
+ */
+#define  GLUT_CAPTIONLESS                   0x0400
+#define  GLUT_BORDERLESS                    0x0800
+#define  GLUT_SRGB                          0x1000
+
+#ifdef __cplusplus
+    }
+#endif
+
+/*** END OF FILE ***/
+
+#endif /* __FREEGLUT_EXT_H__ */
diff --git a/thirdparty/freeglut/include/GL/freeglut_std.h b/thirdparty/freeglut/include/GL/freeglut_std.h
new file mode 100644
index 0000000..55539e5
--- /dev/null
+++ b/thirdparty/freeglut/include/GL/freeglut_std.h
@@ -0,0 +1,638 @@
+#ifndef  __FREEGLUT_STD_H__
+#define  __FREEGLUT_STD_H__
+
+/*
+ * freeglut_std.h
+ *
+ * The GLUT-compatible part of the freeglut library include file
+ *
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>
+ * Creation date: Thu Dec 2 1999
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifdef __cplusplus
+    extern "C" {
+#endif
+
+/*
+ * Under windows, we have to differentiate between static and dynamic libraries
+ */
+#ifdef _WIN32
+/* #pragma may not be supported by some compilers.
+ * Discussion by FreeGLUT developers suggests that
+ * Visual C++ specific code involving pragmas may
+ * need to move to a separate header.  24th Dec 2003
+ */
+
+/* Define FREEGLUT_LIB_PRAGMAS to 1 to include library
+ * pragmas or to 0 to exclude library pragmas.
+ * The default behavior depends on the compiler/platform.
+ */
+#   ifndef FREEGLUT_LIB_PRAGMAS
+#       if ( defined(_MSC_VER) || defined(__WATCOMC__) ) && !defined(_WIN32_WCE)
+#           define FREEGLUT_LIB_PRAGMAS 1
+#       else
+#           define FREEGLUT_LIB_PRAGMAS 0
+#       endif
+#   endif
+
+#  ifndef WIN32_LEAN_AND_MEAN
+#    define WIN32_LEAN_AND_MEAN 1
+#  endif
+#  ifndef NOMINMAX
+#    define NOMINMAX
+#  endif
+#   include <windows.h>
+
+/* Windows static library */
+#   ifdef FREEGLUT_STATIC
+
+#error Static linking is not supported with this build. Please remove the FREEGLUT_STATIC preprocessor directive, or download the source code from http://freeglut.sf.net/ and build against that.
+
+/* Windows shared library (DLL) */
+#   else
+
+#       define FGAPIENTRY __stdcall
+#       if defined(FREEGLUT_EXPORTS)
+#           define FGAPI __declspec(dllexport)
+#       else
+#           define FGAPI __declspec(dllimport)
+
+            /* Link with Win32 shared freeglut lib */
+#           if FREEGLUT_LIB_PRAGMAS
+#             pragma comment (lib, "freeglut.lib")
+#           endif
+
+#       endif
+
+#   endif
+
+/* Drag in other Windows libraries as required by FreeGLUT */
+#   if FREEGLUT_LIB_PRAGMAS
+#       pragma comment (lib, "glu32.lib")    /* link OpenGL Utility lib     */
+#       pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib   */
+#       pragma comment (lib, "gdi32.lib")    /* link Windows GDI lib        */
+#       pragma comment (lib, "winmm.lib")    /* link Windows MultiMedia lib */
+#       pragma comment (lib, "user32.lib")   /* link Windows user lib       */
+#   endif
+
+#else
+
+/* Non-Windows definition of FGAPI and FGAPIENTRY  */
+#        define FGAPI
+#        define FGAPIENTRY
+
+#endif
+
+/*
+ * The freeglut and GLUT API versions
+ */
+#define  FREEGLUT             1
+#define  GLUT_API_VERSION     4
+#define  GLUT_XLIB_IMPLEMENTATION 13
+/* Deprecated:
+   cf. http://sourceforge.net/mailarchive/forum.php?thread_name=CABcAi1hw7cr4xtigckaGXB5X8wddLfMcbA_rZ3NAuwMrX_zmsw%40mail.gmail.com&forum_name=freeglut-developer */
+#define  FREEGLUT_VERSION_2_0 1
+
+/*
+ * Always include OpenGL and GLU headers
+ */
+/* Note: FREEGLUT_GLES is only used to cleanly bootstrap headers
+   inclusion here; use GLES constants directly
+   (e.g. GL_ES_VERSION_2_0) for all other needs */
+#ifdef FREEGLUT_GLES
+#   include <EGL/egl.h>
+#   include <GLES/gl.h>
+#   include <GLES2/gl2.h>
+#elif __APPLE__
+#   include <OpenGL/gl.h>
+#   include <OpenGL/glu.h>
+#else
+#   include <GL/gl.h>
+#   include <GL/glu.h>
+#endif
+
+/*
+ * GLUT API macro definitions -- the special key codes:
+ */
+#define  GLUT_KEY_F1                        0x0001
+#define  GLUT_KEY_F2                        0x0002
+#define  GLUT_KEY_F3                        0x0003
+#define  GLUT_KEY_F4                        0x0004
+#define  GLUT_KEY_F5                        0x0005
+#define  GLUT_KEY_F6                        0x0006
+#define  GLUT_KEY_F7                        0x0007
+#define  GLUT_KEY_F8                        0x0008
+#define  GLUT_KEY_F9                        0x0009
+#define  GLUT_KEY_F10                       0x000A
+#define  GLUT_KEY_F11                       0x000B
+#define  GLUT_KEY_F12                       0x000C
+#define  GLUT_KEY_LEFT                      0x0064
+#define  GLUT_KEY_UP                        0x0065
+#define  GLUT_KEY_RIGHT                     0x0066
+#define  GLUT_KEY_DOWN                      0x0067
+#define  GLUT_KEY_PAGE_UP                   0x0068
+#define  GLUT_KEY_PAGE_DOWN                 0x0069
+#define  GLUT_KEY_HOME                      0x006A
+#define  GLUT_KEY_END                       0x006B
+#define  GLUT_KEY_INSERT                    0x006C
+
+/*
+ * GLUT API macro definitions -- mouse state definitions
+ */
+#define  GLUT_LEFT_BUTTON                   0x0000
+#define  GLUT_MIDDLE_BUTTON                 0x0001
+#define  GLUT_RIGHT_BUTTON                  0x0002
+#define  GLUT_DOWN                          0x0000
+#define  GLUT_UP                            0x0001
+#define  GLUT_LEFT                          0x0000
+#define  GLUT_ENTERED                       0x0001
+
+/*
+ * GLUT API macro definitions -- the display mode definitions
+ */
+#define  GLUT_RGB                           0x0000
+#define  GLUT_RGBA                          0x0000
+#define  GLUT_INDEX                         0x0001
+#define  GLUT_SINGLE                        0x0000
+#define  GLUT_DOUBLE                        0x0002
+#define  GLUT_ACCUM                         0x0004
+#define  GLUT_ALPHA                         0x0008
+#define  GLUT_DEPTH                         0x0010
+#define  GLUT_STENCIL                       0x0020
+#define  GLUT_MULTISAMPLE                   0x0080
+#define  GLUT_STEREO                        0x0100
+#define  GLUT_LUMINANCE                     0x0200
+
+/*
+ * GLUT API macro definitions -- windows and menu related definitions
+ */
+#define  GLUT_MENU_NOT_IN_USE               0x0000
+#define  GLUT_MENU_IN_USE                   0x0001
+#define  GLUT_NOT_VISIBLE                   0x0000
+#define  GLUT_VISIBLE                       0x0001
+#define  GLUT_HIDDEN                        0x0000
+#define  GLUT_FULLY_RETAINED                0x0001
+#define  GLUT_PARTIALLY_RETAINED            0x0002
+#define  GLUT_FULLY_COVERED                 0x0003
+
+/*
+ * GLUT API macro definitions -- fonts definitions
+ *
+ * Steve Baker suggested to make it binary compatible with GLUT:
+ */
+#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__)
+#   define  GLUT_STROKE_ROMAN               ((void *)0x0000)
+#   define  GLUT_STROKE_MONO_ROMAN          ((void *)0x0001)
+#   define  GLUT_BITMAP_9_BY_15             ((void *)0x0002)
+#   define  GLUT_BITMAP_8_BY_13             ((void *)0x0003)
+#   define  GLUT_BITMAP_TIMES_ROMAN_10      ((void *)0x0004)
+#   define  GLUT_BITMAP_TIMES_ROMAN_24      ((void *)0x0005)
+#   define  GLUT_BITMAP_HELVETICA_10        ((void *)0x0006)
+#   define  GLUT_BITMAP_HELVETICA_12        ((void *)0x0007)
+#   define  GLUT_BITMAP_HELVETICA_18        ((void *)0x0008)
+#else
+    /*
+     * I don't really know if it's a good idea... But here it goes:
+     */
+    extern void* glutStrokeRoman;
+    extern void* glutStrokeMonoRoman;
+    extern void* glutBitmap9By15;
+    extern void* glutBitmap8By13;
+    extern void* glutBitmapTimesRoman10;
+    extern void* glutBitmapTimesRoman24;
+    extern void* glutBitmapHelvetica10;
+    extern void* glutBitmapHelvetica12;
+    extern void* glutBitmapHelvetica18;
+
+    /*
+     * Those pointers will be used by following definitions:
+     */
+#   define  GLUT_STROKE_ROMAN               ((void *) &glutStrokeRoman)
+#   define  GLUT_STROKE_MONO_ROMAN          ((void *) &glutStrokeMonoRoman)
+#   define  GLUT_BITMAP_9_BY_15             ((void *) &glutBitmap9By15)
+#   define  GLUT_BITMAP_8_BY_13             ((void *) &glutBitmap8By13)
+#   define  GLUT_BITMAP_TIMES_ROMAN_10      ((void *) &glutBitmapTimesRoman10)
+#   define  GLUT_BITMAP_TIMES_ROMAN_24      ((void *) &glutBitmapTimesRoman24)
+#   define  GLUT_BITMAP_HELVETICA_10        ((void *) &glutBitmapHelvetica10)
+#   define  GLUT_BITMAP_HELVETICA_12        ((void *) &glutBitmapHelvetica12)
+#   define  GLUT_BITMAP_HELVETICA_18        ((void *) &glutBitmapHelvetica18)
+#endif
+
+/*
+ * GLUT API macro definitions -- the glutGet parameters
+ */
+#define  GLUT_WINDOW_X                      0x0064
+#define  GLUT_WINDOW_Y                      0x0065
+#define  GLUT_WINDOW_WIDTH                  0x0066
+#define  GLUT_WINDOW_HEIGHT                 0x0067
+#define  GLUT_WINDOW_BUFFER_SIZE            0x0068
+#define  GLUT_WINDOW_STENCIL_SIZE           0x0069
+#define  GLUT_WINDOW_DEPTH_SIZE             0x006A
+#define  GLUT_WINDOW_RED_SIZE               0x006B
+#define  GLUT_WINDOW_GREEN_SIZE             0x006C
+#define  GLUT_WINDOW_BLUE_SIZE              0x006D
+#define  GLUT_WINDOW_ALPHA_SIZE             0x006E
+#define  GLUT_WINDOW_ACCUM_RED_SIZE         0x006F
+#define  GLUT_WINDOW_ACCUM_GREEN_SIZE       0x0070
+#define  GLUT_WINDOW_ACCUM_BLUE_SIZE        0x0071
+#define  GLUT_WINDOW_ACCUM_ALPHA_SIZE       0x0072
+#define  GLUT_WINDOW_DOUBLEBUFFER           0x0073
+#define  GLUT_WINDOW_RGBA                   0x0074
+#define  GLUT_WINDOW_PARENT                 0x0075
+#define  GLUT_WINDOW_NUM_CHILDREN           0x0076
+#define  GLUT_WINDOW_COLORMAP_SIZE          0x0077
+#define  GLUT_WINDOW_NUM_SAMPLES            0x0078
+#define  GLUT_WINDOW_STEREO                 0x0079
+#define  GLUT_WINDOW_CURSOR                 0x007A
+
+#define  GLUT_SCREEN_WIDTH                  0x00C8
+#define  GLUT_SCREEN_HEIGHT                 0x00C9
+#define  GLUT_SCREEN_WIDTH_MM               0x00CA
+#define  GLUT_SCREEN_HEIGHT_MM              0x00CB
+#define  GLUT_MENU_NUM_ITEMS                0x012C
+#define  GLUT_DISPLAY_MODE_POSSIBLE         0x0190
+#define  GLUT_INIT_WINDOW_X                 0x01F4
+#define  GLUT_INIT_WINDOW_Y                 0x01F5
+#define  GLUT_INIT_WINDOW_WIDTH             0x01F6
+#define  GLUT_INIT_WINDOW_HEIGHT            0x01F7
+#define  GLUT_INIT_DISPLAY_MODE             0x01F8
+#define  GLUT_ELAPSED_TIME                  0x02BC
+#define  GLUT_WINDOW_FORMAT_ID              0x007B
+
+/*
+ * GLUT API macro definitions -- the glutDeviceGet parameters
+ */
+#define  GLUT_HAS_KEYBOARD                  0x0258
+#define  GLUT_HAS_MOUSE                     0x0259
+#define  GLUT_HAS_SPACEBALL                 0x025A
+#define  GLUT_HAS_DIAL_AND_BUTTON_BOX       0x025B
+#define  GLUT_HAS_TABLET                    0x025C
+#define  GLUT_NUM_MOUSE_BUTTONS             0x025D
+#define  GLUT_NUM_SPACEBALL_BUTTONS         0x025E
+#define  GLUT_NUM_BUTTON_BOX_BUTTONS        0x025F
+#define  GLUT_NUM_DIALS                     0x0260
+#define  GLUT_NUM_TABLET_BUTTONS            0x0261
+#define  GLUT_DEVICE_IGNORE_KEY_REPEAT      0x0262
+#define  GLUT_DEVICE_KEY_REPEAT             0x0263
+#define  GLUT_HAS_JOYSTICK                  0x0264
+#define  GLUT_OWNS_JOYSTICK                 0x0265
+#define  GLUT_JOYSTICK_BUTTONS              0x0266
+#define  GLUT_JOYSTICK_AXES                 0x0267
+#define  GLUT_JOYSTICK_POLL_RATE            0x0268
+
+/*
+ * GLUT API macro definitions -- the glutLayerGet parameters
+ */
+#define  GLUT_OVERLAY_POSSIBLE              0x0320
+#define  GLUT_LAYER_IN_USE                  0x0321
+#define  GLUT_HAS_OVERLAY                   0x0322
+#define  GLUT_TRANSPARENT_INDEX             0x0323
+#define  GLUT_NORMAL_DAMAGED                0x0324
+#define  GLUT_OVERLAY_DAMAGED               0x0325
+
+/*
+ * GLUT API macro definitions -- the glutVideoResizeGet parameters
+ */
+#define  GLUT_VIDEO_RESIZE_POSSIBLE         0x0384
+#define  GLUT_VIDEO_RESIZE_IN_USE           0x0385
+#define  GLUT_VIDEO_RESIZE_X_DELTA          0x0386
+#define  GLUT_VIDEO_RESIZE_Y_DELTA          0x0387
+#define  GLUT_VIDEO_RESIZE_WIDTH_DELTA      0x0388
+#define  GLUT_VIDEO_RESIZE_HEIGHT_DELTA     0x0389
+#define  GLUT_VIDEO_RESIZE_X                0x038A
+#define  GLUT_VIDEO_RESIZE_Y                0x038B
+#define  GLUT_VIDEO_RESIZE_WIDTH            0x038C
+#define  GLUT_VIDEO_RESIZE_HEIGHT           0x038D
+
+/*
+ * GLUT API macro definitions -- the glutUseLayer parameters
+ */
+#define  GLUT_NORMAL                        0x0000
+#define  GLUT_OVERLAY                       0x0001
+
+/*
+ * GLUT API macro definitions -- the glutGetModifiers parameters
+ */
+#define  GLUT_ACTIVE_SHIFT                  0x0001
+#define  GLUT_ACTIVE_CTRL                   0x0002
+#define  GLUT_ACTIVE_ALT                    0x0004
+
+/*
+ * GLUT API macro definitions -- the glutSetCursor parameters
+ */
+#define  GLUT_CURSOR_RIGHT_ARROW            0x0000
+#define  GLUT_CURSOR_LEFT_ARROW             0x0001
+#define  GLUT_CURSOR_INFO                   0x0002
+#define  GLUT_CURSOR_DESTROY                0x0003
+#define  GLUT_CURSOR_HELP                   0x0004
+#define  GLUT_CURSOR_CYCLE                  0x0005
+#define  GLUT_CURSOR_SPRAY                  0x0006
+#define  GLUT_CURSOR_WAIT                   0x0007
+#define  GLUT_CURSOR_TEXT                   0x0008
+#define  GLUT_CURSOR_CROSSHAIR              0x0009
+#define  GLUT_CURSOR_UP_DOWN                0x000A
+#define  GLUT_CURSOR_LEFT_RIGHT             0x000B
+#define  GLUT_CURSOR_TOP_SIDE               0x000C
+#define  GLUT_CURSOR_BOTTOM_SIDE            0x000D
+#define  GLUT_CURSOR_LEFT_SIDE              0x000E
+#define  GLUT_CURSOR_RIGHT_SIDE             0x000F
+#define  GLUT_CURSOR_TOP_LEFT_CORNER        0x0010
+#define  GLUT_CURSOR_TOP_RIGHT_CORNER       0x0011
+#define  GLUT_CURSOR_BOTTOM_RIGHT_CORNER    0x0012
+#define  GLUT_CURSOR_BOTTOM_LEFT_CORNER     0x0013
+#define  GLUT_CURSOR_INHERIT                0x0064
+#define  GLUT_CURSOR_NONE                   0x0065
+#define  GLUT_CURSOR_FULL_CROSSHAIR         0x0066
+
+/*
+ * GLUT API macro definitions -- RGB color component specification definitions
+ */
+#define  GLUT_RED                           0x0000
+#define  GLUT_GREEN                         0x0001
+#define  GLUT_BLUE                          0x0002
+
+/*
+ * GLUT API macro definitions -- additional keyboard and joystick definitions
+ */
+#define  GLUT_KEY_REPEAT_OFF                0x0000
+#define  GLUT_KEY_REPEAT_ON                 0x0001
+#define  GLUT_KEY_REPEAT_DEFAULT            0x0002
+
+#define  GLUT_JOYSTICK_BUTTON_A             0x0001
+#define  GLUT_JOYSTICK_BUTTON_B             0x0002
+#define  GLUT_JOYSTICK_BUTTON_C             0x0004
+#define  GLUT_JOYSTICK_BUTTON_D             0x0008
+
+/*
+ * GLUT API macro definitions -- game mode definitions
+ */
+#define  GLUT_GAME_MODE_ACTIVE              0x0000
+#define  GLUT_GAME_MODE_POSSIBLE            0x0001
+#define  GLUT_GAME_MODE_WIDTH               0x0002
+#define  GLUT_GAME_MODE_HEIGHT              0x0003
+#define  GLUT_GAME_MODE_PIXEL_DEPTH         0x0004
+#define  GLUT_GAME_MODE_REFRESH_RATE        0x0005
+#define  GLUT_GAME_MODE_DISPLAY_CHANGED     0x0006
+
+/*
+ * Initialization functions, see fglut_init.c
+ */
+FGAPI void    FGAPIENTRY glutInit( int* pargc, char** argv );
+FGAPI void    FGAPIENTRY glutInitWindowPosition( int x, int y );
+FGAPI void    FGAPIENTRY glutInitWindowSize( int width, int height );
+FGAPI void    FGAPIENTRY glutInitDisplayMode( unsigned int displayMode );
+FGAPI void    FGAPIENTRY glutInitDisplayString( const char* displayMode );
+
+/*
+ * Process loop function, see fg_main.c
+ */
+FGAPI void    FGAPIENTRY glutMainLoop( void );
+
+/*
+ * Window management functions, see fg_window.c
+ */
+FGAPI int     FGAPIENTRY glutCreateWindow( const char* title );
+FGAPI int     FGAPIENTRY glutCreateSubWindow( int window, int x, int y, int width, int height );
+FGAPI void    FGAPIENTRY glutDestroyWindow( int window );
+FGAPI void    FGAPIENTRY glutSetWindow( int window );
+FGAPI int     FGAPIENTRY glutGetWindow( void );
+FGAPI void    FGAPIENTRY glutSetWindowTitle( const char* title );
+FGAPI void    FGAPIENTRY glutSetIconTitle( const char* title );
+FGAPI void    FGAPIENTRY glutReshapeWindow( int width, int height );
+FGAPI void    FGAPIENTRY glutPositionWindow( int x, int y );
+FGAPI void    FGAPIENTRY glutShowWindow( void );
+FGAPI void    FGAPIENTRY glutHideWindow( void );
+FGAPI void    FGAPIENTRY glutIconifyWindow( void );
+FGAPI void    FGAPIENTRY glutPushWindow( void );
+FGAPI void    FGAPIENTRY glutPopWindow( void );
+FGAPI void    FGAPIENTRY glutFullScreen( void );
+
+/*
+ * Display-related functions, see fg_display.c
+ */
+FGAPI void    FGAPIENTRY glutPostWindowRedisplay( int window );
+FGAPI void    FGAPIENTRY glutPostRedisplay( void );
+FGAPI void    FGAPIENTRY glutSwapBuffers( void );
+
+/*
+ * Mouse cursor functions, see fg_cursor.c
+ */
+FGAPI void    FGAPIENTRY glutWarpPointer( int x, int y );
+FGAPI void    FGAPIENTRY glutSetCursor( int cursor );
+
+/*
+ * Overlay stuff, see fg_overlay.c
+ */
+FGAPI void    FGAPIENTRY glutEstablishOverlay( void );
+FGAPI void    FGAPIENTRY glutRemoveOverlay( void );
+FGAPI void    FGAPIENTRY glutUseLayer( GLenum layer );
+FGAPI void    FGAPIENTRY glutPostOverlayRedisplay( void );
+FGAPI void    FGAPIENTRY glutPostWindowOverlayRedisplay( int window );
+FGAPI void    FGAPIENTRY glutShowOverlay( void );
+FGAPI void    FGAPIENTRY glutHideOverlay( void );
+
+/*
+ * Menu stuff, see fg_menu.c
+ */
+FGAPI int     FGAPIENTRY glutCreateMenu( void (* callback)( int menu ) );
+FGAPI void    FGAPIENTRY glutDestroyMenu( int menu );
+FGAPI int     FGAPIENTRY glutGetMenu( void );
+FGAPI void    FGAPIENTRY glutSetMenu( int menu );
+FGAPI void    FGAPIENTRY glutAddMenuEntry( const char* label, int value );
+FGAPI void    FGAPIENTRY glutAddSubMenu( const char* label, int subMenu );
+FGAPI void    FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value );
+FGAPI void    FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int value );
+FGAPI void    FGAPIENTRY glutRemoveMenuItem( int item );
+FGAPI void    FGAPIENTRY glutAttachMenu( int button );
+FGAPI void    FGAPIENTRY glutDetachMenu( int button );
+
+/*
+ * Global callback functions, see fg_callbacks.c
+ */
+FGAPI void    FGAPIENTRY glutTimerFunc( unsigned int time, void (* callback)( int ), int value );
+FGAPI void    FGAPIENTRY glutIdleFunc( void (* callback)( void ) );
+
+/*
+ * Window-specific callback functions, see fg_callbacks.c
+ */
+FGAPI void    FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) );
+FGAPI void    FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) );
+FGAPI void    FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) );
+FGAPI void    FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) );
+FGAPI void    FGAPIENTRY glutDisplayFunc( void (* callback)( void ) );
+FGAPI void    FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) );
+FGAPI void    FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) );
+FGAPI void    FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) );
+FGAPI void    FGAPIENTRY glutEntryFunc( void (* callback)( int ) );
+
+FGAPI void    FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) );
+FGAPI void    FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) );
+FGAPI void    FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval );
+FGAPI void    FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) );
+FGAPI void    FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) );
+FGAPI void    FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) );
+FGAPI void    FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) );
+
+FGAPI void    FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) );
+FGAPI void    FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) );
+FGAPI void    FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) );
+FGAPI void    FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) );
+FGAPI void    FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) );
+FGAPI void    FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) );
+FGAPI void    FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) );
+
+/*
+ * State setting and retrieval functions, see fg_state.c
+ */
+FGAPI int     FGAPIENTRY glutGet( GLenum query );
+FGAPI int     FGAPIENTRY glutDeviceGet( GLenum query );
+FGAPI int     FGAPIENTRY glutGetModifiers( void );
+FGAPI int     FGAPIENTRY glutLayerGet( GLenum query );
+
+/*
+ * Font stuff, see fg_font.c
+ */
+FGAPI void    FGAPIENTRY glutBitmapCharacter( void* font, int character );
+FGAPI int     FGAPIENTRY glutBitmapWidth( void* font, int character );
+FGAPI void    FGAPIENTRY glutStrokeCharacter( void* font, int character );
+FGAPI int     FGAPIENTRY glutStrokeWidth( void* font, int character );
+FGAPI GLfloat FGAPIENTRY glutStrokeWidthf( void* font, int character ); /* GLUT 3.8 */
+FGAPI int     FGAPIENTRY glutBitmapLength( void* font, const unsigned char* string );
+FGAPI int     FGAPIENTRY glutStrokeLength( void* font, const unsigned char* string );
+FGAPI GLfloat FGAPIENTRY glutStrokeLengthf( void* font, const unsigned char *string ); /* GLUT 3.8 */
+
+/*
+ * Geometry functions, see fg_geometry.c
+ */
+
+FGAPI void    FGAPIENTRY glutWireCube( double size );
+FGAPI void    FGAPIENTRY glutSolidCube( double size );
+FGAPI void    FGAPIENTRY glutWireSphere( double radius, GLint slices, GLint stacks );
+FGAPI void    FGAPIENTRY glutSolidSphere( double radius, GLint slices, GLint stacks );
+FGAPI void    FGAPIENTRY glutWireCone( double base, double height, GLint slices, GLint stacks );
+FGAPI void    FGAPIENTRY glutSolidCone( double base, double height, GLint slices, GLint stacks );
+FGAPI void    FGAPIENTRY glutWireTorus( double innerRadius, double outerRadius, GLint sides, GLint rings );
+FGAPI void    FGAPIENTRY glutSolidTorus( double innerRadius, double outerRadius, GLint sides, GLint rings );
+FGAPI void    FGAPIENTRY glutWireDodecahedron( void );
+FGAPI void    FGAPIENTRY glutSolidDodecahedron( void );
+FGAPI void    FGAPIENTRY glutWireOctahedron( void );
+FGAPI void    FGAPIENTRY glutSolidOctahedron( void );
+FGAPI void    FGAPIENTRY glutWireTetrahedron( void );
+FGAPI void    FGAPIENTRY glutSolidTetrahedron( void );
+FGAPI void    FGAPIENTRY glutWireIcosahedron( void );
+FGAPI void    FGAPIENTRY glutSolidIcosahedron( void );
+
+/*
+ * Teapot rendering functions, found in fg_teapot.c
+ * NB: front facing polygons have clockwise winding, not counter clockwise
+ */
+FGAPI void    FGAPIENTRY glutWireTeapot( double size );
+FGAPI void    FGAPIENTRY glutSolidTeapot( double size );
+
+/*
+ * Game mode functions, see fg_gamemode.c
+ */
+FGAPI void    FGAPIENTRY glutGameModeString( const char* string );
+FGAPI int     FGAPIENTRY glutEnterGameMode( void );
+FGAPI void    FGAPIENTRY glutLeaveGameMode( void );
+FGAPI int     FGAPIENTRY glutGameModeGet( GLenum query );
+
+/*
+ * Video resize functions, see fg_videoresize.c
+ */
+FGAPI int     FGAPIENTRY glutVideoResizeGet( GLenum query );
+FGAPI void    FGAPIENTRY glutSetupVideoResizing( void );
+FGAPI void    FGAPIENTRY glutStopVideoResizing( void );
+FGAPI void    FGAPIENTRY glutVideoResize( int x, int y, int width, int height );
+FGAPI void    FGAPIENTRY glutVideoPan( int x, int y, int width, int height );
+
+/*
+ * Colormap functions, see fg_misc.c
+ */
+FGAPI void    FGAPIENTRY glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue );
+FGAPI GLfloat FGAPIENTRY glutGetColor( int color, int component );
+FGAPI void    FGAPIENTRY glutCopyColormap( int window );
+
+/*
+ * Misc keyboard and joystick functions, see fg_misc.c
+ */
+FGAPI void    FGAPIENTRY glutIgnoreKeyRepeat( int ignore );
+FGAPI void    FGAPIENTRY glutSetKeyRepeat( int repeatMode );
+FGAPI void    FGAPIENTRY glutForceJoystickFunc( void );
+
+/*
+ * Misc functions, see fg_misc.c
+ */
+FGAPI int     FGAPIENTRY glutExtensionSupported( const char* extension );
+FGAPI void    FGAPIENTRY glutReportErrors( void );
+
+/* Comment from glut.h of classic GLUT:
+
+   Win32 has an annoying issue where there are multiple C run-time
+   libraries (CRTs).  If the executable is linked with a different CRT
+   from the GLUT DLL, the GLUT DLL will not share the same CRT static
+   data seen by the executable.  In particular, atexit callbacks registered
+   in the executable will not be called if GLUT calls its (different)
+   exit routine).  GLUT is typically built with the
+   "/MD" option (the CRT with multithreading DLL support), but the Visual
+   C++ linker default is "/ML" (the single threaded CRT).
+
+   One workaround to this issue is requiring users to always link with
+   the same CRT as GLUT is compiled with.  That requires users supply a
+   non-standard option.  GLUT 3.7 has its own built-in workaround where
+   the executable's "exit" function pointer is covertly passed to GLUT.
+   GLUT then calls the executable's exit function pointer to ensure that
+   any "atexit" calls registered by the application are called if GLUT
+   needs to exit.
+
+   Note that the __glut*WithExit routines should NEVER be called directly.
+   To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
+
+/* to get the prototype for exit() */
+#include <stdlib.h>
+
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) && !defined(__WATCOMC__)
+FGAPI void FGAPIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int));
+FGAPI int FGAPIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int));
+FGAPI int FGAPIENTRY __glutCreateMenuWithExit(void (* func)(int), void (__cdecl *exitfunc)(int));
+#ifndef FREEGLUT_BUILDING_LIB
+#if defined(__GNUC__)
+#define FGUNUSED __attribute__((unused))
+#else
+#define FGUNUSED
+#endif
+static void FGAPIENTRY FGUNUSED glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); }
+#define glutInit glutInit_ATEXIT_HACK
+static int FGAPIENTRY FGUNUSED glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); }
+#define glutCreateWindow glutCreateWindow_ATEXIT_HACK
+static int FGAPIENTRY FGUNUSED glutCreateMenu_ATEXIT_HACK(void (* func)(int)) { return __glutCreateMenuWithExit(func, exit); }
+#define glutCreateMenu glutCreateMenu_ATEXIT_HACK
+#endif
+#endif
+
+#ifdef __cplusplus
+    }
+#endif
+
+/*** END OF FILE ***/
+
+#endif /* __FREEGLUT_STD_H__ */
diff --git a/thirdparty/freeglut/include/GL/glut.h b/thirdparty/freeglut/include/GL/glut.h
new file mode 100644
index 0000000..6191f77
--- /dev/null
+++ b/thirdparty/freeglut/include/GL/glut.h
@@ -0,0 +1,21 @@
+#ifndef  __GLUT_H__
+#define  __GLUT_H__
+
+/*
+ * glut.h
+ *
+ * The freeglut library include file
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "freeglut_std.h"
+
+/*** END OF FILE ***/
+
+#endif /* __GLUT_H__ */
diff --git a/thirdparty/freeglut/lib/freeglut.lib b/thirdparty/freeglut/lib/freeglut.lib
new file mode 100644
index 0000000000000000000000000000000000000000..498a5760c4bfda3a74a2830296c07a82917cef84
GIT binary patch
literal 39732
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
ST=&adKE<~Lr`P$i=>Gur>iJy&

literal 0
HcmV?d00001