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