new repo
This commit is contained in:
parent
f0e1ef9777
commit
f5087ee7b6
441
.gitignore
vendored
441
.gitignore
vendored
@ -1,443 +1,2 @@
|
|||||||
# ---> VisualStudio
|
|
||||||
## 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]ebug/
|
||||||
[Dd]ebugPublic/
|
|
||||||
[Rr]elease/
|
|
||||||
[Rr]eleases/
|
|
||||||
x64/
|
|
||||||
x86/
|
|
||||||
[Aa][Rr][Mm]/
|
|
||||||
[Aa][Rr][Mm]64/
|
|
||||||
bld/
|
|
||||||
[Bb]in/
|
|
||||||
[Oo]bj/
|
|
||||||
[Ll]og/
|
|
||||||
[Ll]ogs/
|
|
||||||
|
|
||||||
# Visual Studio 2015/2017 cache/options directory
|
|
||||||
.vs/
|
.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/
|
|
||||||
|
|
||||||
# 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, .xml, .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/
|
|
||||||
|
|
||||||
# ---> C++
|
|
||||||
# Prerequisites
|
|
||||||
*.d
|
|
||||||
|
|
||||||
# Compiled Object files
|
|
||||||
*.slo
|
|
||||||
*.lo
|
|
||||||
*.o
|
|
||||||
*.obj
|
|
||||||
|
|
||||||
# Precompiled Headers
|
|
||||||
*.gch
|
|
||||||
*.pch
|
|
||||||
|
|
||||||
# Compiled Dynamic libraries
|
|
||||||
*.so
|
|
||||||
*.dylib
|
|
||||||
*.dll
|
|
||||||
|
|
||||||
# Fortran module files
|
|
||||||
*.mod
|
|
||||||
*.smod
|
|
||||||
|
|
||||||
# Compiled Static libraries
|
|
||||||
*.lai
|
|
||||||
*.la
|
|
||||||
*.a
|
|
||||||
*.lib
|
|
||||||
|
|
||||||
# Executables
|
|
||||||
*.exe
|
|
||||||
*.out
|
|
||||||
*.app
|
|
||||||
|
|
||||||
# ---> C
|
|
||||||
# Prerequisites
|
|
||||||
*.d
|
|
||||||
|
|
||||||
# Object files
|
|
||||||
*.o
|
|
||||||
*.ko
|
|
||||||
*.obj
|
|
||||||
*.elf
|
|
||||||
|
|
||||||
# Linker output
|
|
||||||
*.ilk
|
|
||||||
*.map
|
|
||||||
*.exp
|
|
||||||
|
|
||||||
# Precompiled Headers
|
|
||||||
*.gch
|
|
||||||
*.pch
|
|
||||||
|
|
||||||
# Libraries
|
|
||||||
*.lib
|
|
||||||
*.a
|
|
||||||
*.la
|
|
||||||
*.lo
|
|
||||||
|
|
||||||
# Shared objects (inc. Windows DLLs)
|
|
||||||
*.dll
|
|
||||||
*.so
|
|
||||||
*.so.*
|
|
||||||
*.dylib
|
|
||||||
|
|
||||||
# Executables
|
|
||||||
*.exe
|
|
||||||
*.out
|
|
||||||
*.app
|
|
||||||
*.i*86
|
|
||||||
*.x86_64
|
|
||||||
*.hex
|
|
||||||
|
|
||||||
# Debug files
|
|
||||||
*.dSYM/
|
|
||||||
*.su
|
|
||||||
*.idb
|
|
||||||
*.pdb
|
|
||||||
|
|
||||||
# Kernel Module Compile Results
|
|
||||||
*.mod*
|
|
||||||
*.cmd
|
|
||||||
.tmp_versions/
|
|
||||||
modules.order
|
|
||||||
Module.symvers
|
|
||||||
Mkfile.old
|
|
||||||
dkms.conf
|
|
||||||
|
|
||||||
|
BIN
Release/PhysXCommon_32.dll
Normal file
BIN
Release/PhysXCommon_32.dll
Normal file
Binary file not shown.
BIN
Release/PhysXCooking_32.dll
Normal file
BIN
Release/PhysXCooking_32.dll
Normal file
Binary file not shown.
BIN
Release/PhysXDevice.dll
Normal file
BIN
Release/PhysXDevice.dll
Normal file
Binary file not shown.
BIN
Release/PhysXFoundation_32.dll
Normal file
BIN
Release/PhysXFoundation_32.dll
Normal file
Binary file not shown.
BIN
Release/PhysXGpu_32.dll
Normal file
BIN
Release/PhysXGpu_32.dll
Normal file
Binary file not shown.
BIN
Release/PhysX_32.dll
Normal file
BIN
Release/PhysX_32.dll
Normal file
Binary file not shown.
27
dependencies/freeglut/Copying.txt
vendored
Normal file
27
dependencies/freeglut/Copying.txt
vendored
Normal file
@ -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.
|
106
dependencies/freeglut/Readme.txt
vendored
Normal file
106
dependencies/freeglut/Readme.txt
vendored
Normal file
@ -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/
|
BIN
dependencies/freeglut/bin/freeglut.dll
vendored
Normal file
BIN
dependencies/freeglut/bin/freeglut.dll
vendored
Normal file
Binary file not shown.
BIN
dependencies/freeglut/bin/x64/freeglut.dll
vendored
Normal file
BIN
dependencies/freeglut/bin/x64/freeglut.dll
vendored
Normal file
Binary file not shown.
22
dependencies/freeglut/include/GL/freeglut.h
vendored
Normal file
22
dependencies/freeglut/include/GL/freeglut.h
vendored
Normal file
@ -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__ */
|
271
dependencies/freeglut/include/GL/freeglut_ext.h
vendored
Normal file
271
dependencies/freeglut/include/GL/freeglut_ext.h
vendored
Normal file
@ -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__ */
|
638
dependencies/freeglut/include/GL/freeglut_std.h
vendored
Normal file
638
dependencies/freeglut/include/GL/freeglut_std.h
vendored
Normal file
@ -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__ */
|
21
dependencies/freeglut/include/GL/glut.h
vendored
Normal file
21
dependencies/freeglut/include/GL/glut.h
vendored
Normal file
@ -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__ */
|
BIN
dependencies/freeglut/lib/freeglut.lib
vendored
Normal file
BIN
dependencies/freeglut/lib/freeglut.lib
vendored
Normal file
Binary file not shown.
BIN
dependencies/freeglut/lib/x64/freeglut.lib
vendored
Normal file
BIN
dependencies/freeglut/lib/x64/freeglut.lib
vendored
Normal file
Binary file not shown.
73
dependencies/glew-2.0.0/LICENSE.txt
vendored
Normal file
73
dependencies/glew-2.0.0/LICENSE.txt
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2002-2007, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2007, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
Mesa 3-D graphics library
|
||||||
|
Version: 7.0
|
||||||
|
|
||||||
|
Copyright (C) 1999-2007 Brian Paul 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 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
|
||||||
|
BRIAN PAUL 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.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2007 The Khronos Group Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and/or associated documentation files (the
|
||||||
|
"Materials"), to deal in the Materials without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Materials, and to
|
||||||
|
permit persons to whom the Materials are 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 Materials.
|
||||||
|
|
||||||
|
THE MATERIALS ARE 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 THE AUTHORS OR COPYRIGHT HOLDERS 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
|
||||||
|
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
BIN
dependencies/glew-2.0.0/bin/Release/Win32/glew32.dll
vendored
Normal file
BIN
dependencies/glew-2.0.0/bin/Release/Win32/glew32.dll
vendored
Normal file
Binary file not shown.
BIN
dependencies/glew-2.0.0/bin/Release/Win32/glewinfo.exe
vendored
Normal file
BIN
dependencies/glew-2.0.0/bin/Release/Win32/glewinfo.exe
vendored
Normal file
Binary file not shown.
BIN
dependencies/glew-2.0.0/bin/Release/Win32/visualinfo.exe
vendored
Normal file
BIN
dependencies/glew-2.0.0/bin/Release/Win32/visualinfo.exe
vendored
Normal file
Binary file not shown.
BIN
dependencies/glew-2.0.0/bin/Release/x64/glew32.dll
vendored
Normal file
BIN
dependencies/glew-2.0.0/bin/Release/x64/glew32.dll
vendored
Normal file
Binary file not shown.
BIN
dependencies/glew-2.0.0/bin/Release/x64/glewinfo.exe
vendored
Normal file
BIN
dependencies/glew-2.0.0/bin/Release/x64/glewinfo.exe
vendored
Normal file
Binary file not shown.
BIN
dependencies/glew-2.0.0/bin/Release/x64/visualinfo.exe
vendored
Normal file
BIN
dependencies/glew-2.0.0/bin/Release/x64/visualinfo.exe
vendored
Normal file
Binary file not shown.
232
dependencies/glew-2.0.0/doc/advanced.html
vendored
Normal file
232
dependencies/glew-2.0.0/doc/advanced.html
vendored
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center"><a href="index.html">Download</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="basic.html">Usage</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="build.html">Building</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="install.html">Installation</a></td></tr>
|
||||||
|
<tr><td align="center">Source Generation</td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Automatic Code Generation</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Starting from release 1.1.0, the source code and parts of the
|
||||||
|
documentation are automatically generated from the extension
|
||||||
|
specifications in a two-step process. In the first step,
|
||||||
|
specification files from the OpenGL registry are downloaded and
|
||||||
|
parsed. Skeleton descriptors are created for each extension. These
|
||||||
|
descriptors contain all necessary information for creating the source
|
||||||
|
code and documentation in a simple and compact format, including the
|
||||||
|
name of the extension, url link to the specification, tokens, function
|
||||||
|
declarations, typedefs and struct definitions. In the second step,
|
||||||
|
the header files as well as the library and glewinfo source are
|
||||||
|
generated from the descriptor files. The code generation scripts are
|
||||||
|
located in the <tt>auto</tt> subdirectory.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The code generation scripts require GNU make, wget, and perl. On
|
||||||
|
Windows, the simplest way to get access to these tools is to install
|
||||||
|
<a href="http://www.cygwin.com/">Cygwin</a>, but make sure that the
|
||||||
|
root directory is mounted in binary mode. The makefile in the
|
||||||
|
<tt>auto</tt> directory provides the following build targets:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 cellspacing=5>
|
||||||
|
<tr><td align="left" valign="top"><tt>make</tt></td>
|
||||||
|
<td align=left>Create the source files from the descriptors.<br/> If the
|
||||||
|
descriptors do not exist, create them from the spec files.<br/> If the spec
|
||||||
|
files do not exist, download them from the OpenGL repository.</td></tr>
|
||||||
|
<tr><td align="left" valign="top"><tt>make clean</tt></td>
|
||||||
|
<td align=left>Delete the source files.</td></tr>
|
||||||
|
<tr><td align="left" valign="top"><tt>make clobber</tt></td>
|
||||||
|
<td align=left>Delete the source files and the descriptors.</td></tr>
|
||||||
|
<tr><td align="left" valign="top"><tt>make destroy</tt></td>
|
||||||
|
<td align=left>Delete the source files, the descriptors, and the spec files.</td></tr>
|
||||||
|
<tr><td align="left" valign="top"><tt>make custom</tt></td>
|
||||||
|
<td align=left>Create the source files for the extensions
|
||||||
|
listed in <tt>auto/custom.txt</tt>.<br/> See "Custom Code
|
||||||
|
Generation" below for more details.</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Adding a New Extension</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To add a new extension, create a descriptor file for the extension in
|
||||||
|
<tt>auto/core</tt> and rerun the code generation scripts by typing
|
||||||
|
<tt>make clean; make</tt> in the <tt>auto</tt> directory.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The format of the descriptor file is given below. Items in
|
||||||
|
brackets are optional.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
<Extension Name><br>
|
||||||
|
[<URL of Specification File>]<br>
|
||||||
|
[<Token Name> <Token Value>]<br>
|
||||||
|
[<Token Name> <Token Value>]<br>
|
||||||
|
...<br>
|
||||||
|
[<Typedef>]<br>
|
||||||
|
[<Typedef>]<br>
|
||||||
|
...<br>
|
||||||
|
[<Function Signature>]<br>
|
||||||
|
[<Function Signature>]<br>
|
||||||
|
...<br>
|
||||||
|
<!-- [<Function Definition>]<br>
|
||||||
|
[<Function Definition>]<br>
|
||||||
|
...<br> -->
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<p>
|
||||||
|
Note that <tt>Function Definitions</tt> are copied to the header files
|
||||||
|
without changes and have to be terminated with a semicolon. In
|
||||||
|
contrast, <tt>Tokens</tt>, <tt>Function signatures</tt>, and
|
||||||
|
<tt>Typedefs</tt> should not be terminated with a semicolon.
|
||||||
|
</p>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Take a look at one of the files in <tt>auto/core</tt> for an
|
||||||
|
example. Note that typedefs and function signatures should not be
|
||||||
|
terminated with a semicolon.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Custom Code Generation</h3>
|
||||||
|
<p>
|
||||||
|
Starting from GLEW 1.3.0, it is possible to control which extensions
|
||||||
|
to include in the libarary by specifying a list in
|
||||||
|
<tt>auto/custom.txt</tt>. This is useful when you do not need all the
|
||||||
|
extensions and would like to reduce the size of the source files.
|
||||||
|
Type <tt>make clean; make custom</tt> in the <tt>auto</tt> directory
|
||||||
|
to rerun the scripts with the custom list of extensions.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For example, the following is the list of extensions needed to get GLEW and the
|
||||||
|
utilities to compile.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
WGL_ARB_extensions_string<br>
|
||||||
|
WGL_ARB_multisample<br>
|
||||||
|
WGL_ARB_pixel_format<br>
|
||||||
|
WGL_ARB_pbuffer<br>
|
||||||
|
WGL_EXT_extensions_string<br>
|
||||||
|
WGL_ATI_pixel_format_float<br>
|
||||||
|
WGL_NV_float_buffer<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Separate Namespace</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To avoid name clashes when linking with libraries that include the
|
||||||
|
same symbols, extension entry points are declared in a separate
|
||||||
|
namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL
|
||||||
|
function names to their GLEW equivalents. For instance,
|
||||||
|
<tt>glFancyFunction</tt> is simply an alias to
|
||||||
|
<tt>glewFancyFunction</tt>. The separate namespace does not effect
|
||||||
|
token and function pointer definitions.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Known Issues</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
GLEW requires GLX 1.2 for compatibility with GLUT.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
282
dependencies/glew-2.0.0/doc/basic.html
vendored
Normal file
282
dependencies/glew-2.0.0/doc/basic.html
vendored
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center"><a href="index.html">Download</a></td></tr>
|
||||||
|
<tr><td align="center">Usage</td></tr>
|
||||||
|
<tr><td align="center"><a href="build.html">Building</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="install.html">Installation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="advanced.html">Source Generation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Initializing GLEW</h2>
|
||||||
|
<p>
|
||||||
|
First you need to create a valid OpenGL rendering context and call
|
||||||
|
<tt>glewInit()</tt> to initialize the extension entry points. If
|
||||||
|
<tt>glewInit()</tt> returns <tt>GLEW_OK</tt>, the initialization
|
||||||
|
succeeded and you can use the available extensions as well as core
|
||||||
|
OpenGL functionality. For example:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
#include <GL/glew.h><br>
|
||||||
|
#include <GL/glut.h><br>
|
||||||
|
...<br>
|
||||||
|
glutInit(&argc, argv);<br>
|
||||||
|
glutCreateWindow("GLEW Test");<br>
|
||||||
|
GLenum err = glewInit();<br>
|
||||||
|
if (GLEW_OK != err)<br>
|
||||||
|
{<br>
|
||||||
|
/* Problem: glewInit failed, something is seriously wrong. */<br>
|
||||||
|
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));<br>
|
||||||
|
...<br>
|
||||||
|
}<br>
|
||||||
|
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Checking for Extensions</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Starting from GLEW 1.1.0, you can find out if a particular extension
|
||||||
|
is available on your platform by querying globally defined variables
|
||||||
|
of the form <tt>GLEW_{extension_name}</tt>:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
if (GLEW_ARB_vertex_program)<br>
|
||||||
|
{<br>
|
||||||
|
/* It is safe to use the ARB_vertex_program extension here. */<br>
|
||||||
|
glGenProgramsARB(...);<br>
|
||||||
|
}<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>In GLEW 1.0.x, a global structure was used for this task. To ensure
|
||||||
|
binary compatibility between releases, the struct was replaced with a
|
||||||
|
set of variables.</b>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You can also check for core OpenGL functionality. For example, to
|
||||||
|
see if OpenGL 1.3 is supported, do the following:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
if (GLEW_VERSION_1_3)<br>
|
||||||
|
{<br>
|
||||||
|
/* Yay! OpenGL 1.3 is supported! */<br>
|
||||||
|
}<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In general, you can check if <tt>GLEW_{extension_name}</tt> or
|
||||||
|
<tt>GLEW_VERSION_{version}</tt> is true or false.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
It is also possible to perform extension checks from string
|
||||||
|
input. Starting from the 1.3.0 release, use <tt>glewIsSupported</tt>
|
||||||
|
to check if the required core or extension functionality is
|
||||||
|
available:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
if (glewIsSupported("GL_VERSION_1_4 GL_ARB_point_sprite"))<br>
|
||||||
|
{<br>
|
||||||
|
/* Great, we have OpenGL 1.4 + point sprites. */<br>
|
||||||
|
}<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For extensions only, <tt>glewGetExtension</tt> provides a slower alternative
|
||||||
|
(GLEW 1.0.x-1.2.x). <b>Note that in the 1.3.0 release </b>
|
||||||
|
<tt>glewGetExtension</tt> <b>was replaced with </b>
|
||||||
|
<tt>glewIsSupported</tt>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
if (glewGetExtension("GL_ARB_fragment_program"))<br>
|
||||||
|
{<br>
|
||||||
|
/* Looks like ARB_fragment_program is supported. */<br>
|
||||||
|
}<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Experimental Drivers</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
GLEW obtains information on the supported extensions from the graphics
|
||||||
|
driver. Experimental or pre-release drivers, however, might not
|
||||||
|
report every available extension through the standard mechanism, in
|
||||||
|
which case GLEW will report it unsupported. To circumvent this
|
||||||
|
situation, the <tt>glewExperimental</tt> global switch can be turned
|
||||||
|
on by setting it to <tt>GL_TRUE</tt> before calling
|
||||||
|
<tt>glewInit()</tt>, which ensures that all extensions with valid
|
||||||
|
entry points will be exposed.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Platform Specific Extensions</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Platform specific extensions are separated into two header files:
|
||||||
|
<tt>wglew.h</tt> and <tt>glxew.h</tt>, which define the available
|
||||||
|
<tt>WGL</tt> and <tt>GLX</tt> extensions. To determine if a certain
|
||||||
|
extension is supported, query <tt>WGLEW_{extension name}</tt> or
|
||||||
|
<tt>GLXEW_{extension_name}</tt>. For example:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
#include <GL/wglew.h><br>
|
||||||
|
<br>
|
||||||
|
if (WGLEW_ARB_pbuffer)<br>
|
||||||
|
{<br>
|
||||||
|
/* OK, we can use pbuffers. */<br>
|
||||||
|
}<br>
|
||||||
|
else<br>
|
||||||
|
{<br>
|
||||||
|
/* Sorry, pbuffers will not work on this platform. */<br>
|
||||||
|
}<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Alternatively, use <tt>wglewIsSupported</tt> or
|
||||||
|
<tt>glxewIsSupported</tt> to check for extensions from a string:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
if (wglewIsSupported("WGL_ARB_pbuffer"))<br>
|
||||||
|
{<br>
|
||||||
|
/* OK, we can use pbuffers. */<br>
|
||||||
|
}<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Utilities</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
GLEW provides two command-line utilities: one for creating a list of
|
||||||
|
available extensions and visuals; and another for verifying extension
|
||||||
|
entry points.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>visualinfo: extensions and visuals</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<tt>visualinfo</tt> is an extended version of <tt>glxinfo</tt>. The
|
||||||
|
Windows version creates a file called <tt>visualinfo.txt</tt>, which
|
||||||
|
contains a list of available OpenGL, WGL, and GLU extensions as well
|
||||||
|
as a table of visuals aka. pixel formats. Pbuffer and MRT capable
|
||||||
|
visuals are also included. For additional usage information, type
|
||||||
|
<tt>visualinfo -h</tt>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>glewinfo: extension verification utility</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<tt>glewinfo</tt> allows you to verify the entry points for the
|
||||||
|
extensions supported on your platform. The Windows version
|
||||||
|
reports the results to a text file called <tt>glewinfo.txt</tt>. The
|
||||||
|
Unix version prints the results to <tt>stdout</tt>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Windows usage:</p>
|
||||||
|
<blockquote><pre>glewinfo [-pf <id>]</pre></blockquote>
|
||||||
|
|
||||||
|
<p>where <tt><id></tt> is the pixel format id for which the
|
||||||
|
capabilities are displayed.</p>
|
||||||
|
|
||||||
|
<p>Unix usage:</p>
|
||||||
|
<blockquote><pre>glewinfo [-display <dpy>] [-visual <id>]</pre></blockquote>
|
||||||
|
|
||||||
|
<p>where <tt><dpy></tt> is the X11 display and <tt><id></tt> is
|
||||||
|
the visual id for which the capabilities are displayed.</p>
|
||||||
|
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
151
dependencies/glew-2.0.0/doc/build.html
vendored
Normal file
151
dependencies/glew-2.0.0/doc/build.html
vendored
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center"><a href="index.html">Download</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="basic.html">Usage</a></td></tr>
|
||||||
|
<tr><td align="center">Building</td></tr>
|
||||||
|
<tr><td align="center"><a href="install.html">Installation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="advanced.html">Source Generation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Building GLEW</h2>
|
||||||
|
|
||||||
|
<h3>Windows</h3>
|
||||||
|
|
||||||
|
<p>A MS Visual Studio project is provided in the <tt>build/vc6</tt> directory.</p>
|
||||||
|
<p>Pre-built shared and static libraries are also available for <a href="index.html">download</a>.</p>
|
||||||
|
|
||||||
|
<h3>Makefile</h3>
|
||||||
|
|
||||||
|
<p>For platforms other than MS Windows, the provided <tt>Makefile</tt> is used.</p>
|
||||||
|
|
||||||
|
<h4>Command-line variables</h4>
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 cellspacing=10>
|
||||||
|
<tr><td valign=top><tt>SYSTEM</tt></td><td valign=top>auto</td>
|
||||||
|
<td align=left>Target system to build: darwin, linux, solaris, etc.<br/>For a full list of supported targets: <tt>ls config/Makefile.*</tt><br/>
|
||||||
|
<a href="http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree">config.guess</a> is used to auto detect, as necessary.</td></tr>
|
||||||
|
<tr><td valign=top><tt>GLEW_DEST</tt></td><td valign=top><tt>/usr</tt></td>
|
||||||
|
<td align=left>Base directory for installation.</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h4>Make targets</h4>
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 cellspacing=10>
|
||||||
|
<tr><td valign=top><tt>all</tt></td><td>Build everything.</td><tr>
|
||||||
|
<tr><td valign=top><tt>glew.lib</tt></td><td>Build static and dynamic GLEW libraries.</td><tr>
|
||||||
|
<tr><td valign=top><tt>glew.lib.mx</tt></td><td>Build static and dynamic GLEWmx libraries.</td><tr>
|
||||||
|
<tr><td valign=top><tt>glew.bin</tt></td><td>Build <tt>glewinfo</tt> and <tt>visualinfo</tt> utilities.</td><tr>
|
||||||
|
<tr><td valign=top><tt>clean</tt></td><td>Delete temporary and built files.</td><tr>
|
||||||
|
<tr><td valign=top><tt>install.all</tt></td><td>Install everything.</td><tr>
|
||||||
|
<tr><td valign=top><tt>install</tt></td><td>Install GLEW libraries.</td><tr>
|
||||||
|
<tr><td valign=top><tt>install.mx</tt></td><td>Install GLEWmx libraries.</td><tr>
|
||||||
|
<tr><td valign=top><tt>install.bin</tt></td><td>Install <tt>glewinfo</tt> and <tt>visualinfo</tt> utilities.</td><tr>
|
||||||
|
<tr><td valign=top><tt>uninstall</tt></td><td>Delete installed files.</td><tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h4>Requirements</h4>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>GNU make</li>
|
||||||
|
<li>perl</li>
|
||||||
|
<li>wget</li>
|
||||||
|
<li>GNU sed</li>
|
||||||
|
<li>gcc compiler</li>
|
||||||
|
<li>git</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
Ubuntu: <pre>sudo apt-get install libXmu-dev libXi-dev libgl-dev dos2unix git wget</pre>
|
||||||
|
Fedora: <pre>sudo yum install libXmu-devel libXi-devel libGL-devel dos2unix git wget</pre>
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
104
dependencies/glew-2.0.0/doc/credits.html
vendored
Normal file
104
dependencies/glew-2.0.0/doc/credits.html
vendored
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center"><a href="index.html">Download</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="basic.html">Usage</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="build.html">Building</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="install.html">Installation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="advanced.html">Source Generation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<p><a href="https://github.com/nigels-com/glew#copyright-and-licensing">
|
||||||
|
Author, copyright and licensing information</a> on github.</p>
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
BIN
dependencies/glew-2.0.0/doc/github.png
vendored
Normal file
BIN
dependencies/glew-2.0.0/doc/github.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
187
dependencies/glew-2.0.0/doc/glew.css
vendored
Normal file
187
dependencies/glew-2.0.0/doc/glew.css
vendored
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
h1
|
||||||
|
{
|
||||||
|
color: black;
|
||||||
|
font: 23px "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 12px;
|
||||||
|
margin-bottom: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2
|
||||||
|
{
|
||||||
|
color: black;
|
||||||
|
font: 18px "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
margin-top: 18px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3
|
||||||
|
{
|
||||||
|
color: black;
|
||||||
|
font: 17px "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
text-align: left;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
margin-top: 12px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
small
|
||||||
|
{
|
||||||
|
font: 8pt "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body
|
||||||
|
{
|
||||||
|
color: black;
|
||||||
|
font: 10pt "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
td
|
||||||
|
{
|
||||||
|
color: black;
|
||||||
|
font: 10pt "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt
|
||||||
|
{
|
||||||
|
color: rgb(0,120,0);
|
||||||
|
}
|
||||||
|
/* color: maroon; */
|
||||||
|
|
||||||
|
td.num
|
||||||
|
{
|
||||||
|
color: lightgrey;
|
||||||
|
font: 10pt "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote
|
||||||
|
{
|
||||||
|
color: rgb(0,120,0);
|
||||||
|
background: #f0f0f0;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 40px;
|
||||||
|
margin-right: 40px;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding-top: 0px;
|
||||||
|
border-top: 0px;
|
||||||
|
border-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre
|
||||||
|
{
|
||||||
|
color: rgb(0,120,0);
|
||||||
|
background: #f0f0f0;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 40px;
|
||||||
|
margin-right: 40px;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding-top: 0px;
|
||||||
|
border-top: 0px;
|
||||||
|
border-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p
|
||||||
|
{
|
||||||
|
color: black;
|
||||||
|
font: 10pt "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
text-align: left;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.right
|
||||||
|
{
|
||||||
|
color: black;
|
||||||
|
font: 10pt "Verdana", "Arial", "Helvetica", sans-serif;
|
||||||
|
text-align: right;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.pre
|
||||||
|
{
|
||||||
|
color: rgb(0,120,0);
|
||||||
|
font: 10pt "Courier New", "Courier", monospace;
|
||||||
|
background: #f0f0f0;
|
||||||
|
text-align: left;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
margin-left: 40px;
|
||||||
|
margin-right: 40px;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
padding-left: 6px;
|
||||||
|
padding-right: 6px;
|
||||||
|
border-top: 0px;
|
||||||
|
border-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link
|
||||||
|
{
|
||||||
|
color: rgb(0,0,139);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited
|
||||||
|
{
|
||||||
|
color: rgb(220,20,60);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover
|
||||||
|
{
|
||||||
|
color: rgb(220,20,60);
|
||||||
|
text-decoration: underline;
|
||||||
|
background: "#e8e8e8";
|
||||||
|
}
|
||||||
|
|
||||||
|
ul
|
||||||
|
{
|
||||||
|
list-style-type: disc;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 40px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding-top: 0px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.none
|
||||||
|
{
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol
|
||||||
|
{
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 40px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding-top: 0px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr
|
||||||
|
{
|
||||||
|
color: maroon;
|
||||||
|
background-color: maroon;
|
||||||
|
height: 1px;
|
||||||
|
border: 0px;
|
||||||
|
width: 80%;
|
||||||
|
}
|
724
dependencies/glew-2.0.0/doc/glew.html
vendored
Normal file
724
dependencies/glew-2.0.0/doc/glew.html
vendored
Normal file
@ -0,0 +1,724 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center"><a href="index.html">Download</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="basic.html">Usage</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="build.html">Building</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="install.html">Installation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="advanced.html">Source Generation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Supported OpenGL Extensions</h2>
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="1" cellspacing="0" align="center">
|
||||||
|
<tr><td class="num">1</td><td> </td><td><a href="http://www.opengl.org/registry/specs/3DFX/3dfx_multisample.txt">3DFX_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">2</td><td> </td><td><a href="http://www.opengl.org/registry/specs/3DFX/tbuffer.txt">3DFX_tbuffer</a></td></tr>
|
||||||
|
<tr><td class="num">3</td><td> </td><td><a href="http://www.opengl.org/registry/specs/3DFX/texture_compression_FXT1.txt">3DFX_texture_compression_FXT1</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">4</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/blend_minmax_factor.txt">AMD_blend_minmax_factor</a></td></tr>
|
||||||
|
<tr><td class="num">5</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/conservative_depth.txt">AMD_conservative_depth</a></td></tr>
|
||||||
|
<tr><td class="num">6</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/debug_output.txt">AMD_debug_output</a></td></tr>
|
||||||
|
<tr><td class="num">7</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/depth_clamp_separate.txt">AMD_depth_clamp_separate</a></td></tr>
|
||||||
|
<tr><td class="num">8</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/draw_buffers_blend.txt">AMD_draw_buffers_blend</a></td></tr>
|
||||||
|
<tr><td class="num">9</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/gcn_shader.txt">AMD_gcn_shader</a></td></tr>
|
||||||
|
<tr><td class="num">10</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/gpu_shader_int64.txt">AMD_gpu_shader_int64</a></td></tr>
|
||||||
|
<tr><td class="num">11</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/interleaved_elements.txt">AMD_interleaved_elements</a></td></tr>
|
||||||
|
<tr><td class="num">12</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/multi_draw_indirect.txt">AMD_multi_draw_indirect</a></td></tr>
|
||||||
|
<tr><td class="num">13</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/name_gen_delete.txt">AMD_name_gen_delete</a></td></tr>
|
||||||
|
<tr><td class="num">14</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/occlusion_query_event.txt">AMD_occlusion_query_event</a></td></tr>
|
||||||
|
<tr><td class="num">15</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/performance_monitor.txt">AMD_performance_monitor</a></td></tr>
|
||||||
|
<tr><td class="num">16</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/pinned_memory.txt">AMD_pinned_memory</a></td></tr>
|
||||||
|
<tr><td class="num">17</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/query_buffer_object.txt">AMD_query_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">18</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/sample_positions.txt">AMD_sample_positions</a></td></tr>
|
||||||
|
<tr><td class="num">19</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/seamless_cubemap_per_texture.txt">AMD_seamless_cubemap_per_texture</a></td></tr>
|
||||||
|
<tr><td class="num">20</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/shader_atomic_counter_ops.txt">AMD_shader_atomic_counter_ops</a></td></tr>
|
||||||
|
<tr><td class="num">21</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/shader_explicit_vertex_parameter.txt">AMD_shader_explicit_vertex_parameter</a></td></tr>
|
||||||
|
<tr><td class="num">22</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/shader_stencil_export.txt">AMD_shader_stencil_export</a></td></tr>
|
||||||
|
<tr><td class="num">23</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/shader_stencil_value_export.txt">AMD_shader_stencil_value_export</a></td></tr>
|
||||||
|
<tr><td class="num">24</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/shader_trinary_minmax.txt">AMD_shader_trinary_minmax</a></td></tr>
|
||||||
|
<tr><td class="num">25</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/sparse_texture.txt">AMD_sparse_texture</a></td></tr>
|
||||||
|
<tr><td class="num">26</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/stencil_operation_extended.txt">AMD_stencil_operation_extended</a></td></tr>
|
||||||
|
<tr><td class="num">27</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/texture_texture4.txt">AMD_texture_texture4</a></td></tr>
|
||||||
|
<tr><td class="num">28</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/transform_feedback3_lines_triangles.txt">AMD_transform_feedback3_lines_triangles</a></td></tr>
|
||||||
|
<tr><td class="num">29</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/transform_feedback4.txt">AMD_transform_feedback4</a></td></tr>
|
||||||
|
<tr><td class="num">30</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/vertex_shader_layer.txt">AMD_vertex_shader_layer</a></td></tr>
|
||||||
|
<tr><td class="num">31</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/vertex_shader_tessellator.txt">AMD_vertex_shader_tessellator</a></td></tr>
|
||||||
|
<tr><td class="num">32</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/vertex_shader_viewport_index.txt">AMD_vertex_shader_viewport_index</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">33</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_depth_texture</a></td></tr>
|
||||||
|
<tr><td class="num">34</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_framebuffer_blit</a></td></tr>
|
||||||
|
<tr><td class="num">35</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_framebuffer_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">36</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_instanced_arrays</a></td></tr>
|
||||||
|
<tr><td class="num">37</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_pack_reverse_row_order</a></td></tr>
|
||||||
|
<tr><td class="num">38</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_program_binary</a></td></tr>
|
||||||
|
<tr><td class="num">39</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_texture_compression_dxt1</a></td></tr>
|
||||||
|
<tr><td class="num">40</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_texture_compression_dxt3</a></td></tr>
|
||||||
|
<tr><td class="num">41</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_texture_compression_dxt5</a></td></tr>
|
||||||
|
<tr><td class="num">42</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_texture_usage</a></td></tr>
|
||||||
|
<tr><td class="num">43</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_timer_query</a></td></tr>
|
||||||
|
<tr><td class="num">44</td><td> </td><td><a href="https://code.google.com/p/angleproject/source/browse/#git%2Fextensions">ANGLE_translated_shader_source</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">45</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/aux_depth_stencil.txt">APPLE_aux_depth_stencil</a></td></tr>
|
||||||
|
<tr><td class="num">46</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/client_storage.txt">APPLE_client_storage</a></td></tr>
|
||||||
|
<tr><td class="num">47</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/element_array.txt">APPLE_element_array</a></td></tr>
|
||||||
|
<tr><td class="num">48</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/fence.txt">APPLE_fence</a></td></tr>
|
||||||
|
<tr><td class="num">49</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/float_pixels.txt">APPLE_float_pixels</a></td></tr>
|
||||||
|
<tr><td class="num">50</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/flush_buffer_range.txt">APPLE_flush_buffer_range</a></td></tr>
|
||||||
|
<tr><td class="num">51</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/object_purgeable.txt">APPLE_object_purgeable</a></td></tr>
|
||||||
|
<tr><td class="num">52</td><td> </td><td>APPLE_pixel_buffer</td></tr>
|
||||||
|
<tr><td class="num">53</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/rgb_422.txt">APPLE_rgb_422</a></td></tr>
|
||||||
|
<tr><td class="num">54</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/row_bytes.txt">APPLE_row_bytes</a></td></tr>
|
||||||
|
<tr><td class="num">55</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/specular_vector.txt">APPLE_specular_vector</a></td></tr>
|
||||||
|
<tr><td class="num">56</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/texture_range.txt">APPLE_texture_range</a></td></tr>
|
||||||
|
<tr><td class="num">57</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/transform_hint.txt">APPLE_transform_hint</a></td></tr>
|
||||||
|
<tr><td class="num">58</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/vertex_array_object.txt">APPLE_vertex_array_object</a></td></tr>
|
||||||
|
<tr><td class="num">59</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/vertex_array_range.txt">APPLE_vertex_array_range</a></td></tr>
|
||||||
|
<tr><td class="num">60</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/vertex_program_evaluators.txt">APPLE_vertex_program_evaluators</a></td></tr>
|
||||||
|
<tr><td class="num">61</td><td> </td><td><a href="http://www.opengl.org/registry/specs/APPLE/ycbcr_422.txt">APPLE_ycbcr_422</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">62</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt">ARB_ES2_compatibility</a></td></tr>
|
||||||
|
<tr><td class="num">63</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/ES3_1_compatibility.txt">ARB_ES3_1_compatibility</a></td></tr>
|
||||||
|
<tr><td class="num">64</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/ES3_2_compatibility.txt">ARB_ES3_2_compatibility</a></td></tr>
|
||||||
|
<tr><td class="num">65</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/ES3_compatibility.txt">ARB_ES3_compatibility</a></td></tr>
|
||||||
|
<tr><td class="num">66</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/arrays_of_arrays.txt">ARB_arrays_of_arrays</a></td></tr>
|
||||||
|
<tr><td class="num">67</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/base_instance.txt">ARB_base_instance</a></td></tr>
|
||||||
|
<tr><td class="num">68</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/bindless_texture.txt">ARB_bindless_texture</a></td></tr>
|
||||||
|
<tr><td class="num">69</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/blend_func_extended.txt">ARB_blend_func_extended</a></td></tr>
|
||||||
|
<tr><td class="num">70</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/buffer_storage.txt">ARB_buffer_storage</a></td></tr>
|
||||||
|
<tr><td class="num">71</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/cl_event.txt">ARB_cl_event</a></td></tr>
|
||||||
|
<tr><td class="num">72</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/clear_buffer_object.txt">ARB_clear_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">73</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/clear_texture.txt">ARB_clear_texture</a></td></tr>
|
||||||
|
<tr><td class="num">74</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/clip_control.txt">ARB_clip_control</a></td></tr>
|
||||||
|
<tr><td class="num">75</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt">ARB_color_buffer_float</a></td></tr>
|
||||||
|
<tr><td class="num">76</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/compatibility.txt">ARB_compatibility</a></td></tr>
|
||||||
|
<tr><td class="num">77</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/compressed_texture_pixel_storage.txt">ARB_compressed_texture_pixel_storage</a></td></tr>
|
||||||
|
<tr><td class="num">78</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/compute_shader.txt">ARB_compute_shader</a></td></tr>
|
||||||
|
<tr><td class="num">79</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/compute_variable_group_size.txt">ARB_compute_variable_group_size</a></td></tr>
|
||||||
|
<tr><td class="num">80</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/conditional_render_inverted.txt">ARB_conditional_render_inverted</a></td></tr>
|
||||||
|
<tr><td class="num">81</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/conservative_depth.txt">ARB_conservative_depth</a></td></tr>
|
||||||
|
<tr><td class="num">82</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/copy_buffer.txt">ARB_copy_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">83</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/copy_image.txt">ARB_copy_image</a></td></tr>
|
||||||
|
<tr><td class="num">84</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/cull_distance.txt">ARB_cull_distance</a></td></tr>
|
||||||
|
<tr><td class="num">85</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/debug_output.txt">ARB_debug_output</a></td></tr>
|
||||||
|
<tr><td class="num">86</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/depth_buffer_float.txt">ARB_depth_buffer_float</a></td></tr>
|
||||||
|
<tr><td class="num">87</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/depth_clamp.txt">ARB_depth_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">88</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/depth_texture.txt">ARB_depth_texture</a></td></tr>
|
||||||
|
<tr><td class="num">89</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/derivative_control.txt">ARB_derivative_control</a></td></tr>
|
||||||
|
<tr><td class="num">90</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/direct_state_access.txt">ARB_direct_state_access</a></td></tr>
|
||||||
|
<tr><td class="num">91</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/draw_buffers.txt">ARB_draw_buffers</a></td></tr>
|
||||||
|
<tr><td class="num">92</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/draw_buffers_blend.txt">ARB_draw_buffers_blend</a></td></tr>
|
||||||
|
<tr><td class="num">93</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/draw_elements_base_vertex.txt">ARB_draw_elements_base_vertex</a></td></tr>
|
||||||
|
<tr><td class="num">94</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/draw_indirect.txt">ARB_draw_indirect</a></td></tr>
|
||||||
|
<tr><td class="num">95</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/draw_instanced.txt">ARB_draw_instanced</a></td></tr>
|
||||||
|
<tr><td class="num">96</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/enhanced_layouts.txt">ARB_enhanced_layouts</a></td></tr>
|
||||||
|
<tr><td class="num">97</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/explicit_attrib_location.txt">ARB_explicit_attrib_location</a></td></tr>
|
||||||
|
<tr><td class="num">98</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/explicit_uniform_location.txt">ARB_explicit_uniform_location</a></td></tr>
|
||||||
|
<tr><td class="num">99</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/fragment_coord_conventions.txt">ARB_fragment_coord_conventions</a></td></tr>
|
||||||
|
<tr><td class="num">100</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/fragment_layer_viewport.txt">ARB_fragment_layer_viewport</a></td></tr>
|
||||||
|
<tr><td class="num">101</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/fragment_program.txt">ARB_fragment_program</a></td></tr>
|
||||||
|
<tr><td class="num">102</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/fragment_program_shadow.txt">ARB_fragment_program_shadow</a></td></tr>
|
||||||
|
<tr><td class="num">103</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/fragment_shader.txt">ARB_fragment_shader</a></td></tr>
|
||||||
|
<tr><td class="num">104</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/fragment_shader_interlock.txt">ARB_fragment_shader_interlock</a></td></tr>
|
||||||
|
<tr><td class="num">105</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/framebuffer_no_attachments.txt">ARB_framebuffer_no_attachments</a></td></tr>
|
||||||
|
<tr><td class="num">106</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/framebuffer_object.txt">ARB_framebuffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">107</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/framebuffer_sRGB.txt">ARB_framebuffer_sRGB</a></td></tr>
|
||||||
|
<tr><td class="num">108</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/geometry_shader4.txt">ARB_geometry_shader4</a></td></tr>
|
||||||
|
<tr><td class="num">109</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/get_program_binary.txt">ARB_get_program_binary</a></td></tr>
|
||||||
|
<tr><td class="num">110</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/get_texture_sub_image.txt">ARB_get_texture_sub_image</a></td></tr>
|
||||||
|
<tr><td class="num">111</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/gl_spirv.txt">ARB_gl_spirv</a></td></tr>
|
||||||
|
<tr><td class="num">112</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/gpu_shader5.txt">ARB_gpu_shader5</a></td></tr>
|
||||||
|
<tr><td class="num">113</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt">ARB_gpu_shader_fp64</a></td></tr>
|
||||||
|
<tr><td class="num">114</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/gpu_shader_int64.txt">ARB_gpu_shader_int64</a></td></tr>
|
||||||
|
<tr><td class="num">115</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/half_float_pixel.txt">ARB_half_float_pixel</a></td></tr>
|
||||||
|
<tr><td class="num">116</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/half_float_vertex.txt">ARB_half_float_vertex</a></td></tr>
|
||||||
|
<tr><td class="num">117</td><td> </td><td>ARB_imaging</td></tr>
|
||||||
|
<tr><td class="num">118</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/indirect_parameters.txt">ARB_indirect_parameters</a></td></tr>
|
||||||
|
<tr><td class="num">119</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/instanced_arrays.txt">ARB_instanced_arrays</a></td></tr>
|
||||||
|
<tr><td class="num">120</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/internalformat_query.txt">ARB_internalformat_query</a></td></tr>
|
||||||
|
<tr><td class="num">121</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt">ARB_internalformat_query2</a></td></tr>
|
||||||
|
<tr><td class="num">122</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/invalidate_subdata.txt">ARB_invalidate_subdata</a></td></tr>
|
||||||
|
<tr><td class="num">123</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/map_buffer_alignment.txt">ARB_map_buffer_alignment</a></td></tr>
|
||||||
|
<tr><td class="num">124</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/map_buffer_range.txt">ARB_map_buffer_range</a></td></tr>
|
||||||
|
<tr><td class="num">125</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt">ARB_matrix_palette</a></td></tr>
|
||||||
|
<tr><td class="num">126</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/multi_bind.txt">ARB_multi_bind</a></td></tr>
|
||||||
|
<tr><td class="num">127</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/multi_draw_indirect.txt">ARB_multi_draw_indirect</a></td></tr>
|
||||||
|
<tr><td class="num">128</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/multisample.txt">ARB_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">129</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/ARB/multitexture.txt">ARB_multitexture</a></td></tr>
|
||||||
|
<tr><td class="num">130</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/occlusion_query.txt">ARB_occlusion_query</a></td></tr>
|
||||||
|
<tr><td class="num">131</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/occlusion_query2.txt">ARB_occlusion_query2</a></td></tr>
|
||||||
|
<tr><td class="num">132</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/parallel_shader_compile.txt">ARB_parallel_shader_compile</a></td></tr>
|
||||||
|
<tr><td class="num">133</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/pipeline_statistics_query.txt">ARB_pipeline_statistics_query</a></td></tr>
|
||||||
|
<tr><td class="num">134</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/pixel_buffer_object.txt">ARB_pixel_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">135</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/point_parameters.txt">ARB_point_parameters</a></td></tr>
|
||||||
|
<tr><td class="num">136</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/point_sprite.txt">ARB_point_sprite</a></td></tr>
|
||||||
|
<tr><td class="num">137</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/post_depth_coverage.txt">ARB_post_depth_coverage</a></td></tr>
|
||||||
|
<tr><td class="num">138</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/program_interface_query.txt">ARB_program_interface_query</a></td></tr>
|
||||||
|
<tr><td class="num">139</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/provoking_vertex.txt">ARB_provoking_vertex</a></td></tr>
|
||||||
|
<tr><td class="num">140</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/query_buffer_object.txt">ARB_query_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">141</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/robust_buffer_access_behavior.txt">ARB_robust_buffer_access_behavior</a></td></tr>
|
||||||
|
<tr><td class="num">142</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/robustness.txt">ARB_robustness</a></td></tr>
|
||||||
|
<tr><td class="num">143</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/robustness_isolation.txt">ARB_robustness_application_isolation</a></td></tr>
|
||||||
|
<tr><td class="num">144</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/robustness_isolation.txt">ARB_robustness_share_group_isolation</a></td></tr>
|
||||||
|
<tr><td class="num">145</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/sample_locations.txt">ARB_sample_locations</a></td></tr>
|
||||||
|
<tr><td class="num">146</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/sample_shading.txt">ARB_sample_shading</a></td></tr>
|
||||||
|
<tr><td class="num">147</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/sampler_objects.txt">ARB_sampler_objects</a></td></tr>
|
||||||
|
<tr><td class="num">148</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/seamless_cube_map.txt">ARB_seamless_cube_map</a></td></tr>
|
||||||
|
<tr><td class="num">149</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/seamless_cubemap_per_texture.txt">ARB_seamless_cubemap_per_texture</a></td></tr>
|
||||||
|
<tr><td class="num">150</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt">ARB_separate_shader_objects</a></td></tr>
|
||||||
|
<tr><td class="num">151</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_atomic_counter_ops.txt">ARB_shader_atomic_counter_ops</a></td></tr>
|
||||||
|
<tr><td class="num">152</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_atomic_counters.txt">ARB_shader_atomic_counters</a></td></tr>
|
||||||
|
<tr><td class="num">153</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_ballot.txt">ARB_shader_ballot</a></td></tr>
|
||||||
|
<tr><td class="num">154</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_bit_encoding.txt">ARB_shader_bit_encoding</a></td></tr>
|
||||||
|
<tr><td class="num">155</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_clock.txt">ARB_shader_clock</a></td></tr>
|
||||||
|
<tr><td class="num">156</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_draw_parameters.txt">ARB_shader_draw_parameters</a></td></tr>
|
||||||
|
<tr><td class="num">157</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_group_vote.txt">ARB_shader_group_vote</a></td></tr>
|
||||||
|
<tr><td class="num">158</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt">ARB_shader_image_load_store</a></td></tr>
|
||||||
|
<tr><td class="num">159</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_image_size.txt">ARB_shader_image_size</a></td></tr>
|
||||||
|
<tr><td class="num">160</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_objects.txt">ARB_shader_objects</a></td></tr>
|
||||||
|
<tr><td class="num">161</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_precision.txt">ARB_shader_precision</a></td></tr>
|
||||||
|
<tr><td class="num">162</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_stencil_export.txt">ARB_shader_stencil_export</a></td></tr>
|
||||||
|
<tr><td class="num">163</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_storage_buffer_object.txt">ARB_shader_storage_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">164</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_subroutine.txt">ARB_shader_subroutine</a></td></tr>
|
||||||
|
<tr><td class="num">165</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_texture_image_samples.txt">ARB_shader_texture_image_samples</a></td></tr>
|
||||||
|
<tr><td class="num">166</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_texture_lod.txt">ARB_shader_texture_lod</a></td></tr>
|
||||||
|
<tr><td class="num">167</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shader_viewport_layer_array.txt">ARB_shader_viewport_layer_array</a></td></tr>
|
||||||
|
<tr><td class="num">168</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shading_language_100.txt">ARB_shading_language_100</a></td></tr>
|
||||||
|
<tr><td class="num">169</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shading_language_420pack.txt">ARB_shading_language_420pack</a></td></tr>
|
||||||
|
<tr><td class="num">170</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shading_language_include.txt">ARB_shading_language_include</a></td></tr>
|
||||||
|
<tr><td class="num">171</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shading_language_packing.txt">ARB_shading_language_packing</a></td></tr>
|
||||||
|
<tr><td class="num">172</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shadow.txt">ARB_shadow</a></td></tr>
|
||||||
|
<tr><td class="num">173</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/shadow_ambient.txt">ARB_shadow_ambient</a></td></tr>
|
||||||
|
<tr><td class="num">174</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/sparse_buffer.txt">ARB_sparse_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">175</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/sparse_texture.txt">ARB_sparse_texture</a></td></tr>
|
||||||
|
<tr><td class="num">176</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/sparse_texture2.txt">ARB_sparse_texture2</a></td></tr>
|
||||||
|
<tr><td class="num">177</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/sparse_texture_clamp.txt">ARB_sparse_texture_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">178</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/stencil_texturing.txt">ARB_stencil_texturing</a></td></tr>
|
||||||
|
<tr><td class="num">179</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/sync.txt">ARB_sync</a></td></tr>
|
||||||
|
<tr><td class="num">180</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/tessellation_shader.txt">ARB_tessellation_shader</a></td></tr>
|
||||||
|
<tr><td class="num">181</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_barrier.txt">ARB_texture_barrier</a></td></tr>
|
||||||
|
<tr><td class="num">182</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_border_clamp.txt">ARB_texture_border_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">183</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_buffer_object.txt">ARB_texture_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">184</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_buffer_object_rgb32.txt">ARB_texture_buffer_object_rgb32</a></td></tr>
|
||||||
|
<tr><td class="num">185</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_buffer_range.txt">ARB_texture_buffer_range</a></td></tr>
|
||||||
|
<tr><td class="num">186</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_compression.txt">ARB_texture_compression</a></td></tr>
|
||||||
|
<tr><td class="num">187</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_compression_bptc.txt">ARB_texture_compression_bptc</a></td></tr>
|
||||||
|
<tr><td class="num">188</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_compression_rgtc.txt">ARB_texture_compression_rgtc</a></td></tr>
|
||||||
|
<tr><td class="num">189</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_cube_map.txt">ARB_texture_cube_map</a></td></tr>
|
||||||
|
<tr><td class="num">190</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_cube_map_array.txt">ARB_texture_cube_map_array</a></td></tr>
|
||||||
|
<tr><td class="num">191</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_env_add.txt">ARB_texture_env_add</a></td></tr>
|
||||||
|
<tr><td class="num">192</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_env_combine.txt">ARB_texture_env_combine</a></td></tr>
|
||||||
|
<tr><td class="num">193</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_env_crossbar.txt">ARB_texture_env_crossbar</a></td></tr>
|
||||||
|
<tr><td class="num">194</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_env_dot3.txt">ARB_texture_env_dot3</a></td></tr>
|
||||||
|
<tr><td class="num">195</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_filter_minmax.txt">ARB_texture_filter_minmax</a></td></tr>
|
||||||
|
<tr><td class="num">196</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_float.txt">ARB_texture_float</a></td></tr>
|
||||||
|
<tr><td class="num">197</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_gather.txt">ARB_texture_gather</a></td></tr>
|
||||||
|
<tr><td class="num">198</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_mirror_clamp_to_edge.txt">ARB_texture_mirror_clamp_to_edge</a></td></tr>
|
||||||
|
<tr><td class="num">199</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_mirrored_repeat.txt">ARB_texture_mirrored_repeat</a></td></tr>
|
||||||
|
<tr><td class="num">200</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_multisample.txt">ARB_texture_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">201</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_non_power_of_two.txt">ARB_texture_non_power_of_two</a></td></tr>
|
||||||
|
<tr><td class="num">202</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_query_levels.txt">ARB_texture_query_levels</a></td></tr>
|
||||||
|
<tr><td class="num">203</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_query_lod.txt">ARB_texture_query_lod</a></td></tr>
|
||||||
|
<tr><td class="num">204</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_rectangle.txt">ARB_texture_rectangle</a></td></tr>
|
||||||
|
<tr><td class="num">205</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_rg.txt">ARB_texture_rg</a></td></tr>
|
||||||
|
<tr><td class="num">206</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_rgb10_a2ui.txt">ARB_texture_rgb10_a2ui</a></td></tr>
|
||||||
|
<tr><td class="num">207</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_stencil8.txt">ARB_texture_stencil8</a></td></tr>
|
||||||
|
<tr><td class="num">208</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_storage.txt">ARB_texture_storage</a></td></tr>
|
||||||
|
<tr><td class="num">209</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_storage_multisample.txt">ARB_texture_storage_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">210</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_swizzle.txt">ARB_texture_swizzle</a></td></tr>
|
||||||
|
<tr><td class="num">211</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/texture_view.txt">ARB_texture_view</a></td></tr>
|
||||||
|
<tr><td class="num">212</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/timer_query.txt">ARB_timer_query</a></td></tr>
|
||||||
|
<tr><td class="num">213</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/transform_feedback2.txt">ARB_transform_feedback2</a></td></tr>
|
||||||
|
<tr><td class="num">214</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/transform_feedback3.txt">ARB_transform_feedback3</a></td></tr>
|
||||||
|
<tr><td class="num">215</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/transform_feedback_instanced.txt">ARB_transform_feedback_instanced</a></td></tr>
|
||||||
|
<tr><td class="num">216</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/transform_feedback_overflow_query.txt">ARB_transform_feedback_overflow_query</a></td></tr>
|
||||||
|
<tr><td class="num">217</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/transpose_matrix.txt">ARB_transpose_matrix</a></td></tr>
|
||||||
|
<tr><td class="num">218</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/uniform_buffer_object.txt">ARB_uniform_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">219</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_array_bgra.txt">ARB_vertex_array_bgra</a></td></tr>
|
||||||
|
<tr><td class="num">220</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_array_object.txt">ARB_vertex_array_object</a></td></tr>
|
||||||
|
<tr><td class="num">221</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt">ARB_vertex_attrib_64bit</a></td></tr>
|
||||||
|
<tr><td class="num">222</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_attrib_binding.txt">ARB_vertex_attrib_binding</a></td></tr>
|
||||||
|
<tr><td class="num">223</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_blend.txt">ARB_vertex_blend</a></td></tr>
|
||||||
|
<tr><td class="num">224</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt">ARB_vertex_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">225</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_program.txt">ARB_vertex_program</a></td></tr>
|
||||||
|
<tr><td class="num">226</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_shader.txt">ARB_vertex_shader</a></td></tr>
|
||||||
|
<tr><td class="num">227</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_type_10f_11f_11f_rev.txt">ARB_vertex_type_10f_11f_11f_rev</a></td></tr>
|
||||||
|
<tr><td class="num">228</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_type_2_10_10_10_rev.txt">ARB_vertex_type_2_10_10_10_rev</a></td></tr>
|
||||||
|
<tr><td class="num">229</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/viewport_array.txt">ARB_viewport_array</a></td></tr>
|
||||||
|
<tr><td class="num">230</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/window_pos.txt">ARB_window_pos</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">231</td><td> </td><td><a href="http://www.ati.com/developer/atiopengl.pdf">ATIX_point_sprites</a></td></tr>
|
||||||
|
<tr><td class="num">232</td><td> </td><td><a href="http://www.ati.com/developer/atiopengl.pdf">ATIX_texture_env_combine3</a></td></tr>
|
||||||
|
<tr><td class="num">233</td><td> </td><td><a href="http://www.ati.com/developer/sdk/RadeonSDK/Html/Info/ATIX_texture_env_route.txt">ATIX_texture_env_route</a></td></tr>
|
||||||
|
<tr><td class="num">234</td><td> </td><td><a href="http://www.ati.com/developer/atiopengl.pdf">ATIX_vertex_shader_output_point_size</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">235</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/draw_buffers.txt">ATI_draw_buffers</a></td></tr>
|
||||||
|
<tr><td class="num">236</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/element_array.txt">ATI_element_array</a></td></tr>
|
||||||
|
<tr><td class="num">237</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/ATI/envmap_bumpmap.txt">ATI_envmap_bumpmap</a></td></tr>
|
||||||
|
<tr><td class="num">238</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/fragment_shader.txt">ATI_fragment_shader</a></td></tr>
|
||||||
|
<tr><td class="num">239</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/map_object_buffer.txt">ATI_map_object_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">240</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/meminfo.txt">ATI_meminfo</a></td></tr>
|
||||||
|
<tr><td class="num">241</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/pn_triangles.txt">ATI_pn_triangles</a></td></tr>
|
||||||
|
<tr><td class="num">242</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/separate_stencil.txt">ATI_separate_stencil</a></td></tr>
|
||||||
|
<tr><td class="num">243</td><td> </td><td>ATI_shader_texture_lod</td></tr>
|
||||||
|
<tr><td class="num">244</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/text_fragment_shader.txt">ATI_text_fragment_shader</a></td></tr>
|
||||||
|
<tr><td class="num">245</td><td> </td><td>ATI_texture_compression_3dc</td></tr>
|
||||||
|
<tr><td class="num">246</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/texture_env_combine3.txt">ATI_texture_env_combine3</a></td></tr>
|
||||||
|
<tr><td class="num">247</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/texture_float.txt">ATI_texture_float</a></td></tr>
|
||||||
|
<tr><td class="num">248</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/texture_mirror_once.txt">ATI_texture_mirror_once</a></td></tr>
|
||||||
|
<tr><td class="num">249</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/vertex_array_object.txt">ATI_vertex_array_object</a></td></tr>
|
||||||
|
<tr><td class="num">250</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/vertex_attrib_array_object.txt">ATI_vertex_attrib_array_object</a></td></tr>
|
||||||
|
<tr><td class="num">251</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/vertex_streams.txt">ATI_vertex_streams</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">252</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/robustness_video_memory_purge.txt">EGL_NV_robustness_video_memory_purge</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">253</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/422_pixels.txt">EXT_422_pixels</a></td></tr>
|
||||||
|
<tr><td class="num">254</td><td> </td><td><a href="http://download.nvidia.com/developer/GLSL/GLSL%20Release%20Notes%20for%20Release%2060.pdf">EXT_Cg_shader</a></td></tr>
|
||||||
|
<tr><td class="num">255</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/abgr.txt">EXT_abgr</a></td></tr>
|
||||||
|
<tr><td class="num">256</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/bgra.txt">EXT_bgra</a></td></tr>
|
||||||
|
<tr><td class="num">257</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_bindable_uniform.txt">EXT_bindable_uniform</a></td></tr>
|
||||||
|
<tr><td class="num">258</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/blend_color.txt">EXT_blend_color</a></td></tr>
|
||||||
|
<tr><td class="num">259</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/blend_equation_separate.txt">EXT_blend_equation_separate</a></td></tr>
|
||||||
|
<tr><td class="num">260</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/blend_func_separate.txt">EXT_blend_func_separate</a></td></tr>
|
||||||
|
<tr><td class="num">261</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/blend_logic_op.txt">EXT_blend_logic_op</a></td></tr>
|
||||||
|
<tr><td class="num">262</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/blend_minmax.txt">EXT_blend_minmax</a></td></tr>
|
||||||
|
<tr><td class="num">263</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/blend_subtract.txt">EXT_blend_subtract</a></td></tr>
|
||||||
|
<tr><td class="num">264</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/clip_volume_hint.txt">EXT_clip_volume_hint</a></td></tr>
|
||||||
|
<tr><td class="num">265</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/cmyka.txt">EXT_cmyka</a></td></tr>
|
||||||
|
<tr><td class="num">266</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/color_subtable.txt">EXT_color_subtable</a></td></tr>
|
||||||
|
<tr><td class="num">267</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/compiled_vertex_array.txt">EXT_compiled_vertex_array</a></td></tr>
|
||||||
|
<tr><td class="num">268</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/convolution.txt">EXT_convolution</a></td></tr>
|
||||||
|
<tr><td class="num">269</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/coordinate_frame.txt">EXT_coordinate_frame</a></td></tr>
|
||||||
|
<tr><td class="num">270</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/copy_texture.txt">EXT_copy_texture</a></td></tr>
|
||||||
|
<tr><td class="num">271</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/cull_vertex.txt">EXT_cull_vertex</a></td></tr>
|
||||||
|
<tr><td class="num">272</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/EXT_debug_label.txt">EXT_debug_label</a></td></tr>
|
||||||
|
<tr><td class="num">273</td><td> </td><td><a href="http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt">EXT_debug_marker</a></td></tr>
|
||||||
|
<tr><td class="num">274</td><td> </td><td><a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_depth_bounds_test.txt">EXT_depth_bounds_test</a></td></tr>
|
||||||
|
<tr><td class="num">275</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/direct_state_access.txt">EXT_direct_state_access</a></td></tr>
|
||||||
|
<tr><td class="num">276</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/draw_buffers2.txt">EXT_draw_buffers2</a></td></tr>
|
||||||
|
<tr><td class="num">277</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_draw_instanced.txt">EXT_draw_instanced</a></td></tr>
|
||||||
|
<tr><td class="num">278</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/EXT/draw_range_elements.txt">EXT_draw_range_elements</a></td></tr>
|
||||||
|
<tr><td class="num">279</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/EXT/fog_coord.txt">EXT_fog_coord</a></td></tr>
|
||||||
|
<tr><td class="num">280</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/fragment_lighting.txt">EXT_fragment_lighting</a></td></tr>
|
||||||
|
<tr><td class="num">281</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/framebuffer_blit.txt">EXT_framebuffer_blit</a></td></tr>
|
||||||
|
<tr><td class="num">282</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/framebuffer_multisample.txt">EXT_framebuffer_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">283</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/framebuffer_multisample_blit_scaled.txt">EXT_framebuffer_multisample_blit_scaled</a></td></tr>
|
||||||
|
<tr><td class="num">284</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/framebuffer_object.txt">EXT_framebuffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">285</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt">EXT_framebuffer_sRGB</a></td></tr>
|
||||||
|
<tr><td class="num">286</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_geometry_shader4.txt">EXT_geometry_shader4</a></td></tr>
|
||||||
|
<tr><td class="num">287</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_program_parameters.txt">EXT_gpu_program_parameters</a></td></tr>
|
||||||
|
<tr><td class="num">288</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_shader4.txt">EXT_gpu_shader4</a></td></tr>
|
||||||
|
<tr><td class="num">289</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/histogram.txt">EXT_histogram</a></td></tr>
|
||||||
|
<tr><td class="num">290</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/index_array_formats.txt">EXT_index_array_formats</a></td></tr>
|
||||||
|
<tr><td class="num">291</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/index_func.txt">EXT_index_func</a></td></tr>
|
||||||
|
<tr><td class="num">292</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/index_material.txt">EXT_index_material</a></td></tr>
|
||||||
|
<tr><td class="num">293</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/index_texture.txt">EXT_index_texture</a></td></tr>
|
||||||
|
<tr><td class="num">294</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/light_texture.txt">EXT_light_texture</a></td></tr>
|
||||||
|
<tr><td class="num">295</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/misc_attribute.txt">EXT_misc_attribute</a></td></tr>
|
||||||
|
<tr><td class="num">296</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/multi_draw_arrays.txt">EXT_multi_draw_arrays</a></td></tr>
|
||||||
|
<tr><td class="num">297</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_multisample.txt">EXT_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">298</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/packed_depth_stencil.txt">EXT_packed_depth_stencil</a></td></tr>
|
||||||
|
<tr><td class="num">299</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt">EXT_packed_float</a></td></tr>
|
||||||
|
<tr><td class="num">300</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/packed_pixels.txt">EXT_packed_pixels</a></td></tr>
|
||||||
|
<tr><td class="num">301</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/paletted_texture.txt">EXT_paletted_texture</a></td></tr>
|
||||||
|
<tr><td class="num">302</td><td> </td><td><a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_pixel_buffer_object.txt">EXT_pixel_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">303</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/pixel_transform.txt">EXT_pixel_transform</a></td></tr>
|
||||||
|
<tr><td class="num">304</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/pixel_transform_color_table.txt">EXT_pixel_transform_color_table</a></td></tr>
|
||||||
|
<tr><td class="num">305</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/point_parameters.txt">EXT_point_parameters</a></td></tr>
|
||||||
|
<tr><td class="num">306</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/polygon_offset.txt">EXT_polygon_offset</a></td></tr>
|
||||||
|
<tr><td class="num">307</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/polygon_offset_clamp.txt">EXT_polygon_offset_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">308</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/post_depth_coverage.txt">EXT_post_depth_coverage</a></td></tr>
|
||||||
|
<tr><td class="num">309</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/provoking_vertex.txt">EXT_provoking_vertex</a></td></tr>
|
||||||
|
<tr><td class="num">310</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/framebuffer_mixed_samples.txt">EXT_raster_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">311</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/rescale_normal.txt">EXT_rescale_normal</a></td></tr>
|
||||||
|
<tr><td class="num">312</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/scene_marker.txt">EXT_scene_marker</a></td></tr>
|
||||||
|
<tr><td class="num">313</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/EXT/secondary_color.txt">EXT_secondary_color</a></td></tr>
|
||||||
|
<tr><td class="num">314</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/separate_shader_objects.txt">EXT_separate_shader_objects</a></td></tr>
|
||||||
|
<tr><td class="num">315</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/separate_specular_color.txt">EXT_separate_specular_color</a></td></tr>
|
||||||
|
<tr><td class="num">316</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/shader_image_load_formatted.txt">EXT_shader_image_load_formatted</a></td></tr>
|
||||||
|
<tr><td class="num">317</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/shader_image_load_store.txt">EXT_shader_image_load_store</a></td></tr>
|
||||||
|
<tr><td class="num">318</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/shader_integer_mix.txt">EXT_shader_integer_mix</a></td></tr>
|
||||||
|
<tr><td class="num">319</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/shadow_funcs.txt">EXT_shadow_funcs</a></td></tr>
|
||||||
|
<tr><td class="num">320</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/shared_texture_palette.txt">EXT_shared_texture_palette</a></td></tr>
|
||||||
|
<tr><td class="num">321</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/sparse_texture2.txt">EXT_sparse_texture2</a></td></tr>
|
||||||
|
<tr><td class="num">322</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/stencil_clear_tag.txt">EXT_stencil_clear_tag</a></td></tr>
|
||||||
|
<tr><td class="num">323</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/stencil_two_side.txt">EXT_stencil_two_side</a></td></tr>
|
||||||
|
<tr><td class="num">324</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/stencil_wrap.txt">EXT_stencil_wrap</a></td></tr>
|
||||||
|
<tr><td class="num">325</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/subtexture.txt">EXT_subtexture</a></td></tr>
|
||||||
|
<tr><td class="num">326</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture.txt">EXT_texture</a></td></tr>
|
||||||
|
<tr><td class="num">327</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture3D.txt">EXT_texture3D</a></td></tr>
|
||||||
|
<tr><td class="num">328</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_array.txt">EXT_texture_array</a></td></tr>
|
||||||
|
<tr><td class="num">329</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_buffer_object.txt">EXT_texture_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">330</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_compression_dxt1.txt">EXT_texture_compression_dxt1</a></td></tr>
|
||||||
|
<tr><td class="num">331</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_latc.txt">EXT_texture_compression_latc</a></td></tr>
|
||||||
|
<tr><td class="num">332</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_rgtc.txt">EXT_texture_compression_rgtc</a></td></tr>
|
||||||
|
<tr><td class="num">333</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_compression_s3tc.txt">EXT_texture_compression_s3tc</a></td></tr>
|
||||||
|
<tr><td class="num">334</td><td> </td><td><a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_texture_cube_map.txt">EXT_texture_cube_map</a></td></tr>
|
||||||
|
<tr><td class="num">335</td><td> </td><td><a href="http://www.opengl.org/developers/documentation/Version1.2/1.2specs/texture_edge_clamp.txt">EXT_texture_edge_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">336</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_env.txt">EXT_texture_env</a></td></tr>
|
||||||
|
<tr><td class="num">337</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_env_add.txt">EXT_texture_env_add</a></td></tr>
|
||||||
|
<tr><td class="num">338</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_env_combine.txt">EXT_texture_env_combine</a></td></tr>
|
||||||
|
<tr><td class="num">339</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_env_dot3.txt">EXT_texture_env_dot3</a></td></tr>
|
||||||
|
<tr><td class="num">340</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_filter_anisotropic.txt">EXT_texture_filter_anisotropic</a></td></tr>
|
||||||
|
<tr><td class="num">341</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_filter_minmax.txt">EXT_texture_filter_minmax</a></td></tr>
|
||||||
|
<tr><td class="num">342</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_integer.txt">EXT_texture_integer</a></td></tr>
|
||||||
|
<tr><td class="num">343</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_lod_bias.txt">EXT_texture_lod_bias</a></td></tr>
|
||||||
|
<tr><td class="num">344</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_mirror_clamp.txt">EXT_texture_mirror_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">345</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_object.txt">EXT_texture_object</a></td></tr>
|
||||||
|
<tr><td class="num">346</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_perturb_normal.txt">EXT_texture_perturb_normal</a></td></tr>
|
||||||
|
<tr><td class="num">347</td><td> </td><td><a href="http://developer.apple.com/opengl/extensions/ext_texture_rectangle.html">EXT_texture_rectangle</a></td></tr>
|
||||||
|
<tr><td class="num">348</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_sRGB.txt">EXT_texture_sRGB</a></td></tr>
|
||||||
|
<tr><td class="num">349</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_sRGB_decode.txt">EXT_texture_sRGB_decode</a></td></tr>
|
||||||
|
<tr><td class="num">350</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_shared_exponent.txt">EXT_texture_shared_exponent</a></td></tr>
|
||||||
|
<tr><td class="num">351</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_snorm.txt">EXT_texture_snorm</a></td></tr>
|
||||||
|
<tr><td class="num">352</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_swizzle.txt">EXT_texture_swizzle</a></td></tr>
|
||||||
|
<tr><td class="num">353</td><td> </td><td><a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_timer_query.txt">EXT_timer_query</a></td></tr>
|
||||||
|
<tr><td class="num">354</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/transform_feedback.txt">EXT_transform_feedback</a></td></tr>
|
||||||
|
<tr><td class="num">355</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/vertex_array.txt">EXT_vertex_array</a></td></tr>
|
||||||
|
<tr><td class="num">356</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/vertex_array_bgra.txt">EXT_vertex_array_bgra</a></td></tr>
|
||||||
|
<tr><td class="num">357</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/vertex_attrib_64bit.txt">EXT_vertex_attrib_64bit</a></td></tr>
|
||||||
|
<tr><td class="num">358</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/EXT/vertex_shader.txt">EXT_vertex_shader</a></td></tr>
|
||||||
|
<tr><td class="num">359</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/vertex_weighting.txt">EXT_vertex_weighting</a></td></tr>
|
||||||
|
<tr><td class="num">360</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/window_rectangles.txt">EXT_window_rectangles</a></td></tr>
|
||||||
|
<tr><td class="num">361</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/x11_sync_object.txt">EXT_x11_sync_object</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">362</td><td> </td><td><a href="http://www.opengl.org/registry/specs/GREMEDY/frame_terminator.txt">GREMEDY_frame_terminator</a></td></tr>
|
||||||
|
<tr><td class="num">363</td><td> </td><td><a href="http://www.opengl.org/registry/specs/GREMEDY/string_marker.txt">GREMEDY_string_marker</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">364</td><td> </td><td><a href="http://www.opengl.org/registry/specs/HP/convolution_border_modes.txt">HP_convolution_border_modes</a></td></tr>
|
||||||
|
<tr><td class="num">365</td><td> </td><td><a href="http://www.opengl.org/registry/specs/HP/image_transform.txt">HP_image_transform</a></td></tr>
|
||||||
|
<tr><td class="num">366</td><td> </td><td><a href="http://www.opengl.org/registry/specs/HP/occlusion_test.txt">HP_occlusion_test</a></td></tr>
|
||||||
|
<tr><td class="num">367</td><td> </td><td><a href="http://www.opengl.org/registry/specs/HP/texture_lighting.txt">HP_texture_lighting</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">368</td><td> </td><td><a href="http://www.opengl.org/registry/specs/IBM/cull_vertex.txt">IBM_cull_vertex</a></td></tr>
|
||||||
|
<tr><td class="num">369</td><td> </td><td><a href="http://www.opengl.org/registry/specs/IBM/multimode_draw_arrays.txt">IBM_multimode_draw_arrays</a></td></tr>
|
||||||
|
<tr><td class="num">370</td><td> </td><td><a href="http://www.opengl.org/registry/specs/IBM/rasterpos_clip.txt">IBM_rasterpos_clip</a></td></tr>
|
||||||
|
<tr><td class="num">371</td><td> </td><td><a href="http://www.opengl.org/registry/specs/IBM/static_data.txt">IBM_static_data</a></td></tr>
|
||||||
|
<tr><td class="num">372</td><td> </td><td><a href="http://www.opengl.org/registry/specs/IBM/texture_mirrored_repeat.txt">IBM_texture_mirrored_repeat</a></td></tr>
|
||||||
|
<tr><td class="num">373</td><td> </td><td><a href="http://www.opengl.org/registry/specs/IBM/vertex_array_lists.txt">IBM_vertex_array_lists</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">374</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INGR/color_clamp.txt">INGR_color_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">375</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INGR/interlace_read.txt">INGR_interlace_read</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">376</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INTEL/conservative_rasterization.txt">INTEL_conservative_rasterization</a></td></tr>
|
||||||
|
<tr><td class="num">377</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INTEL/fragment_shader_ordering.txt">INTEL_fragment_shader_ordering</a></td></tr>
|
||||||
|
<tr><td class="num">378</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INTEL/framebuffer_CMAA.txt">INTEL_framebuffer_CMAA</a></td></tr>
|
||||||
|
<tr><td class="num">379</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INTEL/map_texture.txt">INTEL_map_texture</a></td></tr>
|
||||||
|
<tr><td class="num">380</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INTEL/parallel_arrays.txt">INTEL_parallel_arrays</a></td></tr>
|
||||||
|
<tr><td class="num">381</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INTEL/performance_query.txt">INTEL_performance_query</a></td></tr>
|
||||||
|
<tr><td class="num">382</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INTEL/texture_scissor.txt">INTEL_texture_scissor</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">383</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/blend_equation_advanced.txt">KHR_blend_equation_advanced</a></td></tr>
|
||||||
|
<tr><td class="num">384</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/blend_equation_advanced.txt">KHR_blend_equation_advanced_coherent</a></td></tr>
|
||||||
|
<tr><td class="num">385</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/context_flush_control.txt">KHR_context_flush_control</a></td></tr>
|
||||||
|
<tr><td class="num">386</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/debug.txt">KHR_debug</a></td></tr>
|
||||||
|
<tr><td class="num">387</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/no_error.txt">KHR_no_error</a></td></tr>
|
||||||
|
<tr><td class="num">388</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/robust_buffer_access_behavior.txt">KHR_robust_buffer_access_behavior</a></td></tr>
|
||||||
|
<tr><td class="num">389</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/robustness.txt">KHR_robustness</a></td></tr>
|
||||||
|
<tr><td class="num">390</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/texture_compression_astc_hdr.txt">KHR_texture_compression_astc_hdr</a></td></tr>
|
||||||
|
<tr><td class="num">391</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/texture_compression_astc_hdr.txt">KHR_texture_compression_astc_ldr</a></td></tr>
|
||||||
|
<tr><td class="num">392</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/texture_compression_astc_sliced_3d.txt">KHR_texture_compression_astc_sliced_3d</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">393</td><td> </td><td>KTX_buffer_region</td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">394</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESAX/texture_stack.txt">MESAX_texture_stack</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">395</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/pack_invert.txt">MESA_pack_invert</a></td></tr>
|
||||||
|
<tr><td class="num">396</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/resize_buffers.txt">MESA_resize_buffers</a></td></tr>
|
||||||
|
<tr><td class="num">397</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/shader_integer_functions.txt">MESA_shader_integer_functions</a></td></tr>
|
||||||
|
<tr><td class="num">398</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/window_pos.txt">MESA_window_pos</a></td></tr>
|
||||||
|
<tr><td class="num">399</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/ycbcr_texture.txt">MESA_ycbcr_texture</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">400</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NVX/nvx_blend_equation_advanced_multi_draw_buffers.txt">NVX_blend_equation_advanced_multi_draw_buffers</a></td></tr>
|
||||||
|
<tr><td class="num">401</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NVX/nvx_conditional_render.txt">NVX_conditional_render</a></td></tr>
|
||||||
|
<tr><td class="num">402</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt">NVX_gpu_memory_info</a></td></tr>
|
||||||
|
<tr><td class="num">403</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NVX/nvx_linked_gpu_multicast.txt">NVX_linked_gpu_multicast</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">404</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/bindless_multi_draw_indirect.txt">NV_bindless_multi_draw_indirect</a></td></tr>
|
||||||
|
<tr><td class="num">405</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/bindless_multi_draw_indirect_count.txt">NV_bindless_multi_draw_indirect_count</a></td></tr>
|
||||||
|
<tr><td class="num">406</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/bindless_texture.txt">NV_bindless_texture</a></td></tr>
|
||||||
|
<tr><td class="num">407</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/blend_equation_advanced.txt">NV_blend_equation_advanced</a></td></tr>
|
||||||
|
<tr><td class="num">408</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/blend_equation_advanced.txt">NV_blend_equation_advanced_coherent</a></td></tr>
|
||||||
|
<tr><td class="num">409</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/blend_square.txt">NV_blend_square</a></td></tr>
|
||||||
|
<tr><td class="num">410</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/clip_space_w_scaling.txt">NV_clip_space_w_scaling</a></td></tr>
|
||||||
|
<tr><td class="num">411</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/command_list.txt">NV_command_list</a></td></tr>
|
||||||
|
<tr><td class="num">412</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/compute_program5.txt">NV_compute_program5</a></td></tr>
|
||||||
|
<tr><td class="num">413</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/conditional_render.txt">NV_conditional_render</a></td></tr>
|
||||||
|
<tr><td class="num">414</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/conservative_raster.txt">NV_conservative_raster</a></td></tr>
|
||||||
|
<tr><td class="num">415</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/conservative_raster_dilate.txt">NV_conservative_raster_dilate</a></td></tr>
|
||||||
|
<tr><td class="num">416</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/conservative_raster_pre_snap_triangles.txt">NV_conservative_raster_pre_snap_triangles</a></td></tr>
|
||||||
|
<tr><td class="num">417</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/copy_depth_to_color.txt">NV_copy_depth_to_color</a></td></tr>
|
||||||
|
<tr><td class="num">418</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/copy_image.txt">NV_copy_image</a></td></tr>
|
||||||
|
<tr><td class="num">419</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/deep_texture3D.txt">NV_deep_texture3D</a></td></tr>
|
||||||
|
<tr><td class="num">420</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_depth_buffer_float.txt">NV_depth_buffer_float</a></td></tr>
|
||||||
|
<tr><td class="num">421</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/depth_clamp.txt">NV_depth_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">422</td><td> </td><td>NV_depth_range_unclamped</td></tr>
|
||||||
|
<tr><td class="num">423</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/draw_texture.txt">NV_draw_texture</a></td></tr>
|
||||||
|
<tr><td class="num">424</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/draw_vulkan_image.txt">NV_draw_vulkan_image</a></td></tr>
|
||||||
|
<tr><td class="num">425</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/evaluators.txt">NV_evaluators</a></td></tr>
|
||||||
|
<tr><td class="num">426</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/explicit_multisample.txt">NV_explicit_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">427</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/fence.txt">NV_fence</a></td></tr>
|
||||||
|
<tr><td class="num">428</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/fill_rectangle.txt">NV_fill_rectangle</a></td></tr>
|
||||||
|
<tr><td class="num">429</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/float_buffer.txt">NV_float_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">430</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/fog_distance.txt">NV_fog_distance</a></td></tr>
|
||||||
|
<tr><td class="num">431</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/fragment_coverage_to_color.txt">NV_fragment_coverage_to_color</a></td></tr>
|
||||||
|
<tr><td class="num">432</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/fragment_program.txt">NV_fragment_program</a></td></tr>
|
||||||
|
<tr><td class="num">433</td><td> </td><td><a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program2.txt">NV_fragment_program2</a></td></tr>
|
||||||
|
<tr><td class="num">434</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_fragment_program4.txt">NV_fragment_program4</a></td></tr>
|
||||||
|
<tr><td class="num">435</td><td> </td><td><a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program_option.txt">NV_fragment_program_option</a></td></tr>
|
||||||
|
<tr><td class="num">436</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/fragment_shader_interlock.txt">NV_fragment_shader_interlock</a></td></tr>
|
||||||
|
<tr><td class="num">437</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/framebuffer_mixed_samples.txt">NV_framebuffer_mixed_samples</a></td></tr>
|
||||||
|
<tr><td class="num">438</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_framebuffer_multisample_coverage.txt">NV_framebuffer_multisample_coverage</a></td></tr>
|
||||||
|
<tr><td class="num">439</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_program4.txt">NV_geometry_program4</a></td></tr>
|
||||||
|
<tr><td class="num">440</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_shader4.txt">NV_geometry_shader4</a></td></tr>
|
||||||
|
<tr><td class="num">441</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/geometry_shader_passthrough.txt">NV_geometry_shader_passthrough</a></td></tr>
|
||||||
|
<tr><td class="num">442</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/gpu_multicast.txt">NV_gpu_multicast</a></td></tr>
|
||||||
|
<tr><td class="num">443</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_gpu_program4.txt">NV_gpu_program4</a></td></tr>
|
||||||
|
<tr><td class="num">444</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/gpu_program5.txt">NV_gpu_program5</a></td></tr>
|
||||||
|
<tr><td class="num">445</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/gpu_program5_mem_extended.txt">NV_gpu_program5_mem_extended</a></td></tr>
|
||||||
|
<tr><td class="num">446</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/gpu_program5.txt">NV_gpu_program_fp64</a></td></tr>
|
||||||
|
<tr><td class="num">447</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/gpu_shader5.txt">NV_gpu_shader5</a></td></tr>
|
||||||
|
<tr><td class="num">448</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/half_float.txt">NV_half_float</a></td></tr>
|
||||||
|
<tr><td class="num">449</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/internalformat_sample_query.txt">NV_internalformat_sample_query</a></td></tr>
|
||||||
|
<tr><td class="num">450</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/light_max_exponent.txt">NV_light_max_exponent</a></td></tr>
|
||||||
|
<tr><td class="num">451</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/multisample_coverage.txt">NV_multisample_coverage</a></td></tr>
|
||||||
|
<tr><td class="num">452</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/multisample_filter_hint.txt">NV_multisample_filter_hint</a></td></tr>
|
||||||
|
<tr><td class="num">453</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/occlusion_query.txt">NV_occlusion_query</a></td></tr>
|
||||||
|
<tr><td class="num">454</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/packed_depth_stencil.txt">NV_packed_depth_stencil</a></td></tr>
|
||||||
|
<tr><td class="num">455</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_parameter_buffer_object.txt">NV_parameter_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">456</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/parameter_buffer_object2.txt">NV_parameter_buffer_object2</a></td></tr>
|
||||||
|
<tr><td class="num">457</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/path_rendering.txt">NV_path_rendering</a></td></tr>
|
||||||
|
<tr><td class="num">458</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/path_rendering_shared_edge.txt">NV_path_rendering_shared_edge</a></td></tr>
|
||||||
|
<tr><td class="num">459</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/pixel_data_range.txt">NV_pixel_data_range</a></td></tr>
|
||||||
|
<tr><td class="num">460</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/point_sprite.txt">NV_point_sprite</a></td></tr>
|
||||||
|
<tr><td class="num">461</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/present_video.txt">NV_present_video</a></td></tr>
|
||||||
|
<tr><td class="num">462</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/primitive_restart.txt">NV_primitive_restart</a></td></tr>
|
||||||
|
<tr><td class="num">463</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/register_combiners.txt">NV_register_combiners</a></td></tr>
|
||||||
|
<tr><td class="num">464</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/register_combiners2.txt">NV_register_combiners2</a></td></tr>
|
||||||
|
<tr><td class="num">465</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/robustness_video_memory_purge.txt">NV_robustness_video_memory_purge</a></td></tr>
|
||||||
|
<tr><td class="num">466</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/sample_locations.txt">NV_sample_locations</a></td></tr>
|
||||||
|
<tr><td class="num">467</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/sample_mask_override_coverage.txt">NV_sample_mask_override_coverage</a></td></tr>
|
||||||
|
<tr><td class="num">468</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_atomic_counters.txt">NV_shader_atomic_counters</a></td></tr>
|
||||||
|
<tr><td class="num">469</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_atomic_float.txt">NV_shader_atomic_float</a></td></tr>
|
||||||
|
<tr><td class="num">470</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_atomic_float64.txt">NV_shader_atomic_float64</a></td></tr>
|
||||||
|
<tr><td class="num">471</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_atomic_fp16_vector.txt">NV_shader_atomic_fp16_vector</a></td></tr>
|
||||||
|
<tr><td class="num">472</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_atomic_int64.txt">NV_shader_atomic_int64</a></td></tr>
|
||||||
|
<tr><td class="num">473</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_buffer_load.txt">NV_shader_buffer_load</a></td></tr>
|
||||||
|
<tr><td class="num">474</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_storage_buffer_object.txt">NV_shader_storage_buffer_object</a></td></tr>
|
||||||
|
<tr><td class="num">475</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_thread_group.txt">NV_shader_thread_group</a></td></tr>
|
||||||
|
<tr><td class="num">476</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/shader_thread_shuffle.txt">NV_shader_thread_shuffle</a></td></tr>
|
||||||
|
<tr><td class="num">477</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/stereo_view_rendering.txt">NV_stereo_view_rendering</a></td></tr>
|
||||||
|
<tr><td class="num">478</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/tessellation_program5.txt">NV_tessellation_program5</a></td></tr>
|
||||||
|
<tr><td class="num">479</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texgen_emboss.txt">NV_texgen_emboss</a></td></tr>
|
||||||
|
<tr><td class="num">480</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texgen_reflection.txt">NV_texgen_reflection</a></td></tr>
|
||||||
|
<tr><td class="num">481</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_barrier.txt">NV_texture_barrier</a></td></tr>
|
||||||
|
<tr><td class="num">482</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_compression_vtc.txt">NV_texture_compression_vtc</a></td></tr>
|
||||||
|
<tr><td class="num">483</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_env_combine4.txt">NV_texture_env_combine4</a></td></tr>
|
||||||
|
<tr><td class="num">484</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_expand_normal.txt">NV_texture_expand_normal</a></td></tr>
|
||||||
|
<tr><td class="num">485</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_multisample.txt">NV_texture_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">486</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_rectangle.txt">NV_texture_rectangle</a></td></tr>
|
||||||
|
<tr><td class="num">487</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_shader.txt">NV_texture_shader</a></td></tr>
|
||||||
|
<tr><td class="num">488</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_shader2.txt">NV_texture_shader2</a></td></tr>
|
||||||
|
<tr><td class="num">489</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/texture_shader3.txt">NV_texture_shader3</a></td></tr>
|
||||||
|
<tr><td class="num">490</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_transform_feedback.txt">NV_transform_feedback</a></td></tr>
|
||||||
|
<tr><td class="num">491</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/transform_feedback2.txt">NV_transform_feedback2</a></td></tr>
|
||||||
|
<tr><td class="num">492</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/uniform_buffer_unified_memory.txt">NV_uniform_buffer_unified_memory</a></td></tr>
|
||||||
|
<tr><td class="num">493</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/vdpau_interop.txt">NV_vdpau_interop</a></td></tr>
|
||||||
|
<tr><td class="num">494</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/vertex_array_range.txt">NV_vertex_array_range</a></td></tr>
|
||||||
|
<tr><td class="num">495</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/vertex_array_range2.txt">NV_vertex_array_range2</a></td></tr>
|
||||||
|
<tr><td class="num">496</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/vertex_attrib_integer_64bit.txt">NV_vertex_attrib_integer_64bit</a></td></tr>
|
||||||
|
<tr><td class="num">497</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/vertex_buffer_unified_memory.txt">NV_vertex_buffer_unified_memory</a></td></tr>
|
||||||
|
<tr><td class="num">498</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/vertex_program.txt">NV_vertex_program</a></td></tr>
|
||||||
|
<tr><td class="num">499</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/vertex_program1_1.txt">NV_vertex_program1_1</a></td></tr>
|
||||||
|
<tr><td class="num">500</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/vertex_program2.txt">NV_vertex_program2</a></td></tr>
|
||||||
|
<tr><td class="num">501</td><td> </td><td><a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program2_option.txt">NV_vertex_program2_option</a></td></tr>
|
||||||
|
<tr><td class="num">502</td><td> </td><td><a href="http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program3.txt">NV_vertex_program3</a></td></tr>
|
||||||
|
<tr><td class="num">503</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_NV_vertex_program4.txt">NV_vertex_program4</a></td></tr>
|
||||||
|
<tr><td class="num">504</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/video_capture.txt">NV_video_capture</a></td></tr>
|
||||||
|
<tr><td class="num">505</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/viewport_array2.txt">NV_viewport_array2</a></td></tr>
|
||||||
|
<tr><td class="num">506</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/viewport_swizzle.txt">NV_viewport_swizzle</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">507</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OES/OES_byte_coordinates.txt">OES_byte_coordinates</a></td></tr>
|
||||||
|
<tr><td class="num">508</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OES/OES_compressed_paletted_texture.txt">OES_compressed_paletted_texture</a></td></tr>
|
||||||
|
<tr><td class="num">509</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OES/OES_read_format.txt">OES_read_format</a></td></tr>
|
||||||
|
<tr><td class="num">510</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OES/OES_single_precision.txt">OES_single_precision</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">511</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OML/interlace.txt">OML_interlace</a></td></tr>
|
||||||
|
<tr><td class="num">512</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OML/resample.txt">OML_resample</a></td></tr>
|
||||||
|
<tr><td class="num">513</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OML/subsample.txt">OML_subsample</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">514</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OVR/multiview.txt">OVR_multiview</a></td></tr>
|
||||||
|
<tr><td class="num">515</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OVR/multiview2.txt">OVR_multiview2</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">516</td><td> </td><td><a href="http://www.opengl.org/registry/specs/PGI/misc_hints.txt">PGI_misc_hints</a></td></tr>
|
||||||
|
<tr><td class="num">517</td><td> </td><td><a href="http://www.opengl.org/registry/specs/PGI/vertex_hints.txt">PGI_vertex_hints</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">518</td><td> </td><td><a href="https://github.com/p3/regal/tree/master/doc/extensions">REGAL_ES1_0_compatibility</a></td></tr>
|
||||||
|
<tr><td class="num">519</td><td> </td><td><a href="https://github.com/p3/regal/tree/master/doc/extensions">REGAL_ES1_1_compatibility</a></td></tr>
|
||||||
|
<tr><td class="num">520</td><td> </td><td><a href="https://github.com/p3/regal/tree/master/doc/extensions">REGAL_enable</a></td></tr>
|
||||||
|
<tr><td class="num">521</td><td> </td><td><a href="https://github.com/p3/regal/tree/master/doc/extensions">REGAL_error_string</a></td></tr>
|
||||||
|
<tr><td class="num">522</td><td> </td><td><a href="https://github.com/p3/regal/tree/master/doc/extensions">REGAL_extension_query</a></td></tr>
|
||||||
|
<tr><td class="num">523</td><td> </td><td><a href="https://github.com/p3/regal/tree/master/doc/extensions">REGAL_log</a></td></tr>
|
||||||
|
<tr><td class="num">524</td><td> </td><td><a href="https://github.com/p3/regal/tree/master/doc/extensions">REGAL_proc_address</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">525</td><td> </td><td><a href="http://www.opengl.org/registry/specs/REND/screen_coordinates.txt">REND_screen_coordinates</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">526</td><td> </td><td><a href="http://www.opengl.org/registry/specs/S3/s3tc.txt">S3_s3tc</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">527</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/color_range.txt">SGIS_color_range</a></td></tr>
|
||||||
|
<tr><td class="num">528</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/detail_texture.txt">SGIS_detail_texture</a></td></tr>
|
||||||
|
<tr><td class="num">529</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/fog_func.txt">SGIS_fog_function</a></td></tr>
|
||||||
|
<tr><td class="num">530</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/generate_mipmap.txt">SGIS_generate_mipmap</a></td></tr>
|
||||||
|
<tr><td class="num">531</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/multisample.txt">SGIS_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">532</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/pixel_texture.txt">SGIS_pixel_texture</a></td></tr>
|
||||||
|
<tr><td class="num">533</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/point_line_texgen.txt">SGIS_point_line_texgen</a></td></tr>
|
||||||
|
<tr><td class="num">534</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/sharpen_texture.txt">SGIS_sharpen_texture</a></td></tr>
|
||||||
|
<tr><td class="num">535</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/texture4D.txt">SGIS_texture4D</a></td></tr>
|
||||||
|
<tr><td class="num">536</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/texture_border_clamp.txt">SGIS_texture_border_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">537</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/texture_edge_clamp.txt">SGIS_texture_edge_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">538</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/texture_filter4.txt">SGIS_texture_filter4</a></td></tr>
|
||||||
|
<tr><td class="num">539</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/texture_lod.txt">SGIS_texture_lod</a></td></tr>
|
||||||
|
<tr><td class="num">540</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/texture_select.txt">SGIS_texture_select</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">541</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/async.txt">SGIX_async</a></td></tr>
|
||||||
|
<tr><td class="num">542</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/async_histogram.txt">SGIX_async_histogram</a></td></tr>
|
||||||
|
<tr><td class="num">543</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/async_pixel.txt">SGIX_async_pixel</a></td></tr>
|
||||||
|
<tr><td class="num">544</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/blend_alpha_minmax.txt">SGIX_blend_alpha_minmax</a></td></tr>
|
||||||
|
<tr><td class="num">545</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/clipmap.txt">SGIX_clipmap</a></td></tr>
|
||||||
|
<tr><td class="num">546</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/convolution_accuracy.txt">SGIX_convolution_accuracy</a></td></tr>
|
||||||
|
<tr><td class="num">547</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/depth_texture.txt">SGIX_depth_texture</a></td></tr>
|
||||||
|
<tr><td class="num">548</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/flush_raster.txt">SGIX_flush_raster</a></td></tr>
|
||||||
|
<tr><td class="num">549</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/fog_offset.txt">SGIX_fog_offset</a></td></tr>
|
||||||
|
<tr><td class="num">550</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/fog_texture.txt">SGIX_fog_texture</a></td></tr>
|
||||||
|
<tr><td class="num">551</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/fragment_specular_lighting.txt">SGIX_fragment_specular_lighting</a></td></tr>
|
||||||
|
<tr><td class="num">552</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/framezoom.txt">SGIX_framezoom</a></td></tr>
|
||||||
|
<tr><td class="num">553</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/interlace.txt">SGIX_interlace</a></td></tr>
|
||||||
|
<tr><td class="num">554</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/ir_instrument1.txt">SGIX_ir_instrument1</a></td></tr>
|
||||||
|
<tr><td class="num">555</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/list_priority.txt">SGIX_list_priority</a></td></tr>
|
||||||
|
<tr><td class="num">556</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/sgix_pixel_texture.txt">SGIX_pixel_texture</a></td></tr>
|
||||||
|
<tr><td class="num">557</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/pixel_texture_bits.txt">SGIX_pixel_texture_bits</a></td></tr>
|
||||||
|
<tr><td class="num">558</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/reference_plane.txt">SGIX_reference_plane</a></td></tr>
|
||||||
|
<tr><td class="num">559</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/resample.txt">SGIX_resample</a></td></tr>
|
||||||
|
<tr><td class="num">560</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/SGIX/shadow.txt">SGIX_shadow</a></td></tr>
|
||||||
|
<tr><td class="num">561</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/shadow_ambient.txt">SGIX_shadow_ambient</a></td></tr>
|
||||||
|
<tr><td class="num">562</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/sprite.txt">SGIX_sprite</a></td></tr>
|
||||||
|
<tr><td class="num">563</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/tag_sample_buffer.txt">SGIX_tag_sample_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">564</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/texture_env_add.txt">SGIX_texture_add_env</a></td></tr>
|
||||||
|
<tr><td class="num">565</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/texture_coordinate_clamp.txt">SGIX_texture_coordinate_clamp</a></td></tr>
|
||||||
|
<tr><td class="num">566</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/texture_lod_bias.txt">SGIX_texture_lod_bias</a></td></tr>
|
||||||
|
<tr><td class="num">567</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/texture_multi_buffer.txt">SGIX_texture_multi_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">568</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/texture_range.txt">SGIX_texture_range</a></td></tr>
|
||||||
|
<tr><td class="num">569</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/texture_scale_bias.txt">SGIX_texture_scale_bias</a></td></tr>
|
||||||
|
<tr><td class="num">570</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/vertex_preclip.txt">SGIX_vertex_preclip</a></td></tr>
|
||||||
|
<tr><td class="num">571</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/vertex_preclip.txt">SGIX_vertex_preclip_hint</a></td></tr>
|
||||||
|
<tr><td class="num">572</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/ycrcb.txt">SGIX_ycrcb</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">573</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGI/color_matrix.txt">SGI_color_matrix</a></td></tr>
|
||||||
|
<tr><td class="num">574</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGI/color_table.txt">SGI_color_table</a></td></tr>
|
||||||
|
<tr><td class="num">575</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGI/texture_color_table.txt">SGI_texture_color_table</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">576</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SUNX/constant_data.txt">SUNX_constant_data</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">577</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SUN/convolution_border_modes.txt">SUN_convolution_border_modes</a></td></tr>
|
||||||
|
<tr><td class="num">578</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SUN/global_alpha.txt">SUN_global_alpha</a></td></tr>
|
||||||
|
<tr><td class="num">579</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SUN/mesh_array.txt">SUN_mesh_array</a></td></tr>
|
||||||
|
<tr><td class="num">580</td><td> </td><td><a href="http://wwws.sun.com/software/graphics/opengl/extensions/gl_sun_read_video_pixels.txt">SUN_read_video_pixels</a></td></tr>
|
||||||
|
<tr><td class="num">581</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SUN/slice_accum.txt">SUN_slice_accum</a></td></tr>
|
||||||
|
<tr><td class="num">582</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SUN/triangle_list.txt">SUN_triangle_list</a></td></tr>
|
||||||
|
<tr><td class="num">583</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SUN/vertex.txt">SUN_vertex</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">584</td><td> </td><td><a href="http://www.opengl.org/registry/specs/WIN/phong_shading.txt">WIN_phong_shading</a></td></tr>
|
||||||
|
<tr><td class="num">585</td><td> </td><td><a href="http://www.opengl.org/registry/specs/WIN/specular_fog.txt">WIN_specular_fog</a></td></tr>
|
||||||
|
<tr><td class="num">586</td><td> </td><td><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_16zy.asp">WIN_swap_hint</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
BIN
dependencies/glew-2.0.0/doc/glew.png
vendored
Normal file
BIN
dependencies/glew-2.0.0/doc/glew.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.1 KiB |
29
dependencies/glew-2.0.0/doc/glew.txt
vendored
Normal file
29
dependencies/glew-2.0.0/doc/glew.txt
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2016, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
185
dependencies/glew-2.0.0/doc/glxew.html
vendored
Normal file
185
dependencies/glew-2.0.0/doc/glxew.html
vendored
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center"><a href="index.html">Download</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="basic.html">Usage</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="build.html">Building</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="install.html">Installation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="advanced.html">Source Generation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Supported GLX Extensions</h2>
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="1" cellspacing="0" align="center">
|
||||||
|
<tr><td class="num">1</td><td> </td><td><a href="http://www.opengl.org/registry/specs/3DFX/3dfx_multisample.txt">3DFX_multisample</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">2</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt">AMD_gpu_association</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">3</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/context_flush_control.txt">ARB_context_flush_control</a></td></tr>
|
||||||
|
<tr><td class="num">4</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/glx_create_context.txt">ARB_create_context</a></td></tr>
|
||||||
|
<tr><td class="num">5</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/glx_create_context.txt">ARB_create_context_profile</a></td></tr>
|
||||||
|
<tr><td class="num">6</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/glx_create_context_robustness.txt">ARB_create_context_robustness</a></td></tr>
|
||||||
|
<tr><td class="num">7</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt">ARB_fbconfig_float</a></td></tr>
|
||||||
|
<tr><td class="num">8</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/framebuffer_sRGB.txt">ARB_framebuffer_sRGB</a></td></tr>
|
||||||
|
<tr><td class="num">9</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/ARB/get_proc_address.txt">ARB_get_proc_address</a></td></tr>
|
||||||
|
<tr><td class="num">10</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/multisample.txt">ARB_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">11</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/glx_robustness_isolation.txt">ARB_robustness_application_isolation</a></td></tr>
|
||||||
|
<tr><td class="num">12</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/glx_robustness_isolation.txt">ARB_robustness_share_group_isolation</a></td></tr>
|
||||||
|
<tr><td class="num">13</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt">ARB_vertex_buffer_object</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">14</td><td> </td><td>ATI_pixel_format_float</td></tr>
|
||||||
|
<tr><td class="num">15</td><td> </td><td>ATI_render_texture</td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">16</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/glx_buffer_age.txt">EXT_buffer_age</a></td></tr>
|
||||||
|
<tr><td class="num">17</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/glx_create_context_es2_profile.txt">EXT_create_context_es2_profile</a></td></tr>
|
||||||
|
<tr><td class="num">18</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/glx_create_context_es_profile.txt">EXT_create_context_es_profile</a></td></tr>
|
||||||
|
<tr><td class="num">19</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt">EXT_fbconfig_packed_float</a></td></tr>
|
||||||
|
<tr><td class="num">20</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt">EXT_framebuffer_sRGB</a></td></tr>
|
||||||
|
<tr><td class="num">21</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/import_context.txt">EXT_import_context</a></td></tr>
|
||||||
|
<tr><td class="num">22</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/glx_libglvnd.txt">EXT_libglvnd</a></td></tr>
|
||||||
|
<tr><td class="num">23</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/scene_marker.txt">EXT_scene_marker</a></td></tr>
|
||||||
|
<tr><td class="num">24</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/glx_stereo_tree.txt">EXT_stereo_tree</a></td></tr>
|
||||||
|
<tr><td class="num">25</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/swap_control.txt">EXT_swap_control</a></td></tr>
|
||||||
|
<tr><td class="num">26</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt">EXT_swap_control_tear</a></td></tr>
|
||||||
|
<tr><td class="num">27</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/texture_from_pixmap.txt">EXT_texture_from_pixmap</a></td></tr>
|
||||||
|
<tr><td class="num">28</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/visual_info.txt">EXT_visual_info</a></td></tr>
|
||||||
|
<tr><td class="num">29</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/visual_rating.txt">EXT_visual_rating</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">30</td><td> </td><td><a href="http://www.opengl.org/registry/specs/INTEL/swap_event.txt">INTEL_swap_event</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">31</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/agp_offset.txt">MESA_agp_offset</a></td></tr>
|
||||||
|
<tr><td class="num">32</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/copy_sub_buffer.txt">MESA_copy_sub_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">33</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/pixmap_colormap.txt">MESA_pixmap_colormap</a></td></tr>
|
||||||
|
<tr><td class="num">34</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/glx_query_renderer.txt">MESA_query_renderer</a></td></tr>
|
||||||
|
<tr><td class="num">35</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/release_buffers.txt">MESA_release_buffers</a></td></tr>
|
||||||
|
<tr><td class="num">36</td><td> </td><td><a href="http://www.opengl.org/registry/specs/MESA/set_3dfx_mode.txt">MESA_set_3dfx_mode</a></td></tr>
|
||||||
|
<tr><td class="num">37</td><td> </td><td><a href="http://cgit.freedesktop.org/mesa/mesa/plain/docs/MESA_swap_control.spec">MESA_swap_control</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">38</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/glx_copy_buffer.txt">NV_copy_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">39</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/copy_image.txt">NV_copy_image</a></td></tr>
|
||||||
|
<tr><td class="num">40</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/glx_delay_before_swap.txt">NV_delay_before_swap</a></td></tr>
|
||||||
|
<tr><td class="num">41</td><td> </td><td><a href="http://cvs1.nvidia.com/inc/GL/glxtokens.h">NV_float_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">42</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/multisample_coverage.txt">NV_multisample_coverage</a></td></tr>
|
||||||
|
<tr><td class="num">43</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/present_video.txt">NV_present_video</a></td></tr>
|
||||||
|
<tr><td class="num">44</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/robustness_video_memory_purge.txt">NV_robustness_video_memory_purge</a></td></tr>
|
||||||
|
<tr><td class="num">45</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/glx_swap_group.txt">NV_swap_group</a></td></tr>
|
||||||
|
<tr><td class="num">46</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt">NV_vertex_array_range</a></td></tr>
|
||||||
|
<tr><td class="num">47</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/video_capture.txt">NV_video_capture</a></td></tr>
|
||||||
|
<tr><td class="num">48</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/glx_video_output.txt">NV_video_out</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">49</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OML/glx_swap_method.txt">OML_swap_method</a></td></tr>
|
||||||
|
<tr><td class="num">50</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OML/glx_sync_control.txt">OML_sync_control</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">51</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/blended_overlay.txt">SGIS_blended_overlay</a></td></tr>
|
||||||
|
<tr><td class="num">52</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/color_range.txt">SGIS_color_range</a></td></tr>
|
||||||
|
<tr><td class="num">53</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIS/multisample.txt">SGIS_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">54</td><td> </td><td>SGIS_shared_multisample</td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">55</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/fbconfig.txt">SGIX_fbconfig</a></td></tr>
|
||||||
|
<tr><td class="num">56</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/SGIX/hyperpipe_group.txt">SGIX_hyperpipe</a></td></tr>
|
||||||
|
<tr><td class="num">57</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/pbuffer.txt">SGIX_pbuffer</a></td></tr>
|
||||||
|
<tr><td class="num">58</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_barrier.txt">SGIX_swap_barrier</a></td></tr>
|
||||||
|
<tr><td class="num">59</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_group.txt">SGIX_swap_group</a></td></tr>
|
||||||
|
<tr><td class="num">60</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/video_resize.txt">SGIX_video_resize</a></td></tr>
|
||||||
|
<tr><td class="num">61</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGIX/visual_select_group.txt">SGIX_visual_select_group</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">62</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGI/cushion.txt">SGI_cushion</a></td></tr>
|
||||||
|
<tr><td class="num">63</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGI/make_current_read.txt">SGI_make_current_read</a></td></tr>
|
||||||
|
<tr><td class="num">64</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGI/swap_control.txt">SGI_swap_control</a></td></tr>
|
||||||
|
<tr><td class="num">65</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SGI/video_sync.txt">SGI_video_sync</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">66</td><td> </td><td><a href="http://www.opengl.org/registry/specs/SUN/get_transparent_index.txt">SUN_get_transparent_index</a></td></tr>
|
||||||
|
<tr><td class="num">67</td><td> </td><td><a href="http://wwws.sun.com/software/graphics/opengl/extensions/glx_sun_video_resize.txt">SUN_video_resize</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
340
dependencies/glew-2.0.0/doc/gpl.txt
vendored
Normal file
340
dependencies/glew-2.0.0/doc/gpl.txt
vendored
Normal file
@ -0,0 +1,340 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Library General
|
||||||
|
Public License instead of this License.
|
213
dependencies/glew-2.0.0/doc/index.html
vendored
Normal file
213
dependencies/glew-2.0.0/doc/index.html
vendored
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center">Download</td></tr>
|
||||||
|
<tr><td align="center"><a href="basic.html">Usage</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="build.html">Building</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="install.html">Installation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="advanced.html">Source Generation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The OpenGL Extension Wrangler Library (GLEW) is a cross-platform
|
||||||
|
open-source C/C++ extension loading library. GLEW provides efficient
|
||||||
|
run-time mechanisms for determining which OpenGL extensions are
|
||||||
|
supported on the target platform. OpenGL core and extension
|
||||||
|
functionality is exposed in a single header file. GLEW has been
|
||||||
|
tested on a variety of operating systems, including Windows, Linux,
|
||||||
|
Mac OS X, FreeBSD, Irix, and Solaris.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Downloads</h2>
|
||||||
|
<p>
|
||||||
|
<a href="http://sourceforge.net/projects/glew/">GLEW</a> is distributed
|
||||||
|
as source and precompiled binaries.<br/>
|
||||||
|
The latest release is
|
||||||
|
<a href="https://sourceforge.net/projects/glew/files/glew/2.2.0/">2.2.0</a>[07-24-16]:
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<table border="1" cellpadding="5" cellspacing="0" bgcolor="#f0f0f0" align="center">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table border="0" cellpadding="3" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td align="right"><b>Source</b></td>
|
||||||
|
<td></td>
|
||||||
|
<td align="left">
|
||||||
|
<a href="https://sourceforge.net/projects/glew/files/glew/2.2.0/glew-2.2.0.zip/download">ZIP</a> |
|
||||||
|
<a href="https://sourceforge.net/projects/glew/files/glew/2.2.0/glew-2.2.0.tgz/download">TGZ</a></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td align="right"><b>Binaries</b></td>
|
||||||
|
<td></td>
|
||||||
|
<td align="left">
|
||||||
|
<a href="https://sourceforge.net/projects/glew/files/glew/2.2.0/glew-2.2.0-win32.zip/download">Windows 32-bit and 64-bit</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p></p>
|
||||||
|
<p>
|
||||||
|
An up-to-date copy is also available using <a href="http://git-scm.com/">git</a>:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://github.com/nigels-com/glew">github</a><br/>
|
||||||
|
<tt>git clone https://github.com/nigels-com/glew.git glew</tt><br/> </li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Supported Extensions</h2>
|
||||||
|
<p>
|
||||||
|
The latest release contains support for OpenGL 4.5, compatibility and forward-compatible contexts and the following extensions:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="glew.html">OpenGL extensions</a>
|
||||||
|
<li><a href="wglew.html">WGL extensions</a>
|
||||||
|
<li><a href="glxew.html">GLX extensions</a>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>News</h2>
|
||||||
|
<ul>
|
||||||
|
<li>[07-24-16] <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">GLEW 2.0.0</a> adds support for forward-compatible contexts, adds new extensions, OSMesa and EGL support, MX discontinued and minor bug fixes</li>
|
||||||
|
<li>[08-10-15] <a href="https://sourceforge.net/projects/glew/files/glew/1.13.0/">GLEW 1.13.0</a> adds support for new extensions, fixes minor bugs</li>
|
||||||
|
<li>[26-01-15] <a href="https://sourceforge.net/projects/glew/files/glew/1.12.0/">GLEW 1.12.0</a> fixes minor bugs and adds new extensions</li>
|
||||||
|
<li>[08-11-14] <a href="https://sourceforge.net/projects/glew/files/glew/1.11.0/">GLEW 1.11.0</a> adds support for OpenGL 4.5, new extensions</li>
|
||||||
|
<li>[07-22-13] <a href="https://sourceforge.net/projects/glew/files/glew/1.10.0/">GLEW 1.10.0</a> adds support for OpenGL 4.4, new extensions</li>
|
||||||
|
<li>[08-06-12] <a href="https://sourceforge.net/projects/glew/files/glew/1.9.0/">GLEW 1.9.0</a> adds support for OpenGL 4.3, new extensions</li>
|
||||||
|
<li>[07-17-12] <a href="https://sourceforge.net/projects/glew/files/glew/1.8.0/">GLEW 1.8.0</a> fixes minor bugs and adds new extensions</li>
|
||||||
|
<li>[08-26-11] <a href="https://sourceforge.net/projects/glew/files/glew/1.7.0/">GLEW 1.7.0</a> adds support for OpenGL 4.2, new extensions, fixes bugs</li>
|
||||||
|
<li>[04-27-11] <a href="https://sourceforge.net/projects/glew/files/glew/1.6.0/">GLEW 1.6.0</a> fixes minor bugs and adds eight new extensions</li>
|
||||||
|
<li>[01-31-11] <a href="https://sourceforge.net/projects/glew/files/glew/1.5.8/">GLEW 1.5.8</a> fixes minor bugs and adds two new extensions</li>
|
||||||
|
<li>[11-03-10] <a href="https://sourceforge.net/projects/glew/files/glew/1.5.7/">GLEW 1.5.7</a> fixes minor bugs and adds one new extension</li>
|
||||||
|
<li>[09-07-10] <a href="https://sourceforge.net/projects/glew/files/glew/1.5.6/">GLEW 1.5.6</a> adds support for OpenGL 4.1, fixes bugs</li>
|
||||||
|
<li>[07-13-10] <a href="https://sourceforge.net/projects/glew/files/glew/1.5.5/">GLEW 1.5.5</a> fixes minor bugs and adds new extensions</li>
|
||||||
|
<li>[04-21-10] <a href="https://sourceforge.net/projects/glew/files/glew/1.5.4/">GLEW 1.5.4</a> adds support for OpenGL 3.3, OpenGL 4.0 and new extensions, fixes bugs</li>
|
||||||
|
<li>[02-28-10] <a href="https://sourceforge.net/projects/glew/files/glew/1.5.3/">GLEW 1.5.3</a> fixes minor bugs and adds three new extensions</li>
|
||||||
|
<li>[12-31-09] <a href="https://sourceforge.net/projects/glew/files/glew/1.5.2/">GLEW 1.5.2</a> adds support for OpenGL 3.1, OpenGL 3.2 and new extensions</li>
|
||||||
|
<li>[11-03-08] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=637800">GLEW 1.5.1</a> adds support for OpenGL 3.0 and 31 new extensions</li>
|
||||||
|
<li>[12-27-07] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=564464">GLEW 1.5.0</a> is released under less restrictive licenses</li>
|
||||||
|
<li>[04-27-07] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=504079">GLEW 1.4.0</a> is released</li>
|
||||||
|
<li>[03-08-07] GLEW is included in the <a href="http://developer.nvidia.com/object/sdk_home.html">NVIDIA OpenGL SDK</a></li>
|
||||||
|
<li>[03-04-07] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=491113">GLEW 1.3.6</a> is released</li>
|
||||||
|
<li>[02-28-07] <a href="http://glew.svn.sourceforge.net/svnroot/glew/trunk/glew/">Repository</a> is migrated to SVN</li>
|
||||||
|
<li>[02-25-07] GLEW is included in the <a href="http://www.opengl.org/sdk/">OpenGL SDK</a></li>
|
||||||
|
<li>[11-21-06] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=465334">GLEW 1.3.5</a> adds OpenGL 2.1 and NVIDIA G80 extensions</li>
|
||||||
|
<li>[03-04-06] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=398455">GLEW 1.3.4</a> adds support for five new extensions</li>
|
||||||
|
<li>[05-16-05] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=327647">GLEW 1.3.3</a> is released</li>
|
||||||
|
<li>[03-16-05] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=313345">GLEW 1.3.2</a> adds support for GL_APPLE_pixel_buffer</li>
|
||||||
|
<li>[02-11-05] <a href="http://gljava.sourceforge.net/">gljava</a> and <a href="http://sdljava.sourceforge.net/">sdljava</a> provide a Java binding to OpenGL via GLEW</li>
|
||||||
|
<li>[02-02-05] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=302049">GLEW 1.3.1</a> adds support for <a href="http://www.opengl.org/documentation/extensions/EXT_framebuffer_object.txt">GL_EXT_framebuffer_object</a></li>
|
||||||
|
<li>[01-04-05] <a href="https://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=294527">GLEW 1.3.0</a> adds core OpenGL 2.0 support plus many enhancements</li>
|
||||||
|
<li>[12-22-04] <a href="http://glewpy.sf.net/">GLEWpy</a> Python wrapper announced</li>
|
||||||
|
<li>[12-12-04] <a href="https://sourceforge.net/mail/?group_id=67586">Mailing lists</a> created on sourceforge</li>
|
||||||
|
<li>[12-06-04] <a href="http://sourceforge.net/project/showfiles.php?group_id=67586&package_id=67942&release_id=287948">GLEW 1.2.5</a> adds new extensions and support for FreeBSD</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Links</h2>
|
||||||
|
<ul>
|
||||||
|
<li><a href="http://www.opengl.org/sdk/">OpenGL Software Development Kit</a></li>
|
||||||
|
<li><a href="http://www.opengl.org/registry/">OpenGL Extension Registry</a></li>
|
||||||
|
<li><a href="https://www.opengl.org/wiki/OpenGL_Extension">OpenGL Wiki: Extensions</a></li>
|
||||||
|
<li><a href="http://developer.nvidia.com/nvidia-opengl-specs">NVIDIA OpenGL Extension Specifications</a></li>
|
||||||
|
<li><a href="http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/OpenGLExtensionsGuide/Reference/reference.html">Apple OpenGL Extensions Guide</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
228
dependencies/glew-2.0.0/doc/install.html
vendored
Normal file
228
dependencies/glew-2.0.0/doc/install.html
vendored
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center"><a href="index.html">Download</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="basic.html">Usage</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="build.html">Building</a></td></tr>
|
||||||
|
<tr><td align="center">Installation</td></tr>
|
||||||
|
<tr><td align="center"><a href="advanced.html">Source Generation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Installation</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To use the shared library version of GLEW, you need to copy the
|
||||||
|
headers and libraries into their destination directories. On Windows
|
||||||
|
this typically boils down to copying:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center"> <!-- bgcolor="#f0f0f0" -->
|
||||||
|
<tr><td align="left"><tt>bin/glew32.dll</tt></td><td> to </td>
|
||||||
|
<td align="left"><tt>%SystemRoot%/system32</tt></td></tr>
|
||||||
|
<tr><td align="left"><tt>lib/glew32.lib</tt></td><td> to </td>
|
||||||
|
<td align="left"><tt>{VC Root}/Lib</tt></td></tr>
|
||||||
|
<tr><td align="left"><tt>include/GL/glew.h</tt></td><td> to </td>
|
||||||
|
<td align="left"><tt>{VC Root}/Include/GL</tt></td></tr>
|
||||||
|
<tr><td align="left"><tt>include/GL/wglew.h</tt></td><td> to </td>
|
||||||
|
<td align="left"><tt>{VC Root}/Include/GL</tt></td></tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
where <tt>{VC Root}</tt> is the Visual C++ root directory, typically
|
||||||
|
<tt>C:/Program Files/Microsoft Visual Studio/VC98</tt> for Visual
|
||||||
|
Studio 6.0 or <tt>C:/Program Files/Microsoft Visual
|
||||||
|
Studio .NET 2003/Vc7/PlatformSDK</tt> for Visual Studio .NET.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
On Unix, typing <tt>make install</tt> will attempt to install GLEW
|
||||||
|
into <tt>/usr/include/GL</tt> and <tt>/usr/lib</tt>. You can
|
||||||
|
customize the installation target via the <tt>GLEW_DEST</tt>
|
||||||
|
environment variable if you do not have write access to these
|
||||||
|
directories.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Building Your Project with GLEW</h2>
|
||||||
|
<p>
|
||||||
|
There are two ways to build your project with GLEW.
|
||||||
|
</p>
|
||||||
|
<h3>Including the source files / project file</h3>
|
||||||
|
<p>
|
||||||
|
The simpler but less flexible way is to include <tt>glew.h</tt> and
|
||||||
|
<tt>glew.c</tt> into your project. On Windows, you also need to
|
||||||
|
define the <tt>GLEW_STATIC</tt> preprocessor token when building a
|
||||||
|
static library or executable, and the <tt>GLEW_BUILD</tt> preprocessor
|
||||||
|
token when building a dll. You also need to replace
|
||||||
|
<tt><GL/gl.h></tt> and <tt><GL/glu.h></tt> with
|
||||||
|
<tt><glew.h></tt> in your code and set the appropriate include
|
||||||
|
flag (<tt>-I</tt>) to tell the compiler where to look for it. For
|
||||||
|
example:
|
||||||
|
</p>
|
||||||
|
<p class="pre">
|
||||||
|
#include <glew.h><br>
|
||||||
|
#include <GL/glut.h><br>
|
||||||
|
<gl, glu, and glut functionality is available here><br>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Depending on where you put <tt>glew.h</tt> you may also need to change
|
||||||
|
the include directives in <tt>glew.c</tt>. Note that if you are using
|
||||||
|
GLEW together with GLUT, you have to include <tt>glew.h</tt> first.
|
||||||
|
In addition, <tt>glew.h</tt> includes <tt>glu.h</tt>, so you do not
|
||||||
|
need to include it separately.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
On Windows, you also have the option of adding the supplied project
|
||||||
|
file <tt>glew_static.dsp</tt> to your workspace (solution) and compile
|
||||||
|
it together with your other projects. In this case you also need to
|
||||||
|
change the <tt>GLEW_BUILD</tt> preprocessor constant to
|
||||||
|
<tt>GLEW_STATIC</tt> when building a static library or executable,
|
||||||
|
otherwise you get build errors.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<b>Note that GLEW does not use the C
|
||||||
|
runtime library, so it does not matter which version (single-threaded,
|
||||||
|
multi-threaded or multi-threaded DLL) it is linked with (without
|
||||||
|
debugging information). It is, however, always a good idea to compile all
|
||||||
|
your projects including GLEW with the same C runtime settings.</b>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Using GLEW as a shared library</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Alternatively, you can use the provided project files / makefile to
|
||||||
|
build a separate shared library you can link your projects with later.
|
||||||
|
In this case the best practice is to install <tt>glew.h</tt>,
|
||||||
|
<tt>glew32.lib</tt>, and <tt>glew32.dll</tt> / <tt>libGLEW.so</tt> to
|
||||||
|
where the OpenGL equivalents <tt>gl.h</tt>, <tt>opengl32.lib</tt>, and
|
||||||
|
<tt>opengl32.dll</tt> / <tt>libGL.so</tt> are located. Note that you
|
||||||
|
need administrative privileges to do this. If you do not have
|
||||||
|
administrator access and your system administrator will not do it for
|
||||||
|
you, you can install GLEW into your own lib and include subdirectories
|
||||||
|
and tell the compiler where to find it. Then you can just replace
|
||||||
|
<tt><GL/gl.h></tt> with <tt><GL/glew.h></tt> in your
|
||||||
|
program:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
#include <GL/glew.h><br>
|
||||||
|
#include <GL/glut.h><br>
|
||||||
|
<gl, glu, and glut functionality is available here><br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
or:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="pre">
|
||||||
|
#include <GL/glew.h><br>
|
||||||
|
<gl and glu functionality is available here><br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Remember to link your project with <tt>glew32.lib</tt>,
|
||||||
|
<tt>glu32.lib</tt>, and <tt>opengl32.lib</tt> on Windows and
|
||||||
|
<tt>libGLEW.so</tt>, <tt>libGLU.so</tt>, and <tt>libGL.so</tt> on
|
||||||
|
Unix (<tt>-lGLEW -lGLU -lGL</tt>).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
It is important to keep in mind that <tt>glew.h</tt> includes neither
|
||||||
|
<tt>windows.h</tt> nor <tt>gl.h</tt>. Also, GLEW will warn you by
|
||||||
|
issuing a preprocessor error in case you have included <tt>gl.h</tt>,
|
||||||
|
<tt>glext.h</tt>, or <tt>glATI.h</tt> before <tt>glew.h</tt>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
20
dependencies/glew-2.0.0/doc/khronos.txt
vendored
Normal file
20
dependencies/glew-2.0.0/doc/khronos.txt
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
Copyright (c) 2007 The Khronos Group Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and/or associated documentation files (the
|
||||||
|
"Materials"), to deal in the Materials without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Materials, and to
|
||||||
|
permit persons to whom the Materials are 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 Materials.
|
||||||
|
|
||||||
|
THE MATERIALS ARE 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 THE AUTHORS OR COPYRIGHT HOLDERS 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
|
||||||
|
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
1175
dependencies/glew-2.0.0/doc/log.html
vendored
Normal file
1175
dependencies/glew-2.0.0/doc/log.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
21
dependencies/glew-2.0.0/doc/mesa.txt
vendored
Normal file
21
dependencies/glew-2.0.0/doc/mesa.txt
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Mesa 3-D graphics library
|
||||||
|
Version: 7.0
|
||||||
|
|
||||||
|
Copyright (C) 1999-2007 Brian Paul 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 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
|
||||||
|
BRIAN PAUL 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.
|
BIN
dependencies/glew-2.0.0/doc/new.png
vendored
Normal file
BIN
dependencies/glew-2.0.0/doc/new.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
dependencies/glew-2.0.0/doc/ogl_sm.jpg
vendored
Normal file
BIN
dependencies/glew-2.0.0/doc/ogl_sm.jpg
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
BIN
dependencies/glew-2.0.0/doc/travis.png
vendored
Normal file
BIN
dependencies/glew-2.0.0/doc/travis.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
168
dependencies/glew-2.0.0/doc/wglew.html
vendored
Normal file
168
dependencies/glew-2.0.0/doc/wglew.html
vendored
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
<!-- begin header.html -->
|
||||||
|
<!--
|
||||||
|
The OpenGL Extension Wrangler Library
|
||||||
|
Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
|
||||||
|
Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
|
||||||
|
Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
|
||||||
|
Copyright (C) 2002, Lev Povalahev
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name of the author may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GLEW: The OpenGL Extension Wrangler Library</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
|
<link href="glew.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#fff0d0">
|
||||||
|
<table border="0" width="100%" cellpadding="12" cellspacing="8" style="height:100%">
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top" width="200">
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="0" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Latest Release: <a href="https://sourceforge.net/projects/glew/files/glew/2.0.0/">2.2.0</a></i></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center"><img src="./glew.png" alt="GLEW Logo" width="97" height="75"></td></tr>
|
||||||
|
<tr><td align="center"><br></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" align="center">
|
||||||
|
<tr><td align="center"><a href="index.html">Download</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="basic.html">Usage</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="build.html">Building</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="install.html">Installation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="advanced.html">Source Generation</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="log.html">Change Log</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew">GitHub</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/issues">Issues</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew/pulls">Pull Requests</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#authors">Authors</a></td></tr>
|
||||||
|
<tr><td align="center"><a href="https://github.com/nigels-com/glew#copyright-and-licensing">Licensing</a></td></tr>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
<tr><td align="center"><a href="https://sourceforge.net/projects/glew">SourceForge Page</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<tr><td align="center"><br></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td valign="bottom">
|
||||||
|
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="left">
|
||||||
|
<tr><td align="center"><i>Last Update: 07-24-16</i></td></tr>
|
||||||
|
<tr><td align="center">
|
||||||
|
<a href="http://www.opengl.org"><img src="./ogl_sm.jpg" width="68" height="35" border="0" alt="OpenGL Logo"></a><br/>
|
||||||
|
<a href="https://github.com/nigels-com/glew"><img src="github.png" width="70" height="29" border="0" alt="GitHub Logo"></a><br/>
|
||||||
|
<a href="https://travis-ci.org/nigels-com/glew/builds"><img src="travis.png" width="114" height="25" border="0" alt="Travis Logo"></a><br/>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=67586&type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td bgcolor="#ffffff" align="left" valign="top">
|
||||||
|
|
||||||
|
<h1>The OpenGL Extension Wrangler Library</h1>
|
||||||
|
|
||||||
|
<!-- end header.html -->
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Supported WGL Extensions</h2>
|
||||||
|
|
||||||
|
<table border="0" width="100%" cellpadding="1" cellspacing="0" align="center">
|
||||||
|
<tr><td class="num">1</td><td> </td><td><a href="http://www.opengl.org/registry/specs/3DFX/3dfx_multisample.txt">3DFX_multisample</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">2</td><td> </td><td><a href="http://www.opengl.org/registry/specs/3DL/stereo_control.txt">3DL_stereo_control</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">3</td><td> </td><td><a href="http://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt">AMD_gpu_association</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">4</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_buffer_region.txt">ARB_buffer_region</a></td></tr>
|
||||||
|
<tr><td class="num">5</td><td> </td><td><a href="http://www.opengl.org/registry/specs/KHR/context_flush_control.txt">ARB_context_flush_control</a></td></tr>
|
||||||
|
<tr><td class="num">6</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt">ARB_create_context</a></td></tr>
|
||||||
|
<tr><td class="num">7</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt">ARB_create_context_profile</a></td></tr>
|
||||||
|
<tr><td class="num">8</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_create_context_robustness.txt">ARB_create_context_robustness</a></td></tr>
|
||||||
|
<tr><td class="num">9</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_extensions_string.txt">ARB_extensions_string</a></td></tr>
|
||||||
|
<tr><td class="num">10</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/framebuffer_sRGB.txt">ARB_framebuffer_sRGB</a></td></tr>
|
||||||
|
<tr><td class="num">11</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_make_current_read.txt">ARB_make_current_read</a></td></tr>
|
||||||
|
<tr><td class="num">12</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/multisample.txt">ARB_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">13</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_pbuffer.txt">ARB_pbuffer</a></td></tr>
|
||||||
|
<tr><td class="num">14</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_pixel_format.txt">ARB_pixel_format</a></td></tr>
|
||||||
|
<tr><td class="num">15</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt">ARB_pixel_format_float</a></td></tr>
|
||||||
|
<tr><td class="num">16</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_render_texture.txt">ARB_render_texture</a></td></tr>
|
||||||
|
<tr><td class="num">17</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_robustness_isolation.txt">ARB_robustness_application_isolation</a></td></tr>
|
||||||
|
<tr><td class="num">18</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ARB/wgl_robustness_isolation.txt">ARB_robustness_share_group_isolation</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">19</td><td> </td><td><a href="http://www.opengl.org/registry/specs/ATI/pixel_format_float.txt">ATI_pixel_format_float</a></td></tr>
|
||||||
|
<tr><td class="num">20</td><td> </td><td>ATI_render_texture_rectangle</td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">21</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_create_context_es2_profile.txt">EXT_create_context_es2_profile</a></td></tr>
|
||||||
|
<tr><td class="num">22</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_create_context_es_profile.txt">EXT_create_context_es_profile</a></td></tr>
|
||||||
|
<tr><td class="num">23</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_depth_float.txt">EXT_depth_float</a></td></tr>
|
||||||
|
<tr><td class="num">24</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_display_color_table.txt">EXT_display_color_table</a></td></tr>
|
||||||
|
<tr><td class="num">25</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_extensions_string.txt">EXT_extensions_string</a></td></tr>
|
||||||
|
<tr><td class="num">26</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt">EXT_framebuffer_sRGB</a></td></tr>
|
||||||
|
<tr><td class="num">27</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_make_current_read.txt">EXT_make_current_read</a></td></tr>
|
||||||
|
<tr><td class="num">28</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_multisample.txt">EXT_multisample</a></td></tr>
|
||||||
|
<tr><td class="num">29</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_pbuffer.txt">EXT_pbuffer</a></td></tr>
|
||||||
|
<tr><td class="num">30</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_pixel_format.txt">EXT_pixel_format</a></td></tr>
|
||||||
|
<tr><td class="num">31</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt">EXT_pixel_format_packed_float</a></td></tr>
|
||||||
|
<tr><td class="num">32</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_swap_control.txt">EXT_swap_control</a></td></tr>
|
||||||
|
<tr><td class="num">33</td><td> </td><td><a href="http://www.opengl.org/registry/specs/EXT/wgl_swap_control_tear.txt">EXT_swap_control_tear</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">34</td><td> </td><td><a href="http://www.opengl.org/registry/specs/I3D/wgl_digital_video_control.txt">I3D_digital_video_control</a></td></tr>
|
||||||
|
<tr><td class="num">35</td><td> </td><td><a href="http://www.opengl.org/registry/specs/I3D/wgl_gamma.txt">I3D_gamma</a></td></tr>
|
||||||
|
<tr><td class="num">36</td><td> </td><td><a href="http://www.opengl.org/registry/specs/I3D/wgl_genlock.txt">I3D_genlock</a></td></tr>
|
||||||
|
<tr><td class="num">37</td><td> </td><td><a href="http://www.opengl.org/registry/specs/I3D/wgl_image_buffer.txt">I3D_image_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">38</td><td> </td><td><a href="http://www.opengl.org/registry/specs/I3D/wgl_swap_frame_lock.txt">I3D_swap_frame_lock</a></td></tr>
|
||||||
|
<tr><td class="num">39</td><td> </td><td><a href="http://www.opengl.org/registry/specs/I3D/wgl_swap_frame_usage.txt">I3D_swap_frame_usage</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">40</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/DX_interop.txt">NV_DX_interop</a></td></tr>
|
||||||
|
<tr><td class="num">41</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/DX_interop2.txt">NV_DX_interop2</a></td></tr>
|
||||||
|
<tr><td class="num">42</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/copy_image.txt">NV_copy_image</a></td></tr>
|
||||||
|
<tr><td class="num">43</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/wgl_delay_before_swap.txt">NV_delay_before_swap</a></td></tr>
|
||||||
|
<tr><td class="num">44</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/float_buffer.txt">NV_float_buffer</a></td></tr>
|
||||||
|
<tr><td class="num">45</td><td> </td><td><a href="http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt">NV_gpu_affinity</a></td></tr>
|
||||||
|
<tr><td class="num">46</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/multisample_coverage.txt">NV_multisample_coverage</a></td></tr>
|
||||||
|
<tr><td class="num">47</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/present_video.txt">NV_present_video</a></td></tr>
|
||||||
|
<tr><td class="num">48</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/render_depth_texture.txt">NV_render_depth_texture</a></td></tr>
|
||||||
|
<tr><td class="num">49</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/render_texture_rectangle.txt">NV_render_texture_rectangle</a></td></tr>
|
||||||
|
<tr><td class="num">50</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/wgl_swap_group.txt">NV_swap_group</a></td></tr>
|
||||||
|
<tr><td class="num">51</td><td> </td><td><a href="http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt">NV_vertex_array_range</a></td></tr>
|
||||||
|
<tr><td class="num">52</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/video_capture.txt">NV_video_capture</a></td></tr>
|
||||||
|
<tr><td class="num">53</td><td> </td><td><a href="http://www.opengl.org/registry/specs/NV/wgl_video_output.txt">NV_video_output</a></td></tr>
|
||||||
|
<tr><td><br></td><td></td><td></td></tr>
|
||||||
|
<tr><td class="num">54</td><td> </td><td><a href="http://www.opengl.org/registry/specs/OML/wgl_sync_control.txt">OML_sync_control</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<!-- begin footer.html -->
|
||||||
|
</td></tr></table></body>
|
||||||
|
<!-- end footer.html -->
|
||||||
|
|
2261
dependencies/glew-2.0.0/include/GL/eglew.h
vendored
Normal file
2261
dependencies/glew-2.0.0/include/GL/eglew.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
20113
dependencies/glew-2.0.0/include/GL/glew.h
vendored
Normal file
20113
dependencies/glew-2.0.0/include/GL/glew.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1769
dependencies/glew-2.0.0/include/GL/glxew.h
vendored
Normal file
1769
dependencies/glew-2.0.0/include/GL/glxew.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1427
dependencies/glew-2.0.0/include/GL/wglew.h
vendored
Normal file
1427
dependencies/glew-2.0.0/include/GL/wglew.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
dependencies/glew-2.0.0/lib/Release/Win32/glew32.lib
vendored
Normal file
BIN
dependencies/glew-2.0.0/lib/Release/Win32/glew32.lib
vendored
Normal file
Binary file not shown.
BIN
dependencies/glew-2.0.0/lib/Release/Win32/glew32s.lib
vendored
Normal file
BIN
dependencies/glew-2.0.0/lib/Release/Win32/glew32s.lib
vendored
Normal file
Binary file not shown.
BIN
dependencies/glew-2.0.0/lib/Release/x64/glew32.lib
vendored
Normal file
BIN
dependencies/glew-2.0.0/lib/Release/x64/glew32.lib
vendored
Normal file
Binary file not shown.
BIN
dependencies/glew-2.0.0/lib/Release/x64/glew32s.lib
vendored
Normal file
BIN
dependencies/glew-2.0.0/lib/Release/x64/glew32s.lib
vendored
Normal file
Binary file not shown.
67
dependencies/glm/CMakeLists.txt
vendored
Normal file
67
dependencies/glm/CMakeLists.txt
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
file(GLOB ROOT_SOURCE *.cpp)
|
||||||
|
file(GLOB ROOT_INLINE *.inl)
|
||||||
|
file(GLOB ROOT_HEADER *.hpp)
|
||||||
|
file(GLOB ROOT_TEXT ../*.txt)
|
||||||
|
file(GLOB ROOT_MD ../*.md)
|
||||||
|
file(GLOB ROOT_NAT ../util/glm.natvis)
|
||||||
|
|
||||||
|
file(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp)
|
||||||
|
file(GLOB_RECURSE CORE_INLINE ./detail/*.inl)
|
||||||
|
file(GLOB_RECURSE CORE_HEADER ./detail/*.hpp)
|
||||||
|
|
||||||
|
file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)
|
||||||
|
file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)
|
||||||
|
file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)
|
||||||
|
|
||||||
|
file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)
|
||||||
|
file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)
|
||||||
|
file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)
|
||||||
|
|
||||||
|
file(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp)
|
||||||
|
file(GLOB_RECURSE SIMD_INLINE ./simd/*.inl)
|
||||||
|
file(GLOB_RECURSE SIMD_HEADER ./simd/*.h)
|
||||||
|
|
||||||
|
source_group("Text Files" FILES ${ROOT_TEXT} ${ROOT_MD})
|
||||||
|
source_group("Core Files" FILES ${CORE_SOURCE})
|
||||||
|
source_group("Core Files" FILES ${CORE_INLINE})
|
||||||
|
source_group("Core Files" FILES ${CORE_HEADER})
|
||||||
|
source_group("GTC Files" FILES ${GTC_SOURCE})
|
||||||
|
source_group("GTC Files" FILES ${GTC_INLINE})
|
||||||
|
source_group("GTC Files" FILES ${GTC_HEADER})
|
||||||
|
source_group("GTX Files" FILES ${GTX_SOURCE})
|
||||||
|
source_group("GTX Files" FILES ${GTX_INLINE})
|
||||||
|
source_group("GTX Files" FILES ${GTX_HEADER})
|
||||||
|
source_group("SIMD Files" FILES ${SIMD_SOURCE})
|
||||||
|
source_group("SIMD Files" FILES ${SIMD_INLINE})
|
||||||
|
source_group("SIMD Files" FILES ${SIMD_HEADER})
|
||||||
|
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||||
|
|
||||||
|
if(GLM_STATIC_LIBRARY_ENABLE OR GLM_DYNAMIC_LIBRARY_ENABLE)
|
||||||
|
if(GLM_STATIC_LIBRARY_ENABLE)
|
||||||
|
add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
|
||||||
|
${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
|
||||||
|
${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
|
||||||
|
${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
|
||||||
|
${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
|
||||||
|
${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER})
|
||||||
|
endif(GLM_STATIC_LIBRARY_ENABLE)
|
||||||
|
|
||||||
|
if(GLM_DYNAMIC_LIBRARY_ENABLE)
|
||||||
|
add_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
|
||||||
|
${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
|
||||||
|
${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
|
||||||
|
${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
|
||||||
|
${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
|
||||||
|
${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER})
|
||||||
|
endif(GLM_DYNAMIC_LIBRARY_ENABLE)
|
||||||
|
|
||||||
|
else(GLM_STATIC_LIBRARY_ENABLE OR GLM_DYNAMIC_LIBRARY_ENABLE)
|
||||||
|
add_executable(glm_dummy ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
|
||||||
|
${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
|
||||||
|
${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
|
||||||
|
${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
|
||||||
|
${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
|
||||||
|
${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER})
|
||||||
|
|
||||||
|
endif(GLM_STATIC_LIBRARY_ENABLE OR GLM_DYNAMIC_LIBRARY_ENABLE)
|
6
dependencies/glm/common.hpp
vendored
Normal file
6
dependencies/glm/common.hpp
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/common.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "detail/func_common.hpp"
|
399
dependencies/glm/detail/_features.hpp
vendored
Normal file
399
dependencies/glm/detail/_features.hpp
vendored
Normal file
@ -0,0 +1,399 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/_features.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// #define GLM_CXX98_EXCEPTIONS
|
||||||
|
// #define GLM_CXX98_RTTI
|
||||||
|
|
||||||
|
// #define GLM_CXX11_RVALUE_REFERENCES
|
||||||
|
// Rvalue references - GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
|
||||||
|
|
||||||
|
// GLM_CXX11_TRAILING_RETURN
|
||||||
|
// Rvalue references for *this - GCC not supported
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
|
||||||
|
|
||||||
|
// GLM_CXX11_NONSTATIC_MEMBER_INIT
|
||||||
|
// Initialization of class objects by rvalues - GCC any
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
|
||||||
|
|
||||||
|
// GLM_CXX11_NONSTATIC_MEMBER_INIT
|
||||||
|
// Non-static data member initializers - GCC 4.7
|
||||||
|
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_VARIADIC_TEMPLATE
|
||||||
|
// Variadic templates - GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extending variadic template template parameters - GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
|
||||||
|
|
||||||
|
// #define GLM_CXX11_GENERALIZED_INITIALIZERS
|
||||||
|
// Initializer lists - GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_STATIC_ASSERT
|
||||||
|
// Static assertions - GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
|
||||||
|
|
||||||
|
// #define GLM_CXX11_AUTO_TYPE
|
||||||
|
// auto-typed variables - GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
|
||||||
|
|
||||||
|
// #define GLM_CXX11_AUTO_TYPE
|
||||||
|
// Multi-declarator auto - GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
|
||||||
|
|
||||||
|
// #define GLM_CXX11_AUTO_TYPE
|
||||||
|
// Removal of auto as a storage-class specifier - GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_AUTO_TYPE
|
||||||
|
// New function declarator syntax - GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_LAMBDAS
|
||||||
|
// New wording for C++0x lambdas - GCC 4.5
|
||||||
|
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
|
||||||
|
|
||||||
|
// #define GLM_CXX11_DECLTYPE
|
||||||
|
// Declared type of an expression - GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Right angle brackets - GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
|
||||||
|
|
||||||
|
//
|
||||||
|
// Default template arguments for function templates DR226 GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
|
||||||
|
|
||||||
|
//
|
||||||
|
// Solving the SFINAE problem for expressions DR339 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
|
||||||
|
|
||||||
|
// #define GLM_CXX11_ALIAS_TEMPLATE
|
||||||
|
// Template aliases N2258 GCC 4.7
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extern templates N1987 Yes
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_NULLPTR
|
||||||
|
// Null pointer constant N2431 GCC 4.6
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
|
||||||
|
|
||||||
|
// #define GLM_CXX11_STRONG_ENUMS
|
||||||
|
// Strongly-typed enums N2347 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Forward declarations for enums N2764 GCC 4.6
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generalized attributes N2761 GCC 4.8
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generalized constant expressions N2235 GCC 4.6
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Alignment support N2341 GCC 4.8
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
|
||||||
|
|
||||||
|
// #define GLM_CXX11_DELEGATING_CONSTRUCTORS
|
||||||
|
// Delegating constructors N1986 GCC 4.7
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Inheriting constructors N2540 GCC 4.8
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_EXPLICIT_CONVERSIONS
|
||||||
|
// Explicit conversion operators N2437 GCC 4.5
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// New character types N2249 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
|
||||||
|
|
||||||
|
//
|
||||||
|
// Unicode string literals N2442 GCC 4.5
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Raw string literals N2442 GCC 4.5
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Universal character name literals N2170 GCC 4.5
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
|
||||||
|
|
||||||
|
// #define GLM_CXX11_USER_LITERALS
|
||||||
|
// User-defined literals N2765 GCC 4.7
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Standard Layout Types N2342 GCC 4.5
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_DEFAULTED_FUNCTIONS
|
||||||
|
// #define GLM_CXX11_DELETED_FUNCTIONS
|
||||||
|
// Defaulted and deleted functions N2346 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extended friend declarations N1791 GCC 4.7
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extending sizeof N2253 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
|
||||||
|
|
||||||
|
// #define GLM_CXX11_INLINE_NAMESPACES
|
||||||
|
// Inline namespaces N2535 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_UNRESTRICTED_UNIONS
|
||||||
|
// Unrestricted unions N2544 GCC 4.6
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
|
||||||
|
|
||||||
|
// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
|
||||||
|
// Local and unnamed types as template arguments N2657 GCC 4.5
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_RANGE_FOR
|
||||||
|
// Range-based for N2930 GCC 4.6
|
||||||
|
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
|
||||||
|
|
||||||
|
// #define GLM_CXX11_OVERRIDE_CONTROL
|
||||||
|
// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7
|
||||||
|
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Minimal support for garbage collection and reachability-based leak detection N2670 No
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
|
||||||
|
|
||||||
|
// #define GLM_CXX11_NOEXCEPT
|
||||||
|
// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
|
||||||
|
|
||||||
|
//
|
||||||
|
// Defining move special member functions N3053 GCC 4.6
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sequence points N2239 Yes
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
|
||||||
|
|
||||||
|
//
|
||||||
|
// Atomic operations N2427 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
|
||||||
|
|
||||||
|
//
|
||||||
|
// Strong Compare and Exchange N2748 GCC 4.5
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bidirectional Fences N2752 GCC 4.8
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Memory model N2429 GCC 4.8
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Data-dependency ordering: atomics and memory model N2664 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Propagating exceptions N2179 GCC 4.4
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
|
||||||
|
|
||||||
|
//
|
||||||
|
// Abandoning a process and at_quick_exit N2440 GCC 4.8
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allow atomics use in signal handlers N2547 Yes
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Thread-local storage N2659 GCC 4.8
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// Dynamic initialization and destruction with concurrency N2660 GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// __func__ predefined identifier N2340 GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// C99 preprocessor N1653 GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
|
||||||
|
|
||||||
|
//
|
||||||
|
// long long N1811 GCC 4.3
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extended integral types N1988 Yes
|
||||||
|
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
|
||||||
|
|
||||||
|
#if(GLM_COMPILER & GLM_COMPILER_GCC)
|
||||||
|
|
||||||
|
# if(GLM_COMPILER >= GLM_COMPILER_GCC43)
|
||||||
|
# define GLM_CXX11_STATIC_ASSERT
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif(GLM_COMPILER & GLM_COMPILER_CLANG)
|
||||||
|
# if(__has_feature(cxx_exceptions))
|
||||||
|
# define GLM_CXX98_EXCEPTIONS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_rtti))
|
||||||
|
# define GLM_CXX98_RTTI
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_access_control_sfinae))
|
||||||
|
# define GLM_CXX11_ACCESS_CONTROL_SFINAE
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_alias_templates))
|
||||||
|
# define GLM_CXX11_ALIAS_TEMPLATE
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_alignas))
|
||||||
|
# define GLM_CXX11_ALIGNAS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_attributes))
|
||||||
|
# define GLM_CXX11_ATTRIBUTES
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_constexpr))
|
||||||
|
# define GLM_CXX11_CONSTEXPR
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_decltype))
|
||||||
|
# define GLM_CXX11_DECLTYPE
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_default_function_template_args))
|
||||||
|
# define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_defaulted_functions))
|
||||||
|
# define GLM_CXX11_DEFAULTED_FUNCTIONS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_delegating_constructors))
|
||||||
|
# define GLM_CXX11_DELEGATING_CONSTRUCTORS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_deleted_functions))
|
||||||
|
# define GLM_CXX11_DELETED_FUNCTIONS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_explicit_conversions))
|
||||||
|
# define GLM_CXX11_EXPLICIT_CONVERSIONS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_generalized_initializers))
|
||||||
|
# define GLM_CXX11_GENERALIZED_INITIALIZERS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_implicit_moves))
|
||||||
|
# define GLM_CXX11_IMPLICIT_MOVES
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_inheriting_constructors))
|
||||||
|
# define GLM_CXX11_INHERITING_CONSTRUCTORS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_inline_namespaces))
|
||||||
|
# define GLM_CXX11_INLINE_NAMESPACES
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_lambdas))
|
||||||
|
# define GLM_CXX11_LAMBDAS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_local_type_template_args))
|
||||||
|
# define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_noexcept))
|
||||||
|
# define GLM_CXX11_NOEXCEPT
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_nonstatic_member_init))
|
||||||
|
# define GLM_CXX11_NONSTATIC_MEMBER_INIT
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_nullptr))
|
||||||
|
# define GLM_CXX11_NULLPTR
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_override_control))
|
||||||
|
# define GLM_CXX11_OVERRIDE_CONTROL
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_reference_qualified_functions))
|
||||||
|
# define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_range_for))
|
||||||
|
# define GLM_CXX11_RANGE_FOR
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_raw_string_literals))
|
||||||
|
# define GLM_CXX11_RAW_STRING_LITERALS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_rvalue_references))
|
||||||
|
# define GLM_CXX11_RVALUE_REFERENCES
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_static_assert))
|
||||||
|
# define GLM_CXX11_STATIC_ASSERT
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_auto_type))
|
||||||
|
# define GLM_CXX11_AUTO_TYPE
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_strong_enums))
|
||||||
|
# define GLM_CXX11_STRONG_ENUMS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_trailing_return))
|
||||||
|
# define GLM_CXX11_TRAILING_RETURN
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_unicode_literals))
|
||||||
|
# define GLM_CXX11_UNICODE_LITERALS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_unrestricted_unions))
|
||||||
|
# define GLM_CXX11_UNRESTRICTED_UNIONS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_user_literals))
|
||||||
|
# define GLM_CXX11_USER_LITERALS
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if(__has_feature(cxx_variadic_templates))
|
||||||
|
# define GLM_CXX11_VARIADIC_TEMPLATES
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif//(GLM_COMPILER & GLM_COMPILER_CLANG)
|
30
dependencies/glm/detail/_fixes.hpp
vendored
Normal file
30
dependencies/glm/detail/_fixes.hpp
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/_fixes.hpp
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
//! Workaround for compatibility with other libraries
|
||||||
|
#ifdef max
|
||||||
|
#undef max
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! Workaround for compatibility with other libraries
|
||||||
|
#ifdef min
|
||||||
|
#undef min
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! Workaround for Android
|
||||||
|
#ifdef isnan
|
||||||
|
#undef isnan
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! Workaround for Android
|
||||||
|
#ifdef isinf
|
||||||
|
#undef isinf
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! Workaround for Chrone Native Client
|
||||||
|
#ifdef log2
|
||||||
|
#undef log2
|
||||||
|
#endif
|
||||||
|
|
107
dependencies/glm/detail/_noise.hpp
vendored
Normal file
107
dependencies/glm/detail/_noise.hpp
vendored
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/_noise.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../vec2.hpp"
|
||||||
|
#include "../vec3.hpp"
|
||||||
|
#include "../vec4.hpp"
|
||||||
|
#include "../common.hpp"
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <typename T>
|
||||||
|
GLM_FUNC_QUALIFIER T mod289(T const & x)
|
||||||
|
{
|
||||||
|
return x - floor(x * static_cast<T>(1.0) / static_cast<T>(289.0)) * static_cast<T>(289.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
GLM_FUNC_QUALIFIER T permute(T const & x)
|
||||||
|
{
|
||||||
|
return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec2<T, P> permute(tvec2<T, P> const & x)
|
||||||
|
{
|
||||||
|
return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec3<T, P> permute(tvec3<T, P> const & x)
|
||||||
|
{
|
||||||
|
return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec4<T, P> permute(tvec4<T, P> const & x)
|
||||||
|
{
|
||||||
|
return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
template <typename T, precision P, template<typename> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> permute(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return mod289(((x * T(34)) + T(1)) * x);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
template <typename T>
|
||||||
|
GLM_FUNC_QUALIFIER T taylorInvSqrt(T const & r)
|
||||||
|
{
|
||||||
|
return T(1.79284291400159) - T(0.85373472095314) * r;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec2<T, P> taylorInvSqrt(tvec2<T, P> const & r)
|
||||||
|
{
|
||||||
|
return T(1.79284291400159) - T(0.85373472095314) * r;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec3<T, P> taylorInvSqrt(tvec3<T, P> const & r)
|
||||||
|
{
|
||||||
|
return T(1.79284291400159) - T(0.85373472095314) * r;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec4<T, P> taylorInvSqrt(tvec4<T, P> const & r)
|
||||||
|
{
|
||||||
|
return T(1.79284291400159) - T(0.85373472095314) * r;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
template <typename T, precision P, template<typename> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> taylorInvSqrt(vecType<T, P> const & r)
|
||||||
|
{
|
||||||
|
return T(1.79284291400159) - T(0.85373472095314) * r;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec2<T, P> fade(tvec2<T, P> const & t)
|
||||||
|
{
|
||||||
|
return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec3<T, P> fade(tvec3<T, P> const & t)
|
||||||
|
{
|
||||||
|
return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec4<T, P> fade(tvec4<T, P> const & t)
|
||||||
|
{
|
||||||
|
return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
template <typename T, precision P, template <typename> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> fade(vecType<T, P> const & t)
|
||||||
|
{
|
||||||
|
return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
||||||
|
|
797
dependencies/glm/detail/_swizzle.hpp
vendored
Normal file
797
dependencies/glm/detail/_swizzle.hpp
vendored
Normal file
@ -0,0 +1,797 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/_swizzle.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
// Internal class for implementing swizzle operators
|
||||||
|
template <typename T, int N>
|
||||||
|
struct _swizzle_base0
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast<T*>(_buffer))[i]; }
|
||||||
|
GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast<const T*>(_buffer))[i]; }
|
||||||
|
|
||||||
|
// Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
|
||||||
|
// The size 1 buffer is assumed to aligned to the actual members so that the
|
||||||
|
// elem()
|
||||||
|
char _buffer[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, bool Aligned>
|
||||||
|
struct _swizzle_base1 : public _swizzle_base0<T, N>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, bool Aligned>
|
||||||
|
struct _swizzle_base1<2, T, P, vecType, E0,E1,-1,-2, Aligned> : public _swizzle_base0<T, 2>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, bool Aligned>
|
||||||
|
struct _swizzle_base1<3, T, P, vecType, E0,E1,E2,-1, Aligned> : public _swizzle_base0<T, 3>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1), this->elem(E2)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, bool Aligned>
|
||||||
|
struct _swizzle_base1<4, T, P, vecType, E0,E1,E2,E3, Aligned> : public _swizzle_base0<T, 4>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
// Internal class for implementing swizzle operators
|
||||||
|
/*
|
||||||
|
Template parameters:
|
||||||
|
|
||||||
|
ValueType = type of scalar values (e.g. float, double)
|
||||||
|
VecType = class the swizzle is applies to (e.g. tvec3<float>)
|
||||||
|
N = number of components in the vector (e.g. 3)
|
||||||
|
E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec
|
||||||
|
|
||||||
|
DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
|
||||||
|
containing duplicate elements so that they cannot be used as r-values).
|
||||||
|
*/
|
||||||
|
template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
|
||||||
|
struct _swizzle_base2 : public _swizzle_base1<N, T, P, vecType, E0,E1,E2,E3, detail::is_aligned<P>::value>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < N; ++i)
|
||||||
|
(*this)[i] = t;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vecType<T, P> const& that)
|
||||||
|
{
|
||||||
|
struct op {
|
||||||
|
GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e = t; }
|
||||||
|
};
|
||||||
|
_apply_op(that, op());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER void operator -= (vecType<T, P> const& that)
|
||||||
|
{
|
||||||
|
struct op {
|
||||||
|
GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e -= t; }
|
||||||
|
};
|
||||||
|
_apply_op(that, op());
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER void operator += (vecType<T, P> const& that)
|
||||||
|
{
|
||||||
|
struct op {
|
||||||
|
GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e += t; }
|
||||||
|
};
|
||||||
|
_apply_op(that, op());
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER void operator *= (vecType<T, P> const& that)
|
||||||
|
{
|
||||||
|
struct op {
|
||||||
|
GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e *= t; }
|
||||||
|
};
|
||||||
|
_apply_op(that, op());
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER void operator /= (vecType<T, P> const& that)
|
||||||
|
{
|
||||||
|
struct op {
|
||||||
|
GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e /= t; }
|
||||||
|
};
|
||||||
|
_apply_op(that, op());
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER T& operator[](size_t i)
|
||||||
|
{
|
||||||
|
const int offset_dst[4] = { E0, E1, E2, E3 };
|
||||||
|
return this->elem(offset_dst[i]);
|
||||||
|
}
|
||||||
|
GLM_FUNC_QUALIFIER T operator[](size_t i) const
|
||||||
|
{
|
||||||
|
const int offset_dst[4] = { E0, E1, E2, E3 };
|
||||||
|
return this->elem(offset_dst[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER void _apply_op(vecType<T, P> const& that, U op)
|
||||||
|
{
|
||||||
|
// Make a copy of the data in this == &that.
|
||||||
|
// The copier should optimize out the copy in cases where the function is
|
||||||
|
// properly inlined and the copy is not necessary.
|
||||||
|
T t[N];
|
||||||
|
for (int i = 0; i < N; ++i)
|
||||||
|
t[i] = that[i];
|
||||||
|
for (int i = 0; i < N; ++i)
|
||||||
|
op( (*this)[i], t[i] );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Specialization for swizzles containing duplicate elements. These cannot be modified.
|
||||||
|
template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3>
|
||||||
|
struct _swizzle_base2<N, T, P, vecType, E0,E1,E2,E3, 1> : public _swizzle_base1<N, T, P, vecType, E0,E1,E2,E3, detail::is_aligned<P>::value>
|
||||||
|
{
|
||||||
|
struct Stub {};
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; }
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER T operator[] (size_t i) const
|
||||||
|
{
|
||||||
|
const int offset_dst[4] = { E0, E1, E2, E3 };
|
||||||
|
return this->elem(offset_dst[i]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3>
|
||||||
|
struct _swizzle : public _swizzle_base2<N, T, P, vecType, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)>
|
||||||
|
{
|
||||||
|
typedef _swizzle_base2<N, T, P, vecType, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type;
|
||||||
|
|
||||||
|
using base_type::operator=;
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER operator vecType<T, P> () const { return (*this)(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
|
||||||
|
//
|
||||||
|
#define _GLM_SWIZZLE_TEMPLATE1 template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3>
|
||||||
|
#define _GLM_SWIZZLE_TEMPLATE2 template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>
|
||||||
|
#define _GLM_SWIZZLE_TYPE1 _swizzle<N, T, P, vecType, E0, E1, E2, E3>
|
||||||
|
#define _GLM_SWIZZLE_TYPE2 _swizzle<N, T, P, vecType, F0, F1, F2, F3>
|
||||||
|
|
||||||
|
//
|
||||||
|
// Wrapper for a binary operator (e.g. u.yy + v.zy)
|
||||||
|
//
|
||||||
|
#define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE2 \
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
|
||||||
|
{ \
|
||||||
|
return a() OPERAND b(); \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const vecType<T, P>& b) \
|
||||||
|
{ \
|
||||||
|
return a() OPERAND b; \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const vecType<T, P>& a, const _GLM_SWIZZLE_TYPE1& b) \
|
||||||
|
{ \
|
||||||
|
return a OPERAND b(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
|
||||||
|
//
|
||||||
|
#define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \
|
||||||
|
{ \
|
||||||
|
return a() OPERAND b; \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \
|
||||||
|
{ \
|
||||||
|
return a OPERAND b(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Macro for wrapping a function taking one argument (e.g. abs())
|
||||||
|
//
|
||||||
|
#define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a()); \
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Macro for wrapping a function taking two vector arguments (e.g. dot()).
|
||||||
|
//
|
||||||
|
#define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE2 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a(), b()); \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a(), b()); \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a(), b); \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a, b()); \
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
|
||||||
|
//
|
||||||
|
#define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE2 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a(), b(), c); \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a(), b(), c); \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a(), b, c); \
|
||||||
|
} \
|
||||||
|
_GLM_SWIZZLE_TEMPLATE1 \
|
||||||
|
GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
|
||||||
|
{ \
|
||||||
|
return FUNCTION(a, b(), c); \
|
||||||
|
}
|
||||||
|
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
_GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
|
||||||
|
_GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
|
||||||
|
_GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
|
||||||
|
_GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
|
||||||
|
_GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
|
||||||
|
_GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Swizzles are distinct types from the unswizzled type. The below macros will
|
||||||
|
// provide template specializations for the swizzle types for the given functions
|
||||||
|
// so that the compiler does not have any ambiguity to choosing how to handle
|
||||||
|
// the function.
|
||||||
|
//
|
||||||
|
// The alternative is to use the operator()() when calling the function in order
|
||||||
|
// to explicitly convert the swizzled type to the unswizzled type.
|
||||||
|
//
|
||||||
|
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);
|
||||||
|
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);
|
||||||
|
//_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE2_2_MEMBERS(T, P, V, E0,E1) \
|
||||||
|
struct { detail::_swizzle<2, T, P, V, 0,0,-1,-2> E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2, T, P, V, 0,1,-1,-2> E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<2, T, P, V, 1,0,-1,-2> E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2, T, P, V, 1,1,-1,-2> E1 ## E1; };
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE2_3_MEMBERS(T, P, V, E0,E1) \
|
||||||
|
struct { detail::_swizzle<3,T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3,T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3,T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3,T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3,T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3,T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3,T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3,T, P, V, 1,1,1,-1> E1 ## E1 ## E1; };
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE2_4_MEMBERS(T, P, V, E0,E1) \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; };
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE3_2_MEMBERS(T, P, V, E0,E1,E2) \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 0,0,-1,-2> E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 0,1,-1,-2> E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 0,2,-1,-2> E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 1,0,-1,-2> E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 1,1,-1,-2> E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 1,2,-1,-2> E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 2,0,-1,-2> E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 2,1,-1,-2> E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 2,2,-1,-2> E2 ## E2; };
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE3_3_MEMBERS(T, P, V ,E0,E1,E2) \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,0,2,-1> E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,1,2,-1> E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,2,0,-1> E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,2,1,-1> E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,2,2,-1> E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,0,2,-1> E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,1,2,-1> E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,2,0,-1> E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,2,1,-1> E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,2,2,-1> E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,0,0,-1> E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,0,1,-1> E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,0,2,-1> E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,1,0,-1> E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,1,1,-1> E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,1,2,-1> E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,2,0,-1> E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,2,1,-1> E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,2,2,-1> E2 ## E2 ## E2; };
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE3_4_MEMBERS(T, P, V, E0,E1,E2) \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4,T, P, V, 2,2,2,2> E2 ## E2 ## E2 ## E2; };
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE4_2_MEMBERS(T, P, V, E0,E1,E2,E3) \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 0,0,-1,-2> E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 0,1,-1,-2> E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 0,2,-1,-2> E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 0,3,-1,-2> E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 1,0,-1,-2> E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 1,1,-1,-2> E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 1,2,-1,-2> E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 1,3,-1,-2> E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 2,0,-1,-2> E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 2,1,-1,-2> E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 2,2,-1,-2> E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 2,3,-1,-2> E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 3,0,-1,-2> E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 3,1,-1,-2> E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 3,2,-1,-2> E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<2,T, P, V, 3,3,-1,-2> E3 ## E3; };
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE4_3_MEMBERS(T, P, V, E0,E1,E2,E3) \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,0,2,-1> E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,0,3,-1> E0 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,1,2,-1> E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,1,3,-1> E0 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,2,0,-1> E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,2,1,-1> E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,2,2,-1> E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,2,3,-1> E0 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,3,0,-1> E0 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,3,1,-1> E0 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,3,2,-1> E0 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 0,3,3,-1> E0 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,0,2,-1> E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,0,3,-1> E1 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,1,2,-1> E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,1,3,-1> E1 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,2,0,-1> E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,2,1,-1> E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,2,2,-1> E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,2,3,-1> E1 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,3,0,-1> E1 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,3,1,-1> E1 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,3,2,-1> E1 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 1,3,3,-1> E1 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,0,0,-1> E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,0,1,-1> E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,0,2,-1> E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,0,3,-1> E2 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,1,0,-1> E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,1,1,-1> E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,1,2,-1> E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,1,3,-1> E2 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,2,0,-1> E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,2,1,-1> E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,2,2,-1> E2 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,2,3,-1> E2 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,3,0,-1> E2 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,3,1,-1> E2 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,3,2,-1> E2 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 2,3,3,-1> E2 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,0,0,-1> E3 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,0,1,-1> E3 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,0,2,-1> E3 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,0,3,-1> E3 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,1,0,-1> E3 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,1,1,-1> E3 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,1,2,-1> E3 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,1,3,-1> E3 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,2,0,-1> E3 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,2,1,-1> E3 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,2,2,-1> E3 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,2,3,-1> E3 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,3,0,-1> E3 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,3,1,-1> E3 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,3,2,-1> E3 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<3, T, P, V, 3,3,3,-1> E3 ## E3 ## E3; };
|
||||||
|
|
||||||
|
#define _GLM_SWIZZLE4_4_MEMBERS(T, P, V, E0,E1,E2,E3) \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
|
||||||
|
struct { detail::_swizzle<4, T, P, V, 3,3,3,3> E3 ## E3 ## E3 ## E3; };
|
696
dependencies/glm/detail/_swizzle_func.hpp
vendored
Normal file
696
dependencies/glm/detail/_swizzle_func.hpp
vendored
Normal file
@ -0,0 +1,696 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/_swizzle_func.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
|
||||||
|
SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B() CONST \
|
||||||
|
{ \
|
||||||
|
return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
|
||||||
|
SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C() CONST \
|
||||||
|
{ \
|
||||||
|
return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
|
||||||
|
SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C ## D() CONST \
|
||||||
|
{ \
|
||||||
|
return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
|
||||||
|
template <typename TMPL_TYPE> \
|
||||||
|
SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B() CONST \
|
||||||
|
{ \
|
||||||
|
return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
|
||||||
|
template <typename TMPL_TYPE> \
|
||||||
|
SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C() CONST \
|
||||||
|
{ \
|
||||||
|
return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
|
||||||
|
template <typename TMPL_TYPE> \
|
||||||
|
SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C ## D() CONST \
|
||||||
|
{ \
|
||||||
|
return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GLM_MUTABLE
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \
|
||||||
|
GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \
|
||||||
|
GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \
|
||||||
|
GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)
|
||||||
|
|
||||||
|
//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \
|
||||||
|
GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \
|
||||||
|
GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \
|
||||||
|
GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, p)
|
||||||
|
|
||||||
|
//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
|
||||||
|
GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
|
||||||
|
GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
|
||||||
|
GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)
|
||||||
|
|
||||||
|
//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)
|
||||||
|
|
||||||
|
//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p)
|
||||||
|
|
||||||
|
//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
|
||||||
|
GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)
|
||||||
|
|
||||||
|
//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)
|
131
dependencies/glm/detail/_vectorize.hpp
vendored
Normal file
131
dependencies/glm/detail/_vectorize.hpp
vendored
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/_vectorize.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "type_vec1.hpp"
|
||||||
|
#include "type_vec2.hpp"
|
||||||
|
#include "type_vec3.hpp"
|
||||||
|
#include "type_vec4.hpp"
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <typename R, typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
struct functor1{};
|
||||||
|
|
||||||
|
template <typename R, typename T, precision P>
|
||||||
|
struct functor1<R, T, P, tvec1>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec1<R, P> call(R (*Func) (T x), tvec1<T, P> const & v)
|
||||||
|
{
|
||||||
|
return tvec1<R, P>(Func(v.x));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename R, typename T, precision P>
|
||||||
|
struct functor1<R, T, P, tvec2>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec2<R, P> call(R (*Func) (T x), tvec2<T, P> const & v)
|
||||||
|
{
|
||||||
|
return tvec2<R, P>(Func(v.x), Func(v.y));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename R, typename T, precision P>
|
||||||
|
struct functor1<R, T, P, tvec3>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec3<R, P> call(R (*Func) (T x), tvec3<T, P> const & v)
|
||||||
|
{
|
||||||
|
return tvec3<R, P>(Func(v.x), Func(v.y), Func(v.z));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename R, typename T, precision P>
|
||||||
|
struct functor1<R, T, P, tvec4>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<R, P> call(R (*Func) (T x), tvec4<T, P> const & v)
|
||||||
|
{
|
||||||
|
return tvec4<R, P>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
struct functor2{};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct functor2<T, P, tvec1>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, tvec1<T, P> const & b)
|
||||||
|
{
|
||||||
|
return tvec1<T, P>(Func(a.x, b.x));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct functor2<T, P, tvec2>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, tvec2<T, P> const & b)
|
||||||
|
{
|
||||||
|
return tvec2<T, P>(Func(a.x, b.x), Func(a.y, b.y));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct functor2<T, P, tvec3>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, tvec3<T, P> const & b)
|
||||||
|
{
|
||||||
|
return tvec3<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct functor2<T, P, tvec4>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, tvec4<T, P> const & b)
|
||||||
|
{
|
||||||
|
return tvec4<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
struct functor2_vec_sca{};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct functor2_vec_sca<T, P, tvec1>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, T b)
|
||||||
|
{
|
||||||
|
return tvec1<T, P>(Func(a.x, b));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct functor2_vec_sca<T, P, tvec2>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, T b)
|
||||||
|
{
|
||||||
|
return tvec2<T, P>(Func(a.x, b), Func(a.y, b));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct functor2_vec_sca<T, P, tvec3>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, T b)
|
||||||
|
{
|
||||||
|
return tvec3<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct functor2_vec_sca<T, P, tvec4>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, T b)
|
||||||
|
{
|
||||||
|
return tvec4<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
207
dependencies/glm/detail/dummy.cpp
vendored
Normal file
207
dependencies/glm/detail/dummy.cpp
vendored
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/core/dummy.cpp
|
||||||
|
///
|
||||||
|
/// GLM is a header only library. There is nothing to compile.
|
||||||
|
/// dummy.cpp exist only a wordaround for CMake file.
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define GLM_MESSAGES
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/ext.hpp>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
struct material
|
||||||
|
{
|
||||||
|
glm::vec4 emission; // Ecm
|
||||||
|
glm::vec4 ambient; // Acm
|
||||||
|
glm::vec4 diffuse; // Dcm
|
||||||
|
glm::vec4 specular; // Scm
|
||||||
|
float shininess; // Srm
|
||||||
|
};
|
||||||
|
|
||||||
|
struct light
|
||||||
|
{
|
||||||
|
glm::vec4 ambient; // Acli
|
||||||
|
glm::vec4 diffuse; // Dcli
|
||||||
|
glm::vec4 specular; // Scli
|
||||||
|
glm::vec4 position; // Ppli
|
||||||
|
glm::vec4 halfVector; // Derived: Hi
|
||||||
|
glm::vec3 spotDirection; // Sdli
|
||||||
|
float spotExponent; // Srli
|
||||||
|
float spotCutoff; // Crli
|
||||||
|
// (range: [0.0,90.0], 180.0)
|
||||||
|
float spotCosCutoff; // Derived: cos(Crli)
|
||||||
|
// (range: [1.0,0.0],-1.0)
|
||||||
|
float constantAttenuation; // K0
|
||||||
|
float linearAttenuation; // K1
|
||||||
|
float quadraticAttenuation;// K2
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Sample 1
|
||||||
|
#include <glm/vec3.hpp>// glm::vec3
|
||||||
|
#include <glm/geometric.hpp>// glm::cross, glm::normalize
|
||||||
|
|
||||||
|
glm::vec3 computeNormal
|
||||||
|
(
|
||||||
|
glm::vec3 const & a,
|
||||||
|
glm::vec3 const & b,
|
||||||
|
glm::vec3 const & c
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return glm::normalize(glm::cross(c - a, b - a));
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef unsigned int GLuint;
|
||||||
|
#define GL_FALSE 0
|
||||||
|
void glUniformMatrix4fv(GLuint, int, int, float*){}
|
||||||
|
|
||||||
|
// Sample 2
|
||||||
|
#include <glm/vec3.hpp> // glm::vec3
|
||||||
|
#include <glm/vec4.hpp> // glm::vec4, glm::ivec4
|
||||||
|
#include <glm/mat4x4.hpp> // glm::mat4
|
||||||
|
#include <glm/gtc/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale, glm::perspective
|
||||||
|
#include <glm/gtc/type_ptr.hpp> // glm::value_ptr
|
||||||
|
void func(GLuint LocationMVP, float Translate, glm::vec2 const & Rotate)
|
||||||
|
{
|
||||||
|
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);
|
||||||
|
glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate));
|
||||||
|
glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));
|
||||||
|
glm::mat4 View = glm::rotate(ViewRotateX, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));
|
||||||
|
glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
|
||||||
|
glm::mat4 MVP = Projection * View * Model;
|
||||||
|
glUniformMatrix4fv(LocationMVP, 1, GL_FALSE, glm::value_ptr(MVP));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sample 3
|
||||||
|
#include <glm/vec2.hpp>// glm::vec2
|
||||||
|
#include <glm/packing.hpp>// glm::packUnorm2x16
|
||||||
|
#include <glm/integer.hpp>// glm::uint
|
||||||
|
#include <glm/gtc/type_precision.hpp>// glm::i8vec2, glm::i32vec2
|
||||||
|
std::size_t const VertexCount = 4;
|
||||||
|
// Float quad geometry
|
||||||
|
std::size_t const PositionSizeF32 = VertexCount * sizeof(glm::vec2);
|
||||||
|
glm::vec2 const PositionDataF32[VertexCount] =
|
||||||
|
{
|
||||||
|
glm::vec2(-1.0f,-1.0f),
|
||||||
|
glm::vec2( 1.0f,-1.0f),
|
||||||
|
glm::vec2( 1.0f, 1.0f),
|
||||||
|
glm::vec2(-1.0f, 1.0f)
|
||||||
|
};
|
||||||
|
// Half-float quad geometry
|
||||||
|
std::size_t const PositionSizeF16 = VertexCount * sizeof(glm::uint);
|
||||||
|
glm::uint const PositionDataF16[VertexCount] =
|
||||||
|
{
|
||||||
|
glm::uint(glm::packUnorm2x16(glm::vec2(-1.0f, -1.0f))),
|
||||||
|
glm::uint(glm::packUnorm2x16(glm::vec2( 1.0f, -1.0f))),
|
||||||
|
glm::uint(glm::packUnorm2x16(glm::vec2( 1.0f, 1.0f))),
|
||||||
|
glm::uint(glm::packUnorm2x16(glm::vec2(-1.0f, 1.0f)))
|
||||||
|
};
|
||||||
|
// 8 bits signed integer quad geometry
|
||||||
|
std::size_t const PositionSizeI8 = VertexCount * sizeof(glm::i8vec2);
|
||||||
|
glm::i8vec2 const PositionDataI8[VertexCount] =
|
||||||
|
{
|
||||||
|
glm::i8vec2(-1,-1),
|
||||||
|
glm::i8vec2( 1,-1),
|
||||||
|
glm::i8vec2( 1, 1),
|
||||||
|
glm::i8vec2(-1, 1)
|
||||||
|
};
|
||||||
|
// 32 bits signed integer quad geometry
|
||||||
|
std::size_t const PositionSizeI32 = VertexCount * sizeof(glm::i32vec2);
|
||||||
|
glm::i32vec2 const PositionDataI32[VertexCount] =
|
||||||
|
{
|
||||||
|
glm::i32vec2 (-1,-1),
|
||||||
|
glm::i32vec2 ( 1,-1),
|
||||||
|
glm::i32vec2 ( 1, 1),
|
||||||
|
glm::i32vec2 (-1, 1)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct intersection
|
||||||
|
{
|
||||||
|
glm::vec4 position;
|
||||||
|
glm::vec3 normal;
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Sample 4
|
||||||
|
#include <glm/vec3.hpp>// glm::vec3
|
||||||
|
#include <glm/geometric.hpp>// glm::normalize, glm::dot, glm::reflect
|
||||||
|
#include <glm/exponential.hpp>// glm::pow
|
||||||
|
#include <glm/gtc/random.hpp>// glm::vecRand3
|
||||||
|
glm::vec3 lighting
|
||||||
|
(
|
||||||
|
intersection const & Intersection,
|
||||||
|
material const & Material,
|
||||||
|
light const & Light,
|
||||||
|
glm::vec3 const & View
|
||||||
|
)
|
||||||
|
{
|
||||||
|
glm::vec3 Color(0.0f);
|
||||||
|
glm::vec3 LightVertor(glm::normalize(
|
||||||
|
Light.position - Intersection.position +
|
||||||
|
glm::vecRand3(0.0f, Light.inaccuracy));
|
||||||
|
|
||||||
|
if(!shadow(Intersection.position, Light.position, LightVertor))
|
||||||
|
{
|
||||||
|
float Diffuse = glm::dot(Intersection.normal, LightVector);
|
||||||
|
if(Diffuse <= 0.0f)
|
||||||
|
return Color;
|
||||||
|
if(Material.isDiffuse())
|
||||||
|
Color += Light.color() * Material.diffuse * Diffuse;
|
||||||
|
if(Material.isSpecular())
|
||||||
|
{
|
||||||
|
glm::vec3 Reflect(glm::reflect(
|
||||||
|
glm::normalize(-LightVector),
|
||||||
|
glm::normalize(Intersection.normal)));
|
||||||
|
float Dot = glm::dot(Reflect, View);
|
||||||
|
float Base = Dot > 0.0f ? Dot : 0.0f;
|
||||||
|
float Specular = glm::pow(Base, Material.exponent);
|
||||||
|
Color += Material.specular * Specular;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Color;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
template <typename T, glm::precision P, template<typename, glm::precision> class vecType>
|
||||||
|
T normalizeDotA(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GLM_TEMPLATE_GENTYPE typename T, glm::precision P, template<typename, glm::precision> class
|
||||||
|
|
||||||
|
template <GLM_TEMPLATE_GENTYPE vecType>
|
||||||
|
T normalizeDotB(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vecType>
|
||||||
|
typename vecType::value_type normalizeDotC(vecType const & a, vecType const & b)
|
||||||
|
{
|
||||||
|
return glm::dot(a, b) * glm::inversesqrt(glm::dot(a, a) * glm::dot(b, b));
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
glm::vec1 o(1);
|
||||||
|
glm::vec2 a(1);
|
||||||
|
glm::vec3 b(1);
|
||||||
|
glm::vec4 c(1);
|
||||||
|
|
||||||
|
glm::quat q;
|
||||||
|
glm::dualquat p;
|
||||||
|
|
||||||
|
glm::mat4 m(1);
|
||||||
|
|
||||||
|
float a0 = normalizeDotA(a, a);
|
||||||
|
float b0 = normalizeDotB(b, b);
|
||||||
|
float c0 = normalizeDotC(c, c);
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
}
|
427
dependencies/glm/detail/func_common.hpp
vendored
Normal file
427
dependencies/glm/detail/func_common.hpp
vendored
Normal file
@ -0,0 +1,427 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_common.hpp
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
///
|
||||||
|
/// @defgroup core_func_common Common functions
|
||||||
|
/// @ingroup core
|
||||||
|
///
|
||||||
|
/// These all operate component-wise. The description is per component.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "setup.hpp"
|
||||||
|
#include "precision.hpp"
|
||||||
|
#include "type_int.hpp"
|
||||||
|
#include "_fixes.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
/// @addtogroup core_func_common
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Returns x if x >= 0; otherwise, it returns -x.
|
||||||
|
///
|
||||||
|
/// @tparam genType floating-point or signed integer; scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType abs(genType x);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> abs(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point or signed integer; scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> sign(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns a value equal to the nearest integer that is less then or equal to x.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> floor(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns a value equal to the nearest integer to x
|
||||||
|
/// whose absolute value is not larger than the absolute value of x.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> trunc(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns a value equal to the nearest integer to x.
|
||||||
|
/// The fraction 0.5 will round in a direction chosen by the
|
||||||
|
/// implementation, presumably the direction that is fastest.
|
||||||
|
/// This includes the possibility that round(x) returns the
|
||||||
|
/// same value as roundEven(x) for all values of x.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> round(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns a value equal to the nearest integer to x.
|
||||||
|
/// A fractional part of 0.5 will round toward the nearest even
|
||||||
|
/// integer. (Both 3.5 and 4.5 for x will return 4.0.)
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
/// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> roundEven(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns a value equal to the nearest integer
|
||||||
|
/// that is greater than or equal to x.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> ceil(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Return x - floor(x).
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType fract(genType x);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> fract(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Modulus. Returns x - y * floor(x / y)
|
||||||
|
/// for each component in x using the floating point value y.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType mod(genType x, genType y);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, T y);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns the fractional part of x and sets i to the integer
|
||||||
|
/// part (as a whole number floating point value). Both the
|
||||||
|
/// return value and the output parameter will have the same
|
||||||
|
/// sign as x.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType modf(genType x, genType & i);
|
||||||
|
|
||||||
|
/// Returns y if y < x; otherwise, it returns x.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point or integer; scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType min(genType x, genType y);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> min(vecType<T, P> const & x, T y);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> min(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns y if x < y; otherwise, it returns x.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point or integer; scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType max(genType x, genType y);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> max(vecType<T, P> const & x, T y);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> max(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns min(max(x, minVal), maxVal) for each component in x
|
||||||
|
/// using the floating-point values minVal and maxVal.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point or integer; scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> clamp(vecType<T, P> const & x, T minVal, T maxVal);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> clamp(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal);
|
||||||
|
|
||||||
|
/// If genTypeU is a floating scalar or vector:
|
||||||
|
/// Returns x * (1.0 - a) + y * a, i.e., the linear blend of
|
||||||
|
/// x and y using the floating-point value a.
|
||||||
|
/// The value for a is not restricted to the range [0, 1].
|
||||||
|
///
|
||||||
|
/// If genTypeU is a boolean scalar or vector:
|
||||||
|
/// Selects which vector each returned component comes
|
||||||
|
/// from. For a component of <a> that is false, the
|
||||||
|
/// corresponding component of x is returned. For a
|
||||||
|
/// component of a that is true, the corresponding
|
||||||
|
/// component of y is returned. Components of x and y that
|
||||||
|
/// are not selected are allowed to be invalid floating point
|
||||||
|
/// values and will have no effect on the results. Thus, this
|
||||||
|
/// provides different functionality than
|
||||||
|
/// genType mix(genType x, genType y, genType(a))
|
||||||
|
/// where a is a Boolean vector.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
///
|
||||||
|
/// @param[in] x Value to interpolate.
|
||||||
|
/// @param[in] y Value to interpolate.
|
||||||
|
/// @param[in] a Interpolant.
|
||||||
|
///
|
||||||
|
/// @tparam genTypeT Floating point scalar or vector.
|
||||||
|
/// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
|
||||||
|
///
|
||||||
|
/// @code
|
||||||
|
/// #include <glm/glm.hpp>
|
||||||
|
/// ...
|
||||||
|
/// float a;
|
||||||
|
/// bool b;
|
||||||
|
/// glm::dvec3 e;
|
||||||
|
/// glm::dvec3 f;
|
||||||
|
/// glm::vec4 g;
|
||||||
|
/// glm::vec4 h;
|
||||||
|
/// ...
|
||||||
|
/// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
|
||||||
|
/// glm::vec4 s = glm::mix(g, h, b); // Teturns g or h;
|
||||||
|
/// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
|
||||||
|
/// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
|
||||||
|
/// @endcode
|
||||||
|
template <typename T, typename U, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a);
|
||||||
|
|
||||||
|
template <typename T, typename U, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, U a);
|
||||||
|
|
||||||
|
template <typename genTypeT, typename genTypeU>
|
||||||
|
GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a);
|
||||||
|
|
||||||
|
/// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType step(genType edge, genType x);
|
||||||
|
|
||||||
|
/// Returns 0.0 if x < edge, otherwise it returns 1.0.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <template <typename, precision> class vecType, typename T, precision P>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> step(T edge, vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns 0.0 if x < edge, otherwise it returns 1.0.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <template <typename, precision> class vecType, typename T, precision P>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> step(vecType<T, P> const & edge, vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
|
||||||
|
/// performs smooth Hermite interpolation between 0 and 1
|
||||||
|
/// when edge0 < x < edge1. This is useful in cases where
|
||||||
|
/// you would want a threshold function with a smooth
|
||||||
|
/// transition. This is equivalent to:
|
||||||
|
/// genType t;
|
||||||
|
/// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1);
|
||||||
|
/// return t * t * (3 - 2 * t);
|
||||||
|
/// Results are undefined if edge0 >= edge1.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> smoothstep(T edge0, T edge1, vecType<T, P> const & x);
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> smoothstep(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns true if x holds a NaN (not a number)
|
||||||
|
/// representation in the underlying implementation's set of
|
||||||
|
/// floating point representations. Returns false otherwise,
|
||||||
|
/// including for implementations with no NaN
|
||||||
|
/// representations.
|
||||||
|
///
|
||||||
|
/// /!\ When using compiler fast math, this function may fail.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> isnan(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns true if x holds a positive infinity or negative
|
||||||
|
/// infinity representation in the underlying implementation's
|
||||||
|
/// set of floating point representations. Returns false
|
||||||
|
/// otherwise, including for implementations with no infinity
|
||||||
|
/// representations.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> isinf(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns a signed integer value representing
|
||||||
|
/// the encoding of a floating-point value. The floating-point
|
||||||
|
/// value's bit-level representation is preserved.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
GLM_FUNC_DECL int floatBitsToInt(float const & v);
|
||||||
|
|
||||||
|
/// Returns a signed integer value representing
|
||||||
|
/// the encoding of a floating-point value. The floatingpoint
|
||||||
|
/// value's bit-level representation is preserved.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <template <typename, precision> class vecType, precision P>
|
||||||
|
GLM_FUNC_DECL vecType<int, P> floatBitsToInt(vecType<float, P> const & v);
|
||||||
|
|
||||||
|
/// Returns a unsigned integer value representing
|
||||||
|
/// the encoding of a floating-point value. The floatingpoint
|
||||||
|
/// value's bit-level representation is preserved.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
GLM_FUNC_DECL uint floatBitsToUint(float const & v);
|
||||||
|
|
||||||
|
/// Returns a unsigned integer value representing
|
||||||
|
/// the encoding of a floating-point value. The floatingpoint
|
||||||
|
/// value's bit-level representation is preserved.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <template <typename, precision> class vecType, precision P>
|
||||||
|
GLM_FUNC_DECL vecType<uint, P> floatBitsToUint(vecType<float, P> const & v);
|
||||||
|
|
||||||
|
/// Returns a floating-point value corresponding to a signed
|
||||||
|
/// integer encoding of a floating-point value.
|
||||||
|
/// If an inf or NaN is passed in, it will not signal, and the
|
||||||
|
/// resulting floating point value is unspecified. Otherwise,
|
||||||
|
/// the bit-level representation is preserved.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
GLM_FUNC_DECL float intBitsToFloat(int const & v);
|
||||||
|
|
||||||
|
/// Returns a floating-point value corresponding to a signed
|
||||||
|
/// integer encoding of a floating-point value.
|
||||||
|
/// If an inf or NaN is passed in, it will not signal, and the
|
||||||
|
/// resulting floating point value is unspecified. Otherwise,
|
||||||
|
/// the bit-level representation is preserved.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <template <typename, precision> class vecType, precision P>
|
||||||
|
GLM_FUNC_DECL vecType<float, P> intBitsToFloat(vecType<int, P> const & v);
|
||||||
|
|
||||||
|
/// Returns a floating-point value corresponding to a
|
||||||
|
/// unsigned integer encoding of a floating-point value.
|
||||||
|
/// If an inf or NaN is passed in, it will not signal, and the
|
||||||
|
/// resulting floating point value is unspecified. Otherwise,
|
||||||
|
/// the bit-level representation is preserved.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
GLM_FUNC_DECL float uintBitsToFloat(uint const & v);
|
||||||
|
|
||||||
|
/// Returns a floating-point value corresponding to a
|
||||||
|
/// unsigned integer encoding of a floating-point value.
|
||||||
|
/// If an inf or NaN is passed in, it will not signal, and the
|
||||||
|
/// resulting floating point value is unspecified. Otherwise,
|
||||||
|
/// the bit-level representation is preserved.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <template <typename, precision> class vecType, precision P>
|
||||||
|
GLM_FUNC_DECL vecType<float, P> uintBitsToFloat(vecType<uint, P> const & v);
|
||||||
|
|
||||||
|
/// Computes and returns a * b + c.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType fma(genType const & a, genType const & b, genType const & c);
|
||||||
|
|
||||||
|
/// Splits x into a floating-point significand in the range
|
||||||
|
/// [0.5, 1.0) and an integral exponent of two, such that:
|
||||||
|
/// x = significand * exp(2, exponent)
|
||||||
|
///
|
||||||
|
/// The significand is returned by the function and the
|
||||||
|
/// exponent is returned in the parameter exp. For a
|
||||||
|
/// floating-point value of zero, the significant and exponent
|
||||||
|
/// are both zero. For a floating-point value that is an
|
||||||
|
/// infinity or is not a number, the results are undefined.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType, typename genIType>
|
||||||
|
GLM_FUNC_DECL genType frexp(genType const & x, genIType & exp);
|
||||||
|
|
||||||
|
/// Builds a floating-point number from x and the
|
||||||
|
/// corresponding integral exponent of two in exp, returning:
|
||||||
|
/// significand * exp(2, exponent)
|
||||||
|
///
|
||||||
|
/// If this product is too large to be represented in the
|
||||||
|
/// floating-point type, the result is undefined.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>;
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
|
||||||
|
template <typename genType, typename genIType>
|
||||||
|
GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "func_common.inl"
|
||||||
|
|
849
dependencies/glm/detail/func_common.inl
vendored
Normal file
849
dependencies/glm/detail/func_common.inl
vendored
Normal file
@ -0,0 +1,849 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_common.inl
|
||||||
|
|
||||||
|
#include "func_vector_relational.hpp"
|
||||||
|
#include "type_vec2.hpp"
|
||||||
|
#include "type_vec3.hpp"
|
||||||
|
#include "type_vec4.hpp"
|
||||||
|
#include "_vectorize.hpp"
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
// min
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType min(genType x, genType y)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'min' only accept floating-point or integer inputs");
|
||||||
|
return x < y ? x : y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// max
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType max(genType x, genType y)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'max' only accept floating-point or integer inputs");
|
||||||
|
|
||||||
|
return x > y ? x : y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// abs
|
||||||
|
template <>
|
||||||
|
GLM_FUNC_QUALIFIER int32 abs(int32 x)
|
||||||
|
{
|
||||||
|
int32 const y = x >> 31;
|
||||||
|
return (x ^ y) - y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// round
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
using ::std::round;
|
||||||
|
# else
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType round(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'round' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return x < static_cast<genType>(0) ? static_cast<genType>(int(x - static_cast<genType>(0.5))) : static_cast<genType>(int(x + static_cast<genType>(0.5)));
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
// trunc
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
using ::std::trunc;
|
||||||
|
# else
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType trunc(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'trunc' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return x < static_cast<genType>(0) ? -std::floor(-x) : std::floor(x);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <typename genFIType, bool /*signed*/>
|
||||||
|
struct compute_abs
|
||||||
|
{};
|
||||||
|
|
||||||
|
template <typename genFIType>
|
||||||
|
struct compute_abs<genFIType, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static genFIType call(genFIType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(
|
||||||
|
std::numeric_limits<genFIType>::is_iec559 || std::numeric_limits<genFIType>::is_signed || GLM_UNRESTRICTED_GENTYPE,
|
||||||
|
"'abs' only accept floating-point and integer scalar or vector inputs");
|
||||||
|
|
||||||
|
return x >= genFIType(0) ? x : -x;
|
||||||
|
// TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
template <>
|
||||||
|
struct compute_abs<float, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static float call(float x)
|
||||||
|
{
|
||||||
|
return fabsf(x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <typename genFIType>
|
||||||
|
struct compute_abs<genFIType, false>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static genFIType call(genFIType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(
|
||||||
|
(!std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer) || GLM_UNRESTRICTED_GENTYPE,
|
||||||
|
"'abs' only accept floating-point and integer scalar or vector inputs");
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_abs_vector
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(abs, x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename U, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_mix_vector
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");
|
||||||
|
|
||||||
|
return vecType<T, P>(vecType<U, P>(x) + a * vecType<U, P>(y - x));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_mix_vector<T, bool, P, vecType, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, vecType<bool, P> const & a)
|
||||||
|
{
|
||||||
|
vecType<T, P> Result(uninitialize);
|
||||||
|
for(length_t i = 0; i < x.length(); ++i)
|
||||||
|
Result[i] = a[i] ? y[i] : x[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename U, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_mix_scalar
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, U const & a)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");
|
||||||
|
|
||||||
|
return vecType<T, P>(vecType<U, P>(x) + a * vecType<U, P>(y - x));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_mix_scalar<T, bool, P, vecType, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, bool const & a)
|
||||||
|
{
|
||||||
|
return a ? y : x;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename U>
|
||||||
|
struct compute_mix
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(T const & x, T const & y, U const & a)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");
|
||||||
|
|
||||||
|
return static_cast<T>(static_cast<U>(x) + a * static_cast<U>(y - x));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct compute_mix<T, bool>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(T const & x, T const & y, bool const & a)
|
||||||
|
{
|
||||||
|
return a ? y : x;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool isFloat, bool Aligned>
|
||||||
|
struct compute_sign
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return vecType<T, P>(glm::lessThan(vecType<T, P>(0), x)) - vecType<T, P>(glm::lessThan(x, vecType<T, P>(0)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# if GLM_ARCH == GLM_ARCH_X86
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_sign<T, P, vecType, false, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
T const Shift(static_cast<T>(sizeof(T) * 8 - 1));
|
||||||
|
vecType<T, P> const y(vecType<typename make_unsigned<T>::type, P>(-x) >> typename make_unsigned<T>::type(Shift));
|
||||||
|
|
||||||
|
return (x >> Shift) | y;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
# endif
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_floor
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(std::floor, x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_ceil
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(std::ceil, x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_fract
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return x - floor(x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_trunc
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(trunc, x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_round
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(round, x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_mod
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & a, vecType<T, P> const & b)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'mod' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs.");
|
||||||
|
return a - b * floor(a / b);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_min_vector
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
return detail::functor2<T, P, vecType>::call(min, x, y);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_max_vector
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
return detail::functor2<T, P, vecType>::call(max, x, y);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_clamp_vector
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal)
|
||||||
|
{
|
||||||
|
return min(max(x, minVal), maxVal);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_step_vector
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & edge, vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return mix(vecType<T, P>(1), vecType<T, P>(0), glm::lessThan(x, edge));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_smoothstep_vector
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'step' only accept floating-point inputs");
|
||||||
|
vecType<T, P> const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast<T>(0), static_cast<T>(1)));
|
||||||
|
return tmp * tmp * (static_cast<T>(3) - static_cast<T>(2) * tmp);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
template <typename genFIType>
|
||||||
|
GLM_FUNC_QUALIFIER genFIType abs(genFIType x)
|
||||||
|
{
|
||||||
|
return detail::compute_abs<genFIType, std::numeric_limits<genFIType>::is_signed>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> abs(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::compute_abs_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sign
|
||||||
|
// fast and works for any type
|
||||||
|
template <typename genFIType>
|
||||||
|
GLM_FUNC_QUALIFIER genFIType sign(genFIType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(
|
||||||
|
std::numeric_limits<genFIType>::is_iec559 || (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),
|
||||||
|
"'sign' only accept signed inputs");
|
||||||
|
|
||||||
|
return detail::compute_sign<genFIType, defaultp, tvec1, std::numeric_limits<genFIType>::is_iec559, highp>::call(tvec1<genFIType>(x)).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> sign(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(
|
||||||
|
std::numeric_limits<T>::is_iec559 || (std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_integer),
|
||||||
|
"'sign' only accept signed inputs");
|
||||||
|
|
||||||
|
return detail::compute_sign<T, P, vecType, std::numeric_limits<T>::is_iec559, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// floor
|
||||||
|
using ::std::floor;
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> floor(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'floor' only accept floating-point inputs.");
|
||||||
|
return detail::compute_floor<T, P, vecType, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> trunc(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'trunc' only accept floating-point inputs");
|
||||||
|
return detail::compute_trunc<T, P, vecType, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> round(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'round' only accept floating-point inputs");
|
||||||
|
return detail::compute_round<T, P, vecType, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// roundEven
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType roundEven(genType const& x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return genType(int(x + genType(int(x) % 2)));
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// roundEven
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType roundEven(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs");
|
||||||
|
|
||||||
|
int Integer = static_cast<int>(x);
|
||||||
|
genType IntegerPart = static_cast<genType>(Integer);
|
||||||
|
genType FractionalPart = fract(x);
|
||||||
|
|
||||||
|
if(FractionalPart > static_cast<genType>(0.5) || FractionalPart < static_cast<genType>(0.5))
|
||||||
|
{
|
||||||
|
return round(x);
|
||||||
|
}
|
||||||
|
else if((Integer % 2) == 0)
|
||||||
|
{
|
||||||
|
return IntegerPart;
|
||||||
|
}
|
||||||
|
else if(x <= static_cast<genType>(0)) // Work around...
|
||||||
|
{
|
||||||
|
return IntegerPart - static_cast<genType>(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return IntegerPart + static_cast<genType>(1);
|
||||||
|
}
|
||||||
|
//else // Bug on MinGW 4.5.2
|
||||||
|
//{
|
||||||
|
// return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0));
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> roundEven(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'roundEven' only accept floating-point inputs");
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(roundEven, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ceil
|
||||||
|
using ::std::ceil;
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> ceil(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ceil' only accept floating-point inputs");
|
||||||
|
return detail::compute_ceil<T, P, vecType, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// fract
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType fract(genType x)
|
||||||
|
{
|
||||||
|
return fract(tvec1<genType>(x)).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> fract(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fract' only accept floating-point inputs");
|
||||||
|
return detail::compute_fract<T, P, vecType, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// mod
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType mod(genType x, genType y)
|
||||||
|
{
|
||||||
|
# if GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
// Another Cuda compiler bug https://github.com/g-truc/glm/issues/530
|
||||||
|
tvec1<genType, defaultp> Result(mod(tvec1<genType, defaultp>(x), y));
|
||||||
|
return Result.x;
|
||||||
|
# else
|
||||||
|
return mod(tvec1<genType, defaultp>(x), y).x;
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> mod(vecType<T, P> const & x, T y)
|
||||||
|
{
|
||||||
|
return detail::compute_mod<T, P, vecType, detail::is_aligned<P>::value>::call(x, vecType<T, P>(y));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> mod(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
return detail::compute_mod<T, P, vecType, detail::is_aligned<P>::value>::call(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// modf
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType modf(genType x, genType & i)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'modf' only accept floating-point inputs");
|
||||||
|
return std::modf(x, &i);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec1<T, P> modf(tvec1<T, P> const & x, tvec1<T, P> & i)
|
||||||
|
{
|
||||||
|
return tvec1<T, P>(
|
||||||
|
modf(x.x, i.x));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec2<T, P> modf(tvec2<T, P> const & x, tvec2<T, P> & i)
|
||||||
|
{
|
||||||
|
return tvec2<T, P>(
|
||||||
|
modf(x.x, i.x),
|
||||||
|
modf(x.y, i.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec3<T, P> modf(tvec3<T, P> const & x, tvec3<T, P> & i)
|
||||||
|
{
|
||||||
|
return tvec3<T, P>(
|
||||||
|
modf(x.x, i.x),
|
||||||
|
modf(x.y, i.y),
|
||||||
|
modf(x.z, i.z));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec4<T, P> modf(tvec4<T, P> const & x, tvec4<T, P> & i)
|
||||||
|
{
|
||||||
|
return tvec4<T, P>(
|
||||||
|
modf(x.x, i.x),
|
||||||
|
modf(x.y, i.y),
|
||||||
|
modf(x.z, i.z),
|
||||||
|
modf(x.w, i.w));
|
||||||
|
}
|
||||||
|
|
||||||
|
//// Only valid if (INT_MIN <= x-y <= INT_MAX)
|
||||||
|
//// min(x,y)
|
||||||
|
//r = y + ((x - y) & ((x - y) >> (sizeof(int) *
|
||||||
|
//CHAR_BIT - 1)));
|
||||||
|
//// max(x,y)
|
||||||
|
//r = x - ((x - y) & ((x - y) >> (sizeof(int) *
|
||||||
|
//CHAR_BIT - 1)));
|
||||||
|
|
||||||
|
// min
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> min(vecType<T, P> const & a, T b)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'min' only accept floating-point inputs for the interpolator a");
|
||||||
|
return detail::compute_min_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, vecType<T, P>(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> min(vecType<T, P> const & a, vecType<T, P> const & b)
|
||||||
|
{
|
||||||
|
return detail::compute_min_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
// max
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> max(vecType<T, P> const & a, T b)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'max' only accept floating-point inputs for the interpolator a");
|
||||||
|
return detail::compute_max_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, vecType<T, P>(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> max(vecType<T, P> const & a, vecType<T, P> const & b)
|
||||||
|
{
|
||||||
|
return detail::compute_max_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
// clamp
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType clamp(genType x, genType minVal, genType maxVal)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'clamp' only accept floating-point or integer inputs");
|
||||||
|
return min(max(x, minVal), maxVal);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> clamp(vecType<T, P> const & x, T minVal, T maxVal)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'clamp' only accept floating-point or integer inputs");
|
||||||
|
return detail::compute_clamp_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x, vecType<T, P>(minVal), vecType<T, P>(maxVal));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> clamp(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer || GLM_UNRESTRICTED_GENTYPE, "'clamp' only accept floating-point or integer inputs");
|
||||||
|
return detail::compute_clamp_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x, minVal, maxVal);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename genTypeT, typename genTypeU>
|
||||||
|
GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
|
||||||
|
{
|
||||||
|
return detail::compute_mix<genTypeT, genTypeU>::call(x, y, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, typename U, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, U a)
|
||||||
|
{
|
||||||
|
return detail::compute_mix_scalar<T, U, P, vecType, detail::is_aligned<P>::value>::call(x, y, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, typename U, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a)
|
||||||
|
{
|
||||||
|
return detail::compute_mix_vector<T, U, P, vecType, detail::is_aligned<P>::value>::call(x, y, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
// step
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType step(genType edge, genType x)
|
||||||
|
{
|
||||||
|
return mix(static_cast<genType>(1), static_cast<genType>(0), glm::lessThan(x, edge));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <template <typename, precision> class vecType, typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> step(T edge, vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::compute_step_vector<T, P, vecType, detail::is_aligned<P>::value>::call(vecType<T, P>(edge), x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <template <typename, precision> class vecType, typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> step(vecType<T, P> const & edge, vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::compute_step_vector<T, P, vecType, detail::is_aligned<P>::value>::call(edge, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// smoothstep
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs");
|
||||||
|
|
||||||
|
genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)));
|
||||||
|
return tmp * tmp * (genType(3) - genType(2) * tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> smoothstep(T edge0, T edge1, vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::compute_smoothstep_vector<T, P, vecType, detail::is_aligned<P>::value>::call(vecType<T, P>(edge0), vecType<T, P>(edge1), x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> smoothstep(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::compute_smoothstep_vector<T, P, vecType, detail::is_aligned<P>::value>::call(edge0, edge1, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
using std::isnan;
|
||||||
|
# else
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER bool isnan(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isnan' only accept floating-point inputs");
|
||||||
|
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
return std::isnan(x);
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
return _isnan(x) != 0;
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_INTEL
|
||||||
|
# if GLM_PLATFORM & GLM_PLATFORM_WINDOWS
|
||||||
|
return _isnan(x) != 0;
|
||||||
|
# else
|
||||||
|
return ::isnan(x) != 0;
|
||||||
|
# endif
|
||||||
|
# elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L
|
||||||
|
return _isnan(x) != 0;
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
return isnan(x) != 0;
|
||||||
|
# else
|
||||||
|
return std::isnan(x);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> isnan(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return detail::functor1<bool, T, P, vecType>::call(isnan, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
using std::isinf;
|
||||||
|
# else
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER bool isinf(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isinf' only accept floating-point inputs");
|
||||||
|
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
return std::isinf(x);
|
||||||
|
# elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)
|
||||||
|
# if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
|
||||||
|
return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF;
|
||||||
|
# else
|
||||||
|
return ::isinf(x);
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)
|
||||||
|
# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L)
|
||||||
|
return _isinf(x) != 0;
|
||||||
|
# else
|
||||||
|
return std::isinf(x);
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
// http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab
|
||||||
|
return isinf(double(x)) != 0;
|
||||||
|
# else
|
||||||
|
return std::isinf(x);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> isinf(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return detail::functor1<bool, T, P, vecType>::call(isinf, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER int floatBitsToInt(float const & v)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<int&>(const_cast<float&>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <template <typename, precision> class vecType, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<int, P> floatBitsToInt(vecType<float, P> const & v)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<vecType<int, P>&>(const_cast<vecType<float, P>&>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & v)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<uint&>(const_cast<float&>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <template <typename, precision> class vecType, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<uint, P> floatBitsToUint(vecType<float, P> const & v)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<vecType<uint, P>&>(const_cast<vecType<float, P>&>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER float intBitsToFloat(int const & v)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<float&>(const_cast<int&>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <template <typename, precision> class vecType, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<float, P> intBitsToFloat(vecType<int, P> const & v)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<vecType<float, P>&>(const_cast<vecType<int, P>&>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & v)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<float&>(const_cast<uint&>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <template <typename, precision> class vecType, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<float, P> uintBitsToFloat(vecType<uint, P> const & v)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<vecType<float, P>&>(const_cast<vecType<uint, P>&>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType fma(genType const & a, genType const & b, genType const & c)
|
||||||
|
{
|
||||||
|
return a * b + c;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType frexp(genType x, int & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return std::frexp(x, &exp);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec1<T, P> frexp(tvec1<T, P> const & x, tvec1<int, P> & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return tvec1<T, P>(std::frexp(x.x, &exp.x));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec2<T, P> frexp(tvec2<T, P> const & x, tvec2<int, P> & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return tvec2<T, P>(
|
||||||
|
frexp(x.x, exp.x),
|
||||||
|
frexp(x.y, exp.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec3<T, P> frexp(tvec3<T, P> const & x, tvec3<int, P> & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return tvec3<T, P>(
|
||||||
|
frexp(x.x, exp.x),
|
||||||
|
frexp(x.y, exp.y),
|
||||||
|
frexp(x.z, exp.z));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec4<T, P> frexp(tvec4<T, P> const & x, tvec4<int, P> & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'frexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return tvec4<T, P>(
|
||||||
|
frexp(x.x, exp.x),
|
||||||
|
frexp(x.y, exp.y),
|
||||||
|
frexp(x.z, exp.z),
|
||||||
|
frexp(x.w, exp.w));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType ldexp(genType const & x, int const & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return std::ldexp(x, exp);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec1<T, P> ldexp(tvec1<T, P> const & x, tvec1<int, P> const & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return tvec1<T, P>(
|
||||||
|
ldexp(x.x, exp.x));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec2<T, P> ldexp(tvec2<T, P> const & x, tvec2<int, P> const & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return tvec2<T, P>(
|
||||||
|
ldexp(x.x, exp.x),
|
||||||
|
ldexp(x.y, exp.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec3<T, P> ldexp(tvec3<T, P> const & x, tvec3<int, P> const & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return tvec3<T, P>(
|
||||||
|
ldexp(x.x, exp.x),
|
||||||
|
ldexp(x.y, exp.y),
|
||||||
|
ldexp(x.z, exp.z));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec4<T, P> ldexp(tvec4<T, P> const & x, tvec4<int, P> const & exp)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'ldexp' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return tvec4<T, P>(
|
||||||
|
ldexp(x.x, exp.x),
|
||||||
|
ldexp(x.y, exp.y),
|
||||||
|
ldexp(x.z, exp.z),
|
||||||
|
ldexp(x.w, exp.w));
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
# include "func_common_simd.inl"
|
||||||
|
#endif
|
231
dependencies/glm/detail/func_common_simd.inl
vendored
Normal file
231
dependencies/glm/detail/func_common_simd.inl
vendored
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_common_simd.inl
|
||||||
|
|
||||||
|
#if GLM_ARCH & GLM_ARCH_SSE2_BIT
|
||||||
|
|
||||||
|
#include "../simd/common.h"
|
||||||
|
|
||||||
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <precision P>
|
||||||
|
struct compute_abs_vector<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_abs(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_abs_vector<int, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<int, P> call(tvec4<int, P> const & v)
|
||||||
|
{
|
||||||
|
tvec4<int, P> result(uninitialize);
|
||||||
|
result.data = glm_ivec4_abs(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_floor<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_floor(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_ceil<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_ceil(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_fract<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_fract(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_round<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_round(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_mod<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & y)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_mod(x.data, y.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_min_vector<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v1, tvec4<float, P> const & v2)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = _mm_min_ps(v1.data, v2.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_min_vector<int32, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2)
|
||||||
|
{
|
||||||
|
tvec4<int32, P> result(uninitialize);
|
||||||
|
result.data = _mm_min_epi32(v1.data, v2.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_min_vector<uint32, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<uint32, P> const & v1, tvec4<uint32, P> const & v2)
|
||||||
|
{
|
||||||
|
tvec4<uint32, P> result(uninitialize);
|
||||||
|
result.data = _mm_min_epu32(v1.data, v2.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_max_vector<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v1, tvec4<float, P> const & v2)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = _mm_max_ps(v1.data, v2.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_max_vector<int32, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2)
|
||||||
|
{
|
||||||
|
tvec4<int32, P> result(uninitialize);
|
||||||
|
result.data = _mm_max_epi32(v1.data, v2.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_max_vector<uint32, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v1, tvec4<uint32, P> const & v2)
|
||||||
|
{
|
||||||
|
tvec4<uint32, P> result(uninitialize);
|
||||||
|
result.data = _mm_max_epu32(v1.data, v2.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_clamp_vector<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & minVal, tvec4<float, P> const & maxVal)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_clamp_vector<int32, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & x, tvec4<int32, P> const & minVal, tvec4<int32, P> const & maxVal)
|
||||||
|
{
|
||||||
|
tvec4<int32, P> result(uninitialize);
|
||||||
|
result.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_clamp_vector<uint32, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & x, tvec4<uint32, P> const & minVal, tvec4<uint32, P> const & maxVal)
|
||||||
|
{
|
||||||
|
tvec4<uint32, P> result(uninitialize);
|
||||||
|
result.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_mix_vector<float, bool, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & y, tvec4<bool, P> const & a)
|
||||||
|
{
|
||||||
|
__m128i const Load = _mm_set_epi32(-(int)a.w, -(int)a.z, -(int)a.y, -(int)a.x);
|
||||||
|
__m128 const Mask = _mm_castsi128_ps(Load);
|
||||||
|
|
||||||
|
tvec4<float, P> Result(uninitialize);
|
||||||
|
# if 0 && GLM_ARCH & GLM_ARCH_AVX
|
||||||
|
Result.data = _mm_blendv_ps(x.data, y.data, Mask);
|
||||||
|
# else
|
||||||
|
Result.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data));
|
||||||
|
# endif
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/* FIXME
|
||||||
|
template <precision P>
|
||||||
|
struct compute_step_vector<float, P, tvec4>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& edge, tvec4<float, P> const& x)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_step(edge.data, x.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
template <precision P>
|
||||||
|
struct compute_smoothstep_vector<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& edge0, tvec4<float, P> const& edge1, tvec4<float, P> const& x)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
|
103
dependencies/glm/detail/func_exponential.hpp
vendored
Normal file
103
dependencies/glm/detail/func_exponential.hpp
vendored
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_exponential.hpp
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||||
|
///
|
||||||
|
/// @defgroup core_func_exponential Exponential functions
|
||||||
|
/// @ingroup core
|
||||||
|
///
|
||||||
|
/// These all operate component-wise. The description is per component.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "type_vec1.hpp"
|
||||||
|
#include "type_vec2.hpp"
|
||||||
|
#include "type_vec3.hpp"
|
||||||
|
#include "type_vec4.hpp"
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
/// @addtogroup core_func_exponential
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Returns 'base' raised to the power 'exponent'.
|
||||||
|
///
|
||||||
|
/// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type precision.
|
||||||
|
/// @param exponent Floating point value representing the 'exponent'.
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml">GLSL pow man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> pow(vecType<T, P> const & base, vecType<T, P> const & exponent);
|
||||||
|
|
||||||
|
/// Returns the natural exponentiation of x, i.e., e^x.
|
||||||
|
///
|
||||||
|
/// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision.
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml">GLSL exp man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> exp(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// Returns the natural logarithm of v, i.e.,
|
||||||
|
/// returns the value y which satisfies the equation x = e^y.
|
||||||
|
/// Results are undefined if v <= 0.
|
||||||
|
///
|
||||||
|
/// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision.
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml">GLSL log man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> log(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// Returns 2 raised to the v power.
|
||||||
|
///
|
||||||
|
/// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision.
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml">GLSL exp2 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> exp2(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// Returns the base 2 log of x, i.e., returns the value y,
|
||||||
|
/// which satisfies the equation x = 2 ^ y.
|
||||||
|
///
|
||||||
|
/// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision.
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml">GLSL log2 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> log2(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// Returns the positive square root of v.
|
||||||
|
///
|
||||||
|
/// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision.
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml">GLSL sqrt man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||||
|
//template <typename genType>
|
||||||
|
//GLM_FUNC_DECL genType sqrt(genType const & x);
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> sqrt(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// Returns the reciprocal of the positive square root of v.
|
||||||
|
///
|
||||||
|
/// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision.
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml">GLSL inversesqrt man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> inversesqrt(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "func_exponential.inl"
|
146
dependencies/glm/detail/func_exponential.inl
vendored
Normal file
146
dependencies/glm/detail/func_exponential.inl
vendored
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_exponential.inl
|
||||||
|
|
||||||
|
#include "func_vector_relational.hpp"
|
||||||
|
#include "_vectorize.hpp"
|
||||||
|
#include <limits>
|
||||||
|
#include <cmath>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
using std::log2;
|
||||||
|
# else
|
||||||
|
template <typename genType>
|
||||||
|
genType log2(genType Value)
|
||||||
|
{
|
||||||
|
return std::log(Value) * static_cast<genType>(1.4426950408889634073599246810019);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
template <typename T, precision P, template <class, precision> class vecType, bool isFloat, bool Aligned>
|
||||||
|
struct compute_log2
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & vec)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(log2, vec);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <class, precision> class vecType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_sqrt
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(std::sqrt, x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <class, precision> class vecType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_inversesqrt
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return static_cast<T>(1) / sqrt(x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <class, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_inversesqrt<vecType, float, lowp, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<float, lowp> call(vecType<float, lowp> const & x)
|
||||||
|
{
|
||||||
|
vecType<float, lowp> tmp(x);
|
||||||
|
vecType<float, lowp> xhalf(tmp * 0.5f);
|
||||||
|
vecType<uint, lowp>* p = reinterpret_cast<vecType<uint, lowp>*>(const_cast<vecType<float, lowp>*>(&x));
|
||||||
|
vecType<uint, lowp> i = vecType<uint, lowp>(0x5f375a86) - (*p >> vecType<uint, lowp>(1));
|
||||||
|
vecType<float, lowp>* ptmp = reinterpret_cast<vecType<float, lowp>*>(&i);
|
||||||
|
tmp = *ptmp;
|
||||||
|
tmp = tmp * (1.5f - xhalf * tmp * tmp);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
// pow
|
||||||
|
using std::pow;
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> pow(vecType<T, P> const & base, vecType<T, P> const & exponent)
|
||||||
|
{
|
||||||
|
return detail::functor2<T, P, vecType>::call(pow, base, exponent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// exp
|
||||||
|
using std::exp;
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> exp(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(exp, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// log
|
||||||
|
using std::log;
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> log(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(log, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
//exp2, ln2 = 0.69314718055994530941723212145818f
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType exp2(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'exp2' only accept floating-point inputs");
|
||||||
|
|
||||||
|
return std::exp(static_cast<genType>(0.69314718055994530941723212145818) * x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> exp2(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(exp2, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// log2, ln2 = 0.69314718055994530941723212145818f
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType log2(genType x)
|
||||||
|
{
|
||||||
|
return log2(tvec1<genType>(x)).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> log2(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::compute_log2<T, P, vecType, std::numeric_limits<T>::is_iec559, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sqrt
|
||||||
|
using std::sqrt;
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> sqrt(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'sqrt' only accept floating-point inputs");
|
||||||
|
return detail::compute_sqrt<vecType, T, P, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// inversesqrt
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType inversesqrt(genType x)
|
||||||
|
{
|
||||||
|
return static_cast<genType>(1) / sqrt(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> inversesqrt(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'inversesqrt' only accept floating-point inputs");
|
||||||
|
return detail::compute_inversesqrt<vecType, T, P, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
# include "func_exponential_simd.inl"
|
||||||
|
#endif
|
||||||
|
|
35
dependencies/glm/detail/func_exponential_simd.inl
vendored
Normal file
35
dependencies/glm/detail/func_exponential_simd.inl
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_exponential_simd.inl
|
||||||
|
|
||||||
|
#include "../simd/exponential.h"
|
||||||
|
|
||||||
|
#if GLM_ARCH & GLM_ARCH_SSE2_BIT
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <precision P>
|
||||||
|
struct compute_sqrt<tvec4, float, P, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = _mm_sqrt_ps(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct compute_sqrt<tvec4, float, aligned_lowp, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, aligned_lowp> call(tvec4<float, aligned_lowp> const & v)
|
||||||
|
{
|
||||||
|
tvec4<float, aligned_lowp> result(uninitialize);
|
||||||
|
result.data = glm_vec4_sqrt_lowp(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
|
113
dependencies/glm/detail/func_geometric.hpp
vendored
Normal file
113
dependencies/glm/detail/func_geometric.hpp
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_geometric.hpp
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
///
|
||||||
|
/// @defgroup core_func_geometric Geometric functions
|
||||||
|
/// @ingroup core
|
||||||
|
///
|
||||||
|
/// These operate on vectors as vectors, not component-wise.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "type_vec3.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
/// @addtogroup core_func_geometric
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Returns the length of x, i.e., sqrt(x * x).
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml">GLSL length man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL T length(
|
||||||
|
vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml">GLSL distance man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL T distance(
|
||||||
|
vecType<T, P> const & p0,
|
||||||
|
vecType<T, P> const & p1);
|
||||||
|
|
||||||
|
/// Returns the dot product of x and y, i.e., result = x * y.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml">GLSL dot man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL T dot(
|
||||||
|
vecType<T, P> const & x,
|
||||||
|
vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns the cross product of x and y.
|
||||||
|
///
|
||||||
|
/// @tparam valType Floating-point scalar types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml">GLSL cross man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tvec3<T, P> cross(
|
||||||
|
tvec3<T, P> const & x,
|
||||||
|
tvec3<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns a vector in the same direction as x but with length of 1.
|
||||||
|
/// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml">GLSL normalize man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> normalize(
|
||||||
|
vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// If dot(Nref, I) < 0.0, return N, otherwise, return -N.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml">GLSL faceforward man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> faceforward(
|
||||||
|
vecType<T, P> const & N,
|
||||||
|
vecType<T, P> const & I,
|
||||||
|
vecType<T, P> const & Nref);
|
||||||
|
|
||||||
|
/// For the incident vector I and surface orientation N,
|
||||||
|
/// returns the reflection direction : result = I - 2.0 * dot(N, I) * N.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml">GLSL reflect man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL genType reflect(
|
||||||
|
genType const & I,
|
||||||
|
genType const & N);
|
||||||
|
|
||||||
|
/// For the incident vector I and surface normal N,
|
||||||
|
/// and the ratio of indices of refraction eta,
|
||||||
|
/// return the refraction vector.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml">GLSL refract man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> refract(
|
||||||
|
vecType<T, P> const & I,
|
||||||
|
vecType<T, P> const & N,
|
||||||
|
T eta);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "func_geometric.inl"
|
247
dependencies/glm/detail/func_geometric.inl
vendored
Normal file
247
dependencies/glm/detail/func_geometric.inl
vendored
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_geometric.inl
|
||||||
|
|
||||||
|
#include "func_exponential.hpp"
|
||||||
|
#include "func_common.hpp"
|
||||||
|
#include "type_vec2.hpp"
|
||||||
|
#include "type_vec4.hpp"
|
||||||
|
#include "type_float.hpp"
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <template <typename, precision> class vecType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_length
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return sqrt(dot(v, v));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <typename, precision> class vecType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_distance
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(vecType<T, P> const & p0, vecType<T, P> const & p1)
|
||||||
|
{
|
||||||
|
return length(p1 - p0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <class, precision> class vecType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_dot{};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_dot<tvec1, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(tvec1<T, P> const & a, tvec1<T, P> const & b)
|
||||||
|
{
|
||||||
|
return a.x * b.x;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_dot<tvec2, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(tvec2<T, P> const & x, tvec2<T, P> const & y)
|
||||||
|
{
|
||||||
|
tvec2<T, P> tmp(x * y);
|
||||||
|
return tmp.x + tmp.y;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_dot<tvec3, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(tvec3<T, P> const & x, tvec3<T, P> const & y)
|
||||||
|
{
|
||||||
|
tvec3<T, P> tmp(x * y);
|
||||||
|
return tmp.x + tmp.y + tmp.z;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_dot<tvec4, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(tvec4<T, P> const & x, tvec4<T, P> const & y)
|
||||||
|
{
|
||||||
|
tvec4<T, P> tmp(x * y);
|
||||||
|
return (tmp.x + tmp.y) + (tmp.z + tmp.w);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_cross
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec3<T, P> call(tvec3<T, P> const & x, tvec3<T, P> const & y)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'cross' accepts only floating-point inputs");
|
||||||
|
|
||||||
|
return tvec3<T, P>(
|
||||||
|
x.y * y.z - y.y * x.z,
|
||||||
|
x.z * y.x - y.z * x.x,
|
||||||
|
x.x * y.y - y.x * x.y);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_normalize
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs");
|
||||||
|
|
||||||
|
return v * inversesqrt(dot(v, v));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_faceforward
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & N, vecType<T, P> const & I, vecType<T, P> const & Nref)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs");
|
||||||
|
|
||||||
|
return dot(Nref, I) < static_cast<T>(0) ? N : -N;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_reflect
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & I, vecType<T, P> const & N)
|
||||||
|
{
|
||||||
|
return I - N * dot(N, I) * static_cast<T>(2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
|
||||||
|
struct compute_refract
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & I, vecType<T, P> const & N, T eta)
|
||||||
|
{
|
||||||
|
T const dotValue(dot(N, I));
|
||||||
|
T const k(static_cast<T>(1) - eta * eta * (static_cast<T>(1) - dotValue * dotValue));
|
||||||
|
return (eta * I - (eta * dotValue + std::sqrt(k)) * N) * static_cast<T>(k >= static_cast<T>(0));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
// length
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType length(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length' accepts only floating-point inputs");
|
||||||
|
|
||||||
|
return abs(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER T length(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'length' accepts only floating-point inputs");
|
||||||
|
|
||||||
|
return detail::compute_length<vecType, T, P, detail::is_aligned<P>::value>::call(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// distance
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType distance(genType const & p0, genType const & p1)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'distance' accepts only floating-point inputs");
|
||||||
|
|
||||||
|
return length(p1 - p0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER T distance(vecType<T, P> const & p0, vecType<T, P> const & p1)
|
||||||
|
{
|
||||||
|
return detail::compute_distance<vecType, T, P, detail::is_aligned<P>::value>::call(p0, p1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// dot
|
||||||
|
template <typename T>
|
||||||
|
GLM_FUNC_QUALIFIER T dot(T x, T y)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
|
||||||
|
return x * y;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER T dot(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
|
||||||
|
return detail::compute_dot<vecType, T, P, detail::is_aligned<P>::value>::call(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cross
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tvec3<T, P> cross(tvec3<T, P> const & x, tvec3<T, P> const & y)
|
||||||
|
{
|
||||||
|
return detail::compute_cross<T, P, detail::is_aligned<P>::value>::call(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// normalize
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType normalize(genType const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'normalize' accepts only floating-point inputs");
|
||||||
|
|
||||||
|
return x < genType(0) ? genType(-1) : genType(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> normalize(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs");
|
||||||
|
|
||||||
|
return detail::compute_normalize<T, P, vecType, detail::is_aligned<P>::value>::call(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// faceforward
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType faceforward(genType const & N, genType const & I, genType const & Nref)
|
||||||
|
{
|
||||||
|
return dot(Nref, I) < static_cast<genType>(0) ? N : -N;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> faceforward(vecType<T, P> const & N, vecType<T, P> const & I, vecType<T, P> const & Nref)
|
||||||
|
{
|
||||||
|
return detail::compute_faceforward<T, P, vecType, detail::is_aligned<P>::value>::call(N, I, Nref);
|
||||||
|
}
|
||||||
|
|
||||||
|
// reflect
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType reflect(genType const & I, genType const & N)
|
||||||
|
{
|
||||||
|
return I - N * dot(N, I) * genType(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> reflect(vecType<T, P> const & I, vecType<T, P> const & N)
|
||||||
|
{
|
||||||
|
return detail::compute_reflect<T, P, vecType, detail::is_aligned<P>::value>::call(I, N);
|
||||||
|
}
|
||||||
|
|
||||||
|
// refract
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType refract(genType const & I, genType const & N, genType eta)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'refract' accepts only floating-point inputs");
|
||||||
|
genType const dotValue(dot(N, I));
|
||||||
|
genType const k(static_cast<genType>(1) - eta * eta * (static_cast<genType>(1) - dotValue * dotValue));
|
||||||
|
return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast<genType>(k >= static_cast<genType>(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> refract(vecType<T, P> const & I, vecType<T, P> const & N, T eta)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'refract' accepts only floating-point inputs");
|
||||||
|
return detail::compute_refract<T, P, vecType, detail::is_aligned<P>::value>::call(I, N, eta);
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
# include "func_geometric_simd.inl"
|
||||||
|
#endif
|
99
dependencies/glm/detail/func_geometric_simd.inl
vendored
Normal file
99
dependencies/glm/detail/func_geometric_simd.inl
vendored
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_geometric_simd.inl
|
||||||
|
|
||||||
|
#include "../simd/geometric.h"
|
||||||
|
|
||||||
|
#if GLM_ARCH & GLM_ARCH_SSE2_BIT
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <precision P>
|
||||||
|
struct compute_length<tvec4, float, P, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const & v)
|
||||||
|
{
|
||||||
|
return _mm_cvtss_f32(glm_vec4_length(v.data));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_distance<tvec4, float, P, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const & p0, tvec4<float, P> const & p1)
|
||||||
|
{
|
||||||
|
return _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_dot<tvec4, float, P, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const& x, tvec4<float, P> const& y)
|
||||||
|
{
|
||||||
|
return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_cross<float, P, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec3<float, P> call(tvec3<float, P> const & a, tvec3<float, P> const & b)
|
||||||
|
{
|
||||||
|
__m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x);
|
||||||
|
__m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x);
|
||||||
|
__m128 const xpd0 = glm_vec4_cross(set0, set1);
|
||||||
|
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = xpd0;
|
||||||
|
return tvec3<float, P>(result);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_normalize<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_normalize(v.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_faceforward<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& N, tvec4<float, P> const& I, tvec4<float, P> const& Nref)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_faceforward(N.data, I.data, Nref.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_reflect<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& I, tvec4<float, P> const& N)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_reflect(I.data, N.data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_refract<float, P, tvec4, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& I, tvec4<float, P> const& N, float eta)
|
||||||
|
{
|
||||||
|
tvec4<float, P> result(uninitialize);
|
||||||
|
result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
|
203
dependencies/glm/detail/func_integer.hpp
vendored
Normal file
203
dependencies/glm/detail/func_integer.hpp
vendored
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_integer.hpp
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
///
|
||||||
|
/// @defgroup core_func_integer Integer functions
|
||||||
|
/// @ingroup core
|
||||||
|
///
|
||||||
|
/// These all operate component-wise. The description is per component.
|
||||||
|
/// The notation [a, b] means the set of bits from bit-number a through bit-number
|
||||||
|
/// b, inclusive. The lowest-order bit is bit 0.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "setup.hpp"
|
||||||
|
#include "precision.hpp"
|
||||||
|
#include "func_common.hpp"
|
||||||
|
#include "func_vector_relational.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
/// @addtogroup core_func_integer
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Adds 32-bit unsigned integer x and y, returning the sum
|
||||||
|
/// modulo pow(2, 32). The value carry is set to 0 if the sum was
|
||||||
|
/// less than pow(2, 32), or to 1 otherwise.
|
||||||
|
///
|
||||||
|
/// @tparam genUType Unsigned integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml">GLSL uaddCarry man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<uint, P> uaddCarry(
|
||||||
|
vecType<uint, P> const & x,
|
||||||
|
vecType<uint, P> const & y,
|
||||||
|
vecType<uint, P> & carry);
|
||||||
|
|
||||||
|
/// Subtracts the 32-bit unsigned integer y from x, returning
|
||||||
|
/// the difference if non-negative, or pow(2, 32) plus the difference
|
||||||
|
/// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise.
|
||||||
|
///
|
||||||
|
/// @tparam genUType Unsigned integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml">GLSL usubBorrow man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<uint, P> usubBorrow(
|
||||||
|
vecType<uint, P> const & x,
|
||||||
|
vecType<uint, P> const & y,
|
||||||
|
vecType<uint, P> & borrow);
|
||||||
|
|
||||||
|
/// Multiplies 32-bit integers x and y, producing a 64-bit
|
||||||
|
/// result. The 32 least-significant bits are returned in lsb.
|
||||||
|
/// The 32 most-significant bits are returned in msb.
|
||||||
|
///
|
||||||
|
/// @tparam genUType Unsigned integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml">GLSL umulExtended man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL void umulExtended(
|
||||||
|
vecType<uint, P> const & x,
|
||||||
|
vecType<uint, P> const & y,
|
||||||
|
vecType<uint, P> & msb,
|
||||||
|
vecType<uint, P> & lsb);
|
||||||
|
|
||||||
|
/// Multiplies 32-bit integers x and y, producing a 64-bit
|
||||||
|
/// result. The 32 least-significant bits are returned in lsb.
|
||||||
|
/// The 32 most-significant bits are returned in msb.
|
||||||
|
///
|
||||||
|
/// @tparam genIType Signed integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml">GLSL imulExtended man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL void imulExtended(
|
||||||
|
vecType<int, P> const & x,
|
||||||
|
vecType<int, P> const & y,
|
||||||
|
vecType<int, P> & msb,
|
||||||
|
vecType<int, P> & lsb);
|
||||||
|
|
||||||
|
/// Extracts bits [offset, offset + bits - 1] from value,
|
||||||
|
/// returning them in the least significant bits of the result.
|
||||||
|
/// For unsigned data types, the most significant bits of the
|
||||||
|
/// result will be set to zero. For signed data types, the
|
||||||
|
/// most significant bits will be set to the value of bit offset + base - 1.
|
||||||
|
///
|
||||||
|
/// If bits is zero, the result will be zero. The result will be
|
||||||
|
/// undefined if offset or bits is negative, or if the sum of
|
||||||
|
/// offset and bits is greater than the number of bits used
|
||||||
|
/// to store the operand.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml">GLSL bitfieldExtract man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> bitfieldExtract(
|
||||||
|
vecType<T, P> const & Value,
|
||||||
|
int Offset,
|
||||||
|
int Bits);
|
||||||
|
|
||||||
|
/// Returns the insertion the bits least-significant bits of insert into base.
|
||||||
|
///
|
||||||
|
/// The result will have bits [offset, offset + bits - 1] taken
|
||||||
|
/// from bits [0, bits - 1] of insert, and all other bits taken
|
||||||
|
/// directly from the corresponding bits of base. If bits is
|
||||||
|
/// zero, the result will simply be base. The result will be
|
||||||
|
/// undefined if offset or bits is negative, or if the sum of
|
||||||
|
/// offset and bits is greater than the number of bits used to
|
||||||
|
/// store the operand.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml">GLSL bitfieldInsert man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> bitfieldInsert(
|
||||||
|
vecType<T, P> const & Base,
|
||||||
|
vecType<T, P> const & Insert,
|
||||||
|
int Offset,
|
||||||
|
int Bits);
|
||||||
|
|
||||||
|
/// Returns the reversal of the bits of value.
|
||||||
|
/// The bit numbered n of the result will be taken from bit (bits - 1) - n of value,
|
||||||
|
/// where bits is the total number of bits used to represent value.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml">GLSL bitfieldReverse man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> bitfieldReverse(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// Returns the number of bits set to 1 in the binary representation of value.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_DECL int bitCount(genType v);
|
||||||
|
|
||||||
|
/// Returns the number of bits set to 1 in the binary representation of value.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<int, P> bitCount(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// Returns the bit number of the least significant bit set to
|
||||||
|
/// 1 in the binary representation of value.
|
||||||
|
/// If value is zero, -1 will be returned.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename genIUType>
|
||||||
|
GLM_FUNC_DECL int findLSB(genIUType x);
|
||||||
|
|
||||||
|
/// Returns the bit number of the least significant bit set to
|
||||||
|
/// 1 in the binary representation of value.
|
||||||
|
/// If value is zero, -1 will be returned.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<int, P> findLSB(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// Returns the bit number of the most significant bit in the binary representation of value.
|
||||||
|
/// For positive integers, the result will be the bit number of the most significant bit set to 1.
|
||||||
|
/// For negative integers, the result will be the bit number of the most significant
|
||||||
|
/// bit set to 0. For a value of zero or negative one, -1 will be returned.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename genIUType>
|
||||||
|
GLM_FUNC_DECL int findMSB(genIUType x);
|
||||||
|
|
||||||
|
/// Returns the bit number of the most significant bit in the binary representation of value.
|
||||||
|
/// For positive integers, the result will be the bit number of the most significant bit set to 1.
|
||||||
|
/// For negative integers, the result will be the bit number of the most significant
|
||||||
|
/// bit set to 0. For a value of zero or negative one, -1 will be returned.
|
||||||
|
///
|
||||||
|
/// @tparam T Signed or unsigned integer scalar types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<int, P> findMSB(vecType<T, P> const & v);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "func_integer.inl"
|
368
dependencies/glm/detail/func_integer.inl
vendored
Normal file
368
dependencies/glm/detail/func_integer.inl
vendored
Normal file
@ -0,0 +1,368 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_integer.inl
|
||||||
|
|
||||||
|
#include "type_vec2.hpp"
|
||||||
|
#include "type_vec3.hpp"
|
||||||
|
#include "type_vec4.hpp"
|
||||||
|
#include "type_int.hpp"
|
||||||
|
#include "_vectorize.hpp"
|
||||||
|
#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)
|
||||||
|
# include <intrin.h>
|
||||||
|
# pragma intrinsic(_BitScanReverse)
|
||||||
|
#endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
#if !GLM_HAS_EXTENDED_INTEGER_TYPE
|
||||||
|
# if GLM_COMPILER & GLM_COMPILER_GCC
|
||||||
|
# pragma GCC diagnostic ignored "-Wlong-long"
|
||||||
|
# endif
|
||||||
|
# if (GLM_COMPILER & GLM_COMPILER_CLANG)
|
||||||
|
# pragma clang diagnostic ignored "-Wc++11-long-long"
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <typename T>
|
||||||
|
GLM_FUNC_QUALIFIER T mask(T Bits)
|
||||||
|
{
|
||||||
|
return Bits >= sizeof(T) * 8 ? ~static_cast<T>(0) : (static_cast<T>(1) << Bits) - static_cast<T>(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned, bool EXEC>
|
||||||
|
struct compute_bitfieldReverseStep
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T, T)
|
||||||
|
{
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned>
|
||||||
|
struct compute_bitfieldReverseStep<T, P, vecType, Aligned, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Mask, T Shift)
|
||||||
|
{
|
||||||
|
return (v & Mask) << Shift | (v & (~Mask)) >> Shift;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned, bool EXEC>
|
||||||
|
struct compute_bitfieldBitCountStep
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T, T)
|
||||||
|
{
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned>
|
||||||
|
struct compute_bitfieldBitCountStep<T, P, vecType, Aligned, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Mask, T Shift)
|
||||||
|
{
|
||||||
|
return (v & Mask) + ((v >> Shift) & Mask);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename genIUType, size_t Bits>
|
||||||
|
struct compute_findLSB
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static int call(genIUType Value)
|
||||||
|
{
|
||||||
|
if(Value == 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return glm::bitCount(~Value & (Value - static_cast<genIUType>(1)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# if GLM_HAS_BITSCAN_WINDOWS
|
||||||
|
template <typename genIUType>
|
||||||
|
struct compute_findLSB<genIUType, 32>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static int call(genIUType Value)
|
||||||
|
{
|
||||||
|
unsigned long Result(0);
|
||||||
|
unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast<unsigned long*>(&Value));
|
||||||
|
return IsNotNull ? int(Result) : -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32))
|
||||||
|
template <typename genIUType>
|
||||||
|
struct compute_findLSB<genIUType, 64>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static int call(genIUType Value)
|
||||||
|
{
|
||||||
|
unsigned long Result(0);
|
||||||
|
unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast<unsigned __int64*>(&Value));
|
||||||
|
return IsNotNull ? int(Result) : -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
# endif
|
||||||
|
# endif//GLM_HAS_BITSCAN_WINDOWS
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <class, glm::precision> class vecType, bool EXEC = true>
|
||||||
|
struct compute_findMSB_step_vec
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, T Shift)
|
||||||
|
{
|
||||||
|
return x | (x >> Shift);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
|
||||||
|
struct compute_findMSB_step_vec<T, P, vecType, false>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, T)
|
||||||
|
{
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <typename, glm::precision> class vecType, int>
|
||||||
|
struct compute_findMSB_vec
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & vec)
|
||||||
|
{
|
||||||
|
vecType<T, P> x(vec);
|
||||||
|
x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 1));
|
||||||
|
x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 2));
|
||||||
|
x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 4));
|
||||||
|
x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 16>::call(x, static_cast<T>( 8));
|
||||||
|
x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 32>::call(x, static_cast<T>(16));
|
||||||
|
x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 64>::call(x, static_cast<T>(32));
|
||||||
|
return vecType<int, P>(sizeof(T) * 8 - 1) - glm::bitCount(~x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# if GLM_HAS_BITSCAN_WINDOWS
|
||||||
|
template <typename genIUType>
|
||||||
|
GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value)
|
||||||
|
{
|
||||||
|
unsigned long Result(0);
|
||||||
|
unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast<unsigned long*>(&Value));
|
||||||
|
return IsNotNull ? int(Result) : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template<typename, glm::precision> class vecType>
|
||||||
|
struct compute_findMSB_vec<T, P, vecType, 32>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<int, T, P, vecType>::call(compute_findMSB_32, x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32))
|
||||||
|
template <typename genIUType>
|
||||||
|
GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value)
|
||||||
|
{
|
||||||
|
unsigned long Result(0);
|
||||||
|
unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast<unsigned __int64*>(&Value));
|
||||||
|
return IsNotNull ? int(Result) : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <class, glm::precision> class vecType>
|
||||||
|
struct compute_findMSB_vec<T, P, vecType, 64>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
return detail::functor1<int, T, P, vecType>::call(compute_findMSB_64, x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
# endif
|
||||||
|
# endif//GLM_HAS_BITSCAN_WINDOWS
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
// uaddCarry
|
||||||
|
GLM_FUNC_QUALIFIER uint uaddCarry(uint const & x, uint const & y, uint & Carry)
|
||||||
|
{
|
||||||
|
uint64 const Value64(static_cast<uint64>(x) + static_cast<uint64>(y));
|
||||||
|
uint64 const Max32((static_cast<uint64>(1) << static_cast<uint64>(32)) - static_cast<uint64>(1));
|
||||||
|
Carry = Value64 > Max32 ? 1u : 0u;
|
||||||
|
return static_cast<uint32>(Value64 % (Max32 + static_cast<uint64>(1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<uint, P> uaddCarry(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & Carry)
|
||||||
|
{
|
||||||
|
vecType<uint64, P> Value64(vecType<uint64, P>(x) + vecType<uint64, P>(y));
|
||||||
|
vecType<uint64, P> Max32((static_cast<uint64>(1) << static_cast<uint64>(32)) - static_cast<uint64>(1));
|
||||||
|
Carry = mix(vecType<uint32, P>(0), vecType<uint32, P>(1), greaterThan(Value64, Max32));
|
||||||
|
return vecType<uint32,P>(Value64 % (Max32 + static_cast<uint64>(1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// usubBorrow
|
||||||
|
GLM_FUNC_QUALIFIER uint usubBorrow(uint const & x, uint const & y, uint & Borrow)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch");
|
||||||
|
|
||||||
|
Borrow = x >= y ? static_cast<uint32>(0) : static_cast<uint32>(1);
|
||||||
|
if(y >= x)
|
||||||
|
return y - x;
|
||||||
|
else
|
||||||
|
return static_cast<uint32>((static_cast<int64>(1) << static_cast<int64>(32)) + (static_cast<int64>(y) - static_cast<int64>(x)));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<uint, P> usubBorrow(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & Borrow)
|
||||||
|
{
|
||||||
|
Borrow = mix(vecType<uint, P>(1), vecType<uint, P>(0), greaterThanEqual(x, y));
|
||||||
|
vecType<uint, P> const YgeX(y - x);
|
||||||
|
vecType<uint, P> const XgeY(vecType<uint32, P>((static_cast<int64>(1) << static_cast<int64>(32)) + (vecType<int64, P>(y) - vecType<int64, P>(x))));
|
||||||
|
return mix(XgeY, YgeX, greaterThanEqual(y, x));
|
||||||
|
}
|
||||||
|
|
||||||
|
// umulExtended
|
||||||
|
GLM_FUNC_QUALIFIER void umulExtended(uint const & x, uint const & y, uint & msb, uint & lsb)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch");
|
||||||
|
|
||||||
|
uint64 Value64 = static_cast<uint64>(x) * static_cast<uint64>(y);
|
||||||
|
msb = static_cast<uint>(Value64 >> static_cast<uint64>(32));
|
||||||
|
lsb = static_cast<uint>(Value64);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER void umulExtended(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & msb, vecType<uint, P> & lsb)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch");
|
||||||
|
|
||||||
|
vecType<uint64, P> Value64(vecType<uint64, P>(x) * vecType<uint64, P>(y));
|
||||||
|
msb = vecType<uint32, P>(Value64 >> static_cast<uint64>(32));
|
||||||
|
lsb = vecType<uint32, P>(Value64);
|
||||||
|
}
|
||||||
|
|
||||||
|
// imulExtended
|
||||||
|
GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int & msb, int & lsb)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(sizeof(int) == sizeof(int32), "int and int32 size mismatch");
|
||||||
|
|
||||||
|
int64 Value64 = static_cast<int64>(x) * static_cast<int64>(y);
|
||||||
|
msb = static_cast<int>(Value64 >> static_cast<int64>(32));
|
||||||
|
lsb = static_cast<int>(Value64);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER void imulExtended(vecType<int, P> const & x, vecType<int, P> const & y, vecType<int, P> & msb, vecType<int, P> & lsb)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(sizeof(int) == sizeof(int32), "int and int32 size mismatch");
|
||||||
|
|
||||||
|
vecType<int64, P> Value64(vecType<int64, P>(x) * vecType<int64, P>(y));
|
||||||
|
lsb = vecType<int32, P>(Value64 & static_cast<int64>(0xFFFFFFFF));
|
||||||
|
msb = vecType<int32, P>((Value64 >> static_cast<int64>(32)) & static_cast<int64>(0xFFFFFFFF));
|
||||||
|
}
|
||||||
|
|
||||||
|
// bitfieldExtract
|
||||||
|
template <typename genIUType>
|
||||||
|
GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits)
|
||||||
|
{
|
||||||
|
return bitfieldExtract(tvec1<genIUType>(Value), Offset, Bits).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> bitfieldExtract(vecType<T, P> const & Value, int Offset, int Bits)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldExtract' only accept integer inputs");
|
||||||
|
|
||||||
|
return (Value >> static_cast<T>(Offset)) & static_cast<T>(detail::mask(Bits));
|
||||||
|
}
|
||||||
|
|
||||||
|
// bitfieldInsert
|
||||||
|
template <typename genIUType>
|
||||||
|
GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const & Base, genIUType const & Insert, int Offset, int Bits)
|
||||||
|
{
|
||||||
|
return bitfieldInsert(tvec1<genIUType>(Base), tvec1<genIUType>(Insert), Offset, Bits).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> bitfieldInsert(vecType<T, P> const & Base, vecType<T, P> const & Insert, int Offset, int Bits)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldInsert' only accept integer values");
|
||||||
|
|
||||||
|
T const Mask = static_cast<T>(detail::mask(Bits) << Offset);
|
||||||
|
return (Base & ~Mask) | (Insert & Mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
// bitfieldReverse
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType bitfieldReverse(genType x)
|
||||||
|
{
|
||||||
|
return bitfieldReverse(glm::tvec1<genType, glm::defaultp>(x)).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> bitfieldReverse(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
vecType<T, P> x(v);
|
||||||
|
x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 2>::call(x, T(0x5555555555555555ull), static_cast<T>( 1));
|
||||||
|
x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 4>::call(x, T(0x3333333333333333ull), static_cast<T>( 2));
|
||||||
|
x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 8>::call(x, T(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4));
|
||||||
|
x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 16>::call(x, T(0x00FF00FF00FF00FFull), static_cast<T>( 8));
|
||||||
|
x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 32>::call(x, T(0x0000FFFF0000FFFFull), static_cast<T>(16));
|
||||||
|
x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 64>::call(x, T(0x00000000FFFFFFFFull), static_cast<T>(32));
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
// bitCount
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER int bitCount(genType x)
|
||||||
|
{
|
||||||
|
return bitCount(glm::tvec1<genType, glm::defaultp>(x)).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<int, P> bitCount(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
vecType<typename detail::make_unsigned<T>::type, P> x(*reinterpret_cast<vecType<typename detail::make_unsigned<T>::type, P> const *>(&v));
|
||||||
|
x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned<T>::type(0x5555555555555555ull), typename detail::make_unsigned<T>::type( 1));
|
||||||
|
x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned<T>::type(0x3333333333333333ull), typename detail::make_unsigned<T>::type( 2));
|
||||||
|
x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned<T>::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned<T>::type( 4));
|
||||||
|
x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned<T>::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned<T>::type( 8));
|
||||||
|
x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned<T>::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned<T>::type(16));
|
||||||
|
x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned<T>::type(0x00000000FFFFFFFFull), typename detail::make_unsigned<T>::type(32));
|
||||||
|
return vecType<int, P>(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// findLSB
|
||||||
|
template <typename genIUType>
|
||||||
|
GLM_FUNC_QUALIFIER int findLSB(genIUType Value)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findLSB' only accept integer values");
|
||||||
|
|
||||||
|
return detail::compute_findLSB<genIUType, sizeof(genIUType) * 8>::call(Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<int, P> findLSB(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'findLSB' only accept integer values");
|
||||||
|
|
||||||
|
return detail::functor1<int, T, P, vecType>::call(findLSB, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// findMSB
|
||||||
|
template <typename genIUType>
|
||||||
|
GLM_FUNC_QUALIFIER int findMSB(genIUType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
|
||||||
|
|
||||||
|
return findMSB(tvec1<genIUType>(x)).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<int, P> findMSB(vecType<T, P> const & x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'findMSB' only accept integer values");
|
||||||
|
|
||||||
|
return detail::compute_findMSB_vec<T, P, vecType, sizeof(T) * 8>::call(x);
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
# include "func_integer_simd.inl"
|
||||||
|
#endif
|
||||||
|
|
68
dependencies/glm/detail/func_integer_simd.inl
vendored
Normal file
68
dependencies/glm/detail/func_integer_simd.inl
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_integer_simd.inl
|
||||||
|
|
||||||
|
#include "../simd/integer.h"
|
||||||
|
|
||||||
|
#if GLM_ARCH & GLM_ARCH_SSE2_BIT
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <glm::precision P>
|
||||||
|
struct compute_bitfieldReverseStep<uint32, P, tvec4, true, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v, uint32 Mask, uint32 Shift)
|
||||||
|
{
|
||||||
|
__m128i const set0 = v.data;
|
||||||
|
|
||||||
|
__m128i const set1 = _mm_set1_epi32(Mask);
|
||||||
|
__m128i const and1 = _mm_and_si128(set0, set1);
|
||||||
|
__m128i const sft1 = _mm_slli_epi32(and1, Shift);
|
||||||
|
|
||||||
|
__m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1));
|
||||||
|
__m128i const and2 = _mm_and_si128(set0, set2);
|
||||||
|
__m128i const sft2 = _mm_srai_epi32(and2, Shift);
|
||||||
|
|
||||||
|
__m128i const or0 = _mm_or_si128(sft1, sft2);
|
||||||
|
|
||||||
|
return or0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <glm::precision P>
|
||||||
|
struct compute_bitfieldBitCountStep<uint32, P, tvec4, true, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v, uint32 Mask, uint32 Shift)
|
||||||
|
{
|
||||||
|
__m128i const set0 = v.data;
|
||||||
|
|
||||||
|
__m128i const set1 = _mm_set1_epi32(Mask);
|
||||||
|
__m128i const and0 = _mm_and_si128(set0, set1);
|
||||||
|
__m128i const sft0 = _mm_slli_epi32(set0, Shift);
|
||||||
|
__m128i const and1 = _mm_and_si128(sft0, set1);
|
||||||
|
__m128i const add0 = _mm_add_epi32(and0, and1);
|
||||||
|
|
||||||
|
return add0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
# if GLM_ARCH & GLM_ARCH_AVX_BIT
|
||||||
|
template <>
|
||||||
|
GLM_FUNC_QUALIFIER int bitCount(uint32 x)
|
||||||
|
{
|
||||||
|
return _mm_popcnt_u32(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
# if(GLM_MODEL == GLM_MODEL_64)
|
||||||
|
template <>
|
||||||
|
GLM_FUNC_QUALIFIER int bitCount(uint64 x)
|
||||||
|
{
|
||||||
|
return static_cast<int>(_mm_popcnt_u64(x));
|
||||||
|
}
|
||||||
|
# endif//GLM_MODEL
|
||||||
|
# endif//GLM_ARCH
|
||||||
|
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
|
149
dependencies/glm/detail/func_matrix.hpp
vendored
Normal file
149
dependencies/glm/detail/func_matrix.hpp
vendored
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_matrix.hpp
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||||
|
///
|
||||||
|
/// @defgroup core_func_matrix Matrix functions
|
||||||
|
/// @ingroup core
|
||||||
|
///
|
||||||
|
/// For each of the following built-in matrix functions, there is both a
|
||||||
|
/// single-precision floating point version, where all arguments and return values
|
||||||
|
/// are single precision, and a double-precision floating version, where all
|
||||||
|
/// arguments and return values are double precision. Only the single-precision
|
||||||
|
/// floating point version is shown.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Dependencies
|
||||||
|
#include "../detail/precision.hpp"
|
||||||
|
#include "../detail/setup.hpp"
|
||||||
|
#include "../detail/type_mat.hpp"
|
||||||
|
#include "../vec2.hpp"
|
||||||
|
#include "../vec3.hpp"
|
||||||
|
#include "../vec4.hpp"
|
||||||
|
#include "../mat2x2.hpp"
|
||||||
|
#include "../mat2x3.hpp"
|
||||||
|
#include "../mat2x4.hpp"
|
||||||
|
#include "../mat3x2.hpp"
|
||||||
|
#include "../mat3x3.hpp"
|
||||||
|
#include "../mat3x4.hpp"
|
||||||
|
#include "../mat4x2.hpp"
|
||||||
|
#include "../mat4x3.hpp"
|
||||||
|
#include "../mat4x4.hpp"
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec2, tvec2>
|
||||||
|
{
|
||||||
|
typedef tmat2x2<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec2, tvec3>
|
||||||
|
{
|
||||||
|
typedef tmat3x2<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec2, tvec4>
|
||||||
|
{
|
||||||
|
typedef tmat4x2<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec3, tvec2>
|
||||||
|
{
|
||||||
|
typedef tmat2x3<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec3, tvec3>
|
||||||
|
{
|
||||||
|
typedef tmat3x3<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec3, tvec4>
|
||||||
|
{
|
||||||
|
typedef tmat4x3<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec4, tvec2>
|
||||||
|
{
|
||||||
|
typedef tmat2x4<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec4, tvec3>
|
||||||
|
{
|
||||||
|
typedef tmat3x4<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
struct outerProduct_trait<T, P, tvec4, tvec4>
|
||||||
|
{
|
||||||
|
typedef tmat4x4<T, P> type;
|
||||||
|
};
|
||||||
|
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
/// @addtogroup core_func_matrix
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Multiply matrix x by matrix y component-wise, i.e.,
|
||||||
|
/// result[i][j] is the scalar product of x[i][j] and y[i][j].
|
||||||
|
///
|
||||||
|
/// @tparam matType Floating-point matrix types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml">GLSL matrixCompMult man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_DECL matType<T, P> matrixCompMult(matType<T, P> const & x, matType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Treats the first parameter c as a column vector
|
||||||
|
/// and the second parameter r as a row vector
|
||||||
|
/// and does a linear algebraic matrix multiply c * r.
|
||||||
|
///
|
||||||
|
/// @tparam matType Floating-point matrix types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml">GLSL outerProduct man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecTypeA, template <typename, precision> class vecTypeB>
|
||||||
|
GLM_FUNC_DECL typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type outerProduct(vecTypeA<T, P> const & c, vecTypeB<T, P> const & r);
|
||||||
|
|
||||||
|
/// Returns the transposed matrix of x
|
||||||
|
///
|
||||||
|
/// @tparam matType Floating-point matrix types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml">GLSL transpose man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||||
|
# if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11))
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_DECL typename matType<T, P>::transpose_type transpose(matType<T, P> const & x);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/// Return the determinant of a squared matrix.
|
||||||
|
///
|
||||||
|
/// @tparam valType Floating-point scalar types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_DECL T determinant(matType<T, P> const & m);
|
||||||
|
|
||||||
|
/// Return the inverse of a squared matrix.
|
||||||
|
///
|
||||||
|
/// @tparam valType Floating-point scalar types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_DECL matType<T, P> inverse(matType<T, P> const & m);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "func_matrix.inl"
|
401
dependencies/glm/detail/func_matrix.inl
vendored
Normal file
401
dependencies/glm/detail/func_matrix.inl
vendored
Normal file
@ -0,0 +1,401 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_matrix.inl
|
||||||
|
|
||||||
|
#include "../geometric.hpp"
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <template <typename, precision> class matType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_matrixCompMult
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static matType<T, P> call(matType<T, P> const& x, matType<T, P> const& y)
|
||||||
|
{
|
||||||
|
matType<T, P> result(uninitialize);
|
||||||
|
for(length_t i = 0; i < result.length(); ++i)
|
||||||
|
result[i] = x[i] * y[i];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <class, precision> class matType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose{};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat2x2, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat2x2<T, P> call(tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat2x2<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat2x3, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat3x2<T, P> call(tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat3x2<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
result[2][0] = m[0][2];
|
||||||
|
result[2][1] = m[1][2];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat2x4, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat4x2<T, P> call(tmat2x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat4x2<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
result[2][0] = m[0][2];
|
||||||
|
result[2][1] = m[1][2];
|
||||||
|
result[3][0] = m[0][3];
|
||||||
|
result[3][1] = m[1][3];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat3x2, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat2x3<T, P> call(tmat3x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat2x3<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[0][2] = m[2][0];
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
result[1][2] = m[2][1];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat3x3, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat3x3<T, P> call(tmat3x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat3x3<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[0][2] = m[2][0];
|
||||||
|
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
result[1][2] = m[2][1];
|
||||||
|
|
||||||
|
result[2][0] = m[0][2];
|
||||||
|
result[2][1] = m[1][2];
|
||||||
|
result[2][2] = m[2][2];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat3x4, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat4x3<T, P> call(tmat3x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat4x3<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[0][2] = m[2][0];
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
result[1][2] = m[2][1];
|
||||||
|
result[2][0] = m[0][2];
|
||||||
|
result[2][1] = m[1][2];
|
||||||
|
result[2][2] = m[2][2];
|
||||||
|
result[3][0] = m[0][3];
|
||||||
|
result[3][1] = m[1][3];
|
||||||
|
result[3][2] = m[2][3];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat4x2, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat2x4<T, P> call(tmat4x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat2x4<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[0][2] = m[2][0];
|
||||||
|
result[0][3] = m[3][0];
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
result[1][2] = m[2][1];
|
||||||
|
result[1][3] = m[3][1];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat4x3, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat3x4<T, P> call(tmat4x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat3x4<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[0][2] = m[2][0];
|
||||||
|
result[0][3] = m[3][0];
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
result[1][2] = m[2][1];
|
||||||
|
result[1][3] = m[3][1];
|
||||||
|
result[2][0] = m[0][2];
|
||||||
|
result[2][1] = m[1][2];
|
||||||
|
result[2][2] = m[2][2];
|
||||||
|
result[2][3] = m[3][2];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_transpose<tmat4x4, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat4x4<T, P> call(tmat4x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
tmat4x4<T, P> result(uninitialize);
|
||||||
|
result[0][0] = m[0][0];
|
||||||
|
result[0][1] = m[1][0];
|
||||||
|
result[0][2] = m[2][0];
|
||||||
|
result[0][3] = m[3][0];
|
||||||
|
|
||||||
|
result[1][0] = m[0][1];
|
||||||
|
result[1][1] = m[1][1];
|
||||||
|
result[1][2] = m[2][1];
|
||||||
|
result[1][3] = m[3][1];
|
||||||
|
|
||||||
|
result[2][0] = m[0][2];
|
||||||
|
result[2][1] = m[1][2];
|
||||||
|
result[2][2] = m[2][2];
|
||||||
|
result[2][3] = m[3][2];
|
||||||
|
|
||||||
|
result[3][0] = m[0][3];
|
||||||
|
result[3][1] = m[1][3];
|
||||||
|
result[3][2] = m[2][3];
|
||||||
|
result[3][3] = m[3][3];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <typename, precision> class matType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_determinant{};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_determinant<tmat2x2, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
return m[0][0] * m[1][1] - m[1][0] * m[0][1];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_determinant<tmat3x3, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(tmat3x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
|
||||||
|
- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
|
||||||
|
+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_determinant<tmat4x4, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static T call(tmat4x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
|
||||||
|
T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
|
||||||
|
T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
|
||||||
|
T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
|
||||||
|
T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
|
||||||
|
T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
|
||||||
|
|
||||||
|
tvec4<T, P> DetCof(
|
||||||
|
+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
|
||||||
|
- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
|
||||||
|
+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
|
||||||
|
- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
|
||||||
|
|
||||||
|
return
|
||||||
|
m[0][0] * DetCof[0] + m[0][1] * DetCof[1] +
|
||||||
|
m[0][2] * DetCof[2] + m[0][3] * DetCof[3];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <template <typename, precision> class matType, typename T, precision P, bool Aligned>
|
||||||
|
struct compute_inverse{};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_inverse<tmat2x2, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat2x2<T, P> call(tmat2x2<T, P> const& m)
|
||||||
|
{
|
||||||
|
T OneOverDeterminant = static_cast<T>(1) / (
|
||||||
|
+ m[0][0] * m[1][1]
|
||||||
|
- m[1][0] * m[0][1]);
|
||||||
|
|
||||||
|
tmat2x2<T, P> Inverse(
|
||||||
|
+ m[1][1] * OneOverDeterminant,
|
||||||
|
- m[0][1] * OneOverDeterminant,
|
||||||
|
- m[1][0] * OneOverDeterminant,
|
||||||
|
+ m[0][0] * OneOverDeterminant);
|
||||||
|
|
||||||
|
return Inverse;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_inverse<tmat3x3, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat3x3<T, P> call(tmat3x3<T, P> const& m)
|
||||||
|
{
|
||||||
|
T OneOverDeterminant = static_cast<T>(1) / (
|
||||||
|
+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
|
||||||
|
- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
|
||||||
|
+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]));
|
||||||
|
|
||||||
|
tmat3x3<T, P> Inverse(uninitialize);
|
||||||
|
Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant;
|
||||||
|
Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant;
|
||||||
|
Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant;
|
||||||
|
Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant;
|
||||||
|
Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant;
|
||||||
|
Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant;
|
||||||
|
Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant;
|
||||||
|
Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant;
|
||||||
|
Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant;
|
||||||
|
|
||||||
|
return Inverse;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, precision P, bool Aligned>
|
||||||
|
struct compute_inverse<tmat4x4, T, P, Aligned>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat4x4<T, P> call(tmat4x4<T, P> const& m)
|
||||||
|
{
|
||||||
|
T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
|
||||||
|
T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
|
||||||
|
T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
|
||||||
|
|
||||||
|
T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
|
||||||
|
T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
|
||||||
|
T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
|
||||||
|
|
||||||
|
T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
|
||||||
|
T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
|
||||||
|
T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
|
||||||
|
|
||||||
|
T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
|
||||||
|
T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
|
||||||
|
T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
|
||||||
|
|
||||||
|
T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
|
||||||
|
T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
|
||||||
|
T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
|
||||||
|
|
||||||
|
T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
|
||||||
|
T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
|
||||||
|
T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
|
||||||
|
|
||||||
|
tvec4<T, P> Fac0(Coef00, Coef00, Coef02, Coef03);
|
||||||
|
tvec4<T, P> Fac1(Coef04, Coef04, Coef06, Coef07);
|
||||||
|
tvec4<T, P> Fac2(Coef08, Coef08, Coef10, Coef11);
|
||||||
|
tvec4<T, P> Fac3(Coef12, Coef12, Coef14, Coef15);
|
||||||
|
tvec4<T, P> Fac4(Coef16, Coef16, Coef18, Coef19);
|
||||||
|
tvec4<T, P> Fac5(Coef20, Coef20, Coef22, Coef23);
|
||||||
|
|
||||||
|
tvec4<T, P> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]);
|
||||||
|
tvec4<T, P> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]);
|
||||||
|
tvec4<T, P> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]);
|
||||||
|
tvec4<T, P> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]);
|
||||||
|
|
||||||
|
tvec4<T, P> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);
|
||||||
|
tvec4<T, P> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);
|
||||||
|
tvec4<T, P> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);
|
||||||
|
tvec4<T, P> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);
|
||||||
|
|
||||||
|
tvec4<T, P> SignA(+1, -1, +1, -1);
|
||||||
|
tvec4<T, P> SignB(-1, +1, -1, +1);
|
||||||
|
tmat4x4<T, P> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB);
|
||||||
|
|
||||||
|
tvec4<T, P> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);
|
||||||
|
|
||||||
|
tvec4<T, P> Dot0(m[0] * Row0);
|
||||||
|
T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w);
|
||||||
|
|
||||||
|
T OneOverDeterminant = static_cast<T>(1) / Dot1;
|
||||||
|
|
||||||
|
return Inverse * OneOverDeterminant;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_QUALIFIER matType<T, P> matrixCompMult(matType<T, P> const & x, matType<T, P> const & y)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'matrixCompMult' only accept floating-point inputs");
|
||||||
|
return detail::compute_matrixCompMult<matType, T, P, detail::is_aligned<P>::value>::call(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T, precision P, template <typename, precision> class vecTypeA, template <typename, precision> class vecTypeB>
|
||||||
|
GLM_FUNC_QUALIFIER typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type outerProduct(vecTypeA<T, P> const & c, vecTypeB<T, P> const & r)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'outerProduct' only accept floating-point inputs");
|
||||||
|
|
||||||
|
typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type m(uninitialize);
|
||||||
|
for(length_t i = 0; i < m.length(); ++i)
|
||||||
|
m[i] = c * r[i];
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_QUALIFIER typename matType<T, P>::transpose_type transpose(matType<T, P> const & m)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'transpose' only accept floating-point inputs");
|
||||||
|
return detail::compute_transpose<matType, T, P, detail::is_aligned<P>::value>::call(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_QUALIFIER T determinant(matType<T, P> const & m)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'determinant' only accept floating-point inputs");
|
||||||
|
return detail::compute_determinant<matType, T, P, detail::is_aligned<P>::value>::call(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_QUALIFIER matType<T, P> inverse(matType<T, P> const & m)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_UNRESTRICTED_GENTYPE, "'inverse' only accept floating-point inputs");
|
||||||
|
return detail::compute_inverse<matType, T, P, detail::is_aligned<P>::value>::call(m);
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
# include "func_matrix_simd.inl"
|
||||||
|
#endif
|
||||||
|
|
88
dependencies/glm/detail/func_matrix_simd.inl
vendored
Normal file
88
dependencies/glm/detail/func_matrix_simd.inl
vendored
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_matrix_simd.inl
|
||||||
|
|
||||||
|
#if GLM_ARCH & GLM_ARCH_SSE2_BIT
|
||||||
|
|
||||||
|
#include "type_mat4x4.hpp"
|
||||||
|
#include "func_geometric.hpp"
|
||||||
|
#include "../simd/matrix.h"
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <precision P>
|
||||||
|
struct compute_matrixCompMult<tmat4x4, float, P, true>
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(detail::is_aligned<P>::value, "Specialization requires aligned");
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const & x, tmat4x4<float, P> const & y)
|
||||||
|
{
|
||||||
|
tmat4x4<float, P> result(uninitialize);
|
||||||
|
glm_mat4_matrixCompMult(
|
||||||
|
*(glm_vec4 const (*)[4])&x[0].data,
|
||||||
|
*(glm_vec4 const (*)[4])&y[0].data,
|
||||||
|
*(glm_vec4(*)[4])&result[0].data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_transpose<tmat4x4, float, P, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const & m)
|
||||||
|
{
|
||||||
|
tmat4x4<float, P> result(uninitialize);
|
||||||
|
glm_mat4_transpose(
|
||||||
|
*(glm_vec4 const (*)[4])&m[0].data,
|
||||||
|
*(glm_vec4(*)[4])&result[0].data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_determinant<tmat4x4, float, P, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static float call(tmat4x4<float, P> const& m)
|
||||||
|
{
|
||||||
|
return _mm_cvtss_f32(glm_mat4_determinant(*reinterpret_cast<__m128 const(*)[4]>(&m[0].data)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <precision P>
|
||||||
|
struct compute_inverse<tmat4x4, float, P, true>
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const& m)
|
||||||
|
{
|
||||||
|
tmat4x4<float, P> Result(uninitialize);
|
||||||
|
glm_mat4_inverse(*reinterpret_cast<__m128 const(*)[4]>(&m[0].data), *reinterpret_cast<__m128(*)[4]>(&Result[0].data));
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
template<>
|
||||||
|
GLM_FUNC_QUALIFIER tmat4x4<float, aligned_lowp> outerProduct<float, aligned_lowp, tvec4, tvec4>(tvec4<float, aligned_lowp> const & c, tvec4<float, aligned_lowp> const & r)
|
||||||
|
{
|
||||||
|
tmat4x4<float, aligned_lowp> m(uninitialize);
|
||||||
|
glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data));
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
GLM_FUNC_QUALIFIER tmat4x4<float, aligned_mediump> outerProduct<float, aligned_mediump, tvec4, tvec4>(tvec4<float, aligned_mediump> const & c, tvec4<float, aligned_mediump> const & r)
|
||||||
|
{
|
||||||
|
tmat4x4<float, aligned_mediump> m(uninitialize);
|
||||||
|
glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data));
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
GLM_FUNC_QUALIFIER tmat4x4<float, aligned_highp> outerProduct<float, aligned_highp, tvec4, tvec4>(tvec4<float, aligned_highp> const & c, tvec4<float, aligned_highp> const & r)
|
||||||
|
{
|
||||||
|
tmat4x4<float, aligned_highp> m(uninitialize);
|
||||||
|
glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data));
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#endif
|
168
dependencies/glm/detail/func_packing.hpp
vendored
Normal file
168
dependencies/glm/detail/func_packing.hpp
vendored
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_packing.hpp
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
/// @see gtc_packing
|
||||||
|
///
|
||||||
|
/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions
|
||||||
|
/// @ingroup core
|
||||||
|
///
|
||||||
|
/// These functions do not operate component-wise, rather as described in each case.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "type_vec2.hpp"
|
||||||
|
#include "type_vec4.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
/// @addtogroup core_func_packing
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
|
||||||
|
/// Then, the results are packed into the returned 32-bit unsigned integer.
|
||||||
|
///
|
||||||
|
/// The conversion for component c of v to fixed point is done as follows:
|
||||||
|
/// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)
|
||||||
|
///
|
||||||
|
/// The first component of the vector will be written to the least significant bits of the output;
|
||||||
|
/// the last component will be written to the most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml">GLSL packUnorm2x16 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL uint packUnorm2x16(vec2 const & v);
|
||||||
|
|
||||||
|
/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
|
||||||
|
/// Then, the results are packed into the returned 32-bit unsigned integer.
|
||||||
|
///
|
||||||
|
/// The conversion for component c of v to fixed point is done as follows:
|
||||||
|
/// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)
|
||||||
|
///
|
||||||
|
/// The first component of the vector will be written to the least significant bits of the output;
|
||||||
|
/// the last component will be written to the most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml">GLSL packSnorm2x16 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL uint packSnorm2x16(vec2 const & v);
|
||||||
|
|
||||||
|
/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
|
||||||
|
/// Then, the results are packed into the returned 32-bit unsigned integer.
|
||||||
|
///
|
||||||
|
/// The conversion for component c of v to fixed point is done as follows:
|
||||||
|
/// packUnorm4x8: round(clamp(c, 0, +1) * 255.0)
|
||||||
|
///
|
||||||
|
/// The first component of the vector will be written to the least significant bits of the output;
|
||||||
|
/// the last component will be written to the most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL uint packUnorm4x8(vec4 const & v);
|
||||||
|
|
||||||
|
/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
|
||||||
|
/// Then, the results are packed into the returned 32-bit unsigned integer.
|
||||||
|
///
|
||||||
|
/// The conversion for component c of v to fixed point is done as follows:
|
||||||
|
/// packSnorm4x8: round(clamp(c, -1, +1) * 127.0)
|
||||||
|
///
|
||||||
|
/// The first component of the vector will be written to the least significant bits of the output;
|
||||||
|
/// the last component will be written to the most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL uint packSnorm4x8(vec4 const & v);
|
||||||
|
|
||||||
|
/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
|
||||||
|
/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
|
||||||
|
///
|
||||||
|
/// The conversion for unpacked fixed-point value f to floating point is done as follows:
|
||||||
|
/// unpackUnorm2x16: f / 65535.0
|
||||||
|
///
|
||||||
|
/// The first component of the returned vector will be extracted from the least significant bits of the input;
|
||||||
|
/// the last component will be extracted from the most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p);
|
||||||
|
|
||||||
|
/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
|
||||||
|
/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
|
||||||
|
///
|
||||||
|
/// The conversion for unpacked fixed-point value f to floating point is done as follows:
|
||||||
|
/// unpackSnorm2x16: clamp(f / 32767.0, -1, +1)
|
||||||
|
///
|
||||||
|
/// The first component of the returned vector will be extracted from the least significant bits of the input;
|
||||||
|
/// the last component will be extracted from the most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml">GLSL unpackSnorm2x16 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p);
|
||||||
|
|
||||||
|
/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
|
||||||
|
/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
|
||||||
|
///
|
||||||
|
/// The conversion for unpacked fixed-point value f to floating point is done as follows:
|
||||||
|
/// unpackUnorm4x8: f / 255.0
|
||||||
|
///
|
||||||
|
/// The first component of the returned vector will be extracted from the least significant bits of the input;
|
||||||
|
/// the last component will be extracted from the most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p);
|
||||||
|
|
||||||
|
/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
|
||||||
|
/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
|
||||||
|
///
|
||||||
|
/// The conversion for unpacked fixed-point value f to floating point is done as follows:
|
||||||
|
/// unpackSnorm4x8: clamp(f / 127.0, -1, +1)
|
||||||
|
///
|
||||||
|
/// The first component of the returned vector will be extracted from the least significant bits of the input;
|
||||||
|
/// the last component will be extracted from the most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p);
|
||||||
|
|
||||||
|
/// Returns a double-precision value obtained by packing the components of v into a 64-bit value.
|
||||||
|
/// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified.
|
||||||
|
/// Otherwise, the bit- level representation of v is preserved.
|
||||||
|
/// The first vector component specifies the 32 least significant bits;
|
||||||
|
/// the second component specifies the 32 most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml">GLSL packDouble2x32 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL double packDouble2x32(uvec2 const & v);
|
||||||
|
|
||||||
|
/// Returns a two-component unsigned integer vector representation of v.
|
||||||
|
/// The bit-level representation of v is preserved.
|
||||||
|
/// The first component of the vector contains the 32 least significant bits of the double;
|
||||||
|
/// the second component consists the 32 most significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml">GLSL unpackDouble2x32 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL uvec2 unpackDouble2x32(double v);
|
||||||
|
|
||||||
|
/// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector
|
||||||
|
/// to the 16-bit floating-point representation found in the OpenGL Specification,
|
||||||
|
/// and then packing these two 16- bit integers into a 32-bit unsigned integer.
|
||||||
|
/// The first vector component specifies the 16 least-significant bits of the result;
|
||||||
|
/// the second component specifies the 16 most-significant bits.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL uint packHalf2x16(vec2 const & v);
|
||||||
|
|
||||||
|
/// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values,
|
||||||
|
/// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,
|
||||||
|
/// and converting them to 32-bit floating-point values.
|
||||||
|
/// The first component of the vector is obtained from the 16 least-significant bits of v;
|
||||||
|
/// the second component is obtained from the 16 most-significant bits of v.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
|
||||||
|
GLM_FUNC_DECL vec2 unpackHalf2x16(uint v);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "func_packing.inl"
|
190
dependencies/glm/detail/func_packing.inl
vendored
Normal file
190
dependencies/glm/detail/func_packing.inl
vendored
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_packing.inl
|
||||||
|
|
||||||
|
#include "func_common.hpp"
|
||||||
|
#include "type_half.hpp"
|
||||||
|
#include "../fwd.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const & v)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
u16 in[2];
|
||||||
|
uint out;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u16vec2 result(round(clamp(v, 0.0f, 1.0f) * 65535.0f));
|
||||||
|
|
||||||
|
u.in[0] = result[0];
|
||||||
|
u.in[1] = result[1];
|
||||||
|
|
||||||
|
return u.out;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint in;
|
||||||
|
u16 out[2];
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.in = p;
|
||||||
|
|
||||||
|
return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const & v)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
i16 in[2];
|
||||||
|
uint out;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
i16vec2 result(round(clamp(v, -1.0f, 1.0f) * 32767.0f));
|
||||||
|
|
||||||
|
u.in[0] = result[0];
|
||||||
|
u.in[1] = result[1];
|
||||||
|
|
||||||
|
return u.out;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint in;
|
||||||
|
i16 out[2];
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.in = p;
|
||||||
|
|
||||||
|
return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const & v)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
u8 in[4];
|
||||||
|
uint out;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u8vec4 result(round(clamp(v, 0.0f, 1.0f) * 255.0f));
|
||||||
|
|
||||||
|
u.in[0] = result[0];
|
||||||
|
u.in[1] = result[1];
|
||||||
|
u.in[2] = result[2];
|
||||||
|
u.in[3] = result[3];
|
||||||
|
|
||||||
|
return u.out;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint in;
|
||||||
|
u8 out[4];
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.in = p;
|
||||||
|
|
||||||
|
return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const & v)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
i8 in[4];
|
||||||
|
uint out;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
i8vec4 result(round(clamp(v, -1.0f, 1.0f) * 127.0f));
|
||||||
|
|
||||||
|
u.in[0] = result[0];
|
||||||
|
u.in[1] = result[1];
|
||||||
|
u.in[2] = result[2];
|
||||||
|
u.in[3] = result[3];
|
||||||
|
|
||||||
|
return u.out;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint in;
|
||||||
|
i8 out[4];
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.in = p;
|
||||||
|
|
||||||
|
return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const & v)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint in[2];
|
||||||
|
double out;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.in[0] = v[0];
|
||||||
|
u.in[1] = v[1];
|
||||||
|
|
||||||
|
return u.out;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
double in;
|
||||||
|
uint out[2];
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.in = v;
|
||||||
|
|
||||||
|
return uvec2(u.out[0], u.out[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const & v)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
i16 in[2];
|
||||||
|
uint out;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.in[0] = detail::toFloat16(v.x);
|
||||||
|
u.in[1] = detail::toFloat16(v.y);
|
||||||
|
|
||||||
|
return u.out;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
uint in;
|
||||||
|
i16 out[2];
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.in = v;
|
||||||
|
|
||||||
|
return vec2(
|
||||||
|
detail::toFloat32(u.out[0]),
|
||||||
|
detail::toFloat32(u.out[1]));
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
# include "func_packing_simd.inl"
|
||||||
|
#endif
|
||||||
|
|
9
dependencies/glm/detail/func_packing_simd.inl
vendored
Normal file
9
dependencies/glm/detail/func_packing_simd.inl
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_packing_simd.inl
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
176
dependencies/glm/detail/func_trigonometric.hpp
vendored
Normal file
176
dependencies/glm/detail/func_trigonometric.hpp
vendored
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_trigonometric.hpp
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
///
|
||||||
|
/// @defgroup core_func_trigonometric Angle and Trigonometry Functions
|
||||||
|
/// @ingroup core
|
||||||
|
///
|
||||||
|
/// Function parameters specified as angle are assumed to be in units of radians.
|
||||||
|
/// In no case will any of these functions result in a divide by zero error. If
|
||||||
|
/// the divisor of a ratio is 0, then results will be undefined.
|
||||||
|
///
|
||||||
|
/// These all operate component-wise. The description is per component.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "setup.hpp"
|
||||||
|
#include "precision.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
/// @addtogroup core_func_trigonometric
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Converts degrees to radians and returns the result.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml">GLSL radians man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> radians(vecType<T, P> const & degrees);
|
||||||
|
|
||||||
|
/// Converts radians to degrees and returns the result.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml">GLSL degrees man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> degrees(vecType<T, P> const & radians);
|
||||||
|
|
||||||
|
/// The standard trigonometric sine function.
|
||||||
|
/// The values returned by this function will range from [-1, 1].
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml">GLSL sin man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> sin(vecType<T, P> const & angle);
|
||||||
|
|
||||||
|
/// The standard trigonometric cosine function.
|
||||||
|
/// The values returned by this function will range from [-1, 1].
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml">GLSL cos man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> cos(vecType<T, P> const & angle);
|
||||||
|
|
||||||
|
/// The standard trigonometric tangent function.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml">GLSL tan man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> tan(vecType<T, P> const & angle);
|
||||||
|
|
||||||
|
/// Arc sine. Returns an angle whose sine is x.
|
||||||
|
/// The range of values returned by this function is [-PI/2, PI/2].
|
||||||
|
/// Results are undefined if |x| > 1.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml">GLSL asin man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> asin(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Arc cosine. Returns an angle whose sine is x.
|
||||||
|
/// The range of values returned by this function is [0, PI].
|
||||||
|
/// Results are undefined if |x| > 1.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml">GLSL acos man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> acos(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Arc tangent. Returns an angle whose tangent is y/x.
|
||||||
|
/// The signs of x and y are used to determine what
|
||||||
|
/// quadrant the angle is in. The range of values returned
|
||||||
|
/// by this function is [-PI, PI]. Results are undefined
|
||||||
|
/// if x and y are both 0.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> atan(vecType<T, P> const & y, vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Arc tangent. Returns an angle whose tangent is y_over_x.
|
||||||
|
/// The range of values returned by this function is [-PI/2, PI/2].
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> atan(vecType<T, P> const & y_over_x);
|
||||||
|
|
||||||
|
/// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml">GLSL sinh man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> sinh(vecType<T, P> const & angle);
|
||||||
|
|
||||||
|
/// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml">GLSL cosh man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> cosh(vecType<T, P> const & angle);
|
||||||
|
|
||||||
|
/// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml">GLSL tanh man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> tanh(vecType<T, P> const & angle);
|
||||||
|
|
||||||
|
/// Arc hyperbolic sine; returns the inverse of sinh.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml">GLSL asinh man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> asinh(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Arc hyperbolic cosine; returns the non-negative inverse
|
||||||
|
/// of cosh. Results are undefined if x < 1.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml">GLSL acosh man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> acosh(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// Arc hyperbolic tangent; returns the inverse of tanh.
|
||||||
|
/// Results are undefined if abs(x) >= 1.
|
||||||
|
///
|
||||||
|
/// @tparam genType Floating-point scalar or vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml">GLSL atanh man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<T, P> atanh(vecType<T, P> const & x);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "func_trigonometric.inl"
|
200
dependencies/glm/detail/func_trigonometric.inl
vendored
Normal file
200
dependencies/glm/detail/func_trigonometric.inl
vendored
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_trigonometric.inl
|
||||||
|
|
||||||
|
#include "_vectorize.hpp"
|
||||||
|
#include <cmath>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
// radians
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'radians' only accept floating-point input");
|
||||||
|
|
||||||
|
return degrees * static_cast<genType>(0.01745329251994329576923690768489);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vecType<T, P> radians(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(radians, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// degrees
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'degrees' only accept floating-point input");
|
||||||
|
|
||||||
|
return radians * static_cast<genType>(57.295779513082320876798154814105);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vecType<T, P> degrees(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(degrees, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sin
|
||||||
|
using ::std::sin;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> sin(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(sin, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cos
|
||||||
|
using std::cos;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> cos(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(cos, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// tan
|
||||||
|
using std::tan;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> tan(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(tan, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// asin
|
||||||
|
using std::asin;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> asin(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(asin, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// acos
|
||||||
|
using std::acos;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> acos(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(acos, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// atan
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType atan(genType y, genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'atan' only accept floating-point input");
|
||||||
|
|
||||||
|
return ::std::atan2(y, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> atan(vecType<T, P> const & a, vecType<T, P> const & b)
|
||||||
|
{
|
||||||
|
return detail::functor2<T, P, vecType>::call(::std::atan2, a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
using std::atan;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> atan(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(atan, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sinh
|
||||||
|
using std::sinh;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> sinh(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(sinh, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cosh
|
||||||
|
using std::cosh;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> cosh(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(cosh, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// tanh
|
||||||
|
using std::tanh;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> tanh(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(tanh, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// asinh
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
using std::asinh;
|
||||||
|
# else
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType asinh(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'asinh' only accept floating-point input");
|
||||||
|
|
||||||
|
return (x < static_cast<genType>(0) ? static_cast<genType>(-1) : (x > static_cast<genType>(0) ? static_cast<genType>(1) : static_cast<genType>(0))) * log(std::abs(x) + sqrt(static_cast<genType>(1) + x * x));
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> asinh(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(asinh, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// acosh
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
using std::acosh;
|
||||||
|
# else
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType acosh(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'acosh' only accept floating-point input");
|
||||||
|
|
||||||
|
if(x < static_cast<genType>(1))
|
||||||
|
return static_cast<genType>(0);
|
||||||
|
return log(x + sqrt(x * x - static_cast<genType>(1)));
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> acosh(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(acosh, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
// atanh
|
||||||
|
# if GLM_HAS_CXX11_STL
|
||||||
|
using std::atanh;
|
||||||
|
# else
|
||||||
|
template <typename genType>
|
||||||
|
GLM_FUNC_QUALIFIER genType atanh(genType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'atanh' only accept floating-point input");
|
||||||
|
|
||||||
|
if(std::abs(x) >= static_cast<genType>(1))
|
||||||
|
return 0;
|
||||||
|
return static_cast<genType>(0.5) * log((static_cast<genType>(1) + x) / (static_cast<genType>(1) - x));
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<T, P> atanh(vecType<T, P> const & v)
|
||||||
|
{
|
||||||
|
return detail::functor1<T, T, P, vecType>::call(atanh, v);
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
# include "func_trigonometric_simd.inl"
|
||||||
|
#endif
|
||||||
|
|
0
dependencies/glm/detail/func_trigonometric_simd.inl
vendored
Normal file
0
dependencies/glm/detail/func_trigonometric_simd.inl
vendored
Normal file
111
dependencies/glm/detail/func_vector_relational.hpp
vendored
Normal file
111
dependencies/glm/detail/func_vector_relational.hpp
vendored
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_vector_relational.hpp
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
///
|
||||||
|
/// @defgroup core_func_vector_relational Vector Relational Functions
|
||||||
|
/// @ingroup core
|
||||||
|
///
|
||||||
|
/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to
|
||||||
|
/// operate on scalars and produce scalar Boolean results. For vector results,
|
||||||
|
/// use the following built-in functions.
|
||||||
|
///
|
||||||
|
/// In all cases, the sizes of all the input and return vectors for any particular
|
||||||
|
/// call must match.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "precision.hpp"
|
||||||
|
#include "setup.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
/// @addtogroup core_func_vector_relational
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Returns the component-wise comparison result of x < y.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Floating-point or integer vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml">GLSL lessThan man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> lessThan(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns the component-wise comparison of result x <= y.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Floating-point or integer vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml">GLSL lessThanEqual man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> lessThanEqual(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns the component-wise comparison of result x > y.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Floating-point or integer vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml">GLSL greaterThan man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> greaterThan(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns the component-wise comparison of result x >= y.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Floating-point or integer vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml">GLSL greaterThanEqual man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> greaterThanEqual(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns the component-wise comparison of result x == y.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Floating-point, integer or boolean vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml">GLSL equal man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> equal(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns the component-wise comparison of result x != y.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Floating-point, integer or boolean vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml">GLSL notEqual man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> notEqual(vecType<T, P> const & x, vecType<T, P> const & y);
|
||||||
|
|
||||||
|
/// Returns true if any component of x is true.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Boolean vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml">GLSL any man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL bool any(vecType<bool, P> const & v);
|
||||||
|
|
||||||
|
/// Returns true if all components of x are true.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Boolean vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml">GLSL all man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL bool all(vecType<bool, P> const & v);
|
||||||
|
|
||||||
|
/// Returns the component-wise logical complement of x.
|
||||||
|
/// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.
|
||||||
|
///
|
||||||
|
/// @tparam vecType Boolean vector types.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml">GLSL not man page</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_DECL vecType<bool, P> not_(vecType<bool, P> const & v);
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "func_vector_relational.inl"
|
105
dependencies/glm/detail/func_vector_relational.inl
vendored
Normal file
105
dependencies/glm/detail/func_vector_relational.inl
vendored
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_vector_relational.inl
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> lessThan(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
assert(x.length() == y.length());
|
||||||
|
|
||||||
|
vecType<bool, P> Result(uninitialize);
|
||||||
|
for(length_t i = 0; i < x.length(); ++i)
|
||||||
|
Result[i] = x[i] < y[i];
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> lessThanEqual(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
assert(x.length() == y.length());
|
||||||
|
|
||||||
|
vecType<bool, P> Result(uninitialize);
|
||||||
|
for(length_t i = 0; i < x.length(); ++i)
|
||||||
|
Result[i] = x[i] <= y[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> greaterThan(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
assert(x.length() == y.length());
|
||||||
|
|
||||||
|
vecType<bool, P> Result(uninitialize);
|
||||||
|
for(length_t i = 0; i < x.length(); ++i)
|
||||||
|
Result[i] = x[i] > y[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> greaterThanEqual(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
assert(x.length() == y.length());
|
||||||
|
|
||||||
|
vecType<bool, P> Result(uninitialize);
|
||||||
|
for(length_t i = 0; i < x.length(); ++i)
|
||||||
|
Result[i] = x[i] >= y[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> equal(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
assert(x.length() == y.length());
|
||||||
|
|
||||||
|
vecType<bool, P> Result(uninitialize);
|
||||||
|
for(length_t i = 0; i < x.length(); ++i)
|
||||||
|
Result[i] = x[i] == y[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> notEqual(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||||
|
{
|
||||||
|
assert(x.length() == y.length());
|
||||||
|
|
||||||
|
vecType<bool, P> Result(uninitialize);
|
||||||
|
for(length_t i = 0; i < x.length(); ++i)
|
||||||
|
Result[i] = x[i] != y[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER bool any(vecType<bool, P> const & v)
|
||||||
|
{
|
||||||
|
bool Result = false;
|
||||||
|
for(length_t i = 0; i < v.length(); ++i)
|
||||||
|
Result = Result || v[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER bool all(vecType<bool, P> const & v)
|
||||||
|
{
|
||||||
|
bool Result = true;
|
||||||
|
for(length_t i = 0; i < v.length(); ++i)
|
||||||
|
Result = Result && v[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <precision P, template <typename, precision> class vecType>
|
||||||
|
GLM_FUNC_QUALIFIER vecType<bool, P> not_(vecType<bool, P> const & v)
|
||||||
|
{
|
||||||
|
vecType<bool, P> Result(uninitialize);
|
||||||
|
for(length_t i = 0; i < v.length(); ++i)
|
||||||
|
Result[i] = !v[i];
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
# include "func_vector_relational_simd.inl"
|
||||||
|
#endif
|
9
dependencies/glm/detail/func_vector_relational_simd.inl
vendored
Normal file
9
dependencies/glm/detail/func_vector_relational_simd.inl
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/func_vector_relational_simd.inl
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
257
dependencies/glm/detail/glm.cpp
vendored
Normal file
257
dependencies/glm/detail/glm.cpp
vendored
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/glm.cpp
|
||||||
|
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/gtc/quaternion.hpp>
|
||||||
|
#include <glm/gtx/dual_quaternion.hpp>
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
// tvec1 type explicit instantiation
|
||||||
|
template struct tvec1<uint8, lowp>;
|
||||||
|
template struct tvec1<uint16, lowp>;
|
||||||
|
template struct tvec1<uint32, lowp>;
|
||||||
|
template struct tvec1<uint64, lowp>;
|
||||||
|
template struct tvec1<int8, lowp>;
|
||||||
|
template struct tvec1<int16, lowp>;
|
||||||
|
template struct tvec1<int32, lowp>;
|
||||||
|
template struct tvec1<int64, lowp>;
|
||||||
|
template struct tvec1<float32, lowp>;
|
||||||
|
template struct tvec1<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tvec1<uint8, mediump>;
|
||||||
|
template struct tvec1<uint16, mediump>;
|
||||||
|
template struct tvec1<uint32, mediump>;
|
||||||
|
template struct tvec1<uint64, mediump>;
|
||||||
|
template struct tvec1<int8, mediump>;
|
||||||
|
template struct tvec1<int16, mediump>;
|
||||||
|
template struct tvec1<int32, mediump>;
|
||||||
|
template struct tvec1<int64, mediump>;
|
||||||
|
template struct tvec1<float32, mediump>;
|
||||||
|
template struct tvec1<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tvec1<uint8, highp>;
|
||||||
|
template struct tvec1<uint16, highp>;
|
||||||
|
template struct tvec1<uint32, highp>;
|
||||||
|
template struct tvec1<uint64, highp>;
|
||||||
|
template struct tvec1<int8, highp>;
|
||||||
|
template struct tvec1<int16, highp>;
|
||||||
|
template struct tvec1<int32, highp>;
|
||||||
|
template struct tvec1<int64, highp>;
|
||||||
|
template struct tvec1<float32, highp>;
|
||||||
|
template struct tvec1<float64, highp>;
|
||||||
|
|
||||||
|
// tvec2 type explicit instantiation
|
||||||
|
template struct tvec2<uint8, lowp>;
|
||||||
|
template struct tvec2<uint16, lowp>;
|
||||||
|
template struct tvec2<uint32, lowp>;
|
||||||
|
template struct tvec2<uint64, lowp>;
|
||||||
|
template struct tvec2<int8, lowp>;
|
||||||
|
template struct tvec2<int16, lowp>;
|
||||||
|
template struct tvec2<int32, lowp>;
|
||||||
|
template struct tvec2<int64, lowp>;
|
||||||
|
template struct tvec2<float32, lowp>;
|
||||||
|
template struct tvec2<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tvec2<uint8, mediump>;
|
||||||
|
template struct tvec2<uint16, mediump>;
|
||||||
|
template struct tvec2<uint32, mediump>;
|
||||||
|
template struct tvec2<uint64, mediump>;
|
||||||
|
template struct tvec2<int8, mediump>;
|
||||||
|
template struct tvec2<int16, mediump>;
|
||||||
|
template struct tvec2<int32, mediump>;
|
||||||
|
template struct tvec2<int64, mediump>;
|
||||||
|
template struct tvec2<float32, mediump>;
|
||||||
|
template struct tvec2<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tvec2<uint8, highp>;
|
||||||
|
template struct tvec2<uint16, highp>;
|
||||||
|
template struct tvec2<uint32, highp>;
|
||||||
|
template struct tvec2<uint64, highp>;
|
||||||
|
template struct tvec2<int8, highp>;
|
||||||
|
template struct tvec2<int16, highp>;
|
||||||
|
template struct tvec2<int32, highp>;
|
||||||
|
template struct tvec2<int64, highp>;
|
||||||
|
template struct tvec2<float32, highp>;
|
||||||
|
template struct tvec2<float64, highp>;
|
||||||
|
|
||||||
|
// tvec3 type explicit instantiation
|
||||||
|
template struct tvec3<uint8, lowp>;
|
||||||
|
template struct tvec3<uint16, lowp>;
|
||||||
|
template struct tvec3<uint32, lowp>;
|
||||||
|
template struct tvec3<uint64, lowp>;
|
||||||
|
template struct tvec3<int8, lowp>;
|
||||||
|
template struct tvec3<int16, lowp>;
|
||||||
|
template struct tvec3<int32, lowp>;
|
||||||
|
template struct tvec3<int64, lowp>;
|
||||||
|
template struct tvec3<float32, lowp>;
|
||||||
|
template struct tvec3<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tvec3<uint8, mediump>;
|
||||||
|
template struct tvec3<uint16, mediump>;
|
||||||
|
template struct tvec3<uint32, mediump>;
|
||||||
|
template struct tvec3<uint64, mediump>;
|
||||||
|
template struct tvec3<int8, mediump>;
|
||||||
|
template struct tvec3<int16, mediump>;
|
||||||
|
template struct tvec3<int32, mediump>;
|
||||||
|
template struct tvec3<int64, mediump>;
|
||||||
|
template struct tvec3<float32, mediump>;
|
||||||
|
template struct tvec3<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tvec3<uint8, highp>;
|
||||||
|
template struct tvec3<uint16, highp>;
|
||||||
|
template struct tvec3<uint32, highp>;
|
||||||
|
template struct tvec3<uint64, highp>;
|
||||||
|
template struct tvec3<int8, highp>;
|
||||||
|
template struct tvec3<int16, highp>;
|
||||||
|
template struct tvec3<int32, highp>;
|
||||||
|
template struct tvec3<int64, highp>;
|
||||||
|
template struct tvec3<float32, highp>;
|
||||||
|
template struct tvec3<float64, highp>;
|
||||||
|
|
||||||
|
// tvec4 type explicit instantiation
|
||||||
|
template struct tvec4<uint8, lowp>;
|
||||||
|
template struct tvec4<uint16, lowp>;
|
||||||
|
template struct tvec4<uint32, lowp>;
|
||||||
|
template struct tvec4<uint64, lowp>;
|
||||||
|
template struct tvec4<int8, lowp>;
|
||||||
|
template struct tvec4<int16, lowp>;
|
||||||
|
template struct tvec4<int32, lowp>;
|
||||||
|
template struct tvec4<int64, lowp>;
|
||||||
|
template struct tvec4<float32, lowp>;
|
||||||
|
template struct tvec4<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tvec4<uint8, mediump>;
|
||||||
|
template struct tvec4<uint16, mediump>;
|
||||||
|
template struct tvec4<uint32, mediump>;
|
||||||
|
template struct tvec4<uint64, mediump>;
|
||||||
|
template struct tvec4<int8, mediump>;
|
||||||
|
template struct tvec4<int16, mediump>;
|
||||||
|
template struct tvec4<int32, mediump>;
|
||||||
|
template struct tvec4<int64, mediump>;
|
||||||
|
template struct tvec4<float32, mediump>;
|
||||||
|
template struct tvec4<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tvec4<uint8, highp>;
|
||||||
|
template struct tvec4<uint16, highp>;
|
||||||
|
template struct tvec4<uint32, highp>;
|
||||||
|
template struct tvec4<uint64, highp>;
|
||||||
|
template struct tvec4<int8, highp>;
|
||||||
|
template struct tvec4<int16, highp>;
|
||||||
|
template struct tvec4<int32, highp>;
|
||||||
|
template struct tvec4<int64, highp>;
|
||||||
|
template struct tvec4<float32, highp>;
|
||||||
|
template struct tvec4<float64, highp>;
|
||||||
|
|
||||||
|
// tmat2x2 type explicit instantiation
|
||||||
|
template struct tmat2x2<float32, lowp>;
|
||||||
|
template struct tmat2x2<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat2x2<float32, mediump>;
|
||||||
|
template struct tmat2x2<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat2x2<float32, highp>;
|
||||||
|
template struct tmat2x2<float64, highp>;
|
||||||
|
|
||||||
|
// tmat2x3 type explicit instantiation
|
||||||
|
template struct tmat2x3<float32, lowp>;
|
||||||
|
template struct tmat2x3<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat2x3<float32, mediump>;
|
||||||
|
template struct tmat2x3<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat2x3<float32, highp>;
|
||||||
|
template struct tmat2x3<float64, highp>;
|
||||||
|
|
||||||
|
// tmat2x4 type explicit instantiation
|
||||||
|
template struct tmat2x4<float32, lowp>;
|
||||||
|
template struct tmat2x4<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat2x4<float32, mediump>;
|
||||||
|
template struct tmat2x4<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat2x4<float32, highp>;
|
||||||
|
template struct tmat2x4<float64, highp>;
|
||||||
|
|
||||||
|
// tmat3x2 type explicit instantiation
|
||||||
|
template struct tmat3x2<float32, lowp>;
|
||||||
|
template struct tmat3x2<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat3x2<float32, mediump>;
|
||||||
|
template struct tmat3x2<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat3x2<float32, highp>;
|
||||||
|
template struct tmat3x2<float64, highp>;
|
||||||
|
|
||||||
|
// tmat3x3 type explicit instantiation
|
||||||
|
template struct tmat3x3<float32, lowp>;
|
||||||
|
template struct tmat3x3<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat3x3<float32, mediump>;
|
||||||
|
template struct tmat3x3<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat3x3<float32, highp>;
|
||||||
|
template struct tmat3x3<float64, highp>;
|
||||||
|
|
||||||
|
// tmat3x4 type explicit instantiation
|
||||||
|
template struct tmat3x4<float32, lowp>;
|
||||||
|
template struct tmat3x4<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat3x4<float32, mediump>;
|
||||||
|
template struct tmat3x4<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat3x4<float32, highp>;
|
||||||
|
template struct tmat3x4<float64, highp>;
|
||||||
|
|
||||||
|
// tmat4x2 type explicit instantiation
|
||||||
|
template struct tmat4x2<float32, lowp>;
|
||||||
|
template struct tmat4x2<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat4x2<float32, mediump>;
|
||||||
|
template struct tmat4x2<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat4x2<float32, highp>;
|
||||||
|
template struct tmat4x2<float64, highp>;
|
||||||
|
|
||||||
|
// tmat4x3 type explicit instantiation
|
||||||
|
template struct tmat4x3<float32, lowp>;
|
||||||
|
template struct tmat4x3<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat4x3<float32, mediump>;
|
||||||
|
template struct tmat4x3<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat4x3<float32, highp>;
|
||||||
|
template struct tmat4x3<float64, highp>;
|
||||||
|
|
||||||
|
// tmat4x4 type explicit instantiation
|
||||||
|
template struct tmat4x4<float32, lowp>;
|
||||||
|
template struct tmat4x4<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tmat4x4<float32, mediump>;
|
||||||
|
template struct tmat4x4<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tmat4x4<float32, highp>;
|
||||||
|
template struct tmat4x4<float64, highp>;
|
||||||
|
|
||||||
|
// tquat type explicit instantiation
|
||||||
|
template struct tquat<float32, lowp>;
|
||||||
|
template struct tquat<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tquat<float32, mediump>;
|
||||||
|
template struct tquat<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tquat<float32, highp>;
|
||||||
|
template struct tquat<float64, highp>;
|
||||||
|
|
||||||
|
//tdualquat type explicit instantiation
|
||||||
|
template struct tdualquat<float32, lowp>;
|
||||||
|
template struct tdualquat<float64, lowp>;
|
||||||
|
|
||||||
|
template struct tdualquat<float32, mediump>;
|
||||||
|
template struct tdualquat<float64, mediump>;
|
||||||
|
|
||||||
|
template struct tdualquat<float32, highp>;
|
||||||
|
template struct tdualquat<float64, highp>;
|
||||||
|
|
||||||
|
}//namespace glm
|
||||||
|
|
63
dependencies/glm/detail/precision.hpp
vendored
Normal file
63
dependencies/glm/detail/precision.hpp
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/precision.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "setup.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
enum precision
|
||||||
|
{
|
||||||
|
packed_highp,
|
||||||
|
packed_mediump,
|
||||||
|
packed_lowp,
|
||||||
|
|
||||||
|
# if GLM_HAS_ALIGNED_TYPE
|
||||||
|
aligned_highp,
|
||||||
|
aligned_mediump,
|
||||||
|
aligned_lowp,
|
||||||
|
aligned = aligned_highp,
|
||||||
|
# endif
|
||||||
|
|
||||||
|
highp = packed_highp,
|
||||||
|
mediump = packed_mediump,
|
||||||
|
lowp = packed_lowp,
|
||||||
|
packed = packed_highp,
|
||||||
|
|
||||||
|
# if GLM_HAS_ALIGNED_TYPE && defined(GLM_FORCE_ALIGNED)
|
||||||
|
defaultp = aligned_highp
|
||||||
|
# else
|
||||||
|
defaultp = highp
|
||||||
|
# endif
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <glm::precision P>
|
||||||
|
struct is_aligned
|
||||||
|
{
|
||||||
|
static const bool value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# if GLM_HAS_ALIGNED_TYPE
|
||||||
|
template<>
|
||||||
|
struct is_aligned<glm::aligned_lowp>
|
||||||
|
{
|
||||||
|
static const bool value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct is_aligned<glm::aligned_mediump>
|
||||||
|
{
|
||||||
|
static const bool value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct is_aligned<glm::aligned_highp>
|
||||||
|
{
|
||||||
|
static const bool value = true;
|
||||||
|
};
|
||||||
|
# endif
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
828
dependencies/glm/detail/setup.hpp
vendored
Normal file
828
dependencies/glm/detail/setup.hpp
vendored
Normal file
@ -0,0 +1,828 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/setup.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if (defined(GLM_FORCE_SWIZZLE) || defined(GLM_SWIZZLE)) && defined(GLM_FORCE_UNRESTRICTED_GENTYPE)
|
||||||
|
# error "Both GLM_FORCE_SWIZZLE and GLM_FORCE_UNRESTRICTED_GENTYPE can't be defined at the same time"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Messages
|
||||||
|
|
||||||
|
#ifdef GLM_MESSAGES
|
||||||
|
# pragma message("GLM: GLM_MESSAGES is deprecated, use GLM_FORCE_MESSAGES instead")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GLM_MESSAGES_ENABLED 1
|
||||||
|
#define GLM_MESSAGES_DISABLE 0
|
||||||
|
|
||||||
|
#if defined(GLM_FORCE_MESSAGES) || defined(GLM_MESSAGES)
|
||||||
|
# undef GLM_MESSAGES
|
||||||
|
# define GLM_MESSAGES GLM_MESSAGES_ENABLED
|
||||||
|
#else
|
||||||
|
# undef GLM_MESSAGES
|
||||||
|
# define GLM_MESSAGES GLM_MESSAGES_DISABLE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstddef>
|
||||||
|
#include "../simd/platform.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Version
|
||||||
|
|
||||||
|
#define GLM_VERSION 98
|
||||||
|
#define GLM_VERSION_MAJOR 0
|
||||||
|
#define GLM_VERSION_MINOR 9
|
||||||
|
#define GLM_VERSION_PATCH 8
|
||||||
|
#define GLM_VERSION_REVISION 4
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_VERSION_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_VERSION_DISPLAYED
|
||||||
|
# pragma message ("GLM: version 0.9.8.4")
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
// Report compiler detection
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_COMPILER_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_COMPILER_DISPLAYED
|
||||||
|
# if GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
# pragma message("GLM: CUDA compiler detected")
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
# pragma message("GLM: Visual C++ compiler detected")
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# pragma message("GLM: Clang compiler detected")
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_INTEL
|
||||||
|
# pragma message("GLM: Intel Compiler detected")
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_GCC
|
||||||
|
# pragma message("GLM: GCC compiler detected")
|
||||||
|
# else
|
||||||
|
# pragma message("GLM: Compiler not detected")
|
||||||
|
# endif
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Build model
|
||||||
|
|
||||||
|
#if defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)
|
||||||
|
# define GLM_MODEL GLM_MODEL_64
|
||||||
|
#elif defined(__i386__) || defined(__ppc__)
|
||||||
|
# define GLM_MODEL GLM_MODEL_32
|
||||||
|
#else
|
||||||
|
# define GLM_MODEL GLM_MODEL_32
|
||||||
|
#endif//
|
||||||
|
|
||||||
|
#if !defined(GLM_MODEL) && GLM_COMPILER != 0
|
||||||
|
# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
|
||||||
|
#endif//GLM_MODEL
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_MODEL_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_MODEL_DISPLAYED
|
||||||
|
# if(GLM_MODEL == GLM_MODEL_64)
|
||||||
|
# pragma message("GLM: 64 bits model")
|
||||||
|
# elif(GLM_MODEL == GLM_MODEL_32)
|
||||||
|
# pragma message("GLM: 32 bits model")
|
||||||
|
# endif//GLM_MODEL
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_ARCH_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_ARCH_DISPLAYED
|
||||||
|
# if(GLM_ARCH == GLM_ARCH_PURE)
|
||||||
|
# pragma message("GLM: Platform independent code")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_AVX2)
|
||||||
|
# pragma message("GLM: AVX2 instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_AVX)
|
||||||
|
# pragma message("GLM: AVX instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_SSE42)
|
||||||
|
# pragma message("GLM: SSE4.2 instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_SSE41)
|
||||||
|
# pragma message("GLM: SSE4.1 instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_SSSE3)
|
||||||
|
# pragma message("GLM: SSSE3 instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_SSE3)
|
||||||
|
# pragma message("GLM: SSE3 instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_SSE2)
|
||||||
|
# pragma message("GLM: SSE2 instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_X86)
|
||||||
|
# pragma message("GLM: x86 instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_NEON)
|
||||||
|
# pragma message("GLM: NEON instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_ARM)
|
||||||
|
# pragma message("GLM: ARM instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_MIPS)
|
||||||
|
# pragma message("GLM: MIPS instruction set")
|
||||||
|
# elif(GLM_ARCH == GLM_ARCH_PPC)
|
||||||
|
# pragma message("GLM: PowerPC architechture")
|
||||||
|
# endif//GLM_ARCH
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ Version
|
||||||
|
|
||||||
|
// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14
|
||||||
|
|
||||||
|
#define GLM_LANG_CXX98_FLAG (1 << 1)
|
||||||
|
#define GLM_LANG_CXX03_FLAG (1 << 2)
|
||||||
|
#define GLM_LANG_CXX0X_FLAG (1 << 3)
|
||||||
|
#define GLM_LANG_CXX11_FLAG (1 << 4)
|
||||||
|
#define GLM_LANG_CXX1Y_FLAG (1 << 5)
|
||||||
|
#define GLM_LANG_CXX14_FLAG (1 << 6)
|
||||||
|
#define GLM_LANG_CXX1Z_FLAG (1 << 7)
|
||||||
|
#define GLM_LANG_CXXMS_FLAG (1 << 8)
|
||||||
|
#define GLM_LANG_CXXGNU_FLAG (1 << 9)
|
||||||
|
|
||||||
|
#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
|
||||||
|
#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
|
||||||
|
#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)
|
||||||
|
#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)
|
||||||
|
#define GLM_LANG_CXX1Y (GLM_LANG_CXX11 | GLM_LANG_CXX1Y_FLAG)
|
||||||
|
#define GLM_LANG_CXX14 (GLM_LANG_CXX1Y | GLM_LANG_CXX14_FLAG)
|
||||||
|
#define GLM_LANG_CXX1Z (GLM_LANG_CXX14 | GLM_LANG_CXX1Z_FLAG)
|
||||||
|
#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
|
||||||
|
#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
|
||||||
|
|
||||||
|
#if defined(GLM_FORCE_CXX14)
|
||||||
|
# if((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER <= GLM_COMPILER_GCC50)) || ((GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER <= GLM_COMPILER_CLANG34))
|
||||||
|
# pragma message("GLM: Using GLM_FORCE_CXX14 with a compiler that doesn't fully support C++14")
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
# pragma message("GLM: Using GLM_FORCE_CXX14 but there is no known version of Visual C++ compiler that fully supports C++14")
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_INTEL
|
||||||
|
# pragma message("GLM: Using GLM_FORCE_CXX14 but there is no known version of ICC compiler that fully supports C++14")
|
||||||
|
# endif
|
||||||
|
# define GLM_LANG GLM_LANG_CXX14
|
||||||
|
# define GLM_LANG_STL11_FORCED
|
||||||
|
#elif defined(GLM_FORCE_CXX11)
|
||||||
|
# if((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER <= GLM_COMPILER_GCC48)) || ((GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER <= GLM_COMPILER_CLANG33))
|
||||||
|
# pragma message("GLM: Using GLM_FORCE_CXX11 with a compiler that doesn't fully support C++11")
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
# pragma message("GLM: Using GLM_FORCE_CXX11 but there is no known version of Visual C++ compiler that fully supports C++11")
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_INTEL
|
||||||
|
# pragma message("GLM: Using GLM_FORCE_CXX11 but there is no known version of ICC compiler that fully supports C++11")
|
||||||
|
# endif
|
||||||
|
# define GLM_LANG GLM_LANG_CXX11
|
||||||
|
# define GLM_LANG_STL11_FORCED
|
||||||
|
#elif defined(GLM_FORCE_CXX03)
|
||||||
|
# define GLM_LANG GLM_LANG_CXX03
|
||||||
|
#elif defined(GLM_FORCE_CXX98)
|
||||||
|
# define GLM_LANG GLM_LANG_CXX98
|
||||||
|
#else
|
||||||
|
# if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# if __cplusplus >= 201402L // GLM_COMPILER_CLANG34 + -std=c++14
|
||||||
|
# define GLM_LANG GLM_LANG_CXX14
|
||||||
|
# elif __has_feature(cxx_decltype_auto) && __has_feature(cxx_aggregate_nsdmi) // GLM_COMPILER_CLANG33 + -std=c++1y
|
||||||
|
# define GLM_LANG GLM_LANG_CXX1Y
|
||||||
|
# elif __cplusplus >= 201103L // GLM_COMPILER_CLANG33 + -std=c++11
|
||||||
|
# define GLM_LANG GLM_LANG_CXX11
|
||||||
|
# elif __has_feature(cxx_static_assert) // GLM_COMPILER_CLANG29 + -std=c++11
|
||||||
|
# define GLM_LANG GLM_LANG_CXX0X
|
||||||
|
# elif __cplusplus >= 199711L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX98
|
||||||
|
# else
|
||||||
|
# define GLM_LANG GLM_LANG_CXX
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_GCC
|
||||||
|
# if __cplusplus >= 201402L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX14
|
||||||
|
# elif __cplusplus >= 201103L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX11
|
||||||
|
# elif defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||||
|
# define GLM_LANG GLM_LANG_CXX0X
|
||||||
|
# else
|
||||||
|
# define GLM_LANG GLM_LANG_CXX98
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
# ifdef _MSC_EXTENSIONS
|
||||||
|
# if __cplusplus >= 201402L
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_CXXMS_FLAG)
|
||||||
|
//# elif GLM_COMPILER >= GLM_COMPILER_VC14
|
||||||
|
//# define GLM_LANG (GLM_LANG_CXX1Y | GLM_LANG_CXXMS_FLAG)
|
||||||
|
# elif __cplusplus >= 201103L
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_CXXMS_FLAG)
|
||||||
|
# elif GLM_COMPILER >= GLM_COMPILER_VC10
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
|
||||||
|
# elif __cplusplus >= 199711L
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
|
||||||
|
# else
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX | GLM_LANG_CXXMS_FLAG)
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# if __cplusplus >= 201402L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX14
|
||||||
|
# elif __cplusplus >= 201103L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX11
|
||||||
|
# elif GLM_COMPILER >= GLM_COMPILER_VC10
|
||||||
|
# define GLM_LANG GLM_LANG_CXX0X
|
||||||
|
# elif __cplusplus >= 199711L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX98
|
||||||
|
# else
|
||||||
|
# define GLM_LANG GLM_LANG_CXX
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_INTEL
|
||||||
|
# ifdef _MSC_EXTENSIONS
|
||||||
|
# define GLM_MSC_EXT GLM_LANG_CXXMS_FLAG
|
||||||
|
# else
|
||||||
|
# define GLM_MSC_EXT 0
|
||||||
|
# endif
|
||||||
|
# if __cplusplus >= 201402L
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX14 | GLM_MSC_EXT)
|
||||||
|
# elif __cplusplus >= 201103L
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX11 | GLM_MSC_EXT)
|
||||||
|
# elif __INTEL_CXX11_MODE__
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX0X | GLM_MSC_EXT)
|
||||||
|
# elif __cplusplus >= 199711L
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX98 | GLM_MSC_EXT)
|
||||||
|
# else
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX | GLM_MSC_EXT)
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
# ifdef _MSC_EXTENSIONS
|
||||||
|
# define GLM_MSC_EXT GLM_LANG_CXXMS_FLAG
|
||||||
|
# else
|
||||||
|
# define GLM_MSC_EXT 0
|
||||||
|
# endif
|
||||||
|
# if GLM_COMPILER >= GLM_COMPILER_CUDA75
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX0X | GLM_MSC_EXT)
|
||||||
|
# else
|
||||||
|
# define GLM_LANG (GLM_LANG_CXX98 | GLM_MSC_EXT)
|
||||||
|
# endif
|
||||||
|
# else // Unknown compiler
|
||||||
|
# if __cplusplus >= 201402L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX14
|
||||||
|
# elif __cplusplus >= 201103L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX11
|
||||||
|
# elif __cplusplus >= 199711L
|
||||||
|
# define GLM_LANG GLM_LANG_CXX98
|
||||||
|
# else
|
||||||
|
# define GLM_LANG GLM_LANG_CXX // Good luck with that!
|
||||||
|
# endif
|
||||||
|
# ifndef GLM_FORCE_PURE
|
||||||
|
# define GLM_FORCE_PURE
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_LANG_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_LANG_DISPLAYED
|
||||||
|
|
||||||
|
# if GLM_LANG & GLM_LANG_CXX1Z_FLAG
|
||||||
|
# pragma message("GLM: C++1z")
|
||||||
|
# elif GLM_LANG & GLM_LANG_CXX14_FLAG
|
||||||
|
# pragma message("GLM: C++14")
|
||||||
|
# elif GLM_LANG & GLM_LANG_CXX1Y_FLAG
|
||||||
|
# pragma message("GLM: C++1y")
|
||||||
|
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# pragma message("GLM: C++11")
|
||||||
|
# elif GLM_LANG & GLM_LANG_CXX0X_FLAG
|
||||||
|
# pragma message("GLM: C++0x")
|
||||||
|
# elif GLM_LANG & GLM_LANG_CXX03_FLAG
|
||||||
|
# pragma message("GLM: C++03")
|
||||||
|
# elif GLM_LANG & GLM_LANG_CXX98_FLAG
|
||||||
|
# pragma message("GLM: C++98")
|
||||||
|
# else
|
||||||
|
# pragma message("GLM: C++ language undetected")
|
||||||
|
# endif//GLM_LANG
|
||||||
|
|
||||||
|
# if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
|
||||||
|
# pragma message("GLM: Language extensions enabled")
|
||||||
|
# endif//GLM_LANG
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Has of C++ features
|
||||||
|
|
||||||
|
// http://clang.llvm.org/cxx_status.html
|
||||||
|
// http://gcc.gnu.org/projects/cxx0x.html
|
||||||
|
// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
|
||||||
|
|
||||||
|
// Android has multiple STLs but C++11 STL detection doesn't always work #284 #564
|
||||||
|
#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED)
|
||||||
|
# define GLM_HAS_CXX11_STL 0
|
||||||
|
#elif GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# if (defined(_LIBCPP_VERSION) && GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)
|
||||||
|
# define GLM_HAS_CXX11_STL 1
|
||||||
|
# else
|
||||||
|
# define GLM_HAS_CXX11_STL 0
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
|
||||||
|
((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N1720
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_STATIC_ASSERT 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N1988
|
||||||
|
#if GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_EXTENDED_INTEGER_TYPE 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_EXTENDED_INTEGER_TYPE (\
|
||||||
|
((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11)) || \
|
||||||
|
((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \
|
||||||
|
((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC)) || \
|
||||||
|
((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2235
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_CONSTEXPR __has_feature(cxx_constexpr)
|
||||||
|
# define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_CONSTEXPR 1
|
||||||
|
# define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)))) // GCC 4.6 support constexpr but there is a compiler bug causing a crash
|
||||||
|
# define GLM_HAS_CONSTEXPR_PARTIAL (GLM_HAS_CONSTEXPR || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2672
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_INITIALIZER_LISTS 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA75))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)
|
||||||
|
#elif GLM_LANG & (GLM_LANG_CXX11_FLAG | GLM_LANG_CXXMS_FLAG)
|
||||||
|
# define GLM_HAS_UNRESTRICTED_UNIONS 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_LANG & GLM_LANG_CXXMS_FLAG)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA75)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2346
|
||||||
|
#if defined(GLM_FORCE_UNRESTRICTED_GENTYPE)
|
||||||
|
# define GLM_HAS_DEFAULTED_FUNCTIONS 0
|
||||||
|
#elif GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_DEFAULTED_FUNCTIONS 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL12)) || \
|
||||||
|
(GLM_COMPILER & GLM_COMPILER_CUDA)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2118
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_RVALUE_REFERENCES 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC45)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_TEMPLATE_ALIASES 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL12_1)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC47)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_RANGE_FOR 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL13)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC11)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# define GLM_HAS_ALIGNOF __has_feature(c_alignof)
|
||||||
|
#elif GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_ALIGNOF 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA70))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GLM_HAS_ONLY_XYZW ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER < GLM_COMPILER_GCC46))
|
||||||
|
#if GLM_HAS_ONLY_XYZW
|
||||||
|
# pragma message("GLM: GCC older than 4.6 has a bug presenting the use of rgba and stpq components")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
#if GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_ASSIGNABLE 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
#define GLM_HAS_TRIVIAL_QUERIES 0
|
||||||
|
|
||||||
|
//
|
||||||
|
#if GLM_LANG & GLM_LANG_CXX11_FLAG
|
||||||
|
# define GLM_HAS_MAKE_SIGNED 1
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_ARCH == GLM_ARCH_PURE
|
||||||
|
# define GLM_HAS_BITSCAN_WINDOWS 0
|
||||||
|
#else
|
||||||
|
# define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
|
||||||
|
((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// OpenMP
|
||||||
|
#ifdef _OPENMP
|
||||||
|
# if GLM_COMPILER & GLM_COMPILER_GCC
|
||||||
|
# if GLM_COMPILER >= GLM_COMPILER_GCC61
|
||||||
|
# define GLM_HAS_OPENMP 45
|
||||||
|
# elif GLM_COMPILER >= GLM_COMPILER_GCC49
|
||||||
|
# define GLM_HAS_OPENMP 40
|
||||||
|
# elif GLM_COMPILER >= GLM_COMPILER_GCC47
|
||||||
|
# define GLM_HAS_OPENMP 31
|
||||||
|
# elif GLM_COMPILER >= GLM_COMPILER_GCC44
|
||||||
|
# define GLM_HAS_OPENMP 30
|
||||||
|
# elif GLM_COMPILER >= GLM_COMPILER_GCC42
|
||||||
|
# define GLM_HAS_OPENMP 25
|
||||||
|
# else
|
||||||
|
# define GLM_HAS_OPENMP 0
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# if GLM_COMPILER >= GLM_COMPILER_CLANG38
|
||||||
|
# define GLM_HAS_OPENMP 31
|
||||||
|
# else
|
||||||
|
# define GLM_HAS_OPENMP 0
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
# if GLM_COMPILER >= GLM_COMPILER_VC10
|
||||||
|
# define GLM_HAS_OPENMP 20
|
||||||
|
# else
|
||||||
|
# define GLM_HAS_OPENMP 0
|
||||||
|
# endif
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_INTEL
|
||||||
|
# if GLM_COMPILER >= GLM_COMPILER_INTEL16
|
||||||
|
# define GLM_HAS_OPENMP 40
|
||||||
|
# elif GLM_COMPILER >= GLM_COMPILER_INTEL12
|
||||||
|
# define GLM_HAS_OPENMP 31
|
||||||
|
# else
|
||||||
|
# define GLM_HAS_OPENMP 0
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define GLM_HAS_OPENMP 0
|
||||||
|
# endif// GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Static assert
|
||||||
|
|
||||||
|
#if GLM_HAS_STATIC_ASSERT
|
||||||
|
# define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
|
||||||
|
#elif defined(BOOST_STATIC_ASSERT)
|
||||||
|
# define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)
|
||||||
|
#elif GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
|
||||||
|
#else
|
||||||
|
# define GLM_STATIC_ASSERT(x, message)
|
||||||
|
# define GLM_STATIC_ASSERT_NULL
|
||||||
|
#endif//GLM_LANG
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Qualifiers
|
||||||
|
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
# define GLM_CUDA_FUNC_DEF __device__ __host__
|
||||||
|
# define GLM_CUDA_FUNC_DECL __device__ __host__
|
||||||
|
#else
|
||||||
|
# define GLM_CUDA_FUNC_DEF
|
||||||
|
# define GLM_CUDA_FUNC_DECL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_COMPILER & GLM_COMPILER_GCC
|
||||||
|
# define GLM_VAR_USED __attribute__ ((unused))
|
||||||
|
#else
|
||||||
|
# define GLM_VAR_USED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(GLM_FORCE_INLINE)
|
||||||
|
# if GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
# define GLM_INLINE __forceinline
|
||||||
|
# define GLM_NEVER_INLINE __declspec((noinline))
|
||||||
|
# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)
|
||||||
|
# define GLM_INLINE inline __attribute__((__always_inline__))
|
||||||
|
# define GLM_NEVER_INLINE __attribute__((__noinline__))
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
# define GLM_INLINE __forceinline__
|
||||||
|
# define GLM_NEVER_INLINE __noinline__
|
||||||
|
# else
|
||||||
|
# define GLM_INLINE inline
|
||||||
|
# define GLM_NEVER_INLINE
|
||||||
|
# endif//GLM_COMPILER
|
||||||
|
#else
|
||||||
|
# define GLM_INLINE inline
|
||||||
|
# define GLM_NEVER_INLINE
|
||||||
|
#endif//defined(GLM_FORCE_INLINE)
|
||||||
|
|
||||||
|
#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
|
||||||
|
#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Swizzle operators
|
||||||
|
|
||||||
|
// User defines: GLM_FORCE_SWIZZLE
|
||||||
|
|
||||||
|
#ifdef GLM_SWIZZLE
|
||||||
|
# pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GLM_SWIZZLE_ENABLED 1
|
||||||
|
#define GLM_SWIZZLE_DISABLE 0
|
||||||
|
|
||||||
|
#if defined(GLM_FORCE_SWIZZLE) || defined(GLM_SWIZZLE)
|
||||||
|
# undef GLM_SWIZZLE
|
||||||
|
# define GLM_SWIZZLE GLM_SWIZZLE_ENABLED
|
||||||
|
#else
|
||||||
|
# undef GLM_SWIZZLE
|
||||||
|
# define GLM_SWIZZLE GLM_SWIZZLE_DISABLE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_SWIZZLE_DISPLAYED
|
||||||
|
# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
|
||||||
|
# pragma message("GLM: Swizzling operators enabled")
|
||||||
|
# else
|
||||||
|
# pragma message("GLM: Swizzling operators disabled, #define GLM_SWIZZLE to enable swizzle operators")
|
||||||
|
# endif
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Allows using not basic types as genType
|
||||||
|
|
||||||
|
// #define GLM_FORCE_UNRESTRICTED_GENTYPE
|
||||||
|
|
||||||
|
#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE
|
||||||
|
# define GLM_UNRESTRICTED_GENTYPE 1
|
||||||
|
#else
|
||||||
|
# define GLM_UNRESTRICTED_GENTYPE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_UNRESTRICTED_GENTYPE_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_UNRESTRICTED_GENTYPE_DISPLAYED
|
||||||
|
# ifdef GLM_FORCE_UNRESTRICTED_GENTYPE
|
||||||
|
# pragma message("GLM: Use unrestricted genType")
|
||||||
|
# endif
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Clip control
|
||||||
|
|
||||||
|
#ifdef GLM_DEPTH_ZERO_TO_ONE // Legacy 0.9.8 development
|
||||||
|
# error Define GLM_FORCE_DEPTH_ZERO_TO_ONE instead of GLM_DEPTH_ZERO_TO_ONE to use 0 to 1 clip space.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GLM_DEPTH_ZERO_TO_ONE 0x00000001
|
||||||
|
#define GLM_DEPTH_NEGATIVE_ONE_TO_ONE 0x00000002
|
||||||
|
|
||||||
|
#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||||
|
# define GLM_DEPTH_CLIP_SPACE GLM_DEPTH_ZERO_TO_ONE
|
||||||
|
#else
|
||||||
|
# define GLM_DEPTH_CLIP_SPACE GLM_DEPTH_NEGATIVE_ONE_TO_ONE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_DEPTH_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_DEPTH_DISPLAYED
|
||||||
|
# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
|
||||||
|
# pragma message("GLM: Depth clip space: Zero to one")
|
||||||
|
# else
|
||||||
|
# pragma message("GLM: Depth clip space: negative one to one")
|
||||||
|
# endif
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM
|
||||||
|
// to use left handed coordinate system by default.
|
||||||
|
|
||||||
|
#ifdef GLM_LEFT_HANDED // Legacy 0.9.8 development
|
||||||
|
# error Define GLM_FORCE_LEFT_HANDED instead of GLM_LEFT_HANDED left handed coordinate system by default.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GLM_LEFT_HANDED 0x00000001 // For DirectX, Metal, Vulkan
|
||||||
|
#define GLM_RIGHT_HANDED 0x00000002 // For OpenGL, default in GLM
|
||||||
|
|
||||||
|
#ifdef GLM_FORCE_LEFT_HANDED
|
||||||
|
# define GLM_COORDINATE_SYSTEM GLM_LEFT_HANDED
|
||||||
|
#else
|
||||||
|
# define GLM_COORDINATE_SYSTEM GLM_RIGHT_HANDED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_HANDED_DISPLAYED)
|
||||||
|
# define GLM_MESSAGE_HANDED_DISPLAYED
|
||||||
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
||||||
|
# pragma message("GLM: Coordinate system: left handed")
|
||||||
|
# else
|
||||||
|
# pragma message("GLM: Coordinate system: right handed")
|
||||||
|
# endif
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Qualifiers
|
||||||
|
|
||||||
|
#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))
|
||||||
|
# define GLM_DEPRECATED __declspec(deprecated)
|
||||||
|
# define GLM_ALIGN(x) __declspec(align(x))
|
||||||
|
# define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x))
|
||||||
|
# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name
|
||||||
|
# define GLM_RESTRICT_FUNC __declspec(restrict)
|
||||||
|
# define GLM_RESTRICT __restrict
|
||||||
|
# if GLM_COMPILER >= GLM_COMPILER_VC12
|
||||||
|
# define GLM_VECTOR_CALL __vectorcall
|
||||||
|
# else
|
||||||
|
# define GLM_VECTOR_CALL
|
||||||
|
# endif
|
||||||
|
#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)
|
||||||
|
# define GLM_DEPRECATED __attribute__((__deprecated__))
|
||||||
|
# define GLM_ALIGN(x) __attribute__((aligned(x)))
|
||||||
|
# define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
|
||||||
|
# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))
|
||||||
|
# define GLM_RESTRICT_FUNC __restrict__
|
||||||
|
# define GLM_RESTRICT __restrict__
|
||||||
|
# if GLM_COMPILER & GLM_COMPILER_CLANG
|
||||||
|
# if GLM_COMPILER >= GLM_COMPILER_CLANG37
|
||||||
|
# define GLM_VECTOR_CALL __vectorcall
|
||||||
|
# else
|
||||||
|
# define GLM_VECTOR_CALL
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define GLM_VECTOR_CALL
|
||||||
|
# endif
|
||||||
|
#elif GLM_COMPILER & GLM_COMPILER_CUDA
|
||||||
|
# define GLM_DEPRECATED
|
||||||
|
# define GLM_ALIGN(x) __align__(x)
|
||||||
|
# define GLM_ALIGNED_STRUCT(x) struct __align__(x)
|
||||||
|
# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)
|
||||||
|
# define GLM_RESTRICT_FUNC __restrict__
|
||||||
|
# define GLM_RESTRICT __restrict__
|
||||||
|
# define GLM_VECTOR_CALL
|
||||||
|
#else
|
||||||
|
# define GLM_DEPRECATED
|
||||||
|
# define GLM_ALIGN
|
||||||
|
# define GLM_ALIGNED_STRUCT(x) struct
|
||||||
|
# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name
|
||||||
|
# define GLM_RESTRICT_FUNC
|
||||||
|
# define GLM_RESTRICT
|
||||||
|
# define GLM_VECTOR_CALL
|
||||||
|
#endif//GLM_COMPILER
|
||||||
|
|
||||||
|
#if GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
# define GLM_DEFAULT = default
|
||||||
|
# ifdef GLM_FORCE_NO_CTOR_INIT
|
||||||
|
# define GLM_DEFAULT_CTOR = default
|
||||||
|
# else
|
||||||
|
# define GLM_DEFAULT_CTOR
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define GLM_DEFAULT
|
||||||
|
# define GLM_DEFAULT_CTOR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_HAS_CONSTEXPR || GLM_HAS_CONSTEXPR_PARTIAL
|
||||||
|
# define GLM_CONSTEXPR constexpr
|
||||||
|
# if GLM_COMPILER & GLM_COMPILER_VC // Visual C++ has a bug #594 https://github.com/g-truc/glm/issues/594
|
||||||
|
# define GLM_CONSTEXPR_CTOR
|
||||||
|
# else
|
||||||
|
# define GLM_CONSTEXPR_CTOR constexpr
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define GLM_CONSTEXPR
|
||||||
|
# define GLM_CONSTEXPR_CTOR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_HAS_CONSTEXPR
|
||||||
|
# define GLM_RELAXED_CONSTEXPR constexpr
|
||||||
|
#else
|
||||||
|
# define GLM_RELAXED_CONSTEXPR const
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_ARCH == GLM_ARCH_PURE
|
||||||
|
# define GLM_CONSTEXPR_SIMD GLM_CONSTEXPR_CTOR
|
||||||
|
#else
|
||||||
|
# define GLM_CONSTEXPR_SIMD
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GLM_FORCE_EXPLICIT_CTOR
|
||||||
|
# define GLM_EXPLICIT explicit
|
||||||
|
#else
|
||||||
|
# define GLM_EXPLICIT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define GLM_HAS_ALIGNED_TYPE GLM_HAS_UNRESTRICTED_UNIONS
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Length type
|
||||||
|
|
||||||
|
// User defines: GLM_FORCE_SIZE_T_LENGTH GLM_FORCE_SIZE_FUNC
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
using std::size_t;
|
||||||
|
# if defined(GLM_FORCE_SIZE_T_LENGTH)
|
||||||
|
typedef size_t length_t;
|
||||||
|
# else
|
||||||
|
typedef int length_t;
|
||||||
|
# endif
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_FORCE_SIZE_T_LENGTH)
|
||||||
|
# define GLM_MESSAGE_FORCE_SIZE_T_LENGTH
|
||||||
|
# if defined GLM_FORCE_SIZE_T_LENGTH
|
||||||
|
# pragma message("GLM: .length() returns glm::length_t, a typedef of std::size_t")
|
||||||
|
# else
|
||||||
|
# pragma message("GLM: .length() returns glm::length_t, a typedef of int following the GLSL specification")
|
||||||
|
# endif
|
||||||
|
#endif//GLM_MESSAGES
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// countof
|
||||||
|
|
||||||
|
#ifndef __has_feature
|
||||||
|
# define __has_feature(x) 0 // Compatibility with non-clang compilers.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_HAS_CONSTEXPR_PARTIAL
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
constexpr std::size_t countof(T const (&)[N])
|
||||||
|
{
|
||||||
|
return N;
|
||||||
|
}
|
||||||
|
}//namespace glm
|
||||||
|
# define GLM_COUNTOF(arr) glm::countof(arr)
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# define GLM_COUNTOF(arr) _countof(arr)
|
||||||
|
#else
|
||||||
|
# define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])
|
||||||
|
#endif
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Uninitialize constructors
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
enum ctor{uninitialize};
|
||||||
|
}//namespace glm
|
67
dependencies/glm/detail/type_float.hpp
vendored
Normal file
67
dependencies/glm/detail/type_float.hpp
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_float.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "setup.hpp"
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
typedef float float32;
|
||||||
|
typedef double float64;
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
typedef float lowp_float_t;
|
||||||
|
typedef float mediump_float_t;
|
||||||
|
typedef double highp_float_t;
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef lowp_float_t lowp_float;
|
||||||
|
|
||||||
|
/// Medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef mediump_float_t mediump_float;
|
||||||
|
|
||||||
|
/// High precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef highp_float_t highp_float;
|
||||||
|
|
||||||
|
#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||||
|
typedef mediump_float float_t;
|
||||||
|
#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||||
|
typedef highp_float float_t;
|
||||||
|
#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||||
|
typedef mediump_float float_t;
|
||||||
|
#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
|
||||||
|
typedef lowp_float float_t;
|
||||||
|
#else
|
||||||
|
# error "GLM error: multiple default precision requested for floating-point types"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef float float32;
|
||||||
|
typedef double float64;
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
// check type sizes
|
||||||
|
#ifndef GLM_STATIC_ASSERT_NULL
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::float32) == 4, "float32 size isn't 4 bytes on this platform");
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::float64) == 8, "float64 size isn't 8 bytes on this platform");
|
||||||
|
#endif//GLM_STATIC_ASSERT_NULL
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
}//namespace glm
|
195
dependencies/glm/detail/type_gentype.hpp
vendored
Normal file
195
dependencies/glm/detail/type_gentype.hpp
vendored
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_gentype.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
enum profile
|
||||||
|
{
|
||||||
|
nice,
|
||||||
|
fast,
|
||||||
|
simd
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::size_t sizeType;
|
||||||
|
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template
|
||||||
|
<
|
||||||
|
typename VALTYPE,
|
||||||
|
template <typename> class TYPE
|
||||||
|
>
|
||||||
|
struct genType
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum ctor{null};
|
||||||
|
|
||||||
|
typedef VALTYPE value_type;
|
||||||
|
typedef VALTYPE & value_reference;
|
||||||
|
typedef VALTYPE * value_pointer;
|
||||||
|
typedef VALTYPE const * value_const_pointer;
|
||||||
|
typedef TYPE<bool> bool_type;
|
||||||
|
|
||||||
|
typedef sizeType size_type;
|
||||||
|
static bool is_vector();
|
||||||
|
static bool is_matrix();
|
||||||
|
|
||||||
|
typedef TYPE<VALTYPE> type;
|
||||||
|
typedef TYPE<VALTYPE> * pointer;
|
||||||
|
typedef TYPE<VALTYPE> const * const_pointer;
|
||||||
|
typedef TYPE<VALTYPE> const * const const_pointer_const;
|
||||||
|
typedef TYPE<VALTYPE> * const pointer_const;
|
||||||
|
typedef TYPE<VALTYPE> & reference;
|
||||||
|
typedef TYPE<VALTYPE> const & const_reference;
|
||||||
|
typedef TYPE<VALTYPE> const & param_type;
|
||||||
|
|
||||||
|
//////////////////////////////////////
|
||||||
|
// Address (Implementation details)
|
||||||
|
|
||||||
|
value_const_pointer value_address() const{return value_pointer(this);}
|
||||||
|
value_pointer value_address(){return value_pointer(this);}
|
||||||
|
|
||||||
|
//protected:
|
||||||
|
// enum kind
|
||||||
|
// {
|
||||||
|
// GEN_TYPE,
|
||||||
|
// VEC_TYPE,
|
||||||
|
// MAT_TYPE
|
||||||
|
// };
|
||||||
|
|
||||||
|
// typedef typename TYPE::kind kind;
|
||||||
|
};
|
||||||
|
|
||||||
|
template
|
||||||
|
<
|
||||||
|
typename VALTYPE,
|
||||||
|
template <typename> class TYPE
|
||||||
|
>
|
||||||
|
bool genType<VALTYPE, TYPE>::is_vector()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
|
||||||
|
class base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//////////////////////////////////////
|
||||||
|
// Traits
|
||||||
|
|
||||||
|
typedef sizeType size_type;
|
||||||
|
typedef valTypeT value_type;
|
||||||
|
|
||||||
|
typedef base<value_type, colT, rowT> class_type;
|
||||||
|
|
||||||
|
typedef base<bool, colT, rowT> bool_type;
|
||||||
|
typedef base<value_type, rowT, 1> col_type;
|
||||||
|
typedef base<value_type, colT, 1> row_type;
|
||||||
|
typedef base<value_type, rowT, colT> transpose_type;
|
||||||
|
|
||||||
|
static size_type col_size();
|
||||||
|
static size_type row_size();
|
||||||
|
static size_type value_size();
|
||||||
|
static bool is_scalar();
|
||||||
|
static bool is_vector();
|
||||||
|
static bool is_matrix();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Data
|
||||||
|
col_type value[colT];
|
||||||
|
|
||||||
|
public:
|
||||||
|
//////////////////////////////////////
|
||||||
|
// Constructors
|
||||||
|
base();
|
||||||
|
base(class_type const & m);
|
||||||
|
|
||||||
|
explicit base(T const & x);
|
||||||
|
explicit base(value_type const * const x);
|
||||||
|
explicit base(col_type const * const x);
|
||||||
|
|
||||||
|
//////////////////////////////////////
|
||||||
|
// Conversions
|
||||||
|
template <typename vU, uint cU, uint rU, profile pU>
|
||||||
|
explicit base(base<vU, cU, rU, pU> const & m);
|
||||||
|
|
||||||
|
//////////////////////////////////////
|
||||||
|
// Accesses
|
||||||
|
col_type& operator[](size_type i);
|
||||||
|
col_type const & operator[](size_type i) const;
|
||||||
|
|
||||||
|
//////////////////////////////////////
|
||||||
|
// Unary updatable operators
|
||||||
|
class_type& operator= (class_type const & x);
|
||||||
|
class_type& operator+= (T const & x);
|
||||||
|
class_type& operator+= (class_type const & x);
|
||||||
|
class_type& operator-= (T const & x);
|
||||||
|
class_type& operator-= (class_type const & x);
|
||||||
|
class_type& operator*= (T const & x);
|
||||||
|
class_type& operator*= (class_type const & x);
|
||||||
|
class_type& operator/= (T const & x);
|
||||||
|
class_type& operator/= (class_type const & x);
|
||||||
|
class_type& operator++ ();
|
||||||
|
class_type& operator-- ();
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
//template <typename T>
|
||||||
|
//struct traits
|
||||||
|
//{
|
||||||
|
// static const bool is_signed = false;
|
||||||
|
// static const bool is_float = false;
|
||||||
|
// static const bool is_vector = false;
|
||||||
|
// static const bool is_matrix = false;
|
||||||
|
// static const bool is_genType = false;
|
||||||
|
// static const bool is_genIType = false;
|
||||||
|
// static const bool is_genUType = false;
|
||||||
|
//};
|
||||||
|
|
||||||
|
//template <>
|
||||||
|
//struct traits<half>
|
||||||
|
//{
|
||||||
|
// static const bool is_float = true;
|
||||||
|
// static const bool is_genType = true;
|
||||||
|
//};
|
||||||
|
|
||||||
|
//template <>
|
||||||
|
//struct traits<float>
|
||||||
|
//{
|
||||||
|
// static const bool is_float = true;
|
||||||
|
// static const bool is_genType = true;
|
||||||
|
//};
|
||||||
|
|
||||||
|
//template <>
|
||||||
|
//struct traits<double>
|
||||||
|
//{
|
||||||
|
// static const bool is_float = true;
|
||||||
|
// static const bool is_genType = true;
|
||||||
|
//};
|
||||||
|
|
||||||
|
//template <typename genType>
|
||||||
|
//struct desc
|
||||||
|
//{
|
||||||
|
// typedef genType type;
|
||||||
|
// typedef genType * pointer;
|
||||||
|
// typedef genType const* const_pointer;
|
||||||
|
// typedef genType const *const const_pointer_const;
|
||||||
|
// typedef genType *const pointer_const;
|
||||||
|
// typedef genType & reference;
|
||||||
|
// typedef genType const& const_reference;
|
||||||
|
// typedef genType const& param_type;
|
||||||
|
|
||||||
|
// typedef typename genType::value_type value_type;
|
||||||
|
// typedef typename genType::size_type size_type;
|
||||||
|
// static const typename size_type value_size;
|
||||||
|
//};
|
||||||
|
|
||||||
|
//template <typename genType>
|
||||||
|
//const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
|
||||||
|
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
//#include "type_gentype.inl"
|
341
dependencies/glm/detail/type_gentype.inl
vendored
Normal file
341
dependencies/glm/detail/type_gentype.inl
vendored
Normal file
@ -0,0 +1,341 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_gentype.inl
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail{
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Static functions
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::col_size()
|
||||||
|
{
|
||||||
|
return cT;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::row_size()
|
||||||
|
{
|
||||||
|
return rT;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::value_size()
|
||||||
|
{
|
||||||
|
return rT * cT;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
bool base<vT, cT, rT, pT>::is_scalar()
|
||||||
|
{
|
||||||
|
return rT == 1 && cT == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
bool base<vT, cT, rT, pT>::is_vector()
|
||||||
|
{
|
||||||
|
return rT == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
bool base<vT, cT, rT, pT>::is_matrix()
|
||||||
|
{
|
||||||
|
return rT != 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Constructor
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
base<vT, cT, rT, pT>::base()
|
||||||
|
{
|
||||||
|
memset(&this->value, 0, cT * rT * sizeof(vT));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
base<vT, cT, rT, pT>::base
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::class_type const & m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
for
|
||||||
|
(
|
||||||
|
typename genType<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||||
|
i < base<vT, cT, rT, pT>::col_size();
|
||||||
|
++i
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[i] = m[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
base<vT, cT, rT, pT>::base
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::T const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if(rT == 1) // vector
|
||||||
|
{
|
||||||
|
for
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||||
|
i < base<vT, cT, rT, pT>::col_size();
|
||||||
|
++i
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[i][rT] = x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // matrix
|
||||||
|
{
|
||||||
|
memset(&this->value, 0, cT * rT * sizeof(vT));
|
||||||
|
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop = cT < rT ? cT : rT;
|
||||||
|
|
||||||
|
for
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||||
|
i < stop;
|
||||||
|
++i
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[i][i] = x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
base<vT, cT, rT, pT>::base
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::value_type const * const x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
base<vT, cT, rT, pT>::base
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::col_type const * const x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
for
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||||
|
i < base<vT, cT, rT, pT>::col_size();
|
||||||
|
++i
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[i] = x[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
template <typename vU, uint cU, uint rU, profile pU>
|
||||||
|
base<vT, cT, rT, pT>::base
|
||||||
|
(
|
||||||
|
base<vU, cU, rU, pU> const & m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
for
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||||
|
i < base<vT, cT, rT, pT>::col_size();
|
||||||
|
++i
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[i] = base<vT, cT, rT, pT>(m[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////
|
||||||
|
// Accesses
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::col_type& base<vT, cT, rT, pT>::operator[]
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::size_type i
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return this->value[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::col_type const & base<vT, cT, rT, pT>::operator[]
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::size_type i
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return this->value[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////
|
||||||
|
// Unary updatable operators
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::class_type const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::T const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
this->value[j][i] += x;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::class_type const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
this->value[j][i] += x[j][i];
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::T const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
this->value[j][i] -= x;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::class_type const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
this->value[j][i] -= x[j][i];
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::T const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
this->value[j][i] *= x;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::class_type const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
this->value[j][i] *= x[j][i];
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::T const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
this->value[j][i] /= x;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
|
||||||
|
(
|
||||||
|
typename base<vT, cT, rT, pT>::class_type const & x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
this->value[j][i] /= x[j][i];
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator++ ()
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
++this->value[j][i];
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename vT, uint cT, uint rT, profile pT>
|
||||||
|
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-- ()
|
||||||
|
{
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
|
||||||
|
typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
|
||||||
|
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||||
|
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||||
|
--this->value[j][i];
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
} //namespace detail
|
||||||
|
} //namespace glm
|
19
dependencies/glm/detail/type_half.hpp
vendored
Normal file
19
dependencies/glm/detail/type_half.hpp
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_half.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "setup.hpp"
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
typedef short hdata;
|
||||||
|
|
||||||
|
GLM_FUNC_DECL float toFloat32(hdata value);
|
||||||
|
GLM_FUNC_DECL hdata toFloat16(float const & value);
|
||||||
|
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#include "type_half.inl"
|
244
dependencies/glm/detail/type_half.inl
vendored
Normal file
244
dependencies/glm/detail/type_half.inl
vendored
Normal file
@ -0,0 +1,244 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_half.inl
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER float overflow()
|
||||||
|
{
|
||||||
|
volatile float f = 1e10;
|
||||||
|
|
||||||
|
for(int i = 0; i < 10; ++i)
|
||||||
|
f *= f; // this will overflow before the for loop terminates
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
union uif32
|
||||||
|
{
|
||||||
|
GLM_FUNC_QUALIFIER uif32() :
|
||||||
|
i(0)
|
||||||
|
{}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER uif32(float f_) :
|
||||||
|
f(f_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER uif32(uint32 i_) :
|
||||||
|
i(i_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
float f;
|
||||||
|
uint32 i;
|
||||||
|
};
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER float toFloat32(hdata value)
|
||||||
|
{
|
||||||
|
int s = (value >> 15) & 0x00000001;
|
||||||
|
int e = (value >> 10) & 0x0000001f;
|
||||||
|
int m = value & 0x000003ff;
|
||||||
|
|
||||||
|
if(e == 0)
|
||||||
|
{
|
||||||
|
if(m == 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Plus or minus zero
|
||||||
|
//
|
||||||
|
|
||||||
|
detail::uif32 result;
|
||||||
|
result.i = (unsigned int)(s << 31);
|
||||||
|
return result.f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Denormalized number -- renormalize it
|
||||||
|
//
|
||||||
|
|
||||||
|
while(!(m & 0x00000400))
|
||||||
|
{
|
||||||
|
m <<= 1;
|
||||||
|
e -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
e += 1;
|
||||||
|
m &= ~0x00000400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(e == 31)
|
||||||
|
{
|
||||||
|
if(m == 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Positive or negative infinity
|
||||||
|
//
|
||||||
|
|
||||||
|
uif32 result;
|
||||||
|
result.i = (unsigned int)((s << 31) | 0x7f800000);
|
||||||
|
return result.f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Nan -- preserve sign and significand bits
|
||||||
|
//
|
||||||
|
|
||||||
|
uif32 result;
|
||||||
|
result.i = (unsigned int)((s << 31) | 0x7f800000 | (m << 13));
|
||||||
|
return result.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalized number
|
||||||
|
//
|
||||||
|
|
||||||
|
e = e + (127 - 15);
|
||||||
|
m = m << 13;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Assemble s, e and m.
|
||||||
|
//
|
||||||
|
|
||||||
|
uif32 Result;
|
||||||
|
Result.i = (unsigned int)((s << 31) | (e << 23) | m);
|
||||||
|
return Result.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLM_FUNC_QUALIFIER hdata toFloat16(float const & f)
|
||||||
|
{
|
||||||
|
uif32 Entry;
|
||||||
|
Entry.f = f;
|
||||||
|
int i = (int)Entry.i;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Our floating point number, f, is represented by the bit
|
||||||
|
// pattern in integer i. Disassemble that bit pattern into
|
||||||
|
// the sign, s, the exponent, e, and the significand, m.
|
||||||
|
// Shift s into the position where it will go in in the
|
||||||
|
// resulting half number.
|
||||||
|
// Adjust e, accounting for the different exponent bias
|
||||||
|
// of float and half (127 versus 15).
|
||||||
|
//
|
||||||
|
|
||||||
|
int s = (i >> 16) & 0x00008000;
|
||||||
|
int e = ((i >> 23) & 0x000000ff) - (127 - 15);
|
||||||
|
int m = i & 0x007fffff;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now reassemble s, e and m into a half:
|
||||||
|
//
|
||||||
|
|
||||||
|
if(e <= 0)
|
||||||
|
{
|
||||||
|
if(e < -10)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// E is less than -10. The absolute value of f is
|
||||||
|
// less than half_MIN (f may be a small normalized
|
||||||
|
// float, a denormalized float or a zero).
|
||||||
|
//
|
||||||
|
// We convert f to a half zero.
|
||||||
|
//
|
||||||
|
|
||||||
|
return hdata(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// E is between -10 and 0. F is a normalized float,
|
||||||
|
// whose magnitude is less than __half_NRM_MIN.
|
||||||
|
//
|
||||||
|
// We convert f to a denormalized half.
|
||||||
|
//
|
||||||
|
|
||||||
|
m = (m | 0x00800000) >> (1 - e);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Round to nearest, round "0.5" up.
|
||||||
|
//
|
||||||
|
// Rounding may cause the significand to overflow and make
|
||||||
|
// our number normalized. Because of the way a half's bits
|
||||||
|
// are laid out, we don't have to treat this case separately;
|
||||||
|
// the code below will handle it correctly.
|
||||||
|
//
|
||||||
|
|
||||||
|
if(m & 0x00001000)
|
||||||
|
m += 0x00002000;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Assemble the half from s, e (zero) and m.
|
||||||
|
//
|
||||||
|
|
||||||
|
return hdata(s | (m >> 13));
|
||||||
|
}
|
||||||
|
else if(e == 0xff - (127 - 15))
|
||||||
|
{
|
||||||
|
if(m == 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// F is an infinity; convert f to a half
|
||||||
|
// infinity with the same sign as f.
|
||||||
|
//
|
||||||
|
|
||||||
|
return hdata(s | 0x7c00);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// F is a NAN; we produce a half NAN that preserves
|
||||||
|
// the sign bit and the 10 leftmost bits of the
|
||||||
|
// significand of f, with one exception: If the 10
|
||||||
|
// leftmost bits are all zero, the NAN would turn
|
||||||
|
// into an infinity, so we have to set at least one
|
||||||
|
// bit in the significand.
|
||||||
|
//
|
||||||
|
|
||||||
|
m >>= 13;
|
||||||
|
|
||||||
|
return hdata(s | 0x7c00 | m | (m == 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// E is greater than zero. F is a normalized float.
|
||||||
|
// We try to convert f to a normalized half.
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// Round to nearest, round "0.5" up
|
||||||
|
//
|
||||||
|
|
||||||
|
if(m & 0x00001000)
|
||||||
|
{
|
||||||
|
m += 0x00002000;
|
||||||
|
|
||||||
|
if(m & 0x00800000)
|
||||||
|
{
|
||||||
|
m = 0; // overflow in significand,
|
||||||
|
e += 1; // adjust exponent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Handle exponent overflow
|
||||||
|
//
|
||||||
|
|
||||||
|
if (e > 30)
|
||||||
|
{
|
||||||
|
overflow(); // Cause a hardware floating point overflow;
|
||||||
|
|
||||||
|
return hdata(s | 0x7c00);
|
||||||
|
// if this returns, the half becomes an
|
||||||
|
} // infinity with the same sign as f.
|
||||||
|
|
||||||
|
//
|
||||||
|
// Assemble the half from s, e and m.
|
||||||
|
//
|
||||||
|
|
||||||
|
return hdata(s | (e << 10) | (m >> 13));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}//namespace detail
|
||||||
|
}//namespace glm
|
306
dependencies/glm/detail/type_int.hpp
vendored
Normal file
306
dependencies/glm/detail/type_int.hpp
vendored
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_int.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "setup.hpp"
|
||||||
|
#if GLM_HAS_MAKE_SIGNED
|
||||||
|
# include <type_traits>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GLM_HAS_EXTENDED_INTEGER_TYPE
|
||||||
|
# include <cstdint>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
# if GLM_HAS_EXTENDED_INTEGER_TYPE
|
||||||
|
typedef std::int8_t int8;
|
||||||
|
typedef std::int16_t int16;
|
||||||
|
typedef std::int32_t int32;
|
||||||
|
typedef std::int64_t int64;
|
||||||
|
|
||||||
|
typedef std::uint8_t uint8;
|
||||||
|
typedef std::uint16_t uint16;
|
||||||
|
typedef std::uint32_t uint32;
|
||||||
|
typedef std::uint64_t uint64;
|
||||||
|
# else
|
||||||
|
# if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
|
||||||
|
typedef int64_t sint64;
|
||||||
|
typedef uint64_t uint64;
|
||||||
|
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_VC
|
||||||
|
typedef signed __int64 sint64;
|
||||||
|
typedef unsigned __int64 uint64;
|
||||||
|
|
||||||
|
# elif GLM_COMPILER & GLM_COMPILER_GCC
|
||||||
|
# pragma GCC diagnostic ignored "-Wlong-long"
|
||||||
|
__extension__ typedef signed long long sint64;
|
||||||
|
__extension__ typedef unsigned long long uint64;
|
||||||
|
|
||||||
|
# elif (GLM_COMPILER & GLM_COMPILER_CLANG)
|
||||||
|
# pragma clang diagnostic ignored "-Wc++11-long-long"
|
||||||
|
typedef signed long long sint64;
|
||||||
|
typedef unsigned long long uint64;
|
||||||
|
|
||||||
|
# else//unknown compiler
|
||||||
|
typedef signed long long sint64;
|
||||||
|
typedef unsigned long long uint64;
|
||||||
|
# endif//GLM_COMPILER
|
||||||
|
|
||||||
|
typedef signed char int8;
|
||||||
|
typedef signed short int16;
|
||||||
|
typedef signed int int32;
|
||||||
|
typedef sint64 int64;
|
||||||
|
|
||||||
|
typedef unsigned char uint8;
|
||||||
|
typedef unsigned short uint16;
|
||||||
|
typedef unsigned int uint32;
|
||||||
|
typedef uint64 uint64;
|
||||||
|
#endif//
|
||||||
|
|
||||||
|
typedef signed int lowp_int_t;
|
||||||
|
typedef signed int mediump_int_t;
|
||||||
|
typedef signed int highp_int_t;
|
||||||
|
|
||||||
|
typedef unsigned int lowp_uint_t;
|
||||||
|
typedef unsigned int mediump_uint_t;
|
||||||
|
typedef unsigned int highp_uint_t;
|
||||||
|
|
||||||
|
# if GLM_HAS_MAKE_SIGNED
|
||||||
|
using std::make_signed;
|
||||||
|
using std::make_unsigned;
|
||||||
|
|
||||||
|
# else//GLM_HAS_MAKE_SIGNED
|
||||||
|
template <typename genType>
|
||||||
|
struct make_signed
|
||||||
|
{};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<char>
|
||||||
|
{
|
||||||
|
typedef char type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<short>
|
||||||
|
{
|
||||||
|
typedef short type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<int>
|
||||||
|
{
|
||||||
|
typedef int type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<long>
|
||||||
|
{
|
||||||
|
typedef long type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<unsigned char>
|
||||||
|
{
|
||||||
|
typedef char type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<unsigned short>
|
||||||
|
{
|
||||||
|
typedef short type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<unsigned int>
|
||||||
|
{
|
||||||
|
typedef int type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<unsigned long>
|
||||||
|
{
|
||||||
|
typedef long type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename genType>
|
||||||
|
struct make_unsigned
|
||||||
|
{};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<char>
|
||||||
|
{
|
||||||
|
typedef unsigned char type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<short>
|
||||||
|
{
|
||||||
|
typedef unsigned short type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<int>
|
||||||
|
{
|
||||||
|
typedef unsigned int type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<long>
|
||||||
|
{
|
||||||
|
typedef unsigned long type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<unsigned char>
|
||||||
|
{
|
||||||
|
typedef unsigned char type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<unsigned short>
|
||||||
|
{
|
||||||
|
typedef unsigned short type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<unsigned int>
|
||||||
|
{
|
||||||
|
typedef unsigned int type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<unsigned long>
|
||||||
|
{
|
||||||
|
typedef unsigned long type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<long long>
|
||||||
|
{
|
||||||
|
typedef long long type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_signed<unsigned long long>
|
||||||
|
{
|
||||||
|
typedef long long type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<long long>
|
||||||
|
{
|
||||||
|
typedef unsigned long long type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_unsigned<unsigned long long>
|
||||||
|
{
|
||||||
|
typedef unsigned long long type;
|
||||||
|
};
|
||||||
|
# endif//GLM_HAS_MAKE_SIGNED
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
typedef detail::int8 int8;
|
||||||
|
typedef detail::int16 int16;
|
||||||
|
typedef detail::int32 int32;
|
||||||
|
typedef detail::int64 int64;
|
||||||
|
|
||||||
|
typedef detail::uint8 uint8;
|
||||||
|
typedef detail::uint16 uint16;
|
||||||
|
typedef detail::uint32 uint32;
|
||||||
|
typedef detail::uint64 uint64;
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// Low precision signed integer.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef detail::lowp_int_t lowp_int;
|
||||||
|
|
||||||
|
/// Medium precision signed integer.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef detail::mediump_int_t mediump_int;
|
||||||
|
|
||||||
|
/// High precision signed integer.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef detail::highp_int_t highp_int;
|
||||||
|
|
||||||
|
/// Low precision unsigned integer.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef detail::lowp_uint_t lowp_uint;
|
||||||
|
|
||||||
|
/// Medium precision unsigned integer.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef detail::mediump_uint_t mediump_uint;
|
||||||
|
|
||||||
|
/// High precision unsigned integer.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef detail::highp_uint_t highp_uint;
|
||||||
|
|
||||||
|
#if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||||
|
typedef mediump_int int_t;
|
||||||
|
#elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||||
|
typedef highp_int int_t;
|
||||||
|
#elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||||
|
typedef mediump_int int_t;
|
||||||
|
#elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
|
||||||
|
typedef lowp_int int_t;
|
||||||
|
#else
|
||||||
|
# error "GLM error: multiple default precision requested for signed integer types"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||||
|
typedef mediump_uint uint_t;
|
||||||
|
#elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||||
|
typedef highp_uint uint_t;
|
||||||
|
#elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||||
|
typedef mediump_uint uint_t;
|
||||||
|
#elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
|
||||||
|
typedef lowp_uint uint_t;
|
||||||
|
#else
|
||||||
|
# error "GLM error: multiple default precision requested for unsigned integer types"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Unsigned integer type.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
|
||||||
|
typedef unsigned int uint;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
// check type sizes
|
||||||
|
#ifndef GLM_STATIC_ASSERT_NULL
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::int8) == 1, "int8 size isn't 1 byte on this platform");
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::int16) == 2, "int16 size isn't 2 bytes on this platform");
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::int32) == 4, "int32 size isn't 4 bytes on this platform");
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::int64) == 8, "int64 size isn't 8 bytes on this platform");
|
||||||
|
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::uint8) == 1, "uint8 size isn't 1 byte on this platform");
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::uint16) == 2, "uint16 size isn't 2 bytes on this platform");
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::uint32) == 4, "uint32 size isn't 4 bytes on this platform");
|
||||||
|
GLM_STATIC_ASSERT(sizeof(glm::uint64) == 8, "uint64 size isn't 8 bytes on this platform");
|
||||||
|
#endif//GLM_STATIC_ASSERT_NULL
|
||||||
|
|
||||||
|
}//namespace glm
|
767
dependencies/glm/detail/type_mat.hpp
vendored
Normal file
767
dependencies/glm/detail/type_mat.hpp
vendored
Normal file
@ -0,0 +1,767 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_mat.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "precision.hpp"
|
||||||
|
|
||||||
|
namespace glm{
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
template <typename T, precision P, template <class, precision> class colType, template <class, precision> class rowType>
|
||||||
|
struct outerProduct_trait{};
|
||||||
|
}//namespace detail
|
||||||
|
|
||||||
|
template <typename T, precision P> struct tvec2;
|
||||||
|
template <typename T, precision P> struct tvec3;
|
||||||
|
template <typename T, precision P> struct tvec4;
|
||||||
|
template <typename T, precision P> struct tmat2x2;
|
||||||
|
template <typename T, precision P> struct tmat2x3;
|
||||||
|
template <typename T, precision P> struct tmat2x4;
|
||||||
|
template <typename T, precision P> struct tmat3x2;
|
||||||
|
template <typename T, precision P> struct tmat3x3;
|
||||||
|
template <typename T, precision P> struct tmat3x4;
|
||||||
|
template <typename T, precision P> struct tmat4x2;
|
||||||
|
template <typename T, precision P> struct tmat4x3;
|
||||||
|
template <typename T, precision P> struct tmat4x4;
|
||||||
|
|
||||||
|
template <typename T, precision P, template <typename, precision> class matType>
|
||||||
|
GLM_FUNC_DECL matType<T, P> inverse(matType<T, P> const & m);
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<float, lowp> lowp_mat2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<float, mediump> mediump_mat2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<float, highp> highp_mat2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<float, lowp> lowp_mat2x2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<float, mediump> mediump_mat2x2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<float, highp> highp_mat2x2;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 2 columns of 3 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x3<float, lowp> lowp_mat2x3;
|
||||||
|
|
||||||
|
/// 2 columns of 3 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x3<float, mediump> mediump_mat2x3;
|
||||||
|
|
||||||
|
/// 2 columns of 3 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x3<float, highp> highp_mat2x3;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 2 columns of 4 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x4<float, lowp> lowp_mat2x4;
|
||||||
|
|
||||||
|
/// 2 columns of 4 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x4<float, mediump> mediump_mat2x4;
|
||||||
|
|
||||||
|
/// 2 columns of 4 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x4<float, highp> highp_mat2x4;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 3 columns of 2 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x2<float, lowp> lowp_mat3x2;
|
||||||
|
|
||||||
|
/// 3 columns of 2 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x2<float, mediump> mediump_mat3x2;
|
||||||
|
|
||||||
|
/// 3 columns of 2 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x2<float, highp> highp_mat3x2;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<float, lowp> lowp_mat3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<float, mediump> mediump_mat3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<float, highp> highp_mat3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<float, lowp> lowp_mat3x3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<float, mediump> mediump_mat3x3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<float, highp> highp_mat3x3;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 3 columns of 4 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x4<float, lowp> lowp_mat3x4;
|
||||||
|
|
||||||
|
/// 3 columns of 4 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x4<float, mediump> mediump_mat3x4;
|
||||||
|
|
||||||
|
/// 3 columns of 4 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x4<float, highp> highp_mat3x4;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 4 columns of 2 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x2<float, lowp> lowp_mat4x2;
|
||||||
|
|
||||||
|
/// 4 columns of 2 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x2<float, mediump> mediump_mat4x2;
|
||||||
|
|
||||||
|
/// 4 columns of 2 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x2<float, highp> highp_mat4x2;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 4 columns of 3 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x3<float, lowp> lowp_mat4x3;
|
||||||
|
|
||||||
|
/// 4 columns of 3 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x3<float, mediump> mediump_mat4x3;
|
||||||
|
|
||||||
|
/// 4 columns of 3 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x3<float, highp> highp_mat4x3;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<float, lowp> lowp_mat4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<float, mediump> mediump_mat4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<float, highp> highp_mat4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of low precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<float, lowp> lowp_mat4x4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of medium precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<float, mediump> mediump_mat4x4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of high precision floating-point numbers.
|
||||||
|
/// There is no guarantee on the actual precision.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<float, highp> highp_mat4x4;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_types
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
// Float definition
|
||||||
|
|
||||||
|
#if(defined(GLM_PRECISION_LOWP_FLOAT))
|
||||||
|
typedef lowp_mat2x2 mat2x2;
|
||||||
|
typedef lowp_mat2x3 mat2x3;
|
||||||
|
typedef lowp_mat2x4 mat2x4;
|
||||||
|
typedef lowp_mat3x2 mat3x2;
|
||||||
|
typedef lowp_mat3x3 mat3x3;
|
||||||
|
typedef lowp_mat3x4 mat3x4;
|
||||||
|
typedef lowp_mat4x2 mat4x2;
|
||||||
|
typedef lowp_mat4x3 mat4x3;
|
||||||
|
typedef lowp_mat4x4 mat4x4;
|
||||||
|
#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
|
||||||
|
typedef mediump_mat2x2 mat2x2;
|
||||||
|
typedef mediump_mat2x3 mat2x3;
|
||||||
|
typedef mediump_mat2x4 mat2x4;
|
||||||
|
typedef mediump_mat3x2 mat3x2;
|
||||||
|
typedef mediump_mat3x3 mat3x3;
|
||||||
|
typedef mediump_mat3x4 mat3x4;
|
||||||
|
typedef mediump_mat4x2 mat4x2;
|
||||||
|
typedef mediump_mat4x3 mat4x3;
|
||||||
|
typedef mediump_mat4x4 mat4x4;
|
||||||
|
#else
|
||||||
|
//! 2 columns of 2 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat2x2 mat2x2;
|
||||||
|
|
||||||
|
//! 2 columns of 3 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat2x3 mat2x3;
|
||||||
|
|
||||||
|
//! 2 columns of 4 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat2x4 mat2x4;
|
||||||
|
|
||||||
|
//! 3 columns of 2 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat3x2 mat3x2;
|
||||||
|
|
||||||
|
//! 3 columns of 3 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat3x3 mat3x3;
|
||||||
|
|
||||||
|
//! 3 columns of 4 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat3x4 mat3x4;
|
||||||
|
|
||||||
|
//! 4 columns of 2 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat4x2 mat4x2;
|
||||||
|
|
||||||
|
//! 4 columns of 3 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat4x3 mat4x3;
|
||||||
|
|
||||||
|
//! 4 columns of 4 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_mat4x4 mat4x4;
|
||||||
|
|
||||||
|
#endif//GLM_PRECISION
|
||||||
|
|
||||||
|
//! 2 columns of 2 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef mat2x2 mat2;
|
||||||
|
|
||||||
|
//! 3 columns of 3 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef mat3x3 mat3;
|
||||||
|
|
||||||
|
//! 4 columns of 4 components matrix of floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef mat4x4 mat4;
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
// Double definition
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<double, lowp> lowp_dmat2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<double, mediump> mediump_dmat2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<double, highp> highp_dmat2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<double, lowp> lowp_dmat2x2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<double, mediump> mediump_dmat2x2;
|
||||||
|
|
||||||
|
/// 2 columns of 2 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x2<double, highp> highp_dmat2x2;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 2 columns of 3 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x3<double, lowp> lowp_dmat2x3;
|
||||||
|
|
||||||
|
/// 2 columns of 3 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x3<double, mediump> mediump_dmat2x3;
|
||||||
|
|
||||||
|
/// 2 columns of 3 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x3<double, highp> highp_dmat2x3;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 2 columns of 4 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x4<double, lowp> lowp_dmat2x4;
|
||||||
|
|
||||||
|
/// 2 columns of 4 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x4<double, mediump> mediump_dmat2x4;
|
||||||
|
|
||||||
|
/// 2 columns of 4 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat2x4<double, highp> highp_dmat2x4;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 3 columns of 2 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x2<double, lowp> lowp_dmat3x2;
|
||||||
|
|
||||||
|
/// 3 columns of 2 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x2<double, mediump> mediump_dmat3x2;
|
||||||
|
|
||||||
|
/// 3 columns of 2 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x2<double, highp> highp_dmat3x2;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<float, lowp> lowp_dmat3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<double, mediump> mediump_dmat3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<double, highp> highp_dmat3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<double, lowp> lowp_dmat3x3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<double, mediump> mediump_dmat3x3;
|
||||||
|
|
||||||
|
/// 3 columns of 3 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x3<double, highp> highp_dmat3x3;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 3 columns of 4 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x4<double, lowp> lowp_dmat3x4;
|
||||||
|
|
||||||
|
/// 3 columns of 4 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x4<double, mediump> mediump_dmat3x4;
|
||||||
|
|
||||||
|
/// 3 columns of 4 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat3x4<double, highp> highp_dmat3x4;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 4 columns of 2 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x2<double, lowp> lowp_dmat4x2;
|
||||||
|
|
||||||
|
/// 4 columns of 2 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x2<double, mediump> mediump_dmat4x2;
|
||||||
|
|
||||||
|
/// 4 columns of 2 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x2<double, highp> highp_dmat4x2;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 4 columns of 3 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x3<double, lowp> lowp_dmat4x3;
|
||||||
|
|
||||||
|
/// 4 columns of 3 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x3<double, mediump> mediump_dmat4x3;
|
||||||
|
|
||||||
|
/// 4 columns of 3 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x3<double, highp> highp_dmat4x3;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @addtogroup core_precision
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<double, lowp> lowp_dmat4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<double, mediump> mediump_dmat4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<double, highp> highp_dmat4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of low precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<double, lowp> lowp_dmat4x4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of medium precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<double, mediump> mediump_dmat4x4;
|
||||||
|
|
||||||
|
/// 4 columns of 4 components matrix of high precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
|
||||||
|
typedef tmat4x4<double, highp> highp_dmat4x4;
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
#if(defined(GLM_PRECISION_LOWP_DOUBLE))
|
||||||
|
typedef lowp_dmat2x2 dmat2x2;
|
||||||
|
typedef lowp_dmat2x3 dmat2x3;
|
||||||
|
typedef lowp_dmat2x4 dmat2x4;
|
||||||
|
typedef lowp_dmat3x2 dmat3x2;
|
||||||
|
typedef lowp_dmat3x3 dmat3x3;
|
||||||
|
typedef lowp_dmat3x4 dmat3x4;
|
||||||
|
typedef lowp_dmat4x2 dmat4x2;
|
||||||
|
typedef lowp_dmat4x3 dmat4x3;
|
||||||
|
typedef lowp_dmat4x4 dmat4x4;
|
||||||
|
#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
|
||||||
|
typedef mediump_dmat2x2 dmat2x2;
|
||||||
|
typedef mediump_dmat2x3 dmat2x3;
|
||||||
|
typedef mediump_dmat2x4 dmat2x4;
|
||||||
|
typedef mediump_dmat3x2 dmat3x2;
|
||||||
|
typedef mediump_dmat3x3 dmat3x3;
|
||||||
|
typedef mediump_dmat3x4 dmat3x4;
|
||||||
|
typedef mediump_dmat4x2 dmat4x2;
|
||||||
|
typedef mediump_dmat4x3 dmat4x3;
|
||||||
|
typedef mediump_dmat4x4 dmat4x4;
|
||||||
|
#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
|
||||||
|
|
||||||
|
//! 2 * 2 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat2x2 dmat2;
|
||||||
|
|
||||||
|
//! 3 * 3 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat3x3 dmat3;
|
||||||
|
|
||||||
|
//! 4 * 4 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat4x4 dmat4;
|
||||||
|
|
||||||
|
//! 2 * 2 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat2x2 dmat2x2;
|
||||||
|
|
||||||
|
//! 2 * 3 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat2x3 dmat2x3;
|
||||||
|
|
||||||
|
//! 2 * 4 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat2x4 dmat2x4;
|
||||||
|
|
||||||
|
//! 3 * 2 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat3x2 dmat3x2;
|
||||||
|
|
||||||
|
/// 3 * 3 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat3x3 dmat3x3;
|
||||||
|
|
||||||
|
/// 3 * 4 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat3x4 dmat3x4;
|
||||||
|
|
||||||
|
/// 4 * 2 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat4x2 dmat4x2;
|
||||||
|
|
||||||
|
/// 4 * 3 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat4x3 dmat4x3;
|
||||||
|
|
||||||
|
/// 4 * 4 matrix of double-precision floating-point numbers.
|
||||||
|
///
|
||||||
|
/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
|
||||||
|
typedef highp_dmat4x4 dmat4x4;
|
||||||
|
|
||||||
|
#endif//GLM_PRECISION
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
}//namespace glm
|
3
dependencies/glm/detail/type_mat.inl
vendored
Normal file
3
dependencies/glm/detail/type_mat.inl
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_mat.inl
|
||||||
|
|
183
dependencies/glm/detail/type_mat2x2.hpp
vendored
Normal file
183
dependencies/glm/detail/type_mat2x2.hpp
vendored
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_mat2x2.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../fwd.hpp"
|
||||||
|
#include "type_vec2.hpp"
|
||||||
|
#include "type_mat.hpp"
|
||||||
|
#include <limits>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
template <typename T, precision P = defaultp>
|
||||||
|
struct tmat2x2
|
||||||
|
{
|
||||||
|
typedef tvec2<T, P> col_type;
|
||||||
|
typedef tvec2<T, P> row_type;
|
||||||
|
typedef tmat2x2<T, P> type;
|
||||||
|
typedef tmat2x2<T, P> transpose_type;
|
||||||
|
typedef T value_type;
|
||||||
|
|
||||||
|
private:
|
||||||
|
col_type value[2];
|
||||||
|
|
||||||
|
public:
|
||||||
|
// -- Constructors --
|
||||||
|
|
||||||
|
GLM_FUNC_DECL tmat2x2() GLM_DEFAULT_CTOR;
|
||||||
|
GLM_FUNC_DECL tmat2x2(tmat2x2<T, P> const & m) GLM_DEFAULT;
|
||||||
|
template <precision Q>
|
||||||
|
GLM_FUNC_DECL tmat2x2(tmat2x2<T, Q> const & m);
|
||||||
|
|
||||||
|
GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x2(ctor);
|
||||||
|
GLM_FUNC_DECL explicit tmat2x2(T scalar);
|
||||||
|
GLM_FUNC_DECL tmat2x2(
|
||||||
|
T const & x1, T const & y1,
|
||||||
|
T const & x2, T const & y2);
|
||||||
|
GLM_FUNC_DECL tmat2x2(
|
||||||
|
col_type const & v1,
|
||||||
|
col_type const & v2);
|
||||||
|
|
||||||
|
// -- Conversions --
|
||||||
|
|
||||||
|
template <typename U, typename V, typename M, typename N>
|
||||||
|
GLM_FUNC_DECL tmat2x2(
|
||||||
|
U const & x1, V const & y1,
|
||||||
|
M const & x2, N const & y2);
|
||||||
|
|
||||||
|
template <typename U, typename V>
|
||||||
|
GLM_FUNC_DECL tmat2x2(
|
||||||
|
tvec2<U, P> const & v1,
|
||||||
|
tvec2<V, P> const & v2);
|
||||||
|
|
||||||
|
// -- Matrix conversions --
|
||||||
|
|
||||||
|
template <typename U, precision Q>
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x2<U, Q> const & m);
|
||||||
|
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x3<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x4<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x3<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x2<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x4<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x2<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x4<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x3<T, P> const & x);
|
||||||
|
|
||||||
|
// -- Accesses --
|
||||||
|
|
||||||
|
typedef length_t length_type;
|
||||||
|
GLM_FUNC_DECL static length_type length(){return 2;}
|
||||||
|
|
||||||
|
GLM_FUNC_DECL col_type & operator[](length_type i);
|
||||||
|
GLM_FUNC_DECL col_type const & operator[](length_type i) const;
|
||||||
|
|
||||||
|
// -- Unary arithmetic operators --
|
||||||
|
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<T, P> const & v) GLM_DEFAULT;
|
||||||
|
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<U, P> const & m);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator+=(U s);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator+=(tmat2x2<U, P> const & m);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator-=(U s);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator-=(tmat2x2<U, P> const & m);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator*=(U s);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator*=(tmat2x2<U, P> const & m);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator/=(U s);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator/=(tmat2x2<U, P> const & m);
|
||||||
|
|
||||||
|
// -- Increment and decrement operators --
|
||||||
|
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator++ ();
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> & operator-- ();
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator++(int);
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator--(int);
|
||||||
|
};
|
||||||
|
|
||||||
|
// -- Unary operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m);
|
||||||
|
|
||||||
|
// -- Binary operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m, T scalar);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator+(T scalar, tmat2x2<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m, T scalar);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator-(T scalar, tmat2x2<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m, T scalar);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator*(T scalar, tmat2x2<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator*(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator*(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat3x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat4x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m, T scalar);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator/(T scalar, tmat2x2<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator/(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator/(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
|
||||||
|
|
||||||
|
// -- Boolean operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL bool operator==(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL bool operator!=(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
|
||||||
|
} //namespace glm
|
||||||
|
|
||||||
|
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||||
|
#include "type_mat2x2.inl"
|
||||||
|
#endif
|
484
dependencies/glm/detail/type_mat2x2.inl
vendored
Normal file
484
dependencies/glm/detail/type_mat2x2.inl
vendored
Normal file
@ -0,0 +1,484 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_mat2x2.inl
|
||||||
|
|
||||||
|
#include "func_matrix.hpp"
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
// -- Constructors --
|
||||||
|
|
||||||
|
# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2()
|
||||||
|
{
|
||||||
|
# ifndef GLM_FORCE_NO_CTOR_INIT
|
||||||
|
this->value[0] = col_type(1, 0);
|
||||||
|
this->value[1] = col_type(0, 1);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if !GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m.value[0];
|
||||||
|
this->value[1] = m.value[1];
|
||||||
|
}
|
||||||
|
# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <precision Q>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<T, Q> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m.value[0];
|
||||||
|
this->value[1] = m.value[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat2x2<T, P>::tmat2x2(ctor)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(T scalar)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(scalar, 0);
|
||||||
|
this->value[1] = col_type(0, scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2
|
||||||
|
(
|
||||||
|
T const & x0, T const & y0,
|
||||||
|
T const & x1, T const & y1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(x0, y0);
|
||||||
|
this->value[1] = col_type(x1, y1);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(col_type const & v0, col_type const & v1)
|
||||||
|
{
|
||||||
|
this->value[0] = v0;
|
||||||
|
this->value[1] = v1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Conversion constructors --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename X1, typename Y1, typename X2, typename Y2>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2
|
||||||
|
(
|
||||||
|
X1 const & x1, Y1 const & y1,
|
||||||
|
X2 const & x2, Y2 const & y2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(static_cast<T>(x1), value_type(y1));
|
||||||
|
this->value[1] = col_type(static_cast<T>(x2), value_type(y2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename V1, typename V2>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tvec2<V1, P> const & v1, tvec2<V2, P> const & v2)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(v1);
|
||||||
|
this->value[1] = col_type(v2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- mat2x2 matrix conversions --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U, precision Q>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<U, Q> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m[0];
|
||||||
|
this->value[1] = m[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m[0];
|
||||||
|
this->value[1] = m[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Accesses --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type & tmat2x2<T, P>::operator[](typename tmat2x2<T, P>::length_type i)
|
||||||
|
{
|
||||||
|
assert(i < this->length());
|
||||||
|
return this->value[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type const & tmat2x2<T, P>::operator[](typename tmat2x2<T, P>::length_type i) const
|
||||||
|
{
|
||||||
|
assert(i < this->length());
|
||||||
|
return this->value[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Unary updatable operators --
|
||||||
|
|
||||||
|
# if !GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator=(tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m[0];
|
||||||
|
this->value[1] = m[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator=(tmat2x2<U, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m[0];
|
||||||
|
this->value[1] = m[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator+=(U scalar)
|
||||||
|
{
|
||||||
|
this->value[0] += scalar;
|
||||||
|
this->value[1] += scalar;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator+=(tmat2x2<U, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] += m[0];
|
||||||
|
this->value[1] += m[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator-=(U scalar)
|
||||||
|
{
|
||||||
|
this->value[0] -= scalar;
|
||||||
|
this->value[1] -= scalar;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator-=(tmat2x2<U, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] -= m[0];
|
||||||
|
this->value[1] -= m[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator*=(U scalar)
|
||||||
|
{
|
||||||
|
this->value[0] *= scalar;
|
||||||
|
this->value[1] *= scalar;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator*=(tmat2x2<U, P> const & m)
|
||||||
|
{
|
||||||
|
return (*this = *this * m);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator/=(U scalar)
|
||||||
|
{
|
||||||
|
this->value[0] /= scalar;
|
||||||
|
this->value[1] /= scalar;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator/=(tmat2x2<U, P> const & m)
|
||||||
|
{
|
||||||
|
return *this *= inverse(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Increment and decrement operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator++()
|
||||||
|
{
|
||||||
|
++this->value[0];
|
||||||
|
++this->value[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator--()
|
||||||
|
{
|
||||||
|
--this->value[0];
|
||||||
|
--this->value[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> tmat2x2<T, P>::operator++(int)
|
||||||
|
{
|
||||||
|
tmat2x2<T, P> Result(*this);
|
||||||
|
++*this;
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> tmat2x2<T, P>::operator--(int)
|
||||||
|
{
|
||||||
|
tmat2x2<T, P> Result(*this);
|
||||||
|
--*this;
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Unary arithmetic operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
-m[0],
|
||||||
|
-m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Binary arithmetic operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m, T scalar)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m[0] + scalar,
|
||||||
|
m[1] + scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(T scalar, tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m[0] + scalar,
|
||||||
|
m[1] + scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m1[0] + m2[0],
|
||||||
|
m1[1] + m2[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m, T scalar)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m[0] - scalar,
|
||||||
|
m[1] - scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(T scalar, tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
scalar - m[0],
|
||||||
|
scalar - m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m1[0] - m2[0],
|
||||||
|
m1[1] - m2[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat2x2<T, P> const & m, T scalar)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m[0] * scalar,
|
||||||
|
m[1] * scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(T scalar, tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m[0] * scalar,
|
||||||
|
m[1] * scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type operator*
|
||||||
|
(
|
||||||
|
tmat2x2<T, P> const & m,
|
||||||
|
typename tmat2x2<T, P>::row_type const & v
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return tvec2<T, P>(
|
||||||
|
m[0][0] * v.x + m[1][0] * v.y,
|
||||||
|
m[0][1] * v.x + m[1][1] * v.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::row_type operator*
|
||||||
|
(
|
||||||
|
typename tmat2x2<T, P>::col_type const & v,
|
||||||
|
tmat2x2<T, P> const & m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return tvec2<T, P>(
|
||||||
|
v.x * m[0][0] + v.y * m[0][1],
|
||||||
|
v.x * m[1][0] + v.y * m[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
|
||||||
|
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
|
||||||
|
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
|
||||||
|
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat3x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat3x2<T, P>(
|
||||||
|
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
|
||||||
|
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
|
||||||
|
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
|
||||||
|
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
|
||||||
|
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
|
||||||
|
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat4x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat4x2<T, P>(
|
||||||
|
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
|
||||||
|
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
|
||||||
|
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
|
||||||
|
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
|
||||||
|
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
|
||||||
|
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
|
||||||
|
m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],
|
||||||
|
m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(tmat2x2<T, P> const & m, T scalar)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
m[0] / scalar,
|
||||||
|
m[1] / scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(T scalar, tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
return tmat2x2<T, P>(
|
||||||
|
scalar / m[0],
|
||||||
|
scalar / m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type operator/(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v)
|
||||||
|
{
|
||||||
|
return inverse(m) * v;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::row_type operator/(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
return v * inverse(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
tmat2x2<T, P> m1_copy(m1);
|
||||||
|
return m1_copy /= m2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Boolean operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER bool operator==(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return (m1[0] == m2[0]) && (m1[1] == m2[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER bool operator!=(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return (m1[0] != m2[0]) || (m1[1] != m2[1]);
|
||||||
|
}
|
||||||
|
} //namespace glm
|
165
dependencies/glm/detail/type_mat2x3.hpp
vendored
Normal file
165
dependencies/glm/detail/type_mat2x3.hpp
vendored
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_mat2x3.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../fwd.hpp"
|
||||||
|
#include "type_vec2.hpp"
|
||||||
|
#include "type_vec3.hpp"
|
||||||
|
#include "type_mat.hpp"
|
||||||
|
#include <limits>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
template <typename T, precision P = defaultp>
|
||||||
|
struct tmat2x3
|
||||||
|
{
|
||||||
|
typedef tvec3<T, P> col_type;
|
||||||
|
typedef tvec2<T, P> row_type;
|
||||||
|
typedef tmat2x3<T, P> type;
|
||||||
|
typedef tmat3x2<T, P> transpose_type;
|
||||||
|
typedef T value_type;
|
||||||
|
|
||||||
|
private:
|
||||||
|
col_type value[2];
|
||||||
|
|
||||||
|
public:
|
||||||
|
// -- Constructors --
|
||||||
|
|
||||||
|
GLM_FUNC_DECL tmat2x3() GLM_DEFAULT_CTOR;
|
||||||
|
GLM_FUNC_DECL tmat2x3(tmat2x3<T, P> const & m) GLM_DEFAULT;
|
||||||
|
template <precision Q>
|
||||||
|
GLM_FUNC_DECL tmat2x3(tmat2x3<T, Q> const & m);
|
||||||
|
|
||||||
|
GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x3(ctor);
|
||||||
|
GLM_FUNC_DECL explicit tmat2x3(T scalar);
|
||||||
|
GLM_FUNC_DECL tmat2x3(
|
||||||
|
T x0, T y0, T z0,
|
||||||
|
T x1, T y1, T z1);
|
||||||
|
GLM_FUNC_DECL tmat2x3(
|
||||||
|
col_type const & v0,
|
||||||
|
col_type const & v1);
|
||||||
|
|
||||||
|
// -- Conversions --
|
||||||
|
|
||||||
|
template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
|
||||||
|
GLM_FUNC_DECL tmat2x3(
|
||||||
|
X1 x1, Y1 y1, Z1 z1,
|
||||||
|
X2 x2, Y2 y2, Z2 z2);
|
||||||
|
|
||||||
|
template <typename U, typename V>
|
||||||
|
GLM_FUNC_DECL tmat2x3(
|
||||||
|
tvec3<U, P> const & v1,
|
||||||
|
tvec3<V, P> const & v2);
|
||||||
|
|
||||||
|
// -- Matrix conversions --
|
||||||
|
|
||||||
|
template <typename U, precision Q>
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x3<U, Q> const & m);
|
||||||
|
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x2<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x3<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x4<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x4<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x2<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x4<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x2<T, P> const & x);
|
||||||
|
GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x3<T, P> const & x);
|
||||||
|
|
||||||
|
// -- Accesses --
|
||||||
|
|
||||||
|
typedef length_t length_type;
|
||||||
|
GLM_FUNC_DECL static length_type length(){return 2;}
|
||||||
|
|
||||||
|
GLM_FUNC_DECL col_type & operator[](length_type i);
|
||||||
|
GLM_FUNC_DECL col_type const & operator[](length_type i) const;
|
||||||
|
|
||||||
|
// -- Unary arithmetic operators --
|
||||||
|
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator=(tmat2x3<T, P> const & m) GLM_DEFAULT;
|
||||||
|
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator=(tmat2x3<U, P> const & m);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator+=(U s);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator+=(tmat2x3<U, P> const & m);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator-=(U s);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator-=(tmat2x3<U, P> const & m);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator*=(U s);
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator/=(U s);
|
||||||
|
|
||||||
|
// -- Increment and decrement operators --
|
||||||
|
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator++ ();
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> & operator-- ();
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator++(int);
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator--(int);
|
||||||
|
};
|
||||||
|
|
||||||
|
// -- Unary operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m);
|
||||||
|
|
||||||
|
// -- Binary operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m, T scalar);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m, T scalar);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat2x3<T, P> const & m, T scalar);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator*(T scalar, tmat2x3<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL typename tmat2x3<T, P>::col_type operator*(tmat2x3<T, P> const & m, typename tmat2x3<T, P>::row_type const & v);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL typename tmat2x3<T, P>::row_type operator*(typename tmat2x3<T, P>::col_type const & v, tmat2x3<T, P> const & m);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat2x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat3x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat4x2<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator/(tmat2x3<T, P> const & m, T scalar);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL tmat2x3<T, P> operator/(T scalar, tmat2x3<T, P> const & m);
|
||||||
|
|
||||||
|
// -- Boolean operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL bool operator==(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_DECL bool operator!=(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);
|
||||||
|
}//namespace glm
|
||||||
|
|
||||||
|
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||||
|
#include "type_mat2x3.inl"
|
||||||
|
#endif
|
458
dependencies/glm/detail/type_mat2x3.inl
vendored
Normal file
458
dependencies/glm/detail/type_mat2x3.inl
vendored
Normal file
@ -0,0 +1,458 @@
|
|||||||
|
/// @ref core
|
||||||
|
/// @file glm/detail/type_mat2x3.inl
|
||||||
|
|
||||||
|
namespace glm
|
||||||
|
{
|
||||||
|
// -- Constructors --
|
||||||
|
|
||||||
|
# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3()
|
||||||
|
{
|
||||||
|
# ifndef GLM_FORCE_NO_CTOR_INIT
|
||||||
|
this->value[0] = col_type(1, 0, 0);
|
||||||
|
this->value[1] = col_type(0, 1, 0);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if !GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m.value[0];
|
||||||
|
this->value[1] = m.value[1];
|
||||||
|
}
|
||||||
|
# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <precision Q>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<T, Q> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m.value[0];
|
||||||
|
this->value[1] = m.value[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat2x3<T, P>::tmat2x3(ctor)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(T scalar)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(scalar, 0, 0);
|
||||||
|
this->value[1] = col_type(0, scalar, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3
|
||||||
|
(
|
||||||
|
T x0, T y0, T z0,
|
||||||
|
T x1, T y1, T z1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(x0, y0, z0);
|
||||||
|
this->value[1] = col_type(x1, y1, z1);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(col_type const & v0, col_type const & v1)
|
||||||
|
{
|
||||||
|
this->value[0] = v0;
|
||||||
|
this->value[1] = v1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Conversion constructors --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <
|
||||||
|
typename X1, typename Y1, typename Z1,
|
||||||
|
typename X2, typename Y2, typename Z2>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3
|
||||||
|
(
|
||||||
|
X1 x1, Y1 y1, Z1 z1,
|
||||||
|
X2 x2, Y2 y2, Z2 z2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1));
|
||||||
|
this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename V1, typename V2>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tvec3<V1, P> const & v1, tvec3<V2, P> const & v2)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(v1);
|
||||||
|
this->value[1] = col_type(v2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Matrix conversions --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U, precision Q>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<U, Q> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0], 0);
|
||||||
|
this->value[1] = col_type(m[1], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0], 0);
|
||||||
|
this->value[1] = col_type(m[1], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x4<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0]);
|
||||||
|
this->value[1] = col_type(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x2<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = col_type(m[0], 0);
|
||||||
|
this->value[1] = col_type(m[1], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m[0];
|
||||||
|
this->value[1] = m[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Accesses --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type & tmat2x3<T, P>::operator[](typename tmat2x3<T, P>::length_type i)
|
||||||
|
{
|
||||||
|
assert(i < this->length());
|
||||||
|
return this->value[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type const & tmat2x3<T, P>::operator[](typename tmat2x3<T, P>::length_type i) const
|
||||||
|
{
|
||||||
|
assert(i < this->length());
|
||||||
|
return this->value[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Unary updatable operators --
|
||||||
|
|
||||||
|
# if !GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator=(tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m[0];
|
||||||
|
this->value[1] = m[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator=(tmat2x3<U, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] = m[0];
|
||||||
|
this->value[1] = m[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator+=(U s)
|
||||||
|
{
|
||||||
|
this->value[0] += s;
|
||||||
|
this->value[1] += s;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator+=(tmat2x3<U, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] += m[0];
|
||||||
|
this->value[1] += m[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator-=(U s)
|
||||||
|
{
|
||||||
|
this->value[0] -= s;
|
||||||
|
this->value[1] -= s;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator-=(tmat2x3<U, P> const & m)
|
||||||
|
{
|
||||||
|
this->value[0] -= m[0];
|
||||||
|
this->value[1] -= m[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator*=(U s)
|
||||||
|
{
|
||||||
|
this->value[0] *= s;
|
||||||
|
this->value[1] *= s;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
template <typename U>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator/=(U s)
|
||||||
|
{
|
||||||
|
this->value[0] /= s;
|
||||||
|
this->value[1] /= s;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Increment and decrement operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator++()
|
||||||
|
{
|
||||||
|
++this->value[0];
|
||||||
|
++this->value[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator--()
|
||||||
|
{
|
||||||
|
--this->value[0];
|
||||||
|
--this->value[1];
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> tmat2x3<T, P>::operator++(int)
|
||||||
|
{
|
||||||
|
tmat2x3<T, P> Result(*this);
|
||||||
|
++*this;
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> tmat2x3<T, P>::operator--(int)
|
||||||
|
{
|
||||||
|
tmat2x3<T, P> Result(*this);
|
||||||
|
--*this;
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Unary arithmetic operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
-m[0],
|
||||||
|
-m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Binary arithmetic operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m, T scalar)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
m[0] + scalar,
|
||||||
|
m[1] + scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
m1[0] + m2[0],
|
||||||
|
m1[1] + m2[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m, T scalar)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
m[0] - scalar,
|
||||||
|
m[1] - scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
m1[0] - m2[0],
|
||||||
|
m1[1] - m2[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat2x3<T, P> const & m, T scalar)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
m[0] * scalar,
|
||||||
|
m[1] * scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(T scalar, tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
m[0] * scalar,
|
||||||
|
m[1] * scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type operator*
|
||||||
|
(
|
||||||
|
tmat2x3<T, P> const & m,
|
||||||
|
typename tmat2x3<T, P>::row_type const & v)
|
||||||
|
{
|
||||||
|
return typename tmat2x3<T, P>::col_type(
|
||||||
|
m[0][0] * v.x + m[1][0] * v.y,
|
||||||
|
m[0][1] * v.x + m[1][1] * v.y,
|
||||||
|
m[0][2] * v.x + m[1][2] * v.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::row_type operator*
|
||||||
|
(
|
||||||
|
typename tmat2x3<T, P>::col_type const & v,
|
||||||
|
tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
return typename tmat2x3<T, P>::row_type(
|
||||||
|
v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
|
||||||
|
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat2x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
|
||||||
|
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
|
||||||
|
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
|
||||||
|
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
|
||||||
|
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
|
||||||
|
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat3x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
T SrcA00 = m1[0][0];
|
||||||
|
T SrcA01 = m1[0][1];
|
||||||
|
T SrcA02 = m1[0][2];
|
||||||
|
T SrcA10 = m1[1][0];
|
||||||
|
T SrcA11 = m1[1][1];
|
||||||
|
T SrcA12 = m1[1][2];
|
||||||
|
|
||||||
|
T SrcB00 = m2[0][0];
|
||||||
|
T SrcB01 = m2[0][1];
|
||||||
|
T SrcB10 = m2[1][0];
|
||||||
|
T SrcB11 = m2[1][1];
|
||||||
|
T SrcB20 = m2[2][0];
|
||||||
|
T SrcB21 = m2[2][1];
|
||||||
|
|
||||||
|
tmat3x3<T, P> Result(uninitialize);
|
||||||
|
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
|
||||||
|
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
|
||||||
|
Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
|
||||||
|
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
|
||||||
|
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
|
||||||
|
Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
|
||||||
|
Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
|
||||||
|
Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
|
||||||
|
Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat4x2<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return tmat4x3<T, P>(
|
||||||
|
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
|
||||||
|
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
|
||||||
|
m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
|
||||||
|
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
|
||||||
|
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
|
||||||
|
m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
|
||||||
|
m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
|
||||||
|
m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
|
||||||
|
m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],
|
||||||
|
m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],
|
||||||
|
m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1],
|
||||||
|
m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator/(tmat2x3<T, P> const & m, T scalar)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
m[0] / scalar,
|
||||||
|
m[1] / scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER tmat2x3<T, P> operator/(T scalar, tmat2x3<T, P> const & m)
|
||||||
|
{
|
||||||
|
return tmat2x3<T, P>(
|
||||||
|
scalar / m[0],
|
||||||
|
scalar / m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Boolean operators --
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER bool operator==(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return (m1[0] == m2[0]) && (m1[1] == m2[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, precision P>
|
||||||
|
GLM_FUNC_QUALIFIER bool operator!=(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2)
|
||||||
|
{
|
||||||
|
return (m1[0] != m2[0]) || (m1[1] != m2[1]);
|
||||||
|
}
|
||||||
|
} //namespace glm
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user