From b49ad727eee161f50d4aff52106f4b8dc572de1f Mon Sep 17 00:00:00 2001 From: Braedon Lewis Date: Sun, 19 Mar 2023 12:57:34 -0400 Subject: [PATCH] Initial commit --- .gitattributes | 2 + .gitignore | 398 + beef/BeefProj.toml | 6 + beef/BeefSpace.toml | 5 + beef/BeefSpace_User.toml | 113 + beef/build/Debug_Win64/corlib/build.dat | Bin 0 -> 25276 bytes beef/build/Debug_Win64/corlib/corlib__.lib | Bin 0 -> 1547954 bytes .../Debug_Win64/raylib-beef/Beef042Dbg64.dll | Bin 0 -> 676864 bytes .../Debug_Win64/raylib-beef/Beef042RT64.dll | Bin 0 -> 617984 bytes beef/build/Debug_Win64/raylib-beef/build.dat | Bin 0 -> 1052 bytes .../Debug_Win64/raylib-beef/raylib-beef.exe | Bin 0 -> 1258496 bytes .../raylib-beef/raylib-beef.exe.build.txt | 2 + .../Debug_Win64/raylib-beef/raylib-beef__.lib | Bin 0 -> 1984 bytes .../raylib-beef/raylib-beef__emit.zip | Bin 0 -> 309 bytes ...terial_65E3F51EBA04C43B014C1B8CB85947E5.bf | 24 + ...Output_ED6325C5977DB8FA4BE0C46EC88ACA39.bf | 2077 +++ ...rogram_9CD33CC5116FD7C0FF9AA1893A3FA518.bf | 11 + ...Raylib_61745037C490FE35B4128EB7C738167F.bf | 2076 +++ ...exture_049E45A26EED18AEA81D51D8ADBC97CD.bf | 25 + beef/recovery/index.txt | 2 + beef/src/Program.bf | 11 + beef/src/test/AudioStream.bf | 32 + beef/src/test/BoneInfo.bf | 20 + beef/src/test/BoundingBox.bf | 20 + beef/src/test/Callbacks.bf | 25 + beef/src/test/Camera2D.bf | 28 + beef/src/test/Camera3D.bf | 34 + beef/src/test/Color.bf | 28 + beef/src/test/FilePathList.bf | 24 + beef/src/test/Font.bf | 36 + beef/src/test/GlyphInfo.bf | 32 + beef/src/test/Image.bf | 32 + beef/src/test/Material.bf | 24 + beef/src/test/MaterialMap.bf | 24 + beef/src/test/Matrix.bf | 76 + beef/src/test/Mesh.bf | 72 + beef/src/test/Model.bf | 48 + beef/src/test/ModelAnimation.bf | 28 + beef/src/test/Music.bf | 32 + beef/src/test/NPatchInfo.bf | 36 + beef/src/test/Ray.bf | 20 + beef/src/test/RayCollision.bf | 28 + beef/src/test/Raylib.bf | 2076 +++ beef/src/test/Rectangle.bf | 28 + beef/src/test/RenderTexture.bf | 26 + beef/src/test/Shader.bf | 20 + beef/src/test/Sound.bf | 20 + beef/src/test/Texture.bf | 34 + beef/src/test/Transform.bf | 24 + beef/src/test/Vector2.bf | 20 + beef/src/test/Vector3.bf | 24 + beef/src/test/Vector4.bf | 30 + beef/src/test/VrDeviceInfo.bf | 52 + beef/src/test/VrStereoConfig.bf | 44 + beef/src/test/Wave.bf | 32 + generator/API.cs | 140 + generator/Program.cs | 226 + generator/generator.csproj | 14 + raylib-api/.gitignore | 2 + raylib-api/LICENSE.md | 18 + raylib-api/Makefile | 46 + raylib-api/README.md | 58 + raylib-api/index.js | 9 + raylib-api/package.json | 28 + raylib-api/raygui.json | 2954 +++++ raylib-api/raygui.lua | 2543 ++++ raylib-api/raygui.txt | 874 ++ raylib-api/raygui.xml | 686 + raylib-api/raylib.json | 10933 ++++++++++++++++ raylib-api/raylib.lua | 7588 +++++++++++ raylib-api/raylib.txt | 4210 ++++++ raylib-api/raylib.xml | 2796 ++++ raylib-api/raymath.json | 1924 +++ raylib-api/raymath.lua | 1261 ++ raylib-api/raymath.txt | 807 ++ raylib-api/raymath.xml | 513 + raylib-api/reasings.json | 682 + raylib-api/reasings.lua | 346 + raylib-api/reasings.txt | 262 + raylib-api/reasings.xml | 187 + raylib-api/rlgl.json | 3264 +++++ raylib-api/rlgl.lua | 2529 ++++ raylib-api/rlgl.txt | 1516 +++ raylib-api/rlgl.xml | 815 ++ raylib-api/rmem.json | 493 + raylib-api/rmem.lua | 379 + raylib-api/rmem.txt | 206 + raylib-api/rmem.xml | 137 + raylib-api/rres.json | 462 + raylib-api/rres.lua | 408 + raylib-api/rres.txt | 195 + raylib-api/rres.xml | 121 + raylib-beef.sln | 25 + 93 files changed, 57538 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 beef/BeefProj.toml create mode 100644 beef/BeefSpace.toml create mode 100644 beef/BeefSpace_User.toml create mode 100644 beef/build/Debug_Win64/corlib/build.dat create mode 100644 beef/build/Debug_Win64/corlib/corlib__.lib create mode 100644 beef/build/Debug_Win64/raylib-beef/Beef042Dbg64.dll create mode 100644 beef/build/Debug_Win64/raylib-beef/Beef042RT64.dll create mode 100644 beef/build/Debug_Win64/raylib-beef/build.dat create mode 100644 beef/build/Debug_Win64/raylib-beef/raylib-beef.exe create mode 100644 beef/build/Debug_Win64/raylib-beef/raylib-beef.exe.build.txt create mode 100644 beef/build/Debug_Win64/raylib-beef/raylib-beef__.lib create mode 100644 beef/build/Debug_Win64/raylib-beef/raylib-beef__emit.zip create mode 100644 beef/recovery/Material_65E3F51EBA04C43B014C1B8CB85947E5.bf create mode 100644 beef/recovery/Output_ED6325C5977DB8FA4BE0C46EC88ACA39.bf create mode 100644 beef/recovery/Program_9CD33CC5116FD7C0FF9AA1893A3FA518.bf create mode 100644 beef/recovery/Raylib_61745037C490FE35B4128EB7C738167F.bf create mode 100644 beef/recovery/RenderTexture_049E45A26EED18AEA81D51D8ADBC97CD.bf create mode 100644 beef/recovery/index.txt create mode 100644 beef/src/Program.bf create mode 100644 beef/src/test/AudioStream.bf create mode 100644 beef/src/test/BoneInfo.bf create mode 100644 beef/src/test/BoundingBox.bf create mode 100644 beef/src/test/Callbacks.bf create mode 100644 beef/src/test/Camera2D.bf create mode 100644 beef/src/test/Camera3D.bf create mode 100644 beef/src/test/Color.bf create mode 100644 beef/src/test/FilePathList.bf create mode 100644 beef/src/test/Font.bf create mode 100644 beef/src/test/GlyphInfo.bf create mode 100644 beef/src/test/Image.bf create mode 100644 beef/src/test/Material.bf create mode 100644 beef/src/test/MaterialMap.bf create mode 100644 beef/src/test/Matrix.bf create mode 100644 beef/src/test/Mesh.bf create mode 100644 beef/src/test/Model.bf create mode 100644 beef/src/test/ModelAnimation.bf create mode 100644 beef/src/test/Music.bf create mode 100644 beef/src/test/NPatchInfo.bf create mode 100644 beef/src/test/Ray.bf create mode 100644 beef/src/test/RayCollision.bf create mode 100644 beef/src/test/Raylib.bf create mode 100644 beef/src/test/Rectangle.bf create mode 100644 beef/src/test/RenderTexture.bf create mode 100644 beef/src/test/Shader.bf create mode 100644 beef/src/test/Sound.bf create mode 100644 beef/src/test/Texture.bf create mode 100644 beef/src/test/Transform.bf create mode 100644 beef/src/test/Vector2.bf create mode 100644 beef/src/test/Vector3.bf create mode 100644 beef/src/test/Vector4.bf create mode 100644 beef/src/test/VrDeviceInfo.bf create mode 100644 beef/src/test/VrStereoConfig.bf create mode 100644 beef/src/test/Wave.bf create mode 100644 generator/API.cs create mode 100644 generator/Program.cs create mode 100644 generator/generator.csproj create mode 100644 raylib-api/.gitignore create mode 100644 raylib-api/LICENSE.md create mode 100644 raylib-api/Makefile create mode 100644 raylib-api/README.md create mode 100644 raylib-api/index.js create mode 100644 raylib-api/package.json create mode 100644 raylib-api/raygui.json create mode 100644 raylib-api/raygui.lua create mode 100644 raylib-api/raygui.txt create mode 100644 raylib-api/raygui.xml create mode 100644 raylib-api/raylib.json create mode 100644 raylib-api/raylib.lua create mode 100644 raylib-api/raylib.txt create mode 100644 raylib-api/raylib.xml create mode 100644 raylib-api/raymath.json create mode 100644 raylib-api/raymath.lua create mode 100644 raylib-api/raymath.txt create mode 100644 raylib-api/raymath.xml create mode 100644 raylib-api/reasings.json create mode 100644 raylib-api/reasings.lua create mode 100644 raylib-api/reasings.txt create mode 100644 raylib-api/reasings.xml create mode 100644 raylib-api/rlgl.json create mode 100644 raylib-api/rlgl.lua create mode 100644 raylib-api/rlgl.txt create mode 100644 raylib-api/rlgl.xml create mode 100644 raylib-api/rmem.json create mode 100644 raylib-api/rmem.lua create mode 100644 raylib-api/rmem.txt create mode 100644 raylib-api/rmem.xml create mode 100644 raylib-api/rres.json create mode 100644 raylib-api/rres.lua create mode 100644 raylib-api/rres.txt create mode 100644 raylib-api/rres.xml create mode 100644 raylib-beef.sln diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..426d76d --- /dev/null +++ b/.gitignore @@ -0,0 +1,398 @@ +## 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/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# 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/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml diff --git a/beef/BeefProj.toml b/beef/BeefProj.toml new file mode 100644 index 0000000..a6a50ca --- /dev/null +++ b/beef/BeefProj.toml @@ -0,0 +1,6 @@ +FileVersion = 1 + +[Project] +Name = "raylib-beef" +StartupObject = "beef.Program" +DefaultNamespace = "beef" diff --git a/beef/BeefSpace.toml b/beef/BeefSpace.toml new file mode 100644 index 0000000..88f36d8 --- /dev/null +++ b/beef/BeefSpace.toml @@ -0,0 +1,5 @@ +FileVersion = 1 +Projects = {raylib-beef = {Path = "."}} + +[Workspace] +StartupProject = "raylib-beef" diff --git a/beef/BeefSpace_User.toml b/beef/BeefSpace_User.toml new file mode 100644 index 0000000..75a5801 --- /dev/null +++ b/beef/BeefSpace_User.toml @@ -0,0 +1,113 @@ +FileVersion = 1 +LastConfig = "Debug" +LastPlatform = "Win64" +RecentFilesList = ["src\\Program.bf"] + +[MainWindow] +X = -1840 +Y = 127 +Width = 1468 +Height = 908 +ShowKind = "Maximized" + +[MainDockingFrame] +Type = "DockingFrame" +SplitType = 2 + +[[MainDockingFrame.DockedWidgets]] +RequestedWidth = 350.0 +RequestedHeight = 200.0 +SizePriority = 200.0 +Type = "DockingFrame" +SplitType = 1 + +[[MainDockingFrame.DockedWidgets.DockedWidgets]] +RequestedWidth = 200.0 +RequestedHeight = 200.0 +Type = "TabbedView" + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +Active = true +TabLabel = "Workspace" +TabWidth = 115.0 +Type = "ProjectPanel" + +[[MainDockingFrame.DockedWidgets.DockedWidgets]] +IsFillWidget = true +Permanent = true +RequestedWidth = 150.0 +RequestedHeight = 150.0 +SizePriority = 150.0 +DefaultDocumentsTabbedView = true +Type = "TabbedView" + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +Active = true +TabLabel = "Program.bf" +TabWidth = 106.0 +Type = "SourceViewPanel" +FilePath = "src\\Program.bf" +CursorPos = 76 +ProjectName = "raylib-beef" + +[[MainDockingFrame.DockedWidgets]] +RequestedWidth = 250.0 +RequestedHeight = 250.0 +Type = "DockingFrame" +SplitType = 1 + +[[MainDockingFrame.DockedWidgets.DockedWidgets]] +RequestedWidth = 250.0 +RequestedHeight = 250.0 +SizePriority = 0.2994652 +Type = "TabbedView" + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +TabLabel = "Memory" +TabWidth = 99.0 +Type = "MemoryPanel" +AutoResize = "Auto_Mul8" +RequestedWidth = 300.0 + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +TabLabel = "Watch" +TabWidth = 86.0 +Type = "WatchPanel" +Columns = [{Width = 200.0}, {Width = 200.0}, {Width = 200.0}] + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +Active = true +TabLabel = "Auto" +TabWidth = 77.0 +Type = "AutoWatchPanel" +Columns = [{Width = 200.0}, {Width = 200.0}, {Width = 200.0}] + +[[MainDockingFrame.DockedWidgets.DockedWidgets]] +RequestedWidth = 250.0 +RequestedHeight = 250.0 +SizePriority = 0.7005348 +Type = "TabbedView" + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +TabLabel = "Threads" +TabWidth = 97.0 +Type = "ThreadPanel" + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +TabLabel = "Call Stack" +TabWidth = 105.0 +Type = "CallStackPanel" + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +TabLabel = "Immediate" +TabWidth = 111.0 +Type = "ImmediatePanel" + +[[MainDockingFrame.DockedWidgets.DockedWidgets.Tabs]] +Active = true +TabLabel = "Output" +TabWidth = 90.0 +Type = "OutputPanel" + +[[BookmarkFolders]] +Title = "" diff --git a/beef/build/Debug_Win64/corlib/build.dat b/beef/build/Debug_Win64/corlib/build.dat new file mode 100644 index 0000000000000000000000000000000000000000..3e7b3a05f724c760e06f82ff12b86b18abec1db1 GIT binary patch literal 25276 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
  • X-!|IRxr54G>?z$tkgfb%2eIqG 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 z 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%0ACF6GO)Tw$Jmw*FMjWxS=cdc^-bp z%|7S8mvz^SL?334u)pciWuIro7jPrK5iJxhUdUGSb27y3^E^x1e%a?a>ZfdF|62Pz zZ(K_Ae`xzWy*Fs0ZEyB@4kcYng!9~oE5EkSbCmLPEY5R#lvmm38Gtu#pXX@2|EKNq zJb#Z2Bx2A5vd^=AuAd0j^dfu@eT750ldMhLVjEnWTtF{&~xrcPCb+)w*F z`RfG-m)T>Sd$iA!_Zhf&Yy-$iwu86NvwofX!0q$Amcgp{FSO4i8>dUlv!c$aCkY%< z?1$W>9!J{Ae#j!(oY~AE6WnXiNJzCG zGVwGS`X9u8$fV!PDMi^2x%E}?_7Q6#ypzbq?Lg!Pv4y`!nmgCgN#>Ei|Hinu-R zLt3IJzq>(^SDt|vbwCD11f&OQf8!Gw3XzlTY@K46ir#~Diswk!#X7|!M5S1#FdCHQ zJ6JauaoN=dM=)-t;=f*z@yOmNY6fD1V*?({RQy%KVuJ&dc-Y`r#*369E)@8*c{`~` zjt}M7KBq4?t5^E5tEh3*Z1Z*X86!oJi(Q!QpuvH3xUlVFmgM_vl6`SEYR`l6oqkS3m8#R@rARjp&c4JQ z6q`_W`knIchpN-gT281qB@|T-)V{<5QI&}Fe_T7i)6Vb3iMnUvB`M&zjP)hryk(6nInI;B zi8u?ia|Vvsm)QPc4~IPiZ9r{bV*c|gdhjZum3;|pkSmY79Z!P)xflBqWfb#o`w|Cb zUt-lNpex!Qd$BLEWQA60;@F*{l!uxJrWMq82{pTY+Lw5US|lTc&tklMuIx+Pk3W*M zFYzmaJK0x|bdf^*>+DMml^W>&uJ$EXFPC_^bayo!7p<0m%D%)yE0g`lEB)uPwflbj zsr@IobN`7rxc;A|c)(>pqRc9~-7G8om>0EC-fX=vq4^Fal?#ny>jqVGoL*HXx zVsvQVVA!L5i3Tc2)&23><8_P&K@xvrila)$h-j%s$6Q3rena68#e0Inm7ggnygWPw z3QrSAKta+IP+0z-K;bPO9MQTh@_QimB_>iV*c!Jlam6y0_cxcat7!WYmq}{f&h{nd zbEzoe^pYa>C9>WXowdQYk3M+&68}I2;eVlhiCM_0cd;+A7HQqy>`O>mmwgG5af^Kk z5%2AneTm~e2yonK>i$8UQCA|9xAHaqBe}R1oTPD#D zWnW^`4^-GcYhR*Z@$PtVQ1&H0r64u>skrbx78V|D??Q$ZcoWF*XZ)$iAmQDS;fJv= zQJ|W@Jm4tu8vg%5`x1|H??|Q!i`^=`iQYenKehJ~-o5ufw0(&>sYR2zKdgO;<%*vO}vTD{{??)=Ow(S&OJ|E#A1YFAi+5N166=Y9 zo>TTEEHY_&uF8(x2R+w)wx(*o$G$`uJ+_qg?QCpgZ}uggqynf~F{}{p=0iFr#lFOJ z9g}KbVj@u~b?qA#t4`Y!EE+ygu=v~gDP-+B0tqlkdIAic_X394?=%>`$G*g*8}<_n z-W2;1zo&vY7!u>JW4g{bjK7Xao^dMd8lv_a3`sNVJ@?CrC_q zUqRwcn9f~xSK0|AAR*}qNPPMWAo0ax8WJJ_-M4*-an~ONB<`h-T_91Xqf#Joi;hWw z#8t%XHzZ!j-xDNm;0Sgsb##`x0`n z+|9nkK+%9W5c?9F=z7F&<3iVhlUQL6PUz~S*o4sa4CUVs zq3glgmpGi;9Q$QoBGl`D%D%+oukB`EB8Y(QUt(XPn7a05Ut;A?_F-S*SrWy*#3)n= zlzoZS4;`3&iATx*efA}$l4n=@67T1-vda~F+y53jiP)FuJUhj{#EpD|;5?w6a_wA% zldvx_L`8{^x(Hv)eJ;O?oX=1O_9g12^zZ@Lm$>gbsZQ)mc-S8HVPB$^^#4Ko5_3-A zBHT%D$_t?1XJ6tMFVcmieTlmW#@vnvWzTee`)f(tqkV}FB}vAcIs)g?fB%AC%= z)0$WRHmK{klcBWGX7UpoU@P#*T3q9sgIJHJxdf+cORcv{DZX*l6xfgMJTjJHB@HDL z-Wb8)nLm=|i?#a0EiPZI-N$p{`25xL&64?(*7&Qx!4Tk-L%5`1TCc}Oz2lL6qvZWb zJOW6`a@MG!NpJi&O`*6nX!h@&5j=^%oUwP&&QKab=)z{IaoM5Se_^l z%MW6b?yC4>ryG`HXD0=Ka+NDbOzI`>aMgqd$4;glWxO01c_{Z`iYv1^1J;K;3>_Tw zVxmDiwWt3wzDQ}$f843svx&CE+w%k&fW~>3qv-jpQZ@q&&6KSMircoVru{vn26)RB zQ=Vd*3%;{st_&7KRBA2dUDGM2VHUp|xf&NwIYG?YP-iADaWORhaI-76*oR5F@O;Jy zgLSQw*7>WyE@N!-Q|#G^^^7uWS((*F$2~lQ%&X809y~}jccFk9B19iueyg7G9DLMh_kwh0m zE;F`-)Tteqq-~%o?9fEd&S(Bib4CsmuH+)xa02aDO}9tZs0QCclKp0zYH%O$C=Y_!j_hxR>o31_JOTe1aB1hA|@ z9!4aubz1*-iJUi7jfMMLRzKUuZ=e2i7SeeoI{G4sUMbNz5n>&)EnMug7Rxy00;A=`@NQrhkM}WLfsz%w^l%OGoC*PnwZ>PncCIXTrADCD zUh**S-*i;)?ihbxq=nYS*Ve?U8fQLGU);WBc<}rIs4E5YE%y>UvFy)oOT*OgEBHkz zXKgIIg9v&4yeEhKSoZxSnBl?VsE-~{AHASHiY7mLey5MdNrHeX#muFQNBHaX&=g8L zUrLkCd!!vhRFT)JB7c-DvU;Z?-6Zg(IF8`imboBb!XCi*d&VQne3oG+`7wzKnwj#o#vSoQ^>G*UOhaooNhNXU3MB>E8%A+vM?_{I6w2!WQOvWrbT!i-^rU16u$DO4j*} z3$~U;FUo)e#bea5?As_`+lLBPLLp3i!sUo&oM)C~hw#ak=t1V57d*tsVrez{@(P>t zVp6g?da1?Me(Ow`>U@#reCE%55gi&cPgrQ?iy08irM^d6ejs{PZWRW?vi#PKyuvks z%|=-X^CdS2nLofs$rmbUtXDAaYb+SVvY!p6u_J`Q-C%B&89l4SEO~Fjkg+p;bLbHj z$|GEYIDrY$lS!-|tVa2*@j^<(xF|5{1d(Ie<0#8af1eV@Hw)rcY5P>;7_^Ep*o3?) zcbu9q1X9~GS2T7hFe}-r^Q5Gb*5I`}HEU$b{<>@X{ycu?_NhX7Oe|4uvXvi7PjoBi zsaC3n={5qW_`fcE;!q;5v+}$`R_c4K1^U%zuIH7?p(U1m=UCPrOo0ioM&QS^FNVBg z*;gw6>#^*g;4!UDW?O5Ff6xJ?MT2re+oCt71*$&^f15S+sB+%O;%)orMK1d{7djln znkJp)dKsuVI!-dHU$>({0Z^yTB}T$($yC-fXplcL#Z~`0`I>!^V|f=Gx4#yps{TTl(B+`2gxc;D2IT&B^ZDVs zck_1>cIoCX$h05bTypJxbTcu$8vis=%2MVjwMJvVaGhDbvCLXs79E;qMxW~;2-)&Q zrmwzJ^g$<&GOdwW33}9Lwe#ds_=96vPHykvi+Ya@Z}7BqI?Y*D#$Cpv?Gv13){2f^ zq%5znQX+h_(1imQH$&HJUMIhTfzt>0i@Y7OhB= zdV(L9MUOsH@r8Y?A!XJQOh}iNte!kL*&jC27S*4{(jV$n{SivHnjs#V6^LfcR8->X z^}e2tGAdl^YxywKS_Jj$)6*@z5&QtXB_twf+-~ z>(x!}6?+|o-NZatnE$S7Z}=NmG_1_+4OJ^ekvYpuXLW&-4W@c_TFYb*QQrl=T9l_Q%ASC63@}a?mj?p3IC^Vx+Pq%X-WHTyD53JA5I^ za{oxOax=RmEyQUm`*aD$=G*5$<#jw4a~mqz?ZAm;Pp3M8JG2n(75a+y?rP2=v0sB? zmb*PuzB``pEcXKZ)UZ&ZS|aY}aCy@n0>o$#fq%JWX8B9jjnDK)>j}EdlC|UA*ajC0 z<)aNVi1OvHvsxeEYBWaY(&t<41H_X*zh!%7xYHFK9W#cK&WHr6*IKRR>AX{aXf*TC zl68~MvD$ga^Mhl--|o>0HQZl2W6go;C4Q^Ib5XS4^m%mGvHHVpt9-{DqCPvaq-D}# z#yr0ISMzusQ~y@gk#Bm_gT)c|m$>xtV{wFHV7DH3a~hp`#~-=U<;R|$KQbXFalg4j z9iyGgBsYByKSq_1dCwE}M=oq&mn@>(njRjze`tZg;MgI zE7)VtkeJ9Yk20nx6PR_mMyBSp4Le$`%B;O5lxoCK8gXY%+fdaAf8>}zWCE7hzZ4`#e`ld?gb;*H9a!B~Z4}$umOI)Dz%_mz zJlf=?ba^0v2iX0QK7q)sE;H@aiKP0izmvgeKwF;c?o)Yj;yjK2@0-^7829FUwK&)( zVYo7u{pd|;4)r_*X&yTbiy!l(mn`!3S7I3iv-PbV*WZR!^Zr>?pd~)8qh^`b=p3PgO?3#IsqB3oWm+S4ZQY|c%5)y#Q82L6 zlC4{Ae+8i;O8YEOa_UiYK2H8~|G=-zr1w&N*|3#wY5$PI+Oz zv_Q4SX?R%^=7aQSkR}f|hy~b7$ZWcx2<)Drmo_|+C}O8JynTdf!wM3Sr**Xfn48%07Fyb4 z-zY>)H2bBag-n%*YpC(H*ETQ}gpt-&PY0*|rS{}sJA@G-biMr?>W$E|!B2J1%Yrd9WYM4b%9GJIi!ALSMuWbzJ@4 zCi?{E6#G#9Z4dhz3hg+;{)U^CtP439AE(F+Y*Y5Imp)%aP-Cb`{PM3MogSo(qdOzS+pS#CGEqsEye$^8p|teLYDP z0^20&&Kky8(Dn_(9;YpTyGfPqv|I3~F2(y9qNOU^9EMqslc;4~AncqMWeqe+TbrCO z61I~_=@3G@VBR}K3Nb+@BlmaEpy7RU==TRzC7T&Sg6*lc5lK1+CCvp`jYzMiZWhb z7&E6gNAj`7zMRmgK>mE=1z$fiIx>eh%kg$MqnUNQWWL0V^vm^^tPJK@!!zNYjPGR) zaizC#J!U*q#r(XE_Zh#&RSHx3h4099OctE!1zvW??WWK)N6%x=^mX>n0Bzwa;L^L{ z?NASMTK14KHF}A;?x`Dm4l$1D>w*~#t3sLf-3;pVrS_*Nq9r=q1#^zphmaYPW?iU< zUGyje!?crk9(I%h-3N(~x=f=Kt}X0leX>{h!?Q0jbKBaZnzyZGO;?z|A;xN!EIaD# zq0kZgcWGParv-b>%Mm#9b{X|0MnC*@w@{Trc%`Igxxb;}uBR~K&z)QS+IjV&TUzjx zA&WA)L38)N{|3f6I{4=}9k9H`RCusE_>bKR2?()_D2v@v~c6N&@g7t+Fm>xY1)M&m+~+MKr%kR`;P zO(xV#N7$>ODD0oh&*S_6*uP#c@O3|mV_ySevH}jY%XD@R>Em^}#Q@rWWsz=k9!;Ul zPlxx+7!zO~(DXLMLg(8xQXs<`E^-8st+d-cG@zOIi{{A($|y-XT0$pMm@l?6=DdNT z6pT8$>C+Qis*vzPV*v{fOcXsBAG43ml>J2bOoCqp-s#(s;qg6eLAULdYy!-^_e~PIItPN@$)x{C zO>#bo+)RDN<3*t#QRta!;{ww5h9_848@Ga0HVj)Z+wsQ6(Rv#>Z{*$OYpjzeD#}$U3W{U)LLb2lGSTyT3PRQ z;}Ku|mK$!l&L7FhE$h96ax$##D3-ZkJ!OXA2fGhHokd{4rt@RQ;O6dWj$q#4s_xw! z!Q%$kh;yX#>FqlhW6#7~b8Z^5PDa)=9&MS>59VjX`Ixy1x5E~4-j27U2XQrcl$5eG zYJO9)Y0`<(R%%CDDYYl+Hs*cQb3(7O-YtAPm`~cA;nVc2E{(YB@EY?z?Pr94L3Kpj zNW_a^HuhPr)oDjfxSbqFPnbaQY1qyB&|~&qAq+Lv6DZZ=ThDC`U2ZvlMDB3AtIat8 z4+Fx5+Y|8lwzhhLMd5Z&n=_Lj6NiLe_~vllT~T_%+R~D>p&V6G?)pLNL+-G<<5bMD zNBVz&BcquolT$>L;RRXh*q|mn^mk!%vGdtJ*i*m1xiviCy7QQbJhsOC=820x=X#lt zX8mW))M%}n%Pz|T{8p84OM@BK($@#hl{VT7*mcWA$c}oQsgY_MR{P8aUT%D8iG_h@@iU5ZQfY+E97OaXF{sDqGr1NikjaK<*oo& zJOU&zyIS*jc`n5IOz$1eno}5%7teg;{Zk*vCm(8jK{I?^4uzH@T>e^$x60r@mSx4V zueyp!-E5vA{@L0eE%)f~T5?)t9zM&$Je|iZ#9vsJWft;29mBytNVX`Vn9eIT6 z^L&jHrnwCibiO4)mU&(*Lbf!BKy1L**Q5!(7iH=(P0pUG+#cIDcKXb-%4 zITdg;OXIaEjW=p(fr?r4BC^Kl;1xKjRLs*rEl$OZPo-kI_7u9*|4;hc$9DNPxR-C) zlGH!$zXx~^P4)y1y;-s;$m?S@P=Mj8c2LM%PnvCyQ|Kut31q5XfO`}Lg9Ki1z|rAg zLVD>~jWQFZ@6>}r<0!9&a%(-l%cdW}bHiy(NBXSIf#}(xBgKHZEe~N@+qbr61ap1H z^S#0!7{iTM8qOFuEZs3=`iwJbaRd1)eAbX1tL?~;jIFJ%Ags}D{_y;a$Pm}o)~u9Z zroXydd2~nyWK?Mp^B`2QwY6LDLIf&#dnww?Ur}mZyu-J8V_D?FEF|$kkJZf@o?%8W zc9krm=vYfx$&&FMuw6;-NRJH3+S-~H96(cDx~cc=($x7rt76CMjlRewy#CID9>|Ba zhXR9K@nb3R2z`*J1T53L<)(=MN^r!tRn#has@WTK`z$XXX97Mt;R`Qjvk*1G*hzv= z>Od*#AJ$4y{@}x4AD?CN0k#!0)BKU1e#Ih)@AbQk0hLw77tp_A$G{dv6xP#%!kBQS z%xJ}0BTuz*De6r%Ys=VWw%X@H0hL<4S%7#L&S-dr@kZ?VYz}B`4b8EZm$C!&$Lg&I z&(wa6u!B2&)+VELyObF(?-CSLnvk@X_!e-;*Nz{GNz?s92Y}q zAM#KNzOuN$>?1XfUiGZe2Q2vO0SpvJ>q)Ezg$r1XjDU6NMCSPs%oHOFLSda6Nh8b5 zGWw<&SzZ_{{w#t8MqeMsQoLTm+$%LJ2y@TeTSd6S$ZD#iWTL8wVqVtG)WI5~Z$whe zNWH{RQQ$ZUmEFT?I0E;#W_8(^K&0%cfK~Q0!oN43FPn}^k!&8bt!%l+dG8Ui?Cw{{ z8eDFeg|FH3&c$E9U_EVOEf2s&16>*qL-Ya;>&~5ns;! zW<2_PGOo76ceorQE!INf}t!yf3DFWr?gfm+HXs;<*iDrhqBMM>9}$6xGuh- z{iH5SGI#Mr*xl@3>3I2oc)e$_UyWnGs!LPn^ykPq*@mM2@)It-mhPmLmdK@hD>1LH_AwaNP_6nY7 zB3g(!wS``rTYz^|ZVeP(9&5&O&MSJd@oMWyaLN*5d-jwYJ&5h)VK1mt;l^Lzgs_=4 z-mEXKo^bQ}&?Vv9b238Zmd|slOw({@w~1c3+66*Fo?}*5WB~rYX8K4LK!2WnG84AL z({apJM^^9%vgMh)jY_GQIcB?&EkEyap+gp!YTt@|nB>jc!y$o9tD>@_r&)Yt5C+V} ze7Y*MB|1bDT>x)kbH~=#%<68u1suL3!!hZwKsEbpHP&&h%$|Yjj9%sGVl`OPe)0Db ztYU_#{``xF4qYESr2hQ!5xBkT&zG(RkMB6teiP1DxVFGC#bqzS8#6hBgDz0*R0+ax z8G_NN^@ym!o~;6vdG-XYpeg&VeSO?7w7bYk7=Gcerf3@iuMOqGYQ=OfN`@Qlnv+Dh zc0I<7&+%Jhipul9+FF(|)@MyLjYfILT8b$U)<;oEp%I?W+G2fYrpK((Z!!WUn~b~u zNFD;H3T-mNzabEw^i7t-Xpr|U@n)t44<|WO?G*m>1!x1rRx~!(PM#91pX^Yhng^5a z>d_P&JO*NO6h8Zfv(@pUj}p9@BD)_KnGP z*GsK(-gbQ>zUU9jQB@#mReV%R`8K0SXx%N3YmBCEFXsZ(idB$OEb`m8{Z!f z)4y{V+>8UuF=hVSZW3it(?Zt5sIAGIXBgp^QvE2<0OD4xQ4`KYBsh zU($S$VI~SWt25n|lHCM~q$L|0qSDfh`Yq zFSvU?&&9+0Txo_s+$2JKn8?UTe5==wHG zH9UCMv2bpT=xo4YJU_qOS|KI+Db8wd`M}k?9aDcTl)S~LX_q5*qIjP!pX8dA=+*vg z{@8fT3f~F*Zx5Ynyu5^$uqDZ#zNB$gz$jY`MVux1dL=TGyk-TnceT~BZS4syvGx;I z@L4iHRHDy##ZfZ9+$e4L)xr7t%#WtQ)@CF0DXpb#%@lQRwZl8X9jIPhp57i01{e6l z%~>5E3hk=rO`O-4qj`OG$kLRK%jRGpuBTjThL@wb!XxZOj?gxqDNM7skCX*N)RBTm z2P|0Qm$SyS+sj}Euz~m%UEqS2g)1YZ*_#0tCUyt3B)ctwJ(j|0ft>crY}YzVdd-&x zuyBY*b5HvLzBR)qI2H-(Q>{etcC*Su>B_;YLTNN_epQx8*^v5g?UohH5qdnlfih@U zB@2s}(`(+vtbbjaO-GI-q{tvPEn{oCE99g*A?K?O?*nOiCJF^Cn%&GR_y}`l`U=d7 zH+QeJ&IY<{)=efdYf)tZo=Cexv6 zjptYS=cdK~1&pVb_`{u9#@$=M`>}p-e5_H`?62>vBRnx{146r0{fe#5<6yUR3;hQq zae#;7QL8Y+A8ZQbx0JKywruDT92_WdUxReem{!H7#=taVAcEQYmO2&kJxuUvtf=5L z^S6ROrszQ5rqCPy@cOB`l#Jk^#sEc&T_x-$49CiPy_jj?ORztm`ppPSv z-tOl=SRMOd>`XHph{c>gQ6;UFdAiizY^uVb6yj%M`%nf; z8s=1W*q)y#HfqY6qnIY)!BbT;Uk*0!Ow(8U~m-$Plg z!)>|WJ_4QZRd%k_L`U-Ih=umj44NS-k3x}X(SRaK5^|Y8P>7wwc`f4nH3ft_W5EG1 zg)c(r$RMmCfx7#&IsZb0)Q9x1hwY+~aVfPb$8ujI-vaJTyC0u~-Q|Skbx$=coV~hj z;1k-xaTJxMNDVkrn-hS(4d0%{cD^=X@w(@q$r7mcb4)w?J(ry7?{F1v4WuszZXEhK zT=fj^kuTF;W{rk<(!o9)ypba#^la8Xa{DYFT%7bxD1N2S7ac8BlJX@#tbx5$;Il@; zO^GcjD`_47xDXE+*8Gliwn_mjcq2OxTL5wz*77**C`&EfB)03yNI^M|x3bxY6lw#S zLB+MMpiy33>$0ExG8Xek`}OGPjv{KQh1daj+yQM>hHRm)eGkb@3bPuWl=SuvG#Hk9 zi*C;{8X$xn#dl_gdKTZAVMP5ZlrgENH8j&qr>IR^hi23T&-88Wo)tXBw4B%HF#%}4 z2YI64g-A+7fFe?khLgk-;j8wJD!y|CkMdjPGT)4bzKJ|8m8Va~`4pKJ9PYO+B?C?U zhm5Wi@)@4;>I>ilEwdju4(+b+lzuLw@lTRoe4f$phFD9J zY8b0C?RF$a9Cw3*U}1-@hYq1*7v%a!k{=ZD!OWCZA%%jm2VEWSgPyO#lf4uPUGnZzRUm#Vi6e>J zc#4|fKj#yeRlJz^X0Bo!Z2NG;E#WC9t9|frdp?5GaBb~(Mq@o94vR|$fA7|D zto^5Wbg-ZOFkY*+)}Dpi=2dGs*Gi2UBgxOCfp(2L*QS3L3l8*G^TcxcWho4qv^d)` zEtPF47+cb5M6)QMzC=hoqj3T458s)SVKmOehi!qx`P-QG2L+xx3y^gGCtf>?c9`K> z4@bb8ggSFb*sAo{+vMG5>%t=GXj;G;muLI_&O0lrhR`umdMGEQ4;$d6u#b&&W}8^Q5#V2 z9hE~Iy=A}HJK4WGx+VHogD<5O#TbQa%V~q)GU1NP7F+*2rJ!*~Y#_o!9Wx&TF>OPk`&rVf|g1gi;|Pg&u|V!-cO3c5*FUqNiDE;6#p zO^V|XmQ_}{1)pv7EnjQ@@pA=ySWnGxDMqqV%om!y#{NYjfyh#85JH34lymJni49mo z5xuP!fntqW?FyuSKzAYg-mp(as>#8C!br;S#g_BY)TN~s%^{1&{=^OH#TKacm6lwa zdsA@qhAL*q^hRkV05h@SSIaC%Re~jP>2xpxZv|}Lhox1fhB7`cqPHfAg5^}!9-zYo z5`vct#O=qKDZsR@98MIp#uf;RIOo(v=%RSB(`P7_e4G`#+Ac>kl%sWm75jbp5}eq* z=0go_9OZdpEmE>(#iG|Mm0X^SyklHRd9!iXAuLdAbl%`d5KmUw<$u#^BeD^73=;IZ z?MHPl3v`%9qF10Hpl}PpD4?R(1>m|Iz<`+Ue~66s!~clS46d$N>_>^r{_86Dy0S>9i>bL*i??cq{tgjwsu6NoTb zGgbUgFBhtHm$mPv+;$eeB0*lud7qJ3`10zDnRj*URSf7H+6udgweVqlqNPrcY6AS! z8Vw<4mc53px72!E*6LF0<=K)eT$|+xULhjapAQl0bFKZ~vOgDBW(7;@&r|%fLG|Y; ze%e_IPZfKSB4L`ywT~iTE%g)#D#nrKosVKMCQM@*bqWiUu0uG!Wn&S6c@F&V?m>$B zfT>58EJM@W~;xlE6*QHGH*+%#&0Dxp-CdZ}gzxy_3l{HEC#_?ChRQGmG z^*W!-^-raPO31`y|Eq$@Fq!Oi@kTu@ll?(v8ndFAs-H%nF~^?H>`z2kSL?Xjhzob5 z1+i3E{@{!5 zzbh13tShN-8Eysa3g#vgu}+}lm5`d2BD;sjOE3;%w_2d-I*_>f+izK;D^fO{p7Bkm zXX>Wo=cwm{JV;6b_LVI~3b4m)l;ja{nUrev@#YN4v|~}E*Gj~BOHa|(HTaA?DJ;ztr_-->S3q$ zK>9MH;cX%z9u2d4VutM|0iv|K5T#44FN;P)e9NA?wMSjB*VZyemZovZ-`D=&Q}R-N z^{@;xeUnh@U&iC0;LC_>H%m4LFDxFDLFQ-okXhmav7xHVN%<-lLkHDKD-V9{34c$?@>=AS-g;+GQ zoQeqY&S&YMi~^yLNE`p@doXxv=!N*uO!I(QbmclDqZIWGLL~ zn=_E5*f$pzcwKRgH7lr5Tl#{0bgy$lG`e0CD0 zlfK6OF*%Eot%rc2S6^R>lesqo>Gbi}*Wc+m9zfrA4GISZ#Wk+rrFPGc1>rf)3@tFL zO{lGvL9g+=KGOuO*IBio0;pD>g@lX{Z3@3NpBOn35fZ{c>8Nt=au906=W%sCesX$U zE!Gr3jO6Bfmg@pOnBJg{O^{z4d$`PD=W^mxQ#ufRD7Q}Kz0!kdArH|4^(oN;vZx=A zU}4mJvchHr22H*k(9n$dj^-~H;XX$xpSLvPH;ad42Fs9)W%|=sa25${17~&;3-9q1 zqWXgVL^>)DS@yjU5*^(l&@TzK>es?|$OSQY3N5rTS^Vc)_p5jW zclq?bvZd@yd(0*Rd%ZKI%BNug9mkl+RhXmYh!u@&Y(1oOL*HXqB}?(OA~@_))@Bdfa2V>Y#d@5KH`cOPi|dN{_2* z;IE0l8T`%U?>;-9b2%aeby6;}`|FTLkPMufSYbw%XjJ;qZ)xg}dUsN81o&PN!Zsj46%`>C_A9L>l zA60QS{%^9mEFs}6Vju|Uf>8qjjYK7JgYJ@DISU(&B8nF(8b#h}E0tZq3y`>pW^>p| ztG(K{)!K{Jw%WHA5N`>QB!Jvi@JjGf&$^=E1%ej#_kHHSQYrCXmiHa!%-R&)fbDfLOA-!a|#x;o5Fu@Hc#CnO<-?>w1XX;r^u+yG8~D5VC-TZFDf#w z$T9{c3;&1;RJK$!6&OTtWPLb@`IU~Q)4Ywj$KUjRcw)l^N{u=$vXm`!v2juF=6umG z-9YqnIv+$JuHhx26)-~j=ILYW&MCwKNg>|7d0ibes_*&p;YcqV!IE{#*hqy_c z(Kq6Trk;Jg_!1G{`b0N%4m+D#-dzD!}pt)-N*{n}!{Vr^MT`wz#YY zQ$Wf)LhdSO*cqrB5QuqU5j~jB=w4>KWXVz@md_!(`oI3h(RnLU zzB54sTe)4{h|8uFbKcdmn0t*3;+f3$D$9v05Lvr$l@`MZXk$uApwe3sF6gui9a}le zt(@b%Mu41Mkwck_T!F|PWw!8e^IT?~PLD@2s};g3rzD)PdT2TnkD}BV*v!=!ZDt+2 zeq$H10*BcHD-~V5SOlx0L7;#{Lg<~3EN(`oAME&6vyTjBr1p{48s<0lD2X>Rv_mqI z)o`Ap#ArSqb@S=BdMAN-$i8L7ZUSD+T$brJBx#HJend&q=CZ%Tydm<5NYbuPB_m0@ zf?H$$V)J6IDcU!uaG&&)Mef3%(xcbmjcC6z#qO|{)$co;6#GtVs%N=AN|45ECYxD3 z`e3o_eiP2fZ&U&^j+LUv(m7<_L?Xy`sxPHhQfBp9A-hEHTIM%iV(Dk%lbX$4EQ>4p z$}|?Qkngd^%lCA?|5L7_OQ=w$8fVdSK{sM(?Or4VHqrdDL#9@92PlzkE{}AM=3Ib5 z-_ynQlvc-2U|!f*{4h_cA{)(L3l4FGFWqMqi>VecBl-}B(Fn=xHC|CHk(nW)OA(m) z*eQA>R1Kc<0!(6(*X}wSLcS(18u*?iCja`(96$DWM5M?hM7N}dV+b?l= zR|~Z=C!0i{u_Y$SR60jDoKR}GfTl0!%RwW{nHcCxKXFoZs_ZjT)?80PnL!_a14p1D znNa6}BcIIcEKDj&*^R||{82WDrWd{}Ws`Frx5_5R;=yF!_^T6GolBm!R;`AYgnaw$ zAKOj$MM?nP%e$wP^!+5@Oz#Lq2%m=X<2j1^C!*V{oTz>Oejd!vUzfFFYrycA1?%SI z2O=+J1?}&eZ}la^EF!l%C(qw>VCm(09RZTE>SZ~bWv(Jqz?jW~+!LtFD%R~i<_c8~ zsuKN1T@7}@Su13$*t^W(2!9x-L}%D6U!l5X&nN8ORT;?+H>RS?zb9>nIBLBu$^saa zhl=N^EgnwDYF%hIgMQg9_u5hP?p4%Qd9Q4e$1bhK0@opM)Lp_3wj**k)DaqCez~hR zNw2#$Bg=eW67212cEJM}LDl*BC^+|8i`i&=!6O|fy3e}%e^4N*8HH|yeA9lQ?I;*O zlmG&;QEz;F81`UW(AbcY4$6={W&&20nmbH(oYBn49($Xa>5Wc1(TjmJu9~3{5Ep)A zhwR~L*d=2{CQ{U>WGP|}J32u(PWU(LTOc}^ibpDbY^`{nCA+~{z-UEzNoQk$6u=hE ziW5*&6P@m29&jG5H-T!r4$s8B{)qB^1fHi$jh>2@#4RRb!~5rp?Zj+Vtr z8Y*^ZPP;Z30rPYw2GP+p7S}_c7}UWGKGJc=-s!Xz~Y&}GU30ac<2 zQx3mD<4Q-38wt^UsH$zjN-Re2i*Oe(Sed~{>7|Z9DIoy2E;(0oW?3yBrbTX36-d%-3uxlymY zn1YBl(u!G+kd;o8aA_0r=3k$Ege*o5nW~F?3_E9_vrU%Wgd>%2MXE%vJ%v28y#4o? zuF3(-1c!CzpBozyX z-AdQqyOtl{hR}twE;cz5N3s{$ETk6@$A^ysMq{#MOrC8;z}=xWCZrJ}XnmiX8cfw2 zw{c^H>DONzbV@d{n-~~yzoRw%j5mo}YK-R&IbFcjpd(#gUvX;rG+$;A8t-W?|J-q)zUtw+{n z1>7IUZ&tHfJ8%Ei|1J0&z@WfCiSHpxR`(;uQX_9LAMFa!e)e`seM?Pm%RVnw_zoA-OHI^4UHR$47xb%W8mKv{o@b;U$VgO$zqRW5oz#PL z=h%7<2wGDBwSbV+T(5XO%+3I+k&>`z=oO?^7!;}XW~uHEYKZNi*MQ8CEc^p?C2-xn zOc1N4a4J?K?C80|h4%#&S4+iwA$uY>tR;Lx_PHwHj(M?wiUM2J&C1`AES#RI{`21I z>6YWiq&aFli)|2N+G5CLOnaEp**}{n;EtNyYPz{V0;0oWy*a_VS}{FEyxp3-T1$ z7aU!oHEA6M|CLt=u8q$EM%U-R>5VqhZ~ikRXyC#RWHRW{wEObmu=?ANO*NL^Q;XGD zjeP_5V(lwflZ|N(pSEgRzE4|u84+68EIa1S$kK&Y+?)BO|Uijn{k;!MHkh5#|ya!!jWoUERYzv3V zjjhPGsNg{M+AOicZMu;`zV66vnJ+!E^tM|wyCnmd*X|WnJ#w)C0gVEYxGPY)K2W+% zjM38>9wkGnI_*9Nkm{|z{-n-4{w{OzbG3(`8|JJ#ylen}m%8}5%EQm~b4YKgry{OD zeAv4Fyw$q?x?8S?mqqKX>kl5bu0LzFu8(wc#oSTA)f?8zCD3467po1C#SDy^m`(%s zbk`u^9s1}^NRgF(A(U;h<%hCcn3EVUnKE8(&D=+ZdMHM__xt=>l#S7O+}WS9CBwq+ zDf?12(zM$yb8>UFi=P|H*uDieMIRtY;^Je8@vyzZ)YH4IuEpI zA%s3yB=6a$IeC{gSR3p>URP7vo;FRsO&gn$IPs|d!SdLtjUAw>(wxD;-Fib@kU;u; zZEOG^KHp$``htT!md$c4i5^Krj1U~`B3l_LE=h4}&iujQKTC~bXRMW^OroT zvS*HyHEXcgH1AV3%?=dkd0uVsK;DXBGb_|FJVJ*T_i14Yi1&q(J6m&RB5;|!KL^?h z7jU-aFFwnaC^O-z^h-S2U4pi#flY5v%{ zHyR#;n|TZ=L!>J+svbI~79r9Vah9lN`nZb}uUGfFfHIDi$s1Yh$XH4!qqW9HWl3+w zZ-V6=N5F&0GV?8hM@2wnK1ynAdPc(`l{i3Kl{G8UogsT*IB6AsNf{JN+nvhZKjl=8 zfet&rnr`#&tO^ZZOX&p&lV+Oi>~3RRH!8N$&jzvC$vbW3$l>)%dTd(bTheC3-yL~a z8h1GUGSB6$bMZWH_QUk}O$B%f5!k4#?T7=N)Mj%VRlvfX;Asv!72nuAdvJ&U1Y2U5 z`NJAQi1XUkX&c9H^K55_e=uK|X$EmpFK-nGYkAEVT$U`p*+0gZlCK*-tRNlkMNA4@ zWGfTaQ3>YZW?VGRG~b>l-_;tuv`AYy+l5$2Ydl9i)QoO>&oS_IX_UmsuIY|Eq8cR5 zG4qXf++&JTu4Q7pCp=bU@~bSQ@#eINWY5^jp zQar8#Cm(Qf&8KgJ*!GwW=Zd(HFO+~YVmxwpCrKEocBS?Mh&Z7m@NND#Ty8IQ0;woS z3Vz)rh-*?K{%M_ z91FD?7%IXV1Ws)WG_{Ae;3J@qXeDTt@=s6OE{VW7_QztUaPtix?}PPXSHANjY@x(z zv#A^MLopT*)jF8M(E1Qor{N;=scF5P|Muys^W(~FPhz)-jWA~PKdP15K%>XJg0)P7 zQGg=cV_fDhH^JFRSVipDMBj?V%#Gp{|M$#rp062GFRBPb86wKiQ8(( ze3Jxy8YYD7Yd$@}2LNJSI@F~PFPQLjAA z75OP`QF~@lG7*XbSh6Do?#Jb3Q5NzrGz6Q>cY)s$2ZcuI#{H7r zT=Q+xqQ8=R&&muv`lJ-W)$G@#ds;9qR}1^mQsoriLFA8FUSn6lxJOF+2>OBSJa@H? zEgOnlG2>`Z<8qrx0FNZ5R~SQ}7i={yt>AcrY;iC-hZp7BquvUy(SGpr`n6>~V^{rG zl}q!zEp6vyw037_&%mEOj+{}Uk znZzOK2a<@ajC)cb1<|MgQcZMQUWxHOAB+H({Bv+w0wndn%Gae!D2#$hRP|< z@QL+z7GZ6MPiz90TAXvDgA*<MTT4dER{Rb>;g(mE5(CEj zAKQ(vPu`HeU)0yh^(`4yWub%K^VD`|y74g@I7Mc^Bt%xwV=%@(K`Eskb@Yj3f)Y-k=L zH(T*-BaU+)2VnIxJix6S9%IEga}mhZsT@-eAxRDAn?rpTjT6b&C>3$I2S3plgxkVr zzeub!JvO~`GiNdlFuy8irWGHZsf2wcYNh#lHQ6W`sThM>9P_zHcTX)s0*$eB!tR-P zAmX-#a|p1T87&pSbTvY5MdFFju77MX3r4lTDP{#uM@|QLok2Pe62%-6i1f7hJK0oJ(0 zimSiNJ5KxxXCNEgXijCdia#WIBGoPj#$7H$@8O&Jmgw|~L|Jq}MZ6(h2%q5@=Ootm z&l#P54sp*1M5dQz9ekY!X0uCMs=ZaNP)XIPp_8jhLnl^E2<26kg)bnFBT*qa6BGH( zNQ~##l{lT>%!EsiE-3RfFYrX~s)#PA;_mVUd>eZMCM?FmH9%Gb5l;6uuGg9#0cZ=o z<3l--yT<2+OOp}RCC^%2(i9SYxf+I0m`xZk?d{a(Mk(%cr%VMFU8G4u z2qN-~5CjylLokYgf(??mw6FA1N<$LAk-1s^-bh)$&s! zKSN~`(llB=4nD>2SVb0)hciKLd^N?6ripSm&iErF_wVUmnm9XBS7D3an=WM$MOXi< z$03RIGPkUGED0*JZVdJ{Gm%;kNn+g+hImNd7d?DY`IfR{ zmi=B(dm+Hd0&N}M%Tej97aP#Khl-9-H|RQ>wklt5*kh|#TbuP*AKV%+ngys{fQBf5 za=b}TN#b;GLSPw~2VKS_+vGz9WUQB_CnAT4;zsu$@HS0Ze zlHy}BQy#7YXN%Wcby0ZufegGIWp3;Aj+c#+>_+3YJXc*DK100}`&C{#cxjI4t5R20 z#z*lsaz~Xd{9aW+YkZ1KRY9%sS8}~vYZOsh)x6NHRo@O>TXk#boT^Z$xM~rz$(>r$ z9^Q3&tKcSW@mH;TVYlMzt$P6`{yaY*rl`K+*6<+OhsjsbYLI2a9GoFwi+Zc#GGM5O zS<)7d@nhwm*Owm%ZHZTv`XsTLoCWecmm6tPVm60N6t!elm4}Db-pfv#wfe zmRB|tD5&WNNYwkH6!olJ?D^X)?@DjgjmxgE>@>XRqvP!0T~&2xLX}VZe!JXH)xIx_ zK-G-Um7eq0g>J68IyAECdad!lC9%%(kQ3i(P^G+8&A(H9yiwlXy!5WB{|en$_1(}_ zRkwvERm~5Ls9F$mR)s^Cd(Q6&-@L|2u0)Ng(*cQ@o!$z0rZv)Ne@mzJ`fMXmX0)}L z+1|#^P_DKno*SKBwnp&DgoJ$QEP6Fj6bY0$*9aa_mztLYOCsBR6+k2)!^GCO9PUtm zm&c|xvE(ve%Vx8-JlX6kzD%mmlIqWtyBzf)@eY}gILX_%C6p`orHMgC+cs0) zNr<3YSHMWN%)kiGGj82uyTe*9h}l4%u=^*r!l8}pcx<=!V5=V}vY2^Bboi=j%RJ}5 z3WIq5Yhk;mvW+iWft z52hF9f&{1E@BeSxMxmMJ_x3bMf94O{7%F|brntH@59DvsqG(0^b0hv}q+;;I~ z#a^%~@=<2UCDDq9MLrr3I)RZ}5OP9-^=)rHepYwF}opPY&DKdl!%*qsKdinO*cK1k*9W$lROQfKnC_K&J+gh^ zT47XIa4AEShWW6FQ!w0cVFG2&L?(>wJwxZQjL?wCT?BSP(T}~KFscuw9;rY(WB};dTe^Fsm~FvCv+xUKt=+@RAV4kFP#OQ1~p&0 zo2I*3F75F)J3FgoA)>zNvjpHDSlzmvZrz5pz8K2Lnrm(UdiV3Gc@+b}&#VTib0xej zrZ0A9R^(9jvYSFh42GaIafbX%m7mG5+~I4PK19L}zm;t5-+NWJh3_w&j~#xH9sK;{axbc<;ldObZIc-E*BHq zW3&gP8S{G*R~?%g%F*jc$I-qgQT2_Nxw`fuFHY4~@jL2xuV3IrmbP+!PipGnW1&Ha z-tHKnAABdW-osQabhl(cXSEu12#D)uR7Cb1kk4*m)qE|R{04%G zjRAL(kSKUDeuCFeBA1()+yF$Inafv3MeeG#iAl?Jy}q)Hk0z(<^3ah{maI+@9Yf?+ zjGUOZtSw#oXpvMurtG#{&svMgAwA&V-Tg+m2`4$sCUO#m#?%rngS1ssOXhNu-Ev7u^PrBY9yts_ZK%Jgr-`VU z`E_ZIj|swy=Mj+rdqnuO%$ULA&In*I%N#vY=IBw8uhJv1>>DHSWSO5hG^Aj`NX%3y z7O2}wUuBq65&b8M(r<6-duzUZEgX~T2Q_kf_xh=$F=`P^U+_waRxDm?QHU+fG;iQD^wQaK&R>}XA2~y< zk1>=G%!#ay7Aq~~&CBRE%mMGJ4L^}ML$TkZK}{{jxGW(v^k6Jdf@)NjURBl{Lw-Rp zGH;RR-uIylKAFkD_Wbm8_A(#U8ig;^4P@*Rz~xwnK%!a%>UxM(h2Wk3IBF~4&8STH zy^#UQ#D%&v9zatW1w!9Sld0pWQy@m7uW)i}*(;_R{;-K{N|t zb^H}+U(;T=QpDH%90(VczZri)r4raiWbL^YeP@=xXU~ zin1Y=fAvb93yabxWcNv-ic z?!3tjv8m9%*7Pp*`ivX0%J+IB|HufRZd{cm!CeX0)|M4L6T5T7XPz}Lvoe@%Qbl|G zw_K<)d|o(`ko;#+QEg z&QJ;cHO27#I14Mpw!gdl_ML%&9eUe`F8$zsvG4s1D{S(G-%P=xpo^ZVK+-ub(;P>o zFrU8Y!YsWl?qbzzS|7a_wd;@8CFP@Ef(tL_gWdNLH+}=d_U(v+{lS{(O|y8{9` zX5F&kAezWK!O~s9QclOr|ACR=t;`x29_&r7ms55laiSIOSQ1YRT7SG{*XrTAmQ+V$y-IcHt zG~ZkLrjMhnC6)$UfJ?;PllYABsM!i8Y6$v6@<1dhLTOlK)%H_hML{AO z7;mF>yI5k<%%e1NWx-|IE(HGEKX z8g>psz{y?(G1z(gP9XQkW+nq|@4LLoP4sur-tFbAHZA&Xb^sFTNBYVeyDY=l;2yf* z1WZ$qkja{x~a~BTr%M4qs9}01Yq6JdoB7&bH#JSv+Q% zH&M!3nVi8|Sp3p>uxeq&zb@s!#hP9}dHFl+O|>Qw)F=YFFZ&i!P;wg%+5&}Um%p5g zB|&7*g`AdnrM%;G=OKFeT73tn1Y-Uy;W9440t6Oh^={(s=L-v6z|&fuO#k@`6nlgX z&JgyEzs*oNmvS+is(>n1_-iZa0ZF=DlGsQ|_CX!lpS+zbk=?7E9b6Q%VtzpmiBnbH z+Hgn(3wluIa8Xk+7K>yuPuZx{qW^*Ym?rRjC^|wokjc+j$51)K<$9f7g(FJp;Hl!i zgQtc^o@oRdgBCg?&xpRn7RqH${s=c%iWGJDF`9__yD=}p+Xx@>s2@`ke>eBAHU53r zt?XJ2;gGpzYt;Wr)W6G|2{}fVxRj;HwZ(IUJ(=B3oibp1?W@fpH?l@6{5iZc zRy@aV+eZ$(7{h~;g_VZ|IbFt%WZ?lCL=7U05xeo*cmqySc0h1r6<9&b_7m%h!fCL6 zf`ln#0tctatb^5yO6MHnuPoF!q@MeZ$QR@_Of#m^I|XkRlc+}vu6iri)-D~6X+cK( zK3c^$p#gOYloHBjpD9@+t$cfYuF8;t2}q!)B6H8!UJhmu;se=|%kC}0aWJ2Yr-3qr zW>Pi(c(Y7G-09EQ>f6SRzW9bCOaS`o=cnBH!K)9x_*&qgiG#P^_7yf}8(6z8)a~0i zg<{;S2OwyOblb8=|7%12kAIqyB}9k#O541*bln)8?noGETuH2B!4V@!F*~@9n$y(^ zE8BFA4xmFsA1AH@Z0J#;$(dbpe4p3?T&b%QHaymm&eFaSW(Ms`kNpYAA{p$Fmps>D zU9ctzT;A2i{F=FclmVX%ZPg_ncu`@_NhSEL1eduim2i$EU|P23u(#I2O{`(rz<-Dv$f7yK^>9J5 z`}EQ-0@X8@Z8U#>t5vfPJXHG22#p7w%8NUJLm29}S(j|kM)i< z?ck@neJ6dMEgjKj(&t-mSzA@w6&-lTfS8w4T|TXf+SStdDF?+33$z_Vn$spZ2_i}q zLY5H})2)Gn@c`6vbUhoYyvDZDZP6K7cjU#URbld36`jt4Cb?^3SO-4y#2?hZaRH7S zmXD}v;bf{EtWJCflB7;_1Zmh}`ImW(t!;bkQmsR(Ey7}`2okh%W1mM|nSFI3|5#dT zOfOpfKyl!QzKrU8uf6MF+`f%kjkRs&Dbn2B(k|YNj7~2~%)Dbp|ICrL+~egpX5@pR z=|#r$k-WwpU_^5IiLoiCa1wE>;X8Cvw0dM`wNvI2j_8;^l1QMsxK1#QxWsufHOrfS zhLEhiA{(jn8VHMQj>UjMH0?by#S%dgGsiCTE!0jTdh>s+6AMvof-PpAeTVYJWzI%N z$DVVh=$B)dMu~3#rcsO^Vfg}o{CB;+nJSvs7SLW8CQq*X22<*`&t7hwoqkw26a5Oz8^HMsGzaC44P_poY zgJJ_BXWQNKC9kPnPZsVXk)_MYhAv+Y<&*{Jl^@e0ESNxs?0A2)i#Ei5Q7qWP+K`Qa z6)odi*QxV=3Z8$BiTK#PrRW)8V=W6a0w0&BA z=ukqUe_ORt4#w>-xxq&*XcP{5DVLoP-1G(t1j`FA;PbEyfgKwlhZ?vnyo?Zk5nbHLS)Owdp}IQKc*0*Dzu7zD|LX>j}8b* zL%Gj@FWaWEUd8OJ8J5M-?J+&W{4N9!-lYqSE|ttDQMH{G`$9nmaH)TmFD-OhD?MRk zpV*$F)5c;aDR`$5qDgt!uE*VxmKU0P$MmjwC-Is1EHEurZGW$6dOx&B=fp(j**>iS%98P{O+x#AMJ#_mkkXiu^p9%An(B-qcsUA6|Dfzow>gV-v~ zf@}I3|Hc(Gy2gEY;Z4(H=bRZZ-qwvH0r$a0F8FyBhjR;DZ?Z6|aHMOO><-v@pJY2= zbl~|MaPJPC94Otb_-AcpCUy-&nzM#9=W)(Y1`}FF_@kQABhH`2>4G5Tg#A%H

    x;wggVmY$V>{7G^6LmY$;`X?6zPpN7VY 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

    bd95e#2U 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ðrg)SvgtrvgT*Gvlh&C&CQ&fHFxgZ?72B} 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 S<}vHnvHmpXCi3@jpZ^Pv*=~0L literal 0 HcmV?d00001 diff --git a/beef/build/Debug_Win64/raylib-beef/Beef042RT64.dll b/beef/build/Debug_Win64/raylib-beef/Beef042RT64.dll new file mode 100644 index 0000000000000000000000000000000000000000..797b5a5367c9298592cbedd23d922e7772c360fc GIT binary patch literal 617984 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�sA!&;iN6r(T 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 P%nB9E_GIJ#$-n;vT{8Z} literal 0 HcmV?d00001 diff --git a/beef/build/Debug_Win64/raylib-beef/build.dat b/beef/build/Debug_Win64/raylib-beef/build.dat new file mode 100644 index 0000000000000000000000000000000000000000..02c6e14b0046df50cedc081b3b3683df3bbdc624 GIT binary patch literal 1052 zcmb_a&1=*^6wmqvSwuW}6NWvAqRD2{bSV)*-Nl1$vDmVDn6gZg*>p6S2{V(rd-0;D ziU$Q16|d4iLKIOD{{#O3kA5KNMG<_7p+qQ@YC~S$dz1Hmzj+@< zp^y7?6-zQrSYQ?O_|GS2Nd&)wJRV(UyzBiHQVX}~greT&DD9v?Y1dHNp^!jSsnN&= zXB*iy-geFYFPyT2wg|2wE23kPCmQbLgM_J$ki|tJVu38iLrGK0HA#F9eij8g&^$mX zXrar<5}5{MNyo?n_KfHizXgr0wgH`E303ImWUhM*!$cx+U7-t1E8KDLfCZpz$97%E z0gdw%Pr6=fCy+v^x5C2nER;ftu|`9ta+07$okvVy*Ku9k6KR@rrl)w=!%IRW3ePWs z+41a|S$oEHJF^%H-jd`jEa!mm7zd1RlJHNPj0#Z4b1yA*y>b^TzaPZaL9@Iu)#gTx zP17mfK2@P)nP!5U&7wxw4OLnh;Zw5-bBpp&7bn?NvUml|VunL1Rhd%-Z1}$cbeL$5 literal 0 HcmV?d00001 diff --git a/beef/build/Debug_Win64/raylib-beef/raylib-beef.exe b/beef/build/Debug_Win64/raylib-beef/raylib-beef.exe new file mode 100644 index 0000000000000000000000000000000000000000..8dd0a3ffa9b790cd53c6d920541314a306b9739d GIT binary patch literal 1258496 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≤amP}5nBH46qK)8zM55{<@}YF2X)IO0xeHq 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�T_y8xHv86dDPFn`xi=eW=K>X6Z0# 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�GJ0mDVX|o&SH@hciqiDx&I8-wO59Spc)Ip~} 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
  • #VfNyXbmu5?}kY(k9y>UYd-Ns3`@JQ+6PQ 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%0D@1Ih~z&(@Uuwz%Z_-S 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%0Dh#}B(Yj@X(cNZQw?@LxQ#$l_X(q?Vh! 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 literal 0 HcmV?d00001 diff --git a/beef/build/Debug_Win64/raylib-beef/raylib-beef__emit.zip b/beef/build/Debug_Win64/raylib-beef/raylib-beef__emit.zip new file mode 100644 index 0000000000000000000000000000000000000000..a42f64ae937160917c58c31b53be18fc7c93bbf6 GIT binary patch literal 309 zcmWIWW@cev;NW0j2o5R^V?YA7Kz4F|QBG!(Zg6FBNouaHbAC=vYH~?teqOO|a6wLH ziBD#6iLP$Et5a2Om{-1~Wq4s$QfYXiOLCNvUQ$|SUP*j%esN}1YP3PDLau*WT5)Pg zu{9SLszhFDIa~@TqX6Uw1NAsnmZTOd*eV!Ua|L*_a|kWj^urVAA`lMnW@G|66y|DV aIgqPS0Y!cY@MdKL8OI2O*+6;=*lYk4ds9*X literal 0 HcmV?d00001 diff --git a/beef/recovery/Material_65E3F51EBA04C43B014C1B8CB85947E5.bf b/beef/recovery/Material_65E3F51EBA04C43B014C1B8CB85947E5.bf new file mode 100644 index 0000000..9dc3ca8 --- /dev/null +++ b/beef/recovery/Material_65E3F51EBA04C43B014C1B8CB85947E5.bf @@ -0,0 +1,24 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Material +{ + /// Material shader + public Shader shader; + + /// Material maps array (MAX_MATERIAL_MAPS) + public MaterialMap * maps; + + /// Material generic parameters (if required) + public float[4] @params; + + public this(Shader shader, MaterialMap * maps, float[4] @params) + { + this.shader = shader; + this.maps = maps; + this.params = @params; + } +} diff --git a/beef/recovery/Output_ED6325C5977DB8FA4BE0C46EC88ACA39.bf b/beef/recovery/Output_ED6325C5977DB8FA4BE0C46EC88ACA39.bf new file mode 100644 index 0000000..9da59dc --- /dev/null +++ b/beef/recovery/Output_ED6325C5977DB8FA4BE0C46EC88ACA39.bf @@ -0,0 +1,2077 @@ +using System; +using System.Interop; + +namespace Raylib_Beef +{ + public static class Raylib + { + [CallingConvention(.Cdecl), LinkName("InitWindow")] + /// Initialize window and OpenGL context + public static extern void InitWindow(int width, int height, char8* title); + + [CallingConvention(.Cdecl), LinkName("WindowShouldClose")] + /// Check if KEY_ESCAPE pressed or Close icon pressed + public static extern bool WindowShouldClose(); + + [CallingConvention(.Cdecl), LinkName("CloseWindow")] + /// Close window and unload OpenGL context + public static extern void CloseWindow(); + + [CallingConvention(.Cdecl), LinkName("IsWindowReady")] + /// Check if window has been initialized successfully + public static extern bool IsWindowReady(); + + [CallingConvention(.Cdecl), LinkName("IsWindowFullscreen")] + /// Check if window is currently fullscreen + public static extern bool IsWindowFullscreen(); + + [CallingConvention(.Cdecl), LinkName("IsWindowHidden")] + /// Check if window is currently hidden (only PLATFORM_DESKTOP) + public static extern bool IsWindowHidden(); + + [CallingConvention(.Cdecl), LinkName("IsWindowMinimized")] + /// Check if window is currently minimized (only PLATFORM_DESKTOP) + public static extern bool IsWindowMinimized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowMaximized")] + /// Check if window is currently maximized (only PLATFORM_DESKTOP) + public static extern bool IsWindowMaximized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowFocused")] + /// Check if window is currently focused (only PLATFORM_DESKTOP) + public static extern bool IsWindowFocused(); + + [CallingConvention(.Cdecl), LinkName("IsWindowResized")] + /// Check if window has been resized last frame + public static extern bool IsWindowResized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowState")] + /// Check if one specific window flag is enabled + public static extern bool IsWindowState(c_uint flag); + + [CallingConvention(.Cdecl), LinkName("SetWindowState")] + /// Set window configuration state using flags (only PLATFORM_DESKTOP) + public static extern void SetWindowState(c_uint flags); + + [CallingConvention(.Cdecl), LinkName("ClearWindowState")] + /// Clear window configuration state flags + public static extern void ClearWindowState(c_uint flags); + + [CallingConvention(.Cdecl), LinkName("ToggleFullscreen")] + /// Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) + public static extern void ToggleFullscreen(); + + [CallingConvention(.Cdecl), LinkName("MaximizeWindow")] + /// Set window state: maximized, if resizable (only PLATFORM_DESKTOP) + public static extern void MaximizeWindow(); + + [CallingConvention(.Cdecl), LinkName("MinimizeWindow")] + /// Set window state: minimized, if resizable (only PLATFORM_DESKTOP) + public static extern void MinimizeWindow(); + + [CallingConvention(.Cdecl), LinkName("RestoreWindow")] + /// Set window state: not minimized/maximized (only PLATFORM_DESKTOP) + public static extern void RestoreWindow(); + + [CallingConvention(.Cdecl), LinkName("SetWindowIcon")] + /// Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP) + public static extern void SetWindowIcon(Image image); + + [CallingConvention(.Cdecl), LinkName("SetWindowIcons")] + /// Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) + public static extern void SetWindowIcons(Image * images, int count); + + [CallingConvention(.Cdecl), LinkName("SetWindowTitle")] + /// Set title for window (only PLATFORM_DESKTOP) + public static extern void SetWindowTitle(char8* title); + + [CallingConvention(.Cdecl), LinkName("SetWindowPosition")] + /// Set window position on screen (only PLATFORM_DESKTOP) + public static extern void SetWindowPosition(int x, int y); + + [CallingConvention(.Cdecl), LinkName("SetWindowMonitor")] + /// Set monitor for the current window (fullscreen mode) + public static extern void SetWindowMonitor(int monitor); + + [CallingConvention(.Cdecl), LinkName("SetWindowMinSize")] + /// Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) + public static extern void SetWindowMinSize(int width, int height); + + [CallingConvention(.Cdecl), LinkName("SetWindowSize")] + /// Set window dimensions + public static extern void SetWindowSize(int width, int height); + + [CallingConvention(.Cdecl), LinkName("SetWindowOpacity")] + /// Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) + public static extern void SetWindowOpacity(float opacity); + + [CallingConvention(.Cdecl), LinkName("GetWindowHandle")] + /// Get native window handle + public static extern void * GetWindowHandle(); + + [CallingConvention(.Cdecl), LinkName("GetScreenWidth")] + /// Get current screen width + public static extern int GetScreenWidth(); + + [CallingConvention(.Cdecl), LinkName("GetScreenHeight")] + /// Get current screen height + public static extern int GetScreenHeight(); + + [CallingConvention(.Cdecl), LinkName("GetRenderWidth")] + /// Get current render width (it considers HiDPI) + public static extern int GetRenderWidth(); + + [CallingConvention(.Cdecl), LinkName("GetRenderHeight")] + /// Get current render height (it considers HiDPI) + public static extern int GetRenderHeight(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorCount")] + /// Get number of connected monitors + public static extern int GetMonitorCount(); + + [CallingConvention(.Cdecl), LinkName("GetCurrentMonitor")] + /// Get current connected monitor + public static extern int GetCurrentMonitor(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPosition")] + /// Get specified monitor position + public static extern Vector2 GetMonitorPosition(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorWidth")] + /// Get specified monitor width (current video mode used by monitor) + public static extern int GetMonitorWidth(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorHeight")] + /// Get specified monitor height (current video mode used by monitor) + public static extern int GetMonitorHeight(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPhysicalWidth")] + /// Get specified monitor physical width in millimetres + public static extern int GetMonitorPhysicalWidth(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPhysicalHeight")] + /// Get specified monitor physical height in millimetres + public static extern int GetMonitorPhysicalHeight(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorRefreshRate")] + /// Get specified monitor refresh rate + public static extern int GetMonitorRefreshRate(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetWindowPosition")] + /// Get window position XY on monitor + public static extern Vector2 GetWindowPosition(); + + [CallingConvention(.Cdecl), LinkName("GetWindowScaleDPI")] + /// Get window scale DPI factor + public static extern Vector2 GetWindowScaleDPI(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorName")] + /// Get the human-readable, UTF-8 encoded name of the primary monitor + public static extern char8* GetMonitorName(int monitor); + + [CallingConvention(.Cdecl), LinkName("SetClipboardText")] + /// Set clipboard text content + public static extern void SetClipboardText(char8* text); + + [CallingConvention(.Cdecl), LinkName("GetClipboardText")] + /// Get clipboard text content + public static extern char8* GetClipboardText(); + + [CallingConvention(.Cdecl), LinkName("EnableEventWaiting")] + /// Enable waiting for events on EndDrawing(), no automatic event polling + public static extern void EnableEventWaiting(); + + [CallingConvention(.Cdecl), LinkName("DisableEventWaiting")] + /// Disable waiting for events on EndDrawing(), automatic events polling + public static extern void DisableEventWaiting(); + + [CallingConvention(.Cdecl), LinkName("SwapScreenBuffer")] + /// Swap back buffer with front buffer (screen drawing) + public static extern void SwapScreenBuffer(); + + [CallingConvention(.Cdecl), LinkName("PollInputEvents")] + /// Register all input events + public static extern void PollInputEvents(); + + [CallingConvention(.Cdecl), LinkName("WaitTime")] + /// Wait for some time (halt program execution) + public static extern void WaitTime(double seconds); + + [CallingConvention(.Cdecl), LinkName("ShowCursor")] + /// Shows cursor + public static extern void ShowCursor(); + + [CallingConvention(.Cdecl), LinkName("HideCursor")] + /// Hides cursor + public static extern void HideCursor(); + + [CallingConvention(.Cdecl), LinkName("IsCursorHidden")] + /// Check if cursor is not visible + public static extern bool IsCursorHidden(); + + [CallingConvention(.Cdecl), LinkName("EnableCursor")] + /// Enables cursor (unlock cursor) + public static extern void EnableCursor(); + + [CallingConvention(.Cdecl), LinkName("DisableCursor")] + /// Disables cursor (lock cursor) + public static extern void DisableCursor(); + + [CallingConvention(.Cdecl), LinkName("IsCursorOnScreen")] + /// Check if cursor is on the screen + public static extern bool IsCursorOnScreen(); + + [CallingConvention(.Cdecl), LinkName("ClearBackground")] + /// Set background color (framebuffer clear color) + public static extern void ClearBackground(Color color); + + [CallingConvention(.Cdecl), LinkName("BeginDrawing")] + /// Setup canvas (framebuffer) to start drawing + public static extern void BeginDrawing(); + + [CallingConvention(.Cdecl), LinkName("EndDrawing")] + /// End canvas drawing and swap buffers (double buffering) + public static extern void EndDrawing(); + + [CallingConvention(.Cdecl), LinkName("BeginMode2D")] + /// Begin 2D mode with custom camera (2D) + public static extern void BeginMode2D(Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("EndMode2D")] + /// Ends 2D mode with custom camera + public static extern void EndMode2D(); + + [CallingConvention(.Cdecl), LinkName("BeginMode3D")] + /// Begin 3D mode with custom camera (3D) + public static extern void BeginMode3D(Camera3D camera); + + [CallingConvention(.Cdecl), LinkName("EndMode3D")] + /// Ends 3D mode and returns to default 2D orthographic mode + public static extern void EndMode3D(); + + [CallingConvention(.Cdecl), LinkName("BeginTextureMode")] + /// Begin drawing to render texture + public static extern void BeginTextureMode(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("EndTextureMode")] + /// Ends drawing to render texture + public static extern void EndTextureMode(); + + [CallingConvention(.Cdecl), LinkName("BeginShaderMode")] + /// Begin custom shader drawing + public static extern void BeginShaderMode(Shader shader); + + [CallingConvention(.Cdecl), LinkName("EndShaderMode")] + /// End custom shader drawing (use default shader) + public static extern void EndShaderMode(); + + [CallingConvention(.Cdecl), LinkName("BeginBlendMode")] + /// Begin blending mode (alpha, additive, multiplied, subtract, custom) + public static extern void BeginBlendMode(int mode); + + [CallingConvention(.Cdecl), LinkName("EndBlendMode")] + /// End blending mode (reset to default: alpha blending) + public static extern void EndBlendMode(); + + [CallingConvention(.Cdecl), LinkName("BeginScissorMode")] + /// Begin scissor mode (define screen area for following drawing) + public static extern void BeginScissorMode(int x, int y, int width, int height); + + [CallingConvention(.Cdecl), LinkName("EndScissorMode")] + /// End scissor mode + public static extern void EndScissorMode(); + + [CallingConvention(.Cdecl), LinkName("BeginVrStereoMode")] + /// Begin stereo rendering (requires VR simulator) + public static extern void BeginVrStereoMode(VrStereoConfig config); + + [CallingConvention(.Cdecl), LinkName("EndVrStereoMode")] + /// End stereo rendering (requires VR simulator) + public static extern void EndVrStereoMode(); + + [CallingConvention(.Cdecl), LinkName("LoadVrStereoConfig")] + /// Load VR stereo config for VR simulator device parameters + public static extern VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); + + [CallingConvention(.Cdecl), LinkName("UnloadVrStereoConfig")] + /// Unload VR stereo config + public static extern void UnloadVrStereoConfig(VrStereoConfig config); + + [CallingConvention(.Cdecl), LinkName("LoadShader")] + /// Load shader from files and bind default locations + public static extern Shader LoadShader(char8* vsFileName, char8* fsFileName); + + [CallingConvention(.Cdecl), LinkName("LoadShaderFromMemory")] + /// Load shader from code strings and bind default locations + public static extern Shader LoadShaderFromMemory(char8* vsCode, char8* fsCode); + + [CallingConvention(.Cdecl), LinkName("IsShaderReady")] + /// Check if a shader is ready + public static extern bool IsShaderReady(Shader shader); + + [CallingConvention(.Cdecl), LinkName("GetShaderLocation")] + /// Get shader uniform location + public static extern int GetShaderLocation(Shader shader, char8* uniformName); + + [CallingConvention(.Cdecl), LinkName("GetShaderLocationAttrib")] + /// Get shader attribute location + public static extern int GetShaderLocationAttrib(Shader shader, char8* attribName); + + [CallingConvention(.Cdecl), LinkName("SetShaderValue")] + /// Set shader uniform value + public static extern void SetShaderValue(Shader shader, int locIndex, const void * value, int uniformType); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueV")] + /// Set shader uniform value vector + public static extern void SetShaderValueV(Shader shader, int locIndex, const void * value, int uniformType, int count); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueMatrix")] + /// Set shader uniform value (matrix 4x4) + public static extern void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueTexture")] + /// Set shader uniform value for texture (sampler2d) + public static extern void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("UnloadShader")] + /// Unload shader from GPU memory (VRAM) + public static extern void UnloadShader(Shader shader); + + [CallingConvention(.Cdecl), LinkName("GetMouseRay")] + /// Get a ray trace from mouse position + public static extern Ray GetMouseRay(Vector2 mousePosition, Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetCameraMatrix")] + /// Get camera transform matrix (view matrix) + public static extern Matrix GetCameraMatrix(Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetCameraMatrix2D")] + /// Get camera 2d transform matrix + public static extern Matrix GetCameraMatrix2D(Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreen")] + /// Get the screen space position for a 3d world space position + public static extern Vector2 GetWorldToScreen(Vector3 position, Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetScreenToWorld2D")] + /// Get the world space position for a 2d camera screen space position + public static extern Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreenEx")] + /// Get size position for a 3d world space position + public static extern Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreen2D")] + /// Get the screen space position for a 2d camera world space position + public static extern Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("SetTargetFPS")] + /// Set target FPS (maximum) + public static extern void SetTargetFPS(int fps); + + [CallingConvention(.Cdecl), LinkName("GetFPS")] + /// Get current FPS + public static extern int GetFPS(); + + [CallingConvention(.Cdecl), LinkName("GetFrameTime")] + /// Get time in seconds for last frame drawn (delta time) + public static extern float GetFrameTime(); + + [CallingConvention(.Cdecl), LinkName("GetTime")] + /// Get elapsed time in seconds since InitWindow() + public static extern double GetTime(); + + [CallingConvention(.Cdecl), LinkName("GetRandomValue")] + /// Get a random value between min and max (both included) + public static extern int GetRandomValue(int min, int max); + + [CallingConvention(.Cdecl), LinkName("SetRandomSeed")] + /// Set the seed for the random number generator + public static extern void SetRandomSeed(c_uint seed); + + [CallingConvention(.Cdecl), LinkName("TakeScreenshot")] + /// Takes a screenshot of current screen (filename extension defines format) + public static extern void TakeScreenshot(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("SetConfigFlags")] + /// Setup init configuration flags (view FLAGS) + public static extern void SetConfigFlags(c_uint flags); + + [CallingConvention(.Cdecl), LinkName("TraceLog")] + /// Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) + public static extern void TraceLog(int logLevel, char8* text, ... args); + + [CallingConvention(.Cdecl), LinkName("SetTraceLogLevel")] + /// Set the current threshold (minimum) log level + public static extern void SetTraceLogLevel(int logLevel); + + [CallingConvention(.Cdecl), LinkName("MemAlloc")] + /// Internal memory allocator + public static extern void * MemAlloc(c_uint size); + + [CallingConvention(.Cdecl), LinkName("MemRealloc")] + /// Internal memory reallocator + public static extern void * MemRealloc(void * ptr, c_uint size); + + [CallingConvention(.Cdecl), LinkName("MemFree")] + /// Internal memory free + public static extern void MemFree(void * ptr); + + [CallingConvention(.Cdecl), LinkName("OpenURL")] + /// Open URL with default system browser (if available) + public static extern void OpenURL(char8* url); + + [CallingConvention(.Cdecl), LinkName("SetTraceLogCallback")] + /// Set custom trace log + public static extern void SetTraceLogCallback(TraceLogCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetLoadFileDataCallback")] + /// Set custom file binary data loader + public static extern void SetLoadFileDataCallback(LoadFileDataCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetSaveFileDataCallback")] + /// Set custom file binary data saver + public static extern void SetSaveFileDataCallback(SaveFileDataCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetLoadFileTextCallback")] + /// Set custom file text data loader + public static extern void SetLoadFileTextCallback(LoadFileTextCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetSaveFileTextCallback")] + /// Set custom file text data saver + public static extern void SetSaveFileTextCallback(SaveFileTextCallback callback); + + [CallingConvention(.Cdecl), LinkName("LoadFileData")] + /// Load file data as byte array (read) + public static extern unsigned char * LoadFileData(char8* fileName, unsigned int * bytesRead); + + [CallingConvention(.Cdecl), LinkName("UnloadFileData")] + /// Unload file data allocated by LoadFileData() + public static extern void UnloadFileData(unsigned char * data); + + [CallingConvention(.Cdecl), LinkName("SaveFileData")] + /// Save data to file from byte array (write), returns true on success + public static extern bool SaveFileData(char8* fileName, void * data, c_uint bytesToWrite); + + [CallingConvention(.Cdecl), LinkName("ExportDataAsCode")] + /// Export data to code (.h), returns true on success + public static extern bool ExportDataAsCode(const unsigned char * data, c_uint size, char8* fileName); + + [CallingConvention(.Cdecl), LinkName("LoadFileText")] + /// Load text data from file (read), returns a '\0' terminated string + public static extern char8* LoadFileText(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("UnloadFileText")] + /// Unload file text data allocated by LoadFileText() + public static extern void UnloadFileText(char8* text); + + [CallingConvention(.Cdecl), LinkName("SaveFileText")] + /// Save text data to file (write), string must be '\0' terminated, returns true on success + public static extern bool SaveFileText(char8* fileName, char8* text); + + [CallingConvention(.Cdecl), LinkName("FileExists")] + /// Check if file exists + public static extern bool FileExists(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("DirectoryExists")] + /// Check if a directory path exists + public static extern bool DirectoryExists(char8* dirPath); + + [CallingConvention(.Cdecl), LinkName("IsFileExtension")] + /// Check file extension (including point: .png, .wav) + public static extern bool IsFileExtension(char8* fileName, char8* ext); + + [CallingConvention(.Cdecl), LinkName("GetFileLength")] + /// Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h) + public static extern int GetFileLength(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("GetFileExtension")] + /// Get pointer to extension for a filename string (includes dot: '.png') + public static extern char8* GetFileExtension(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("GetFileName")] + /// Get pointer to filename for a path string + public static extern char8* GetFileName(char8* filePath); + + [CallingConvention(.Cdecl), LinkName("GetFileNameWithoutExt")] + /// Get filename string without extension (uses static string) + public static extern char8* GetFileNameWithoutExt(char8* filePath); + + [CallingConvention(.Cdecl), LinkName("GetDirectoryPath")] + /// Get full path for a given fileName with path (uses static string) + public static extern char8* GetDirectoryPath(char8* filePath); + + [CallingConvention(.Cdecl), LinkName("GetPrevDirectoryPath")] + /// Get previous directory path for a given path (uses static string) + public static extern char8* GetPrevDirectoryPath(char8* dirPath); + + [CallingConvention(.Cdecl), LinkName("GetWorkingDirectory")] + /// Get current working directory (uses static string) + public static extern char8* GetWorkingDirectory(); + + [CallingConvention(.Cdecl), LinkName("GetApplicationDirectory")] + /// Get the directory if the running application (uses static string) + public static extern char8* GetApplicationDirectory(); + + [CallingConvention(.Cdecl), LinkName("ChangeDirectory")] + /// Change working directory, return true on success + public static extern bool ChangeDirectory(char8* dir); + + [CallingConvention(.Cdecl), LinkName("IsPathFile")] + /// Check if a given path is a file or a directory + public static extern bool IsPathFile(char8* path); + + [CallingConvention(.Cdecl), LinkName("LoadDirectoryFiles")] + /// Load directory filepaths + public static extern FilePathList LoadDirectoryFiles(char8* dirPath); + + [CallingConvention(.Cdecl), LinkName("LoadDirectoryFilesEx")] + /// Load directory filepaths with extension filtering and recursive directory scan + public static extern FilePathList LoadDirectoryFilesEx(char8* basePath, char8* filter, bool scanSubdirs); + + [CallingConvention(.Cdecl), LinkName("UnloadDirectoryFiles")] + /// Unload filepaths + public static extern void UnloadDirectoryFiles(FilePathList files); + + [CallingConvention(.Cdecl), LinkName("IsFileDropped")] + /// Check if a file has been dropped into window + public static extern bool IsFileDropped(); + + [CallingConvention(.Cdecl), LinkName("LoadDroppedFiles")] + /// Load dropped filepaths + public static extern FilePathList LoadDroppedFiles(); + + [CallingConvention(.Cdecl), LinkName("UnloadDroppedFiles")] + /// Unload dropped filepaths + public static extern void UnloadDroppedFiles(FilePathList files); + + [CallingConvention(.Cdecl), LinkName("GetFileModTime")] + /// Get file modification time (last write time) + public static extern long GetFileModTime(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("CompressData")] + /// Compress data (DEFLATE algorithm), memory must be MemFree() + public static extern unsigned char * CompressData(const unsigned char * data, int dataSize, int * compDataSize); + + [CallingConvention(.Cdecl), LinkName("DecompressData")] + /// Decompress data (DEFLATE algorithm), memory must be MemFree() + public static extern unsigned char * DecompressData(const unsigned char * compData, int compDataSize, int * dataSize); + + [CallingConvention(.Cdecl), LinkName("EncodeDataBase64")] + /// Encode data to Base64 string, memory must be MemFree() + public static extern char8* EncodeDataBase64(const unsigned char * data, int dataSize, int * outputSize); + + [CallingConvention(.Cdecl), LinkName("DecodeDataBase64")] + /// Decode Base64 string data, memory must be MemFree() + public static extern unsigned char * DecodeDataBase64(const unsigned char * data, int * outputSize); + + [CallingConvention(.Cdecl), LinkName("IsKeyPressed")] + /// Check if a key has been pressed once + public static extern bool IsKeyPressed(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyDown")] + /// Check if a key is being pressed + public static extern bool IsKeyDown(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyReleased")] + /// Check if a key has been released once + public static extern bool IsKeyReleased(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyUp")] + /// Check if a key is NOT being pressed + public static extern bool IsKeyUp(int key); + + [CallingConvention(.Cdecl), LinkName("SetExitKey")] + /// Set a custom key to exit program (default is ESC) + public static extern void SetExitKey(int key); + + [CallingConvention(.Cdecl), LinkName("GetKeyPressed")] + /// Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty + public static extern int GetKeyPressed(); + + [CallingConvention(.Cdecl), LinkName("GetCharPressed")] + /// Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty + public static extern int GetCharPressed(); + + [CallingConvention(.Cdecl), LinkName("IsGamepadAvailable")] + /// Check if a gamepad is available + public static extern bool IsGamepadAvailable(int gamepad); + + [CallingConvention(.Cdecl), LinkName("GetGamepadName")] + /// Get gamepad internal name id + public static extern char8* GetGamepadName(int gamepad); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonPressed")] + /// Check if a gamepad button has been pressed once + public static extern bool IsGamepadButtonPressed(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonDown")] + /// Check if a gamepad button is being pressed + public static extern bool IsGamepadButtonDown(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonReleased")] + /// Check if a gamepad button has been released once + public static extern bool IsGamepadButtonReleased(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonUp")] + /// Check if a gamepad button is NOT being pressed + public static extern bool IsGamepadButtonUp(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("GetGamepadButtonPressed")] + /// Get the last gamepad button pressed + public static extern int GetGamepadButtonPressed(); + + [CallingConvention(.Cdecl), LinkName("GetGamepadAxisCount")] + /// Get gamepad axis count for a gamepad + public static extern int GetGamepadAxisCount(int gamepad); + + [CallingConvention(.Cdecl), LinkName("GetGamepadAxisMovement")] + /// Get axis movement value for a gamepad axis + public static extern float GetGamepadAxisMovement(int gamepad, int axis); + + [CallingConvention(.Cdecl), LinkName("SetGamepadMappings")] + /// Set internal gamepad mappings (SDL_GameControllerDB) + public static extern int SetGamepadMappings(char8* mappings); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonPressed")] + /// Check if a mouse button has been pressed once + public static extern bool IsMouseButtonPressed(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonDown")] + /// Check if a mouse button is being pressed + public static extern bool IsMouseButtonDown(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonReleased")] + /// Check if a mouse button has been released once + public static extern bool IsMouseButtonReleased(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonUp")] + /// Check if a mouse button is NOT being pressed + public static extern bool IsMouseButtonUp(int button); + + [CallingConvention(.Cdecl), LinkName("GetMouseX")] + /// Get mouse position X + public static extern int GetMouseX(); + + [CallingConvention(.Cdecl), LinkName("GetMouseY")] + /// Get mouse position Y + public static extern int GetMouseY(); + + [CallingConvention(.Cdecl), LinkName("GetMousePosition")] + /// Get mouse position XY + public static extern Vector2 GetMousePosition(); + + [CallingConvention(.Cdecl), LinkName("GetMouseDelta")] + /// Get mouse delta between frames + public static extern Vector2 GetMouseDelta(); + + [CallingConvention(.Cdecl), LinkName("SetMousePosition")] + /// Set mouse position XY + public static extern void SetMousePosition(int x, int y); + + [CallingConvention(.Cdecl), LinkName("SetMouseOffset")] + /// Set mouse offset + public static extern void SetMouseOffset(int offsetX, int offsetY); + + [CallingConvention(.Cdecl), LinkName("SetMouseScale")] + /// Set mouse scaling + public static extern void SetMouseScale(float scaleX, float scaleY); + + [CallingConvention(.Cdecl), LinkName("GetMouseWheelMove")] + /// Get mouse wheel movement for X or Y, whichever is larger + public static extern float GetMouseWheelMove(); + + [CallingConvention(.Cdecl), LinkName("GetMouseWheelMoveV")] + /// Get mouse wheel movement for both X and Y + public static extern Vector2 GetMouseWheelMoveV(); + + [CallingConvention(.Cdecl), LinkName("SetMouseCursor")] + /// Set mouse cursor + public static extern void SetMouseCursor(int cursor); + + [CallingConvention(.Cdecl), LinkName("GetTouchX")] + /// Get touch position X for touch point 0 (relative to screen size) + public static extern int GetTouchX(); + + [CallingConvention(.Cdecl), LinkName("GetTouchY")] + /// Get touch position Y for touch point 0 (relative to screen size) + public static extern int GetTouchY(); + + [CallingConvention(.Cdecl), LinkName("GetTouchPosition")] + /// Get touch position XY for a touch point index (relative to screen size) + public static extern Vector2 GetTouchPosition(int index); + + [CallingConvention(.Cdecl), LinkName("GetTouchPointId")] + /// Get touch point identifier for given index + public static extern int GetTouchPointId(int index); + + [CallingConvention(.Cdecl), LinkName("GetTouchPointCount")] + /// Get number of touch points + public static extern int GetTouchPointCount(); + + [CallingConvention(.Cdecl), LinkName("SetGesturesEnabled")] + /// Enable a set of gestures using flags + public static extern void SetGesturesEnabled(c_uint flags); + + [CallingConvention(.Cdecl), LinkName("IsGestureDetected")] + /// Check if a gesture have been detected + public static extern bool IsGestureDetected(int gesture); + + [CallingConvention(.Cdecl), LinkName("GetGestureDetected")] + /// Get latest detected gesture + public static extern int GetGestureDetected(); + + [CallingConvention(.Cdecl), LinkName("GetGestureHoldDuration")] + /// Get gesture hold time in milliseconds + public static extern float GetGestureHoldDuration(); + + [CallingConvention(.Cdecl), LinkName("GetGestureDragVector")] + /// Get gesture drag vector + public static extern Vector2 GetGestureDragVector(); + + [CallingConvention(.Cdecl), LinkName("GetGestureDragAngle")] + /// Get gesture drag angle + public static extern float GetGestureDragAngle(); + + [CallingConvention(.Cdecl), LinkName("GetGesturePinchVector")] + /// Get gesture pinch delta + public static extern Vector2 GetGesturePinchVector(); + + [CallingConvention(.Cdecl), LinkName("GetGesturePinchAngle")] + /// Get gesture pinch angle + public static extern float GetGesturePinchAngle(); + + [CallingConvention(.Cdecl), LinkName("UpdateCamera")] + /// Update camera position for selected mode + public static extern void UpdateCamera(Camera * camera, int mode); + + [CallingConvention(.Cdecl), LinkName("UpdateCameraPro")] + /// Update camera movement/rotation + public static extern void UpdateCameraPro(Camera * camera, Vector3 movement, Vector3 rotation, float zoom); + + [CallingConvention(.Cdecl), LinkName("SetShapesTexture")] + /// Set texture and rectangle to be used on shapes drawing + public static extern void SetShapesTexture(Texture2D texture, Rectangle source); + + [CallingConvention(.Cdecl), LinkName("DrawPixel")] + /// Draw a pixel + public static extern void DrawPixel(int posX, int posY, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPixelV")] + /// Draw a pixel (Vector version) + public static extern void DrawPixelV(Vector2 position, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLine")] + /// Draw a line + public static extern void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineV")] + /// Draw a line (Vector version) + public static extern void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineEx")] + /// Draw a line defining thickness + public static extern void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezier")] + /// Draw a line using cubic-bezier curves in-out + public static extern void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezierQuad")] + /// Draw line using quadratic bezier curves with a control point + public static extern void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezierCubic")] + /// Draw line using cubic bezier curves with 2 control points + public static extern void DrawLineBezierCubic(Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineStrip")] + /// Draw lines sequence + public static extern void DrawLineStrip(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircle")] + /// Draw a color-filled circle + public static extern void DrawCircle(int centerX, int centerY, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleSector")] + /// Draw a piece of a circle + public static extern void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleSectorLines")] + /// Draw circle sector outline + public static extern void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleGradient")] + /// Draw a gradient-filled circle + public static extern void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawCircleV")] + /// Draw a color-filled circle (Vector version) + public static extern void DrawCircleV(Vector2 center, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleLines")] + /// Draw circle outline + public static extern void DrawCircleLines(int centerX, int centerY, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawEllipse")] + /// Draw ellipse + public static extern void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawEllipseLines")] + /// Draw ellipse outline + public static extern void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRing")] + /// Draw ring + public static extern void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRingLines")] + /// Draw ring outline + public static extern void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangle")] + /// Draw a color-filled rectangle + public static extern void DrawRectangle(int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleV")] + /// Draw a color-filled rectangle (Vector version) + public static extern void DrawRectangleV(Vector2 position, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRec")] + /// Draw a color-filled rectangle + public static extern void DrawRectangleRec(Rectangle rec, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectanglePro")] + /// Draw a color-filled rectangle with pro parameters + public static extern void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientV")] + /// Draw a vertical-gradient-filled rectangle + public static extern void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientH")] + /// Draw a horizontal-gradient-filled rectangle + public static extern void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientEx")] + /// Draw a gradient-filled rectangle with custom vertex colors + public static extern void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleLines")] + /// Draw rectangle outline + public static extern void DrawRectangleLines(int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleLinesEx")] + /// Draw rectangle outline with extended parameters + public static extern void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRounded")] + /// Draw rectangle with rounded edges + public static extern void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRoundedLines")] + /// Draw rectangle with rounded edges outline + public static extern void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangle")] + /// Draw a color-filled triangle (vertex in counter-clockwise order!) + public static extern void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleLines")] + /// Draw triangle outline (vertex in counter-clockwise order!) + public static extern void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleFan")] + /// Draw a triangle fan defined by points (first vertex is the center) + public static extern void DrawTriangleFan(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleStrip")] + /// Draw a triangle strip defined by points + public static extern void DrawTriangleStrip(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPoly")] + /// Draw a regular polygon (Vector version) + public static extern void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPolyLines")] + /// Draw a polygon outline of n sides + public static extern void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPolyLinesEx")] + /// Draw a polygon outline of n sides with extended parameters + public static extern void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionRecs")] + /// Check collision between two rectangles + public static extern bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionCircles")] + /// Check collision between two circles + public static extern bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionCircleRec")] + /// Check collision between circle and rectangle + public static extern bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointRec")] + /// Check if point is inside rectangle + public static extern bool CheckCollisionPointRec(Vector2 point, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointCircle")] + /// Check if point is inside circle + public static extern bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointTriangle")] + /// Check if point is inside a triangle + public static extern bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointPoly")] + /// Check if point is within a polygon described by array of vertices + public static extern bool CheckCollisionPointPoly(Vector2 point, Vector2 * points, int pointCount); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionLines")] + /// Check the collision between two lines defined by two points each, returns collision point by reference + public static extern bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 * collisionPoint); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointLine")] + /// Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] + public static extern bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshold); + + [CallingConvention(.Cdecl), LinkName("GetCollisionRec")] + /// Get collision rectangle for two rectangles collision + public static extern Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); + + [CallingConvention(.Cdecl), LinkName("LoadImage")] + /// Load image from file into CPU memory (RAM) + public static extern Image LoadImage(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("LoadImageRaw")] + /// Load image from RAW file data + public static extern Image LoadImageRaw(char8* fileName, int width, int height, int format, int headerSize); + + [CallingConvention(.Cdecl), LinkName("LoadImageAnim")] + /// Load image sequence from file (frames appended to image.data) + public static extern Image LoadImageAnim(char8* fileName, int * frames); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromMemory")] + /// Load image from memory buffer, fileType refers to extension: i.e. '.png' + public static extern Image LoadImageFromMemory(char8* fileType, const unsigned char * fileData, int dataSize); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromTexture")] + /// Load image from GPU texture data + public static extern Image LoadImageFromTexture(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromScreen")] + /// Load image from screen buffer and (screenshot) + public static extern Image LoadImageFromScreen(); + + [CallingConvention(.Cdecl), LinkName("IsImageReady")] + /// Check if an image is ready + public static extern bool IsImageReady(Image image); + + [CallingConvention(.Cdecl), LinkName("UnloadImage")] + /// Unload image from CPU memory (RAM) + public static extern void UnloadImage(Image image); + + [CallingConvention(.Cdecl), LinkName("ExportImage")] + /// Export image data to file, returns true on success + public static extern bool ExportImage(Image image, char8* fileName); + + [CallingConvention(.Cdecl), LinkName("ExportImageAsCode")] + /// Export image as code file defining an array of bytes, returns true on success + public static extern bool ExportImageAsCode(Image image, char8* fileName); + + [CallingConvention(.Cdecl), LinkName("GenImageColor")] + /// Generate image: plain color + public static extern Image GenImageColor(int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientV")] + /// Generate image: vertical gradient + public static extern Image GenImageGradientV(int width, int height, Color top, Color bottom); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientH")] + /// Generate image: horizontal gradient + public static extern Image GenImageGradientH(int width, int height, Color left, Color right); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientRadial")] + /// Generate image: radial gradient + public static extern Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); + + [CallingConvention(.Cdecl), LinkName("GenImageChecked")] + /// Generate image: checked + public static extern Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); + + [CallingConvention(.Cdecl), LinkName("GenImageWhiteNoise")] + /// Generate image: white noise + public static extern Image GenImageWhiteNoise(int width, int height, float factor); + + [CallingConvention(.Cdecl), LinkName("GenImagePerlinNoise")] + /// Generate image: perlin noise + public static extern Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); + + [CallingConvention(.Cdecl), LinkName("GenImageCellular")] + /// Generate image: cellular algorithm, bigger tileSize means bigger cells + public static extern Image GenImageCellular(int width, int height, int tileSize); + + [CallingConvention(.Cdecl), LinkName("GenImageText")] + /// Generate image: grayscale image from text data + public static extern Image GenImageText(int width, int height, char8* text); + + [CallingConvention(.Cdecl), LinkName("ImageCopy")] + /// Create an image duplicate (useful for transformations) + public static extern Image ImageCopy(Image image); + + [CallingConvention(.Cdecl), LinkName("ImageFromImage")] + /// Create an image from another image piece + public static extern Image ImageFromImage(Image image, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("ImageText")] + /// Create an image from text (default font) + public static extern Image ImageText(char8* text, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageTextEx")] + /// Create an image from text (custom sprite font) + public static extern Image ImageTextEx(Font font, char8* text, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("ImageFormat")] + /// Convert image data to desired format + public static extern void ImageFormat(Image * image, int newFormat); + + [CallingConvention(.Cdecl), LinkName("ImageToPOT")] + /// Convert image to POT (power-of-two) + public static extern void ImageToPOT(Image * image, Color fill); + + [CallingConvention(.Cdecl), LinkName("ImageCrop")] + /// Crop an image to a defined rectangle + public static extern void ImageCrop(Image * image, Rectangle crop); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaCrop")] + /// Crop image depending on alpha value + public static extern void ImageAlphaCrop(Image * image, float threshold); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaClear")] + /// Clear alpha channel to desired color + public static extern void ImageAlphaClear(Image * image, Color color, float threshold); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaMask")] + /// Apply alpha mask to image + public static extern void ImageAlphaMask(Image * image, Image alphaMask); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaPremultiply")] + /// Premultiply alpha channel + public static extern void ImageAlphaPremultiply(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageBlurGaussian")] + /// Apply Gaussian blur using a box blur approximation + public static extern void ImageBlurGaussian(Image * image, int blurSize); + + [CallingConvention(.Cdecl), LinkName("ImageResize")] + /// Resize image (Bicubic scaling algorithm) + public static extern void ImageResize(Image * image, int newWidth, int newHeight); + + [CallingConvention(.Cdecl), LinkName("ImageResizeNN")] + /// Resize image (Nearest-Neighbor scaling algorithm) + public static extern void ImageResizeNN(Image * image, int newWidth, int newHeight); + + [CallingConvention(.Cdecl), LinkName("ImageResizeCanvas")] + /// Resize canvas and fill with color + public static extern void ImageResizeCanvas(Image * image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); + + [CallingConvention(.Cdecl), LinkName("ImageMipmaps")] + /// Compute all mipmap levels for a provided image + public static extern void ImageMipmaps(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageDither")] + /// Dither image data to 16bpp or lower (Floyd-Steinberg dithering) + public static extern void ImageDither(Image * image, int rBpp, int gBpp, int bBpp, int aBpp); + + [CallingConvention(.Cdecl), LinkName("ImageFlipVertical")] + /// Flip image vertically + public static extern void ImageFlipVertical(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageFlipHorizontal")] + /// Flip image horizontally + public static extern void ImageFlipHorizontal(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageRotateCW")] + /// Rotate image clockwise 90deg + public static extern void ImageRotateCW(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageRotateCCW")] + /// Rotate image counter-clockwise 90deg + public static extern void ImageRotateCCW(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorTint")] + /// Modify image color: tint + public static extern void ImageColorTint(Image * image, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageColorInvert")] + /// Modify image color: invert + public static extern void ImageColorInvert(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorGrayscale")] + /// Modify image color: grayscale + public static extern void ImageColorGrayscale(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorContrast")] + /// Modify image color: contrast (-100 to 100) + public static extern void ImageColorContrast(Image * image, float contrast); + + [CallingConvention(.Cdecl), LinkName("ImageColorBrightness")] + /// Modify image color: brightness (-255 to 255) + public static extern void ImageColorBrightness(Image * image, int brightness); + + [CallingConvention(.Cdecl), LinkName("ImageColorReplace")] + /// Modify image color: replace color + public static extern void ImageColorReplace(Image * image, Color color, Color replace); + + [CallingConvention(.Cdecl), LinkName("LoadImageColors")] + /// Load color data from image as a Color array (RGBA - 32bit) + public static extern Color * LoadImageColors(Image image); + + [CallingConvention(.Cdecl), LinkName("LoadImagePalette")] + /// Load colors palette from image as a Color array (RGBA - 32bit) + public static extern Color * LoadImagePalette(Image image, int maxPaletteSize, int * colorCount); + + [CallingConvention(.Cdecl), LinkName("UnloadImageColors")] + /// Unload color data loaded with LoadImageColors() + public static extern void UnloadImageColors(Color * colors); + + [CallingConvention(.Cdecl), LinkName("UnloadImagePalette")] + /// Unload colors palette loaded with LoadImagePalette() + public static extern void UnloadImagePalette(Color * colors); + + [CallingConvention(.Cdecl), LinkName("GetImageAlphaBorder")] + /// Get image alpha border rectangle + public static extern Rectangle GetImageAlphaBorder(Image image, float threshold); + + [CallingConvention(.Cdecl), LinkName("GetImageColor")] + /// Get image pixel color at (x, y) position + public static extern Color GetImageColor(Image image, int x, int y); + + [CallingConvention(.Cdecl), LinkName("ImageClearBackground")] + /// Clear image background with given color + public static extern void ImageClearBackground(Image * dst, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawPixel")] + /// Draw pixel within an image + public static extern void ImageDrawPixel(Image * dst, int posX, int posY, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawPixelV")] + /// Draw pixel within an image (Vector version) + public static extern void ImageDrawPixelV(Image * dst, Vector2 position, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawLine")] + /// Draw line within an image + public static extern void ImageDrawLine(Image * dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawLineV")] + /// Draw line within an image (Vector version) + public static extern void ImageDrawLineV(Image * dst, Vector2 start, Vector2 end, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircle")] + /// Draw a filled circle within an image + public static extern void ImageDrawCircle(Image * dst, int centerX, int centerY, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleV")] + /// Draw a filled circle within an image (Vector version) + public static extern void ImageDrawCircleV(Image * dst, Vector2 center, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleLines")] + /// Draw circle outline within an image + public static extern void ImageDrawCircleLines(Image * dst, int centerX, int centerY, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleLinesV")] + /// Draw circle outline within an image (Vector version) + public static extern void ImageDrawCircleLinesV(Image * dst, Vector2 center, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangle")] + /// Draw rectangle within an image + public static extern void ImageDrawRectangle(Image * dst, int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleV")] + /// Draw rectangle within an image (Vector version) + public static extern void ImageDrawRectangleV(Image * dst, Vector2 position, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleRec")] + /// Draw rectangle within an image + public static extern void ImageDrawRectangleRec(Image * dst, Rectangle rec, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleLines")] + /// Draw rectangle lines within an image + public static extern void ImageDrawRectangleLines(Image * dst, Rectangle rec, int thick, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDraw")] + /// Draw a source image within a destination image (tint applied to source) + public static extern void ImageDraw(Image * dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); + + [CallingConvention(.Cdecl), LinkName("ImageDrawText")] + /// Draw text (using default font) within an image (destination) + public static extern void ImageDrawText(Image * dst, char8* text, int posX, int posY, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawTextEx")] + /// Draw text (custom sprite font) within an image (destination) + public static extern void ImageDrawTextEx(Image * dst, Font font, char8* text, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("LoadTexture")] + /// Load texture from file into GPU memory (VRAM) + public static extern Texture2D LoadTexture(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("LoadTextureFromImage")] + /// Load texture from image data + public static extern Texture2D LoadTextureFromImage(Image image); + + [CallingConvention(.Cdecl), LinkName("LoadTextureCubemap")] + /// Load cubemap from image, multiple image cubemap layouts supported + public static extern TextureCubemap LoadTextureCubemap(Image image, int layout); + + [CallingConvention(.Cdecl), LinkName("LoadRenderTexture")] + /// Load texture for rendering (framebuffer) + public static extern RenderTexture2D LoadRenderTexture(int width, int height); + + [CallingConvention(.Cdecl), LinkName("IsTextureReady")] + /// Check if a texture is ready + public static extern bool IsTextureReady(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("UnloadTexture")] + /// Unload texture from GPU memory (VRAM) + public static extern void UnloadTexture(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("IsRenderTextureReady")] + /// Check if a render texture is ready + public static extern bool IsRenderTextureReady(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("UnloadRenderTexture")] + /// Unload render texture from GPU memory (VRAM) + public static extern void UnloadRenderTexture(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("UpdateTexture")] + /// Update GPU texture with new data + public static extern void UpdateTexture(Texture2D texture, const void * pixels); + + [CallingConvention(.Cdecl), LinkName("UpdateTextureRec")] + /// Update GPU texture rectangle with new data + public static extern void UpdateTextureRec(Texture2D texture, Rectangle rec, const void * pixels); + + [CallingConvention(.Cdecl), LinkName("GenTextureMipmaps")] + /// Generate GPU mipmaps for a texture + public static extern void GenTextureMipmaps(Texture2D * texture); + + [CallingConvention(.Cdecl), LinkName("SetTextureFilter")] + /// Set texture scaling filter mode + public static extern void SetTextureFilter(Texture2D texture, int filter); + + [CallingConvention(.Cdecl), LinkName("SetTextureWrap")] + /// Set texture wrapping mode + public static extern void SetTextureWrap(Texture2D texture, int wrap); + + [CallingConvention(.Cdecl), LinkName("DrawTexture")] + /// Draw a Texture2D + public static extern void DrawTexture(Texture2D texture, int posX, int posY, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureV")] + /// Draw a Texture2D with position defined as Vector2 + public static extern void DrawTextureV(Texture2D texture, Vector2 position, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureEx")] + /// Draw a Texture2D with extended parameters + public static extern void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureRec")] + /// Draw a part of a texture defined by a rectangle + public static extern void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTexturePro")] + /// Draw a part of a texture defined by a rectangle with 'pro' parameters + public static extern void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureNPatch")] + /// Draws a texture (or part of it) that stretches or shrinks nicely + public static extern void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("Fade")] + /// Get color with alpha applied, alpha goes from 0.0f to 1.0f + public static extern Color Fade(Color color, float alpha); + + [CallingConvention(.Cdecl), LinkName("ColorToInt")] + /// Get hexadecimal value for a Color + public static extern int ColorToInt(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorNormalize")] + /// Get Color normalized as float [0..1] + public static extern Vector4 ColorNormalize(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorFromNormalized")] + /// Get Color from normalized values [0..1] + public static extern Color ColorFromNormalized(Vector4 normalized); + + [CallingConvention(.Cdecl), LinkName("ColorToHSV")] + /// Get HSV values for a Color, hue [0..360], saturation/value [0..1] + public static extern Vector3 ColorToHSV(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorFromHSV")] + /// Get a Color from HSV values, hue [0..360], saturation/value [0..1] + public static extern Color ColorFromHSV(float hue, float saturation, float value); + + [CallingConvention(.Cdecl), LinkName("ColorTint")] + /// Get color multiplied with another color + public static extern Color ColorTint(Color color, Color tint); + + [CallingConvention(.Cdecl), LinkName("ColorBrightness")] + /// Get color with brightness correction, brightness factor goes from -1.0f to 1.0f + public static extern Color ColorBrightness(Color color, float factor); + + [CallingConvention(.Cdecl), LinkName("ColorContrast")] + /// Get color with contrast correction, contrast values between -1.0f and 1.0f + public static extern Color ColorContrast(Color color, float contrast); + + [CallingConvention(.Cdecl), LinkName("ColorAlpha")] + /// Get color with alpha applied, alpha goes from 0.0f to 1.0f + public static extern Color ColorAlpha(Color color, float alpha); + + [CallingConvention(.Cdecl), LinkName("ColorAlphaBlend")] + /// Get src alpha-blended into dst color with tint + public static extern Color ColorAlphaBlend(Color dst, Color src, Color tint); + + [CallingConvention(.Cdecl), LinkName("GetColor")] + /// Get Color structure from hexadecimal value + public static extern Color GetColor(c_uint hexValue); + + [CallingConvention(.Cdecl), LinkName("GetPixelColor")] + /// Get Color from a source pixel pointer of certain format + public static extern Color GetPixelColor(void * srcPtr, int format); + + [CallingConvention(.Cdecl), LinkName("SetPixelColor")] + /// Set color formatted into destination pixel pointer + public static extern void SetPixelColor(void * dstPtr, Color color, int format); + + [CallingConvention(.Cdecl), LinkName("GetPixelDataSize")] + /// Get pixel data size in bytes for certain format + public static extern int GetPixelDataSize(int width, int height, int format); + + [CallingConvention(.Cdecl), LinkName("GetFontDefault")] + /// Get the default Font + public static extern Font GetFontDefault(); + + [CallingConvention(.Cdecl), LinkName("LoadFont")] + /// Load font from file into GPU memory (VRAM) + public static extern Font LoadFont(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("LoadFontEx")] + /// Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set + public static extern Font LoadFontEx(char8* fileName, int fontSize, int * fontChars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("LoadFontFromImage")] + /// Load font from Image (XNA style) + public static extern Font LoadFontFromImage(Image image, Color key, int firstChar); + + [CallingConvention(.Cdecl), LinkName("LoadFontFromMemory")] + /// Load font from memory buffer, fileType refers to extension: i.e. '.ttf' + public static extern Font LoadFontFromMemory(char8* fileType, const unsigned char * fileData, int dataSize, int fontSize, int * fontChars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("IsFontReady")] + /// Check if a font is ready + public static extern bool IsFontReady(Font font); + + [CallingConvention(.Cdecl), LinkName("LoadFontData")] + /// Load font data for further use + public static extern GlyphInfo * LoadFontData(const unsigned char * fileData, int dataSize, int fontSize, int * fontChars, int glyphCount, int type); + + [CallingConvention(.Cdecl), LinkName("GenImageFontAtlas")] + /// Generate image font atlas using chars info + public static extern Image GenImageFontAtlas(const GlyphInfo * chars, Rectangle ** recs, int glyphCount, int fontSize, int padding, int packMethod); + + [CallingConvention(.Cdecl), LinkName("UnloadFontData")] + /// Unload font chars info data (RAM) + public static extern void UnloadFontData(GlyphInfo * chars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("UnloadFont")] + /// Unload font from GPU memory (VRAM) + public static extern void UnloadFont(Font font); + + [CallingConvention(.Cdecl), LinkName("ExportFontAsCode")] + /// Export font as code file, returns true on success + public static extern bool ExportFontAsCode(Font font, char8* fileName); + + [CallingConvention(.Cdecl), LinkName("DrawFPS")] + /// Draw current FPS + public static extern void DrawFPS(int posX, int posY); + + [CallingConvention(.Cdecl), LinkName("DrawText")] + /// Draw text (using default font) + public static extern void DrawText(char8* text, int posX, int posY, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTextEx")] + /// Draw text using font and additional parameters + public static extern void DrawTextEx(Font font, char8* text, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextPro")] + /// Draw text using Font and pro parameters (rotation) + public static extern void DrawTextPro(Font font, char8* text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextCodepoint")] + /// Draw one character (codepoint) + public static extern void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextCodepoints")] + /// Draw multiple character (codepoint) + public static extern void DrawTextCodepoints(Font font, const int * codepoints, int count, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("MeasureText")] + /// Measure string width for default font + public static extern int MeasureText(char8* text, int fontSize); + + [CallingConvention(.Cdecl), LinkName("MeasureTextEx")] + /// Measure string size for Font + public static extern Vector2 MeasureTextEx(Font font, char8* text, float fontSize, float spacing); + + [CallingConvention(.Cdecl), LinkName("GetGlyphIndex")] + /// Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found + public static extern int GetGlyphIndex(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("GetGlyphInfo")] + /// Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found + public static extern GlyphInfo GetGlyphInfo(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("GetGlyphAtlasRec")] + /// Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found + public static extern Rectangle GetGlyphAtlasRec(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("LoadUTF8")] + /// Load UTF-8 text encoded from codepoints array + public static extern char8* LoadUTF8(const int * codepoints, int length); + + [CallingConvention(.Cdecl), LinkName("UnloadUTF8")] + /// Unload UTF-8 text encoded from codepoints array + public static extern void UnloadUTF8(char8* text); + + [CallingConvention(.Cdecl), LinkName("LoadCodepoints")] + /// Load all codepoints from a UTF-8 text string, codepoints count returned by parameter + public static extern int * LoadCodepoints(char8* text, int * count); + + [CallingConvention(.Cdecl), LinkName("UnloadCodepoints")] + /// Unload codepoints data from memory + public static extern void UnloadCodepoints(int * codepoints); + + [CallingConvention(.Cdecl), LinkName("GetCodepointCount")] + /// Get total number of codepoints in a UTF-8 encoded string + public static extern int GetCodepointCount(char8* text); + + [CallingConvention(.Cdecl), LinkName("GetCodepoint")] + /// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepoint(char8* text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("GetCodepointNext")] + /// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepointNext(char8* text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("GetCodepointPrevious")] + /// Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepointPrevious(char8* text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("CodepointToUTF8")] + /// Encode one codepoint into UTF-8 byte array (array length returned as parameter) + public static extern char8* CodepointToUTF8(int codepoint, int * utf8Size); + + [CallingConvention(.Cdecl), LinkName("TextCopy")] + /// Copy one string to another, returns bytes copied + public static extern int TextCopy(char8* dst, char8* src); + + [CallingConvention(.Cdecl), LinkName("TextIsEqual")] + /// Check if two text string are equal + public static extern bool TextIsEqual(char8* text1, char8* text2); + + [CallingConvention(.Cdecl), LinkName("TextLength")] + /// Get text length, checks for '\0' ending + public static extern c_uint TextLength(char8* text); + + [CallingConvention(.Cdecl), LinkName("TextFormat")] + /// Text formatting with variables (sprintf() style) + public static extern char8* TextFormat(char8* text, ... args); + + [CallingConvention(.Cdecl), LinkName("TextSubtext")] + /// Get a piece of a text string + public static extern char8* TextSubtext(char8* text, int position, int length); + + [CallingConvention(.Cdecl), LinkName("TextReplace")] + /// Replace text string (WARNING: memory must be freed!) + public static extern char8* TextReplace(char8* text, char8* replace, char8* by); + + [CallingConvention(.Cdecl), LinkName("TextInsert")] + /// Insert text in a position (WARNING: memory must be freed!) + public static extern char8* TextInsert(char8* text, char8* insert, int position); + + [CallingConvention(.Cdecl), LinkName("TextJoin")] + /// Join text strings with delimiter + public static extern char8* TextJoin(const char ** textList, int count, char8* delimiter); + + [CallingConvention(.Cdecl), LinkName("TextSplit")] + /// Split text into multiple strings + public static extern const char ** TextSplit(char8* text, char delimiter, int * count); + + [CallingConvention(.Cdecl), LinkName("TextAppend")] + /// Append text at specific position and move cursor! + public static extern void TextAppend(char8* text, char8* append, int * position); + + [CallingConvention(.Cdecl), LinkName("TextFindIndex")] + /// Find first text occurrence within a string + public static extern int TextFindIndex(char8* text, char8* find); + + [CallingConvention(.Cdecl), LinkName("TextToUpper")] + /// Get upper case version of provided string + public static extern char8* TextToUpper(char8* text); + + [CallingConvention(.Cdecl), LinkName("TextToLower")] + /// Get lower case version of provided string + public static extern char8* TextToLower(char8* text); + + [CallingConvention(.Cdecl), LinkName("TextToPascal")] + /// Get Pascal case notation version of provided string + public static extern char8* TextToPascal(char8* text); + + [CallingConvention(.Cdecl), LinkName("TextToInteger")] + /// Get integer value from text (negative values not supported) + public static extern int TextToInteger(char8* text); + + [CallingConvention(.Cdecl), LinkName("DrawLine3D")] + /// Draw a line in 3D world space + public static extern void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPoint3D")] + /// Draw a point in 3D space, actually a small line + public static extern void DrawPoint3D(Vector3 position, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircle3D")] + /// Draw a circle in 3D world space + public static extern void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangle3D")] + /// Draw a color-filled triangle (vertex in counter-clockwise order!) + public static extern void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleStrip3D")] + /// Draw a triangle strip defined by points + public static extern void DrawTriangleStrip3D(Vector3 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCube")] + /// Draw cube + public static extern void DrawCube(Vector3 position, float width, float height, float length, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeV")] + /// Draw cube (Vector version) + public static extern void DrawCubeV(Vector3 position, Vector3 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeWires")] + /// Draw cube wires + public static extern void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeWiresV")] + /// Draw cube wires (Vector version) + public static extern void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphere")] + /// Draw sphere + public static extern void DrawSphere(Vector3 centerPos, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphereEx")] + /// Draw sphere with extended parameters + public static extern void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphereWires")] + /// Draw sphere wires + public static extern void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinder")] + /// Draw a cylinder/cone + public static extern void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderEx")] + /// Draw a cylinder with base at startPos and top at endPos + public static extern void DrawCylinderEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderWires")] + /// Draw a cylinder/cone wires + public static extern void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderWiresEx")] + /// Draw a cylinder wires with base at startPos and top at endPos + public static extern void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCapsule")] + /// Draw a capsule with the center of its sphere caps at startPos and endPos + public static extern void DrawCapsule(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCapsuleWires")] + /// Draw capsule wireframe with the center of its sphere caps at startPos and endPos + public static extern void DrawCapsuleWires(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPlane")] + /// Draw a plane XZ + public static extern void DrawPlane(Vector3 centerPos, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRay")] + /// Draw a ray line + public static extern void DrawRay(Ray ray, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawGrid")] + /// Draw a grid (centered at (0, 0, 0)) + public static extern void DrawGrid(int slices, float spacing); + + [CallingConvention(.Cdecl), LinkName("LoadModel")] + /// Load model from files (meshes and materials) + public static extern Model LoadModel(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("LoadModelFromMesh")] + /// Load model from generated mesh (default material) + public static extern Model LoadModelFromMesh(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("IsModelReady")] + /// Check if a model is ready + public static extern bool IsModelReady(Model model); + + [CallingConvention(.Cdecl), LinkName("UnloadModel")] + /// Unload model (including meshes) from memory (RAM and/or VRAM) + public static extern void UnloadModel(Model model); + + [CallingConvention(.Cdecl), LinkName("GetModelBoundingBox")] + /// Compute model bounding box limits (considers all meshes) + public static extern BoundingBox GetModelBoundingBox(Model model); + + [CallingConvention(.Cdecl), LinkName("DrawModel")] + /// Draw a model (with texture if set) + public static extern void DrawModel(Model model, Vector3 position, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelEx")] + /// Draw a model with extended parameters + public static extern void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelWires")] + /// Draw a model wires (with texture if set) + public static extern void DrawModelWires(Model model, Vector3 position, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelWiresEx")] + /// Draw a model wires (with texture if set) with extended parameters + public static extern void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBoundingBox")] + /// Draw bounding box (wires) + public static extern void DrawBoundingBox(BoundingBox box, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawBillboard")] + /// Draw a billboard texture + public static extern void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBillboardRec")] + /// Draw a billboard texture defined by source + public static extern void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBillboardPro")] + /// Draw a billboard texture defined by source and rotation + public static extern void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector3 up, Vector2 size, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("UploadMesh")] + /// Upload mesh vertex data in GPU and provide VAO/VBO ids + public static extern void UploadMesh(Mesh * mesh, bool dynamic); + + [CallingConvention(.Cdecl), LinkName("UpdateMeshBuffer")] + /// Update mesh vertex data in GPU for a specific buffer index + public static extern void UpdateMeshBuffer(Mesh mesh, int index, const void * data, int dataSize, int offset); + + [CallingConvention(.Cdecl), LinkName("UnloadMesh")] + /// Unload mesh data from CPU and GPU + public static extern void UnloadMesh(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("DrawMesh")] + /// Draw a 3d mesh with material and transform + public static extern void DrawMesh(Mesh mesh, Material material, Matrix transform); + + [CallingConvention(.Cdecl), LinkName("DrawMeshInstanced")] + /// Draw multiple mesh instances with material and different transforms + public static extern void DrawMeshInstanced(Mesh mesh, Material material, const Matrix * transforms, int instances); + + [CallingConvention(.Cdecl), LinkName("ExportMesh")] + /// Export mesh data to file, returns true on success + public static extern bool ExportMesh(Mesh mesh, char8* fileName); + + [CallingConvention(.Cdecl), LinkName("GetMeshBoundingBox")] + /// Compute mesh bounding box limits + public static extern BoundingBox GetMeshBoundingBox(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("GenMeshTangents")] + /// Compute mesh tangents + public static extern void GenMeshTangents(Mesh * mesh); + + [CallingConvention(.Cdecl), LinkName("GenMeshPoly")] + /// Generate polygonal mesh + public static extern Mesh GenMeshPoly(int sides, float radius); + + [CallingConvention(.Cdecl), LinkName("GenMeshPlane")] + /// Generate plane mesh (with subdivisions) + public static extern Mesh GenMeshPlane(float width, float length, int resX, int resZ); + + [CallingConvention(.Cdecl), LinkName("GenMeshCube")] + /// Generate cuboid mesh + public static extern Mesh GenMeshCube(float width, float height, float length); + + [CallingConvention(.Cdecl), LinkName("GenMeshSphere")] + /// Generate sphere mesh (standard sphere) + public static extern Mesh GenMeshSphere(float radius, int rings, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshHemiSphere")] + /// Generate half-sphere mesh (no bottom cap) + public static extern Mesh GenMeshHemiSphere(float radius, int rings, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshCylinder")] + /// Generate cylinder mesh + public static extern Mesh GenMeshCylinder(float radius, float height, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshCone")] + /// Generate cone/pyramid mesh + public static extern Mesh GenMeshCone(float radius, float height, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshTorus")] + /// Generate torus mesh + public static extern Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); + + [CallingConvention(.Cdecl), LinkName("GenMeshKnot")] + /// Generate trefoil knot mesh + public static extern Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); + + [CallingConvention(.Cdecl), LinkName("GenMeshHeightmap")] + /// Generate heightmap mesh from image data + public static extern Mesh GenMeshHeightmap(Image heightmap, Vector3 size); + + [CallingConvention(.Cdecl), LinkName("GenMeshCubicmap")] + /// Generate cubes-based map mesh from image data + public static extern Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); + + [CallingConvention(.Cdecl), LinkName("LoadMaterials")] + /// Load materials from model file + public static extern Material * LoadMaterials(char8* fileName, int * materialCount); + + [CallingConvention(.Cdecl), LinkName("LoadMaterialDefault")] + /// Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) + public static extern Material LoadMaterialDefault(); + + [CallingConvention(.Cdecl), LinkName("IsMaterialReady")] + /// Check if a material is ready + public static extern bool IsMaterialReady(Material material); + + [CallingConvention(.Cdecl), LinkName("UnloadMaterial")] + /// Unload material from GPU memory (VRAM) + public static extern void UnloadMaterial(Material material); + + [CallingConvention(.Cdecl), LinkName("SetMaterialTexture")] + /// Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) + public static extern void SetMaterialTexture(Material * material, int mapType, Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("SetModelMeshMaterial")] + /// Set material for a mesh + public static extern void SetModelMeshMaterial(Model * model, int meshId, int materialId); + + [CallingConvention(.Cdecl), LinkName("LoadModelAnimations")] + /// Load model animations from file + public static extern ModelAnimation * LoadModelAnimations(char8* fileName, unsigned int * animCount); + + [CallingConvention(.Cdecl), LinkName("UpdateModelAnimation")] + /// Update model animation pose + public static extern void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); + + [CallingConvention(.Cdecl), LinkName("UnloadModelAnimation")] + /// Unload animation data + public static extern void UnloadModelAnimation(ModelAnimation anim); + + [CallingConvention(.Cdecl), LinkName("UnloadModelAnimations")] + /// Unload animation array data + public static extern void UnloadModelAnimations(ModelAnimation * animations, c_uint count); + + [CallingConvention(.Cdecl), LinkName("IsModelAnimationValid")] + /// Check model animation skeleton match + public static extern bool IsModelAnimationValid(Model model, ModelAnimation anim); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionSpheres")] + /// Check collision between two spheres + public static extern bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionBoxes")] + /// Check collision between two bounding boxes + public static extern bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionBoxSphere")] + /// Check collision between box and sphere + public static extern bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionSphere")] + /// Get collision info between ray and sphere + public static extern RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionBox")] + /// Get collision info between ray and box + public static extern RayCollision GetRayCollisionBox(Ray ray, BoundingBox box); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionMesh")] + /// Get collision info between ray and mesh + public static extern RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionTriangle")] + /// Get collision info between ray and triangle + public static extern RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionQuad")] + /// Get collision info between ray and quad + public static extern RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4); + + [CallingConvention(.Cdecl), LinkName("InitAudioDevice")] + /// Initialize audio device and context + public static extern void InitAudioDevice(); + + [CallingConvention(.Cdecl), LinkName("CloseAudioDevice")] + /// Close the audio device and context + public static extern void CloseAudioDevice(); + + [CallingConvention(.Cdecl), LinkName("IsAudioDeviceReady")] + /// Check if audio device has been initialized successfully + public static extern bool IsAudioDeviceReady(); + + [CallingConvention(.Cdecl), LinkName("SetMasterVolume")] + /// Set master volume (listener) + public static extern void SetMasterVolume(float volume); + + [CallingConvention(.Cdecl), LinkName("LoadWave")] + /// Load wave data from file + public static extern Wave LoadWave(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("LoadWaveFromMemory")] + /// Load wave from memory buffer, fileType refers to extension: i.e. '.wav' + public static extern Wave LoadWaveFromMemory(char8* fileType, const unsigned char * fileData, int dataSize); + + [CallingConvention(.Cdecl), LinkName("IsWaveReady")] + /// Checks if wave data is ready + public static extern bool IsWaveReady(Wave wave); + + [CallingConvention(.Cdecl), LinkName("LoadSound")] + /// Load sound from file + public static extern Sound LoadSound(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("LoadSoundFromWave")] + /// Load sound from wave data + public static extern Sound LoadSoundFromWave(Wave wave); + + [CallingConvention(.Cdecl), LinkName("IsSoundReady")] + /// Checks if a sound is ready + public static extern bool IsSoundReady(Sound sound); + + [CallingConvention(.Cdecl), LinkName("UpdateSound")] + /// Update sound buffer with new data + public static extern void UpdateSound(Sound sound, const void * data, int sampleCount); + + [CallingConvention(.Cdecl), LinkName("UnloadWave")] + /// Unload wave data + public static extern void UnloadWave(Wave wave); + + [CallingConvention(.Cdecl), LinkName("UnloadSound")] + /// Unload sound + public static extern void UnloadSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("ExportWave")] + /// Export wave data to file, returns true on success + public static extern bool ExportWave(Wave wave, char8* fileName); + + [CallingConvention(.Cdecl), LinkName("ExportWaveAsCode")] + /// Export wave sample data to code (.h), returns true on success + public static extern bool ExportWaveAsCode(Wave wave, char8* fileName); + + [CallingConvention(.Cdecl), LinkName("PlaySound")] + /// Play a sound + public static extern void PlaySound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("StopSound")] + /// Stop playing a sound + public static extern void StopSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("PauseSound")] + /// Pause a sound + public static extern void PauseSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("ResumeSound")] + /// Resume a paused sound + public static extern void ResumeSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("IsSoundPlaying")] + /// Check if a sound is currently playing + public static extern bool IsSoundPlaying(Sound sound); + + [CallingConvention(.Cdecl), LinkName("SetSoundVolume")] + /// Set volume for a sound (1.0 is max level) + public static extern void SetSoundVolume(Sound sound, float volume); + + [CallingConvention(.Cdecl), LinkName("SetSoundPitch")] + /// Set pitch for a sound (1.0 is base level) + public static extern void SetSoundPitch(Sound sound, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetSoundPan")] + /// Set pan for a sound (0.5 is center) + public static extern void SetSoundPan(Sound sound, float pan); + + [CallingConvention(.Cdecl), LinkName("WaveCopy")] + /// Copy a wave to a new wave + public static extern Wave WaveCopy(Wave wave); + + [CallingConvention(.Cdecl), LinkName("WaveCrop")] + /// Crop a wave to defined samples range + public static extern void WaveCrop(Wave * wave, int initSample, int finalSample); + + [CallingConvention(.Cdecl), LinkName("WaveFormat")] + /// Convert wave data to desired format + public static extern void WaveFormat(Wave * wave, int sampleRate, int sampleSize, int channels); + + [CallingConvention(.Cdecl), LinkName("LoadWaveSamples")] + /// Load samples data from wave as a 32bit float data array + public static extern float * LoadWaveSamples(Wave wave); + + [CallingConvention(.Cdecl), LinkName("UnloadWaveSamples")] + /// Unload samples data loaded with LoadWaveSamples() + public static extern void UnloadWaveSamples(float * samples); + + [CallingConvention(.Cdecl), LinkName("LoadMusicStream")] + /// Load music stream from file + public static extern Music LoadMusicStream(char8* fileName); + + [CallingConvention(.Cdecl), LinkName("LoadMusicStreamFromMemory")] + /// Load music stream from data + public static extern Music LoadMusicStreamFromMemory(char8* fileType, const unsigned char * data, int dataSize); + + [CallingConvention(.Cdecl), LinkName("IsMusicReady")] + /// Checks if a music stream is ready + public static extern bool IsMusicReady(Music music); + + [CallingConvention(.Cdecl), LinkName("UnloadMusicStream")] + /// Unload music stream + public static extern void UnloadMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("PlayMusicStream")] + /// Start music playing + public static extern void PlayMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("IsMusicStreamPlaying")] + /// Check if music is playing + public static extern bool IsMusicStreamPlaying(Music music); + + [CallingConvention(.Cdecl), LinkName("UpdateMusicStream")] + /// Updates buffers for music streaming + public static extern void UpdateMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("StopMusicStream")] + /// Stop music playing + public static extern void StopMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("PauseMusicStream")] + /// Pause music playing + public static extern void PauseMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("ResumeMusicStream")] + /// Resume playing paused music + public static extern void ResumeMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("SeekMusicStream")] + /// Seek music to a position (in seconds) + public static extern void SeekMusicStream(Music music, float position); + + [CallingConvention(.Cdecl), LinkName("SetMusicVolume")] + /// Set volume for music (1.0 is max level) + public static extern void SetMusicVolume(Music music, float volume); + + [CallingConvention(.Cdecl), LinkName("SetMusicPitch")] + /// Set pitch for a music (1.0 is base level) + public static extern void SetMusicPitch(Music music, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetMusicPan")] + /// Set pan for a music (0.5 is center) + public static extern void SetMusicPan(Music music, float pan); + + [CallingConvention(.Cdecl), LinkName("GetMusicTimeLength")] + /// Get music time length (in seconds) + public static extern float GetMusicTimeLength(Music music); + + [CallingConvention(.Cdecl), LinkName("GetMusicTimePlayed")] + /// Get current music time played (in seconds) + public static extern float GetMusicTimePlayed(Music music); + + [CallingConvention(.Cdecl), LinkName("LoadAudioStream")] + /// Load audio stream (to stream raw audio pcm data) + public static extern AudioStream LoadAudioStream(c_uint sampleRate, c_uint sampleSize, c_uint channels); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamReady")] + /// Checks if an audio stream is ready + public static extern bool IsAudioStreamReady(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("UnloadAudioStream")] + /// Unload audio stream and free memory + public static extern void UnloadAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("UpdateAudioStream")] + /// Update audio stream buffers with data + public static extern void UpdateAudioStream(AudioStream stream, const void * data, int frameCount); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamProcessed")] + /// Check if any audio stream buffers requires refill + public static extern bool IsAudioStreamProcessed(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("PlayAudioStream")] + /// Play audio stream + public static extern void PlayAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("PauseAudioStream")] + /// Pause audio stream + public static extern void PauseAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("ResumeAudioStream")] + /// Resume audio stream + public static extern void ResumeAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamPlaying")] + /// Check if audio stream is playing + public static extern bool IsAudioStreamPlaying(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("StopAudioStream")] + /// Stop audio stream + public static extern void StopAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamVolume")] + /// Set volume for audio stream (1.0 is max level) + public static extern void SetAudioStreamVolume(AudioStream stream, float volume); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamPitch")] + /// Set pitch for audio stream (1.0 is base level) + public static extern void SetAudioStreamPitch(AudioStream stream, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamPan")] + /// Set pan for audio stream (0.5 is centered) + public static extern void SetAudioStreamPan(AudioStream stream, float pan); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamBufferSizeDefault")] + /// Default size for new audio streams + public static extern void SetAudioStreamBufferSizeDefault(int size); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamCallback")] + /// Audio thread callback to request new data + public static extern void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); + + [CallingConvention(.Cdecl), LinkName("AttachAudioStreamProcessor")] + /// Attach audio stream processor to stream + public static extern void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("DetachAudioStreamProcessor")] + /// Detach audio stream processor from stream + public static extern void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("AttachAudioMixedProcessor")] + /// Attach audio stream processor to the entire audio pipeline + public static extern void AttachAudioMixedProcessor(AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("DetachAudioMixedProcessor")] + /// Detach audio stream processor from the entire audio pipeline + public static extern void DetachAudioMixedProcessor(AudioCallback processor); + + } +} diff --git a/beef/recovery/Program_9CD33CC5116FD7C0FF9AA1893A3FA518.bf b/beef/recovery/Program_9CD33CC5116FD7C0FF9AA1893A3FA518.bf new file mode 100644 index 0000000..51f11f2 --- /dev/null +++ b/beef/recovery/Program_9CD33CC5116FD7C0FF9AA1893A3FA518.bf @@ -0,0 +1,11 @@ +namespace beef; + +using Raylib; + +class Program +{ + public static int Main() + { + return 0; + } +} \ No newline at end of file diff --git a/beef/recovery/Raylib_61745037C490FE35B4128EB7C738167F.bf b/beef/recovery/Raylib_61745037C490FE35B4128EB7C738167F.bf new file mode 100644 index 0000000..6e6ed3b --- /dev/null +++ b/beef/recovery/Raylib_61745037C490FE35B4128EB7C738167F.bf @@ -0,0 +1,2076 @@ +using System; +using System.Interop; + +namespace Raylib; + +static +{ + [CallingConvention(.Cdecl), LinkName("InitWindow")] + /// Initialize window and OpenGL context + public static extern void InitWindow(int width, int height, char8 * title); + + [CallingConvention(.Cdecl), LinkName("WindowShouldClose")] + /// Check if KEY_ESCAPE pressed or Close icon pressed + public static extern bool WindowShouldClose(); + + [CallingConvention(.Cdecl), LinkName("CloseWindow")] + /// Close window and unload OpenGL context + public static extern void CloseWindow(); + + [CallingConvention(.Cdecl), LinkName("IsWindowReady")] + /// Check if window has been initialized successfully + public static extern bool IsWindowReady(); + + [CallingConvention(.Cdecl), LinkName("IsWindowFullscreen")] + /// Check if window is currently fullscreen + public static extern bool IsWindowFullscreen(); + + [CallingConvention(.Cdecl), LinkName("IsWindowHidden")] + /// Check if window is currently hidden (only PLATFORM_DESKTOP) + public static extern bool IsWindowHidden(); + + [CallingConvention(.Cdecl), LinkName("IsWindowMinimized")] + /// Check if window is currently minimized (only PLATFORM_DESKTOP) + public static extern bool IsWindowMinimized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowMaximized")] + /// Check if window is currently maximized (only PLATFORM_DESKTOP) + public static extern bool IsWindowMaximized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowFocused")] + /// Check if window is currently focused (only PLATFORM_DESKTOP) + public static extern bool IsWindowFocused(); + + [CallingConvention(.Cdecl), LinkName("IsWindowResized")] + /// Check if window has been resized last frame + public static extern bool IsWindowResized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowState")] + /// Check if one specific window flag is enabled + public static extern bool IsWindowState(int flag); + + [CallingConvention(.Cdecl), LinkName("SetWindowState")] + /// Set window configuration state using flags (only PLATFORM_DESKTOP) + public static extern void SetWindowState(int flags); + + [CallingConvention(.Cdecl), LinkName("ClearWindowState")] + /// Clear window configuration state flags + public static extern void ClearWindowState(int flags); + + [CallingConvention(.Cdecl), LinkName("ToggleFullscreen")] + /// Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) + public static extern void ToggleFullscreen(); + + [CallingConvention(.Cdecl), LinkName("MaximizeWindow")] + /// Set window state: maximized, if resizable (only PLATFORM_DESKTOP) + public static extern void MaximizeWindow(); + + [CallingConvention(.Cdecl), LinkName("MinimizeWindow")] + /// Set window state: minimized, if resizable (only PLATFORM_DESKTOP) + public static extern void MinimizeWindow(); + + [CallingConvention(.Cdecl), LinkName("RestoreWindow")] + /// Set window state: not minimized/maximized (only PLATFORM_DESKTOP) + public static extern void RestoreWindow(); + + [CallingConvention(.Cdecl), LinkName("SetWindowIcon")] + /// Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP) + public static extern void SetWindowIcon(Image image); + + [CallingConvention(.Cdecl), LinkName("SetWindowIcons")] + /// Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) + public static extern void SetWindowIcons(Image * images, int count); + + [CallingConvention(.Cdecl), LinkName("SetWindowTitle")] + /// Set title for window (only PLATFORM_DESKTOP) + public static extern void SetWindowTitle(char8 * title); + + [CallingConvention(.Cdecl), LinkName("SetWindowPosition")] + /// Set window position on screen (only PLATFORM_DESKTOP) + public static extern void SetWindowPosition(int x, int y); + + [CallingConvention(.Cdecl), LinkName("SetWindowMonitor")] + /// Set monitor for the current window (fullscreen mode) + public static extern void SetWindowMonitor(int monitor); + + [CallingConvention(.Cdecl), LinkName("SetWindowMinSize")] + /// Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) + public static extern void SetWindowMinSize(int width, int height); + + [CallingConvention(.Cdecl), LinkName("SetWindowSize")] + /// Set window dimensions + public static extern void SetWindowSize(int width, int height); + + [CallingConvention(.Cdecl), LinkName("SetWindowOpacity")] + /// Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) + public static extern void SetWindowOpacity(float opacity); + + [CallingConvention(.Cdecl), LinkName("GetWindowHandle")] + /// Get native window handle + public static extern void * GetWindowHandle(); + + [CallingConvention(.Cdecl), LinkName("GetScreenWidth")] + /// Get current screen width + public static extern int GetScreenWidth(); + + [CallingConvention(.Cdecl), LinkName("GetScreenHeight")] + /// Get current screen height + public static extern int GetScreenHeight(); + + [CallingConvention(.Cdecl), LinkName("GetRenderWidth")] + /// Get current render width (it considers HiDPI) + public static extern int GetRenderWidth(); + + [CallingConvention(.Cdecl), LinkName("GetRenderHeight")] + /// Get current render height (it considers HiDPI) + public static extern int GetRenderHeight(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorCount")] + /// Get number of connected monitors + public static extern int GetMonitorCount(); + + [CallingConvention(.Cdecl), LinkName("GetCurrentMonitor")] + /// Get current connected monitor + public static extern int GetCurrentMonitor(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPosition")] + /// Get specified monitor position + public static extern Vector2 GetMonitorPosition(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorWidth")] + /// Get specified monitor width (current video mode used by monitor) + public static extern int GetMonitorWidth(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorHeight")] + /// Get specified monitor height (current video mode used by monitor) + public static extern int GetMonitorHeight(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPhysicalWidth")] + /// Get specified monitor physical width in millimetres + public static extern int GetMonitorPhysicalWidth(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPhysicalHeight")] + /// Get specified monitor physical height in millimetres + public static extern int GetMonitorPhysicalHeight(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorRefreshRate")] + /// Get specified monitor refresh rate + public static extern int GetMonitorRefreshRate(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetWindowPosition")] + /// Get window position XY on monitor + public static extern Vector2 GetWindowPosition(); + + [CallingConvention(.Cdecl), LinkName("GetWindowScaleDPI")] + /// Get window scale DPI factor + public static extern Vector2 GetWindowScaleDPI(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorName")] + /// Get the human-readable, UTF-8 encoded name of the primary monitor + public static extern char8 * GetMonitorName(int monitor); + + [CallingConvention(.Cdecl), LinkName("SetClipboardText")] + /// Set clipboard text content + public static extern void SetClipboardText(char8 * text); + + [CallingConvention(.Cdecl), LinkName("GetClipboardText")] + /// Get clipboard text content + public static extern char8 * GetClipboardText(); + + [CallingConvention(.Cdecl), LinkName("EnableEventWaiting")] + /// Enable waiting for events on EndDrawing(), no automatic event polling + public static extern void EnableEventWaiting(); + + [CallingConvention(.Cdecl), LinkName("DisableEventWaiting")] + /// Disable waiting for events on EndDrawing(), automatic events polling + public static extern void DisableEventWaiting(); + + [CallingConvention(.Cdecl), LinkName("SwapScreenBuffer")] + /// Swap back buffer with front buffer (screen drawing) + public static extern void SwapScreenBuffer(); + + [CallingConvention(.Cdecl), LinkName("PollInputEvents")] + /// Register all input events + public static extern void PollInputEvents(); + + [CallingConvention(.Cdecl), LinkName("WaitTime")] + /// Wait for some time (halt program execution) + public static extern void WaitTime(double seconds); + + [CallingConvention(.Cdecl), LinkName("ShowCursor")] + /// Shows cursor + public static extern void ShowCursor(); + + [CallingConvention(.Cdecl), LinkName("HideCursor")] + /// Hides cursor + public static extern void HideCursor(); + + [CallingConvention(.Cdecl), LinkName("IsCursorHidden")] + /// Check if cursor is not visible + public static extern bool IsCursorHidden(); + + [CallingConvention(.Cdecl), LinkName("EnableCursor")] + /// Enables cursor (unlock cursor) + public static extern void EnableCursor(); + + [CallingConvention(.Cdecl), LinkName("DisableCursor")] + /// Disables cursor (lock cursor) + public static extern void DisableCursor(); + + [CallingConvention(.Cdecl), LinkName("IsCursorOnScreen")] + /// Check if cursor is on the screen + public static extern bool IsCursorOnScreen(); + + [CallingConvention(.Cdecl), LinkName("ClearBackground")] + /// Set background color (framebuffer clear color) + public static extern void ClearBackground(Color color); + + [CallingConvention(.Cdecl), LinkName("BeginDrawing")] + /// Setup canvas (framebuffer) to start drawing + public static extern void BeginDrawing(); + + [CallingConvention(.Cdecl), LinkName("EndDrawing")] + /// End canvas drawing and swap buffers (double buffering) + public static extern void EndDrawing(); + + [CallingConvention(.Cdecl), LinkName("BeginMode2D")] + /// Begin 2D mode with custom camera (2D) + public static extern void BeginMode2D(Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("EndMode2D")] + /// Ends 2D mode with custom camera + public static extern void EndMode2D(); + + [CallingConvention(.Cdecl), LinkName("BeginMode3D")] + /// Begin 3D mode with custom camera (3D) + public static extern void BeginMode3D(Camera3D camera); + + [CallingConvention(.Cdecl), LinkName("EndMode3D")] + /// Ends 3D mode and returns to default 2D orthographic mode + public static extern void EndMode3D(); + + [CallingConvention(.Cdecl), LinkName("BeginTextureMode")] + /// Begin drawing to render texture + public static extern void BeginTextureMode(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("EndTextureMode")] + /// Ends drawing to render texture + public static extern void EndTextureMode(); + + [CallingConvention(.Cdecl), LinkName("BeginShaderMode")] + /// Begin custom shader drawing + public static extern void BeginShaderMode(Shader shader); + + [CallingConvention(.Cdecl), LinkName("EndShaderMode")] + /// End custom shader drawing (use default shader) + public static extern void EndShaderMode(); + + [CallingConvention(.Cdecl), LinkName("BeginBlendMode")] + /// Begin blending mode (alpha, additive, multiplied, subtract, custom) + public static extern void BeginBlendMode(int mode); + + [CallingConvention(.Cdecl), LinkName("EndBlendMode")] + /// End blending mode (reset to default: alpha blending) + public static extern void EndBlendMode(); + + [CallingConvention(.Cdecl), LinkName("BeginScissorMode")] + /// Begin scissor mode (define screen area for following drawing) + public static extern void BeginScissorMode(int x, int y, int width, int height); + + [CallingConvention(.Cdecl), LinkName("EndScissorMode")] + /// End scissor mode + public static extern void EndScissorMode(); + + [CallingConvention(.Cdecl), LinkName("BeginVrStereoMode")] + /// Begin stereo rendering (requires VR simulator) + public static extern void BeginVrStereoMode(VrStereoConfig config); + + [CallingConvention(.Cdecl), LinkName("EndVrStereoMode")] + /// End stereo rendering (requires VR simulator) + public static extern void EndVrStereoMode(); + + [CallingConvention(.Cdecl), LinkName("LoadVrStereoConfig")] + /// Load VR stereo config for VR simulator device parameters + public static extern VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); + + [CallingConvention(.Cdecl), LinkName("UnloadVrStereoConfig")] + /// Unload VR stereo config + public static extern void UnloadVrStereoConfig(VrStereoConfig config); + + [CallingConvention(.Cdecl), LinkName("LoadShader")] + /// Load shader from files and bind default locations + public static extern Shader LoadShader(char8 * vsFileName, char8 * fsFileName); + + [CallingConvention(.Cdecl), LinkName("LoadShaderFromMemory")] + /// Load shader from code strings and bind default locations + public static extern Shader LoadShaderFromMemory(char8 * vsCode, char8 * fsCode); + + [CallingConvention(.Cdecl), LinkName("IsShaderReady")] + /// Check if a shader is ready + public static extern bool IsShaderReady(Shader shader); + + [CallingConvention(.Cdecl), LinkName("GetShaderLocation")] + /// Get shader uniform location + public static extern int GetShaderLocation(Shader shader, char8 * uniformName); + + [CallingConvention(.Cdecl), LinkName("GetShaderLocationAttrib")] + /// Get shader attribute location + public static extern int GetShaderLocationAttrib(Shader shader, char8 * attribName); + + [CallingConvention(.Cdecl), LinkName("SetShaderValue")] + /// Set shader uniform value + public static extern void SetShaderValue(Shader shader, int locIndex, void * value, int uniformType); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueV")] + /// Set shader uniform value vector + public static extern void SetShaderValueV(Shader shader, int locIndex, void * value, int uniformType, int count); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueMatrix")] + /// Set shader uniform value (matrix 4x4) + public static extern void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueTexture")] + /// Set shader uniform value for texture (sampler2d) + public static extern void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("UnloadShader")] + /// Unload shader from GPU memory (VRAM) + public static extern void UnloadShader(Shader shader); + + [CallingConvention(.Cdecl), LinkName("GetMouseRay")] + /// Get a ray trace from mouse position + public static extern Ray GetMouseRay(Vector2 mousePosition, Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetCameraMatrix")] + /// Get camera transform matrix (view matrix) + public static extern Matrix GetCameraMatrix(Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetCameraMatrix2D")] + /// Get camera 2d transform matrix + public static extern Matrix GetCameraMatrix2D(Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreen")] + /// Get the screen space position for a 3d world space position + public static extern Vector2 GetWorldToScreen(Vector3 position, Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetScreenToWorld2D")] + /// Get the world space position for a 2d camera screen space position + public static extern Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreenEx")] + /// Get size position for a 3d world space position + public static extern Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreen2D")] + /// Get the screen space position for a 2d camera world space position + public static extern Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("SetTargetFPS")] + /// Set target FPS (maximum) + public static extern void SetTargetFPS(int fps); + + [CallingConvention(.Cdecl), LinkName("GetFPS")] + /// Get current FPS + public static extern int GetFPS(); + + [CallingConvention(.Cdecl), LinkName("GetFrameTime")] + /// Get time in seconds for last frame drawn (delta time) + public static extern float GetFrameTime(); + + [CallingConvention(.Cdecl), LinkName("GetTime")] + /// Get elapsed time in seconds since InitWindow() + public static extern double GetTime(); + + [CallingConvention(.Cdecl), LinkName("GetRandomValue")] + /// Get a random value between min and max (both included) + public static extern int GetRandomValue(int min, int max); + + [CallingConvention(.Cdecl), LinkName("SetRandomSeed")] + /// Set the seed for the random number generator + public static extern void SetRandomSeed(int seed); + + [CallingConvention(.Cdecl), LinkName("TakeScreenshot")] + /// Takes a screenshot of current screen (filename extension defines format) + public static extern void TakeScreenshot(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("SetConfigFlags")] + /// Setup init configuration flags (view FLAGS) + public static extern void SetConfigFlags(int flags); + + [CallingConvention(.Cdecl), LinkName("TraceLog")] + /// Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) + public static extern void TraceLog(int logLevel, char8 * text); + + [CallingConvention(.Cdecl), LinkName("SetTraceLogLevel")] + /// Set the current threshold (minimum) log level + public static extern void SetTraceLogLevel(int logLevel); + + [CallingConvention(.Cdecl), LinkName("MemAlloc")] + /// Internal memory allocator + public static extern void * MemAlloc(int size); + + [CallingConvention(.Cdecl), LinkName("MemRealloc")] + /// Internal memory reallocator + public static extern void * MemRealloc(void * ptr, int size); + + [CallingConvention(.Cdecl), LinkName("MemFree")] + /// Internal memory free + public static extern void MemFree(void * ptr); + + [CallingConvention(.Cdecl), LinkName("OpenURL")] + /// Open URL with default system browser (if available) + public static extern void OpenURL(char8 * url); + + [CallingConvention(.Cdecl), LinkName("SetTraceLogCallback")] + /// Set custom trace log + public static extern void SetTraceLogCallback(TraceLogCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetLoadFileDataCallback")] + /// Set custom file binary data loader + public static extern void SetLoadFileDataCallback(LoadFileDataCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetSaveFileDataCallback")] + /// Set custom file binary data saver + public static extern void SetSaveFileDataCallback(SaveFileDataCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetLoadFileTextCallback")] + /// Set custom file text data loader + public static extern void SetLoadFileTextCallback(LoadFileTextCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetSaveFileTextCallback")] + /// Set custom file text data saver + public static extern void SetSaveFileTextCallback(SaveFileTextCallback callback); + + [CallingConvention(.Cdecl), LinkName("LoadFileData")] + /// Load file data as byte array (read) + public static extern char8 * LoadFileData(char8 * fileName, int * bytesRead); + + [CallingConvention(.Cdecl), LinkName("UnloadFileData")] + /// Unload file data allocated by LoadFileData() + public static extern void UnloadFileData(char8 * data); + + [CallingConvention(.Cdecl), LinkName("SaveFileData")] + /// Save data to file from byte array (write), returns true on success + public static extern bool SaveFileData(char8 * fileName, void * data, int bytesToWrite); + + [CallingConvention(.Cdecl), LinkName("ExportDataAsCode")] + /// Export data to code (.h), returns true on success + public static extern bool ExportDataAsCode(char8 * data, int size, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadFileText")] + /// Load text data from file (read), returns a '\0' terminated string + public static extern char8 * LoadFileText(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("UnloadFileText")] + /// Unload file text data allocated by LoadFileText() + public static extern void UnloadFileText(char8 * text); + + [CallingConvention(.Cdecl), LinkName("SaveFileText")] + /// Save text data to file (write), string must be '\0' terminated, returns true on success + public static extern bool SaveFileText(char8 * fileName, char8 * text); + + [CallingConvention(.Cdecl), LinkName("FileExists")] + /// Check if file exists + public static extern bool FileExists(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("DirectoryExists")] + /// Check if a directory path exists + public static extern bool DirectoryExists(char8 * dirPath); + + [CallingConvention(.Cdecl), LinkName("IsFileExtension")] + /// Check file extension (including point: .png, .wav) + public static extern bool IsFileExtension(char8 * fileName, char8 * ext); + + [CallingConvention(.Cdecl), LinkName("GetFileLength")] + /// Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h) + public static extern int GetFileLength(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("GetFileExtension")] + /// Get pointer to extension for a filename string (includes dot: '.png') + public static extern char8 * GetFileExtension(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("GetFileName")] + /// Get pointer to filename for a path string + public static extern char8 * GetFileName(char8 * filePath); + + [CallingConvention(.Cdecl), LinkName("GetFileNameWithoutExt")] + /// Get filename string without extension (uses static string) + public static extern char8 * GetFileNameWithoutExt(char8 * filePath); + + [CallingConvention(.Cdecl), LinkName("GetDirectoryPath")] + /// Get full path for a given fileName with path (uses static string) + public static extern char8 * GetDirectoryPath(char8 * filePath); + + [CallingConvention(.Cdecl), LinkName("GetPrevDirectoryPath")] + /// Get previous directory path for a given path (uses static string) + public static extern char8 * GetPrevDirectoryPath(char8 * dirPath); + + [CallingConvention(.Cdecl), LinkName("GetWorkingDirectory")] + /// Get current working directory (uses static string) + public static extern char8 * GetWorkingDirectory(); + + [CallingConvention(.Cdecl), LinkName("GetApplicationDirectory")] + /// Get the directory if the running application (uses static string) + public static extern char8 * GetApplicationDirectory(); + + [CallingConvention(.Cdecl), LinkName("ChangeDirectory")] + /// Change working directory, return true on success + public static extern bool ChangeDirectory(char8 * dir); + + [CallingConvention(.Cdecl), LinkName("IsPathFile")] + /// Check if a given path is a file or a directory + public static extern bool IsPathFile(char8 * path); + + [CallingConvention(.Cdecl), LinkName("LoadDirectoryFiles")] + /// Load directory filepaths + public static extern FilePathList LoadDirectoryFiles(char8 * dirPath); + + [CallingConvention(.Cdecl), LinkName("LoadDirectoryFilesEx")] + /// Load directory filepaths with extension filtering and recursive directory scan + public static extern FilePathList LoadDirectoryFilesEx(char8 * basePath, char8 * filter, bool scanSubdirs); + + [CallingConvention(.Cdecl), LinkName("UnloadDirectoryFiles")] + /// Unload filepaths + public static extern void UnloadDirectoryFiles(FilePathList files); + + [CallingConvention(.Cdecl), LinkName("IsFileDropped")] + /// Check if a file has been dropped into window + public static extern bool IsFileDropped(); + + [CallingConvention(.Cdecl), LinkName("LoadDroppedFiles")] + /// Load dropped filepaths + public static extern FilePathList LoadDroppedFiles(); + + [CallingConvention(.Cdecl), LinkName("UnloadDroppedFiles")] + /// Unload dropped filepaths + public static extern void UnloadDroppedFiles(FilePathList files); + + [CallingConvention(.Cdecl), LinkName("GetFileModTime")] + /// Get file modification time (last write time) + public static extern int32 GetFileModTime(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("CompressData")] + /// Compress data (DEFLATE algorithm), memory must be MemFree() + public static extern char8 * CompressData(char8 * data, int dataSize, int * compDataSize); + + [CallingConvention(.Cdecl), LinkName("DecompressData")] + /// Decompress data (DEFLATE algorithm), memory must be MemFree() + public static extern char8 * DecompressData(char8 * compData, int compDataSize, int * dataSize); + + [CallingConvention(.Cdecl), LinkName("EncodeDataBase64")] + /// Encode data to Base64 string, memory must be MemFree() + public static extern char8 * EncodeDataBase64(char8 * data, int dataSize, int * outputSize); + + [CallingConvention(.Cdecl), LinkName("DecodeDataBase64")] + /// Decode Base64 string data, memory must be MemFree() + public static extern char8 * DecodeDataBase64(char8 * data, int * outputSize); + + [CallingConvention(.Cdecl), LinkName("IsKeyPressed")] + /// Check if a key has been pressed once + public static extern bool IsKeyPressed(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyDown")] + /// Check if a key is being pressed + public static extern bool IsKeyDown(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyReleased")] + /// Check if a key has been released once + public static extern bool IsKeyReleased(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyUp")] + /// Check if a key is NOT being pressed + public static extern bool IsKeyUp(int key); + + [CallingConvention(.Cdecl), LinkName("SetExitKey")] + /// Set a custom key to exit program (default is ESC) + public static extern void SetExitKey(int key); + + [CallingConvention(.Cdecl), LinkName("GetKeyPressed")] + /// Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty + public static extern int GetKeyPressed(); + + [CallingConvention(.Cdecl), LinkName("GetCharPressed")] + /// Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty + public static extern int GetCharPressed(); + + [CallingConvention(.Cdecl), LinkName("IsGamepadAvailable")] + /// Check if a gamepad is available + public static extern bool IsGamepadAvailable(int gamepad); + + [CallingConvention(.Cdecl), LinkName("GetGamepadName")] + /// Get gamepad internal name id + public static extern char8 * GetGamepadName(int gamepad); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonPressed")] + /// Check if a gamepad button has been pressed once + public static extern bool IsGamepadButtonPressed(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonDown")] + /// Check if a gamepad button is being pressed + public static extern bool IsGamepadButtonDown(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonReleased")] + /// Check if a gamepad button has been released once + public static extern bool IsGamepadButtonReleased(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonUp")] + /// Check if a gamepad button is NOT being pressed + public static extern bool IsGamepadButtonUp(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("GetGamepadButtonPressed")] + /// Get the last gamepad button pressed + public static extern int GetGamepadButtonPressed(); + + [CallingConvention(.Cdecl), LinkName("GetGamepadAxisCount")] + /// Get gamepad axis count for a gamepad + public static extern int GetGamepadAxisCount(int gamepad); + + [CallingConvention(.Cdecl), LinkName("GetGamepadAxisMovement")] + /// Get axis movement value for a gamepad axis + public static extern float GetGamepadAxisMovement(int gamepad, int axis); + + [CallingConvention(.Cdecl), LinkName("SetGamepadMappings")] + /// Set internal gamepad mappings (SDL_GameControllerDB) + public static extern int SetGamepadMappings(char8 * mappings); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonPressed")] + /// Check if a mouse button has been pressed once + public static extern bool IsMouseButtonPressed(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonDown")] + /// Check if a mouse button is being pressed + public static extern bool IsMouseButtonDown(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonReleased")] + /// Check if a mouse button has been released once + public static extern bool IsMouseButtonReleased(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonUp")] + /// Check if a mouse button is NOT being pressed + public static extern bool IsMouseButtonUp(int button); + + [CallingConvention(.Cdecl), LinkName("GetMouseX")] + /// Get mouse position X + public static extern int GetMouseX(); + + [CallingConvention(.Cdecl), LinkName("GetMouseY")] + /// Get mouse position Y + public static extern int GetMouseY(); + + [CallingConvention(.Cdecl), LinkName("GetMousePosition")] + /// Get mouse position XY + public static extern Vector2 GetMousePosition(); + + [CallingConvention(.Cdecl), LinkName("GetMouseDelta")] + /// Get mouse delta between frames + public static extern Vector2 GetMouseDelta(); + + [CallingConvention(.Cdecl), LinkName("SetMousePosition")] + /// Set mouse position XY + public static extern void SetMousePosition(int x, int y); + + [CallingConvention(.Cdecl), LinkName("SetMouseOffset")] + /// Set mouse offset + public static extern void SetMouseOffset(int offsetX, int offsetY); + + [CallingConvention(.Cdecl), LinkName("SetMouseScale")] + /// Set mouse scaling + public static extern void SetMouseScale(float scaleX, float scaleY); + + [CallingConvention(.Cdecl), LinkName("GetMouseWheelMove")] + /// Get mouse wheel movement for X or Y, whichever is larger + public static extern float GetMouseWheelMove(); + + [CallingConvention(.Cdecl), LinkName("GetMouseWheelMoveV")] + /// Get mouse wheel movement for both X and Y + public static extern Vector2 GetMouseWheelMoveV(); + + [CallingConvention(.Cdecl), LinkName("SetMouseCursor")] + /// Set mouse cursor + public static extern void SetMouseCursor(int cursor); + + [CallingConvention(.Cdecl), LinkName("GetTouchX")] + /// Get touch position X for touch point 0 (relative to screen size) + public static extern int GetTouchX(); + + [CallingConvention(.Cdecl), LinkName("GetTouchY")] + /// Get touch position Y for touch point 0 (relative to screen size) + public static extern int GetTouchY(); + + [CallingConvention(.Cdecl), LinkName("GetTouchPosition")] + /// Get touch position XY for a touch point index (relative to screen size) + public static extern Vector2 GetTouchPosition(int index); + + [CallingConvention(.Cdecl), LinkName("GetTouchPointId")] + /// Get touch point identifier for given index + public static extern int GetTouchPointId(int index); + + [CallingConvention(.Cdecl), LinkName("GetTouchPointCount")] + /// Get number of touch points + public static extern int GetTouchPointCount(); + + [CallingConvention(.Cdecl), LinkName("SetGesturesEnabled")] + /// Enable a set of gestures using flags + public static extern void SetGesturesEnabled(int flags); + + [CallingConvention(.Cdecl), LinkName("IsGestureDetected")] + /// Check if a gesture have been detected + public static extern bool IsGestureDetected(int gesture); + + [CallingConvention(.Cdecl), LinkName("GetGestureDetected")] + /// Get latest detected gesture + public static extern int GetGestureDetected(); + + [CallingConvention(.Cdecl), LinkName("GetGestureHoldDuration")] + /// Get gesture hold time in milliseconds + public static extern float GetGestureHoldDuration(); + + [CallingConvention(.Cdecl), LinkName("GetGestureDragVector")] + /// Get gesture drag vector + public static extern Vector2 GetGestureDragVector(); + + [CallingConvention(.Cdecl), LinkName("GetGestureDragAngle")] + /// Get gesture drag angle + public static extern float GetGestureDragAngle(); + + [CallingConvention(.Cdecl), LinkName("GetGesturePinchVector")] + /// Get gesture pinch delta + public static extern Vector2 GetGesturePinchVector(); + + [CallingConvention(.Cdecl), LinkName("GetGesturePinchAngle")] + /// Get gesture pinch angle + public static extern float GetGesturePinchAngle(); + + [CallingConvention(.Cdecl), LinkName("UpdateCamera")] + /// Update camera position for selected mode + public static extern void UpdateCamera(Camera * camera, int mode); + + [CallingConvention(.Cdecl), LinkName("UpdateCameraPro")] + /// Update camera movement/rotation + public static extern void UpdateCameraPro(Camera * camera, Vector3 movement, Vector3 rotation, float zoom); + + [CallingConvention(.Cdecl), LinkName("SetShapesTexture")] + /// Set texture and rectangle to be used on shapes drawing + public static extern void SetShapesTexture(Texture2D texture, Rectangle source); + + [CallingConvention(.Cdecl), LinkName("DrawPixel")] + /// Draw a pixel + public static extern void DrawPixel(int posX, int posY, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPixelV")] + /// Draw a pixel (Vector version) + public static extern void DrawPixelV(Vector2 position, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLine")] + /// Draw a line + public static extern void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineV")] + /// Draw a line (Vector version) + public static extern void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineEx")] + /// Draw a line defining thickness + public static extern void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezier")] + /// Draw a line using cubic-bezier curves in-out + public static extern void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezierQuad")] + /// Draw line using quadratic bezier curves with a control point + public static extern void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezierCubic")] + /// Draw line using cubic bezier curves with 2 control points + public static extern void DrawLineBezierCubic(Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineStrip")] + /// Draw lines sequence + public static extern void DrawLineStrip(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircle")] + /// Draw a color-filled circle + public static extern void DrawCircle(int centerX, int centerY, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleSector")] + /// Draw a piece of a circle + public static extern void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleSectorLines")] + /// Draw circle sector outline + public static extern void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleGradient")] + /// Draw a gradient-filled circle + public static extern void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawCircleV")] + /// Draw a color-filled circle (Vector version) + public static extern void DrawCircleV(Vector2 center, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleLines")] + /// Draw circle outline + public static extern void DrawCircleLines(int centerX, int centerY, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawEllipse")] + /// Draw ellipse + public static extern void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawEllipseLines")] + /// Draw ellipse outline + public static extern void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRing")] + /// Draw ring + public static extern void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRingLines")] + /// Draw ring outline + public static extern void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangle")] + /// Draw a color-filled rectangle + public static extern void DrawRectangle(int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleV")] + /// Draw a color-filled rectangle (Vector version) + public static extern void DrawRectangleV(Vector2 position, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRec")] + /// Draw a color-filled rectangle + public static extern void DrawRectangleRec(Rectangle rec, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectanglePro")] + /// Draw a color-filled rectangle with pro parameters + public static extern void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientV")] + /// Draw a vertical-gradient-filled rectangle + public static extern void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientH")] + /// Draw a horizontal-gradient-filled rectangle + public static extern void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientEx")] + /// Draw a gradient-filled rectangle with custom vertex colors + public static extern void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleLines")] + /// Draw rectangle outline + public static extern void DrawRectangleLines(int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleLinesEx")] + /// Draw rectangle outline with extended parameters + public static extern void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRounded")] + /// Draw rectangle with rounded edges + public static extern void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRoundedLines")] + /// Draw rectangle with rounded edges outline + public static extern void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangle")] + /// Draw a color-filled triangle (vertex in counter-clockwise order!) + public static extern void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleLines")] + /// Draw triangle outline (vertex in counter-clockwise order!) + public static extern void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleFan")] + /// Draw a triangle fan defined by points (first vertex is the center) + public static extern void DrawTriangleFan(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleStrip")] + /// Draw a triangle strip defined by points + public static extern void DrawTriangleStrip(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPoly")] + /// Draw a regular polygon (Vector version) + public static extern void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPolyLines")] + /// Draw a polygon outline of n sides + public static extern void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPolyLinesEx")] + /// Draw a polygon outline of n sides with extended parameters + public static extern void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionRecs")] + /// Check collision between two rectangles + public static extern bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionCircles")] + /// Check collision between two circles + public static extern bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionCircleRec")] + /// Check collision between circle and rectangle + public static extern bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointRec")] + /// Check if point is inside rectangle + public static extern bool CheckCollisionPointRec(Vector2 point, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointCircle")] + /// Check if point is inside circle + public static extern bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointTriangle")] + /// Check if point is inside a triangle + public static extern bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointPoly")] + /// Check if point is within a polygon described by array of vertices + public static extern bool CheckCollisionPointPoly(Vector2 point, Vector2 * points, int pointCount); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionLines")] + /// Check the collision between two lines defined by two points each, returns collision point by reference + public static extern bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 * collisionPoint); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointLine")] + /// Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] + public static extern bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshold); + + [CallingConvention(.Cdecl), LinkName("GetCollisionRec")] + /// Get collision rectangle for two rectangles collision + public static extern Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); + + [CallingConvention(.Cdecl), LinkName("LoadImage")] + /// Load image from file into CPU memory (RAM) + public static extern Image LoadImage(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadImageRaw")] + /// Load image from RAW file data + public static extern Image LoadImageRaw(char8 * fileName, int width, int height, int format, int headerSize); + + [CallingConvention(.Cdecl), LinkName("LoadImageAnim")] + /// Load image sequence from file (frames appended to image.data) + public static extern Image LoadImageAnim(char8 * fileName, int * frames); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromMemory")] + /// Load image from memory buffer, fileType refers to extension: i.e. '.png' + public static extern Image LoadImageFromMemory(char8 * fileType, char8 * fileData, int dataSize); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromTexture")] + /// Load image from GPU texture data + public static extern Image LoadImageFromTexture(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromScreen")] + /// Load image from screen buffer and (screenshot) + public static extern Image LoadImageFromScreen(); + + [CallingConvention(.Cdecl), LinkName("IsImageReady")] + /// Check if an image is ready + public static extern bool IsImageReady(Image image); + + [CallingConvention(.Cdecl), LinkName("UnloadImage")] + /// Unload image from CPU memory (RAM) + public static extern void UnloadImage(Image image); + + [CallingConvention(.Cdecl), LinkName("ExportImage")] + /// Export image data to file, returns true on success + public static extern bool ExportImage(Image image, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("ExportImageAsCode")] + /// Export image as code file defining an array of bytes, returns true on success + public static extern bool ExportImageAsCode(Image image, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("GenImageColor")] + /// Generate image: plain color + public static extern Image GenImageColor(int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientV")] + /// Generate image: vertical gradient + public static extern Image GenImageGradientV(int width, int height, Color top, Color bottom); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientH")] + /// Generate image: horizontal gradient + public static extern Image GenImageGradientH(int width, int height, Color left, Color right); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientRadial")] + /// Generate image: radial gradient + public static extern Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); + + [CallingConvention(.Cdecl), LinkName("GenImageChecked")] + /// Generate image: checked + public static extern Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); + + [CallingConvention(.Cdecl), LinkName("GenImageWhiteNoise")] + /// Generate image: white noise + public static extern Image GenImageWhiteNoise(int width, int height, float factor); + + [CallingConvention(.Cdecl), LinkName("GenImagePerlinNoise")] + /// Generate image: perlin noise + public static extern Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); + + [CallingConvention(.Cdecl), LinkName("GenImageCellular")] + /// Generate image: cellular algorithm, bigger tileSize means bigger cells + public static extern Image GenImageCellular(int width, int height, int tileSize); + + [CallingConvention(.Cdecl), LinkName("GenImageText")] + /// Generate image: grayscale image from text data + public static extern Image GenImageText(int width, int height, char8 * text); + + [CallingConvention(.Cdecl), LinkName("ImageCopy")] + /// Create an image duplicate (useful for transformations) + public static extern Image ImageCopy(Image image); + + [CallingConvention(.Cdecl), LinkName("ImageFromImage")] + /// Create an image from another image piece + public static extern Image ImageFromImage(Image image, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("ImageText")] + /// Create an image from text (default font) + public static extern Image ImageText(char8 * text, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageTextEx")] + /// Create an image from text (custom sprite font) + public static extern Image ImageTextEx(Font font, char8 * text, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("ImageFormat")] + /// Convert image data to desired format + public static extern void ImageFormat(Image * image, int newFormat); + + [CallingConvention(.Cdecl), LinkName("ImageToPOT")] + /// Convert image to POT (power-of-two) + public static extern void ImageToPOT(Image * image, Color fill); + + [CallingConvention(.Cdecl), LinkName("ImageCrop")] + /// Crop an image to a defined rectangle + public static extern void ImageCrop(Image * image, Rectangle crop); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaCrop")] + /// Crop image depending on alpha value + public static extern void ImageAlphaCrop(Image * image, float threshold); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaClear")] + /// Clear alpha channel to desired color + public static extern void ImageAlphaClear(Image * image, Color color, float threshold); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaMask")] + /// Apply alpha mask to image + public static extern void ImageAlphaMask(Image * image, Image alphaMask); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaPremultiply")] + /// Premultiply alpha channel + public static extern void ImageAlphaPremultiply(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageBlurGaussian")] + /// Apply Gaussian blur using a box blur approximation + public static extern void ImageBlurGaussian(Image * image, int blurSize); + + [CallingConvention(.Cdecl), LinkName("ImageResize")] + /// Resize image (Bicubic scaling algorithm) + public static extern void ImageResize(Image * image, int newWidth, int newHeight); + + [CallingConvention(.Cdecl), LinkName("ImageResizeNN")] + /// Resize image (Nearest-Neighbor scaling algorithm) + public static extern void ImageResizeNN(Image * image, int newWidth, int newHeight); + + [CallingConvention(.Cdecl), LinkName("ImageResizeCanvas")] + /// Resize canvas and fill with color + public static extern void ImageResizeCanvas(Image * image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); + + [CallingConvention(.Cdecl), LinkName("ImageMipmaps")] + /// Compute all mipmap levels for a provided image + public static extern void ImageMipmaps(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageDither")] + /// Dither image data to 16bpp or lower (Floyd-Steinberg dithering) + public static extern void ImageDither(Image * image, int rBpp, int gBpp, int bBpp, int aBpp); + + [CallingConvention(.Cdecl), LinkName("ImageFlipVertical")] + /// Flip image vertically + public static extern void ImageFlipVertical(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageFlipHorizontal")] + /// Flip image horizontally + public static extern void ImageFlipHorizontal(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageRotateCW")] + /// Rotate image clockwise 90deg + public static extern void ImageRotateCW(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageRotateCCW")] + /// Rotate image counter-clockwise 90deg + public static extern void ImageRotateCCW(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorTint")] + /// Modify image color: tint + public static extern void ImageColorTint(Image * image, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageColorInvert")] + /// Modify image color: invert + public static extern void ImageColorInvert(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorGrayscale")] + /// Modify image color: grayscale + public static extern void ImageColorGrayscale(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorContrast")] + /// Modify image color: contrast (-100 to 100) + public static extern void ImageColorContrast(Image * image, float contrast); + + [CallingConvention(.Cdecl), LinkName("ImageColorBrightness")] + /// Modify image color: brightness (-255 to 255) + public static extern void ImageColorBrightness(Image * image, int brightness); + + [CallingConvention(.Cdecl), LinkName("ImageColorReplace")] + /// Modify image color: replace color + public static extern void ImageColorReplace(Image * image, Color color, Color replace); + + [CallingConvention(.Cdecl), LinkName("LoadImageColors")] + /// Load color data from image as a Color array (RGBA - 32bit) + public static extern Color * LoadImageColors(Image image); + + [CallingConvention(.Cdecl), LinkName("LoadImagePalette")] + /// Load colors palette from image as a Color array (RGBA - 32bit) + public static extern Color * LoadImagePalette(Image image, int maxPaletteSize, int * colorCount); + + [CallingConvention(.Cdecl), LinkName("UnloadImageColors")] + /// Unload color data loaded with LoadImageColors() + public static extern void UnloadImageColors(Color * colors); + + [CallingConvention(.Cdecl), LinkName("UnloadImagePalette")] + /// Unload colors palette loaded with LoadImagePalette() + public static extern void UnloadImagePalette(Color * colors); + + [CallingConvention(.Cdecl), LinkName("GetImageAlphaBorder")] + /// Get image alpha border rectangle + public static extern Rectangle GetImageAlphaBorder(Image image, float threshold); + + [CallingConvention(.Cdecl), LinkName("GetImageColor")] + /// Get image pixel color at (x, y) position + public static extern Color GetImageColor(Image image, int x, int y); + + [CallingConvention(.Cdecl), LinkName("ImageClearBackground")] + /// Clear image background with given color + public static extern void ImageClearBackground(Image * dst, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawPixel")] + /// Draw pixel within an image + public static extern void ImageDrawPixel(Image * dst, int posX, int posY, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawPixelV")] + /// Draw pixel within an image (Vector version) + public static extern void ImageDrawPixelV(Image * dst, Vector2 position, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawLine")] + /// Draw line within an image + public static extern void ImageDrawLine(Image * dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawLineV")] + /// Draw line within an image (Vector version) + public static extern void ImageDrawLineV(Image * dst, Vector2 start, Vector2 end, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircle")] + /// Draw a filled circle within an image + public static extern void ImageDrawCircle(Image * dst, int centerX, int centerY, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleV")] + /// Draw a filled circle within an image (Vector version) + public static extern void ImageDrawCircleV(Image * dst, Vector2 center, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleLines")] + /// Draw circle outline within an image + public static extern void ImageDrawCircleLines(Image * dst, int centerX, int centerY, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleLinesV")] + /// Draw circle outline within an image (Vector version) + public static extern void ImageDrawCircleLinesV(Image * dst, Vector2 center, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangle")] + /// Draw rectangle within an image + public static extern void ImageDrawRectangle(Image * dst, int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleV")] + /// Draw rectangle within an image (Vector version) + public static extern void ImageDrawRectangleV(Image * dst, Vector2 position, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleRec")] + /// Draw rectangle within an image + public static extern void ImageDrawRectangleRec(Image * dst, Rectangle rec, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleLines")] + /// Draw rectangle lines within an image + public static extern void ImageDrawRectangleLines(Image * dst, Rectangle rec, int thick, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDraw")] + /// Draw a source image within a destination image (tint applied to source) + public static extern void ImageDraw(Image * dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); + + [CallingConvention(.Cdecl), LinkName("ImageDrawText")] + /// Draw text (using default font) within an image (destination) + public static extern void ImageDrawText(Image * dst, char8 * text, int posX, int posY, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawTextEx")] + /// Draw text (custom sprite font) within an image (destination) + public static extern void ImageDrawTextEx(Image * dst, Font font, char8 * text, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("LoadTexture")] + /// Load texture from file into GPU memory (VRAM) + public static extern Texture2D LoadTexture(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadTextureFromImage")] + /// Load texture from image data + public static extern Texture2D LoadTextureFromImage(Image image); + + [CallingConvention(.Cdecl), LinkName("LoadTextureCubemap")] + /// Load cubemap from image, multiple image cubemap layouts supported + public static extern TextureCubemap LoadTextureCubemap(Image image, int layout); + + [CallingConvention(.Cdecl), LinkName("LoadRenderTexture")] + /// Load texture for rendering (framebuffer) + public static extern RenderTexture2D LoadRenderTexture(int width, int height); + + [CallingConvention(.Cdecl), LinkName("IsTextureReady")] + /// Check if a texture is ready + public static extern bool IsTextureReady(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("UnloadTexture")] + /// Unload texture from GPU memory (VRAM) + public static extern void UnloadTexture(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("IsRenderTextureReady")] + /// Check if a render texture is ready + public static extern bool IsRenderTextureReady(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("UnloadRenderTexture")] + /// Unload render texture from GPU memory (VRAM) + public static extern void UnloadRenderTexture(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("UpdateTexture")] + /// Update GPU texture with new data + public static extern void UpdateTexture(Texture2D texture, void * pixels); + + [CallingConvention(.Cdecl), LinkName("UpdateTextureRec")] + /// Update GPU texture rectangle with new data + public static extern void UpdateTextureRec(Texture2D texture, Rectangle rec, void * pixels); + + [CallingConvention(.Cdecl), LinkName("GenTextureMipmaps")] + /// Generate GPU mipmaps for a texture + public static extern void GenTextureMipmaps(Texture2D * texture); + + [CallingConvention(.Cdecl), LinkName("SetTextureFilter")] + /// Set texture scaling filter mode + public static extern void SetTextureFilter(Texture2D texture, int filter); + + [CallingConvention(.Cdecl), LinkName("SetTextureWrap")] + /// Set texture wrapping mode + public static extern void SetTextureWrap(Texture2D texture, int wrap); + + [CallingConvention(.Cdecl), LinkName("DrawTexture")] + /// Draw a Texture2D + public static extern void DrawTexture(Texture2D texture, int posX, int posY, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureV")] + /// Draw a Texture2D with position defined as Vector2 + public static extern void DrawTextureV(Texture2D texture, Vector2 position, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureEx")] + /// Draw a Texture2D with extended parameters + public static extern void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureRec")] + /// Draw a part of a texture defined by a rectangle + public static extern void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTexturePro")] + /// Draw a part of a texture defined by a rectangle with 'pro' parameters + public static extern void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureNPatch")] + /// Draws a texture (or part of it) that stretches or shrinks nicely + public static extern void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("Fade")] + /// Get color with alpha applied, alpha goes from 0.0f to 1.0f + public static extern Color Fade(Color color, float alpha); + + [CallingConvention(.Cdecl), LinkName("ColorToInt")] + /// Get hexadecimal value for a Color + public static extern int ColorToInt(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorNormalize")] + /// Get Color normalized as float [0..1] + public static extern Vector4 ColorNormalize(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorFromNormalized")] + /// Get Color from normalized values [0..1] + public static extern Color ColorFromNormalized(Vector4 normalized); + + [CallingConvention(.Cdecl), LinkName("ColorToHSV")] + /// Get HSV values for a Color, hue [0..360], saturation/value [0..1] + public static extern Vector3 ColorToHSV(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorFromHSV")] + /// Get a Color from HSV values, hue [0..360], saturation/value [0..1] + public static extern Color ColorFromHSV(float hue, float saturation, float value); + + [CallingConvention(.Cdecl), LinkName("ColorTint")] + /// Get color multiplied with another color + public static extern Color ColorTint(Color color, Color tint); + + [CallingConvention(.Cdecl), LinkName("ColorBrightness")] + /// Get color with brightness correction, brightness factor goes from -1.0f to 1.0f + public static extern Color ColorBrightness(Color color, float factor); + + [CallingConvention(.Cdecl), LinkName("ColorContrast")] + /// Get color with contrast correction, contrast values between -1.0f and 1.0f + public static extern Color ColorContrast(Color color, float contrast); + + [CallingConvention(.Cdecl), LinkName("ColorAlpha")] + /// Get color with alpha applied, alpha goes from 0.0f to 1.0f + public static extern Color ColorAlpha(Color color, float alpha); + + [CallingConvention(.Cdecl), LinkName("ColorAlphaBlend")] + /// Get src alpha-blended into dst color with tint + public static extern Color ColorAlphaBlend(Color dst, Color src, Color tint); + + [CallingConvention(.Cdecl), LinkName("GetColor")] + /// Get Color structure from hexadecimal value + public static extern Color GetColor(int hexValue); + + [CallingConvention(.Cdecl), LinkName("GetPixelColor")] + /// Get Color from a source pixel pointer of certain format + public static extern Color GetPixelColor(void * srcPtr, int format); + + [CallingConvention(.Cdecl), LinkName("SetPixelColor")] + /// Set color formatted into destination pixel pointer + public static extern void SetPixelColor(void * dstPtr, Color color, int format); + + [CallingConvention(.Cdecl), LinkName("GetPixelDataSize")] + /// Get pixel data size in bytes for certain format + public static extern int GetPixelDataSize(int width, int height, int format); + + [CallingConvention(.Cdecl), LinkName("GetFontDefault")] + /// Get the default Font + public static extern Font GetFontDefault(); + + [CallingConvention(.Cdecl), LinkName("LoadFont")] + /// Load font from file into GPU memory (VRAM) + public static extern Font LoadFont(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadFontEx")] + /// Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set + public static extern Font LoadFontEx(char8 * fileName, int fontSize, int * fontChars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("LoadFontFromImage")] + /// Load font from Image (XNA style) + public static extern Font LoadFontFromImage(Image image, Color key, int firstChar); + + [CallingConvention(.Cdecl), LinkName("LoadFontFromMemory")] + /// Load font from memory buffer, fileType refers to extension: i.e. '.ttf' + public static extern Font LoadFontFromMemory(char8 * fileType, char8 * fileData, int dataSize, int fontSize, int * fontChars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("IsFontReady")] + /// Check if a font is ready + public static extern bool IsFontReady(Font font); + + [CallingConvention(.Cdecl), LinkName("LoadFontData")] + /// Load font data for further use + public static extern GlyphInfo * LoadFontData(char8 * fileData, int dataSize, int fontSize, int * fontChars, int glyphCount, int type); + + [CallingConvention(.Cdecl), LinkName("GenImageFontAtlas")] + /// Generate image font atlas using chars info + public static extern Image GenImageFontAtlas(GlyphInfo * chars, Rectangle ** recs, int glyphCount, int fontSize, int padding, int packMethod); + + [CallingConvention(.Cdecl), LinkName("UnloadFontData")] + /// Unload font chars info data (RAM) + public static extern void UnloadFontData(GlyphInfo * chars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("UnloadFont")] + /// Unload font from GPU memory (VRAM) + public static extern void UnloadFont(Font font); + + [CallingConvention(.Cdecl), LinkName("ExportFontAsCode")] + /// Export font as code file, returns true on success + public static extern bool ExportFontAsCode(Font font, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("DrawFPS")] + /// Draw current FPS + public static extern void DrawFPS(int posX, int posY); + + [CallingConvention(.Cdecl), LinkName("DrawText")] + /// Draw text (using default font) + public static extern void DrawText(char8 * text, int posX, int posY, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTextEx")] + /// Draw text using font and additional parameters + public static extern void DrawTextEx(Font font, char8 * text, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextPro")] + /// Draw text using Font and pro parameters (rotation) + public static extern void DrawTextPro(Font font, char8 * text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextCodepoint")] + /// Draw one character (codepoint) + public static extern void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextCodepoints")] + /// Draw multiple character (codepoint) + public static extern void DrawTextCodepoints(Font font, int * codepoints, int count, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("MeasureText")] + /// Measure string width for default font + public static extern int MeasureText(char8 * text, int fontSize); + + [CallingConvention(.Cdecl), LinkName("MeasureTextEx")] + /// Measure string size for Font + public static extern Vector2 MeasureTextEx(Font font, char8 * text, float fontSize, float spacing); + + [CallingConvention(.Cdecl), LinkName("GetGlyphIndex")] + /// Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found + public static extern int GetGlyphIndex(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("GetGlyphInfo")] + /// Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found + public static extern GlyphInfo GetGlyphInfo(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("GetGlyphAtlasRec")] + /// Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found + public static extern Rectangle GetGlyphAtlasRec(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("LoadUTF8")] + /// Load UTF-8 text encoded from codepoints array + public static extern char8 * LoadUTF8(int * codepoints, int length); + + [CallingConvention(.Cdecl), LinkName("UnloadUTF8")] + /// Unload UTF-8 text encoded from codepoints array + public static extern void UnloadUTF8(char8 * text); + + [CallingConvention(.Cdecl), LinkName("LoadCodepoints")] + /// Load all codepoints from a UTF-8 text string, codepoints count returned by parameter + public static extern int * LoadCodepoints(char8 * text, int * count); + + [CallingConvention(.Cdecl), LinkName("UnloadCodepoints")] + /// Unload codepoints data from memory + public static extern void UnloadCodepoints(int * codepoints); + + [CallingConvention(.Cdecl), LinkName("GetCodepointCount")] + /// Get total number of codepoints in a UTF-8 encoded string + public static extern int GetCodepointCount(char8 * text); + + [CallingConvention(.Cdecl), LinkName("GetCodepoint")] + /// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepoint(char8 * text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("GetCodepointNext")] + /// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepointNext(char8 * text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("GetCodepointPrevious")] + /// Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepointPrevious(char8 * text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("CodepointToUTF8")] + /// Encode one codepoint into UTF-8 byte array (array length returned as parameter) + public static extern char8 * CodepointToUTF8(int codepoint, int * utf8Size); + + [CallingConvention(.Cdecl), LinkName("TextCopy")] + /// Copy one string to another, returns bytes copied + public static extern int TextCopy(char8 * dst, char8 * src); + + [CallingConvention(.Cdecl), LinkName("TextIsEqual")] + /// Check if two text string are equal + public static extern bool TextIsEqual(char8 * text1, char8 * text2); + + [CallingConvention(.Cdecl), LinkName("TextLength")] + /// Get text length, checks for '\0' ending + public static extern int TextLength(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextFormat")] + /// Text formatting with variables (sprintf() style) + public static extern char8 * TextFormat(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextSubtext")] + /// Get a piece of a text string + public static extern char8 * TextSubtext(char8 * text, int position, int length); + + [CallingConvention(.Cdecl), LinkName("TextReplace")] + /// Replace text string (WARNING: memory must be freed!) + public static extern char8 * TextReplace(char8 * text, char8 * replace, char8 * by); + + [CallingConvention(.Cdecl), LinkName("TextInsert")] + /// Insert text in a position (WARNING: memory must be freed!) + public static extern char8 * TextInsert(char8 * text, char8 * insert, int position); + + [CallingConvention(.Cdecl), LinkName("TextJoin")] + /// Join text strings with delimiter + public static extern char8 * TextJoin(char8 ** textList, int count, char8 * delimiter); + + [CallingConvention(.Cdecl), LinkName("TextSplit")] + /// Split text into multiple strings + public static extern char8 ** TextSplit(char8 * text, char8 delimiter, int * count); + + [CallingConvention(.Cdecl), LinkName("TextAppend")] + /// Append text at specific position and move cursor! + public static extern void TextAppend(char8 * text, char8 * @append, int * position); + + [CallingConvention(.Cdecl), LinkName("TextFindIndex")] + /// Find first text occurrence within a string + public static extern int TextFindIndex(char8 * text, char8 * find); + + [CallingConvention(.Cdecl), LinkName("TextToUpper")] + /// Get upper case version of provided string + public static extern char8 * TextToUpper(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextToLower")] + /// Get lower case version of provided string + public static extern char8 * TextToLower(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextToPascal")] + /// Get Pascal case notation version of provided string + public static extern char8 * TextToPascal(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextToInteger")] + /// Get integer value from text (negative values not supported) + public static extern int TextToInteger(char8 * text); + + [CallingConvention(.Cdecl), LinkName("DrawLine3D")] + /// Draw a line in 3D world space + public static extern void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPoint3D")] + /// Draw a point in 3D space, actually a small line + public static extern void DrawPoint3D(Vector3 position, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircle3D")] + /// Draw a circle in 3D world space + public static extern void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangle3D")] + /// Draw a color-filled triangle (vertex in counter-clockwise order!) + public static extern void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleStrip3D")] + /// Draw a triangle strip defined by points + public static extern void DrawTriangleStrip3D(Vector3 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCube")] + /// Draw cube + public static extern void DrawCube(Vector3 position, float width, float height, float length, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeV")] + /// Draw cube (Vector version) + public static extern void DrawCubeV(Vector3 position, Vector3 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeWires")] + /// Draw cube wires + public static extern void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeWiresV")] + /// Draw cube wires (Vector version) + public static extern void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphere")] + /// Draw sphere + public static extern void DrawSphere(Vector3 centerPos, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphereEx")] + /// Draw sphere with extended parameters + public static extern void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphereWires")] + /// Draw sphere wires + public static extern void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinder")] + /// Draw a cylinder/cone + public static extern void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderEx")] + /// Draw a cylinder with base at startPos and top at endPos + public static extern void DrawCylinderEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderWires")] + /// Draw a cylinder/cone wires + public static extern void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderWiresEx")] + /// Draw a cylinder wires with base at startPos and top at endPos + public static extern void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCapsule")] + /// Draw a capsule with the center of its sphere caps at startPos and endPos + public static extern void DrawCapsule(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCapsuleWires")] + /// Draw capsule wireframe with the center of its sphere caps at startPos and endPos + public static extern void DrawCapsuleWires(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPlane")] + /// Draw a plane XZ + public static extern void DrawPlane(Vector3 centerPos, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRay")] + /// Draw a ray line + public static extern void DrawRay(Ray ray, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawGrid")] + /// Draw a grid (centered at (0, 0, 0)) + public static extern void DrawGrid(int slices, float spacing); + + [CallingConvention(.Cdecl), LinkName("LoadModel")] + /// Load model from files (meshes and materials) + public static extern Model LoadModel(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadModelFromMesh")] + /// Load model from generated mesh (default material) + public static extern Model LoadModelFromMesh(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("IsModelReady")] + /// Check if a model is ready + public static extern bool IsModelReady(Model model); + + [CallingConvention(.Cdecl), LinkName("UnloadModel")] + /// Unload model (including meshes) from memory (RAM and/or VRAM) + public static extern void UnloadModel(Model model); + + [CallingConvention(.Cdecl), LinkName("GetModelBoundingBox")] + /// Compute model bounding box limits (considers all meshes) + public static extern BoundingBox GetModelBoundingBox(Model model); + + [CallingConvention(.Cdecl), LinkName("DrawModel")] + /// Draw a model (with texture if set) + public static extern void DrawModel(Model model, Vector3 position, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelEx")] + /// Draw a model with extended parameters + public static extern void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelWires")] + /// Draw a model wires (with texture if set) + public static extern void DrawModelWires(Model model, Vector3 position, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelWiresEx")] + /// Draw a model wires (with texture if set) with extended parameters + public static extern void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBoundingBox")] + /// Draw bounding box (wires) + public static extern void DrawBoundingBox(BoundingBox @box, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawBillboard")] + /// Draw a billboard texture + public static extern void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBillboardRec")] + /// Draw a billboard texture defined by source + public static extern void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBillboardPro")] + /// Draw a billboard texture defined by source and rotation + public static extern void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector3 up, Vector2 size, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("UploadMesh")] + /// Upload mesh vertex data in GPU and provide VAO/VBO ids + public static extern void UploadMesh(Mesh * mesh, bool dynamic); + + [CallingConvention(.Cdecl), LinkName("UpdateMeshBuffer")] + /// Update mesh vertex data in GPU for a specific buffer index + public static extern void UpdateMeshBuffer(Mesh mesh, int index, void * data, int dataSize, int offset); + + [CallingConvention(.Cdecl), LinkName("UnloadMesh")] + /// Unload mesh data from CPU and GPU + public static extern void UnloadMesh(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("DrawMesh")] + /// Draw a 3d mesh with material and transform + public static extern void DrawMesh(Mesh mesh, Material material, Matrix transform); + + [CallingConvention(.Cdecl), LinkName("DrawMeshInstanced")] + /// Draw multiple mesh instances with material and different transforms + public static extern void DrawMeshInstanced(Mesh mesh, Material material, Matrix * transforms, int instances); + + [CallingConvention(.Cdecl), LinkName("ExportMesh")] + /// Export mesh data to file, returns true on success + public static extern bool ExportMesh(Mesh mesh, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("GetMeshBoundingBox")] + /// Compute mesh bounding box limits + public static extern BoundingBox GetMeshBoundingBox(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("GenMeshTangents")] + /// Compute mesh tangents + public static extern void GenMeshTangents(Mesh * mesh); + + [CallingConvention(.Cdecl), LinkName("GenMeshPoly")] + /// Generate polygonal mesh + public static extern Mesh GenMeshPoly(int sides, float radius); + + [CallingConvention(.Cdecl), LinkName("GenMeshPlane")] + /// Generate plane mesh (with subdivisions) + public static extern Mesh GenMeshPlane(float width, float length, int resX, int resZ); + + [CallingConvention(.Cdecl), LinkName("GenMeshCube")] + /// Generate cuboid mesh + public static extern Mesh GenMeshCube(float width, float height, float length); + + [CallingConvention(.Cdecl), LinkName("GenMeshSphere")] + /// Generate sphere mesh (standard sphere) + public static extern Mesh GenMeshSphere(float radius, int rings, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshHemiSphere")] + /// Generate half-sphere mesh (no bottom cap) + public static extern Mesh GenMeshHemiSphere(float radius, int rings, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshCylinder")] + /// Generate cylinder mesh + public static extern Mesh GenMeshCylinder(float radius, float height, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshCone")] + /// Generate cone/pyramid mesh + public static extern Mesh GenMeshCone(float radius, float height, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshTorus")] + /// Generate torus mesh + public static extern Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); + + [CallingConvention(.Cdecl), LinkName("GenMeshKnot")] + /// Generate trefoil knot mesh + public static extern Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); + + [CallingConvention(.Cdecl), LinkName("GenMeshHeightmap")] + /// Generate heightmap mesh from image data + public static extern Mesh GenMeshHeightmap(Image heightmap, Vector3 size); + + [CallingConvention(.Cdecl), LinkName("GenMeshCubicmap")] + /// Generate cubes-based map mesh from image data + public static extern Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); + + [CallingConvention(.Cdecl), LinkName("LoadMaterials")] + /// Load materials from model file + public static extern Material * LoadMaterials(char8 * fileName, int * materialCount); + + [CallingConvention(.Cdecl), LinkName("LoadMaterialDefault")] + /// Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) + public static extern Material LoadMaterialDefault(); + + [CallingConvention(.Cdecl), LinkName("IsMaterialReady")] + /// Check if a material is ready + public static extern bool IsMaterialReady(Material material); + + [CallingConvention(.Cdecl), LinkName("UnloadMaterial")] + /// Unload material from GPU memory (VRAM) + public static extern void UnloadMaterial(Material material); + + [CallingConvention(.Cdecl), LinkName("SetMaterialTexture")] + /// Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) + public static extern void SetMaterialTexture(Material * material, int mapType, Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("SetModelMeshMaterial")] + /// Set material for a mesh + public static extern void SetModelMeshMaterial(Model * model, int meshId, int materialId); + + [CallingConvention(.Cdecl), LinkName("LoadModelAnimations")] + /// Load model animations from file + public static extern ModelAnimation * LoadModelAnimations(char8 * fileName, int * animCount); + + [CallingConvention(.Cdecl), LinkName("UpdateModelAnimation")] + /// Update model animation pose + public static extern void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); + + [CallingConvention(.Cdecl), LinkName("UnloadModelAnimation")] + /// Unload animation data + public static extern void UnloadModelAnimation(ModelAnimation anim); + + [CallingConvention(.Cdecl), LinkName("UnloadModelAnimations")] + /// Unload animation array data + public static extern void UnloadModelAnimations(ModelAnimation * animations, int count); + + [CallingConvention(.Cdecl), LinkName("IsModelAnimationValid")] + /// Check model animation skeleton match + public static extern bool IsModelAnimationValid(Model model, ModelAnimation anim); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionSpheres")] + /// Check collision between two spheres + public static extern bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionBoxes")] + /// Check collision between two bounding boxes + public static extern bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionBoxSphere")] + /// Check collision between box and sphere + public static extern bool CheckCollisionBoxSphere(BoundingBox @box, Vector3 center, float radius); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionSphere")] + /// Get collision info between ray and sphere + public static extern RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionBox")] + /// Get collision info between ray and box + public static extern RayCollision GetRayCollisionBox(Ray ray, BoundingBox @box); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionMesh")] + /// Get collision info between ray and mesh + public static extern RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionTriangle")] + /// Get collision info between ray and triangle + public static extern RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionQuad")] + /// Get collision info between ray and quad + public static extern RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4); + + [CallingConvention(.Cdecl), LinkName("InitAudioDevice")] + /// Initialize audio device and context + public static extern void InitAudioDevice(); + + [CallingConvention(.Cdecl), LinkName("CloseAudioDevice")] + /// Close the audio device and context + public static extern void CloseAudioDevice(); + + [CallingConvention(.Cdecl), LinkName("IsAudioDeviceReady")] + /// Check if audio device has been initialized successfully + public static extern bool IsAudioDeviceReady(); + + [CallingConvention(.Cdecl), LinkName("SetMasterVolume")] + /// Set master volume (listener) + public static extern void SetMasterVolume(float volume); + + [CallingConvention(.Cdecl), LinkName("LoadWave")] + /// Load wave data from file + public static extern Wave LoadWave(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadWaveFromMemory")] + /// Load wave from memory buffer, fileType refers to extension: i.e. '.wav' + public static extern Wave LoadWaveFromMemory(char8 * fileType, char8 * fileData, int dataSize); + + [CallingConvention(.Cdecl), LinkName("IsWaveReady")] + /// Checks if wave data is ready + public static extern bool IsWaveReady(Wave wave); + + [CallingConvention(.Cdecl), LinkName("LoadSound")] + /// Load sound from file + public static extern Sound LoadSound(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadSoundFromWave")] + /// Load sound from wave data + public static extern Sound LoadSoundFromWave(Wave wave); + + [CallingConvention(.Cdecl), LinkName("IsSoundReady")] + /// Checks if a sound is ready + public static extern bool IsSoundReady(Sound sound); + + [CallingConvention(.Cdecl), LinkName("UpdateSound")] + /// Update sound buffer with new data + public static extern void UpdateSound(Sound sound, void * data, int sampleCount); + + [CallingConvention(.Cdecl), LinkName("UnloadWave")] + /// Unload wave data + public static extern void UnloadWave(Wave wave); + + [CallingConvention(.Cdecl), LinkName("UnloadSound")] + /// Unload sound + public static extern void UnloadSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("ExportWave")] + /// Export wave data to file, returns true on success + public static extern bool ExportWave(Wave wave, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("ExportWaveAsCode")] + /// Export wave sample data to code (.h), returns true on success + public static extern bool ExportWaveAsCode(Wave wave, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("PlaySound")] + /// Play a sound + public static extern void PlaySound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("StopSound")] + /// Stop playing a sound + public static extern void StopSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("PauseSound")] + /// Pause a sound + public static extern void PauseSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("ResumeSound")] + /// Resume a paused sound + public static extern void ResumeSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("IsSoundPlaying")] + /// Check if a sound is currently playing + public static extern bool IsSoundPlaying(Sound sound); + + [CallingConvention(.Cdecl), LinkName("SetSoundVolume")] + /// Set volume for a sound (1.0 is max level) + public static extern void SetSoundVolume(Sound sound, float volume); + + [CallingConvention(.Cdecl), LinkName("SetSoundPitch")] + /// Set pitch for a sound (1.0 is base level) + public static extern void SetSoundPitch(Sound sound, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetSoundPan")] + /// Set pan for a sound (0.5 is center) + public static extern void SetSoundPan(Sound sound, float pan); + + [CallingConvention(.Cdecl), LinkName("WaveCopy")] + /// Copy a wave to a new wave + public static extern Wave WaveCopy(Wave wave); + + [CallingConvention(.Cdecl), LinkName("WaveCrop")] + /// Crop a wave to defined samples range + public static extern void WaveCrop(Wave * wave, int initSample, int finalSample); + + [CallingConvention(.Cdecl), LinkName("WaveFormat")] + /// Convert wave data to desired format + public static extern void WaveFormat(Wave * wave, int sampleRate, int sampleSize, int channels); + + [CallingConvention(.Cdecl), LinkName("LoadWaveSamples")] + /// Load samples data from wave as a 32bit float data array + public static extern float * LoadWaveSamples(Wave wave); + + [CallingConvention(.Cdecl), LinkName("UnloadWaveSamples")] + /// Unload samples data loaded with LoadWaveSamples() + public static extern void UnloadWaveSamples(float * samples); + + [CallingConvention(.Cdecl), LinkName("LoadMusicStream")] + /// Load music stream from file + public static extern Music LoadMusicStream(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadMusicStreamFromMemory")] + /// Load music stream from data + public static extern Music LoadMusicStreamFromMemory(char8 * fileType, char8 * data, int dataSize); + + [CallingConvention(.Cdecl), LinkName("IsMusicReady")] + /// Checks if a music stream is ready + public static extern bool IsMusicReady(Music music); + + [CallingConvention(.Cdecl), LinkName("UnloadMusicStream")] + /// Unload music stream + public static extern void UnloadMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("PlayMusicStream")] + /// Start music playing + public static extern void PlayMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("IsMusicStreamPlaying")] + /// Check if music is playing + public static extern bool IsMusicStreamPlaying(Music music); + + [CallingConvention(.Cdecl), LinkName("UpdateMusicStream")] + /// Updates buffers for music streaming + public static extern void UpdateMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("StopMusicStream")] + /// Stop music playing + public static extern void StopMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("PauseMusicStream")] + /// Pause music playing + public static extern void PauseMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("ResumeMusicStream")] + /// Resume playing paused music + public static extern void ResumeMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("SeekMusicStream")] + /// Seek music to a position (in seconds) + public static extern void SeekMusicStream(Music music, float position); + + [CallingConvention(.Cdecl), LinkName("SetMusicVolume")] + /// Set volume for music (1.0 is max level) + public static extern void SetMusicVolume(Music music, float volume); + + [CallingConvention(.Cdecl), LinkName("SetMusicPitch")] + /// Set pitch for a music (1.0 is base level) + public static extern void SetMusicPitch(Music music, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetMusicPan")] + /// Set pan for a music (0.5 is center) + public static extern void SetMusicPan(Music music, float pan); + + [CallingConvention(.Cdecl), LinkName("GetMusicTimeLength")] + /// Get music time length (in seconds) + public static extern float GetMusicTimeLength(Music music); + + [CallingConvention(.Cdecl), LinkName("GetMusicTimePlayed")] + /// Get current music time played (in seconds) + public static extern float GetMusicTimePlayed(Music music); + + [CallingConvention(.Cdecl), LinkName("LoadAudioStream")] + /// Load audio stream (to stream raw audio pcm data) + public static extern AudioStream LoadAudioStream(int sampleRate, int sampleSize, int channels); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamReady")] + /// Checks if an audio stream is ready + public static extern bool IsAudioStreamReady(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("UnloadAudioStream")] + /// Unload audio stream and free memory + public static extern void UnloadAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("UpdateAudioStream")] + /// Update audio stream buffers with data + public static extern void UpdateAudioStream(AudioStream stream, void * data, int frameCount); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamProcessed")] + /// Check if any audio stream buffers requires refill + public static extern bool IsAudioStreamProcessed(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("PlayAudioStream")] + /// Play audio stream + public static extern void PlayAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("PauseAudioStream")] + /// Pause audio stream + public static extern void PauseAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("ResumeAudioStream")] + /// Resume audio stream + public static extern void ResumeAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamPlaying")] + /// Check if audio stream is playing + public static extern bool IsAudioStreamPlaying(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("StopAudioStream")] + /// Stop audio stream + public static extern void StopAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamVolume")] + /// Set volume for audio stream (1.0 is max level) + public static extern void SetAudioStreamVolume(AudioStream stream, float volume); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamPitch")] + /// Set pitch for audio stream (1.0 is base level) + public static extern void SetAudioStreamPitch(AudioStream stream, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamPan")] + /// Set pan for audio stream (0.5 is centered) + public static extern void SetAudioStreamPan(AudioStream stream, float pan); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamBufferSizeDefault")] + /// Default size for new audio streams + public static extern void SetAudioStreamBufferSizeDefault(int size); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamCallback")] + /// Audio thread callback to request new data + public static extern void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); + + [CallingConvention(.Cdecl), LinkName("AttachAudioStreamProcessor")] + /// Attach audio stream processor to stream + public static extern void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("DetachAudioStreamProcessor")] + /// Detach audio stream processor from stream + public static extern void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("AttachAudioMixedProcessor")] + /// Attach audio stream processor to the entire audio pipeline + public static extern void AttachAudioMixedProcessor(AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("DetachAudioMixedProcessor")] + /// Detach audio stream processor from the entire audio pipeline + public static extern void DetachAudioMixedProcessor(AudioCallback processor); + +} diff --git a/beef/recovery/RenderTexture_049E45A26EED18AEA81D51D8ADBC97CD.bf b/beef/recovery/RenderTexture_049E45A26EED18AEA81D51D8ADBC97CD.bf new file mode 100644 index 0000000..ac10c99 --- /dev/null +++ b/beef/recovery/RenderTexture_049E45A26EED18AEA81D51D8ADBC97CD.bf @@ -0,0 +1,25 @@ +using System; + +namespace Raylib; + +ty + +[CRepr] +public struct RenderTexture +{ + // OpenGL framebuffer object id + public int id; + + // Color buffer attachment texture + public Texture texture; + + // Depth buffer attachment texture + public Texture depth; + + public this(int id, Texture texture, Texture depth) + { + this.id = id; + this.texture = texture; + this.depth = depth; + } +} diff --git a/beef/recovery/index.txt b/beef/recovery/index.txt new file mode 100644 index 0000000..522d916 --- /dev/null +++ b/beef/recovery/index.txt @@ -0,0 +1,2 @@ +c:\Dev\raylib-beef\beef\src\test\Material.bf BFC698AC4E10695ED31AAB47ADBB91F6 0880BB8D2D2DD86E15919D346569685C 222 +c:\Dev\raylib-beef\beef\src\test\Raylib.bf 23F18076295C7EFD5C4FB3F597CD1B2D 1578C895B1171CBF04FBBB82851AC82F 88968 diff --git a/beef/src/Program.bf b/beef/src/Program.bf new file mode 100644 index 0000000..51f11f2 --- /dev/null +++ b/beef/src/Program.bf @@ -0,0 +1,11 @@ +namespace beef; + +using Raylib; + +class Program +{ + public static int Main() + { + return 0; + } +} \ No newline at end of file diff --git a/beef/src/test/AudioStream.bf b/beef/src/test/AudioStream.bf new file mode 100644 index 0000000..c566a97 --- /dev/null +++ b/beef/src/test/AudioStream.bf @@ -0,0 +1,32 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct AudioStream +{ + /// Pointer to internal data used by the audio system + public rAudioBuffer * buffer; + + /// Pointer to internal data processor, useful for audio effects + public rAudioProcessor * processor; + + /// Frequency (samples per second) + public int sampleRate; + + /// Bit depth (bits per sample): 8, 16, 32 (24 not supported) + public int sampleSize; + + /// Number of channels (1-mono, 2-stereo, ...) + public int channels; + + public this(rAudioBuffer * buffer, rAudioProcessor * processor, int sampleRate, int sampleSize, int channels) + { + this.buffer = buffer; + this.processor = processor; + this.sampleRate = sampleRate; + this.sampleSize = sampleSize; + this.channels = channels; + } +} diff --git a/beef/src/test/BoneInfo.bf b/beef/src/test/BoneInfo.bf new file mode 100644 index 0000000..e49b071 --- /dev/null +++ b/beef/src/test/BoneInfo.bf @@ -0,0 +1,20 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct BoneInfo +{ + /// Bone name + public char8[32] name; + + /// Bone parent + public int parent; + + public this(char8[32] name, int parent) + { + this.name = name; + this.parent = parent; + } +} diff --git a/beef/src/test/BoundingBox.bf b/beef/src/test/BoundingBox.bf new file mode 100644 index 0000000..0876bbd --- /dev/null +++ b/beef/src/test/BoundingBox.bf @@ -0,0 +1,20 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct BoundingBox +{ + /// Minimum vertex box-corner + public Vector3 min; + + /// Maximum vertex box-corner + public Vector3 max; + + public this(Vector3 min, Vector3 max) + { + this.min = min; + this.max = max; + } +} diff --git a/beef/src/test/Callbacks.bf b/beef/src/test/Callbacks.bf new file mode 100644 index 0000000..78fdd81 --- /dev/null +++ b/beef/src/test/Callbacks.bf @@ -0,0 +1,25 @@ +using System; +using System.Interop; + +namespace Raylib; + +static +{ + /// Logging: Redirect trace log messages + public function void TraceLogCallback(int logLevel, char8 * text, void* args); + + /// FileIO: Load binary data + public function char8 * LoadFileDataCallback(char8 * fileName, int * bytesRead); + + /// FileIO: Save binary data + public function bool SaveFileDataCallback(char8 * fileName, void * data, int bytesToWrite); + + /// FileIO: Load text data + public function char8 * LoadFileTextCallback(char8 * fileName); + + /// FileIO: Save text data + public function bool SaveFileTextCallback(char8 * fileName, char8 * text); + + public function void AudioCallback(void * bufferData, int frames); + +} diff --git a/beef/src/test/Camera2D.bf b/beef/src/test/Camera2D.bf new file mode 100644 index 0000000..27ba7b1 --- /dev/null +++ b/beef/src/test/Camera2D.bf @@ -0,0 +1,28 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Camera2D +{ + /// Camera offset (displacement from target) + public Vector2 offset; + + /// Camera target (rotation and zoom origin) + public Vector2 target; + + /// Camera rotation in degrees + public float rotation; + + /// Camera zoom (scaling), should be 1.0f by default + public float zoom; + + public this(Vector2 offset, Vector2 target, float rotation, float zoom) + { + this.offset = offset; + this.target = target; + this.rotation = rotation; + this.zoom = zoom; + } +} diff --git a/beef/src/test/Camera3D.bf b/beef/src/test/Camera3D.bf new file mode 100644 index 0000000..d22f8bc --- /dev/null +++ b/beef/src/test/Camera3D.bf @@ -0,0 +1,34 @@ +using System; +using System.Interop; + +namespace Raylib; + +typealias Camera = Camera3D; + +[CRepr] +public struct Camera3D +{ + /// Camera position + public Vector3 position; + + /// Camera target it looks-at + public Vector3 target; + + /// Camera up vector (rotation over its axis) + public Vector3 up; + + /// Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic + public float fovy; + + /// Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC + public int projection; + + public this(Vector3 position, Vector3 target, Vector3 up, float fovy, int projection) + { + this.position = position; + this.target = target; + this.up = up; + this.fovy = fovy; + this.projection = projection; + } +} diff --git a/beef/src/test/Color.bf b/beef/src/test/Color.bf new file mode 100644 index 0000000..11685a7 --- /dev/null +++ b/beef/src/test/Color.bf @@ -0,0 +1,28 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Color +{ + /// Color red value + public char8 r; + + /// Color green value + public char8 g; + + /// Color blue value + public char8 b; + + /// Color alpha value + public char8 a; + + public this(char8 r, char8 g, char8 b, char8 a) + { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } +} diff --git a/beef/src/test/FilePathList.bf b/beef/src/test/FilePathList.bf new file mode 100644 index 0000000..a354afc --- /dev/null +++ b/beef/src/test/FilePathList.bf @@ -0,0 +1,24 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct FilePathList +{ + /// Filepaths max entries + public int capacity; + + /// Filepaths entries count + public int count; + + /// Filepaths entries + public char8 ** paths; + + public this(int capacity, int count, char8 ** paths) + { + this.capacity = capacity; + this.count = count; + this.paths = paths; + } +} diff --git a/beef/src/test/Font.bf b/beef/src/test/Font.bf new file mode 100644 index 0000000..c4827d2 --- /dev/null +++ b/beef/src/test/Font.bf @@ -0,0 +1,36 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Font +{ + /// Base size (default chars height) + public int baseSize; + + /// Number of glyph characters + public int glyphCount; + + /// Padding around the glyph characters + public int glyphPadding; + + /// Texture atlas containing the glyphs + public Texture2D texture; + + /// Rectangles in texture for the glyphs + public Rectangle * recs; + + /// Glyphs info data + public GlyphInfo * glyphs; + + public this(int baseSize, int glyphCount, int glyphPadding, Texture2D texture, Rectangle * recs, GlyphInfo * glyphs) + { + this.baseSize = baseSize; + this.glyphCount = glyphCount; + this.glyphPadding = glyphPadding; + this.texture = texture; + this.recs = recs; + this.glyphs = glyphs; + } +} diff --git a/beef/src/test/GlyphInfo.bf b/beef/src/test/GlyphInfo.bf new file mode 100644 index 0000000..21de5d2 --- /dev/null +++ b/beef/src/test/GlyphInfo.bf @@ -0,0 +1,32 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct GlyphInfo +{ + /// Character value (Unicode) + public int value; + + /// Character offset X when drawing + public int offsetX; + + /// Character offset Y when drawing + public int offsetY; + + /// Character advance position X + public int advanceX; + + /// Character image data + public Image image; + + public this(int value, int offsetX, int offsetY, int advanceX, Image image) + { + this.value = value; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.advanceX = advanceX; + this.image = image; + } +} diff --git a/beef/src/test/Image.bf b/beef/src/test/Image.bf new file mode 100644 index 0000000..b232dba --- /dev/null +++ b/beef/src/test/Image.bf @@ -0,0 +1,32 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Image +{ + /// Image raw data + public void * data; + + /// Image base width + public int width; + + /// Image base height + public int height; + + /// Mipmap levels, 1 by default + public int mipmaps; + + /// Data format (PixelFormat type) + public int format; + + public this(void * data, int width, int height, int mipmaps, int format) + { + this.data = data; + this.width = width; + this.height = height; + this.mipmaps = mipmaps; + this.format = format; + } +} diff --git a/beef/src/test/Material.bf b/beef/src/test/Material.bf new file mode 100644 index 0000000..9dc3ca8 --- /dev/null +++ b/beef/src/test/Material.bf @@ -0,0 +1,24 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Material +{ + /// Material shader + public Shader shader; + + /// Material maps array (MAX_MATERIAL_MAPS) + public MaterialMap * maps; + + /// Material generic parameters (if required) + public float[4] @params; + + public this(Shader shader, MaterialMap * maps, float[4] @params) + { + this.shader = shader; + this.maps = maps; + this.params = @params; + } +} diff --git a/beef/src/test/MaterialMap.bf b/beef/src/test/MaterialMap.bf new file mode 100644 index 0000000..6b06287 --- /dev/null +++ b/beef/src/test/MaterialMap.bf @@ -0,0 +1,24 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct MaterialMap +{ + /// Material map texture + public Texture2D texture; + + /// Material map color + public Color color; + + /// Material map value + public float value; + + public this(Texture2D texture, Color color, float value) + { + this.texture = texture; + this.color = color; + this.value = value; + } +} diff --git a/beef/src/test/Matrix.bf b/beef/src/test/Matrix.bf new file mode 100644 index 0000000..252981a --- /dev/null +++ b/beef/src/test/Matrix.bf @@ -0,0 +1,76 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Matrix +{ + /// Matrix first row (4 components) + public float m0; + + /// Matrix first row (4 components) + public float m4; + + /// Matrix first row (4 components) + public float m8; + + /// Matrix first row (4 components) + public float m12; + + /// Matrix second row (4 components) + public float m1; + + /// Matrix second row (4 components) + public float m5; + + /// Matrix second row (4 components) + public float m9; + + /// Matrix second row (4 components) + public float m13; + + /// Matrix third row (4 components) + public float m2; + + /// Matrix third row (4 components) + public float m6; + + /// Matrix third row (4 components) + public float m10; + + /// Matrix third row (4 components) + public float m14; + + /// Matrix fourth row (4 components) + public float m3; + + /// Matrix fourth row (4 components) + public float m7; + + /// Matrix fourth row (4 components) + public float m11; + + /// Matrix fourth row (4 components) + public float m15; + + public this(float m0, float m4, float m8, float m12, float m1, float m5, float m9, float m13, float m2, float m6, float m10, float m14, float m3, float m7, float m11, float m15) + { + this.m0 = m0; + this.m4 = m4; + this.m8 = m8; + this.m12 = m12; + this.m1 = m1; + this.m5 = m5; + this.m9 = m9; + this.m13 = m13; + this.m2 = m2; + this.m6 = m6; + this.m10 = m10; + this.m14 = m14; + this.m3 = m3; + this.m7 = m7; + this.m11 = m11; + this.m15 = m15; + } +} diff --git a/beef/src/test/Mesh.bf b/beef/src/test/Mesh.bf new file mode 100644 index 0000000..b0eec92 --- /dev/null +++ b/beef/src/test/Mesh.bf @@ -0,0 +1,72 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Mesh +{ + /// Number of vertices stored in arrays + public int vertexCount; + + /// Number of triangles stored (indexed or not) + public int triangleCount; + + /// Vertex position (XYZ - 3 components per vertex) (shader-location = 0) + public float * vertices; + + /// Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) + public float * texcoords; + + /// Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5) + public float * texcoords2; + + /// Vertex normals (XYZ - 3 components per vertex) (shader-location = 2) + public float * normals; + + /// Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) + public float * tangents; + + /// Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) + public char8 * colors; + + /// Vertex indices (in case vertex data comes indexed) + public short * indices; + + /// Animated vertex positions (after bones transformations) + public float * animVertices; + + /// Animated normals (after bones transformations) + public float * animNormals; + + /// Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning) + public char8 * boneIds; + + /// Vertex bone weight, up to 4 bones influence by vertex (skinning) + public float * boneWeights; + + /// OpenGL Vertex Array Object id + public int vaoId; + + /// OpenGL Vertex Buffer Objects id (default vertex data) + public int * vboId; + + public this(int vertexCount, int triangleCount, float * vertices, float * texcoords, float * texcoords2, float * normals, float * tangents, char8 * colors, short * indices, float * animVertices, float * animNormals, char8 * boneIds, float * boneWeights, int vaoId, int * vboId) + { + this.vertexCount = vertexCount; + this.triangleCount = triangleCount; + this.vertices = vertices; + this.texcoords = texcoords; + this.texcoords2 = texcoords2; + this.normals = normals; + this.tangents = tangents; + this.colors = colors; + this.indices = indices; + this.animVertices = animVertices; + this.animNormals = animNormals; + this.boneIds = boneIds; + this.boneWeights = boneWeights; + this.vaoId = vaoId; + this.vboId = vboId; + } +} diff --git a/beef/src/test/Model.bf b/beef/src/test/Model.bf new file mode 100644 index 0000000..43dfe1e --- /dev/null +++ b/beef/src/test/Model.bf @@ -0,0 +1,48 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Model +{ + /// Local transform matrix + public Matrix transform; + + /// Number of meshes + public int meshCount; + + /// Number of materials + public int materialCount; + + /// Meshes array + public Mesh * meshes; + + /// Materials array + public Material * materials; + + /// Mesh material number + public int * meshMaterial; + + /// Number of bones + public int boneCount; + + /// Bones information (skeleton) + public BoneInfo * bones; + + /// Bones base transformation (pose) + public Transform * bindPose; + + public this(Matrix transform, int meshCount, int materialCount, Mesh * meshes, Material * materials, int * meshMaterial, int boneCount, BoneInfo * bones, Transform * bindPose) + { + this.transform = transform; + this.meshCount = meshCount; + this.materialCount = materialCount; + this.meshes = meshes; + this.materials = materials; + this.meshMaterial = meshMaterial; + this.boneCount = boneCount; + this.bones = bones; + this.bindPose = bindPose; + } +} diff --git a/beef/src/test/ModelAnimation.bf b/beef/src/test/ModelAnimation.bf new file mode 100644 index 0000000..d3f2ba2 --- /dev/null +++ b/beef/src/test/ModelAnimation.bf @@ -0,0 +1,28 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct ModelAnimation +{ + /// Number of bones + public int boneCount; + + /// Number of animation frames + public int frameCount; + + /// Bones information (skeleton) + public BoneInfo * bones; + + /// Poses array by frame + public Transform ** framePoses; + + public this(int boneCount, int frameCount, BoneInfo * bones, Transform ** framePoses) + { + this.boneCount = boneCount; + this.frameCount = frameCount; + this.bones = bones; + this.framePoses = framePoses; + } +} diff --git a/beef/src/test/Music.bf b/beef/src/test/Music.bf new file mode 100644 index 0000000..c03d988 --- /dev/null +++ b/beef/src/test/Music.bf @@ -0,0 +1,32 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Music +{ + /// Audio stream + public AudioStream stream; + + /// Total number of frames (considering channels) + public int frameCount; + + /// Music looping enable + public bool looping; + + /// Type of music context (audio filetype) + public int ctxType; + + /// Audio context data, depends on type + public void * ctxData; + + public this(AudioStream stream, int frameCount, bool looping, int ctxType, void * ctxData) + { + this.stream = stream; + this.frameCount = frameCount; + this.looping = looping; + this.ctxType = ctxType; + this.ctxData = ctxData; + } +} diff --git a/beef/src/test/NPatchInfo.bf b/beef/src/test/NPatchInfo.bf new file mode 100644 index 0000000..67dc823 --- /dev/null +++ b/beef/src/test/NPatchInfo.bf @@ -0,0 +1,36 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct NPatchInfo +{ + /// Texture source rectangle + public Rectangle source; + + /// Left border offset + public int left; + + /// Top border offset + public int top; + + /// Right border offset + public int right; + + /// Bottom border offset + public int bottom; + + /// Layout of the n-patch: 3x3, 1x3 or 3x1 + public int layout; + + public this(Rectangle source, int left, int top, int right, int bottom, int layout) + { + this.source = source; + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + this.layout = layout; + } +} diff --git a/beef/src/test/Ray.bf b/beef/src/test/Ray.bf new file mode 100644 index 0000000..e064850 --- /dev/null +++ b/beef/src/test/Ray.bf @@ -0,0 +1,20 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Ray +{ + /// Ray position (origin) + public Vector3 position; + + /// Ray direction + public Vector3 direction; + + public this(Vector3 position, Vector3 direction) + { + this.position = position; + this.direction = direction; + } +} diff --git a/beef/src/test/RayCollision.bf b/beef/src/test/RayCollision.bf new file mode 100644 index 0000000..8396347 --- /dev/null +++ b/beef/src/test/RayCollision.bf @@ -0,0 +1,28 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct RayCollision +{ + /// Did the ray hit something? + public bool hit; + + /// Distance to the nearest hit + public float distance; + + /// Point of the nearest hit + public Vector3 point; + + /// Surface normal of hit + public Vector3 normal; + + public this(bool hit, float distance, Vector3 point, Vector3 normal) + { + this.hit = hit; + this.distance = distance; + this.point = point; + this.normal = normal; + } +} diff --git a/beef/src/test/Raylib.bf b/beef/src/test/Raylib.bf new file mode 100644 index 0000000..6e6ed3b --- /dev/null +++ b/beef/src/test/Raylib.bf @@ -0,0 +1,2076 @@ +using System; +using System.Interop; + +namespace Raylib; + +static +{ + [CallingConvention(.Cdecl), LinkName("InitWindow")] + /// Initialize window and OpenGL context + public static extern void InitWindow(int width, int height, char8 * title); + + [CallingConvention(.Cdecl), LinkName("WindowShouldClose")] + /// Check if KEY_ESCAPE pressed or Close icon pressed + public static extern bool WindowShouldClose(); + + [CallingConvention(.Cdecl), LinkName("CloseWindow")] + /// Close window and unload OpenGL context + public static extern void CloseWindow(); + + [CallingConvention(.Cdecl), LinkName("IsWindowReady")] + /// Check if window has been initialized successfully + public static extern bool IsWindowReady(); + + [CallingConvention(.Cdecl), LinkName("IsWindowFullscreen")] + /// Check if window is currently fullscreen + public static extern bool IsWindowFullscreen(); + + [CallingConvention(.Cdecl), LinkName("IsWindowHidden")] + /// Check if window is currently hidden (only PLATFORM_DESKTOP) + public static extern bool IsWindowHidden(); + + [CallingConvention(.Cdecl), LinkName("IsWindowMinimized")] + /// Check if window is currently minimized (only PLATFORM_DESKTOP) + public static extern bool IsWindowMinimized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowMaximized")] + /// Check if window is currently maximized (only PLATFORM_DESKTOP) + public static extern bool IsWindowMaximized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowFocused")] + /// Check if window is currently focused (only PLATFORM_DESKTOP) + public static extern bool IsWindowFocused(); + + [CallingConvention(.Cdecl), LinkName("IsWindowResized")] + /// Check if window has been resized last frame + public static extern bool IsWindowResized(); + + [CallingConvention(.Cdecl), LinkName("IsWindowState")] + /// Check if one specific window flag is enabled + public static extern bool IsWindowState(int flag); + + [CallingConvention(.Cdecl), LinkName("SetWindowState")] + /// Set window configuration state using flags (only PLATFORM_DESKTOP) + public static extern void SetWindowState(int flags); + + [CallingConvention(.Cdecl), LinkName("ClearWindowState")] + /// Clear window configuration state flags + public static extern void ClearWindowState(int flags); + + [CallingConvention(.Cdecl), LinkName("ToggleFullscreen")] + /// Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) + public static extern void ToggleFullscreen(); + + [CallingConvention(.Cdecl), LinkName("MaximizeWindow")] + /// Set window state: maximized, if resizable (only PLATFORM_DESKTOP) + public static extern void MaximizeWindow(); + + [CallingConvention(.Cdecl), LinkName("MinimizeWindow")] + /// Set window state: minimized, if resizable (only PLATFORM_DESKTOP) + public static extern void MinimizeWindow(); + + [CallingConvention(.Cdecl), LinkName("RestoreWindow")] + /// Set window state: not minimized/maximized (only PLATFORM_DESKTOP) + public static extern void RestoreWindow(); + + [CallingConvention(.Cdecl), LinkName("SetWindowIcon")] + /// Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP) + public static extern void SetWindowIcon(Image image); + + [CallingConvention(.Cdecl), LinkName("SetWindowIcons")] + /// Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) + public static extern void SetWindowIcons(Image * images, int count); + + [CallingConvention(.Cdecl), LinkName("SetWindowTitle")] + /// Set title for window (only PLATFORM_DESKTOP) + public static extern void SetWindowTitle(char8 * title); + + [CallingConvention(.Cdecl), LinkName("SetWindowPosition")] + /// Set window position on screen (only PLATFORM_DESKTOP) + public static extern void SetWindowPosition(int x, int y); + + [CallingConvention(.Cdecl), LinkName("SetWindowMonitor")] + /// Set monitor for the current window (fullscreen mode) + public static extern void SetWindowMonitor(int monitor); + + [CallingConvention(.Cdecl), LinkName("SetWindowMinSize")] + /// Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) + public static extern void SetWindowMinSize(int width, int height); + + [CallingConvention(.Cdecl), LinkName("SetWindowSize")] + /// Set window dimensions + public static extern void SetWindowSize(int width, int height); + + [CallingConvention(.Cdecl), LinkName("SetWindowOpacity")] + /// Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) + public static extern void SetWindowOpacity(float opacity); + + [CallingConvention(.Cdecl), LinkName("GetWindowHandle")] + /// Get native window handle + public static extern void * GetWindowHandle(); + + [CallingConvention(.Cdecl), LinkName("GetScreenWidth")] + /// Get current screen width + public static extern int GetScreenWidth(); + + [CallingConvention(.Cdecl), LinkName("GetScreenHeight")] + /// Get current screen height + public static extern int GetScreenHeight(); + + [CallingConvention(.Cdecl), LinkName("GetRenderWidth")] + /// Get current render width (it considers HiDPI) + public static extern int GetRenderWidth(); + + [CallingConvention(.Cdecl), LinkName("GetRenderHeight")] + /// Get current render height (it considers HiDPI) + public static extern int GetRenderHeight(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorCount")] + /// Get number of connected monitors + public static extern int GetMonitorCount(); + + [CallingConvention(.Cdecl), LinkName("GetCurrentMonitor")] + /// Get current connected monitor + public static extern int GetCurrentMonitor(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPosition")] + /// Get specified monitor position + public static extern Vector2 GetMonitorPosition(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorWidth")] + /// Get specified monitor width (current video mode used by monitor) + public static extern int GetMonitorWidth(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorHeight")] + /// Get specified monitor height (current video mode used by monitor) + public static extern int GetMonitorHeight(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPhysicalWidth")] + /// Get specified monitor physical width in millimetres + public static extern int GetMonitorPhysicalWidth(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorPhysicalHeight")] + /// Get specified monitor physical height in millimetres + public static extern int GetMonitorPhysicalHeight(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetMonitorRefreshRate")] + /// Get specified monitor refresh rate + public static extern int GetMonitorRefreshRate(int monitor); + + [CallingConvention(.Cdecl), LinkName("GetWindowPosition")] + /// Get window position XY on monitor + public static extern Vector2 GetWindowPosition(); + + [CallingConvention(.Cdecl), LinkName("GetWindowScaleDPI")] + /// Get window scale DPI factor + public static extern Vector2 GetWindowScaleDPI(); + + [CallingConvention(.Cdecl), LinkName("GetMonitorName")] + /// Get the human-readable, UTF-8 encoded name of the primary monitor + public static extern char8 * GetMonitorName(int monitor); + + [CallingConvention(.Cdecl), LinkName("SetClipboardText")] + /// Set clipboard text content + public static extern void SetClipboardText(char8 * text); + + [CallingConvention(.Cdecl), LinkName("GetClipboardText")] + /// Get clipboard text content + public static extern char8 * GetClipboardText(); + + [CallingConvention(.Cdecl), LinkName("EnableEventWaiting")] + /// Enable waiting for events on EndDrawing(), no automatic event polling + public static extern void EnableEventWaiting(); + + [CallingConvention(.Cdecl), LinkName("DisableEventWaiting")] + /// Disable waiting for events on EndDrawing(), automatic events polling + public static extern void DisableEventWaiting(); + + [CallingConvention(.Cdecl), LinkName("SwapScreenBuffer")] + /// Swap back buffer with front buffer (screen drawing) + public static extern void SwapScreenBuffer(); + + [CallingConvention(.Cdecl), LinkName("PollInputEvents")] + /// Register all input events + public static extern void PollInputEvents(); + + [CallingConvention(.Cdecl), LinkName("WaitTime")] + /// Wait for some time (halt program execution) + public static extern void WaitTime(double seconds); + + [CallingConvention(.Cdecl), LinkName("ShowCursor")] + /// Shows cursor + public static extern void ShowCursor(); + + [CallingConvention(.Cdecl), LinkName("HideCursor")] + /// Hides cursor + public static extern void HideCursor(); + + [CallingConvention(.Cdecl), LinkName("IsCursorHidden")] + /// Check if cursor is not visible + public static extern bool IsCursorHidden(); + + [CallingConvention(.Cdecl), LinkName("EnableCursor")] + /// Enables cursor (unlock cursor) + public static extern void EnableCursor(); + + [CallingConvention(.Cdecl), LinkName("DisableCursor")] + /// Disables cursor (lock cursor) + public static extern void DisableCursor(); + + [CallingConvention(.Cdecl), LinkName("IsCursorOnScreen")] + /// Check if cursor is on the screen + public static extern bool IsCursorOnScreen(); + + [CallingConvention(.Cdecl), LinkName("ClearBackground")] + /// Set background color (framebuffer clear color) + public static extern void ClearBackground(Color color); + + [CallingConvention(.Cdecl), LinkName("BeginDrawing")] + /// Setup canvas (framebuffer) to start drawing + public static extern void BeginDrawing(); + + [CallingConvention(.Cdecl), LinkName("EndDrawing")] + /// End canvas drawing and swap buffers (double buffering) + public static extern void EndDrawing(); + + [CallingConvention(.Cdecl), LinkName("BeginMode2D")] + /// Begin 2D mode with custom camera (2D) + public static extern void BeginMode2D(Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("EndMode2D")] + /// Ends 2D mode with custom camera + public static extern void EndMode2D(); + + [CallingConvention(.Cdecl), LinkName("BeginMode3D")] + /// Begin 3D mode with custom camera (3D) + public static extern void BeginMode3D(Camera3D camera); + + [CallingConvention(.Cdecl), LinkName("EndMode3D")] + /// Ends 3D mode and returns to default 2D orthographic mode + public static extern void EndMode3D(); + + [CallingConvention(.Cdecl), LinkName("BeginTextureMode")] + /// Begin drawing to render texture + public static extern void BeginTextureMode(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("EndTextureMode")] + /// Ends drawing to render texture + public static extern void EndTextureMode(); + + [CallingConvention(.Cdecl), LinkName("BeginShaderMode")] + /// Begin custom shader drawing + public static extern void BeginShaderMode(Shader shader); + + [CallingConvention(.Cdecl), LinkName("EndShaderMode")] + /// End custom shader drawing (use default shader) + public static extern void EndShaderMode(); + + [CallingConvention(.Cdecl), LinkName("BeginBlendMode")] + /// Begin blending mode (alpha, additive, multiplied, subtract, custom) + public static extern void BeginBlendMode(int mode); + + [CallingConvention(.Cdecl), LinkName("EndBlendMode")] + /// End blending mode (reset to default: alpha blending) + public static extern void EndBlendMode(); + + [CallingConvention(.Cdecl), LinkName("BeginScissorMode")] + /// Begin scissor mode (define screen area for following drawing) + public static extern void BeginScissorMode(int x, int y, int width, int height); + + [CallingConvention(.Cdecl), LinkName("EndScissorMode")] + /// End scissor mode + public static extern void EndScissorMode(); + + [CallingConvention(.Cdecl), LinkName("BeginVrStereoMode")] + /// Begin stereo rendering (requires VR simulator) + public static extern void BeginVrStereoMode(VrStereoConfig config); + + [CallingConvention(.Cdecl), LinkName("EndVrStereoMode")] + /// End stereo rendering (requires VR simulator) + public static extern void EndVrStereoMode(); + + [CallingConvention(.Cdecl), LinkName("LoadVrStereoConfig")] + /// Load VR stereo config for VR simulator device parameters + public static extern VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); + + [CallingConvention(.Cdecl), LinkName("UnloadVrStereoConfig")] + /// Unload VR stereo config + public static extern void UnloadVrStereoConfig(VrStereoConfig config); + + [CallingConvention(.Cdecl), LinkName("LoadShader")] + /// Load shader from files and bind default locations + public static extern Shader LoadShader(char8 * vsFileName, char8 * fsFileName); + + [CallingConvention(.Cdecl), LinkName("LoadShaderFromMemory")] + /// Load shader from code strings and bind default locations + public static extern Shader LoadShaderFromMemory(char8 * vsCode, char8 * fsCode); + + [CallingConvention(.Cdecl), LinkName("IsShaderReady")] + /// Check if a shader is ready + public static extern bool IsShaderReady(Shader shader); + + [CallingConvention(.Cdecl), LinkName("GetShaderLocation")] + /// Get shader uniform location + public static extern int GetShaderLocation(Shader shader, char8 * uniformName); + + [CallingConvention(.Cdecl), LinkName("GetShaderLocationAttrib")] + /// Get shader attribute location + public static extern int GetShaderLocationAttrib(Shader shader, char8 * attribName); + + [CallingConvention(.Cdecl), LinkName("SetShaderValue")] + /// Set shader uniform value + public static extern void SetShaderValue(Shader shader, int locIndex, void * value, int uniformType); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueV")] + /// Set shader uniform value vector + public static extern void SetShaderValueV(Shader shader, int locIndex, void * value, int uniformType, int count); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueMatrix")] + /// Set shader uniform value (matrix 4x4) + public static extern void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat); + + [CallingConvention(.Cdecl), LinkName("SetShaderValueTexture")] + /// Set shader uniform value for texture (sampler2d) + public static extern void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("UnloadShader")] + /// Unload shader from GPU memory (VRAM) + public static extern void UnloadShader(Shader shader); + + [CallingConvention(.Cdecl), LinkName("GetMouseRay")] + /// Get a ray trace from mouse position + public static extern Ray GetMouseRay(Vector2 mousePosition, Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetCameraMatrix")] + /// Get camera transform matrix (view matrix) + public static extern Matrix GetCameraMatrix(Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetCameraMatrix2D")] + /// Get camera 2d transform matrix + public static extern Matrix GetCameraMatrix2D(Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreen")] + /// Get the screen space position for a 3d world space position + public static extern Vector2 GetWorldToScreen(Vector3 position, Camera camera); + + [CallingConvention(.Cdecl), LinkName("GetScreenToWorld2D")] + /// Get the world space position for a 2d camera screen space position + public static extern Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreenEx")] + /// Get size position for a 3d world space position + public static extern Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); + + [CallingConvention(.Cdecl), LinkName("GetWorldToScreen2D")] + /// Get the screen space position for a 2d camera world space position + public static extern Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); + + [CallingConvention(.Cdecl), LinkName("SetTargetFPS")] + /// Set target FPS (maximum) + public static extern void SetTargetFPS(int fps); + + [CallingConvention(.Cdecl), LinkName("GetFPS")] + /// Get current FPS + public static extern int GetFPS(); + + [CallingConvention(.Cdecl), LinkName("GetFrameTime")] + /// Get time in seconds for last frame drawn (delta time) + public static extern float GetFrameTime(); + + [CallingConvention(.Cdecl), LinkName("GetTime")] + /// Get elapsed time in seconds since InitWindow() + public static extern double GetTime(); + + [CallingConvention(.Cdecl), LinkName("GetRandomValue")] + /// Get a random value between min and max (both included) + public static extern int GetRandomValue(int min, int max); + + [CallingConvention(.Cdecl), LinkName("SetRandomSeed")] + /// Set the seed for the random number generator + public static extern void SetRandomSeed(int seed); + + [CallingConvention(.Cdecl), LinkName("TakeScreenshot")] + /// Takes a screenshot of current screen (filename extension defines format) + public static extern void TakeScreenshot(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("SetConfigFlags")] + /// Setup init configuration flags (view FLAGS) + public static extern void SetConfigFlags(int flags); + + [CallingConvention(.Cdecl), LinkName("TraceLog")] + /// Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) + public static extern void TraceLog(int logLevel, char8 * text); + + [CallingConvention(.Cdecl), LinkName("SetTraceLogLevel")] + /// Set the current threshold (minimum) log level + public static extern void SetTraceLogLevel(int logLevel); + + [CallingConvention(.Cdecl), LinkName("MemAlloc")] + /// Internal memory allocator + public static extern void * MemAlloc(int size); + + [CallingConvention(.Cdecl), LinkName("MemRealloc")] + /// Internal memory reallocator + public static extern void * MemRealloc(void * ptr, int size); + + [CallingConvention(.Cdecl), LinkName("MemFree")] + /// Internal memory free + public static extern void MemFree(void * ptr); + + [CallingConvention(.Cdecl), LinkName("OpenURL")] + /// Open URL with default system browser (if available) + public static extern void OpenURL(char8 * url); + + [CallingConvention(.Cdecl), LinkName("SetTraceLogCallback")] + /// Set custom trace log + public static extern void SetTraceLogCallback(TraceLogCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetLoadFileDataCallback")] + /// Set custom file binary data loader + public static extern void SetLoadFileDataCallback(LoadFileDataCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetSaveFileDataCallback")] + /// Set custom file binary data saver + public static extern void SetSaveFileDataCallback(SaveFileDataCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetLoadFileTextCallback")] + /// Set custom file text data loader + public static extern void SetLoadFileTextCallback(LoadFileTextCallback callback); + + [CallingConvention(.Cdecl), LinkName("SetSaveFileTextCallback")] + /// Set custom file text data saver + public static extern void SetSaveFileTextCallback(SaveFileTextCallback callback); + + [CallingConvention(.Cdecl), LinkName("LoadFileData")] + /// Load file data as byte array (read) + public static extern char8 * LoadFileData(char8 * fileName, int * bytesRead); + + [CallingConvention(.Cdecl), LinkName("UnloadFileData")] + /// Unload file data allocated by LoadFileData() + public static extern void UnloadFileData(char8 * data); + + [CallingConvention(.Cdecl), LinkName("SaveFileData")] + /// Save data to file from byte array (write), returns true on success + public static extern bool SaveFileData(char8 * fileName, void * data, int bytesToWrite); + + [CallingConvention(.Cdecl), LinkName("ExportDataAsCode")] + /// Export data to code (.h), returns true on success + public static extern bool ExportDataAsCode(char8 * data, int size, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadFileText")] + /// Load text data from file (read), returns a '\0' terminated string + public static extern char8 * LoadFileText(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("UnloadFileText")] + /// Unload file text data allocated by LoadFileText() + public static extern void UnloadFileText(char8 * text); + + [CallingConvention(.Cdecl), LinkName("SaveFileText")] + /// Save text data to file (write), string must be '\0' terminated, returns true on success + public static extern bool SaveFileText(char8 * fileName, char8 * text); + + [CallingConvention(.Cdecl), LinkName("FileExists")] + /// Check if file exists + public static extern bool FileExists(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("DirectoryExists")] + /// Check if a directory path exists + public static extern bool DirectoryExists(char8 * dirPath); + + [CallingConvention(.Cdecl), LinkName("IsFileExtension")] + /// Check file extension (including point: .png, .wav) + public static extern bool IsFileExtension(char8 * fileName, char8 * ext); + + [CallingConvention(.Cdecl), LinkName("GetFileLength")] + /// Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h) + public static extern int GetFileLength(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("GetFileExtension")] + /// Get pointer to extension for a filename string (includes dot: '.png') + public static extern char8 * GetFileExtension(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("GetFileName")] + /// Get pointer to filename for a path string + public static extern char8 * GetFileName(char8 * filePath); + + [CallingConvention(.Cdecl), LinkName("GetFileNameWithoutExt")] + /// Get filename string without extension (uses static string) + public static extern char8 * GetFileNameWithoutExt(char8 * filePath); + + [CallingConvention(.Cdecl), LinkName("GetDirectoryPath")] + /// Get full path for a given fileName with path (uses static string) + public static extern char8 * GetDirectoryPath(char8 * filePath); + + [CallingConvention(.Cdecl), LinkName("GetPrevDirectoryPath")] + /// Get previous directory path for a given path (uses static string) + public static extern char8 * GetPrevDirectoryPath(char8 * dirPath); + + [CallingConvention(.Cdecl), LinkName("GetWorkingDirectory")] + /// Get current working directory (uses static string) + public static extern char8 * GetWorkingDirectory(); + + [CallingConvention(.Cdecl), LinkName("GetApplicationDirectory")] + /// Get the directory if the running application (uses static string) + public static extern char8 * GetApplicationDirectory(); + + [CallingConvention(.Cdecl), LinkName("ChangeDirectory")] + /// Change working directory, return true on success + public static extern bool ChangeDirectory(char8 * dir); + + [CallingConvention(.Cdecl), LinkName("IsPathFile")] + /// Check if a given path is a file or a directory + public static extern bool IsPathFile(char8 * path); + + [CallingConvention(.Cdecl), LinkName("LoadDirectoryFiles")] + /// Load directory filepaths + public static extern FilePathList LoadDirectoryFiles(char8 * dirPath); + + [CallingConvention(.Cdecl), LinkName("LoadDirectoryFilesEx")] + /// Load directory filepaths with extension filtering and recursive directory scan + public static extern FilePathList LoadDirectoryFilesEx(char8 * basePath, char8 * filter, bool scanSubdirs); + + [CallingConvention(.Cdecl), LinkName("UnloadDirectoryFiles")] + /// Unload filepaths + public static extern void UnloadDirectoryFiles(FilePathList files); + + [CallingConvention(.Cdecl), LinkName("IsFileDropped")] + /// Check if a file has been dropped into window + public static extern bool IsFileDropped(); + + [CallingConvention(.Cdecl), LinkName("LoadDroppedFiles")] + /// Load dropped filepaths + public static extern FilePathList LoadDroppedFiles(); + + [CallingConvention(.Cdecl), LinkName("UnloadDroppedFiles")] + /// Unload dropped filepaths + public static extern void UnloadDroppedFiles(FilePathList files); + + [CallingConvention(.Cdecl), LinkName("GetFileModTime")] + /// Get file modification time (last write time) + public static extern int32 GetFileModTime(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("CompressData")] + /// Compress data (DEFLATE algorithm), memory must be MemFree() + public static extern char8 * CompressData(char8 * data, int dataSize, int * compDataSize); + + [CallingConvention(.Cdecl), LinkName("DecompressData")] + /// Decompress data (DEFLATE algorithm), memory must be MemFree() + public static extern char8 * DecompressData(char8 * compData, int compDataSize, int * dataSize); + + [CallingConvention(.Cdecl), LinkName("EncodeDataBase64")] + /// Encode data to Base64 string, memory must be MemFree() + public static extern char8 * EncodeDataBase64(char8 * data, int dataSize, int * outputSize); + + [CallingConvention(.Cdecl), LinkName("DecodeDataBase64")] + /// Decode Base64 string data, memory must be MemFree() + public static extern char8 * DecodeDataBase64(char8 * data, int * outputSize); + + [CallingConvention(.Cdecl), LinkName("IsKeyPressed")] + /// Check if a key has been pressed once + public static extern bool IsKeyPressed(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyDown")] + /// Check if a key is being pressed + public static extern bool IsKeyDown(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyReleased")] + /// Check if a key has been released once + public static extern bool IsKeyReleased(int key); + + [CallingConvention(.Cdecl), LinkName("IsKeyUp")] + /// Check if a key is NOT being pressed + public static extern bool IsKeyUp(int key); + + [CallingConvention(.Cdecl), LinkName("SetExitKey")] + /// Set a custom key to exit program (default is ESC) + public static extern void SetExitKey(int key); + + [CallingConvention(.Cdecl), LinkName("GetKeyPressed")] + /// Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty + public static extern int GetKeyPressed(); + + [CallingConvention(.Cdecl), LinkName("GetCharPressed")] + /// Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty + public static extern int GetCharPressed(); + + [CallingConvention(.Cdecl), LinkName("IsGamepadAvailable")] + /// Check if a gamepad is available + public static extern bool IsGamepadAvailable(int gamepad); + + [CallingConvention(.Cdecl), LinkName("GetGamepadName")] + /// Get gamepad internal name id + public static extern char8 * GetGamepadName(int gamepad); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonPressed")] + /// Check if a gamepad button has been pressed once + public static extern bool IsGamepadButtonPressed(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonDown")] + /// Check if a gamepad button is being pressed + public static extern bool IsGamepadButtonDown(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonReleased")] + /// Check if a gamepad button has been released once + public static extern bool IsGamepadButtonReleased(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("IsGamepadButtonUp")] + /// Check if a gamepad button is NOT being pressed + public static extern bool IsGamepadButtonUp(int gamepad, int button); + + [CallingConvention(.Cdecl), LinkName("GetGamepadButtonPressed")] + /// Get the last gamepad button pressed + public static extern int GetGamepadButtonPressed(); + + [CallingConvention(.Cdecl), LinkName("GetGamepadAxisCount")] + /// Get gamepad axis count for a gamepad + public static extern int GetGamepadAxisCount(int gamepad); + + [CallingConvention(.Cdecl), LinkName("GetGamepadAxisMovement")] + /// Get axis movement value for a gamepad axis + public static extern float GetGamepadAxisMovement(int gamepad, int axis); + + [CallingConvention(.Cdecl), LinkName("SetGamepadMappings")] + /// Set internal gamepad mappings (SDL_GameControllerDB) + public static extern int SetGamepadMappings(char8 * mappings); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonPressed")] + /// Check if a mouse button has been pressed once + public static extern bool IsMouseButtonPressed(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonDown")] + /// Check if a mouse button is being pressed + public static extern bool IsMouseButtonDown(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonReleased")] + /// Check if a mouse button has been released once + public static extern bool IsMouseButtonReleased(int button); + + [CallingConvention(.Cdecl), LinkName("IsMouseButtonUp")] + /// Check if a mouse button is NOT being pressed + public static extern bool IsMouseButtonUp(int button); + + [CallingConvention(.Cdecl), LinkName("GetMouseX")] + /// Get mouse position X + public static extern int GetMouseX(); + + [CallingConvention(.Cdecl), LinkName("GetMouseY")] + /// Get mouse position Y + public static extern int GetMouseY(); + + [CallingConvention(.Cdecl), LinkName("GetMousePosition")] + /// Get mouse position XY + public static extern Vector2 GetMousePosition(); + + [CallingConvention(.Cdecl), LinkName("GetMouseDelta")] + /// Get mouse delta between frames + public static extern Vector2 GetMouseDelta(); + + [CallingConvention(.Cdecl), LinkName("SetMousePosition")] + /// Set mouse position XY + public static extern void SetMousePosition(int x, int y); + + [CallingConvention(.Cdecl), LinkName("SetMouseOffset")] + /// Set mouse offset + public static extern void SetMouseOffset(int offsetX, int offsetY); + + [CallingConvention(.Cdecl), LinkName("SetMouseScale")] + /// Set mouse scaling + public static extern void SetMouseScale(float scaleX, float scaleY); + + [CallingConvention(.Cdecl), LinkName("GetMouseWheelMove")] + /// Get mouse wheel movement for X or Y, whichever is larger + public static extern float GetMouseWheelMove(); + + [CallingConvention(.Cdecl), LinkName("GetMouseWheelMoveV")] + /// Get mouse wheel movement for both X and Y + public static extern Vector2 GetMouseWheelMoveV(); + + [CallingConvention(.Cdecl), LinkName("SetMouseCursor")] + /// Set mouse cursor + public static extern void SetMouseCursor(int cursor); + + [CallingConvention(.Cdecl), LinkName("GetTouchX")] + /// Get touch position X for touch point 0 (relative to screen size) + public static extern int GetTouchX(); + + [CallingConvention(.Cdecl), LinkName("GetTouchY")] + /// Get touch position Y for touch point 0 (relative to screen size) + public static extern int GetTouchY(); + + [CallingConvention(.Cdecl), LinkName("GetTouchPosition")] + /// Get touch position XY for a touch point index (relative to screen size) + public static extern Vector2 GetTouchPosition(int index); + + [CallingConvention(.Cdecl), LinkName("GetTouchPointId")] + /// Get touch point identifier for given index + public static extern int GetTouchPointId(int index); + + [CallingConvention(.Cdecl), LinkName("GetTouchPointCount")] + /// Get number of touch points + public static extern int GetTouchPointCount(); + + [CallingConvention(.Cdecl), LinkName("SetGesturesEnabled")] + /// Enable a set of gestures using flags + public static extern void SetGesturesEnabled(int flags); + + [CallingConvention(.Cdecl), LinkName("IsGestureDetected")] + /// Check if a gesture have been detected + public static extern bool IsGestureDetected(int gesture); + + [CallingConvention(.Cdecl), LinkName("GetGestureDetected")] + /// Get latest detected gesture + public static extern int GetGestureDetected(); + + [CallingConvention(.Cdecl), LinkName("GetGestureHoldDuration")] + /// Get gesture hold time in milliseconds + public static extern float GetGestureHoldDuration(); + + [CallingConvention(.Cdecl), LinkName("GetGestureDragVector")] + /// Get gesture drag vector + public static extern Vector2 GetGestureDragVector(); + + [CallingConvention(.Cdecl), LinkName("GetGestureDragAngle")] + /// Get gesture drag angle + public static extern float GetGestureDragAngle(); + + [CallingConvention(.Cdecl), LinkName("GetGesturePinchVector")] + /// Get gesture pinch delta + public static extern Vector2 GetGesturePinchVector(); + + [CallingConvention(.Cdecl), LinkName("GetGesturePinchAngle")] + /// Get gesture pinch angle + public static extern float GetGesturePinchAngle(); + + [CallingConvention(.Cdecl), LinkName("UpdateCamera")] + /// Update camera position for selected mode + public static extern void UpdateCamera(Camera * camera, int mode); + + [CallingConvention(.Cdecl), LinkName("UpdateCameraPro")] + /// Update camera movement/rotation + public static extern void UpdateCameraPro(Camera * camera, Vector3 movement, Vector3 rotation, float zoom); + + [CallingConvention(.Cdecl), LinkName("SetShapesTexture")] + /// Set texture and rectangle to be used on shapes drawing + public static extern void SetShapesTexture(Texture2D texture, Rectangle source); + + [CallingConvention(.Cdecl), LinkName("DrawPixel")] + /// Draw a pixel + public static extern void DrawPixel(int posX, int posY, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPixelV")] + /// Draw a pixel (Vector version) + public static extern void DrawPixelV(Vector2 position, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLine")] + /// Draw a line + public static extern void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineV")] + /// Draw a line (Vector version) + public static extern void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineEx")] + /// Draw a line defining thickness + public static extern void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezier")] + /// Draw a line using cubic-bezier curves in-out + public static extern void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezierQuad")] + /// Draw line using quadratic bezier curves with a control point + public static extern void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineBezierCubic")] + /// Draw line using cubic bezier curves with 2 control points + public static extern void DrawLineBezierCubic(Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawLineStrip")] + /// Draw lines sequence + public static extern void DrawLineStrip(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircle")] + /// Draw a color-filled circle + public static extern void DrawCircle(int centerX, int centerY, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleSector")] + /// Draw a piece of a circle + public static extern void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleSectorLines")] + /// Draw circle sector outline + public static extern void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleGradient")] + /// Draw a gradient-filled circle + public static extern void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawCircleV")] + /// Draw a color-filled circle (Vector version) + public static extern void DrawCircleV(Vector2 center, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircleLines")] + /// Draw circle outline + public static extern void DrawCircleLines(int centerX, int centerY, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawEllipse")] + /// Draw ellipse + public static extern void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawEllipseLines")] + /// Draw ellipse outline + public static extern void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRing")] + /// Draw ring + public static extern void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRingLines")] + /// Draw ring outline + public static extern void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangle")] + /// Draw a color-filled rectangle + public static extern void DrawRectangle(int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleV")] + /// Draw a color-filled rectangle (Vector version) + public static extern void DrawRectangleV(Vector2 position, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRec")] + /// Draw a color-filled rectangle + public static extern void DrawRectangleRec(Rectangle rec, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectanglePro")] + /// Draw a color-filled rectangle with pro parameters + public static extern void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientV")] + /// Draw a vertical-gradient-filled rectangle + public static extern void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientH")] + /// Draw a horizontal-gradient-filled rectangle + public static extern void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleGradientEx")] + /// Draw a gradient-filled rectangle with custom vertex colors + public static extern void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleLines")] + /// Draw rectangle outline + public static extern void DrawRectangleLines(int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleLinesEx")] + /// Draw rectangle outline with extended parameters + public static extern void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRounded")] + /// Draw rectangle with rounded edges + public static extern void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRectangleRoundedLines")] + /// Draw rectangle with rounded edges outline + public static extern void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangle")] + /// Draw a color-filled triangle (vertex in counter-clockwise order!) + public static extern void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleLines")] + /// Draw triangle outline (vertex in counter-clockwise order!) + public static extern void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleFan")] + /// Draw a triangle fan defined by points (first vertex is the center) + public static extern void DrawTriangleFan(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleStrip")] + /// Draw a triangle strip defined by points + public static extern void DrawTriangleStrip(Vector2 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPoly")] + /// Draw a regular polygon (Vector version) + public static extern void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPolyLines")] + /// Draw a polygon outline of n sides + public static extern void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPolyLinesEx")] + /// Draw a polygon outline of n sides with extended parameters + public static extern void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionRecs")] + /// Check collision between two rectangles + public static extern bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionCircles")] + /// Check collision between two circles + public static extern bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionCircleRec")] + /// Check collision between circle and rectangle + public static extern bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointRec")] + /// Check if point is inside rectangle + public static extern bool CheckCollisionPointRec(Vector2 point, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointCircle")] + /// Check if point is inside circle + public static extern bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointTriangle")] + /// Check if point is inside a triangle + public static extern bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointPoly")] + /// Check if point is within a polygon described by array of vertices + public static extern bool CheckCollisionPointPoly(Vector2 point, Vector2 * points, int pointCount); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionLines")] + /// Check the collision between two lines defined by two points each, returns collision point by reference + public static extern bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 * collisionPoint); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionPointLine")] + /// Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] + public static extern bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshold); + + [CallingConvention(.Cdecl), LinkName("GetCollisionRec")] + /// Get collision rectangle for two rectangles collision + public static extern Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); + + [CallingConvention(.Cdecl), LinkName("LoadImage")] + /// Load image from file into CPU memory (RAM) + public static extern Image LoadImage(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadImageRaw")] + /// Load image from RAW file data + public static extern Image LoadImageRaw(char8 * fileName, int width, int height, int format, int headerSize); + + [CallingConvention(.Cdecl), LinkName("LoadImageAnim")] + /// Load image sequence from file (frames appended to image.data) + public static extern Image LoadImageAnim(char8 * fileName, int * frames); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromMemory")] + /// Load image from memory buffer, fileType refers to extension: i.e. '.png' + public static extern Image LoadImageFromMemory(char8 * fileType, char8 * fileData, int dataSize); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromTexture")] + /// Load image from GPU texture data + public static extern Image LoadImageFromTexture(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("LoadImageFromScreen")] + /// Load image from screen buffer and (screenshot) + public static extern Image LoadImageFromScreen(); + + [CallingConvention(.Cdecl), LinkName("IsImageReady")] + /// Check if an image is ready + public static extern bool IsImageReady(Image image); + + [CallingConvention(.Cdecl), LinkName("UnloadImage")] + /// Unload image from CPU memory (RAM) + public static extern void UnloadImage(Image image); + + [CallingConvention(.Cdecl), LinkName("ExportImage")] + /// Export image data to file, returns true on success + public static extern bool ExportImage(Image image, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("ExportImageAsCode")] + /// Export image as code file defining an array of bytes, returns true on success + public static extern bool ExportImageAsCode(Image image, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("GenImageColor")] + /// Generate image: plain color + public static extern Image GenImageColor(int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientV")] + /// Generate image: vertical gradient + public static extern Image GenImageGradientV(int width, int height, Color top, Color bottom); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientH")] + /// Generate image: horizontal gradient + public static extern Image GenImageGradientH(int width, int height, Color left, Color right); + + [CallingConvention(.Cdecl), LinkName("GenImageGradientRadial")] + /// Generate image: radial gradient + public static extern Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); + + [CallingConvention(.Cdecl), LinkName("GenImageChecked")] + /// Generate image: checked + public static extern Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); + + [CallingConvention(.Cdecl), LinkName("GenImageWhiteNoise")] + /// Generate image: white noise + public static extern Image GenImageWhiteNoise(int width, int height, float factor); + + [CallingConvention(.Cdecl), LinkName("GenImagePerlinNoise")] + /// Generate image: perlin noise + public static extern Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); + + [CallingConvention(.Cdecl), LinkName("GenImageCellular")] + /// Generate image: cellular algorithm, bigger tileSize means bigger cells + public static extern Image GenImageCellular(int width, int height, int tileSize); + + [CallingConvention(.Cdecl), LinkName("GenImageText")] + /// Generate image: grayscale image from text data + public static extern Image GenImageText(int width, int height, char8 * text); + + [CallingConvention(.Cdecl), LinkName("ImageCopy")] + /// Create an image duplicate (useful for transformations) + public static extern Image ImageCopy(Image image); + + [CallingConvention(.Cdecl), LinkName("ImageFromImage")] + /// Create an image from another image piece + public static extern Image ImageFromImage(Image image, Rectangle rec); + + [CallingConvention(.Cdecl), LinkName("ImageText")] + /// Create an image from text (default font) + public static extern Image ImageText(char8 * text, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageTextEx")] + /// Create an image from text (custom sprite font) + public static extern Image ImageTextEx(Font font, char8 * text, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("ImageFormat")] + /// Convert image data to desired format + public static extern void ImageFormat(Image * image, int newFormat); + + [CallingConvention(.Cdecl), LinkName("ImageToPOT")] + /// Convert image to POT (power-of-two) + public static extern void ImageToPOT(Image * image, Color fill); + + [CallingConvention(.Cdecl), LinkName("ImageCrop")] + /// Crop an image to a defined rectangle + public static extern void ImageCrop(Image * image, Rectangle crop); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaCrop")] + /// Crop image depending on alpha value + public static extern void ImageAlphaCrop(Image * image, float threshold); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaClear")] + /// Clear alpha channel to desired color + public static extern void ImageAlphaClear(Image * image, Color color, float threshold); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaMask")] + /// Apply alpha mask to image + public static extern void ImageAlphaMask(Image * image, Image alphaMask); + + [CallingConvention(.Cdecl), LinkName("ImageAlphaPremultiply")] + /// Premultiply alpha channel + public static extern void ImageAlphaPremultiply(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageBlurGaussian")] + /// Apply Gaussian blur using a box blur approximation + public static extern void ImageBlurGaussian(Image * image, int blurSize); + + [CallingConvention(.Cdecl), LinkName("ImageResize")] + /// Resize image (Bicubic scaling algorithm) + public static extern void ImageResize(Image * image, int newWidth, int newHeight); + + [CallingConvention(.Cdecl), LinkName("ImageResizeNN")] + /// Resize image (Nearest-Neighbor scaling algorithm) + public static extern void ImageResizeNN(Image * image, int newWidth, int newHeight); + + [CallingConvention(.Cdecl), LinkName("ImageResizeCanvas")] + /// Resize canvas and fill with color + public static extern void ImageResizeCanvas(Image * image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); + + [CallingConvention(.Cdecl), LinkName("ImageMipmaps")] + /// Compute all mipmap levels for a provided image + public static extern void ImageMipmaps(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageDither")] + /// Dither image data to 16bpp or lower (Floyd-Steinberg dithering) + public static extern void ImageDither(Image * image, int rBpp, int gBpp, int bBpp, int aBpp); + + [CallingConvention(.Cdecl), LinkName("ImageFlipVertical")] + /// Flip image vertically + public static extern void ImageFlipVertical(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageFlipHorizontal")] + /// Flip image horizontally + public static extern void ImageFlipHorizontal(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageRotateCW")] + /// Rotate image clockwise 90deg + public static extern void ImageRotateCW(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageRotateCCW")] + /// Rotate image counter-clockwise 90deg + public static extern void ImageRotateCCW(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorTint")] + /// Modify image color: tint + public static extern void ImageColorTint(Image * image, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageColorInvert")] + /// Modify image color: invert + public static extern void ImageColorInvert(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorGrayscale")] + /// Modify image color: grayscale + public static extern void ImageColorGrayscale(Image * image); + + [CallingConvention(.Cdecl), LinkName("ImageColorContrast")] + /// Modify image color: contrast (-100 to 100) + public static extern void ImageColorContrast(Image * image, float contrast); + + [CallingConvention(.Cdecl), LinkName("ImageColorBrightness")] + /// Modify image color: brightness (-255 to 255) + public static extern void ImageColorBrightness(Image * image, int brightness); + + [CallingConvention(.Cdecl), LinkName("ImageColorReplace")] + /// Modify image color: replace color + public static extern void ImageColorReplace(Image * image, Color color, Color replace); + + [CallingConvention(.Cdecl), LinkName("LoadImageColors")] + /// Load color data from image as a Color array (RGBA - 32bit) + public static extern Color * LoadImageColors(Image image); + + [CallingConvention(.Cdecl), LinkName("LoadImagePalette")] + /// Load colors palette from image as a Color array (RGBA - 32bit) + public static extern Color * LoadImagePalette(Image image, int maxPaletteSize, int * colorCount); + + [CallingConvention(.Cdecl), LinkName("UnloadImageColors")] + /// Unload color data loaded with LoadImageColors() + public static extern void UnloadImageColors(Color * colors); + + [CallingConvention(.Cdecl), LinkName("UnloadImagePalette")] + /// Unload colors palette loaded with LoadImagePalette() + public static extern void UnloadImagePalette(Color * colors); + + [CallingConvention(.Cdecl), LinkName("GetImageAlphaBorder")] + /// Get image alpha border rectangle + public static extern Rectangle GetImageAlphaBorder(Image image, float threshold); + + [CallingConvention(.Cdecl), LinkName("GetImageColor")] + /// Get image pixel color at (x, y) position + public static extern Color GetImageColor(Image image, int x, int y); + + [CallingConvention(.Cdecl), LinkName("ImageClearBackground")] + /// Clear image background with given color + public static extern void ImageClearBackground(Image * dst, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawPixel")] + /// Draw pixel within an image + public static extern void ImageDrawPixel(Image * dst, int posX, int posY, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawPixelV")] + /// Draw pixel within an image (Vector version) + public static extern void ImageDrawPixelV(Image * dst, Vector2 position, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawLine")] + /// Draw line within an image + public static extern void ImageDrawLine(Image * dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawLineV")] + /// Draw line within an image (Vector version) + public static extern void ImageDrawLineV(Image * dst, Vector2 start, Vector2 end, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircle")] + /// Draw a filled circle within an image + public static extern void ImageDrawCircle(Image * dst, int centerX, int centerY, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleV")] + /// Draw a filled circle within an image (Vector version) + public static extern void ImageDrawCircleV(Image * dst, Vector2 center, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleLines")] + /// Draw circle outline within an image + public static extern void ImageDrawCircleLines(Image * dst, int centerX, int centerY, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawCircleLinesV")] + /// Draw circle outline within an image (Vector version) + public static extern void ImageDrawCircleLinesV(Image * dst, Vector2 center, int radius, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangle")] + /// Draw rectangle within an image + public static extern void ImageDrawRectangle(Image * dst, int posX, int posY, int width, int height, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleV")] + /// Draw rectangle within an image (Vector version) + public static extern void ImageDrawRectangleV(Image * dst, Vector2 position, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleRec")] + /// Draw rectangle within an image + public static extern void ImageDrawRectangleRec(Image * dst, Rectangle rec, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawRectangleLines")] + /// Draw rectangle lines within an image + public static extern void ImageDrawRectangleLines(Image * dst, Rectangle rec, int thick, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDraw")] + /// Draw a source image within a destination image (tint applied to source) + public static extern void ImageDraw(Image * dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); + + [CallingConvention(.Cdecl), LinkName("ImageDrawText")] + /// Draw text (using default font) within an image (destination) + public static extern void ImageDrawText(Image * dst, char8 * text, int posX, int posY, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("ImageDrawTextEx")] + /// Draw text (custom sprite font) within an image (destination) + public static extern void ImageDrawTextEx(Image * dst, Font font, char8 * text, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("LoadTexture")] + /// Load texture from file into GPU memory (VRAM) + public static extern Texture2D LoadTexture(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadTextureFromImage")] + /// Load texture from image data + public static extern Texture2D LoadTextureFromImage(Image image); + + [CallingConvention(.Cdecl), LinkName("LoadTextureCubemap")] + /// Load cubemap from image, multiple image cubemap layouts supported + public static extern TextureCubemap LoadTextureCubemap(Image image, int layout); + + [CallingConvention(.Cdecl), LinkName("LoadRenderTexture")] + /// Load texture for rendering (framebuffer) + public static extern RenderTexture2D LoadRenderTexture(int width, int height); + + [CallingConvention(.Cdecl), LinkName("IsTextureReady")] + /// Check if a texture is ready + public static extern bool IsTextureReady(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("UnloadTexture")] + /// Unload texture from GPU memory (VRAM) + public static extern void UnloadTexture(Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("IsRenderTextureReady")] + /// Check if a render texture is ready + public static extern bool IsRenderTextureReady(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("UnloadRenderTexture")] + /// Unload render texture from GPU memory (VRAM) + public static extern void UnloadRenderTexture(RenderTexture2D target); + + [CallingConvention(.Cdecl), LinkName("UpdateTexture")] + /// Update GPU texture with new data + public static extern void UpdateTexture(Texture2D texture, void * pixels); + + [CallingConvention(.Cdecl), LinkName("UpdateTextureRec")] + /// Update GPU texture rectangle with new data + public static extern void UpdateTextureRec(Texture2D texture, Rectangle rec, void * pixels); + + [CallingConvention(.Cdecl), LinkName("GenTextureMipmaps")] + /// Generate GPU mipmaps for a texture + public static extern void GenTextureMipmaps(Texture2D * texture); + + [CallingConvention(.Cdecl), LinkName("SetTextureFilter")] + /// Set texture scaling filter mode + public static extern void SetTextureFilter(Texture2D texture, int filter); + + [CallingConvention(.Cdecl), LinkName("SetTextureWrap")] + /// Set texture wrapping mode + public static extern void SetTextureWrap(Texture2D texture, int wrap); + + [CallingConvention(.Cdecl), LinkName("DrawTexture")] + /// Draw a Texture2D + public static extern void DrawTexture(Texture2D texture, int posX, int posY, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureV")] + /// Draw a Texture2D with position defined as Vector2 + public static extern void DrawTextureV(Texture2D texture, Vector2 position, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureEx")] + /// Draw a Texture2D with extended parameters + public static extern void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureRec")] + /// Draw a part of a texture defined by a rectangle + public static extern void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTexturePro")] + /// Draw a part of a texture defined by a rectangle with 'pro' parameters + public static extern void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextureNPatch")] + /// Draws a texture (or part of it) that stretches or shrinks nicely + public static extern void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("Fade")] + /// Get color with alpha applied, alpha goes from 0.0f to 1.0f + public static extern Color Fade(Color color, float alpha); + + [CallingConvention(.Cdecl), LinkName("ColorToInt")] + /// Get hexadecimal value for a Color + public static extern int ColorToInt(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorNormalize")] + /// Get Color normalized as float [0..1] + public static extern Vector4 ColorNormalize(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorFromNormalized")] + /// Get Color from normalized values [0..1] + public static extern Color ColorFromNormalized(Vector4 normalized); + + [CallingConvention(.Cdecl), LinkName("ColorToHSV")] + /// Get HSV values for a Color, hue [0..360], saturation/value [0..1] + public static extern Vector3 ColorToHSV(Color color); + + [CallingConvention(.Cdecl), LinkName("ColorFromHSV")] + /// Get a Color from HSV values, hue [0..360], saturation/value [0..1] + public static extern Color ColorFromHSV(float hue, float saturation, float value); + + [CallingConvention(.Cdecl), LinkName("ColorTint")] + /// Get color multiplied with another color + public static extern Color ColorTint(Color color, Color tint); + + [CallingConvention(.Cdecl), LinkName("ColorBrightness")] + /// Get color with brightness correction, brightness factor goes from -1.0f to 1.0f + public static extern Color ColorBrightness(Color color, float factor); + + [CallingConvention(.Cdecl), LinkName("ColorContrast")] + /// Get color with contrast correction, contrast values between -1.0f and 1.0f + public static extern Color ColorContrast(Color color, float contrast); + + [CallingConvention(.Cdecl), LinkName("ColorAlpha")] + /// Get color with alpha applied, alpha goes from 0.0f to 1.0f + public static extern Color ColorAlpha(Color color, float alpha); + + [CallingConvention(.Cdecl), LinkName("ColorAlphaBlend")] + /// Get src alpha-blended into dst color with tint + public static extern Color ColorAlphaBlend(Color dst, Color src, Color tint); + + [CallingConvention(.Cdecl), LinkName("GetColor")] + /// Get Color structure from hexadecimal value + public static extern Color GetColor(int hexValue); + + [CallingConvention(.Cdecl), LinkName("GetPixelColor")] + /// Get Color from a source pixel pointer of certain format + public static extern Color GetPixelColor(void * srcPtr, int format); + + [CallingConvention(.Cdecl), LinkName("SetPixelColor")] + /// Set color formatted into destination pixel pointer + public static extern void SetPixelColor(void * dstPtr, Color color, int format); + + [CallingConvention(.Cdecl), LinkName("GetPixelDataSize")] + /// Get pixel data size in bytes for certain format + public static extern int GetPixelDataSize(int width, int height, int format); + + [CallingConvention(.Cdecl), LinkName("GetFontDefault")] + /// Get the default Font + public static extern Font GetFontDefault(); + + [CallingConvention(.Cdecl), LinkName("LoadFont")] + /// Load font from file into GPU memory (VRAM) + public static extern Font LoadFont(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadFontEx")] + /// Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set + public static extern Font LoadFontEx(char8 * fileName, int fontSize, int * fontChars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("LoadFontFromImage")] + /// Load font from Image (XNA style) + public static extern Font LoadFontFromImage(Image image, Color key, int firstChar); + + [CallingConvention(.Cdecl), LinkName("LoadFontFromMemory")] + /// Load font from memory buffer, fileType refers to extension: i.e. '.ttf' + public static extern Font LoadFontFromMemory(char8 * fileType, char8 * fileData, int dataSize, int fontSize, int * fontChars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("IsFontReady")] + /// Check if a font is ready + public static extern bool IsFontReady(Font font); + + [CallingConvention(.Cdecl), LinkName("LoadFontData")] + /// Load font data for further use + public static extern GlyphInfo * LoadFontData(char8 * fileData, int dataSize, int fontSize, int * fontChars, int glyphCount, int type); + + [CallingConvention(.Cdecl), LinkName("GenImageFontAtlas")] + /// Generate image font atlas using chars info + public static extern Image GenImageFontAtlas(GlyphInfo * chars, Rectangle ** recs, int glyphCount, int fontSize, int padding, int packMethod); + + [CallingConvention(.Cdecl), LinkName("UnloadFontData")] + /// Unload font chars info data (RAM) + public static extern void UnloadFontData(GlyphInfo * chars, int glyphCount); + + [CallingConvention(.Cdecl), LinkName("UnloadFont")] + /// Unload font from GPU memory (VRAM) + public static extern void UnloadFont(Font font); + + [CallingConvention(.Cdecl), LinkName("ExportFontAsCode")] + /// Export font as code file, returns true on success + public static extern bool ExportFontAsCode(Font font, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("DrawFPS")] + /// Draw current FPS + public static extern void DrawFPS(int posX, int posY); + + [CallingConvention(.Cdecl), LinkName("DrawText")] + /// Draw text (using default font) + public static extern void DrawText(char8 * text, int posX, int posY, int fontSize, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTextEx")] + /// Draw text using font and additional parameters + public static extern void DrawTextEx(Font font, char8 * text, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextPro")] + /// Draw text using Font and pro parameters (rotation) + public static extern void DrawTextPro(Font font, char8 * text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextCodepoint")] + /// Draw one character (codepoint) + public static extern void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawTextCodepoints")] + /// Draw multiple character (codepoint) + public static extern void DrawTextCodepoints(Font font, int * codepoints, int count, Vector2 position, float fontSize, float spacing, Color tint); + + [CallingConvention(.Cdecl), LinkName("MeasureText")] + /// Measure string width for default font + public static extern int MeasureText(char8 * text, int fontSize); + + [CallingConvention(.Cdecl), LinkName("MeasureTextEx")] + /// Measure string size for Font + public static extern Vector2 MeasureTextEx(Font font, char8 * text, float fontSize, float spacing); + + [CallingConvention(.Cdecl), LinkName("GetGlyphIndex")] + /// Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found + public static extern int GetGlyphIndex(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("GetGlyphInfo")] + /// Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found + public static extern GlyphInfo GetGlyphInfo(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("GetGlyphAtlasRec")] + /// Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found + public static extern Rectangle GetGlyphAtlasRec(Font font, int codepoint); + + [CallingConvention(.Cdecl), LinkName("LoadUTF8")] + /// Load UTF-8 text encoded from codepoints array + public static extern char8 * LoadUTF8(int * codepoints, int length); + + [CallingConvention(.Cdecl), LinkName("UnloadUTF8")] + /// Unload UTF-8 text encoded from codepoints array + public static extern void UnloadUTF8(char8 * text); + + [CallingConvention(.Cdecl), LinkName("LoadCodepoints")] + /// Load all codepoints from a UTF-8 text string, codepoints count returned by parameter + public static extern int * LoadCodepoints(char8 * text, int * count); + + [CallingConvention(.Cdecl), LinkName("UnloadCodepoints")] + /// Unload codepoints data from memory + public static extern void UnloadCodepoints(int * codepoints); + + [CallingConvention(.Cdecl), LinkName("GetCodepointCount")] + /// Get total number of codepoints in a UTF-8 encoded string + public static extern int GetCodepointCount(char8 * text); + + [CallingConvention(.Cdecl), LinkName("GetCodepoint")] + /// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepoint(char8 * text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("GetCodepointNext")] + /// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepointNext(char8 * text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("GetCodepointPrevious")] + /// Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + public static extern int GetCodepointPrevious(char8 * text, int * codepointSize); + + [CallingConvention(.Cdecl), LinkName("CodepointToUTF8")] + /// Encode one codepoint into UTF-8 byte array (array length returned as parameter) + public static extern char8 * CodepointToUTF8(int codepoint, int * utf8Size); + + [CallingConvention(.Cdecl), LinkName("TextCopy")] + /// Copy one string to another, returns bytes copied + public static extern int TextCopy(char8 * dst, char8 * src); + + [CallingConvention(.Cdecl), LinkName("TextIsEqual")] + /// Check if two text string are equal + public static extern bool TextIsEqual(char8 * text1, char8 * text2); + + [CallingConvention(.Cdecl), LinkName("TextLength")] + /// Get text length, checks for '\0' ending + public static extern int TextLength(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextFormat")] + /// Text formatting with variables (sprintf() style) + public static extern char8 * TextFormat(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextSubtext")] + /// Get a piece of a text string + public static extern char8 * TextSubtext(char8 * text, int position, int length); + + [CallingConvention(.Cdecl), LinkName("TextReplace")] + /// Replace text string (WARNING: memory must be freed!) + public static extern char8 * TextReplace(char8 * text, char8 * replace, char8 * by); + + [CallingConvention(.Cdecl), LinkName("TextInsert")] + /// Insert text in a position (WARNING: memory must be freed!) + public static extern char8 * TextInsert(char8 * text, char8 * insert, int position); + + [CallingConvention(.Cdecl), LinkName("TextJoin")] + /// Join text strings with delimiter + public static extern char8 * TextJoin(char8 ** textList, int count, char8 * delimiter); + + [CallingConvention(.Cdecl), LinkName("TextSplit")] + /// Split text into multiple strings + public static extern char8 ** TextSplit(char8 * text, char8 delimiter, int * count); + + [CallingConvention(.Cdecl), LinkName("TextAppend")] + /// Append text at specific position and move cursor! + public static extern void TextAppend(char8 * text, char8 * @append, int * position); + + [CallingConvention(.Cdecl), LinkName("TextFindIndex")] + /// Find first text occurrence within a string + public static extern int TextFindIndex(char8 * text, char8 * find); + + [CallingConvention(.Cdecl), LinkName("TextToUpper")] + /// Get upper case version of provided string + public static extern char8 * TextToUpper(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextToLower")] + /// Get lower case version of provided string + public static extern char8 * TextToLower(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextToPascal")] + /// Get Pascal case notation version of provided string + public static extern char8 * TextToPascal(char8 * text); + + [CallingConvention(.Cdecl), LinkName("TextToInteger")] + /// Get integer value from text (negative values not supported) + public static extern int TextToInteger(char8 * text); + + [CallingConvention(.Cdecl), LinkName("DrawLine3D")] + /// Draw a line in 3D world space + public static extern void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPoint3D")] + /// Draw a point in 3D space, actually a small line + public static extern void DrawPoint3D(Vector3 position, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCircle3D")] + /// Draw a circle in 3D world space + public static extern void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangle3D")] + /// Draw a color-filled triangle (vertex in counter-clockwise order!) + public static extern void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawTriangleStrip3D")] + /// Draw a triangle strip defined by points + public static extern void DrawTriangleStrip3D(Vector3 * points, int pointCount, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCube")] + /// Draw cube + public static extern void DrawCube(Vector3 position, float width, float height, float length, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeV")] + /// Draw cube (Vector version) + public static extern void DrawCubeV(Vector3 position, Vector3 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeWires")] + /// Draw cube wires + public static extern void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCubeWiresV")] + /// Draw cube wires (Vector version) + public static extern void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphere")] + /// Draw sphere + public static extern void DrawSphere(Vector3 centerPos, float radius, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphereEx")] + /// Draw sphere with extended parameters + public static extern void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawSphereWires")] + /// Draw sphere wires + public static extern void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinder")] + /// Draw a cylinder/cone + public static extern void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderEx")] + /// Draw a cylinder with base at startPos and top at endPos + public static extern void DrawCylinderEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderWires")] + /// Draw a cylinder/cone wires + public static extern void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCylinderWiresEx")] + /// Draw a cylinder wires with base at startPos and top at endPos + public static extern void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCapsule")] + /// Draw a capsule with the center of its sphere caps at startPos and endPos + public static extern void DrawCapsule(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawCapsuleWires")] + /// Draw capsule wireframe with the center of its sphere caps at startPos and endPos + public static extern void DrawCapsuleWires(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawPlane")] + /// Draw a plane XZ + public static extern void DrawPlane(Vector3 centerPos, Vector2 size, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawRay")] + /// Draw a ray line + public static extern void DrawRay(Ray ray, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawGrid")] + /// Draw a grid (centered at (0, 0, 0)) + public static extern void DrawGrid(int slices, float spacing); + + [CallingConvention(.Cdecl), LinkName("LoadModel")] + /// Load model from files (meshes and materials) + public static extern Model LoadModel(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadModelFromMesh")] + /// Load model from generated mesh (default material) + public static extern Model LoadModelFromMesh(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("IsModelReady")] + /// Check if a model is ready + public static extern bool IsModelReady(Model model); + + [CallingConvention(.Cdecl), LinkName("UnloadModel")] + /// Unload model (including meshes) from memory (RAM and/or VRAM) + public static extern void UnloadModel(Model model); + + [CallingConvention(.Cdecl), LinkName("GetModelBoundingBox")] + /// Compute model bounding box limits (considers all meshes) + public static extern BoundingBox GetModelBoundingBox(Model model); + + [CallingConvention(.Cdecl), LinkName("DrawModel")] + /// Draw a model (with texture if set) + public static extern void DrawModel(Model model, Vector3 position, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelEx")] + /// Draw a model with extended parameters + public static extern void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelWires")] + /// Draw a model wires (with texture if set) + public static extern void DrawModelWires(Model model, Vector3 position, float scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawModelWiresEx")] + /// Draw a model wires (with texture if set) with extended parameters + public static extern void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBoundingBox")] + /// Draw bounding box (wires) + public static extern void DrawBoundingBox(BoundingBox @box, Color color); + + [CallingConvention(.Cdecl), LinkName("DrawBillboard")] + /// Draw a billboard texture + public static extern void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBillboardRec")] + /// Draw a billboard texture defined by source + public static extern void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); + + [CallingConvention(.Cdecl), LinkName("DrawBillboardPro")] + /// Draw a billboard texture defined by source and rotation + public static extern void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector3 up, Vector2 size, Vector2 origin, float rotation, Color tint); + + [CallingConvention(.Cdecl), LinkName("UploadMesh")] + /// Upload mesh vertex data in GPU and provide VAO/VBO ids + public static extern void UploadMesh(Mesh * mesh, bool dynamic); + + [CallingConvention(.Cdecl), LinkName("UpdateMeshBuffer")] + /// Update mesh vertex data in GPU for a specific buffer index + public static extern void UpdateMeshBuffer(Mesh mesh, int index, void * data, int dataSize, int offset); + + [CallingConvention(.Cdecl), LinkName("UnloadMesh")] + /// Unload mesh data from CPU and GPU + public static extern void UnloadMesh(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("DrawMesh")] + /// Draw a 3d mesh with material and transform + public static extern void DrawMesh(Mesh mesh, Material material, Matrix transform); + + [CallingConvention(.Cdecl), LinkName("DrawMeshInstanced")] + /// Draw multiple mesh instances with material and different transforms + public static extern void DrawMeshInstanced(Mesh mesh, Material material, Matrix * transforms, int instances); + + [CallingConvention(.Cdecl), LinkName("ExportMesh")] + /// Export mesh data to file, returns true on success + public static extern bool ExportMesh(Mesh mesh, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("GetMeshBoundingBox")] + /// Compute mesh bounding box limits + public static extern BoundingBox GetMeshBoundingBox(Mesh mesh); + + [CallingConvention(.Cdecl), LinkName("GenMeshTangents")] + /// Compute mesh tangents + public static extern void GenMeshTangents(Mesh * mesh); + + [CallingConvention(.Cdecl), LinkName("GenMeshPoly")] + /// Generate polygonal mesh + public static extern Mesh GenMeshPoly(int sides, float radius); + + [CallingConvention(.Cdecl), LinkName("GenMeshPlane")] + /// Generate plane mesh (with subdivisions) + public static extern Mesh GenMeshPlane(float width, float length, int resX, int resZ); + + [CallingConvention(.Cdecl), LinkName("GenMeshCube")] + /// Generate cuboid mesh + public static extern Mesh GenMeshCube(float width, float height, float length); + + [CallingConvention(.Cdecl), LinkName("GenMeshSphere")] + /// Generate sphere mesh (standard sphere) + public static extern Mesh GenMeshSphere(float radius, int rings, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshHemiSphere")] + /// Generate half-sphere mesh (no bottom cap) + public static extern Mesh GenMeshHemiSphere(float radius, int rings, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshCylinder")] + /// Generate cylinder mesh + public static extern Mesh GenMeshCylinder(float radius, float height, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshCone")] + /// Generate cone/pyramid mesh + public static extern Mesh GenMeshCone(float radius, float height, int slices); + + [CallingConvention(.Cdecl), LinkName("GenMeshTorus")] + /// Generate torus mesh + public static extern Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); + + [CallingConvention(.Cdecl), LinkName("GenMeshKnot")] + /// Generate trefoil knot mesh + public static extern Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); + + [CallingConvention(.Cdecl), LinkName("GenMeshHeightmap")] + /// Generate heightmap mesh from image data + public static extern Mesh GenMeshHeightmap(Image heightmap, Vector3 size); + + [CallingConvention(.Cdecl), LinkName("GenMeshCubicmap")] + /// Generate cubes-based map mesh from image data + public static extern Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); + + [CallingConvention(.Cdecl), LinkName("LoadMaterials")] + /// Load materials from model file + public static extern Material * LoadMaterials(char8 * fileName, int * materialCount); + + [CallingConvention(.Cdecl), LinkName("LoadMaterialDefault")] + /// Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) + public static extern Material LoadMaterialDefault(); + + [CallingConvention(.Cdecl), LinkName("IsMaterialReady")] + /// Check if a material is ready + public static extern bool IsMaterialReady(Material material); + + [CallingConvention(.Cdecl), LinkName("UnloadMaterial")] + /// Unload material from GPU memory (VRAM) + public static extern void UnloadMaterial(Material material); + + [CallingConvention(.Cdecl), LinkName("SetMaterialTexture")] + /// Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) + public static extern void SetMaterialTexture(Material * material, int mapType, Texture2D texture); + + [CallingConvention(.Cdecl), LinkName("SetModelMeshMaterial")] + /// Set material for a mesh + public static extern void SetModelMeshMaterial(Model * model, int meshId, int materialId); + + [CallingConvention(.Cdecl), LinkName("LoadModelAnimations")] + /// Load model animations from file + public static extern ModelAnimation * LoadModelAnimations(char8 * fileName, int * animCount); + + [CallingConvention(.Cdecl), LinkName("UpdateModelAnimation")] + /// Update model animation pose + public static extern void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); + + [CallingConvention(.Cdecl), LinkName("UnloadModelAnimation")] + /// Unload animation data + public static extern void UnloadModelAnimation(ModelAnimation anim); + + [CallingConvention(.Cdecl), LinkName("UnloadModelAnimations")] + /// Unload animation array data + public static extern void UnloadModelAnimations(ModelAnimation * animations, int count); + + [CallingConvention(.Cdecl), LinkName("IsModelAnimationValid")] + /// Check model animation skeleton match + public static extern bool IsModelAnimationValid(Model model, ModelAnimation anim); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionSpheres")] + /// Check collision between two spheres + public static extern bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionBoxes")] + /// Check collision between two bounding boxes + public static extern bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); + + [CallingConvention(.Cdecl), LinkName("CheckCollisionBoxSphere")] + /// Check collision between box and sphere + public static extern bool CheckCollisionBoxSphere(BoundingBox @box, Vector3 center, float radius); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionSphere")] + /// Get collision info between ray and sphere + public static extern RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionBox")] + /// Get collision info between ray and box + public static extern RayCollision GetRayCollisionBox(Ray ray, BoundingBox @box); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionMesh")] + /// Get collision info between ray and mesh + public static extern RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionTriangle")] + /// Get collision info between ray and triangle + public static extern RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); + + [CallingConvention(.Cdecl), LinkName("GetRayCollisionQuad")] + /// Get collision info between ray and quad + public static extern RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4); + + [CallingConvention(.Cdecl), LinkName("InitAudioDevice")] + /// Initialize audio device and context + public static extern void InitAudioDevice(); + + [CallingConvention(.Cdecl), LinkName("CloseAudioDevice")] + /// Close the audio device and context + public static extern void CloseAudioDevice(); + + [CallingConvention(.Cdecl), LinkName("IsAudioDeviceReady")] + /// Check if audio device has been initialized successfully + public static extern bool IsAudioDeviceReady(); + + [CallingConvention(.Cdecl), LinkName("SetMasterVolume")] + /// Set master volume (listener) + public static extern void SetMasterVolume(float volume); + + [CallingConvention(.Cdecl), LinkName("LoadWave")] + /// Load wave data from file + public static extern Wave LoadWave(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadWaveFromMemory")] + /// Load wave from memory buffer, fileType refers to extension: i.e. '.wav' + public static extern Wave LoadWaveFromMemory(char8 * fileType, char8 * fileData, int dataSize); + + [CallingConvention(.Cdecl), LinkName("IsWaveReady")] + /// Checks if wave data is ready + public static extern bool IsWaveReady(Wave wave); + + [CallingConvention(.Cdecl), LinkName("LoadSound")] + /// Load sound from file + public static extern Sound LoadSound(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadSoundFromWave")] + /// Load sound from wave data + public static extern Sound LoadSoundFromWave(Wave wave); + + [CallingConvention(.Cdecl), LinkName("IsSoundReady")] + /// Checks if a sound is ready + public static extern bool IsSoundReady(Sound sound); + + [CallingConvention(.Cdecl), LinkName("UpdateSound")] + /// Update sound buffer with new data + public static extern void UpdateSound(Sound sound, void * data, int sampleCount); + + [CallingConvention(.Cdecl), LinkName("UnloadWave")] + /// Unload wave data + public static extern void UnloadWave(Wave wave); + + [CallingConvention(.Cdecl), LinkName("UnloadSound")] + /// Unload sound + public static extern void UnloadSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("ExportWave")] + /// Export wave data to file, returns true on success + public static extern bool ExportWave(Wave wave, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("ExportWaveAsCode")] + /// Export wave sample data to code (.h), returns true on success + public static extern bool ExportWaveAsCode(Wave wave, char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("PlaySound")] + /// Play a sound + public static extern void PlaySound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("StopSound")] + /// Stop playing a sound + public static extern void StopSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("PauseSound")] + /// Pause a sound + public static extern void PauseSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("ResumeSound")] + /// Resume a paused sound + public static extern void ResumeSound(Sound sound); + + [CallingConvention(.Cdecl), LinkName("IsSoundPlaying")] + /// Check if a sound is currently playing + public static extern bool IsSoundPlaying(Sound sound); + + [CallingConvention(.Cdecl), LinkName("SetSoundVolume")] + /// Set volume for a sound (1.0 is max level) + public static extern void SetSoundVolume(Sound sound, float volume); + + [CallingConvention(.Cdecl), LinkName("SetSoundPitch")] + /// Set pitch for a sound (1.0 is base level) + public static extern void SetSoundPitch(Sound sound, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetSoundPan")] + /// Set pan for a sound (0.5 is center) + public static extern void SetSoundPan(Sound sound, float pan); + + [CallingConvention(.Cdecl), LinkName("WaveCopy")] + /// Copy a wave to a new wave + public static extern Wave WaveCopy(Wave wave); + + [CallingConvention(.Cdecl), LinkName("WaveCrop")] + /// Crop a wave to defined samples range + public static extern void WaveCrop(Wave * wave, int initSample, int finalSample); + + [CallingConvention(.Cdecl), LinkName("WaveFormat")] + /// Convert wave data to desired format + public static extern void WaveFormat(Wave * wave, int sampleRate, int sampleSize, int channels); + + [CallingConvention(.Cdecl), LinkName("LoadWaveSamples")] + /// Load samples data from wave as a 32bit float data array + public static extern float * LoadWaveSamples(Wave wave); + + [CallingConvention(.Cdecl), LinkName("UnloadWaveSamples")] + /// Unload samples data loaded with LoadWaveSamples() + public static extern void UnloadWaveSamples(float * samples); + + [CallingConvention(.Cdecl), LinkName("LoadMusicStream")] + /// Load music stream from file + public static extern Music LoadMusicStream(char8 * fileName); + + [CallingConvention(.Cdecl), LinkName("LoadMusicStreamFromMemory")] + /// Load music stream from data + public static extern Music LoadMusicStreamFromMemory(char8 * fileType, char8 * data, int dataSize); + + [CallingConvention(.Cdecl), LinkName("IsMusicReady")] + /// Checks if a music stream is ready + public static extern bool IsMusicReady(Music music); + + [CallingConvention(.Cdecl), LinkName("UnloadMusicStream")] + /// Unload music stream + public static extern void UnloadMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("PlayMusicStream")] + /// Start music playing + public static extern void PlayMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("IsMusicStreamPlaying")] + /// Check if music is playing + public static extern bool IsMusicStreamPlaying(Music music); + + [CallingConvention(.Cdecl), LinkName("UpdateMusicStream")] + /// Updates buffers for music streaming + public static extern void UpdateMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("StopMusicStream")] + /// Stop music playing + public static extern void StopMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("PauseMusicStream")] + /// Pause music playing + public static extern void PauseMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("ResumeMusicStream")] + /// Resume playing paused music + public static extern void ResumeMusicStream(Music music); + + [CallingConvention(.Cdecl), LinkName("SeekMusicStream")] + /// Seek music to a position (in seconds) + public static extern void SeekMusicStream(Music music, float position); + + [CallingConvention(.Cdecl), LinkName("SetMusicVolume")] + /// Set volume for music (1.0 is max level) + public static extern void SetMusicVolume(Music music, float volume); + + [CallingConvention(.Cdecl), LinkName("SetMusicPitch")] + /// Set pitch for a music (1.0 is base level) + public static extern void SetMusicPitch(Music music, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetMusicPan")] + /// Set pan for a music (0.5 is center) + public static extern void SetMusicPan(Music music, float pan); + + [CallingConvention(.Cdecl), LinkName("GetMusicTimeLength")] + /// Get music time length (in seconds) + public static extern float GetMusicTimeLength(Music music); + + [CallingConvention(.Cdecl), LinkName("GetMusicTimePlayed")] + /// Get current music time played (in seconds) + public static extern float GetMusicTimePlayed(Music music); + + [CallingConvention(.Cdecl), LinkName("LoadAudioStream")] + /// Load audio stream (to stream raw audio pcm data) + public static extern AudioStream LoadAudioStream(int sampleRate, int sampleSize, int channels); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamReady")] + /// Checks if an audio stream is ready + public static extern bool IsAudioStreamReady(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("UnloadAudioStream")] + /// Unload audio stream and free memory + public static extern void UnloadAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("UpdateAudioStream")] + /// Update audio stream buffers with data + public static extern void UpdateAudioStream(AudioStream stream, void * data, int frameCount); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamProcessed")] + /// Check if any audio stream buffers requires refill + public static extern bool IsAudioStreamProcessed(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("PlayAudioStream")] + /// Play audio stream + public static extern void PlayAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("PauseAudioStream")] + /// Pause audio stream + public static extern void PauseAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("ResumeAudioStream")] + /// Resume audio stream + public static extern void ResumeAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("IsAudioStreamPlaying")] + /// Check if audio stream is playing + public static extern bool IsAudioStreamPlaying(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("StopAudioStream")] + /// Stop audio stream + public static extern void StopAudioStream(AudioStream stream); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamVolume")] + /// Set volume for audio stream (1.0 is max level) + public static extern void SetAudioStreamVolume(AudioStream stream, float volume); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamPitch")] + /// Set pitch for audio stream (1.0 is base level) + public static extern void SetAudioStreamPitch(AudioStream stream, float pitch); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamPan")] + /// Set pan for audio stream (0.5 is centered) + public static extern void SetAudioStreamPan(AudioStream stream, float pan); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamBufferSizeDefault")] + /// Default size for new audio streams + public static extern void SetAudioStreamBufferSizeDefault(int size); + + [CallingConvention(.Cdecl), LinkName("SetAudioStreamCallback")] + /// Audio thread callback to request new data + public static extern void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); + + [CallingConvention(.Cdecl), LinkName("AttachAudioStreamProcessor")] + /// Attach audio stream processor to stream + public static extern void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("DetachAudioStreamProcessor")] + /// Detach audio stream processor from stream + public static extern void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("AttachAudioMixedProcessor")] + /// Attach audio stream processor to the entire audio pipeline + public static extern void AttachAudioMixedProcessor(AudioCallback processor); + + [CallingConvention(.Cdecl), LinkName("DetachAudioMixedProcessor")] + /// Detach audio stream processor from the entire audio pipeline + public static extern void DetachAudioMixedProcessor(AudioCallback processor); + +} diff --git a/beef/src/test/Rectangle.bf b/beef/src/test/Rectangle.bf new file mode 100644 index 0000000..f5fd5aa --- /dev/null +++ b/beef/src/test/Rectangle.bf @@ -0,0 +1,28 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Rectangle +{ + /// Rectangle top-left corner position x + public float x; + + /// Rectangle top-left corner position y + public float y; + + /// Rectangle width + public float width; + + /// Rectangle height + public float height; + + public this(float x, float y, float width, float height) + { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } +} diff --git a/beef/src/test/RenderTexture.bf b/beef/src/test/RenderTexture.bf new file mode 100644 index 0000000..e982956 --- /dev/null +++ b/beef/src/test/RenderTexture.bf @@ -0,0 +1,26 @@ +using System; +using System.Interop; + +namespace Raylib; + +typealias RenderTexture2D = RenderTexture; + +[CRepr] +public struct RenderTexture +{ + /// OpenGL framebuffer object id + public int id; + + /// Color buffer attachment texture + public Texture texture; + + /// Depth buffer attachment texture + public Texture depth; + + public this(int id, Texture texture, Texture depth) + { + this.id = id; + this.texture = texture; + this.depth = depth; + } +} diff --git a/beef/src/test/Shader.bf b/beef/src/test/Shader.bf new file mode 100644 index 0000000..ce1690e --- /dev/null +++ b/beef/src/test/Shader.bf @@ -0,0 +1,20 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Shader +{ + /// Shader program id + public int id; + + /// Shader locations array (RL_MAX_SHADER_LOCATIONS) + public int * locs; + + public this(int id, int * locs) + { + this.id = id; + this.locs = locs; + } +} diff --git a/beef/src/test/Sound.bf b/beef/src/test/Sound.bf new file mode 100644 index 0000000..b148a84 --- /dev/null +++ b/beef/src/test/Sound.bf @@ -0,0 +1,20 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Sound +{ + /// Audio stream + public AudioStream stream; + + /// Total number of frames (considering channels) + public int frameCount; + + public this(AudioStream stream, int frameCount) + { + this.stream = stream; + this.frameCount = frameCount; + } +} diff --git a/beef/src/test/Texture.bf b/beef/src/test/Texture.bf new file mode 100644 index 0000000..1d0fc1d --- /dev/null +++ b/beef/src/test/Texture.bf @@ -0,0 +1,34 @@ +using System; +using System.Interop; + +namespace Raylib; + +typealias Texture2D = Texture; + +[CRepr] +public struct Texture +{ + /// OpenGL texture id + public int id; + + /// Texture base width + public int width; + + /// Texture base height + public int height; + + /// Mipmap levels, 1 by default + public int mipmaps; + + /// Data format (PixelFormat type) + public int format; + + public this(int id, int width, int height, int mipmaps, int format) + { + this.id = id; + this.width = width; + this.height = height; + this.mipmaps = mipmaps; + this.format = format; + } +} diff --git a/beef/src/test/Transform.bf b/beef/src/test/Transform.bf new file mode 100644 index 0000000..c9ea5b4 --- /dev/null +++ b/beef/src/test/Transform.bf @@ -0,0 +1,24 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Transform +{ + /// Translation + public Vector3 translation; + + /// Rotation + public Quaternion rotation; + + /// Scale + public Vector3 scale; + + public this(Vector3 translation, Quaternion rotation, Vector3 scale) + { + this.translation = translation; + this.rotation = rotation; + this.scale = scale; + } +} diff --git a/beef/src/test/Vector2.bf b/beef/src/test/Vector2.bf new file mode 100644 index 0000000..c49262a --- /dev/null +++ b/beef/src/test/Vector2.bf @@ -0,0 +1,20 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Vector2 +{ + /// Vector x component + public float x; + + /// Vector y component + public float y; + + public this(float x, float y) + { + this.x = x; + this.y = y; + } +} diff --git a/beef/src/test/Vector3.bf b/beef/src/test/Vector3.bf new file mode 100644 index 0000000..9280501 --- /dev/null +++ b/beef/src/test/Vector3.bf @@ -0,0 +1,24 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Vector3 +{ + /// Vector x component + public float x; + + /// Vector y component + public float y; + + /// Vector z component + public float z; + + public this(float x, float y, float z) + { + this.x = x; + this.y = y; + this.z = z; + } +} diff --git a/beef/src/test/Vector4.bf b/beef/src/test/Vector4.bf new file mode 100644 index 0000000..7bb9fc3 --- /dev/null +++ b/beef/src/test/Vector4.bf @@ -0,0 +1,30 @@ +using System; +using System.Interop; + +namespace Raylib; + +typealias Quaternion = Vector4; + +[CRepr] +public struct Vector4 +{ + /// Vector x component + public float x; + + /// Vector y component + public float y; + + /// Vector z component + public float z; + + /// Vector w component + public float w; + + public this(float x, float y, float z, float w) + { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } +} diff --git a/beef/src/test/VrDeviceInfo.bf b/beef/src/test/VrDeviceInfo.bf new file mode 100644 index 0000000..f630160 --- /dev/null +++ b/beef/src/test/VrDeviceInfo.bf @@ -0,0 +1,52 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct VrDeviceInfo +{ + /// Horizontal resolution in pixels + public int hResolution; + + /// Vertical resolution in pixels + public int vResolution; + + /// Horizontal size in meters + public float hScreenSize; + + /// Vertical size in meters + public float vScreenSize; + + /// Screen center in meters + public float vScreenCenter; + + /// Distance between eye and display in meters + public float eyeToScreenDistance; + + /// Lens separation distance in meters + public float lensSeparationDistance; + + /// IPD (distance between pupils) in meters + public float interpupillaryDistance; + + /// Lens distortion constant parameters + public float[4] lensDistortionValues; + + /// Chromatic aberration correction parameters + public float[4] chromaAbCorrection; + + public this(int hResolution, int vResolution, float hScreenSize, float vScreenSize, float vScreenCenter, float eyeToScreenDistance, float lensSeparationDistance, float interpupillaryDistance, float[4] lensDistortionValues, float[4] chromaAbCorrection) + { + this.hResolution = hResolution; + this.vResolution = vResolution; + this.hScreenSize = hScreenSize; + this.vScreenSize = vScreenSize; + this.vScreenCenter = vScreenCenter; + this.eyeToScreenDistance = eyeToScreenDistance; + this.lensSeparationDistance = lensSeparationDistance; + this.interpupillaryDistance = interpupillaryDistance; + this.lensDistortionValues = lensDistortionValues; + this.chromaAbCorrection = chromaAbCorrection; + } +} diff --git a/beef/src/test/VrStereoConfig.bf b/beef/src/test/VrStereoConfig.bf new file mode 100644 index 0000000..3a5a83b --- /dev/null +++ b/beef/src/test/VrStereoConfig.bf @@ -0,0 +1,44 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct VrStereoConfig +{ + /// VR projection matrices (per eye) + public Matrix[2] projection; + + /// VR view offset matrices (per eye) + public Matrix[2] viewOffset; + + /// VR left lens center + public float[2] leftLensCenter; + + /// VR right lens center + public float[2] rightLensCenter; + + /// VR left screen center + public float[2] leftScreenCenter; + + /// VR right screen center + public float[2] rightScreenCenter; + + /// VR distortion scale + public float[2] scale; + + /// VR distortion scale in + public float[2] scaleIn; + + public this(Matrix[2] projection, Matrix[2] viewOffset, float[2] leftLensCenter, float[2] rightLensCenter, float[2] leftScreenCenter, float[2] rightScreenCenter, float[2] scale, float[2] scaleIn) + { + this.projection = projection; + this.viewOffset = viewOffset; + this.leftLensCenter = leftLensCenter; + this.rightLensCenter = rightLensCenter; + this.leftScreenCenter = leftScreenCenter; + this.rightScreenCenter = rightScreenCenter; + this.scale = scale; + this.scaleIn = scaleIn; + } +} diff --git a/beef/src/test/Wave.bf b/beef/src/test/Wave.bf new file mode 100644 index 0000000..1b9d304 --- /dev/null +++ b/beef/src/test/Wave.bf @@ -0,0 +1,32 @@ +using System; +using System.Interop; + +namespace Raylib; + +[CRepr] +public struct Wave +{ + /// Total number of frames (considering channels) + public int frameCount; + + /// Frequency (samples per second) + public int sampleRate; + + /// Bit depth (bits per sample): 8, 16, 32 (24 not supported) + public int sampleSize; + + /// Number of channels (1-mono, 2-stereo, ...) + public int channels; + + /// Buffer data pointer + public void * data; + + public this(int frameCount, int sampleRate, int sampleSize, int channels, void * data) + { + this.frameCount = frameCount; + this.sampleRate = sampleRate; + this.sampleSize = sampleSize; + this.channels = channels; + this.data = data; + } +} diff --git a/generator/API.cs b/generator/API.cs new file mode 100644 index 0000000..cb47d49 --- /dev/null +++ b/generator/API.cs @@ -0,0 +1,140 @@ +using Newtonsoft.Json; + +namespace RaylibBeefGenerator +{ + // Root myDeserializedClass = JsonConvert.DeserializeObject(myJsonResponse); + public class Alias + { + [JsonProperty("type")] + public string Type { get; set; } = string.Empty; + + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + + [JsonProperty("description")] + public string Description { get; set; } = string.Empty; + } + + public class Callback + { + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + + [JsonProperty("description")] + public string Description { get; set; } = string.Empty; + + [JsonProperty("returnType")] + public string ReturnType { get; set; } = string.Empty; + + [JsonProperty("params")] + public List Params { get; set; } = new(); + } + + public class Define + { + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + + [JsonProperty("type")] + public string Type { get; set; } = string.Empty; + + [JsonProperty("value")] + public object Value { get; set; } = string.Empty; + + [JsonProperty("description")] + public string Description { get; set; } = string.Empty; + } + + public class Enum + { + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + + [JsonProperty("description")] + public string Description { get; set; } = string.Empty; + + [JsonProperty("values")] + public List Values { get; set; } = new(); + } + + public class Field + { + [JsonProperty("type")] + public string Type { get; set; } = string.Empty; + + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + + [JsonProperty("description")] + public string Description { get; set; } = string.Empty; + } + + public class Function + { + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + + [JsonProperty("description")] + public string Description { get; set; } = string.Empty; + + [JsonProperty("returnType")] + public string ReturnType { get; set; } = string.Empty; + + [JsonProperty("params")] + public List Params { get; set; } = new(); + } + + public class Param + { + [JsonProperty("type")] + public string Type { get; set; } = string.Empty; + + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + } + + public class Root + { + [JsonProperty("defines")] + public List Defines { get; set; } = new(); + + [JsonProperty("structs")] + public List Structs { get; set; } = new(); + + [JsonProperty("aliases")] + public List Aliases { get; set; } = new(); + + [JsonProperty("enums")] + public List Enums { get; set; } = new(); + + [JsonProperty("callbacks")] + public List Callbacks { get; set; } = new(); + + [JsonProperty("functions")] + public List Functions { get; set; } = new(); + } + + public class Struct + { + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + + [JsonProperty("description")] + public string Description { get; set; } = string.Empty; + + [JsonProperty("fields")] + public List Fields { get; set; } = new(); + } + + public class Value + { + [JsonProperty("name")] + public string Name { get; set; } = string.Empty; + + [JsonProperty("value")] + public int? Value_ { get; set; } = 0; + + [JsonProperty("description")] + public string Description { get; set; } = string.Empty; + } +} diff --git a/generator/Program.cs b/generator/Program.cs new file mode 100644 index 0000000..5667e7f --- /dev/null +++ b/generator/Program.cs @@ -0,0 +1,226 @@ +using Newtonsoft.Json; +using System; +using System.Text; +using System.Text.RegularExpressions; + +namespace RaylibBeefGenerator +{ + public static class Program + { + // Number of tabs we are in. + private static int TabIndex = 0; + + // Current Output Beef Code + private static StringBuilder OutputString = new StringBuilder(); + + private static string OutputDir = @"C:\Dev\raylib-beef\beef\src\test\"; + + private static Root API; + + #region Output Defines + private static string Namespace = "Raylib"; + #endregion + + public static void Main(string[] args) + { + string raylibjson = @"C:\Dev\raylib-beef\raylib-api\raylib.json"; + + API = JsonConvert.DeserializeObject(File.ReadAllText(raylibjson)); + + RaylibBf(); + + for (int i = 0; i < API.Structs.Count; i++) + { + StructBf(API.Structs[i]); + } + + OutputString.Clear(); + OutputString = new(); + + UniversalHeader(); + + AppendLine($"static"); + AppendLine("{"); + IncreaseTab(); + for (int i = 0; i < API.Callbacks.Count; i++) + { + var callback = API.Callbacks[i]; + + if (!string.IsNullOrEmpty(callback.Description)) AppendLine($"/// {callback.Description}"); + AppendLine($"public function {callback.ReturnType.ConvertTypes()} {callback.Name}({callback.Params.Parameters2String()});"); + AppendLine(""); + } + DecreaseTab(); + AppendLine("}"); + + WriteToFile("Callbacks"); + } + + public static void StructBf(Struct structu) + { + OutputString.Clear(); + OutputString = new(); + + UniversalHeader(); + + var alias = API.Aliases.Find(c => c.Type == structu.Name); + if (alias != null) + { + AppendLine($"typealias {alias.Name} = {alias.Type};"); + AppendLine(""); + } + + AppendLine($"[CRepr]"); + AppendLine($"public struct {structu.Name}"); + AppendLine("{"); + IncreaseTab(); + + var constructorLine = "public this("; + + for (int i = 0; i < structu.Fields.Count; i++) + { + var field = structu.Fields[i]; + AppendLine($"/// {field.Description}"); + AppendLine($"public {field.Type.ConvertTypes()} {field.Name.ConvertName()};"); + AppendLine(""); + + constructorLine += $"{field.Type.ConvertTypes()} {field.Name}"; + if (i < structu.Fields.Count - 1) constructorLine += ", "; + } + + constructorLine += ")"; + AppendLine(constructorLine); + AppendLine("{"); + IncreaseTab(); + + for (int i = 0; i < structu.Fields.Count; i++) + { + var field = structu.Fields[i]; + AppendLine($"this.{field.Name} = {field.Name};"); + } + + DecreaseTab(); + AppendLine("}"); + + DecreaseTab(); + AppendLine("}"); + WriteToFile($"{structu.Name}"); + } + + public static void RaylibBf() + { + OutputString.Clear(); + OutputString = new(); + + UniversalHeader(); + + AppendLine("static"); + AppendLine("{"); + IncreaseTab(); + for (int i = 0; i < API.Functions.Count; i++) + { + var func = API.Functions[i]; + + AppendLine($"[CallingConvention(.Cdecl), LinkName(\"{func.Name}\")]"); + AppendLine($"/// {func.Description}"); + AppendLine($"public static extern {func.ReturnType.ConvertTypes()} {func.Name.ConvertName()}({Parameters2String(func.Params)});"); + AppendLine(""); + } + DecreaseTab(); + AppendLine("}"); + + WriteToFile("Raylib"); + } + + public static string Parameters2String(this List @params) + { + var paramStr = string.Empty; + + for (int p = 0; p < @params.Count; p++) + { + var param = @params[p]; + var t = ConvertTypes(param.Type); + if (t == "...") { paramStr = paramStr[..^2]; continue; }; // Dunno what this is about, or how to convert it. + + paramStr += $"{t} {param.Name.ConvertName()}"; + if (p < @params.Count - 1) + paramStr += ", "; + } + + return paramStr; + } + + public static void UniversalHeader() + { + AppendLine("using System;"); + AppendLine("using System.Interop;"); + AppendLine(""); + AppendLine($"namespace {Namespace};"); + AppendLine(""); + } + + public static void WriteToFile(string name) + { + File.WriteAllText(OutputDir + name + ".bf", OutputString.ToString()); + } + + ///

    + /// Converts the API types to Beef types. + /// + public static string ConvertTypes(this string input) + { + input = ReplaceWholeWord(input, "char", "char8"); + input = ReplaceWholeWord(input, "long", "int32"); + input = ReplaceWholeWord(input, "va_list", "void*"); + + if (input.StartsWith("const")) + input = input.Remove(0, 6); + if (input.StartsWith("unsigned")) + input = input.Remove(0, 9); + + switch (input) + { + case "unsigned int": + return "c_uint"; + default: + return input; + } + } + + public static string ConvertName(this string input) + { + input = ReplaceWholeWord(input, "append", "@append"); + input = ReplaceWholeWord(input, "box", "@box"); + input = ReplaceWholeWord(input, "params", "@params"); + + return input; + } + + public static string ReplaceWholeWord(this string original, string wordToFind, string replacement, RegexOptions regexOptions = RegexOptions.None) + { + string pattern = @$"\b{wordToFind}\b"; + return Regex.Replace(original, pattern, replacement); + } + + public static void AppendLine(string content) + { + var output = string.Empty; + for (int i = 0; i < TabIndex; i++) + { + output += " "; + } + output += content; + OutputString.AppendLine(output); + } + + public static void IncreaseTab() + { + TabIndex++; + } + + public static void DecreaseTab() + { + TabIndex--; + } + } +} \ No newline at end of file diff --git a/generator/generator.csproj b/generator/generator.csproj new file mode 100644 index 0000000..7d211a9 --- /dev/null +++ b/generator/generator.csproj @@ -0,0 +1,14 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + diff --git a/raylib-api/.gitignore b/raylib-api/.gitignore new file mode 100644 index 0000000..2b5c1aa --- /dev/null +++ b/raylib-api/.gitignore @@ -0,0 +1,2 @@ +vendor +package-lock.json \ No newline at end of file diff --git a/raylib-api/LICENSE.md b/raylib-api/LICENSE.md new file mode 100644 index 0000000..77fda14 --- /dev/null +++ b/raylib-api/LICENSE.md @@ -0,0 +1,18 @@ +# License + +Copyright (c) 2023 Rob Loach (@RobLoach) + +This software is provided "as-is", without any express or implied warranty. In no event +will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial +applications, and to alter it and redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not claim that you + wrote the original software. If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be misrepresented + as being the original software. + + 3. This notice may not be removed or altered from any source distribution. \ No newline at end of file diff --git a/raylib-api/Makefile b/raylib-api/Makefile new file mode 100644 index 0000000..21c2933 --- /dev/null +++ b/raylib-api/Makefile @@ -0,0 +1,46 @@ +RAYLIB_VERSION?=4.5.0 +PARSER?=vendor/raylib-parser/parser/raylib_parser +RAYLIB?=vendor/raylib +EXTENSION?=txt +FORMAT?=DEFAULT + +all: + FORMAT=DEFAULT EXTENSION=txt $(MAKE) parse + FORMAT=JSON EXTENSION=json $(MAKE) parse + FORMAT=XML EXTENSION=xml $(MAKE) parse + FORMAT=LUA EXTENSION=lua $(MAKE) parse + +vendor/raylib-parser: + git clone https://github.com/raysan5/raylib.git --depth 2 vendor/raylib-parser + +vendor/raylib: + git clone https://github.com/raysan5/raylib.git --depth 1 --branch $(RAYLIB_VERSION) vendor/raylib + +vendor/reasings: + git clone https://github.com/raylib-extras/reasings.git --depth 1 vendor/reasings + +vendor/rmem: + git clone https://github.com/raylib-extras/rmem.git --depth 1 vendor/rmem + +vendor/raygui: + git clone https://github.com/raysan5/raygui.git --depth 1 vendor/raygui + +vendor/rres: + git clone https://github.com/raysan5/rres.git --depth 1 vendor/rres + +vendor: vendor/raylib-parser vendor/raylib vendor/reasings vendor/rmem vendor/raygui vendor/rres + +$(PARSER): vendor + $(MAKE) -C vendor/raylib-parser/parser + +parse: $(PARSER) + $(PARSER) -i $(RAYLIB)/src/raylib.h -o raylib.$(EXTENSION) -f $(FORMAT) -d RLAPI + $(PARSER) -i $(RAYLIB)/src/raymath.h -o raymath.$(EXTENSION) -f $(FORMAT) -d RMAPI + $(PARSER) -i $(RAYLIB)/src/rlgl.h -o rlgl.$(EXTENSION) -f $(FORMAT) -d RLAPI -t "RLGL IMPLEMENTATION" + $(PARSER) -i vendor/reasings/src/reasings.h -o reasings.$(EXTENSION) -f $(FORMAT) -d EASEDEF + $(PARSER) -i vendor/raygui/src/raygui.h -o raygui.$(EXTENSION) -f $(FORMAT) -d RAYGUIAPI -t "RAYGUI IMPLEMENTATION" + $(PARSER) -i vendor/rmem/src/rmem.h -o rmem.$(EXTENSION) -f $(FORMAT) -d RMEMAPI -t "RMEM IMPLEMENTATION" + $(PARSER) -i vendor/rres/src/rres.h -o rres.$(EXTENSION) -f $(FORMAT) -d RRESAPI -t "RRES IMPLEMENTATION" + +clean: + rm -rf vendor diff --git a/raylib-api/README.md b/raylib-api/README.md new file mode 100644 index 0000000..52812b7 --- /dev/null +++ b/raylib-api/README.md @@ -0,0 +1,58 @@ +# raylib-api [![@raylib/api](http://img.shields.io/npm/v/@raylib/api.svg)](https://npmjs.org/package/@raylib/api "@raylib/api on npm") + +Exports of the [raylib](https://github.com/raysan5/raylib/) API through [raylib's parser](https://github.com/raysan5/raylib/tree/master/parser). + +**Target Version:** 4.5.0 + +## Features + +Versioned exports of the latest raylib APIs through the latest version of the [parser](https://github.com/raysan5/raylib/tree/master/parser): + +- reasings +- raygui +- raylib +- raymath +- rlgl +- rmem +- rres + +## Usage + +Since this is just data, there are a few ways to use *raylib-api*... + +### [Node.js](https://www.npmjs.com/package/@raylib/api) + +``` bash +npm install @raylib/api +``` + +``` js +const raylibApi = require('@raylib/api') +``` + +### git + +``` bash +# Clone +git clone https://github.com/RobLoach/raylib-api.git + +# Submodule +git submodule add https://github.com/RobLoach/raylib-api.git +``` + +## Update + +To update the exported APIs based on the latest parser, run: + +``` +make +``` + +See [Makefile](Makefile) for more. + +## License + +*raylib-api* is licensed under an unmodified zlib/libpng license, which is an OSI-certified, +BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE) for further details. + +*Copyright (c) 2022 Rob Loach ([@RobLoach](https://twitter.com/RobLoach))* diff --git a/raylib-api/index.js b/raylib-api/index.js new file mode 100644 index 0000000..d886966 --- /dev/null +++ b/raylib-api/index.js @@ -0,0 +1,9 @@ +module.exports = { + raylib: require('./raylib.json'), + raymath: require('./raymath.json'), + rlgl: require('./rlgl.json'), + rmem: require('./rmem.json'), + reasings: require('./reasings.json'), + raygui: require('./raygui.json'), + rres: require('./rres.json') +} diff --git a/raylib-api/package.json b/raylib-api/package.json new file mode 100644 index 0000000..df9455b --- /dev/null +++ b/raylib-api/package.json @@ -0,0 +1,28 @@ +{ + "name": "@raylib/api", + "version": "4.5.0", + "description": "raylib-api: Exports of the raylib API in various file formats.", + "main": "index.js", + "scripts": { + "test": "node index.js", + "update": "make" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/RobLoach/raylib-api.git" + }, + "keywords": [ + "raylib" + ], + "files": [ + "*.json", + "*.md", + "*.js" + ], + "author": "Rob Loach", + "license": "Zlib", + "bugs": { + "url": "https://github.com/RobLoach/raylib-api/issues" + }, + "homepage": "https://github.com/RobLoach/raylib-api#readme" +} diff --git a/raylib-api/raygui.json b/raylib-api/raygui.json new file mode 100644 index 0000000..6e398e7 --- /dev/null +++ b/raylib-api/raygui.json @@ -0,0 +1,2954 @@ +{ + "defines": [ + { + "name": "RAYGUI_H", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RAYGUI_VERSION", + "type": "STRING", + "value": "3.2", + "description": "" + }, + { + "name": "RAYGUIAPI", + "type": "UNKNOWN", + "value": "__declspec(dllexport)", + "description": "We are building the library as a Win32 shared library (.dll)" + }, + { + "name": "RAYGUI_MALLOC(sz)", + "type": "MACRO", + "value": "malloc(sz)", + "description": "" + }, + { + "name": "RAYGUI_CALLOC(n,sz)", + "type": "MACRO", + "value": "calloc(n,sz)", + "description": "" + }, + { + "name": "RAYGUI_FREE(p)", + "type": "MACRO", + "value": "free(p)", + "description": "" + }, + { + "name": "RAYGUI_SUPPORT_LOG_INFO", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RAYGUI_LOG(...)", + "type": "MACRO", + "value": "printf(__VA_ARGS__)", + "description": "" + }, + { + "name": "SCROLLBAR_LEFT_SIDE", + "type": "INT", + "value": 0, + "description": "" + }, + { + "name": "SCROLLBAR_RIGHT_SIDE", + "type": "INT", + "value": 1, + "description": "" + } + ], + "structs": [ + { + "name": "Vector2", + "description": "Vector2 type", + "fields": [ + { + "type": "float", + "name": "x", + "description": "" + }, + { + "type": "float", + "name": "y", + "description": "" + } + ] + }, + { + "name": "Vector3", + "description": "Vector3 type // -- ConvertHSVtoRGB(), ConvertRGBtoHSV()", + "fields": [ + { + "type": "float", + "name": "x", + "description": "" + }, + { + "type": "float", + "name": "y", + "description": "" + }, + { + "type": "float", + "name": "z", + "description": "" + } + ] + }, + { + "name": "Color", + "description": "Color type, RGBA (32bit)", + "fields": [ + { + "type": "unsigned char", + "name": "r", + "description": "" + }, + { + "type": "unsigned char", + "name": "g", + "description": "" + }, + { + "type": "unsigned char", + "name": "b", + "description": "" + }, + { + "type": "unsigned char", + "name": "a", + "description": "" + } + ] + }, + { + "name": "Rectangle", + "description": "Rectangle type", + "fields": [ + { + "type": "float", + "name": "x", + "description": "" + }, + { + "type": "float", + "name": "y", + "description": "" + }, + { + "type": "float", + "name": "width", + "description": "" + }, + { + "type": "float", + "name": "height", + "description": "" + } + ] + }, + { + "name": "Texture2D", + "description": "It should be redesigned to be provided by user", + "fields": [ + { + "type": "unsigned int", + "name": "id", + "description": "OpenGL texture id" + }, + { + "type": "int", + "name": "width", + "description": "Texture base width" + }, + { + "type": "int", + "name": "height", + "description": "Texture base height" + }, + { + "type": "int", + "name": "mipmaps", + "description": "Mipmap levels, 1 by default" + }, + { + "type": "int", + "name": "format", + "description": "Data format (PixelFormat type)" + } + ] + }, + { + "name": "Image", + "description": "Image, pixel data stored in CPU memory (RAM)", + "fields": [ + { + "type": "void *", + "name": "data", + "description": "Image raw data" + }, + { + "type": "int", + "name": "width", + "description": "Image base width" + }, + { + "type": "int", + "name": "height", + "description": "Image base height" + }, + { + "type": "int", + "name": "mipmaps", + "description": "Mipmap levels, 1 by default" + }, + { + "type": "int", + "name": "format", + "description": "Data format (PixelFormat type)" + } + ] + }, + { + "name": "GlyphInfo", + "description": "GlyphInfo, font characters glyphs info", + "fields": [ + { + "type": "int", + "name": "value", + "description": "Character value (Unicode)" + }, + { + "type": "int", + "name": "offsetX", + "description": "Character offset X when drawing" + }, + { + "type": "int", + "name": "offsetY", + "description": "Character offset Y when drawing" + }, + { + "type": "int", + "name": "advanceX", + "description": "Character advance position X" + }, + { + "type": "Image", + "name": "image", + "description": "Character image data" + } + ] + }, + { + "name": "Font", + "description": "It should be redesigned to be provided by user", + "fields": [ + { + "type": "int", + "name": "baseSize", + "description": "Base size (default chars height)" + }, + { + "type": "int", + "name": "glyphCount", + "description": "Number of glyph characters" + }, + { + "type": "int", + "name": "glyphPadding", + "description": "Padding around the glyph characters" + }, + { + "type": "Texture2D", + "name": "texture", + "description": "Texture atlas containing the glyphs" + }, + { + "type": "Rectangle *", + "name": "recs", + "description": "Rectangles in texture for the glyphs" + }, + { + "type": "GlyphInfo *", + "name": "glyphs", + "description": "Glyphs info data" + } + ] + }, + { + "name": "GuiStyleProp", + "description": "Style property", + "fields": [ + { + "type": "unsigned short", + "name": "controlId", + "description": "" + }, + { + "type": "unsigned short", + "name": "propertyId", + "description": "" + }, + { + "type": "unsigned int", + "name": "propertyValue", + "description": "" + } + ] + } + ], + "aliases": [ + ], + "enums": [ + { + "name": "GuiState", + "description": "Gui control state", + "values": [ + { + "name": "STATE_NORMAL", + "value": 0, + "description": "" + }, + { + "name": "STATE_FOCUSED", + "value": 1, + "description": "" + }, + { + "name": "STATE_PRESSED", + "value": 2, + "description": "" + }, + { + "name": "STATE_DISABLED", + "value": 3, + "description": "" + } + ] + }, + { + "name": "GuiTextAlignment", + "description": "Gui control text alignment", + "values": [ + { + "name": "TEXT_ALIGN_LEFT", + "value": 0, + "description": "" + }, + { + "name": "TEXT_ALIGN_CENTER", + "value": 1, + "description": "" + }, + { + "name": "TEXT_ALIGN_RIGHT", + "value": 2, + "description": "" + } + ] + }, + { + "name": "GuiControl", + "description": "Gui controls", + "values": [ + { + "name": "DEFAULT", + "value": 0, + "description": "" + }, + { + "name": "LABEL", + "value": 1, + "description": "Used also for: LABELBUTTON" + }, + { + "name": "BUTTON", + "value": 2, + "description": "" + }, + { + "name": "TOGGLE", + "value": 3, + "description": "Used also for: TOGGLEGROUP" + }, + { + "name": "SLIDER", + "value": 4, + "description": "Used also for: SLIDERBAR" + }, + { + "name": "PROGRESSBAR", + "value": 5, + "description": "" + }, + { + "name": "CHECKBOX", + "value": 6, + "description": "" + }, + { + "name": "COMBOBOX", + "value": 7, + "description": "" + }, + { + "name": "DROPDOWNBOX", + "value": 8, + "description": "" + }, + { + "name": "TEXTBOX", + "value": 9, + "description": "Used also for: TEXTBOXMULTI" + }, + { + "name": "VALUEBOX", + "value": 10, + "description": "" + }, + { + "name": "SPINNER", + "value": 11, + "description": "Uses: BUTTON, VALUEBOX" + }, + { + "name": "LISTVIEW", + "value": 12, + "description": "" + }, + { + "name": "COLORPICKER", + "value": 13, + "description": "" + }, + { + "name": "SCROLLBAR", + "value": 14, + "description": "" + }, + { + "name": "STATUSBAR", + "value": 15, + "description": "" + } + ] + }, + { + "name": "GuiControlProperty", + "description": "Gui base properties for every control", + "values": [ + { + "name": "BORDER_COLOR_NORMAL", + "value": 0, + "description": "" + }, + { + "name": "BASE_COLOR_NORMAL", + "value": 1, + "description": "" + }, + { + "name": "TEXT_COLOR_NORMAL", + "value": 2, + "description": "" + }, + { + "name": "BORDER_COLOR_FOCUSED", + "value": 3, + "description": "" + }, + { + "name": "BASE_COLOR_FOCUSED", + "value": 4, + "description": "" + }, + { + "name": "TEXT_COLOR_FOCUSED", + "value": 5, + "description": "" + }, + { + "name": "BORDER_COLOR_PRESSED", + "value": 6, + "description": "" + }, + { + "name": "BASE_COLOR_PRESSED", + "value": 7, + "description": "" + }, + { + "name": "TEXT_COLOR_PRESSED", + "value": 8, + "description": "" + }, + { + "name": "BORDER_COLOR_DISABLED", + "value": 9, + "description": "" + }, + { + "name": "BASE_COLOR_DISABLED", + "value": 10, + "description": "" + }, + { + "name": "TEXT_COLOR_DISABLED", + "value": 11, + "description": "" + }, + { + "name": "BORDER_WIDTH", + "value": 12, + "description": "" + }, + { + "name": "TEXT_PADDING", + "value": 13, + "description": "" + }, + { + "name": "TEXT_ALIGNMENT", + "value": 14, + "description": "" + }, + { + "name": "RESERVED", + "value": 15, + "description": "" + } + ] + }, + { + "name": "GuiDefaultProperty", + "description": "DEFAULT extended properties", + "values": [ + { + "name": "TEXT_SIZE", + "value": 16, + "description": "Text size (glyphs max height)" + }, + { + "name": "TEXT_SPACING", + "value": 17, + "description": "Text spacing between glyphs" + }, + { + "name": "LINE_COLOR", + "value": 18, + "description": "Line control color" + }, + { + "name": "BACKGROUND_COLOR", + "value": 19, + "description": "Background color" + } + ] + }, + { + "name": "GuiToggleProperty", + "description": "Toggle/ToggleGroup", + "values": [ + { + "name": "GROUP_PADDING", + "value": 16, + "description": "ToggleGroup separation between toggles" + } + ] + }, + { + "name": "GuiSliderProperty", + "description": "Slider/SliderBar", + "values": [ + { + "name": "SLIDER_WIDTH", + "value": 16, + "description": "Slider size of internal bar" + }, + { + "name": "SLIDER_PADDING", + "value": 17, + "description": "Slider/SliderBar internal bar padding" + } + ] + }, + { + "name": "GuiProgressBarProperty", + "description": "ProgressBar", + "values": [ + { + "name": "PROGRESS_PADDING", + "value": 16, + "description": "ProgressBar internal padding" + } + ] + }, + { + "name": "GuiScrollBarProperty", + "description": "ScrollBar", + "values": [ + { + "name": "ARROWS_SIZE", + "value": 16, + "description": "" + }, + { + "name": "ARROWS_VISIBLE", + "value": 17, + "description": "" + }, + { + "name": "SCROLL_SLIDER_PADDING", + "value": 18, + "description": "(SLIDERBAR, SLIDER_PADDING)" + }, + { + "name": "SCROLL_SLIDER_SIZE", + "value": 19, + "description": "" + }, + { + "name": "SCROLL_PADDING", + "value": 20, + "description": "" + }, + { + "name": "SCROLL_SPEED", + "value": 21, + "description": "" + } + ] + }, + { + "name": "GuiCheckBoxProperty", + "description": "CheckBox", + "values": [ + { + "name": "CHECK_PADDING", + "value": 16, + "description": "CheckBox internal check padding" + } + ] + }, + { + "name": "GuiComboBoxProperty", + "description": "ComboBox", + "values": [ + { + "name": "COMBO_BUTTON_WIDTH", + "value": 16, + "description": "ComboBox right button width" + }, + { + "name": "COMBO_BUTTON_SPACING", + "value": 17, + "description": "ComboBox button separation" + } + ] + }, + { + "name": "GuiDropdownBoxProperty", + "description": "DropdownBox", + "values": [ + { + "name": "ARROW_PADDING", + "value": 16, + "description": "DropdownBox arrow separation from border and items" + }, + { + "name": "DROPDOWN_ITEMS_SPACING", + "value": 17, + "description": "DropdownBox items separation" + } + ] + }, + { + "name": "GuiTextBoxProperty", + "description": "TextBox/TextBoxMulti/ValueBox/Spinner", + "values": [ + { + "name": "TEXT_INNER_PADDING", + "value": 16, + "description": "TextBox/TextBoxMulti/ValueBox/Spinner inner text padding" + }, + { + "name": "TEXT_LINES_SPACING", + "value": 17, + "description": "TextBoxMulti lines separation" + } + ] + }, + { + "name": "GuiSpinnerProperty", + "description": "Spinner", + "values": [ + { + "name": "SPIN_BUTTON_WIDTH", + "value": 16, + "description": "Spinner left/right buttons width" + }, + { + "name": "SPIN_BUTTON_SPACING", + "value": 17, + "description": "Spinner buttons separation" + } + ] + }, + { + "name": "GuiListViewProperty", + "description": "ListView", + "values": [ + { + "name": "LIST_ITEMS_HEIGHT", + "value": 16, + "description": "ListView items height" + }, + { + "name": "LIST_ITEMS_SPACING", + "value": 17, + "description": "ListView items separation" + }, + { + "name": "SCROLLBAR_WIDTH", + "value": 18, + "description": "ListView scrollbar size (usually width)" + }, + { + "name": "SCROLLBAR_SIDE", + "value": 19, + "description": "ListView scrollbar side (0-left, 1-right)" + } + ] + }, + { + "name": "GuiColorPickerProperty", + "description": "ColorPicker", + "values": [ + { + "name": "COLOR_SELECTOR_SIZE", + "value": 16, + "description": "" + }, + { + "name": "HUEBAR_WIDTH", + "value": 17, + "description": "ColorPicker right hue bar width" + }, + { + "name": "HUEBAR_PADDING", + "value": 18, + "description": "ColorPicker right hue bar separation from panel" + }, + { + "name": "HUEBAR_SELECTOR_HEIGHT", + "value": 19, + "description": "ColorPicker right hue bar selector height" + }, + { + "name": "HUEBAR_SELECTOR_OVERFLOW", + "value": 20, + "description": "ColorPicker right hue bar selector overflow" + } + ] + }, + { + "name": "GuiIconName", + "description": "", + "values": [ + { + "name": "ICON_NONE", + "value": 0, + "description": "" + }, + { + "name": "ICON_FOLDER_FILE_OPEN", + "value": 1, + "description": "" + }, + { + "name": "ICON_FILE_SAVE_CLASSIC", + "value": 2, + "description": "" + }, + { + "name": "ICON_FOLDER_OPEN", + "value": 3, + "description": "" + }, + { + "name": "ICON_FOLDER_SAVE", + "value": 4, + "description": "" + }, + { + "name": "ICON_FILE_OPEN", + "value": 5, + "description": "" + }, + { + "name": "ICON_FILE_SAVE", + "value": 6, + "description": "" + }, + { + "name": "ICON_FILE_EXPORT", + "value": 7, + "description": "" + }, + { + "name": "ICON_FILE_ADD", + "value": 8, + "description": "" + }, + { + "name": "ICON_FILE_DELETE", + "value": 9, + "description": "" + }, + { + "name": "ICON_FILETYPE_TEXT", + "value": 10, + "description": "" + }, + { + "name": "ICON_FILETYPE_AUDIO", + "value": 11, + "description": "" + }, + { + "name": "ICON_FILETYPE_IMAGE", + "value": 12, + "description": "" + }, + { + "name": "ICON_FILETYPE_PLAY", + "value": 13, + "description": "" + }, + { + "name": "ICON_FILETYPE_VIDEO", + "value": 14, + "description": "" + }, + { + "name": "ICON_FILETYPE_INFO", + "value": 15, + "description": "" + }, + { + "name": "ICON_FILE_COPY", + "value": 16, + "description": "" + }, + { + "name": "ICON_FILE_CUT", + "value": 17, + "description": "" + }, + { + "name": "ICON_FILE_PASTE", + "value": 18, + "description": "" + }, + { + "name": "ICON_CURSOR_HAND", + "value": 19, + "description": "" + }, + { + "name": "ICON_CURSOR_POINTER", + "value": 20, + "description": "" + }, + { + "name": "ICON_CURSOR_CLASSIC", + "value": 21, + "description": "" + }, + { + "name": "ICON_PENCIL", + "value": 22, + "description": "" + }, + { + "name": "ICON_PENCIL_BIG", + "value": 23, + "description": "" + }, + { + "name": "ICON_BRUSH_CLASSIC", + "value": 24, + "description": "" + }, + { + "name": "ICON_BRUSH_PAINTER", + "value": 25, + "description": "" + }, + { + "name": "ICON_WATER_DROP", + "value": 26, + "description": "" + }, + { + "name": "ICON_COLOR_PICKER", + "value": 27, + "description": "" + }, + { + "name": "ICON_RUBBER", + "value": 28, + "description": "" + }, + { + "name": "ICON_COLOR_BUCKET", + "value": 29, + "description": "" + }, + { + "name": "ICON_TEXT_T", + "value": 30, + "description": "" + }, + { + "name": "ICON_TEXT_A", + "value": 31, + "description": "" + }, + { + "name": "ICON_SCALE", + "value": 32, + "description": "" + }, + { + "name": "ICON_RESIZE", + "value": 33, + "description": "" + }, + { + "name": "ICON_FILTER_POINT", + "value": 34, + "description": "" + }, + { + "name": "ICON_FILTER_BILINEAR", + "value": 35, + "description": "" + }, + { + "name": "ICON_CROP", + "value": 36, + "description": "" + }, + { + "name": "ICON_CROP_ALPHA", + "value": 37, + "description": "" + }, + { + "name": "ICON_SQUARE_TOGGLE", + "value": 38, + "description": "" + }, + { + "name": "ICON_SYMMETRY", + "value": 39, + "description": "" + }, + { + "name": "ICON_SYMMETRY_HORIZONTAL", + "value": 40, + "description": "" + }, + { + "name": "ICON_SYMMETRY_VERTICAL", + "value": 41, + "description": "" + }, + { + "name": "ICON_LENS", + "value": 42, + "description": "" + }, + { + "name": "ICON_LENS_BIG", + "value": 43, + "description": "" + }, + { + "name": "ICON_EYE_ON", + "value": 44, + "description": "" + }, + { + "name": "ICON_EYE_OFF", + "value": 45, + "description": "" + }, + { + "name": "ICON_FILTER_TOP", + "value": 46, + "description": "" + }, + { + "name": "ICON_FILTER", + "value": 47, + "description": "" + }, + { + "name": "ICON_TARGET_POINT", + "value": 48, + "description": "" + }, + { + "name": "ICON_TARGET_SMALL", + "value": 49, + "description": "" + }, + { + "name": "ICON_TARGET_BIG", + "value": 50, + "description": "" + }, + { + "name": "ICON_TARGET_MOVE", + "value": 51, + "description": "" + }, + { + "name": "ICON_CURSOR_MOVE", + "value": 52, + "description": "" + }, + { + "name": "ICON_CURSOR_SCALE", + "value": 53, + "description": "" + }, + { + "name": "ICON_CURSOR_SCALE_RIGHT", + "value": 54, + "description": "" + }, + { + "name": "ICON_CURSOR_SCALE_LEFT", + "value": 55, + "description": "" + }, + { + "name": "ICON_UNDO", + "value": 56, + "description": "" + }, + { + "name": "ICON_REDO", + "value": 57, + "description": "" + }, + { + "name": "ICON_REREDO", + "value": 58, + "description": "" + }, + { + "name": "ICON_MUTATE", + "value": 59, + "description": "" + }, + { + "name": "ICON_ROTATE", + "value": 60, + "description": "" + }, + { + "name": "ICON_REPEAT", + "value": 61, + "description": "" + }, + { + "name": "ICON_SHUFFLE", + "value": 62, + "description": "" + }, + { + "name": "ICON_EMPTYBOX", + "value": 63, + "description": "" + }, + { + "name": "ICON_TARGET", + "value": 64, + "description": "" + }, + { + "name": "ICON_TARGET_SMALL_FILL", + "value": 65, + "description": "" + }, + { + "name": "ICON_TARGET_BIG_FILL", + "value": 66, + "description": "" + }, + { + "name": "ICON_TARGET_MOVE_FILL", + "value": 67, + "description": "" + }, + { + "name": "ICON_CURSOR_MOVE_FILL", + "value": 68, + "description": "" + }, + { + "name": "ICON_CURSOR_SCALE_FILL", + "value": 69, + "description": "" + }, + { + "name": "ICON_CURSOR_SCALE_RIGHT_FILL", + "value": 70, + "description": "" + }, + { + "name": "ICON_CURSOR_SCALE_LEFT_FILL", + "value": 71, + "description": "" + }, + { + "name": "ICON_UNDO_FILL", + "value": 72, + "description": "" + }, + { + "name": "ICON_REDO_FILL", + "value": 73, + "description": "" + }, + { + "name": "ICON_REREDO_FILL", + "value": 74, + "description": "" + }, + { + "name": "ICON_MUTATE_FILL", + "value": 75, + "description": "" + }, + { + "name": "ICON_ROTATE_FILL", + "value": 76, + "description": "" + }, + { + "name": "ICON_REPEAT_FILL", + "value": 77, + "description": "" + }, + { + "name": "ICON_SHUFFLE_FILL", + "value": 78, + "description": "" + }, + { + "name": "ICON_EMPTYBOX_SMALL", + "value": 79, + "description": "" + }, + { + "name": "ICON_BOX", + "value": 80, + "description": "" + }, + { + "name": "ICON_BOX_TOP", + "value": 81, + "description": "" + }, + { + "name": "ICON_BOX_TOP_RIGHT", + "value": 82, + "description": "" + }, + { + "name": "ICON_BOX_RIGHT", + "value": 83, + "description": "" + }, + { + "name": "ICON_BOX_BOTTOM_RIGHT", + "value": 84, + "description": "" + }, + { + "name": "ICON_BOX_BOTTOM", + "value": 85, + "description": "" + }, + { + "name": "ICON_BOX_BOTTOM_LEFT", + "value": 86, + "description": "" + }, + { + "name": "ICON_BOX_LEFT", + "value": 87, + "description": "" + }, + { + "name": "ICON_BOX_TOP_LEFT", + "value": 88, + "description": "" + }, + { + "name": "ICON_BOX_CENTER", + "value": 89, + "description": "" + }, + { + "name": "ICON_BOX_CIRCLE_MASK", + "value": 90, + "description": "" + }, + { + "name": "ICON_POT", + "value": 91, + "description": "" + }, + { + "name": "ICON_ALPHA_MULTIPLY", + "value": 92, + "description": "" + }, + { + "name": "ICON_ALPHA_CLEAR", + "value": 93, + "description": "" + }, + { + "name": "ICON_DITHERING", + "value": 94, + "description": "" + }, + { + "name": "ICON_MIPMAPS", + "value": 95, + "description": "" + }, + { + "name": "ICON_BOX_GRID", + "value": 96, + "description": "" + }, + { + "name": "ICON_GRID", + "value": 97, + "description": "" + }, + { + "name": "ICON_BOX_CORNERS_SMALL", + "value": 98, + "description": "" + }, + { + "name": "ICON_BOX_CORNERS_BIG", + "value": 99, + "description": "" + }, + { + "name": "ICON_FOUR_BOXES", + "value": 100, + "description": "" + }, + { + "name": "ICON_GRID_FILL", + "value": 101, + "description": "" + }, + { + "name": "ICON_BOX_MULTISIZE", + "value": 102, + "description": "" + }, + { + "name": "ICON_ZOOM_SMALL", + "value": 103, + "description": "" + }, + { + "name": "ICON_ZOOM_MEDIUM", + "value": 104, + "description": "" + }, + { + "name": "ICON_ZOOM_BIG", + "value": 105, + "description": "" + }, + { + "name": "ICON_ZOOM_ALL", + "value": 106, + "description": "" + }, + { + "name": "ICON_ZOOM_CENTER", + "value": 107, + "description": "" + }, + { + "name": "ICON_BOX_DOTS_SMALL", + "value": 108, + "description": "" + }, + { + "name": "ICON_BOX_DOTS_BIG", + "value": 109, + "description": "" + }, + { + "name": "ICON_BOX_CONCENTRIC", + "value": 110, + "description": "" + }, + { + "name": "ICON_BOX_GRID_BIG", + "value": 111, + "description": "" + }, + { + "name": "ICON_OK_TICK", + "value": 112, + "description": "" + }, + { + "name": "ICON_CROSS", + "value": 113, + "description": "" + }, + { + "name": "ICON_ARROW_LEFT", + "value": 114, + "description": "" + }, + { + "name": "ICON_ARROW_RIGHT", + "value": 115, + "description": "" + }, + { + "name": "ICON_ARROW_DOWN", + "value": 116, + "description": "" + }, + { + "name": "ICON_ARROW_UP", + "value": 117, + "description": "" + }, + { + "name": "ICON_ARROW_LEFT_FILL", + "value": 118, + "description": "" + }, + { + "name": "ICON_ARROW_RIGHT_FILL", + "value": 119, + "description": "" + }, + { + "name": "ICON_ARROW_DOWN_FILL", + "value": 120, + "description": "" + }, + { + "name": "ICON_ARROW_UP_FILL", + "value": 121, + "description": "" + }, + { + "name": "ICON_AUDIO", + "value": 122, + "description": "" + }, + { + "name": "ICON_FX", + "value": 123, + "description": "" + }, + { + "name": "ICON_WAVE", + "value": 124, + "description": "" + }, + { + "name": "ICON_WAVE_SINUS", + "value": 125, + "description": "" + }, + { + "name": "ICON_WAVE_SQUARE", + "value": 126, + "description": "" + }, + { + "name": "ICON_WAVE_TRIANGULAR", + "value": 127, + "description": "" + }, + { + "name": "ICON_CROSS_SMALL", + "value": 128, + "description": "" + }, + { + "name": "ICON_PLAYER_PREVIOUS", + "value": 129, + "description": "" + }, + { + "name": "ICON_PLAYER_PLAY_BACK", + "value": 130, + "description": "" + }, + { + "name": "ICON_PLAYER_PLAY", + "value": 131, + "description": "" + }, + { + "name": "ICON_PLAYER_PAUSE", + "value": 132, + "description": "" + }, + { + "name": "ICON_PLAYER_STOP", + "value": 133, + "description": "" + }, + { + "name": "ICON_PLAYER_NEXT", + "value": 134, + "description": "" + }, + { + "name": "ICON_PLAYER_RECORD", + "value": 135, + "description": "" + }, + { + "name": "ICON_MAGNET", + "value": 136, + "description": "" + }, + { + "name": "ICON_LOCK_CLOSE", + "value": 137, + "description": "" + }, + { + "name": "ICON_LOCK_OPEN", + "value": 138, + "description": "" + }, + { + "name": "ICON_CLOCK", + "value": 139, + "description": "" + }, + { + "name": "ICON_TOOLS", + "value": 140, + "description": "" + }, + { + "name": "ICON_GEAR", + "value": 141, + "description": "" + }, + { + "name": "ICON_GEAR_BIG", + "value": 142, + "description": "" + }, + { + "name": "ICON_BIN", + "value": 143, + "description": "" + }, + { + "name": "ICON_HAND_POINTER", + "value": 144, + "description": "" + }, + { + "name": "ICON_LASER", + "value": 145, + "description": "" + }, + { + "name": "ICON_COIN", + "value": 146, + "description": "" + }, + { + "name": "ICON_EXPLOSION", + "value": 147, + "description": "" + }, + { + "name": "ICON_1UP", + "value": 148, + "description": "" + }, + { + "name": "ICON_PLAYER", + "value": 149, + "description": "" + }, + { + "name": "ICON_PLAYER_JUMP", + "value": 150, + "description": "" + }, + { + "name": "ICON_KEY", + "value": 151, + "description": "" + }, + { + "name": "ICON_DEMON", + "value": 152, + "description": "" + }, + { + "name": "ICON_TEXT_POPUP", + "value": 153, + "description": "" + }, + { + "name": "ICON_GEAR_EX", + "value": 154, + "description": "" + }, + { + "name": "ICON_CRACK", + "value": 155, + "description": "" + }, + { + "name": "ICON_CRACK_POINTS", + "value": 156, + "description": "" + }, + { + "name": "ICON_STAR", + "value": 157, + "description": "" + }, + { + "name": "ICON_DOOR", + "value": 158, + "description": "" + }, + { + "name": "ICON_EXIT", + "value": 159, + "description": "" + }, + { + "name": "ICON_MODE_2D", + "value": 160, + "description": "" + }, + { + "name": "ICON_MODE_3D", + "value": 161, + "description": "" + }, + { + "name": "ICON_CUBE", + "value": 162, + "description": "" + }, + { + "name": "ICON_CUBE_FACE_TOP", + "value": 163, + "description": "" + }, + { + "name": "ICON_CUBE_FACE_LEFT", + "value": 164, + "description": "" + }, + { + "name": "ICON_CUBE_FACE_FRONT", + "value": 165, + "description": "" + }, + { + "name": "ICON_CUBE_FACE_BOTTOM", + "value": 166, + "description": "" + }, + { + "name": "ICON_CUBE_FACE_RIGHT", + "value": 167, + "description": "" + }, + { + "name": "ICON_CUBE_FACE_BACK", + "value": 168, + "description": "" + }, + { + "name": "ICON_CAMERA", + "value": 169, + "description": "" + }, + { + "name": "ICON_SPECIAL", + "value": 170, + "description": "" + }, + { + "name": "ICON_LINK_NET", + "value": 171, + "description": "" + }, + { + "name": "ICON_LINK_BOXES", + "value": 172, + "description": "" + }, + { + "name": "ICON_LINK_MULTI", + "value": 173, + "description": "" + }, + { + "name": "ICON_LINK", + "value": 174, + "description": "" + }, + { + "name": "ICON_LINK_BROKE", + "value": 175, + "description": "" + }, + { + "name": "ICON_TEXT_NOTES", + "value": 176, + "description": "" + }, + { + "name": "ICON_NOTEBOOK", + "value": 177, + "description": "" + }, + { + "name": "ICON_SUITCASE", + "value": 178, + "description": "" + }, + { + "name": "ICON_SUITCASE_ZIP", + "value": 179, + "description": "" + }, + { + "name": "ICON_MAILBOX", + "value": 180, + "description": "" + }, + { + "name": "ICON_MONITOR", + "value": 181, + "description": "" + }, + { + "name": "ICON_PRINTER", + "value": 182, + "description": "" + }, + { + "name": "ICON_PHOTO_CAMERA", + "value": 183, + "description": "" + }, + { + "name": "ICON_PHOTO_CAMERA_FLASH", + "value": 184, + "description": "" + }, + { + "name": "ICON_HOUSE", + "value": 185, + "description": "" + }, + { + "name": "ICON_HEART", + "value": 186, + "description": "" + }, + { + "name": "ICON_CORNER", + "value": 187, + "description": "" + }, + { + "name": "ICON_VERTICAL_BARS", + "value": 188, + "description": "" + }, + { + "name": "ICON_VERTICAL_BARS_FILL", + "value": 189, + "description": "" + }, + { + "name": "ICON_LIFE_BARS", + "value": 190, + "description": "" + }, + { + "name": "ICON_INFO", + "value": 191, + "description": "" + }, + { + "name": "ICON_CROSSLINE", + "value": 192, + "description": "" + }, + { + "name": "ICON_HELP", + "value": 193, + "description": "" + }, + { + "name": "ICON_FILETYPE_ALPHA", + "value": 194, + "description": "" + }, + { + "name": "ICON_FILETYPE_HOME", + "value": 195, + "description": "" + }, + { + "name": "ICON_LAYERS_VISIBLE", + "value": 196, + "description": "" + }, + { + "name": "ICON_LAYERS", + "value": 197, + "description": "" + }, + { + "name": "ICON_WINDOW", + "value": 198, + "description": "" + }, + { + "name": "ICON_HIDPI", + "value": 199, + "description": "" + }, + { + "name": "ICON_FILETYPE_BINARY", + "value": 200, + "description": "" + }, + { + "name": "ICON_HEX", + "value": 201, + "description": "" + }, + { + "name": "ICON_SHIELD", + "value": 202, + "description": "" + }, + { + "name": "ICON_FILE_NEW", + "value": 203, + "description": "" + }, + { + "name": "ICON_FOLDER_ADD", + "value": 204, + "description": "" + }, + { + "name": "ICON_ALARM", + "value": 205, + "description": "" + }, + { + "name": "ICON_CPU", + "value": 206, + "description": "" + }, + { + "name": "ICON_ROM", + "value": 207, + "description": "" + }, + { + "name": "ICON_STEP_OVER", + "value": 208, + "description": "" + }, + { + "name": "ICON_STEP_INTO", + "value": 209, + "description": "" + }, + { + "name": "ICON_STEP_OUT", + "value": 210, + "description": "" + }, + { + "name": "ICON_RESTART", + "value": 211, + "description": "" + }, + { + "name": "ICON_BREAKPOINT_ON", + "value": 212, + "description": "" + }, + { + "name": "ICON_BREAKPOINT_OFF", + "value": 213, + "description": "" + }, + { + "name": "ICON_BURGER_MENU", + "value": 214, + "description": "" + }, + { + "name": "ICON_CASE_SENSITIVE", + "value": 215, + "description": "" + }, + { + "name": "ICON_REG_EXP", + "value": 216, + "description": "" + }, + { + "name": "ICON_FOLDER", + "value": 217, + "description": "" + }, + { + "name": "ICON_FILE", + "value": 218, + "description": "" + }, + { + "name": "ICON_219", + "value": 219, + "description": "" + }, + { + "name": "ICON_220", + "value": 220, + "description": "" + }, + { + "name": "ICON_221", + "value": 221, + "description": "" + }, + { + "name": "ICON_222", + "value": 222, + "description": "" + }, + { + "name": "ICON_223", + "value": 223, + "description": "" + }, + { + "name": "ICON_224", + "value": 224, + "description": "" + }, + { + "name": "ICON_225", + "value": 225, + "description": "" + }, + { + "name": "ICON_226", + "value": 226, + "description": "" + }, + { + "name": "ICON_227", + "value": 227, + "description": "" + }, + { + "name": "ICON_228", + "value": 228, + "description": "" + }, + { + "name": "ICON_229", + "value": 229, + "description": "" + }, + { + "name": "ICON_230", + "value": 230, + "description": "" + }, + { + "name": "ICON_231", + "value": 231, + "description": "" + }, + { + "name": "ICON_232", + "value": 232, + "description": "" + }, + { + "name": "ICON_233", + "value": 233, + "description": "" + }, + { + "name": "ICON_234", + "value": 234, + "description": "" + }, + { + "name": "ICON_235", + "value": 235, + "description": "" + }, + { + "name": "ICON_236", + "value": 236, + "description": "" + }, + { + "name": "ICON_237", + "value": 237, + "description": "" + }, + { + "name": "ICON_238", + "value": 238, + "description": "" + }, + { + "name": "ICON_239", + "value": 239, + "description": "" + }, + { + "name": "ICON_240", + "value": 240, + "description": "" + }, + { + "name": "ICON_241", + "value": 241, + "description": "" + }, + { + "name": "ICON_242", + "value": 242, + "description": "" + }, + { + "name": "ICON_243", + "value": 243, + "description": "" + }, + { + "name": "ICON_244", + "value": 244, + "description": "" + }, + { + "name": "ICON_245", + "value": 245, + "description": "" + }, + { + "name": "ICON_246", + "value": 246, + "description": "" + }, + { + "name": "ICON_247", + "value": 247, + "description": "" + }, + { + "name": "ICON_248", + "value": 248, + "description": "" + }, + { + "name": "ICON_249", + "value": 249, + "description": "" + }, + { + "name": "ICON_250", + "value": 250, + "description": "" + }, + { + "name": "ICON_251", + "value": 251, + "description": "" + }, + { + "name": "ICON_252", + "value": 252, + "description": "" + }, + { + "name": "ICON_253", + "value": 253, + "description": "" + }, + { + "name": "ICON_254", + "value": 254, + "description": "" + }, + { + "name": "ICON_255", + "value": 255, + "description": "" + } + ] + } + ], + "callbacks": [ + ], + "functions": [ + { + "name": "GuiEnable", + "description": "Enable gui controls (global state)", + "returnType": "void" + }, + { + "name": "GuiDisable", + "description": "Disable gui controls (global state)", + "returnType": "void" + }, + { + "name": "GuiLock", + "description": "Lock gui controls (global state)", + "returnType": "void" + }, + { + "name": "GuiUnlock", + "description": "Unlock gui controls (global state)", + "returnType": "void" + }, + { + "name": "GuiIsLocked", + "description": "Check if gui is locked (global state)", + "returnType": "bool" + }, + { + "name": "GuiFade", + "description": "Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "alpha" + } + ] + }, + { + "name": "GuiSetState", + "description": "Set gui state (global state)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "state" + } + ] + }, + { + "name": "GuiGetState", + "description": "Get gui state (global state)", + "returnType": "int" + }, + { + "name": "GuiSetFont", + "description": "Set gui custom font (global state)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + } + ] + }, + { + "name": "GuiGetFont", + "description": "Get gui custom font (global state)", + "returnType": "Font" + }, + { + "name": "GuiSetStyle", + "description": "Set one style property", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "control" + }, + { + "type": "int", + "name": "property" + }, + { + "type": "int", + "name": "value" + } + ] + }, + { + "name": "GuiGetStyle", + "description": "Get one style property", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "control" + }, + { + "type": "int", + "name": "property" + } + ] + }, + { + "name": "GuiWindowBox", + "description": "Window Box control, shows a window that can be closed", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "title" + } + ] + }, + { + "name": "GuiGroupBox", + "description": "Group Box control with text name", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiLine", + "description": "Line separator control, could contain text", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiPanel", + "description": "Panel control, useful to group controls", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiTabBar", + "description": "Tab Bar control, returns TAB to be closed or -1", + "returnType": "int", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char **", + "name": "text" + }, + { + "type": "int", + "name": "count" + }, + { + "type": "int *", + "name": "active" + } + ] + }, + { + "name": "GuiScrollPanel", + "description": "Scroll Panel control", + "returnType": "Rectangle", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Rectangle", + "name": "content" + }, + { + "type": "Vector2 *", + "name": "scroll" + } + ] + }, + { + "name": "GuiLabel", + "description": "Label control, shows text", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiButton", + "description": "Button control, returns true when clicked", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiLabelButton", + "description": "Label button control, show true when clicked", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiToggle", + "description": "Toggle Button control, returns true when active", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "bool", + "name": "active" + } + ] + }, + { + "name": "GuiToggleGroup", + "description": "Toggle Group control, returns active toggle index", + "returnType": "int", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "active" + } + ] + }, + { + "name": "GuiCheckBox", + "description": "Check Box control, returns true when active", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "bool", + "name": "checked" + } + ] + }, + { + "name": "GuiComboBox", + "description": "Combo Box control, returns selected item index", + "returnType": "int", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "active" + } + ] + }, + { + "name": "GuiDropdownBox", + "description": "Dropdown Box control, returns selected item", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "active" + }, + { + "type": "bool", + "name": "editMode" + } + ] + }, + { + "name": "GuiSpinner", + "description": "Spinner control, returns selected value", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "value" + }, + { + "type": "int", + "name": "minValue" + }, + { + "type": "int", + "name": "maxValue" + }, + { + "type": "bool", + "name": "editMode" + } + ] + }, + { + "name": "GuiValueBox", + "description": "Value Box control, updates input text with numbers", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "value" + }, + { + "type": "int", + "name": "minValue" + }, + { + "type": "int", + "name": "maxValue" + }, + { + "type": "bool", + "name": "editMode" + } + ] + }, + { + "name": "GuiTextBox", + "description": "Text Box control, updates input text", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "char *", + "name": "text" + }, + { + "type": "int", + "name": "textSize" + }, + { + "type": "bool", + "name": "editMode" + } + ] + }, + { + "name": "GuiTextBoxMulti", + "description": "Text Box control with multiple lines", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "char *", + "name": "text" + }, + { + "type": "int", + "name": "textSize" + }, + { + "type": "bool", + "name": "editMode" + } + ] + }, + { + "name": "GuiSlider", + "description": "Slider control, returns selected value", + "returnType": "float", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "textLeft" + }, + { + "type": "const char *", + "name": "textRight" + }, + { + "type": "float", + "name": "value" + }, + { + "type": "float", + "name": "minValue" + }, + { + "type": "float", + "name": "maxValue" + } + ] + }, + { + "name": "GuiSliderBar", + "description": "Slider Bar control, returns selected value", + "returnType": "float", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "textLeft" + }, + { + "type": "const char *", + "name": "textRight" + }, + { + "type": "float", + "name": "value" + }, + { + "type": "float", + "name": "minValue" + }, + { + "type": "float", + "name": "maxValue" + } + ] + }, + { + "name": "GuiProgressBar", + "description": "Progress Bar control, shows current progress value", + "returnType": "float", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "textLeft" + }, + { + "type": "const char *", + "name": "textRight" + }, + { + "type": "float", + "name": "value" + }, + { + "type": "float", + "name": "minValue" + }, + { + "type": "float", + "name": "maxValue" + } + ] + }, + { + "name": "GuiStatusBar", + "description": "Status Bar control, shows info text", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiDummyRec", + "description": "Dummy control for placeholders", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiGrid", + "description": "Grid control, returns mouse cell position", + "returnType": "Vector2", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "int", + "name": "subdivs" + } + ] + }, + { + "name": "GuiListView", + "description": "List View control, returns selected list item index", + "returnType": "int", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "scrollIndex" + }, + { + "type": "int", + "name": "active" + } + ] + }, + { + "name": "GuiListViewEx", + "description": "List View with extended parameters", + "returnType": "int", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char **", + "name": "text" + }, + { + "type": "int", + "name": "count" + }, + { + "type": "int *", + "name": "focus" + }, + { + "type": "int *", + "name": "scrollIndex" + }, + { + "type": "int", + "name": "active" + } + ] + }, + { + "name": "GuiMessageBox", + "description": "Message Box control, displays a message", + "returnType": "int", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "title" + }, + { + "type": "const char *", + "name": "message" + }, + { + "type": "const char *", + "name": "buttons" + } + ] + }, + { + "name": "GuiTextInputBox", + "description": "Text Input Box control, ask for text, supports secret", + "returnType": "int", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "title" + }, + { + "type": "const char *", + "name": "message" + }, + { + "type": "const char *", + "name": "buttons" + }, + { + "type": "char *", + "name": "text" + }, + { + "type": "int", + "name": "textMaxSize" + }, + { + "type": "int *", + "name": "secretViewActive" + } + ] + }, + { + "name": "GuiColorPicker", + "description": "Color Picker control (multiple color controls)", + "returnType": "Color", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "GuiColorPanel", + "description": "Color Panel control", + "returnType": "Color", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "GuiColorBarAlpha", + "description": "Color Bar Alpha control", + "returnType": "float", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "float", + "name": "alpha" + } + ] + }, + { + "name": "GuiColorBarHue", + "description": "Color Bar Hue control", + "returnType": "float", + "params": [ + { + "type": "Rectangle", + "name": "bounds" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "float", + "name": "value" + } + ] + }, + { + "name": "GuiLoadStyle", + "description": "Load style file over global style variable (.rgs)", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GuiLoadStyleDefault", + "description": "Load style default over global style", + "returnType": "void" + }, + { + "name": "GuiEnableTooltip", + "description": "Enable gui tooltips (global state)", + "returnType": "void" + }, + { + "name": "GuiDisableTooltip", + "description": "Disable gui tooltips (global state)", + "returnType": "void" + }, + { + "name": "GuiSetTooltip", + "description": "Set tooltip string", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "tooltip" + } + ] + }, + { + "name": "GuiIconText", + "description": "Get text with icon id prepended (if supported)", + "returnType": "const char *", + "params": [ + { + "type": "int", + "name": "iconId" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GuiGetIcons", + "description": "Get raygui icons data pointer", + "returnType": "unsigned int *" + }, + { + "name": "GuiLoadIcons", + "description": "Load raygui icons file (.rgi) into internal icons data", + "returnType": "char **", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "bool", + "name": "loadIconsName" + } + ] + }, + { + "name": "GuiDrawIcon", + "description": "", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "iconId" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "pixelSize" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "GuiSetIconScale", + "description": "Set icon drawing size", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "scale" + } + ] + } + ] +} diff --git a/raylib-api/raygui.lua b/raylib-api/raygui.lua new file mode 100644 index 0000000..b219476 --- /dev/null +++ b/raylib-api/raygui.lua @@ -0,0 +1,2543 @@ +return { + defines = { + { + name = "RAYGUI_H", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RAYGUI_VERSION", + type = "STRING", + value = "3.2", + description = "" + }, + { + name = "RAYGUIAPI", + type = "UNKNOWN", + value = "__declspec(dllexport)", + description = "We are building the library as a Win32 shared library (.dll)" + }, + { + name = "RAYGUI_MALLOC(sz)", + type = "MACRO", + value = "malloc(sz)", + description = "" + }, + { + name = "RAYGUI_CALLOC(n,sz)", + type = "MACRO", + value = "calloc(n,sz)", + description = "" + }, + { + name = "RAYGUI_FREE(p)", + type = "MACRO", + value = "free(p)", + description = "" + }, + { + name = "RAYGUI_SUPPORT_LOG_INFO", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RAYGUI_LOG(...)", + type = "MACRO", + value = "printf(__VA_ARGS__)", + description = "" + }, + { + name = "SCROLLBAR_LEFT_SIDE", + type = "INT", + value = 0, + description = "" + }, + { + name = "SCROLLBAR_RIGHT_SIDE", + type = "INT", + value = 1, + description = "" + } + }, + structs = { + { + name = "Vector2", + description = "Vector2 type", + fields = { + { + type = "float", + name = "x", + description = "" + }, + { + type = "float", + name = "y", + description = "" + } + } + }, + { + name = "Vector3", + description = "Vector3 type // -- ConvertHSVtoRGB(), ConvertRGBtoHSV()", + fields = { + { + type = "float", + name = "x", + description = "" + }, + { + type = "float", + name = "y", + description = "" + }, + { + type = "float", + name = "z", + description = "" + } + } + }, + { + name = "Color", + description = "Color type, RGBA (32bit)", + fields = { + { + type = "unsigned char", + name = "r", + description = "" + }, + { + type = "unsigned char", + name = "g", + description = "" + }, + { + type = "unsigned char", + name = "b", + description = "" + }, + { + type = "unsigned char", + name = "a", + description = "" + } + } + }, + { + name = "Rectangle", + description = "Rectangle type", + fields = { + { + type = "float", + name = "x", + description = "" + }, + { + type = "float", + name = "y", + description = "" + }, + { + type = "float", + name = "width", + description = "" + }, + { + type = "float", + name = "height", + description = "" + } + } + }, + { + name = "Texture2D", + description = "It should be redesigned to be provided by user", + fields = { + { + type = "unsigned int", + name = "id", + description = "OpenGL texture id" + }, + { + type = "int", + name = "width", + description = "Texture base width" + }, + { + type = "int", + name = "height", + description = "Texture base height" + }, + { + type = "int", + name = "mipmaps", + description = "Mipmap levels, 1 by default" + }, + { + type = "int", + name = "format", + description = "Data format (PixelFormat type)" + } + } + }, + { + name = "Image", + description = "Image, pixel data stored in CPU memory (RAM)", + fields = { + { + type = "void *", + name = "data", + description = "Image raw data" + }, + { + type = "int", + name = "width", + description = "Image base width" + }, + { + type = "int", + name = "height", + description = "Image base height" + }, + { + type = "int", + name = "mipmaps", + description = "Mipmap levels, 1 by default" + }, + { + type = "int", + name = "format", + description = "Data format (PixelFormat type)" + } + } + }, + { + name = "GlyphInfo", + description = "GlyphInfo, font characters glyphs info", + fields = { + { + type = "int", + name = "value", + description = "Character value (Unicode)" + }, + { + type = "int", + name = "offsetX", + description = "Character offset X when drawing" + }, + { + type = "int", + name = "offsetY", + description = "Character offset Y when drawing" + }, + { + type = "int", + name = "advanceX", + description = "Character advance position X" + }, + { + type = "Image", + name = "image", + description = "Character image data" + } + } + }, + { + name = "Font", + description = "It should be redesigned to be provided by user", + fields = { + { + type = "int", + name = "baseSize", + description = "Base size (default chars height)" + }, + { + type = "int", + name = "glyphCount", + description = "Number of glyph characters" + }, + { + type = "int", + name = "glyphPadding", + description = "Padding around the glyph characters" + }, + { + type = "Texture2D", + name = "texture", + description = "Texture atlas containing the glyphs" + }, + { + type = "Rectangle *", + name = "recs", + description = "Rectangles in texture for the glyphs" + }, + { + type = "GlyphInfo *", + name = "glyphs", + description = "Glyphs info data" + } + } + }, + { + name = "GuiStyleProp", + description = "Style property", + fields = { + { + type = "unsigned short", + name = "controlId", + description = "" + }, + { + type = "unsigned short", + name = "propertyId", + description = "" + }, + { + type = "unsigned int", + name = "propertyValue", + description = "" + } + } + } + }, + aliases = { + }, + enums = { + { + name = "GuiState", + description = "Gui control state", + values = { + { + name = "STATE_NORMAL", + value = 0, + description = "" + }, + { + name = "STATE_FOCUSED", + value = 1, + description = "" + }, + { + name = "STATE_PRESSED", + value = 2, + description = "" + }, + { + name = "STATE_DISABLED", + value = 3, + description = "" + } + } + }, + { + name = "GuiTextAlignment", + description = "Gui control text alignment", + values = { + { + name = "TEXT_ALIGN_LEFT", + value = 0, + description = "" + }, + { + name = "TEXT_ALIGN_CENTER", + value = 1, + description = "" + }, + { + name = "TEXT_ALIGN_RIGHT", + value = 2, + description = "" + } + } + }, + { + name = "GuiControl", + description = "Gui controls", + values = { + { + name = "DEFAULT", + value = 0, + description = "" + }, + { + name = "LABEL", + value = 1, + description = "Used also for: LABELBUTTON" + }, + { + name = "BUTTON", + value = 2, + description = "" + }, + { + name = "TOGGLE", + value = 3, + description = "Used also for: TOGGLEGROUP" + }, + { + name = "SLIDER", + value = 4, + description = "Used also for: SLIDERBAR" + }, + { + name = "PROGRESSBAR", + value = 5, + description = "" + }, + { + name = "CHECKBOX", + value = 6, + description = "" + }, + { + name = "COMBOBOX", + value = 7, + description = "" + }, + { + name = "DROPDOWNBOX", + value = 8, + description = "" + }, + { + name = "TEXTBOX", + value = 9, + description = "Used also for: TEXTBOXMULTI" + }, + { + name = "VALUEBOX", + value = 10, + description = "" + }, + { + name = "SPINNER", + value = 11, + description = "Uses: BUTTON, VALUEBOX" + }, + { + name = "LISTVIEW", + value = 12, + description = "" + }, + { + name = "COLORPICKER", + value = 13, + description = "" + }, + { + name = "SCROLLBAR", + value = 14, + description = "" + }, + { + name = "STATUSBAR", + value = 15, + description = "" + } + } + }, + { + name = "GuiControlProperty", + description = "Gui base properties for every control", + values = { + { + name = "BORDER_COLOR_NORMAL", + value = 0, + description = "" + }, + { + name = "BASE_COLOR_NORMAL", + value = 1, + description = "" + }, + { + name = "TEXT_COLOR_NORMAL", + value = 2, + description = "" + }, + { + name = "BORDER_COLOR_FOCUSED", + value = 3, + description = "" + }, + { + name = "BASE_COLOR_FOCUSED", + value = 4, + description = "" + }, + { + name = "TEXT_COLOR_FOCUSED", + value = 5, + description = "" + }, + { + name = "BORDER_COLOR_PRESSED", + value = 6, + description = "" + }, + { + name = "BASE_COLOR_PRESSED", + value = 7, + description = "" + }, + { + name = "TEXT_COLOR_PRESSED", + value = 8, + description = "" + }, + { + name = "BORDER_COLOR_DISABLED", + value = 9, + description = "" + }, + { + name = "BASE_COLOR_DISABLED", + value = 10, + description = "" + }, + { + name = "TEXT_COLOR_DISABLED", + value = 11, + description = "" + }, + { + name = "BORDER_WIDTH", + value = 12, + description = "" + }, + { + name = "TEXT_PADDING", + value = 13, + description = "" + }, + { + name = "TEXT_ALIGNMENT", + value = 14, + description = "" + }, + { + name = "RESERVED", + value = 15, + description = "" + } + } + }, + { + name = "GuiDefaultProperty", + description = "DEFAULT extended properties", + values = { + { + name = "TEXT_SIZE", + value = 16, + description = "Text size (glyphs max height)" + }, + { + name = "TEXT_SPACING", + value = 17, + description = "Text spacing between glyphs" + }, + { + name = "LINE_COLOR", + value = 18, + description = "Line control color" + }, + { + name = "BACKGROUND_COLOR", + value = 19, + description = "Background color" + } + } + }, + { + name = "GuiToggleProperty", + description = "Toggle/ToggleGroup", + values = { + { + name = "GROUP_PADDING", + value = 16, + description = "ToggleGroup separation between toggles" + } + } + }, + { + name = "GuiSliderProperty", + description = "Slider/SliderBar", + values = { + { + name = "SLIDER_WIDTH", + value = 16, + description = "Slider size of internal bar" + }, + { + name = "SLIDER_PADDING", + value = 17, + description = "Slider/SliderBar internal bar padding" + } + } + }, + { + name = "GuiProgressBarProperty", + description = "ProgressBar", + values = { + { + name = "PROGRESS_PADDING", + value = 16, + description = "ProgressBar internal padding" + } + } + }, + { + name = "GuiScrollBarProperty", + description = "ScrollBar", + values = { + { + name = "ARROWS_SIZE", + value = 16, + description = "" + }, + { + name = "ARROWS_VISIBLE", + value = 17, + description = "" + }, + { + name = "SCROLL_SLIDER_PADDING", + value = 18, + description = "(SLIDERBAR, SLIDER_PADDING)" + }, + { + name = "SCROLL_SLIDER_SIZE", + value = 19, + description = "" + }, + { + name = "SCROLL_PADDING", + value = 20, + description = "" + }, + { + name = "SCROLL_SPEED", + value = 21, + description = "" + } + } + }, + { + name = "GuiCheckBoxProperty", + description = "CheckBox", + values = { + { + name = "CHECK_PADDING", + value = 16, + description = "CheckBox internal check padding" + } + } + }, + { + name = "GuiComboBoxProperty", + description = "ComboBox", + values = { + { + name = "COMBO_BUTTON_WIDTH", + value = 16, + description = "ComboBox right button width" + }, + { + name = "COMBO_BUTTON_SPACING", + value = 17, + description = "ComboBox button separation" + } + } + }, + { + name = "GuiDropdownBoxProperty", + description = "DropdownBox", + values = { + { + name = "ARROW_PADDING", + value = 16, + description = "DropdownBox arrow separation from border and items" + }, + { + name = "DROPDOWN_ITEMS_SPACING", + value = 17, + description = "DropdownBox items separation" + } + } + }, + { + name = "GuiTextBoxProperty", + description = "TextBox/TextBoxMulti/ValueBox/Spinner", + values = { + { + name = "TEXT_INNER_PADDING", + value = 16, + description = "TextBox/TextBoxMulti/ValueBox/Spinner inner text padding" + }, + { + name = "TEXT_LINES_SPACING", + value = 17, + description = "TextBoxMulti lines separation" + } + } + }, + { + name = "GuiSpinnerProperty", + description = "Spinner", + values = { + { + name = "SPIN_BUTTON_WIDTH", + value = 16, + description = "Spinner left/right buttons width" + }, + { + name = "SPIN_BUTTON_SPACING", + value = 17, + description = "Spinner buttons separation" + } + } + }, + { + name = "GuiListViewProperty", + description = "ListView", + values = { + { + name = "LIST_ITEMS_HEIGHT", + value = 16, + description = "ListView items height" + }, + { + name = "LIST_ITEMS_SPACING", + value = 17, + description = "ListView items separation" + }, + { + name = "SCROLLBAR_WIDTH", + value = 18, + description = "ListView scrollbar size (usually width)" + }, + { + name = "SCROLLBAR_SIDE", + value = 19, + description = "ListView scrollbar side (0-left, 1-right)" + } + } + }, + { + name = "GuiColorPickerProperty", + description = "ColorPicker", + values = { + { + name = "COLOR_SELECTOR_SIZE", + value = 16, + description = "" + }, + { + name = "HUEBAR_WIDTH", + value = 17, + description = "ColorPicker right hue bar width" + }, + { + name = "HUEBAR_PADDING", + value = 18, + description = "ColorPicker right hue bar separation from panel" + }, + { + name = "HUEBAR_SELECTOR_HEIGHT", + value = 19, + description = "ColorPicker right hue bar selector height" + }, + { + name = "HUEBAR_SELECTOR_OVERFLOW", + value = 20, + description = "ColorPicker right hue bar selector overflow" + } + } + }, + { + name = "GuiIconName", + description = "", + values = { + { + name = "ICON_NONE", + value = 0, + description = "" + }, + { + name = "ICON_FOLDER_FILE_OPEN", + value = 1, + description = "" + }, + { + name = "ICON_FILE_SAVE_CLASSIC", + value = 2, + description = "" + }, + { + name = "ICON_FOLDER_OPEN", + value = 3, + description = "" + }, + { + name = "ICON_FOLDER_SAVE", + value = 4, + description = "" + }, + { + name = "ICON_FILE_OPEN", + value = 5, + description = "" + }, + { + name = "ICON_FILE_SAVE", + value = 6, + description = "" + }, + { + name = "ICON_FILE_EXPORT", + value = 7, + description = "" + }, + { + name = "ICON_FILE_ADD", + value = 8, + description = "" + }, + { + name = "ICON_FILE_DELETE", + value = 9, + description = "" + }, + { + name = "ICON_FILETYPE_TEXT", + value = 10, + description = "" + }, + { + name = "ICON_FILETYPE_AUDIO", + value = 11, + description = "" + }, + { + name = "ICON_FILETYPE_IMAGE", + value = 12, + description = "" + }, + { + name = "ICON_FILETYPE_PLAY", + value = 13, + description = "" + }, + { + name = "ICON_FILETYPE_VIDEO", + value = 14, + description = "" + }, + { + name = "ICON_FILETYPE_INFO", + value = 15, + description = "" + }, + { + name = "ICON_FILE_COPY", + value = 16, + description = "" + }, + { + name = "ICON_FILE_CUT", + value = 17, + description = "" + }, + { + name = "ICON_FILE_PASTE", + value = 18, + description = "" + }, + { + name = "ICON_CURSOR_HAND", + value = 19, + description = "" + }, + { + name = "ICON_CURSOR_POINTER", + value = 20, + description = "" + }, + { + name = "ICON_CURSOR_CLASSIC", + value = 21, + description = "" + }, + { + name = "ICON_PENCIL", + value = 22, + description = "" + }, + { + name = "ICON_PENCIL_BIG", + value = 23, + description = "" + }, + { + name = "ICON_BRUSH_CLASSIC", + value = 24, + description = "" + }, + { + name = "ICON_BRUSH_PAINTER", + value = 25, + description = "" + }, + { + name = "ICON_WATER_DROP", + value = 26, + description = "" + }, + { + name = "ICON_COLOR_PICKER", + value = 27, + description = "" + }, + { + name = "ICON_RUBBER", + value = 28, + description = "" + }, + { + name = "ICON_COLOR_BUCKET", + value = 29, + description = "" + }, + { + name = "ICON_TEXT_T", + value = 30, + description = "" + }, + { + name = "ICON_TEXT_A", + value = 31, + description = "" + }, + { + name = "ICON_SCALE", + value = 32, + description = "" + }, + { + name = "ICON_RESIZE", + value = 33, + description = "" + }, + { + name = "ICON_FILTER_POINT", + value = 34, + description = "" + }, + { + name = "ICON_FILTER_BILINEAR", + value = 35, + description = "" + }, + { + name = "ICON_CROP", + value = 36, + description = "" + }, + { + name = "ICON_CROP_ALPHA", + value = 37, + description = "" + }, + { + name = "ICON_SQUARE_TOGGLE", + value = 38, + description = "" + }, + { + name = "ICON_SYMMETRY", + value = 39, + description = "" + }, + { + name = "ICON_SYMMETRY_HORIZONTAL", + value = 40, + description = "" + }, + { + name = "ICON_SYMMETRY_VERTICAL", + value = 41, + description = "" + }, + { + name = "ICON_LENS", + value = 42, + description = "" + }, + { + name = "ICON_LENS_BIG", + value = 43, + description = "" + }, + { + name = "ICON_EYE_ON", + value = 44, + description = "" + }, + { + name = "ICON_EYE_OFF", + value = 45, + description = "" + }, + { + name = "ICON_FILTER_TOP", + value = 46, + description = "" + }, + { + name = "ICON_FILTER", + value = 47, + description = "" + }, + { + name = "ICON_TARGET_POINT", + value = 48, + description = "" + }, + { + name = "ICON_TARGET_SMALL", + value = 49, + description = "" + }, + { + name = "ICON_TARGET_BIG", + value = 50, + description = "" + }, + { + name = "ICON_TARGET_MOVE", + value = 51, + description = "" + }, + { + name = "ICON_CURSOR_MOVE", + value = 52, + description = "" + }, + { + name = "ICON_CURSOR_SCALE", + value = 53, + description = "" + }, + { + name = "ICON_CURSOR_SCALE_RIGHT", + value = 54, + description = "" + }, + { + name = "ICON_CURSOR_SCALE_LEFT", + value = 55, + description = "" + }, + { + name = "ICON_UNDO", + value = 56, + description = "" + }, + { + name = "ICON_REDO", + value = 57, + description = "" + }, + { + name = "ICON_REREDO", + value = 58, + description = "" + }, + { + name = "ICON_MUTATE", + value = 59, + description = "" + }, + { + name = "ICON_ROTATE", + value = 60, + description = "" + }, + { + name = "ICON_REPEAT", + value = 61, + description = "" + }, + { + name = "ICON_SHUFFLE", + value = 62, + description = "" + }, + { + name = "ICON_EMPTYBOX", + value = 63, + description = "" + }, + { + name = "ICON_TARGET", + value = 64, + description = "" + }, + { + name = "ICON_TARGET_SMALL_FILL", + value = 65, + description = "" + }, + { + name = "ICON_TARGET_BIG_FILL", + value = 66, + description = "" + }, + { + name = "ICON_TARGET_MOVE_FILL", + value = 67, + description = "" + }, + { + name = "ICON_CURSOR_MOVE_FILL", + value = 68, + description = "" + }, + { + name = "ICON_CURSOR_SCALE_FILL", + value = 69, + description = "" + }, + { + name = "ICON_CURSOR_SCALE_RIGHT_FILL", + value = 70, + description = "" + }, + { + name = "ICON_CURSOR_SCALE_LEFT_FILL", + value = 71, + description = "" + }, + { + name = "ICON_UNDO_FILL", + value = 72, + description = "" + }, + { + name = "ICON_REDO_FILL", + value = 73, + description = "" + }, + { + name = "ICON_REREDO_FILL", + value = 74, + description = "" + }, + { + name = "ICON_MUTATE_FILL", + value = 75, + description = "" + }, + { + name = "ICON_ROTATE_FILL", + value = 76, + description = "" + }, + { + name = "ICON_REPEAT_FILL", + value = 77, + description = "" + }, + { + name = "ICON_SHUFFLE_FILL", + value = 78, + description = "" + }, + { + name = "ICON_EMPTYBOX_SMALL", + value = 79, + description = "" + }, + { + name = "ICON_BOX", + value = 80, + description = "" + }, + { + name = "ICON_BOX_TOP", + value = 81, + description = "" + }, + { + name = "ICON_BOX_TOP_RIGHT", + value = 82, + description = "" + }, + { + name = "ICON_BOX_RIGHT", + value = 83, + description = "" + }, + { + name = "ICON_BOX_BOTTOM_RIGHT", + value = 84, + description = "" + }, + { + name = "ICON_BOX_BOTTOM", + value = 85, + description = "" + }, + { + name = "ICON_BOX_BOTTOM_LEFT", + value = 86, + description = "" + }, + { + name = "ICON_BOX_LEFT", + value = 87, + description = "" + }, + { + name = "ICON_BOX_TOP_LEFT", + value = 88, + description = "" + }, + { + name = "ICON_BOX_CENTER", + value = 89, + description = "" + }, + { + name = "ICON_BOX_CIRCLE_MASK", + value = 90, + description = "" + }, + { + name = "ICON_POT", + value = 91, + description = "" + }, + { + name = "ICON_ALPHA_MULTIPLY", + value = 92, + description = "" + }, + { + name = "ICON_ALPHA_CLEAR", + value = 93, + description = "" + }, + { + name = "ICON_DITHERING", + value = 94, + description = "" + }, + { + name = "ICON_MIPMAPS", + value = 95, + description = "" + }, + { + name = "ICON_BOX_GRID", + value = 96, + description = "" + }, + { + name = "ICON_GRID", + value = 97, + description = "" + }, + { + name = "ICON_BOX_CORNERS_SMALL", + value = 98, + description = "" + }, + { + name = "ICON_BOX_CORNERS_BIG", + value = 99, + description = "" + }, + { + name = "ICON_FOUR_BOXES", + value = 100, + description = "" + }, + { + name = "ICON_GRID_FILL", + value = 101, + description = "" + }, + { + name = "ICON_BOX_MULTISIZE", + value = 102, + description = "" + }, + { + name = "ICON_ZOOM_SMALL", + value = 103, + description = "" + }, + { + name = "ICON_ZOOM_MEDIUM", + value = 104, + description = "" + }, + { + name = "ICON_ZOOM_BIG", + value = 105, + description = "" + }, + { + name = "ICON_ZOOM_ALL", + value = 106, + description = "" + }, + { + name = "ICON_ZOOM_CENTER", + value = 107, + description = "" + }, + { + name = "ICON_BOX_DOTS_SMALL", + value = 108, + description = "" + }, + { + name = "ICON_BOX_DOTS_BIG", + value = 109, + description = "" + }, + { + name = "ICON_BOX_CONCENTRIC", + value = 110, + description = "" + }, + { + name = "ICON_BOX_GRID_BIG", + value = 111, + description = "" + }, + { + name = "ICON_OK_TICK", + value = 112, + description = "" + }, + { + name = "ICON_CROSS", + value = 113, + description = "" + }, + { + name = "ICON_ARROW_LEFT", + value = 114, + description = "" + }, + { + name = "ICON_ARROW_RIGHT", + value = 115, + description = "" + }, + { + name = "ICON_ARROW_DOWN", + value = 116, + description = "" + }, + { + name = "ICON_ARROW_UP", + value = 117, + description = "" + }, + { + name = "ICON_ARROW_LEFT_FILL", + value = 118, + description = "" + }, + { + name = "ICON_ARROW_RIGHT_FILL", + value = 119, + description = "" + }, + { + name = "ICON_ARROW_DOWN_FILL", + value = 120, + description = "" + }, + { + name = "ICON_ARROW_UP_FILL", + value = 121, + description = "" + }, + { + name = "ICON_AUDIO", + value = 122, + description = "" + }, + { + name = "ICON_FX", + value = 123, + description = "" + }, + { + name = "ICON_WAVE", + value = 124, + description = "" + }, + { + name = "ICON_WAVE_SINUS", + value = 125, + description = "" + }, + { + name = "ICON_WAVE_SQUARE", + value = 126, + description = "" + }, + { + name = "ICON_WAVE_TRIANGULAR", + value = 127, + description = "" + }, + { + name = "ICON_CROSS_SMALL", + value = 128, + description = "" + }, + { + name = "ICON_PLAYER_PREVIOUS", + value = 129, + description = "" + }, + { + name = "ICON_PLAYER_PLAY_BACK", + value = 130, + description = "" + }, + { + name = "ICON_PLAYER_PLAY", + value = 131, + description = "" + }, + { + name = "ICON_PLAYER_PAUSE", + value = 132, + description = "" + }, + { + name = "ICON_PLAYER_STOP", + value = 133, + description = "" + }, + { + name = "ICON_PLAYER_NEXT", + value = 134, + description = "" + }, + { + name = "ICON_PLAYER_RECORD", + value = 135, + description = "" + }, + { + name = "ICON_MAGNET", + value = 136, + description = "" + }, + { + name = "ICON_LOCK_CLOSE", + value = 137, + description = "" + }, + { + name = "ICON_LOCK_OPEN", + value = 138, + description = "" + }, + { + name = "ICON_CLOCK", + value = 139, + description = "" + }, + { + name = "ICON_TOOLS", + value = 140, + description = "" + }, + { + name = "ICON_GEAR", + value = 141, + description = "" + }, + { + name = "ICON_GEAR_BIG", + value = 142, + description = "" + }, + { + name = "ICON_BIN", + value = 143, + description = "" + }, + { + name = "ICON_HAND_POINTER", + value = 144, + description = "" + }, + { + name = "ICON_LASER", + value = 145, + description = "" + }, + { + name = "ICON_COIN", + value = 146, + description = "" + }, + { + name = "ICON_EXPLOSION", + value = 147, + description = "" + }, + { + name = "ICON_1UP", + value = 148, + description = "" + }, + { + name = "ICON_PLAYER", + value = 149, + description = "" + }, + { + name = "ICON_PLAYER_JUMP", + value = 150, + description = "" + }, + { + name = "ICON_KEY", + value = 151, + description = "" + }, + { + name = "ICON_DEMON", + value = 152, + description = "" + }, + { + name = "ICON_TEXT_POPUP", + value = 153, + description = "" + }, + { + name = "ICON_GEAR_EX", + value = 154, + description = "" + }, + { + name = "ICON_CRACK", + value = 155, + description = "" + }, + { + name = "ICON_CRACK_POINTS", + value = 156, + description = "" + }, + { + name = "ICON_STAR", + value = 157, + description = "" + }, + { + name = "ICON_DOOR", + value = 158, + description = "" + }, + { + name = "ICON_EXIT", + value = 159, + description = "" + }, + { + name = "ICON_MODE_2D", + value = 160, + description = "" + }, + { + name = "ICON_MODE_3D", + value = 161, + description = "" + }, + { + name = "ICON_CUBE", + value = 162, + description = "" + }, + { + name = "ICON_CUBE_FACE_TOP", + value = 163, + description = "" + }, + { + name = "ICON_CUBE_FACE_LEFT", + value = 164, + description = "" + }, + { + name = "ICON_CUBE_FACE_FRONT", + value = 165, + description = "" + }, + { + name = "ICON_CUBE_FACE_BOTTOM", + value = 166, + description = "" + }, + { + name = "ICON_CUBE_FACE_RIGHT", + value = 167, + description = "" + }, + { + name = "ICON_CUBE_FACE_BACK", + value = 168, + description = "" + }, + { + name = "ICON_CAMERA", + value = 169, + description = "" + }, + { + name = "ICON_SPECIAL", + value = 170, + description = "" + }, + { + name = "ICON_LINK_NET", + value = 171, + description = "" + }, + { + name = "ICON_LINK_BOXES", + value = 172, + description = "" + }, + { + name = "ICON_LINK_MULTI", + value = 173, + description = "" + }, + { + name = "ICON_LINK", + value = 174, + description = "" + }, + { + name = "ICON_LINK_BROKE", + value = 175, + description = "" + }, + { + name = "ICON_TEXT_NOTES", + value = 176, + description = "" + }, + { + name = "ICON_NOTEBOOK", + value = 177, + description = "" + }, + { + name = "ICON_SUITCASE", + value = 178, + description = "" + }, + { + name = "ICON_SUITCASE_ZIP", + value = 179, + description = "" + }, + { + name = "ICON_MAILBOX", + value = 180, + description = "" + }, + { + name = "ICON_MONITOR", + value = 181, + description = "" + }, + { + name = "ICON_PRINTER", + value = 182, + description = "" + }, + { + name = "ICON_PHOTO_CAMERA", + value = 183, + description = "" + }, + { + name = "ICON_PHOTO_CAMERA_FLASH", + value = 184, + description = "" + }, + { + name = "ICON_HOUSE", + value = 185, + description = "" + }, + { + name = "ICON_HEART", + value = 186, + description = "" + }, + { + name = "ICON_CORNER", + value = 187, + description = "" + }, + { + name = "ICON_VERTICAL_BARS", + value = 188, + description = "" + }, + { + name = "ICON_VERTICAL_BARS_FILL", + value = 189, + description = "" + }, + { + name = "ICON_LIFE_BARS", + value = 190, + description = "" + }, + { + name = "ICON_INFO", + value = 191, + description = "" + }, + { + name = "ICON_CROSSLINE", + value = 192, + description = "" + }, + { + name = "ICON_HELP", + value = 193, + description = "" + }, + { + name = "ICON_FILETYPE_ALPHA", + value = 194, + description = "" + }, + { + name = "ICON_FILETYPE_HOME", + value = 195, + description = "" + }, + { + name = "ICON_LAYERS_VISIBLE", + value = 196, + description = "" + }, + { + name = "ICON_LAYERS", + value = 197, + description = "" + }, + { + name = "ICON_WINDOW", + value = 198, + description = "" + }, + { + name = "ICON_HIDPI", + value = 199, + description = "" + }, + { + name = "ICON_FILETYPE_BINARY", + value = 200, + description = "" + }, + { + name = "ICON_HEX", + value = 201, + description = "" + }, + { + name = "ICON_SHIELD", + value = 202, + description = "" + }, + { + name = "ICON_FILE_NEW", + value = 203, + description = "" + }, + { + name = "ICON_FOLDER_ADD", + value = 204, + description = "" + }, + { + name = "ICON_ALARM", + value = 205, + description = "" + }, + { + name = "ICON_CPU", + value = 206, + description = "" + }, + { + name = "ICON_ROM", + value = 207, + description = "" + }, + { + name = "ICON_STEP_OVER", + value = 208, + description = "" + }, + { + name = "ICON_STEP_INTO", + value = 209, + description = "" + }, + { + name = "ICON_STEP_OUT", + value = 210, + description = "" + }, + { + name = "ICON_RESTART", + value = 211, + description = "" + }, + { + name = "ICON_BREAKPOINT_ON", + value = 212, + description = "" + }, + { + name = "ICON_BREAKPOINT_OFF", + value = 213, + description = "" + }, + { + name = "ICON_BURGER_MENU", + value = 214, + description = "" + }, + { + name = "ICON_CASE_SENSITIVE", + value = 215, + description = "" + }, + { + name = "ICON_REG_EXP", + value = 216, + description = "" + }, + { + name = "ICON_FOLDER", + value = 217, + description = "" + }, + { + name = "ICON_FILE", + value = 218, + description = "" + }, + { + name = "ICON_219", + value = 219, + description = "" + }, + { + name = "ICON_220", + value = 220, + description = "" + }, + { + name = "ICON_221", + value = 221, + description = "" + }, + { + name = "ICON_222", + value = 222, + description = "" + }, + { + name = "ICON_223", + value = 223, + description = "" + }, + { + name = "ICON_224", + value = 224, + description = "" + }, + { + name = "ICON_225", + value = 225, + description = "" + }, + { + name = "ICON_226", + value = 226, + description = "" + }, + { + name = "ICON_227", + value = 227, + description = "" + }, + { + name = "ICON_228", + value = 228, + description = "" + }, + { + name = "ICON_229", + value = 229, + description = "" + }, + { + name = "ICON_230", + value = 230, + description = "" + }, + { + name = "ICON_231", + value = 231, + description = "" + }, + { + name = "ICON_232", + value = 232, + description = "" + }, + { + name = "ICON_233", + value = 233, + description = "" + }, + { + name = "ICON_234", + value = 234, + description = "" + }, + { + name = "ICON_235", + value = 235, + description = "" + }, + { + name = "ICON_236", + value = 236, + description = "" + }, + { + name = "ICON_237", + value = 237, + description = "" + }, + { + name = "ICON_238", + value = 238, + description = "" + }, + { + name = "ICON_239", + value = 239, + description = "" + }, + { + name = "ICON_240", + value = 240, + description = "" + }, + { + name = "ICON_241", + value = 241, + description = "" + }, + { + name = "ICON_242", + value = 242, + description = "" + }, + { + name = "ICON_243", + value = 243, + description = "" + }, + { + name = "ICON_244", + value = 244, + description = "" + }, + { + name = "ICON_245", + value = 245, + description = "" + }, + { + name = "ICON_246", + value = 246, + description = "" + }, + { + name = "ICON_247", + value = 247, + description = "" + }, + { + name = "ICON_248", + value = 248, + description = "" + }, + { + name = "ICON_249", + value = 249, + description = "" + }, + { + name = "ICON_250", + value = 250, + description = "" + }, + { + name = "ICON_251", + value = 251, + description = "" + }, + { + name = "ICON_252", + value = 252, + description = "" + }, + { + name = "ICON_253", + value = 253, + description = "" + }, + { + name = "ICON_254", + value = 254, + description = "" + }, + { + name = "ICON_255", + value = 255, + description = "" + } + } + } + }, + callbacks = { + }, + functions = { + { + name = "GuiEnable", + description = "Enable gui controls (global state)", + returnType = "void" + }, + { + name = "GuiDisable", + description = "Disable gui controls (global state)", + returnType = "void" + }, + { + name = "GuiLock", + description = "Lock gui controls (global state)", + returnType = "void" + }, + { + name = "GuiUnlock", + description = "Unlock gui controls (global state)", + returnType = "void" + }, + { + name = "GuiIsLocked", + description = "Check if gui is locked (global state)", + returnType = "bool" + }, + { + name = "GuiFade", + description = "Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f", + returnType = "void", + params = { + {type = "float", name = "alpha"} + } + }, + { + name = "GuiSetState", + description = "Set gui state (global state)", + returnType = "void", + params = { + {type = "int", name = "state"} + } + }, + { + name = "GuiGetState", + description = "Get gui state (global state)", + returnType = "int" + }, + { + name = "GuiSetFont", + description = "Set gui custom font (global state)", + returnType = "void", + params = { + {type = "Font", name = "font"} + } + }, + { + name = "GuiGetFont", + description = "Get gui custom font (global state)", + returnType = "Font" + }, + { + name = "GuiSetStyle", + description = "Set one style property", + returnType = "void", + params = { + {type = "int", name = "control"}, + {type = "int", name = "property"}, + {type = "int", name = "value"} + } + }, + { + name = "GuiGetStyle", + description = "Get one style property", + returnType = "int", + params = { + {type = "int", name = "control"}, + {type = "int", name = "property"} + } + }, + { + name = "GuiWindowBox", + description = "Window Box control, shows a window that can be closed", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "title"} + } + }, + { + name = "GuiGroupBox", + description = "Group Box control with text name", + returnType = "void", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiLine", + description = "Line separator control, could contain text", + returnType = "void", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiPanel", + description = "Panel control, useful to group controls", + returnType = "void", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiTabBar", + description = "Tab Bar control, returns TAB to be closed or -1", + returnType = "int", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char **", name = "text"}, + {type = "int", name = "count"}, + {type = "int *", name = "active"} + } + }, + { + name = "GuiScrollPanel", + description = "Scroll Panel control", + returnType = "Rectangle", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "Rectangle", name = "content"}, + {type = "Vector2 *", name = "scroll"} + } + }, + { + name = "GuiLabel", + description = "Label control, shows text", + returnType = "void", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiButton", + description = "Button control, returns true when clicked", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiLabelButton", + description = "Label button control, show true when clicked", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiToggle", + description = "Toggle Button control, returns true when active", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "bool", name = "active"} + } + }, + { + name = "GuiToggleGroup", + description = "Toggle Group control, returns active toggle index", + returnType = "int", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "int", name = "active"} + } + }, + { + name = "GuiCheckBox", + description = "Check Box control, returns true when active", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "bool", name = "checked"} + } + }, + { + name = "GuiComboBox", + description = "Combo Box control, returns selected item index", + returnType = "int", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "int", name = "active"} + } + }, + { + name = "GuiDropdownBox", + description = "Dropdown Box control, returns selected item", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "int *", name = "active"}, + {type = "bool", name = "editMode"} + } + }, + { + name = "GuiSpinner", + description = "Spinner control, returns selected value", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "int *", name = "value"}, + {type = "int", name = "minValue"}, + {type = "int", name = "maxValue"}, + {type = "bool", name = "editMode"} + } + }, + { + name = "GuiValueBox", + description = "Value Box control, updates input text with numbers", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "int *", name = "value"}, + {type = "int", name = "minValue"}, + {type = "int", name = "maxValue"}, + {type = "bool", name = "editMode"} + } + }, + { + name = "GuiTextBox", + description = "Text Box control, updates input text", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "char *", name = "text"}, + {type = "int", name = "textSize"}, + {type = "bool", name = "editMode"} + } + }, + { + name = "GuiTextBoxMulti", + description = "Text Box control with multiple lines", + returnType = "bool", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "char *", name = "text"}, + {type = "int", name = "textSize"}, + {type = "bool", name = "editMode"} + } + }, + { + name = "GuiSlider", + description = "Slider control, returns selected value", + returnType = "float", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "textLeft"}, + {type = "const char *", name = "textRight"}, + {type = "float", name = "value"}, + {type = "float", name = "minValue"}, + {type = "float", name = "maxValue"} + } + }, + { + name = "GuiSliderBar", + description = "Slider Bar control, returns selected value", + returnType = "float", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "textLeft"}, + {type = "const char *", name = "textRight"}, + {type = "float", name = "value"}, + {type = "float", name = "minValue"}, + {type = "float", name = "maxValue"} + } + }, + { + name = "GuiProgressBar", + description = "Progress Bar control, shows current progress value", + returnType = "float", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "textLeft"}, + {type = "const char *", name = "textRight"}, + {type = "float", name = "value"}, + {type = "float", name = "minValue"}, + {type = "float", name = "maxValue"} + } + }, + { + name = "GuiStatusBar", + description = "Status Bar control, shows info text", + returnType = "void", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiDummyRec", + description = "Dummy control for placeholders", + returnType = "void", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiGrid", + description = "Grid control, returns mouse cell position", + returnType = "Vector2", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "float", name = "spacing"}, + {type = "int", name = "subdivs"} + } + }, + { + name = "GuiListView", + description = "List View control, returns selected list item index", + returnType = "int", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "int *", name = "scrollIndex"}, + {type = "int", name = "active"} + } + }, + { + name = "GuiListViewEx", + description = "List View with extended parameters", + returnType = "int", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char **", name = "text"}, + {type = "int", name = "count"}, + {type = "int *", name = "focus"}, + {type = "int *", name = "scrollIndex"}, + {type = "int", name = "active"} + } + }, + { + name = "GuiMessageBox", + description = "Message Box control, displays a message", + returnType = "int", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "title"}, + {type = "const char *", name = "message"}, + {type = "const char *", name = "buttons"} + } + }, + { + name = "GuiTextInputBox", + description = "Text Input Box control, ask for text, supports secret", + returnType = "int", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "title"}, + {type = "const char *", name = "message"}, + {type = "const char *", name = "buttons"}, + {type = "char *", name = "text"}, + {type = "int", name = "textMaxSize"}, + {type = "int *", name = "secretViewActive"} + } + }, + { + name = "GuiColorPicker", + description = "Color Picker control (multiple color controls)", + returnType = "Color", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "Color", name = "color"} + } + }, + { + name = "GuiColorPanel", + description = "Color Panel control", + returnType = "Color", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "Color", name = "color"} + } + }, + { + name = "GuiColorBarAlpha", + description = "Color Bar Alpha control", + returnType = "float", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "float", name = "alpha"} + } + }, + { + name = "GuiColorBarHue", + description = "Color Bar Hue control", + returnType = "float", + params = { + {type = "Rectangle", name = "bounds"}, + {type = "const char *", name = "text"}, + {type = "float", name = "value"} + } + }, + { + name = "GuiLoadStyle", + description = "Load style file over global style variable (.rgs)", + returnType = "void", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "GuiLoadStyleDefault", + description = "Load style default over global style", + returnType = "void" + }, + { + name = "GuiEnableTooltip", + description = "Enable gui tooltips (global state)", + returnType = "void" + }, + { + name = "GuiDisableTooltip", + description = "Disable gui tooltips (global state)", + returnType = "void" + }, + { + name = "GuiSetTooltip", + description = "Set tooltip string", + returnType = "void", + params = { + {type = "const char *", name = "tooltip"} + } + }, + { + name = "GuiIconText", + description = "Get text with icon id prepended (if supported)", + returnType = "const char *", + params = { + {type = "int", name = "iconId"}, + {type = "const char *", name = "text"} + } + }, + { + name = "GuiGetIcons", + description = "Get raygui icons data pointer", + returnType = "unsigned int *" + }, + { + name = "GuiLoadIcons", + description = "Load raygui icons file (.rgi) into internal icons data", + returnType = "char **", + params = { + {type = "const char *", name = "fileName"}, + {type = "bool", name = "loadIconsName"} + } + }, + { + name = "GuiDrawIcon", + description = "", + returnType = "void", + params = { + {type = "int", name = "iconId"}, + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "int", name = "pixelSize"}, + {type = "Color", name = "color"} + } + }, + { + name = "GuiSetIconScale", + description = "Set icon drawing size", + returnType = "void", + params = { + {type = "int", name = "scale"} + } + } + } +} diff --git a/raylib-api/raygui.txt b/raylib-api/raygui.txt new file mode 100644 index 0000000..70a5300 --- /dev/null +++ b/raylib-api/raygui.txt @@ -0,0 +1,874 @@ + +Defines found: 10 + +Define 001: RAYGUI_H + Name: RAYGUI_H + Type: GUARD + Value: + Description: +Define 002: RAYGUI_VERSION + Name: RAYGUI_VERSION + Type: STRING + Value: "3.2" + Description: +Define 003: RAYGUIAPI + Name: RAYGUIAPI + Type: UNKNOWN + Value: __declspec(dllexport) + Description: We are building the library as a Win32 shared library (.dll) +Define 004: RAYGUI_MALLOC(sz) + Name: RAYGUI_MALLOC(sz) + Type: MACRO + Value: malloc(sz) + Description: +Define 005: RAYGUI_CALLOC(n,sz) + Name: RAYGUI_CALLOC(n,sz) + Type: MACRO + Value: calloc(n,sz) + Description: +Define 006: RAYGUI_FREE(p) + Name: RAYGUI_FREE(p) + Type: MACRO + Value: free(p) + Description: +Define 007: RAYGUI_SUPPORT_LOG_INFO + Name: RAYGUI_SUPPORT_LOG_INFO + Type: GUARD + Value: + Description: +Define 008: RAYGUI_LOG(...) + Name: RAYGUI_LOG(...) + Type: MACRO + Value: printf(__VA_ARGS__) + Description: +Define 009: SCROLLBAR_LEFT_SIDE + Name: SCROLLBAR_LEFT_SIDE + Type: INT + Value: 0 + Description: +Define 010: SCROLLBAR_RIGHT_SIDE + Name: SCROLLBAR_RIGHT_SIDE + Type: INT + Value: 1 + Description: + +Structures found: 9 + +Struct 01: Vector2 (2 fields) + Name: Vector2 + Description: Vector2 type + Field[1]: float x + Field[2]: float y +Struct 02: Vector3 (3 fields) + Name: Vector3 + Description: Vector3 type // -- ConvertHSVtoRGB(), ConvertRGBtoHSV() + Field[1]: float x + Field[2]: float y + Field[3]: float z +Struct 03: Color (4 fields) + Name: Color + Description: Color type, RGBA (32bit) + Field[1]: unsigned char r + Field[2]: unsigned char g + Field[3]: unsigned char b + Field[4]: unsigned char a +Struct 04: Rectangle (4 fields) + Name: Rectangle + Description: Rectangle type + Field[1]: float x + Field[2]: float y + Field[3]: float width + Field[4]: float height +Struct 05: Texture2D (5 fields) + Name: Texture2D + Description: It should be redesigned to be provided by user + Field[1]: unsigned int id // OpenGL texture id + Field[2]: int width // Texture base width + Field[3]: int height // Texture base height + Field[4]: int mipmaps // Mipmap levels, 1 by default + Field[5]: int format // Data format (PixelFormat type) +Struct 06: Image (5 fields) + Name: Image + Description: Image, pixel data stored in CPU memory (RAM) + Field[1]: void * data // Image raw data + Field[2]: int width // Image base width + Field[3]: int height // Image base height + Field[4]: int mipmaps // Mipmap levels, 1 by default + Field[5]: int format // Data format (PixelFormat type) +Struct 07: GlyphInfo (5 fields) + Name: GlyphInfo + Description: GlyphInfo, font characters glyphs info + Field[1]: int value // Character value (Unicode) + Field[2]: int offsetX // Character offset X when drawing + Field[3]: int offsetY // Character offset Y when drawing + Field[4]: int advanceX // Character advance position X + Field[5]: Image image // Character image data +Struct 08: Font (6 fields) + Name: Font + Description: It should be redesigned to be provided by user + Field[1]: int baseSize // Base size (default chars height) + Field[2]: int glyphCount // Number of glyph characters + Field[3]: int glyphPadding // Padding around the glyph characters + Field[4]: Texture2D texture // Texture atlas containing the glyphs + Field[5]: Rectangle * recs // Rectangles in texture for the glyphs + Field[6]: GlyphInfo * glyphs // Glyphs info data +Struct 09: GuiStyleProp (3 fields) + Name: GuiStyleProp + Description: Style property + Field[1]: unsigned short controlId + Field[2]: unsigned short propertyId + Field[3]: unsigned int propertyValue + +Aliases found: 0 + + +Enums found: 17 + +Enum 01: GuiState (4 values) + Name: GuiState + Description: Gui control state + Value[STATE_NORMAL]: 0 + Value[STATE_FOCUSED]: 1 + Value[STATE_PRESSED]: 2 + Value[STATE_DISABLED]: 3 +Enum 02: GuiTextAlignment (3 values) + Name: GuiTextAlignment + Description: Gui control text alignment + Value[TEXT_ALIGN_LEFT]: 0 + Value[TEXT_ALIGN_CENTER]: 1 + Value[TEXT_ALIGN_RIGHT]: 2 +Enum 03: GuiControl (16 values) + Name: GuiControl + Description: Gui controls + Value[DEFAULT]: 0 + Value[LABEL]: 1 + Value[BUTTON]: 2 + Value[TOGGLE]: 3 + Value[SLIDER]: 4 + Value[PROGRESSBAR]: 5 + Value[CHECKBOX]: 6 + Value[COMBOBOX]: 7 + Value[DROPDOWNBOX]: 8 + Value[TEXTBOX]: 9 + Value[VALUEBOX]: 10 + Value[SPINNER]: 11 + Value[LISTVIEW]: 12 + Value[COLORPICKER]: 13 + Value[SCROLLBAR]: 14 + Value[STATUSBAR]: 15 +Enum 04: GuiControlProperty (16 values) + Name: GuiControlProperty + Description: Gui base properties for every control + Value[BORDER_COLOR_NORMAL]: 0 + Value[BASE_COLOR_NORMAL]: 1 + Value[TEXT_COLOR_NORMAL]: 2 + Value[BORDER_COLOR_FOCUSED]: 3 + Value[BASE_COLOR_FOCUSED]: 4 + Value[TEXT_COLOR_FOCUSED]: 5 + Value[BORDER_COLOR_PRESSED]: 6 + Value[BASE_COLOR_PRESSED]: 7 + Value[TEXT_COLOR_PRESSED]: 8 + Value[BORDER_COLOR_DISABLED]: 9 + Value[BASE_COLOR_DISABLED]: 10 + Value[TEXT_COLOR_DISABLED]: 11 + Value[BORDER_WIDTH]: 12 + Value[TEXT_PADDING]: 13 + Value[TEXT_ALIGNMENT]: 14 + Value[RESERVED]: 15 +Enum 05: GuiDefaultProperty (4 values) + Name: GuiDefaultProperty + Description: DEFAULT extended properties + Value[TEXT_SIZE]: 16 + Value[TEXT_SPACING]: 17 + Value[LINE_COLOR]: 18 + Value[BACKGROUND_COLOR]: 19 +Enum 06: GuiToggleProperty (1 values) + Name: GuiToggleProperty + Description: Toggle/ToggleGroup + Value[GROUP_PADDING]: 16 +Enum 07: GuiSliderProperty (2 values) + Name: GuiSliderProperty + Description: Slider/SliderBar + Value[SLIDER_WIDTH]: 16 + Value[SLIDER_PADDING]: 17 +Enum 08: GuiProgressBarProperty (1 values) + Name: GuiProgressBarProperty + Description: ProgressBar + Value[PROGRESS_PADDING]: 16 +Enum 09: GuiScrollBarProperty (6 values) + Name: GuiScrollBarProperty + Description: ScrollBar + Value[ARROWS_SIZE]: 16 + Value[ARROWS_VISIBLE]: 17 + Value[SCROLL_SLIDER_PADDING]: 18 + Value[SCROLL_SLIDER_SIZE]: 19 + Value[SCROLL_PADDING]: 20 + Value[SCROLL_SPEED]: 21 +Enum 10: GuiCheckBoxProperty (1 values) + Name: GuiCheckBoxProperty + Description: CheckBox + Value[CHECK_PADDING]: 16 +Enum 11: GuiComboBoxProperty (2 values) + Name: GuiComboBoxProperty + Description: ComboBox + Value[COMBO_BUTTON_WIDTH]: 16 + Value[COMBO_BUTTON_SPACING]: 17 +Enum 12: GuiDropdownBoxProperty (2 values) + Name: GuiDropdownBoxProperty + Description: DropdownBox + Value[ARROW_PADDING]: 16 + Value[DROPDOWN_ITEMS_SPACING]: 17 +Enum 13: GuiTextBoxProperty (2 values) + Name: GuiTextBoxProperty + Description: TextBox/TextBoxMulti/ValueBox/Spinner + Value[TEXT_INNER_PADDING]: 16 + Value[TEXT_LINES_SPACING]: 17 +Enum 14: GuiSpinnerProperty (2 values) + Name: GuiSpinnerProperty + Description: Spinner + Value[SPIN_BUTTON_WIDTH]: 16 + Value[SPIN_BUTTON_SPACING]: 17 +Enum 15: GuiListViewProperty (4 values) + Name: GuiListViewProperty + Description: ListView + Value[LIST_ITEMS_HEIGHT]: 16 + Value[LIST_ITEMS_SPACING]: 17 + Value[SCROLLBAR_WIDTH]: 18 + Value[SCROLLBAR_SIDE]: 19 +Enum 16: GuiColorPickerProperty (5 values) + Name: GuiColorPickerProperty + Description: ColorPicker + Value[COLOR_SELECTOR_SIZE]: 16 + Value[HUEBAR_WIDTH]: 17 + Value[HUEBAR_PADDING]: 18 + Value[HUEBAR_SELECTOR_HEIGHT]: 19 + Value[HUEBAR_SELECTOR_OVERFLOW]: 20 +Enum 17: GuiIconName (256 values) + Name: GuiIconName + Description: + Value[ICON_NONE]: 0 + Value[ICON_FOLDER_FILE_OPEN]: 1 + Value[ICON_FILE_SAVE_CLASSIC]: 2 + Value[ICON_FOLDER_OPEN]: 3 + Value[ICON_FOLDER_SAVE]: 4 + Value[ICON_FILE_OPEN]: 5 + Value[ICON_FILE_SAVE]: 6 + Value[ICON_FILE_EXPORT]: 7 + Value[ICON_FILE_ADD]: 8 + Value[ICON_FILE_DELETE]: 9 + Value[ICON_FILETYPE_TEXT]: 10 + Value[ICON_FILETYPE_AUDIO]: 11 + Value[ICON_FILETYPE_IMAGE]: 12 + Value[ICON_FILETYPE_PLAY]: 13 + Value[ICON_FILETYPE_VIDEO]: 14 + Value[ICON_FILETYPE_INFO]: 15 + Value[ICON_FILE_COPY]: 16 + Value[ICON_FILE_CUT]: 17 + Value[ICON_FILE_PASTE]: 18 + Value[ICON_CURSOR_HAND]: 19 + Value[ICON_CURSOR_POINTER]: 20 + Value[ICON_CURSOR_CLASSIC]: 21 + Value[ICON_PENCIL]: 22 + Value[ICON_PENCIL_BIG]: 23 + Value[ICON_BRUSH_CLASSIC]: 24 + Value[ICON_BRUSH_PAINTER]: 25 + Value[ICON_WATER_DROP]: 26 + Value[ICON_COLOR_PICKER]: 27 + Value[ICON_RUBBER]: 28 + Value[ICON_COLOR_BUCKET]: 29 + Value[ICON_TEXT_T]: 30 + Value[ICON_TEXT_A]: 31 + Value[ICON_SCALE]: 32 + Value[ICON_RESIZE]: 33 + Value[ICON_FILTER_POINT]: 34 + Value[ICON_FILTER_BILINEAR]: 35 + Value[ICON_CROP]: 36 + Value[ICON_CROP_ALPHA]: 37 + Value[ICON_SQUARE_TOGGLE]: 38 + Value[ICON_SYMMETRY]: 39 + Value[ICON_SYMMETRY_HORIZONTAL]: 40 + Value[ICON_SYMMETRY_VERTICAL]: 41 + Value[ICON_LENS]: 42 + Value[ICON_LENS_BIG]: 43 + Value[ICON_EYE_ON]: 44 + Value[ICON_EYE_OFF]: 45 + Value[ICON_FILTER_TOP]: 46 + Value[ICON_FILTER]: 47 + Value[ICON_TARGET_POINT]: 48 + Value[ICON_TARGET_SMALL]: 49 + Value[ICON_TARGET_BIG]: 50 + Value[ICON_TARGET_MOVE]: 51 + Value[ICON_CURSOR_MOVE]: 52 + Value[ICON_CURSOR_SCALE]: 53 + Value[ICON_CURSOR_SCALE_RIGHT]: 54 + Value[ICON_CURSOR_SCALE_LEFT]: 55 + Value[ICON_UNDO]: 56 + Value[ICON_REDO]: 57 + Value[ICON_REREDO]: 58 + Value[ICON_MUTATE]: 59 + Value[ICON_ROTATE]: 60 + Value[ICON_REPEAT]: 61 + Value[ICON_SHUFFLE]: 62 + Value[ICON_EMPTYBOX]: 63 + Value[ICON_TARGET]: 64 + Value[ICON_TARGET_SMALL_FILL]: 65 + Value[ICON_TARGET_BIG_FILL]: 66 + Value[ICON_TARGET_MOVE_FILL]: 67 + Value[ICON_CURSOR_MOVE_FILL]: 68 + Value[ICON_CURSOR_SCALE_FILL]: 69 + Value[ICON_CURSOR_SCALE_RIGHT_FILL]: 70 + Value[ICON_CURSOR_SCALE_LEFT_FILL]: 71 + Value[ICON_UNDO_FILL]: 72 + Value[ICON_REDO_FILL]: 73 + Value[ICON_REREDO_FILL]: 74 + Value[ICON_MUTATE_FILL]: 75 + Value[ICON_ROTATE_FILL]: 76 + Value[ICON_REPEAT_FILL]: 77 + Value[ICON_SHUFFLE_FILL]: 78 + Value[ICON_EMPTYBOX_SMALL]: 79 + Value[ICON_BOX]: 80 + Value[ICON_BOX_TOP]: 81 + Value[ICON_BOX_TOP_RIGHT]: 82 + Value[ICON_BOX_RIGHT]: 83 + Value[ICON_BOX_BOTTOM_RIGHT]: 84 + Value[ICON_BOX_BOTTOM]: 85 + Value[ICON_BOX_BOTTOM_LEFT]: 86 + Value[ICON_BOX_LEFT]: 87 + Value[ICON_BOX_TOP_LEFT]: 88 + Value[ICON_BOX_CENTER]: 89 + Value[ICON_BOX_CIRCLE_MASK]: 90 + Value[ICON_POT]: 91 + Value[ICON_ALPHA_MULTIPLY]: 92 + Value[ICON_ALPHA_CLEAR]: 93 + Value[ICON_DITHERING]: 94 + Value[ICON_MIPMAPS]: 95 + Value[ICON_BOX_GRID]: 96 + Value[ICON_GRID]: 97 + Value[ICON_BOX_CORNERS_SMALL]: 98 + Value[ICON_BOX_CORNERS_BIG]: 99 + Value[ICON_FOUR_BOXES]: 100 + Value[ICON_GRID_FILL]: 101 + Value[ICON_BOX_MULTISIZE]: 102 + Value[ICON_ZOOM_SMALL]: 103 + Value[ICON_ZOOM_MEDIUM]: 104 + Value[ICON_ZOOM_BIG]: 105 + Value[ICON_ZOOM_ALL]: 106 + Value[ICON_ZOOM_CENTER]: 107 + Value[ICON_BOX_DOTS_SMALL]: 108 + Value[ICON_BOX_DOTS_BIG]: 109 + Value[ICON_BOX_CONCENTRIC]: 110 + Value[ICON_BOX_GRID_BIG]: 111 + Value[ICON_OK_TICK]: 112 + Value[ICON_CROSS]: 113 + Value[ICON_ARROW_LEFT]: 114 + Value[ICON_ARROW_RIGHT]: 115 + Value[ICON_ARROW_DOWN]: 116 + Value[ICON_ARROW_UP]: 117 + Value[ICON_ARROW_LEFT_FILL]: 118 + Value[ICON_ARROW_RIGHT_FILL]: 119 + Value[ICON_ARROW_DOWN_FILL]: 120 + Value[ICON_ARROW_UP_FILL]: 121 + Value[ICON_AUDIO]: 122 + Value[ICON_FX]: 123 + Value[ICON_WAVE]: 124 + Value[ICON_WAVE_SINUS]: 125 + Value[ICON_WAVE_SQUARE]: 126 + Value[ICON_WAVE_TRIANGULAR]: 127 + Value[ICON_CROSS_SMALL]: 128 + Value[ICON_PLAYER_PREVIOUS]: 129 + Value[ICON_PLAYER_PLAY_BACK]: 130 + Value[ICON_PLAYER_PLAY]: 131 + Value[ICON_PLAYER_PAUSE]: 132 + Value[ICON_PLAYER_STOP]: 133 + Value[ICON_PLAYER_NEXT]: 134 + Value[ICON_PLAYER_RECORD]: 135 + Value[ICON_MAGNET]: 136 + Value[ICON_LOCK_CLOSE]: 137 + Value[ICON_LOCK_OPEN]: 138 + Value[ICON_CLOCK]: 139 + Value[ICON_TOOLS]: 140 + Value[ICON_GEAR]: 141 + Value[ICON_GEAR_BIG]: 142 + Value[ICON_BIN]: 143 + Value[ICON_HAND_POINTER]: 144 + Value[ICON_LASER]: 145 + Value[ICON_COIN]: 146 + Value[ICON_EXPLOSION]: 147 + Value[ICON_1UP]: 148 + Value[ICON_PLAYER]: 149 + Value[ICON_PLAYER_JUMP]: 150 + Value[ICON_KEY]: 151 + Value[ICON_DEMON]: 152 + Value[ICON_TEXT_POPUP]: 153 + Value[ICON_GEAR_EX]: 154 + Value[ICON_CRACK]: 155 + Value[ICON_CRACK_POINTS]: 156 + Value[ICON_STAR]: 157 + Value[ICON_DOOR]: 158 + Value[ICON_EXIT]: 159 + Value[ICON_MODE_2D]: 160 + Value[ICON_MODE_3D]: 161 + Value[ICON_CUBE]: 162 + Value[ICON_CUBE_FACE_TOP]: 163 + Value[ICON_CUBE_FACE_LEFT]: 164 + Value[ICON_CUBE_FACE_FRONT]: 165 + Value[ICON_CUBE_FACE_BOTTOM]: 166 + Value[ICON_CUBE_FACE_RIGHT]: 167 + Value[ICON_CUBE_FACE_BACK]: 168 + Value[ICON_CAMERA]: 169 + Value[ICON_SPECIAL]: 170 + Value[ICON_LINK_NET]: 171 + Value[ICON_LINK_BOXES]: 172 + Value[ICON_LINK_MULTI]: 173 + Value[ICON_LINK]: 174 + Value[ICON_LINK_BROKE]: 175 + Value[ICON_TEXT_NOTES]: 176 + Value[ICON_NOTEBOOK]: 177 + Value[ICON_SUITCASE]: 178 + Value[ICON_SUITCASE_ZIP]: 179 + Value[ICON_MAILBOX]: 180 + Value[ICON_MONITOR]: 181 + Value[ICON_PRINTER]: 182 + Value[ICON_PHOTO_CAMERA]: 183 + Value[ICON_PHOTO_CAMERA_FLASH]: 184 + Value[ICON_HOUSE]: 185 + Value[ICON_HEART]: 186 + Value[ICON_CORNER]: 187 + Value[ICON_VERTICAL_BARS]: 188 + Value[ICON_VERTICAL_BARS_FILL]: 189 + Value[ICON_LIFE_BARS]: 190 + Value[ICON_INFO]: 191 + Value[ICON_CROSSLINE]: 192 + Value[ICON_HELP]: 193 + Value[ICON_FILETYPE_ALPHA]: 194 + Value[ICON_FILETYPE_HOME]: 195 + Value[ICON_LAYERS_VISIBLE]: 196 + Value[ICON_LAYERS]: 197 + Value[ICON_WINDOW]: 198 + Value[ICON_HIDPI]: 199 + Value[ICON_FILETYPE_BINARY]: 200 + Value[ICON_HEX]: 201 + Value[ICON_SHIELD]: 202 + Value[ICON_FILE_NEW]: 203 + Value[ICON_FOLDER_ADD]: 204 + Value[ICON_ALARM]: 205 + Value[ICON_CPU]: 206 + Value[ICON_ROM]: 207 + Value[ICON_STEP_OVER]: 208 + Value[ICON_STEP_INTO]: 209 + Value[ICON_STEP_OUT]: 210 + Value[ICON_RESTART]: 211 + Value[ICON_BREAKPOINT_ON]: 212 + Value[ICON_BREAKPOINT_OFF]: 213 + Value[ICON_BURGER_MENU]: 214 + Value[ICON_CASE_SENSITIVE]: 215 + Value[ICON_REG_EXP]: 216 + Value[ICON_FOLDER]: 217 + Value[ICON_FILE]: 218 + Value[ICON_219]: 219 + Value[ICON_220]: 220 + Value[ICON_221]: 221 + Value[ICON_222]: 222 + Value[ICON_223]: 223 + Value[ICON_224]: 224 + Value[ICON_225]: 225 + Value[ICON_226]: 226 + Value[ICON_227]: 227 + Value[ICON_228]: 228 + Value[ICON_229]: 229 + Value[ICON_230]: 230 + Value[ICON_231]: 231 + Value[ICON_232]: 232 + Value[ICON_233]: 233 + Value[ICON_234]: 234 + Value[ICON_235]: 235 + Value[ICON_236]: 236 + Value[ICON_237]: 237 + Value[ICON_238]: 238 + Value[ICON_239]: 239 + Value[ICON_240]: 240 + Value[ICON_241]: 241 + Value[ICON_242]: 242 + Value[ICON_243]: 243 + Value[ICON_244]: 244 + Value[ICON_245]: 245 + Value[ICON_246]: 246 + Value[ICON_247]: 247 + Value[ICON_248]: 248 + Value[ICON_249]: 249 + Value[ICON_250]: 250 + Value[ICON_251]: 251 + Value[ICON_252]: 252 + Value[ICON_253]: 253 + Value[ICON_254]: 254 + Value[ICON_255]: 255 + +Callbacks found: 0 + + +Functions found: 54 + +Function 001: GuiEnable() (0 input parameters) + Name: GuiEnable + Return type: void + Description: Enable gui controls (global state) + No input parameters +Function 002: GuiDisable() (0 input parameters) + Name: GuiDisable + Return type: void + Description: Disable gui controls (global state) + No input parameters +Function 003: GuiLock() (0 input parameters) + Name: GuiLock + Return type: void + Description: Lock gui controls (global state) + No input parameters +Function 004: GuiUnlock() (0 input parameters) + Name: GuiUnlock + Return type: void + Description: Unlock gui controls (global state) + No input parameters +Function 005: GuiIsLocked() (0 input parameters) + Name: GuiIsLocked + Return type: bool + Description: Check if gui is locked (global state) + No input parameters +Function 006: GuiFade() (1 input parameters) + Name: GuiFade + Return type: void + Description: Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f + Param[1]: alpha (type: float) +Function 007: GuiSetState() (1 input parameters) + Name: GuiSetState + Return type: void + Description: Set gui state (global state) + Param[1]: state (type: int) +Function 008: GuiGetState() (0 input parameters) + Name: GuiGetState + Return type: int + Description: Get gui state (global state) + No input parameters +Function 009: GuiSetFont() (1 input parameters) + Name: GuiSetFont + Return type: void + Description: Set gui custom font (global state) + Param[1]: font (type: Font) +Function 010: GuiGetFont() (0 input parameters) + Name: GuiGetFont + Return type: Font + Description: Get gui custom font (global state) + No input parameters +Function 011: GuiSetStyle() (3 input parameters) + Name: GuiSetStyle + Return type: void + Description: Set one style property + Param[1]: control (type: int) + Param[2]: property (type: int) + Param[3]: value (type: int) +Function 012: GuiGetStyle() (2 input parameters) + Name: GuiGetStyle + Return type: int + Description: Get one style property + Param[1]: control (type: int) + Param[2]: property (type: int) +Function 013: GuiWindowBox() (2 input parameters) + Name: GuiWindowBox + Return type: bool + Description: Window Box control, shows a window that can be closed + Param[1]: bounds (type: Rectangle) + Param[2]: title (type: const char *) +Function 014: GuiGroupBox() (2 input parameters) + Name: GuiGroupBox + Return type: void + Description: Group Box control with text name + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) +Function 015: GuiLine() (2 input parameters) + Name: GuiLine + Return type: void + Description: Line separator control, could contain text + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) +Function 016: GuiPanel() (2 input parameters) + Name: GuiPanel + Return type: void + Description: Panel control, useful to group controls + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) +Function 017: GuiTabBar() (4 input parameters) + Name: GuiTabBar + Return type: int + Description: Tab Bar control, returns TAB to be closed or -1 + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char **) + Param[3]: count (type: int) + Param[4]: active (type: int *) +Function 018: GuiScrollPanel() (4 input parameters) + Name: GuiScrollPanel + Return type: Rectangle + Description: Scroll Panel control + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: content (type: Rectangle) + Param[4]: scroll (type: Vector2 *) +Function 019: GuiLabel() (2 input parameters) + Name: GuiLabel + Return type: void + Description: Label control, shows text + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) +Function 020: GuiButton() (2 input parameters) + Name: GuiButton + Return type: bool + Description: Button control, returns true when clicked + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) +Function 021: GuiLabelButton() (2 input parameters) + Name: GuiLabelButton + Return type: bool + Description: Label button control, show true when clicked + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) +Function 022: GuiToggle() (3 input parameters) + Name: GuiToggle + Return type: bool + Description: Toggle Button control, returns true when active + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: active (type: bool) +Function 023: GuiToggleGroup() (3 input parameters) + Name: GuiToggleGroup + Return type: int + Description: Toggle Group control, returns active toggle index + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: active (type: int) +Function 024: GuiCheckBox() (3 input parameters) + Name: GuiCheckBox + Return type: bool + Description: Check Box control, returns true when active + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: checked (type: bool) +Function 025: GuiComboBox() (3 input parameters) + Name: GuiComboBox + Return type: int + Description: Combo Box control, returns selected item index + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: active (type: int) +Function 026: GuiDropdownBox() (4 input parameters) + Name: GuiDropdownBox + Return type: bool + Description: Dropdown Box control, returns selected item + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: active (type: int *) + Param[4]: editMode (type: bool) +Function 027: GuiSpinner() (6 input parameters) + Name: GuiSpinner + Return type: bool + Description: Spinner control, returns selected value + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: value (type: int *) + Param[4]: minValue (type: int) + Param[5]: maxValue (type: int) + Param[6]: editMode (type: bool) +Function 028: GuiValueBox() (6 input parameters) + Name: GuiValueBox + Return type: bool + Description: Value Box control, updates input text with numbers + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: value (type: int *) + Param[4]: minValue (type: int) + Param[5]: maxValue (type: int) + Param[6]: editMode (type: bool) +Function 029: GuiTextBox() (4 input parameters) + Name: GuiTextBox + Return type: bool + Description: Text Box control, updates input text + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: char *) + Param[3]: textSize (type: int) + Param[4]: editMode (type: bool) +Function 030: GuiTextBoxMulti() (4 input parameters) + Name: GuiTextBoxMulti + Return type: bool + Description: Text Box control with multiple lines + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: char *) + Param[3]: textSize (type: int) + Param[4]: editMode (type: bool) +Function 031: GuiSlider() (6 input parameters) + Name: GuiSlider + Return type: float + Description: Slider control, returns selected value + Param[1]: bounds (type: Rectangle) + Param[2]: textLeft (type: const char *) + Param[3]: textRight (type: const char *) + Param[4]: value (type: float) + Param[5]: minValue (type: float) + Param[6]: maxValue (type: float) +Function 032: GuiSliderBar() (6 input parameters) + Name: GuiSliderBar + Return type: float + Description: Slider Bar control, returns selected value + Param[1]: bounds (type: Rectangle) + Param[2]: textLeft (type: const char *) + Param[3]: textRight (type: const char *) + Param[4]: value (type: float) + Param[5]: minValue (type: float) + Param[6]: maxValue (type: float) +Function 033: GuiProgressBar() (6 input parameters) + Name: GuiProgressBar + Return type: float + Description: Progress Bar control, shows current progress value + Param[1]: bounds (type: Rectangle) + Param[2]: textLeft (type: const char *) + Param[3]: textRight (type: const char *) + Param[4]: value (type: float) + Param[5]: minValue (type: float) + Param[6]: maxValue (type: float) +Function 034: GuiStatusBar() (2 input parameters) + Name: GuiStatusBar + Return type: void + Description: Status Bar control, shows info text + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) +Function 035: GuiDummyRec() (2 input parameters) + Name: GuiDummyRec + Return type: void + Description: Dummy control for placeholders + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) +Function 036: GuiGrid() (4 input parameters) + Name: GuiGrid + Return type: Vector2 + Description: Grid control, returns mouse cell position + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: spacing (type: float) + Param[4]: subdivs (type: int) +Function 037: GuiListView() (4 input parameters) + Name: GuiListView + Return type: int + Description: List View control, returns selected list item index + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: scrollIndex (type: int *) + Param[4]: active (type: int) +Function 038: GuiListViewEx() (6 input parameters) + Name: GuiListViewEx + Return type: int + Description: List View with extended parameters + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char **) + Param[3]: count (type: int) + Param[4]: focus (type: int *) + Param[5]: scrollIndex (type: int *) + Param[6]: active (type: int) +Function 039: GuiMessageBox() (4 input parameters) + Name: GuiMessageBox + Return type: int + Description: Message Box control, displays a message + Param[1]: bounds (type: Rectangle) + Param[2]: title (type: const char *) + Param[3]: message (type: const char *) + Param[4]: buttons (type: const char *) +Function 040: GuiTextInputBox() (7 input parameters) + Name: GuiTextInputBox + Return type: int + Description: Text Input Box control, ask for text, supports secret + Param[1]: bounds (type: Rectangle) + Param[2]: title (type: const char *) + Param[3]: message (type: const char *) + Param[4]: buttons (type: const char *) + Param[5]: text (type: char *) + Param[6]: textMaxSize (type: int) + Param[7]: secretViewActive (type: int *) +Function 041: GuiColorPicker() (3 input parameters) + Name: GuiColorPicker + Return type: Color + Description: Color Picker control (multiple color controls) + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: color (type: Color) +Function 042: GuiColorPanel() (3 input parameters) + Name: GuiColorPanel + Return type: Color + Description: Color Panel control + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: color (type: Color) +Function 043: GuiColorBarAlpha() (3 input parameters) + Name: GuiColorBarAlpha + Return type: float + Description: Color Bar Alpha control + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: alpha (type: float) +Function 044: GuiColorBarHue() (3 input parameters) + Name: GuiColorBarHue + Return type: float + Description: Color Bar Hue control + Param[1]: bounds (type: Rectangle) + Param[2]: text (type: const char *) + Param[3]: value (type: float) +Function 045: GuiLoadStyle() (1 input parameters) + Name: GuiLoadStyle + Return type: void + Description: Load style file over global style variable (.rgs) + Param[1]: fileName (type: const char *) +Function 046: GuiLoadStyleDefault() (0 input parameters) + Name: GuiLoadStyleDefault + Return type: void + Description: Load style default over global style + No input parameters +Function 047: GuiEnableTooltip() (0 input parameters) + Name: GuiEnableTooltip + Return type: void + Description: Enable gui tooltips (global state) + No input parameters +Function 048: GuiDisableTooltip() (0 input parameters) + Name: GuiDisableTooltip + Return type: void + Description: Disable gui tooltips (global state) + No input parameters +Function 049: GuiSetTooltip() (1 input parameters) + Name: GuiSetTooltip + Return type: void + Description: Set tooltip string + Param[1]: tooltip (type: const char *) +Function 050: GuiIconText() (2 input parameters) + Name: GuiIconText + Return type: const char * + Description: Get text with icon id prepended (if supported) + Param[1]: iconId (type: int) + Param[2]: text (type: const char *) +Function 051: GuiGetIcons() (0 input parameters) + Name: GuiGetIcons + Return type: unsigned int * + Description: Get raygui icons data pointer + No input parameters +Function 052: GuiLoadIcons() (2 input parameters) + Name: GuiLoadIcons + Return type: char ** + Description: Load raygui icons file (.rgi) into internal icons data + Param[1]: fileName (type: const char *) + Param[2]: loadIconsName (type: bool) +Function 053: GuiDrawIcon() (5 input parameters) + Name: GuiDrawIcon + Return type: void + Description: + Param[1]: iconId (type: int) + Param[2]: posX (type: int) + Param[3]: posY (type: int) + Param[4]: pixelSize (type: int) + Param[5]: color (type: Color) +Function 054: GuiSetIconScale() (1 input parameters) + Name: GuiSetIconScale + Return type: void + Description: Set icon drawing size + Param[1]: scale (type: int) diff --git a/raylib-api/raygui.xml b/raylib-api/raygui.xml new file mode 100644 index 0000000..1d8c365 --- /dev/null +++ b/raylib-api/raygui.xml @@ -0,0 +1,686 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/raylib-api/raylib.json b/raylib-api/raylib.json new file mode 100644 index 0000000..62d9f44 --- /dev/null +++ b/raylib-api/raylib.json @@ -0,0 +1,10933 @@ +{ + "defines": [ + { + "name": "RAYLIB_H", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RAYLIB_VERSION_MAJOR", + "type": "INT", + "value": 4, + "description": "" + }, + { + "name": "RAYLIB_VERSION_MINOR", + "type": "INT", + "value": 5, + "description": "" + }, + { + "name": "RAYLIB_VERSION_PATCH", + "type": "INT", + "value": 0, + "description": "" + }, + { + "name": "RAYLIB_VERSION", + "type": "STRING", + "value": "4.5", + "description": "" + }, + { + "name": "__declspec(x)", + "type": "MACRO", + "value": "__attribute__((x))", + "description": "" + }, + { + "name": "RLAPI", + "type": "UNKNOWN", + "value": "__declspec(dllexport)", + "description": "We are building the library as a Win32 shared library (.dll)" + }, + { + "name": "PI", + "type": "FLOAT", + "value": 3.14159265358979323846, + "description": "" + }, + { + "name": "DEG2RAD", + "type": "FLOAT_MATH", + "value": "(PI/180.0f)", + "description": "" + }, + { + "name": "RAD2DEG", + "type": "FLOAT_MATH", + "value": "(180.0f/PI)", + "description": "" + }, + { + "name": "RL_MALLOC(sz)", + "type": "MACRO", + "value": "malloc(sz)", + "description": "" + }, + { + "name": "RL_CALLOC(n,sz)", + "type": "MACRO", + "value": "calloc(n,sz)", + "description": "" + }, + { + "name": "RL_REALLOC(ptr,sz)", + "type": "MACRO", + "value": "realloc(ptr,sz)", + "description": "" + }, + { + "name": "RL_FREE(ptr)", + "type": "MACRO", + "value": "free(ptr)", + "description": "" + }, + { + "name": "CLITERAL(type)", + "type": "MACRO", + "value": "type", + "description": "" + }, + { + "name": "RL_COLOR_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_RECTANGLE_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_VECTOR2_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_VECTOR3_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_VECTOR4_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_QUATERNION_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_MATRIX_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "LIGHTGRAY", + "type": "COLOR", + "value": "CLITERAL(Color){ 200, 200, 200, 255 }", + "description": "Light Gray" + }, + { + "name": "GRAY", + "type": "COLOR", + "value": "CLITERAL(Color){ 130, 130, 130, 255 }", + "description": "Gray" + }, + { + "name": "DARKGRAY", + "type": "COLOR", + "value": "CLITERAL(Color){ 80, 80, 80, 255 }", + "description": "Dark Gray" + }, + { + "name": "YELLOW", + "type": "COLOR", + "value": "CLITERAL(Color){ 253, 249, 0, 255 }", + "description": "Yellow" + }, + { + "name": "GOLD", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 203, 0, 255 }", + "description": "Gold" + }, + { + "name": "ORANGE", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 161, 0, 255 }", + "description": "Orange" + }, + { + "name": "PINK", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 109, 194, 255 }", + "description": "Pink" + }, + { + "name": "RED", + "type": "COLOR", + "value": "CLITERAL(Color){ 230, 41, 55, 255 }", + "description": "Red" + }, + { + "name": "MAROON", + "type": "COLOR", + "value": "CLITERAL(Color){ 190, 33, 55, 255 }", + "description": "Maroon" + }, + { + "name": "GREEN", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 228, 48, 255 }", + "description": "Green" + }, + { + "name": "LIME", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 158, 47, 255 }", + "description": "Lime" + }, + { + "name": "DARKGREEN", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 117, 44, 255 }", + "description": "Dark Green" + }, + { + "name": "SKYBLUE", + "type": "COLOR", + "value": "CLITERAL(Color){ 102, 191, 255, 255 }", + "description": "Sky Blue" + }, + { + "name": "BLUE", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 121, 241, 255 }", + "description": "Blue" + }, + { + "name": "DARKBLUE", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 82, 172, 255 }", + "description": "Dark Blue" + }, + { + "name": "PURPLE", + "type": "COLOR", + "value": "CLITERAL(Color){ 200, 122, 255, 255 }", + "description": "Purple" + }, + { + "name": "VIOLET", + "type": "COLOR", + "value": "CLITERAL(Color){ 135, 60, 190, 255 }", + "description": "Violet" + }, + { + "name": "DARKPURPLE", + "type": "COLOR", + "value": "CLITERAL(Color){ 112, 31, 126, 255 }", + "description": "Dark Purple" + }, + { + "name": "BEIGE", + "type": "COLOR", + "value": "CLITERAL(Color){ 211, 176, 131, 255 }", + "description": "Beige" + }, + { + "name": "BROWN", + "type": "COLOR", + "value": "CLITERAL(Color){ 127, 106, 79, 255 }", + "description": "Brown" + }, + { + "name": "DARKBROWN", + "type": "COLOR", + "value": "CLITERAL(Color){ 76, 63, 47, 255 }", + "description": "Dark Brown" + }, + { + "name": "WHITE", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 255, 255, 255 }", + "description": "White" + }, + { + "name": "BLACK", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 0, 0, 255 }", + "description": "Black" + }, + { + "name": "BLANK", + "type": "COLOR", + "value": "CLITERAL(Color){ 0, 0, 0, 0 }", + "description": "Blank (Transparent)" + }, + { + "name": "MAGENTA", + "type": "COLOR", + "value": "CLITERAL(Color){ 255, 0, 255, 255 }", + "description": "Magenta" + }, + { + "name": "RAYWHITE", + "type": "COLOR", + "value": "CLITERAL(Color){ 245, 245, 245, 255 }", + "description": "My own White (raylib logo)" + }, + { + "name": "RL_BOOL_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "MOUSE_LEFT_BUTTON", + "type": "UNKNOWN", + "value": "MOUSE_BUTTON_LEFT", + "description": "" + }, + { + "name": "MOUSE_RIGHT_BUTTON", + "type": "UNKNOWN", + "value": "MOUSE_BUTTON_RIGHT", + "description": "" + }, + { + "name": "MOUSE_MIDDLE_BUTTON", + "type": "UNKNOWN", + "value": "MOUSE_BUTTON_MIDDLE", + "description": "" + }, + { + "name": "MATERIAL_MAP_DIFFUSE", + "type": "UNKNOWN", + "value": "MATERIAL_MAP_ALBEDO", + "description": "" + }, + { + "name": "MATERIAL_MAP_SPECULAR", + "type": "UNKNOWN", + "value": "MATERIAL_MAP_METALNESS", + "description": "" + }, + { + "name": "SHADER_LOC_MAP_DIFFUSE", + "type": "UNKNOWN", + "value": "SHADER_LOC_MAP_ALBEDO", + "description": "" + }, + { + "name": "SHADER_LOC_MAP_SPECULAR", + "type": "UNKNOWN", + "value": "SHADER_LOC_MAP_METALNESS", + "description": "" + } + ], + "structs": [ + { + "name": "Vector2", + "description": "Vector2, 2 components", + "fields": [ + { + "type": "float", + "name": "x", + "description": "Vector x component" + }, + { + "type": "float", + "name": "y", + "description": "Vector y component" + } + ] + }, + { + "name": "Vector3", + "description": "Vector3, 3 components", + "fields": [ + { + "type": "float", + "name": "x", + "description": "Vector x component" + }, + { + "type": "float", + "name": "y", + "description": "Vector y component" + }, + { + "type": "float", + "name": "z", + "description": "Vector z component" + } + ] + }, + { + "name": "Vector4", + "description": "Vector4, 4 components", + "fields": [ + { + "type": "float", + "name": "x", + "description": "Vector x component" + }, + { + "type": "float", + "name": "y", + "description": "Vector y component" + }, + { + "type": "float", + "name": "z", + "description": "Vector z component" + }, + { + "type": "float", + "name": "w", + "description": "Vector w component" + } + ] + }, + { + "name": "Matrix", + "description": "Matrix, 4x4 components, column major, OpenGL style, right-handed", + "fields": [ + { + "type": "float", + "name": "m0", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m4", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m8", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m12", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m1", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m5", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m9", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m13", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m2", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m6", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m10", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m14", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m3", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m7", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m11", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m15", + "description": "Matrix fourth row (4 components)" + } + ] + }, + { + "name": "Color", + "description": "Color, 4 components, R8G8B8A8 (32bit)", + "fields": [ + { + "type": "unsigned char", + "name": "r", + "description": "Color red value" + }, + { + "type": "unsigned char", + "name": "g", + "description": "Color green value" + }, + { + "type": "unsigned char", + "name": "b", + "description": "Color blue value" + }, + { + "type": "unsigned char", + "name": "a", + "description": "Color alpha value" + } + ] + }, + { + "name": "Rectangle", + "description": "Rectangle, 4 components", + "fields": [ + { + "type": "float", + "name": "x", + "description": "Rectangle top-left corner position x" + }, + { + "type": "float", + "name": "y", + "description": "Rectangle top-left corner position y" + }, + { + "type": "float", + "name": "width", + "description": "Rectangle width" + }, + { + "type": "float", + "name": "height", + "description": "Rectangle height" + } + ] + }, + { + "name": "Image", + "description": "Image, pixel data stored in CPU memory (RAM)", + "fields": [ + { + "type": "void *", + "name": "data", + "description": "Image raw data" + }, + { + "type": "int", + "name": "width", + "description": "Image base width" + }, + { + "type": "int", + "name": "height", + "description": "Image base height" + }, + { + "type": "int", + "name": "mipmaps", + "description": "Mipmap levels, 1 by default" + }, + { + "type": "int", + "name": "format", + "description": "Data format (PixelFormat type)" + } + ] + }, + { + "name": "Texture", + "description": "Texture, tex data stored in GPU memory (VRAM)", + "fields": [ + { + "type": "unsigned int", + "name": "id", + "description": "OpenGL texture id" + }, + { + "type": "int", + "name": "width", + "description": "Texture base width" + }, + { + "type": "int", + "name": "height", + "description": "Texture base height" + }, + { + "type": "int", + "name": "mipmaps", + "description": "Mipmap levels, 1 by default" + }, + { + "type": "int", + "name": "format", + "description": "Data format (PixelFormat type)" + } + ] + }, + { + "name": "RenderTexture", + "description": "RenderTexture, fbo for texture rendering", + "fields": [ + { + "type": "unsigned int", + "name": "id", + "description": "OpenGL framebuffer object id" + }, + { + "type": "Texture", + "name": "texture", + "description": "Color buffer attachment texture" + }, + { + "type": "Texture", + "name": "depth", + "description": "Depth buffer attachment texture" + } + ] + }, + { + "name": "NPatchInfo", + "description": "NPatchInfo, n-patch layout info", + "fields": [ + { + "type": "Rectangle", + "name": "source", + "description": "Texture source rectangle" + }, + { + "type": "int", + "name": "left", + "description": "Left border offset" + }, + { + "type": "int", + "name": "top", + "description": "Top border offset" + }, + { + "type": "int", + "name": "right", + "description": "Right border offset" + }, + { + "type": "int", + "name": "bottom", + "description": "Bottom border offset" + }, + { + "type": "int", + "name": "layout", + "description": "Layout of the n-patch: 3x3, 1x3 or 3x1" + } + ] + }, + { + "name": "GlyphInfo", + "description": "GlyphInfo, font characters glyphs info", + "fields": [ + { + "type": "int", + "name": "value", + "description": "Character value (Unicode)" + }, + { + "type": "int", + "name": "offsetX", + "description": "Character offset X when drawing" + }, + { + "type": "int", + "name": "offsetY", + "description": "Character offset Y when drawing" + }, + { + "type": "int", + "name": "advanceX", + "description": "Character advance position X" + }, + { + "type": "Image", + "name": "image", + "description": "Character image data" + } + ] + }, + { + "name": "Font", + "description": "Font, font texture and GlyphInfo array data", + "fields": [ + { + "type": "int", + "name": "baseSize", + "description": "Base size (default chars height)" + }, + { + "type": "int", + "name": "glyphCount", + "description": "Number of glyph characters" + }, + { + "type": "int", + "name": "glyphPadding", + "description": "Padding around the glyph characters" + }, + { + "type": "Texture2D", + "name": "texture", + "description": "Texture atlas containing the glyphs" + }, + { + "type": "Rectangle *", + "name": "recs", + "description": "Rectangles in texture for the glyphs" + }, + { + "type": "GlyphInfo *", + "name": "glyphs", + "description": "Glyphs info data" + } + ] + }, + { + "name": "Camera3D", + "description": "Camera, defines position/orientation in 3d space", + "fields": [ + { + "type": "Vector3", + "name": "position", + "description": "Camera position" + }, + { + "type": "Vector3", + "name": "target", + "description": "Camera target it looks-at" + }, + { + "type": "Vector3", + "name": "up", + "description": "Camera up vector (rotation over its axis)" + }, + { + "type": "float", + "name": "fovy", + "description": "Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic" + }, + { + "type": "int", + "name": "projection", + "description": "Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC" + } + ] + }, + { + "name": "Camera2D", + "description": "Camera2D, defines position/orientation in 2d space", + "fields": [ + { + "type": "Vector2", + "name": "offset", + "description": "Camera offset (displacement from target)" + }, + { + "type": "Vector2", + "name": "target", + "description": "Camera target (rotation and zoom origin)" + }, + { + "type": "float", + "name": "rotation", + "description": "Camera rotation in degrees" + }, + { + "type": "float", + "name": "zoom", + "description": "Camera zoom (scaling), should be 1.0f by default" + } + ] + }, + { + "name": "Mesh", + "description": "Mesh, vertex data and vao/vbo", + "fields": [ + { + "type": "int", + "name": "vertexCount", + "description": "Number of vertices stored in arrays" + }, + { + "type": "int", + "name": "triangleCount", + "description": "Number of triangles stored (indexed or not)" + }, + { + "type": "float *", + "name": "vertices", + "description": "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)" + }, + { + "type": "float *", + "name": "texcoords", + "description": "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)" + }, + { + "type": "float *", + "name": "texcoords2", + "description": "Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5)" + }, + { + "type": "float *", + "name": "normals", + "description": "Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)" + }, + { + "type": "float *", + "name": "tangents", + "description": "Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)" + }, + { + "type": "unsigned char *", + "name": "colors", + "description": "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)" + }, + { + "type": "unsigned short *", + "name": "indices", + "description": "Vertex indices (in case vertex data comes indexed)" + }, + { + "type": "float *", + "name": "animVertices", + "description": "Animated vertex positions (after bones transformations)" + }, + { + "type": "float *", + "name": "animNormals", + "description": "Animated normals (after bones transformations)" + }, + { + "type": "unsigned char *", + "name": "boneIds", + "description": "Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning)" + }, + { + "type": "float *", + "name": "boneWeights", + "description": "Vertex bone weight, up to 4 bones influence by vertex (skinning)" + }, + { + "type": "unsigned int", + "name": "vaoId", + "description": "OpenGL Vertex Array Object id" + }, + { + "type": "unsigned int *", + "name": "vboId", + "description": "OpenGL Vertex Buffer Objects id (default vertex data)" + } + ] + }, + { + "name": "Shader", + "description": "Shader", + "fields": [ + { + "type": "unsigned int", + "name": "id", + "description": "Shader program id" + }, + { + "type": "int *", + "name": "locs", + "description": "Shader locations array (RL_MAX_SHADER_LOCATIONS)" + } + ] + }, + { + "name": "MaterialMap", + "description": "MaterialMap", + "fields": [ + { + "type": "Texture2D", + "name": "texture", + "description": "Material map texture" + }, + { + "type": "Color", + "name": "color", + "description": "Material map color" + }, + { + "type": "float", + "name": "value", + "description": "Material map value" + } + ] + }, + { + "name": "Material", + "description": "Material, includes shader and maps", + "fields": [ + { + "type": "Shader", + "name": "shader", + "description": "Material shader" + }, + { + "type": "MaterialMap *", + "name": "maps", + "description": "Material maps array (MAX_MATERIAL_MAPS)" + }, + { + "type": "float[4]", + "name": "params", + "description": "Material generic parameters (if required)" + } + ] + }, + { + "name": "Transform", + "description": "Transform, vertex transformation data", + "fields": [ + { + "type": "Vector3", + "name": "translation", + "description": "Translation" + }, + { + "type": "Quaternion", + "name": "rotation", + "description": "Rotation" + }, + { + "type": "Vector3", + "name": "scale", + "description": "Scale" + } + ] + }, + { + "name": "BoneInfo", + "description": "Bone, skeletal animation bone", + "fields": [ + { + "type": "char[32]", + "name": "name", + "description": "Bone name" + }, + { + "type": "int", + "name": "parent", + "description": "Bone parent" + } + ] + }, + { + "name": "Model", + "description": "Model, meshes, materials and animation data", + "fields": [ + { + "type": "Matrix", + "name": "transform", + "description": "Local transform matrix" + }, + { + "type": "int", + "name": "meshCount", + "description": "Number of meshes" + }, + { + "type": "int", + "name": "materialCount", + "description": "Number of materials" + }, + { + "type": "Mesh *", + "name": "meshes", + "description": "Meshes array" + }, + { + "type": "Material *", + "name": "materials", + "description": "Materials array" + }, + { + "type": "int *", + "name": "meshMaterial", + "description": "Mesh material number" + }, + { + "type": "int", + "name": "boneCount", + "description": "Number of bones" + }, + { + "type": "BoneInfo *", + "name": "bones", + "description": "Bones information (skeleton)" + }, + { + "type": "Transform *", + "name": "bindPose", + "description": "Bones base transformation (pose)" + } + ] + }, + { + "name": "ModelAnimation", + "description": "ModelAnimation", + "fields": [ + { + "type": "int", + "name": "boneCount", + "description": "Number of bones" + }, + { + "type": "int", + "name": "frameCount", + "description": "Number of animation frames" + }, + { + "type": "BoneInfo *", + "name": "bones", + "description": "Bones information (skeleton)" + }, + { + "type": "Transform **", + "name": "framePoses", + "description": "Poses array by frame" + } + ] + }, + { + "name": "Ray", + "description": "Ray, ray for raycasting", + "fields": [ + { + "type": "Vector3", + "name": "position", + "description": "Ray position (origin)" + }, + { + "type": "Vector3", + "name": "direction", + "description": "Ray direction" + } + ] + }, + { + "name": "RayCollision", + "description": "RayCollision, ray hit information", + "fields": [ + { + "type": "bool", + "name": "hit", + "description": "Did the ray hit something?" + }, + { + "type": "float", + "name": "distance", + "description": "Distance to the nearest hit" + }, + { + "type": "Vector3", + "name": "point", + "description": "Point of the nearest hit" + }, + { + "type": "Vector3", + "name": "normal", + "description": "Surface normal of hit" + } + ] + }, + { + "name": "BoundingBox", + "description": "BoundingBox", + "fields": [ + { + "type": "Vector3", + "name": "min", + "description": "Minimum vertex box-corner" + }, + { + "type": "Vector3", + "name": "max", + "description": "Maximum vertex box-corner" + } + ] + }, + { + "name": "Wave", + "description": "Wave, audio wave data", + "fields": [ + { + "type": "unsigned int", + "name": "frameCount", + "description": "Total number of frames (considering channels)" + }, + { + "type": "unsigned int", + "name": "sampleRate", + "description": "Frequency (samples per second)" + }, + { + "type": "unsigned int", + "name": "sampleSize", + "description": "Bit depth (bits per sample): 8, 16, 32 (24 not supported)" + }, + { + "type": "unsigned int", + "name": "channels", + "description": "Number of channels (1-mono, 2-stereo, ...)" + }, + { + "type": "void *", + "name": "data", + "description": "Buffer data pointer" + } + ] + }, + { + "name": "AudioStream", + "description": "AudioStream, custom audio stream", + "fields": [ + { + "type": "rAudioBuffer *", + "name": "buffer", + "description": "Pointer to internal data used by the audio system" + }, + { + "type": "rAudioProcessor *", + "name": "processor", + "description": "Pointer to internal data processor, useful for audio effects" + }, + { + "type": "unsigned int", + "name": "sampleRate", + "description": "Frequency (samples per second)" + }, + { + "type": "unsigned int", + "name": "sampleSize", + "description": "Bit depth (bits per sample): 8, 16, 32 (24 not supported)" + }, + { + "type": "unsigned int", + "name": "channels", + "description": "Number of channels (1-mono, 2-stereo, ...)" + } + ] + }, + { + "name": "Sound", + "description": "Sound", + "fields": [ + { + "type": "AudioStream", + "name": "stream", + "description": "Audio stream" + }, + { + "type": "unsigned int", + "name": "frameCount", + "description": "Total number of frames (considering channels)" + } + ] + }, + { + "name": "Music", + "description": "Music, audio stream, anything longer than ~10 seconds should be streamed", + "fields": [ + { + "type": "AudioStream", + "name": "stream", + "description": "Audio stream" + }, + { + "type": "unsigned int", + "name": "frameCount", + "description": "Total number of frames (considering channels)" + }, + { + "type": "bool", + "name": "looping", + "description": "Music looping enable" + }, + { + "type": "int", + "name": "ctxType", + "description": "Type of music context (audio filetype)" + }, + { + "type": "void *", + "name": "ctxData", + "description": "Audio context data, depends on type" + } + ] + }, + { + "name": "VrDeviceInfo", + "description": "VrDeviceInfo, Head-Mounted-Display device parameters", + "fields": [ + { + "type": "int", + "name": "hResolution", + "description": "Horizontal resolution in pixels" + }, + { + "type": "int", + "name": "vResolution", + "description": "Vertical resolution in pixels" + }, + { + "type": "float", + "name": "hScreenSize", + "description": "Horizontal size in meters" + }, + { + "type": "float", + "name": "vScreenSize", + "description": "Vertical size in meters" + }, + { + "type": "float", + "name": "vScreenCenter", + "description": "Screen center in meters" + }, + { + "type": "float", + "name": "eyeToScreenDistance", + "description": "Distance between eye and display in meters" + }, + { + "type": "float", + "name": "lensSeparationDistance", + "description": "Lens separation distance in meters" + }, + { + "type": "float", + "name": "interpupillaryDistance", + "description": "IPD (distance between pupils) in meters" + }, + { + "type": "float[4]", + "name": "lensDistortionValues", + "description": "Lens distortion constant parameters" + }, + { + "type": "float[4]", + "name": "chromaAbCorrection", + "description": "Chromatic aberration correction parameters" + } + ] + }, + { + "name": "VrStereoConfig", + "description": "VrStereoConfig, VR stereo rendering configuration for simulator", + "fields": [ + { + "type": "Matrix[2]", + "name": "projection", + "description": "VR projection matrices (per eye)" + }, + { + "type": "Matrix[2]", + "name": "viewOffset", + "description": "VR view offset matrices (per eye)" + }, + { + "type": "float[2]", + "name": "leftLensCenter", + "description": "VR left lens center" + }, + { + "type": "float[2]", + "name": "rightLensCenter", + "description": "VR right lens center" + }, + { + "type": "float[2]", + "name": "leftScreenCenter", + "description": "VR left screen center" + }, + { + "type": "float[2]", + "name": "rightScreenCenter", + "description": "VR right screen center" + }, + { + "type": "float[2]", + "name": "scale", + "description": "VR distortion scale" + }, + { + "type": "float[2]", + "name": "scaleIn", + "description": "VR distortion scale in" + } + ] + }, + { + "name": "FilePathList", + "description": "File path list", + "fields": [ + { + "type": "unsigned int", + "name": "capacity", + "description": "Filepaths max entries" + }, + { + "type": "unsigned int", + "name": "count", + "description": "Filepaths entries count" + }, + { + "type": "char **", + "name": "paths", + "description": "Filepaths entries" + } + ] + } + ], + "aliases": [ + { + "type": "Vector4", + "name": "Quaternion", + "description": "Quaternion, 4 components (Vector4 alias)" + }, + { + "type": "Texture", + "name": "Texture2D", + "description": "Texture2D, same as Texture" + }, + { + "type": "Texture", + "name": "TextureCubemap", + "description": "TextureCubemap, same as Texture" + }, + { + "type": "RenderTexture", + "name": "RenderTexture2D", + "description": "RenderTexture2D, same as RenderTexture" + }, + { + "type": "Camera3D", + "name": "Camera", + "description": "Camera type fallback, defaults to Camera3D" + } + ], + "enums": [ + { + "name": "ConfigFlags", + "description": "System/Window config flags", + "values": [ + { + "name": "FLAG_VSYNC_HINT", + "value": 64, + "description": "Set to try enabling V-Sync on GPU" + }, + { + "name": "FLAG_FULLSCREEN_MODE", + "value": 2, + "description": "Set to run program in fullscreen" + }, + { + "name": "FLAG_WINDOW_RESIZABLE", + "value": 4, + "description": "Set to allow resizable window" + }, + { + "name": "FLAG_WINDOW_UNDECORATED", + "value": 8, + "description": "Set to disable window decoration (frame and buttons)" + }, + { + "name": "FLAG_WINDOW_HIDDEN", + "value": 128, + "description": "Set to hide window" + }, + { + "name": "FLAG_WINDOW_MINIMIZED", + "value": 512, + "description": "Set to minimize window (iconify)" + }, + { + "name": "FLAG_WINDOW_MAXIMIZED", + "value": 1024, + "description": "Set to maximize window (expanded to monitor)" + }, + { + "name": "FLAG_WINDOW_UNFOCUSED", + "value": 2048, + "description": "Set to window non focused" + }, + { + "name": "FLAG_WINDOW_TOPMOST", + "value": 4096, + "description": "Set to window always on top" + }, + { + "name": "FLAG_WINDOW_ALWAYS_RUN", + "value": 256, + "description": "Set to allow windows running while minimized" + }, + { + "name": "FLAG_WINDOW_TRANSPARENT", + "value": 16, + "description": "Set to allow transparent framebuffer" + }, + { + "name": "FLAG_WINDOW_HIGHDPI", + "value": 8192, + "description": "Set to support HighDPI" + }, + { + "name": "FLAG_WINDOW_MOUSE_PASSTHROUGH", + "value": 16384, + "description": "Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED" + }, + { + "name": "FLAG_MSAA_4X_HINT", + "value": 32, + "description": "Set to try enabling MSAA 4X" + }, + { + "name": "FLAG_INTERLACED_HINT", + "value": 65536, + "description": "Set to try enabling interlaced video format (for V3D)" + } + ] + }, + { + "name": "TraceLogLevel", + "description": "Trace log level", + "values": [ + { + "name": "LOG_ALL", + "value": 0, + "description": "Display all logs" + }, + { + "name": "LOG_TRACE", + "value": 1, + "description": "Trace logging, intended for internal use only" + }, + { + "name": "LOG_DEBUG", + "value": 2, + "description": "Debug logging, used for internal debugging, it should be disabled on release builds" + }, + { + "name": "LOG_INFO", + "value": 3, + "description": "Info logging, used for program execution info" + }, + { + "name": "LOG_WARNING", + "value": 4, + "description": "Warning logging, used on recoverable failures" + }, + { + "name": "LOG_ERROR", + "value": 5, + "description": "Error logging, used on unrecoverable failures" + }, + { + "name": "LOG_FATAL", + "value": 6, + "description": "Fatal logging, used to abort program: exit(EXIT_FAILURE)" + }, + { + "name": "LOG_NONE", + "value": 7, + "description": "Disable logging" + } + ] + }, + { + "name": "KeyboardKey", + "description": "Keyboard keys (US keyboard layout)", + "values": [ + { + "name": "KEY_NULL", + "value": 0, + "description": "Key: NULL, used for no key pressed" + }, + { + "name": "KEY_APOSTROPHE", + "value": 39, + "description": "Key: '" + }, + { + "name": "KEY_COMMA", + "value": 44, + "description": "Key: ," + }, + { + "name": "KEY_MINUS", + "value": 45, + "description": "Key: -" + }, + { + "name": "KEY_PERIOD", + "value": 46, + "description": "Key: ." + }, + { + "name": "KEY_SLASH", + "value": 47, + "description": "Key: /" + }, + { + "name": "KEY_ZERO", + "value": 48, + "description": "Key: 0" + }, + { + "name": "KEY_ONE", + "value": 49, + "description": "Key: 1" + }, + { + "name": "KEY_TWO", + "value": 50, + "description": "Key: 2" + }, + { + "name": "KEY_THREE", + "value": 51, + "description": "Key: 3" + }, + { + "name": "KEY_FOUR", + "value": 52, + "description": "Key: 4" + }, + { + "name": "KEY_FIVE", + "value": 53, + "description": "Key: 5" + }, + { + "name": "KEY_SIX", + "value": 54, + "description": "Key: 6" + }, + { + "name": "KEY_SEVEN", + "value": 55, + "description": "Key: 7" + }, + { + "name": "KEY_EIGHT", + "value": 56, + "description": "Key: 8" + }, + { + "name": "KEY_NINE", + "value": 57, + "description": "Key: 9" + }, + { + "name": "KEY_SEMICOLON", + "value": 59, + "description": "Key: ;" + }, + { + "name": "KEY_EQUAL", + "value": 61, + "description": "Key: =" + }, + { + "name": "KEY_A", + "value": 65, + "description": "Key: A | a" + }, + { + "name": "KEY_B", + "value": 66, + "description": "Key: B | b" + }, + { + "name": "KEY_C", + "value": 67, + "description": "Key: C | c" + }, + { + "name": "KEY_D", + "value": 68, + "description": "Key: D | d" + }, + { + "name": "KEY_E", + "value": 69, + "description": "Key: E | e" + }, + { + "name": "KEY_F", + "value": 70, + "description": "Key: F | f" + }, + { + "name": "KEY_G", + "value": 71, + "description": "Key: G | g" + }, + { + "name": "KEY_H", + "value": 72, + "description": "Key: H | h" + }, + { + "name": "KEY_I", + "value": 73, + "description": "Key: I | i" + }, + { + "name": "KEY_J", + "value": 74, + "description": "Key: J | j" + }, + { + "name": "KEY_K", + "value": 75, + "description": "Key: K | k" + }, + { + "name": "KEY_L", + "value": 76, + "description": "Key: L | l" + }, + { + "name": "KEY_M", + "value": 77, + "description": "Key: M | m" + }, + { + "name": "KEY_N", + "value": 78, + "description": "Key: N | n" + }, + { + "name": "KEY_O", + "value": 79, + "description": "Key: O | o" + }, + { + "name": "KEY_P", + "value": 80, + "description": "Key: P | p" + }, + { + "name": "KEY_Q", + "value": 81, + "description": "Key: Q | q" + }, + { + "name": "KEY_R", + "value": 82, + "description": "Key: R | r" + }, + { + "name": "KEY_S", + "value": 83, + "description": "Key: S | s" + }, + { + "name": "KEY_T", + "value": 84, + "description": "Key: T | t" + }, + { + "name": "KEY_U", + "value": 85, + "description": "Key: U | u" + }, + { + "name": "KEY_V", + "value": 86, + "description": "Key: V | v" + }, + { + "name": "KEY_W", + "value": 87, + "description": "Key: W | w" + }, + { + "name": "KEY_X", + "value": 88, + "description": "Key: X | x" + }, + { + "name": "KEY_Y", + "value": 89, + "description": "Key: Y | y" + }, + { + "name": "KEY_Z", + "value": 90, + "description": "Key: Z | z" + }, + { + "name": "KEY_LEFT_BRACKET", + "value": 91, + "description": "Key: [" + }, + { + "name": "KEY_BACKSLASH", + "value": 92, + "description": "Key: '\\'" + }, + { + "name": "KEY_RIGHT_BRACKET", + "value": 93, + "description": "Key: ]" + }, + { + "name": "KEY_GRAVE", + "value": 96, + "description": "Key: `" + }, + { + "name": "KEY_SPACE", + "value": 32, + "description": "Key: Space" + }, + { + "name": "KEY_ESCAPE", + "value": 256, + "description": "Key: Esc" + }, + { + "name": "KEY_ENTER", + "value": 257, + "description": "Key: Enter" + }, + { + "name": "KEY_TAB", + "value": 258, + "description": "Key: Tab" + }, + { + "name": "KEY_BACKSPACE", + "value": 259, + "description": "Key: Backspace" + }, + { + "name": "KEY_INSERT", + "value": 260, + "description": "Key: Ins" + }, + { + "name": "KEY_DELETE", + "value": 261, + "description": "Key: Del" + }, + { + "name": "KEY_RIGHT", + "value": 262, + "description": "Key: Cursor right" + }, + { + "name": "KEY_LEFT", + "value": 263, + "description": "Key: Cursor left" + }, + { + "name": "KEY_DOWN", + "value": 264, + "description": "Key: Cursor down" + }, + { + "name": "KEY_UP", + "value": 265, + "description": "Key: Cursor up" + }, + { + "name": "KEY_PAGE_UP", + "value": 266, + "description": "Key: Page up" + }, + { + "name": "KEY_PAGE_DOWN", + "value": 267, + "description": "Key: Page down" + }, + { + "name": "KEY_HOME", + "value": 268, + "description": "Key: Home" + }, + { + "name": "KEY_END", + "value": 269, + "description": "Key: End" + }, + { + "name": "KEY_CAPS_LOCK", + "value": 280, + "description": "Key: Caps lock" + }, + { + "name": "KEY_SCROLL_LOCK", + "value": 281, + "description": "Key: Scroll down" + }, + { + "name": "KEY_NUM_LOCK", + "value": 282, + "description": "Key: Num lock" + }, + { + "name": "KEY_PRINT_SCREEN", + "value": 283, + "description": "Key: Print screen" + }, + { + "name": "KEY_PAUSE", + "value": 284, + "description": "Key: Pause" + }, + { + "name": "KEY_F1", + "value": 290, + "description": "Key: F1" + }, + { + "name": "KEY_F2", + "value": 291, + "description": "Key: F2" + }, + { + "name": "KEY_F3", + "value": 292, + "description": "Key: F3" + }, + { + "name": "KEY_F4", + "value": 293, + "description": "Key: F4" + }, + { + "name": "KEY_F5", + "value": 294, + "description": "Key: F5" + }, + { + "name": "KEY_F6", + "value": 295, + "description": "Key: F6" + }, + { + "name": "KEY_F7", + "value": 296, + "description": "Key: F7" + }, + { + "name": "KEY_F8", + "value": 297, + "description": "Key: F8" + }, + { + "name": "KEY_F9", + "value": 298, + "description": "Key: F9" + }, + { + "name": "KEY_F10", + "value": 299, + "description": "Key: F10" + }, + { + "name": "KEY_F11", + "value": 300, + "description": "Key: F11" + }, + { + "name": "KEY_F12", + "value": 301, + "description": "Key: F12" + }, + { + "name": "KEY_LEFT_SHIFT", + "value": 340, + "description": "Key: Shift left" + }, + { + "name": "KEY_LEFT_CONTROL", + "value": 341, + "description": "Key: Control left" + }, + { + "name": "KEY_LEFT_ALT", + "value": 342, + "description": "Key: Alt left" + }, + { + "name": "KEY_LEFT_SUPER", + "value": 343, + "description": "Key: Super left" + }, + { + "name": "KEY_RIGHT_SHIFT", + "value": 344, + "description": "Key: Shift right" + }, + { + "name": "KEY_RIGHT_CONTROL", + "value": 345, + "description": "Key: Control right" + }, + { + "name": "KEY_RIGHT_ALT", + "value": 346, + "description": "Key: Alt right" + }, + { + "name": "KEY_RIGHT_SUPER", + "value": 347, + "description": "Key: Super right" + }, + { + "name": "KEY_KB_MENU", + "value": 348, + "description": "Key: KB menu" + }, + { + "name": "KEY_KP_0", + "value": 320, + "description": "Key: Keypad 0" + }, + { + "name": "KEY_KP_1", + "value": 321, + "description": "Key: Keypad 1" + }, + { + "name": "KEY_KP_2", + "value": 322, + "description": "Key: Keypad 2" + }, + { + "name": "KEY_KP_3", + "value": 323, + "description": "Key: Keypad 3" + }, + { + "name": "KEY_KP_4", + "value": 324, + "description": "Key: Keypad 4" + }, + { + "name": "KEY_KP_5", + "value": 325, + "description": "Key: Keypad 5" + }, + { + "name": "KEY_KP_6", + "value": 326, + "description": "Key: Keypad 6" + }, + { + "name": "KEY_KP_7", + "value": 327, + "description": "Key: Keypad 7" + }, + { + "name": "KEY_KP_8", + "value": 328, + "description": "Key: Keypad 8" + }, + { + "name": "KEY_KP_9", + "value": 329, + "description": "Key: Keypad 9" + }, + { + "name": "KEY_KP_DECIMAL", + "value": 330, + "description": "Key: Keypad ." + }, + { + "name": "KEY_KP_DIVIDE", + "value": 331, + "description": "Key: Keypad /" + }, + { + "name": "KEY_KP_MULTIPLY", + "value": 332, + "description": "Key: Keypad *" + }, + { + "name": "KEY_KP_SUBTRACT", + "value": 333, + "description": "Key: Keypad -" + }, + { + "name": "KEY_KP_ADD", + "value": 334, + "description": "Key: Keypad +" + }, + { + "name": "KEY_KP_ENTER", + "value": 335, + "description": "Key: Keypad Enter" + }, + { + "name": "KEY_KP_EQUAL", + "value": 336, + "description": "Key: Keypad =" + }, + { + "name": "KEY_BACK", + "value": 4, + "description": "Key: Android back button" + }, + { + "name": "KEY_MENU", + "value": 82, + "description": "Key: Android menu button" + }, + { + "name": "KEY_VOLUME_UP", + "value": 24, + "description": "Key: Android volume up button" + }, + { + "name": "KEY_VOLUME_DOWN", + "value": 25, + "description": "Key: Android volume down button" + } + ] + }, + { + "name": "MouseButton", + "description": "Mouse buttons", + "values": [ + { + "name": "MOUSE_BUTTON_LEFT", + "value": 0, + "description": "Mouse button left" + }, + { + "name": "MOUSE_BUTTON_RIGHT", + "value": 1, + "description": "Mouse button right" + }, + { + "name": "MOUSE_BUTTON_MIDDLE", + "value": 2, + "description": "Mouse button middle (pressed wheel)" + }, + { + "name": "MOUSE_BUTTON_SIDE", + "value": 3, + "description": "Mouse button side (advanced mouse device)" + }, + { + "name": "MOUSE_BUTTON_EXTRA", + "value": 4, + "description": "Mouse button extra (advanced mouse device)" + }, + { + "name": "MOUSE_BUTTON_FORWARD", + "value": 5, + "description": "Mouse button forward (advanced mouse device)" + }, + { + "name": "MOUSE_BUTTON_BACK", + "value": 6, + "description": "Mouse button back (advanced mouse device)" + } + ] + }, + { + "name": "MouseCursor", + "description": "Mouse cursor", + "values": [ + { + "name": "MOUSE_CURSOR_DEFAULT", + "value": 0, + "description": "Default pointer shape" + }, + { + "name": "MOUSE_CURSOR_ARROW", + "value": 1, + "description": "Arrow shape" + }, + { + "name": "MOUSE_CURSOR_IBEAM", + "value": 2, + "description": "Text writing cursor shape" + }, + { + "name": "MOUSE_CURSOR_CROSSHAIR", + "value": 3, + "description": "Cross shape" + }, + { + "name": "MOUSE_CURSOR_POINTING_HAND", + "value": 4, + "description": "Pointing hand cursor" + }, + { + "name": "MOUSE_CURSOR_RESIZE_EW", + "value": 5, + "description": "Horizontal resize/move arrow shape" + }, + { + "name": "MOUSE_CURSOR_RESIZE_NS", + "value": 6, + "description": "Vertical resize/move arrow shape" + }, + { + "name": "MOUSE_CURSOR_RESIZE_NWSE", + "value": 7, + "description": "Top-left to bottom-right diagonal resize/move arrow shape" + }, + { + "name": "MOUSE_CURSOR_RESIZE_NESW", + "value": 8, + "description": "The top-right to bottom-left diagonal resize/move arrow shape" + }, + { + "name": "MOUSE_CURSOR_RESIZE_ALL", + "value": 9, + "description": "The omnidirectional resize/move cursor shape" + }, + { + "name": "MOUSE_CURSOR_NOT_ALLOWED", + "value": 10, + "description": "The operation-not-allowed shape" + } + ] + }, + { + "name": "GamepadButton", + "description": "Gamepad buttons", + "values": [ + { + "name": "GAMEPAD_BUTTON_UNKNOWN", + "value": 0, + "description": "Unknown button, just for error checking" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_FACE_UP", + "value": 1, + "description": "Gamepad left DPAD up button" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_FACE_RIGHT", + "value": 2, + "description": "Gamepad left DPAD right button" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_FACE_DOWN", + "value": 3, + "description": "Gamepad left DPAD down button" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_FACE_LEFT", + "value": 4, + "description": "Gamepad left DPAD left button" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_FACE_UP", + "value": 5, + "description": "Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_FACE_RIGHT", + "value": 6, + "description": "Gamepad right button right (i.e. PS3: Square, Xbox: X)" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_FACE_DOWN", + "value": 7, + "description": "Gamepad right button down (i.e. PS3: Cross, Xbox: A)" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_FACE_LEFT", + "value": 8, + "description": "Gamepad right button left (i.e. PS3: Circle, Xbox: B)" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_TRIGGER_1", + "value": 9, + "description": "Gamepad top/back trigger left (first), it could be a trailing button" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_TRIGGER_2", + "value": 10, + "description": "Gamepad top/back trigger left (second), it could be a trailing button" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_TRIGGER_1", + "value": 11, + "description": "Gamepad top/back trigger right (one), it could be a trailing button" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_TRIGGER_2", + "value": 12, + "description": "Gamepad top/back trigger right (second), it could be a trailing button" + }, + { + "name": "GAMEPAD_BUTTON_MIDDLE_LEFT", + "value": 13, + "description": "Gamepad center buttons, left one (i.e. PS3: Select)" + }, + { + "name": "GAMEPAD_BUTTON_MIDDLE", + "value": 14, + "description": "Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)" + }, + { + "name": "GAMEPAD_BUTTON_MIDDLE_RIGHT", + "value": 15, + "description": "Gamepad center buttons, right one (i.e. PS3: Start)" + }, + { + "name": "GAMEPAD_BUTTON_LEFT_THUMB", + "value": 16, + "description": "Gamepad joystick pressed button left" + }, + { + "name": "GAMEPAD_BUTTON_RIGHT_THUMB", + "value": 17, + "description": "Gamepad joystick pressed button right" + } + ] + }, + { + "name": "GamepadAxis", + "description": "Gamepad axis", + "values": [ + { + "name": "GAMEPAD_AXIS_LEFT_X", + "value": 0, + "description": "Gamepad left stick X axis" + }, + { + "name": "GAMEPAD_AXIS_LEFT_Y", + "value": 1, + "description": "Gamepad left stick Y axis" + }, + { + "name": "GAMEPAD_AXIS_RIGHT_X", + "value": 2, + "description": "Gamepad right stick X axis" + }, + { + "name": "GAMEPAD_AXIS_RIGHT_Y", + "value": 3, + "description": "Gamepad right stick Y axis" + }, + { + "name": "GAMEPAD_AXIS_LEFT_TRIGGER", + "value": 4, + "description": "Gamepad back trigger left, pressure level: [1..-1]" + }, + { + "name": "GAMEPAD_AXIS_RIGHT_TRIGGER", + "value": 5, + "description": "Gamepad back trigger right, pressure level: [1..-1]" + } + ] + }, + { + "name": "MaterialMapIndex", + "description": "Material map index", + "values": [ + { + "name": "MATERIAL_MAP_ALBEDO", + "value": 0, + "description": "Albedo material (same as: MATERIAL_MAP_DIFFUSE)" + }, + { + "name": "MATERIAL_MAP_METALNESS", + "value": 1, + "description": "Metalness material (same as: MATERIAL_MAP_SPECULAR)" + }, + { + "name": "MATERIAL_MAP_NORMAL", + "value": 2, + "description": "Normal material" + }, + { + "name": "MATERIAL_MAP_ROUGHNESS", + "value": 3, + "description": "Roughness material" + }, + { + "name": "MATERIAL_MAP_OCCLUSION", + "value": 4, + "description": "Ambient occlusion material" + }, + { + "name": "MATERIAL_MAP_EMISSION", + "value": 5, + "description": "Emission material" + }, + { + "name": "MATERIAL_MAP_HEIGHT", + "value": 6, + "description": "Heightmap material" + }, + { + "name": "MATERIAL_MAP_CUBEMAP", + "value": 7, + "description": "Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + "name": "MATERIAL_MAP_IRRADIANCE", + "value": 8, + "description": "Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + "name": "MATERIAL_MAP_PREFILTER", + "value": 9, + "description": "Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + "name": "MATERIAL_MAP_BRDF", + "value": 10, + "description": "Brdf material" + } + ] + }, + { + "name": "ShaderLocationIndex", + "description": "Shader location index", + "values": [ + { + "name": "SHADER_LOC_VERTEX_POSITION", + "value": 0, + "description": "Shader location: vertex attribute: position" + }, + { + "name": "SHADER_LOC_VERTEX_TEXCOORD01", + "value": 1, + "description": "Shader location: vertex attribute: texcoord01" + }, + { + "name": "SHADER_LOC_VERTEX_TEXCOORD02", + "value": 2, + "description": "Shader location: vertex attribute: texcoord02" + }, + { + "name": "SHADER_LOC_VERTEX_NORMAL", + "value": 3, + "description": "Shader location: vertex attribute: normal" + }, + { + "name": "SHADER_LOC_VERTEX_TANGENT", + "value": 4, + "description": "Shader location: vertex attribute: tangent" + }, + { + "name": "SHADER_LOC_VERTEX_COLOR", + "value": 5, + "description": "Shader location: vertex attribute: color" + }, + { + "name": "SHADER_LOC_MATRIX_MVP", + "value": 6, + "description": "Shader location: matrix uniform: model-view-projection" + }, + { + "name": "SHADER_LOC_MATRIX_VIEW", + "value": 7, + "description": "Shader location: matrix uniform: view (camera transform)" + }, + { + "name": "SHADER_LOC_MATRIX_PROJECTION", + "value": 8, + "description": "Shader location: matrix uniform: projection" + }, + { + "name": "SHADER_LOC_MATRIX_MODEL", + "value": 9, + "description": "Shader location: matrix uniform: model (transform)" + }, + { + "name": "SHADER_LOC_MATRIX_NORMAL", + "value": 10, + "description": "Shader location: matrix uniform: normal" + }, + { + "name": "SHADER_LOC_VECTOR_VIEW", + "value": 11, + "description": "Shader location: vector uniform: view" + }, + { + "name": "SHADER_LOC_COLOR_DIFFUSE", + "value": 12, + "description": "Shader location: vector uniform: diffuse color" + }, + { + "name": "SHADER_LOC_COLOR_SPECULAR", + "value": 13, + "description": "Shader location: vector uniform: specular color" + }, + { + "name": "SHADER_LOC_COLOR_AMBIENT", + "value": 14, + "description": "Shader location: vector uniform: ambient color" + }, + { + "name": "SHADER_LOC_MAP_ALBEDO", + "value": 15, + "description": "Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)" + }, + { + "name": "SHADER_LOC_MAP_METALNESS", + "value": 16, + "description": "Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)" + }, + { + "name": "SHADER_LOC_MAP_NORMAL", + "value": 17, + "description": "Shader location: sampler2d texture: normal" + }, + { + "name": "SHADER_LOC_MAP_ROUGHNESS", + "value": 18, + "description": "Shader location: sampler2d texture: roughness" + }, + { + "name": "SHADER_LOC_MAP_OCCLUSION", + "value": 19, + "description": "Shader location: sampler2d texture: occlusion" + }, + { + "name": "SHADER_LOC_MAP_EMISSION", + "value": 20, + "description": "Shader location: sampler2d texture: emission" + }, + { + "name": "SHADER_LOC_MAP_HEIGHT", + "value": 21, + "description": "Shader location: sampler2d texture: height" + }, + { + "name": "SHADER_LOC_MAP_CUBEMAP", + "value": 22, + "description": "Shader location: samplerCube texture: cubemap" + }, + { + "name": "SHADER_LOC_MAP_IRRADIANCE", + "value": 23, + "description": "Shader location: samplerCube texture: irradiance" + }, + { + "name": "SHADER_LOC_MAP_PREFILTER", + "value": 24, + "description": "Shader location: samplerCube texture: prefilter" + }, + { + "name": "SHADER_LOC_MAP_BRDF", + "value": 25, + "description": "Shader location: sampler2d texture: brdf" + } + ] + }, + { + "name": "ShaderUniformDataType", + "description": "Shader uniform data type", + "values": [ + { + "name": "SHADER_UNIFORM_FLOAT", + "value": 0, + "description": "Shader uniform type: float" + }, + { + "name": "SHADER_UNIFORM_VEC2", + "value": 1, + "description": "Shader uniform type: vec2 (2 float)" + }, + { + "name": "SHADER_UNIFORM_VEC3", + "value": 2, + "description": "Shader uniform type: vec3 (3 float)" + }, + { + "name": "SHADER_UNIFORM_VEC4", + "value": 3, + "description": "Shader uniform type: vec4 (4 float)" + }, + { + "name": "SHADER_UNIFORM_INT", + "value": 4, + "description": "Shader uniform type: int" + }, + { + "name": "SHADER_UNIFORM_IVEC2", + "value": 5, + "description": "Shader uniform type: ivec2 (2 int)" + }, + { + "name": "SHADER_UNIFORM_IVEC3", + "value": 6, + "description": "Shader uniform type: ivec3 (3 int)" + }, + { + "name": "SHADER_UNIFORM_IVEC4", + "value": 7, + "description": "Shader uniform type: ivec4 (4 int)" + }, + { + "name": "SHADER_UNIFORM_SAMPLER2D", + "value": 8, + "description": "Shader uniform type: sampler2d" + } + ] + }, + { + "name": "ShaderAttributeDataType", + "description": "Shader attribute data types", + "values": [ + { + "name": "SHADER_ATTRIB_FLOAT", + "value": 0, + "description": "Shader attribute type: float" + }, + { + "name": "SHADER_ATTRIB_VEC2", + "value": 1, + "description": "Shader attribute type: vec2 (2 float)" + }, + { + "name": "SHADER_ATTRIB_VEC3", + "value": 2, + "description": "Shader attribute type: vec3 (3 float)" + }, + { + "name": "SHADER_ATTRIB_VEC4", + "value": 3, + "description": "Shader attribute type: vec4 (4 float)" + } + ] + }, + { + "name": "PixelFormat", + "description": "Pixel formats", + "values": [ + { + "name": "PIXELFORMAT_UNCOMPRESSED_GRAYSCALE", + "value": 1, + "description": "8 bit per pixel (no alpha)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA", + "value": 2, + "description": "8*2 bpp (2 channels)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R5G6B5", + "value": 3, + "description": "16 bpp" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R8G8B8", + "value": 4, + "description": "24 bpp" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R5G5B5A1", + "value": 5, + "description": "16 bpp (1 bit alpha)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R4G4B4A4", + "value": 6, + "description": "16 bpp (4 bit alpha)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R8G8B8A8", + "value": 7, + "description": "32 bpp" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R32", + "value": 8, + "description": "32 bpp (1 channel - float)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R32G32B32", + "value": 9, + "description": "32*3 bpp (3 channels - float)" + }, + { + "name": "PIXELFORMAT_UNCOMPRESSED_R32G32B32A32", + "value": 10, + "description": "32*4 bpp (4 channels - float)" + }, + { + "name": "PIXELFORMAT_COMPRESSED_DXT1_RGB", + "value": 11, + "description": "4 bpp (no alpha)" + }, + { + "name": "PIXELFORMAT_COMPRESSED_DXT1_RGBA", + "value": 12, + "description": "4 bpp (1 bit alpha)" + }, + { + "name": "PIXELFORMAT_COMPRESSED_DXT3_RGBA", + "value": 13, + "description": "8 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_DXT5_RGBA", + "value": 14, + "description": "8 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ETC1_RGB", + "value": 15, + "description": "4 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ETC2_RGB", + "value": 16, + "description": "4 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA", + "value": 17, + "description": "8 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_PVRT_RGB", + "value": 18, + "description": "4 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_PVRT_RGBA", + "value": 19, + "description": "4 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA", + "value": 20, + "description": "8 bpp" + }, + { + "name": "PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA", + "value": 21, + "description": "2 bpp" + } + ] + }, + { + "name": "TextureFilter", + "description": "Texture parameters: filter mode", + "values": [ + { + "name": "TEXTURE_FILTER_POINT", + "value": 0, + "description": "No filter, just pixel approximation" + }, + { + "name": "TEXTURE_FILTER_BILINEAR", + "value": 1, + "description": "Linear filtering" + }, + { + "name": "TEXTURE_FILTER_TRILINEAR", + "value": 2, + "description": "Trilinear filtering (linear with mipmaps)" + }, + { + "name": "TEXTURE_FILTER_ANISOTROPIC_4X", + "value": 3, + "description": "Anisotropic filtering 4x" + }, + { + "name": "TEXTURE_FILTER_ANISOTROPIC_8X", + "value": 4, + "description": "Anisotropic filtering 8x" + }, + { + "name": "TEXTURE_FILTER_ANISOTROPIC_16X", + "value": 5, + "description": "Anisotropic filtering 16x" + } + ] + }, + { + "name": "TextureWrap", + "description": "Texture parameters: wrap mode", + "values": [ + { + "name": "TEXTURE_WRAP_REPEAT", + "value": 0, + "description": "Repeats texture in tiled mode" + }, + { + "name": "TEXTURE_WRAP_CLAMP", + "value": 1, + "description": "Clamps texture to edge pixel in tiled mode" + }, + { + "name": "TEXTURE_WRAP_MIRROR_REPEAT", + "value": 2, + "description": "Mirrors and repeats the texture in tiled mode" + }, + { + "name": "TEXTURE_WRAP_MIRROR_CLAMP", + "value": 3, + "description": "Mirrors and clamps to border the texture in tiled mode" + } + ] + }, + { + "name": "CubemapLayout", + "description": "Cubemap layouts", + "values": [ + { + "name": "CUBEMAP_LAYOUT_AUTO_DETECT", + "value": 0, + "description": "Automatically detect layout type" + }, + { + "name": "CUBEMAP_LAYOUT_LINE_VERTICAL", + "value": 1, + "description": "Layout is defined by a vertical line with faces" + }, + { + "name": "CUBEMAP_LAYOUT_LINE_HORIZONTAL", + "value": 2, + "description": "Layout is defined by a horizontal line with faces" + }, + { + "name": "CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR", + "value": 3, + "description": "Layout is defined by a 3x4 cross with cubemap faces" + }, + { + "name": "CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE", + "value": 4, + "description": "Layout is defined by a 4x3 cross with cubemap faces" + }, + { + "name": "CUBEMAP_LAYOUT_PANORAMA", + "value": 5, + "description": "Layout is defined by a panorama image (equirrectangular map)" + } + ] + }, + { + "name": "FontType", + "description": "Font type, defines generation method", + "values": [ + { + "name": "FONT_DEFAULT", + "value": 0, + "description": "Default font generation, anti-aliased" + }, + { + "name": "FONT_BITMAP", + "value": 1, + "description": "Bitmap font generation, no anti-aliasing" + }, + { + "name": "FONT_SDF", + "value": 2, + "description": "SDF font generation, requires external shader" + } + ] + }, + { + "name": "BlendMode", + "description": "Color blending modes (pre-defined)", + "values": [ + { + "name": "BLEND_ALPHA", + "value": 0, + "description": "Blend textures considering alpha (default)" + }, + { + "name": "BLEND_ADDITIVE", + "value": 1, + "description": "Blend textures adding colors" + }, + { + "name": "BLEND_MULTIPLIED", + "value": 2, + "description": "Blend textures multiplying colors" + }, + { + "name": "BLEND_ADD_COLORS", + "value": 3, + "description": "Blend textures adding colors (alternative)" + }, + { + "name": "BLEND_SUBTRACT_COLORS", + "value": 4, + "description": "Blend textures subtracting colors (alternative)" + }, + { + "name": "BLEND_ALPHA_PREMULTIPLY", + "value": 5, + "description": "Blend premultiplied textures considering alpha" + }, + { + "name": "BLEND_CUSTOM", + "value": 6, + "description": "Blend textures using custom src/dst factors (use rlSetBlendFactors())" + }, + { + "name": "BLEND_CUSTOM_SEPARATE", + "value": 7, + "description": "Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate())" + } + ] + }, + { + "name": "Gesture", + "description": "Gesture", + "values": [ + { + "name": "GESTURE_NONE", + "value": 0, + "description": "No gesture" + }, + { + "name": "GESTURE_TAP", + "value": 1, + "description": "Tap gesture" + }, + { + "name": "GESTURE_DOUBLETAP", + "value": 2, + "description": "Double tap gesture" + }, + { + "name": "GESTURE_HOLD", + "value": 4, + "description": "Hold gesture" + }, + { + "name": "GESTURE_DRAG", + "value": 8, + "description": "Drag gesture" + }, + { + "name": "GESTURE_SWIPE_RIGHT", + "value": 16, + "description": "Swipe right gesture" + }, + { + "name": "GESTURE_SWIPE_LEFT", + "value": 32, + "description": "Swipe left gesture" + }, + { + "name": "GESTURE_SWIPE_UP", + "value": 64, + "description": "Swipe up gesture" + }, + { + "name": "GESTURE_SWIPE_DOWN", + "value": 128, + "description": "Swipe down gesture" + }, + { + "name": "GESTURE_PINCH_IN", + "value": 256, + "description": "Pinch in gesture" + }, + { + "name": "GESTURE_PINCH_OUT", + "value": 512, + "description": "Pinch out gesture" + } + ] + }, + { + "name": "CameraMode", + "description": "Camera system modes", + "values": [ + { + "name": "CAMERA_CUSTOM", + "value": 0, + "description": "Custom camera" + }, + { + "name": "CAMERA_FREE", + "value": 1, + "description": "Free camera" + }, + { + "name": "CAMERA_ORBITAL", + "value": 2, + "description": "Orbital camera" + }, + { + "name": "CAMERA_FIRST_PERSON", + "value": 3, + "description": "First person camera" + }, + { + "name": "CAMERA_THIRD_PERSON", + "value": 4, + "description": "Third person camera" + } + ] + }, + { + "name": "CameraProjection", + "description": "Camera projection", + "values": [ + { + "name": "CAMERA_PERSPECTIVE", + "value": 0, + "description": "Perspective projection" + }, + { + "name": "CAMERA_ORTHOGRAPHIC", + "value": 1, + "description": "Orthographic projection" + } + ] + }, + { + "name": "NPatchLayout", + "description": "N-patch layout", + "values": [ + { + "name": "NPATCH_NINE_PATCH", + "value": 0, + "description": "Npatch layout: 3x3 tiles" + }, + { + "name": "NPATCH_THREE_PATCH_VERTICAL", + "value": 1, + "description": "Npatch layout: 1x3 tiles" + }, + { + "name": "NPATCH_THREE_PATCH_HORIZONTAL", + "value": 2, + "description": "Npatch layout: 3x1 tiles" + } + ] + } + ], + "callbacks": [ + { + "name": "TraceLogCallback", + "description": "Logging: Redirect trace log messages", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "logLevel" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "va_list", + "name": "args" + } + ] + }, + { + "name": "LoadFileDataCallback", + "description": "FileIO: Load binary data", + "returnType": "unsigned char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "unsigned int *", + "name": "bytesRead" + } + ] + }, + { + "name": "SaveFileDataCallback", + "description": "FileIO: Save binary data", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "void *", + "name": "data" + }, + { + "type": "unsigned int", + "name": "bytesToWrite" + } + ] + }, + { + "name": "LoadFileTextCallback", + "description": "FileIO: Load text data", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "SaveFileTextCallback", + "description": "FileIO: Save text data", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "char *", + "name": "text" + } + ] + }, + { + "name": "AudioCallback", + "description": "", + "returnType": "void", + "params": [ + { + "type": "void *", + "name": "bufferData" + }, + { + "type": "unsigned int", + "name": "frames" + } + ] + } + ], + "functions": [ + { + "name": "InitWindow", + "description": "Initialize window and OpenGL context", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "const char *", + "name": "title" + } + ] + }, + { + "name": "WindowShouldClose", + "description": "Check if KEY_ESCAPE pressed or Close icon pressed", + "returnType": "bool" + }, + { + "name": "CloseWindow", + "description": "Close window and unload OpenGL context", + "returnType": "void" + }, + { + "name": "IsWindowReady", + "description": "Check if window has been initialized successfully", + "returnType": "bool" + }, + { + "name": "IsWindowFullscreen", + "description": "Check if window is currently fullscreen", + "returnType": "bool" + }, + { + "name": "IsWindowHidden", + "description": "Check if window is currently hidden (only PLATFORM_DESKTOP)", + "returnType": "bool" + }, + { + "name": "IsWindowMinimized", + "description": "Check if window is currently minimized (only PLATFORM_DESKTOP)", + "returnType": "bool" + }, + { + "name": "IsWindowMaximized", + "description": "Check if window is currently maximized (only PLATFORM_DESKTOP)", + "returnType": "bool" + }, + { + "name": "IsWindowFocused", + "description": "Check if window is currently focused (only PLATFORM_DESKTOP)", + "returnType": "bool" + }, + { + "name": "IsWindowResized", + "description": "Check if window has been resized last frame", + "returnType": "bool" + }, + { + "name": "IsWindowState", + "description": "Check if one specific window flag is enabled", + "returnType": "bool", + "params": [ + { + "type": "unsigned int", + "name": "flag" + } + ] + }, + { + "name": "SetWindowState", + "description": "Set window configuration state using flags (only PLATFORM_DESKTOP)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "flags" + } + ] + }, + { + "name": "ClearWindowState", + "description": "Clear window configuration state flags", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "flags" + } + ] + }, + { + "name": "ToggleFullscreen", + "description": "Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)", + "returnType": "void" + }, + { + "name": "MaximizeWindow", + "description": "Set window state: maximized, if resizable (only PLATFORM_DESKTOP)", + "returnType": "void" + }, + { + "name": "MinimizeWindow", + "description": "Set window state: minimized, if resizable (only PLATFORM_DESKTOP)", + "returnType": "void" + }, + { + "name": "RestoreWindow", + "description": "Set window state: not minimized/maximized (only PLATFORM_DESKTOP)", + "returnType": "void" + }, + { + "name": "SetWindowIcon", + "description": "Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP)", + "returnType": "void", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "SetWindowIcons", + "description": "Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "images" + }, + { + "type": "int", + "name": "count" + } + ] + }, + { + "name": "SetWindowTitle", + "description": "Set title for window (only PLATFORM_DESKTOP)", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "title" + } + ] + }, + { + "name": "SetWindowPosition", + "description": "Set window position on screen (only PLATFORM_DESKTOP)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + } + ] + }, + { + "name": "SetWindowMonitor", + "description": "Set monitor for the current window (fullscreen mode)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "SetWindowMinSize", + "description": "Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "SetWindowSize", + "description": "Set window dimensions", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "SetWindowOpacity", + "description": "Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "opacity" + } + ] + }, + { + "name": "GetWindowHandle", + "description": "Get native window handle", + "returnType": "void *" + }, + { + "name": "GetScreenWidth", + "description": "Get current screen width", + "returnType": "int" + }, + { + "name": "GetScreenHeight", + "description": "Get current screen height", + "returnType": "int" + }, + { + "name": "GetRenderWidth", + "description": "Get current render width (it considers HiDPI)", + "returnType": "int" + }, + { + "name": "GetRenderHeight", + "description": "Get current render height (it considers HiDPI)", + "returnType": "int" + }, + { + "name": "GetMonitorCount", + "description": "Get number of connected monitors", + "returnType": "int" + }, + { + "name": "GetCurrentMonitor", + "description": "Get current connected monitor", + "returnType": "int" + }, + { + "name": "GetMonitorPosition", + "description": "Get specified monitor position", + "returnType": "Vector2", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorWidth", + "description": "Get specified monitor width (current video mode used by monitor)", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorHeight", + "description": "Get specified monitor height (current video mode used by monitor)", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorPhysicalWidth", + "description": "Get specified monitor physical width in millimetres", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorPhysicalHeight", + "description": "Get specified monitor physical height in millimetres", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetMonitorRefreshRate", + "description": "Get specified monitor refresh rate", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "GetWindowPosition", + "description": "Get window position XY on monitor", + "returnType": "Vector2" + }, + { + "name": "GetWindowScaleDPI", + "description": "Get window scale DPI factor", + "returnType": "Vector2" + }, + { + "name": "GetMonitorName", + "description": "Get the human-readable, UTF-8 encoded name of the primary monitor", + "returnType": "const char *", + "params": [ + { + "type": "int", + "name": "monitor" + } + ] + }, + { + "name": "SetClipboardText", + "description": "Set clipboard text content", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GetClipboardText", + "description": "Get clipboard text content", + "returnType": "const char *" + }, + { + "name": "EnableEventWaiting", + "description": "Enable waiting for events on EndDrawing(), no automatic event polling", + "returnType": "void" + }, + { + "name": "DisableEventWaiting", + "description": "Disable waiting for events on EndDrawing(), automatic events polling", + "returnType": "void" + }, + { + "name": "SwapScreenBuffer", + "description": "Swap back buffer with front buffer (screen drawing)", + "returnType": "void" + }, + { + "name": "PollInputEvents", + "description": "Register all input events", + "returnType": "void" + }, + { + "name": "WaitTime", + "description": "Wait for some time (halt program execution)", + "returnType": "void", + "params": [ + { + "type": "double", + "name": "seconds" + } + ] + }, + { + "name": "ShowCursor", + "description": "Shows cursor", + "returnType": "void" + }, + { + "name": "HideCursor", + "description": "Hides cursor", + "returnType": "void" + }, + { + "name": "IsCursorHidden", + "description": "Check if cursor is not visible", + "returnType": "bool" + }, + { + "name": "EnableCursor", + "description": "Enables cursor (unlock cursor)", + "returnType": "void" + }, + { + "name": "DisableCursor", + "description": "Disables cursor (lock cursor)", + "returnType": "void" + }, + { + "name": "IsCursorOnScreen", + "description": "Check if cursor is on the screen", + "returnType": "bool" + }, + { + "name": "ClearBackground", + "description": "Set background color (framebuffer clear color)", + "returnType": "void", + "params": [ + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "BeginDrawing", + "description": "Setup canvas (framebuffer) to start drawing", + "returnType": "void" + }, + { + "name": "EndDrawing", + "description": "End canvas drawing and swap buffers (double buffering)", + "returnType": "void" + }, + { + "name": "BeginMode2D", + "description": "Begin 2D mode with custom camera (2D)", + "returnType": "void", + "params": [ + { + "type": "Camera2D", + "name": "camera" + } + ] + }, + { + "name": "EndMode2D", + "description": "Ends 2D mode with custom camera", + "returnType": "void" + }, + { + "name": "BeginMode3D", + "description": "Begin 3D mode with custom camera (3D)", + "returnType": "void", + "params": [ + { + "type": "Camera3D", + "name": "camera" + } + ] + }, + { + "name": "EndMode3D", + "description": "Ends 3D mode and returns to default 2D orthographic mode", + "returnType": "void" + }, + { + "name": "BeginTextureMode", + "description": "Begin drawing to render texture", + "returnType": "void", + "params": [ + { + "type": "RenderTexture2D", + "name": "target" + } + ] + }, + { + "name": "EndTextureMode", + "description": "Ends drawing to render texture", + "returnType": "void" + }, + { + "name": "BeginShaderMode", + "description": "Begin custom shader drawing", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + } + ] + }, + { + "name": "EndShaderMode", + "description": "End custom shader drawing (use default shader)", + "returnType": "void" + }, + { + "name": "BeginBlendMode", + "description": "Begin blending mode (alpha, additive, multiplied, subtract, custom)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "mode" + } + ] + }, + { + "name": "EndBlendMode", + "description": "End blending mode (reset to default: alpha blending)", + "returnType": "void" + }, + { + "name": "BeginScissorMode", + "description": "Begin scissor mode (define screen area for following drawing)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "EndScissorMode", + "description": "End scissor mode", + "returnType": "void" + }, + { + "name": "BeginVrStereoMode", + "description": "Begin stereo rendering (requires VR simulator)", + "returnType": "void", + "params": [ + { + "type": "VrStereoConfig", + "name": "config" + } + ] + }, + { + "name": "EndVrStereoMode", + "description": "End stereo rendering (requires VR simulator)", + "returnType": "void" + }, + { + "name": "LoadVrStereoConfig", + "description": "Load VR stereo config for VR simulator device parameters", + "returnType": "VrStereoConfig", + "params": [ + { + "type": "VrDeviceInfo", + "name": "device" + } + ] + }, + { + "name": "UnloadVrStereoConfig", + "description": "Unload VR stereo config", + "returnType": "void", + "params": [ + { + "type": "VrStereoConfig", + "name": "config" + } + ] + }, + { + "name": "LoadShader", + "description": "Load shader from files and bind default locations", + "returnType": "Shader", + "params": [ + { + "type": "const char *", + "name": "vsFileName" + }, + { + "type": "const char *", + "name": "fsFileName" + } + ] + }, + { + "name": "LoadShaderFromMemory", + "description": "Load shader from code strings and bind default locations", + "returnType": "Shader", + "params": [ + { + "type": "const char *", + "name": "vsCode" + }, + { + "type": "const char *", + "name": "fsCode" + } + ] + }, + { + "name": "IsShaderReady", + "description": "Check if a shader is ready", + "returnType": "bool", + "params": [ + { + "type": "Shader", + "name": "shader" + } + ] + }, + { + "name": "GetShaderLocation", + "description": "Get shader uniform location", + "returnType": "int", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "const char *", + "name": "uniformName" + } + ] + }, + { + "name": "GetShaderLocationAttrib", + "description": "Get shader attribute location", + "returnType": "int", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "const char *", + "name": "attribName" + } + ] + }, + { + "name": "SetShaderValue", + "description": "Set shader uniform value", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "int", + "name": "locIndex" + }, + { + "type": "const void *", + "name": "value" + }, + { + "type": "int", + "name": "uniformType" + } + ] + }, + { + "name": "SetShaderValueV", + "description": "Set shader uniform value vector", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "int", + "name": "locIndex" + }, + { + "type": "const void *", + "name": "value" + }, + { + "type": "int", + "name": "uniformType" + }, + { + "type": "int", + "name": "count" + } + ] + }, + { + "name": "SetShaderValueMatrix", + "description": "Set shader uniform value (matrix 4x4)", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "int", + "name": "locIndex" + }, + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "SetShaderValueTexture", + "description": "Set shader uniform value for texture (sampler2d)", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + }, + { + "type": "int", + "name": "locIndex" + }, + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "UnloadShader", + "description": "Unload shader from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "Shader", + "name": "shader" + } + ] + }, + { + "name": "GetMouseRay", + "description": "Get a ray trace from mouse position", + "returnType": "Ray", + "params": [ + { + "type": "Vector2", + "name": "mousePosition" + }, + { + "type": "Camera", + "name": "camera" + } + ] + }, + { + "name": "GetCameraMatrix", + "description": "Get camera transform matrix (view matrix)", + "returnType": "Matrix", + "params": [ + { + "type": "Camera", + "name": "camera" + } + ] + }, + { + "name": "GetCameraMatrix2D", + "description": "Get camera 2d transform matrix", + "returnType": "Matrix", + "params": [ + { + "type": "Camera2D", + "name": "camera" + } + ] + }, + { + "name": "GetWorldToScreen", + "description": "Get the screen space position for a 3d world space position", + "returnType": "Vector2", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Camera", + "name": "camera" + } + ] + }, + { + "name": "GetScreenToWorld2D", + "description": "Get the world space position for a 2d camera screen space position", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Camera2D", + "name": "camera" + } + ] + }, + { + "name": "GetWorldToScreenEx", + "description": "Get size position for a 3d world space position", + "returnType": "Vector2", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Camera", + "name": "camera" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "GetWorldToScreen2D", + "description": "Get the screen space position for a 2d camera world space position", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Camera2D", + "name": "camera" + } + ] + }, + { + "name": "SetTargetFPS", + "description": "Set target FPS (maximum)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "fps" + } + ] + }, + { + "name": "GetFPS", + "description": "Get current FPS", + "returnType": "int" + }, + { + "name": "GetFrameTime", + "description": "Get time in seconds for last frame drawn (delta time)", + "returnType": "float" + }, + { + "name": "GetTime", + "description": "Get elapsed time in seconds since InitWindow()", + "returnType": "double" + }, + { + "name": "GetRandomValue", + "description": "Get a random value between min and max (both included)", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "min" + }, + { + "type": "int", + "name": "max" + } + ] + }, + { + "name": "SetRandomSeed", + "description": "Set the seed for the random number generator", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "seed" + } + ] + }, + { + "name": "TakeScreenshot", + "description": "Takes a screenshot of current screen (filename extension defines format)", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "SetConfigFlags", + "description": "Setup init configuration flags (view FLAGS)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "flags" + } + ] + }, + { + "name": "TraceLog", + "description": "Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "logLevel" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "...", + "name": "args" + } + ] + }, + { + "name": "SetTraceLogLevel", + "description": "Set the current threshold (minimum) log level", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "logLevel" + } + ] + }, + { + "name": "MemAlloc", + "description": "Internal memory allocator", + "returnType": "void *", + "params": [ + { + "type": "unsigned int", + "name": "size" + } + ] + }, + { + "name": "MemRealloc", + "description": "Internal memory reallocator", + "returnType": "void *", + "params": [ + { + "type": "void *", + "name": "ptr" + }, + { + "type": "unsigned int", + "name": "size" + } + ] + }, + { + "name": "MemFree", + "description": "Internal memory free", + "returnType": "void", + "params": [ + { + "type": "void *", + "name": "ptr" + } + ] + }, + { + "name": "OpenURL", + "description": "Open URL with default system browser (if available)", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "url" + } + ] + }, + { + "name": "SetTraceLogCallback", + "description": "Set custom trace log", + "returnType": "void", + "params": [ + { + "type": "TraceLogCallback", + "name": "callback" + } + ] + }, + { + "name": "SetLoadFileDataCallback", + "description": "Set custom file binary data loader", + "returnType": "void", + "params": [ + { + "type": "LoadFileDataCallback", + "name": "callback" + } + ] + }, + { + "name": "SetSaveFileDataCallback", + "description": "Set custom file binary data saver", + "returnType": "void", + "params": [ + { + "type": "SaveFileDataCallback", + "name": "callback" + } + ] + }, + { + "name": "SetLoadFileTextCallback", + "description": "Set custom file text data loader", + "returnType": "void", + "params": [ + { + "type": "LoadFileTextCallback", + "name": "callback" + } + ] + }, + { + "name": "SetSaveFileTextCallback", + "description": "Set custom file text data saver", + "returnType": "void", + "params": [ + { + "type": "SaveFileTextCallback", + "name": "callback" + } + ] + }, + { + "name": "LoadFileData", + "description": "Load file data as byte array (read)", + "returnType": "unsigned char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "unsigned int *", + "name": "bytesRead" + } + ] + }, + { + "name": "UnloadFileData", + "description": "Unload file data allocated by LoadFileData()", + "returnType": "void", + "params": [ + { + "type": "unsigned char *", + "name": "data" + } + ] + }, + { + "name": "SaveFileData", + "description": "Save data to file from byte array (write), returns true on success", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "void *", + "name": "data" + }, + { + "type": "unsigned int", + "name": "bytesToWrite" + } + ] + }, + { + "name": "ExportDataAsCode", + "description": "Export data to code (.h), returns true on success", + "returnType": "bool", + "params": [ + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "unsigned int", + "name": "size" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadFileText", + "description": "Load text data from file (read), returns a '\\0' terminated string", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "UnloadFileText", + "description": "Unload file text data allocated by LoadFileText()", + "returnType": "void", + "params": [ + { + "type": "char *", + "name": "text" + } + ] + }, + { + "name": "SaveFileText", + "description": "Save text data to file (write), string must be '\\0' terminated, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "char *", + "name": "text" + } + ] + }, + { + "name": "FileExists", + "description": "Check if file exists", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "DirectoryExists", + "description": "Check if a directory path exists", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "IsFileExtension", + "description": "Check file extension (including point: .png, .wav)", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "const char *", + "name": "ext" + } + ] + }, + { + "name": "GetFileLength", + "description": "Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GetFileExtension", + "description": "Get pointer to extension for a filename string (includes dot: '.png')", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GetFileName", + "description": "Get pointer to filename for a path string", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "filePath" + } + ] + }, + { + "name": "GetFileNameWithoutExt", + "description": "Get filename string without extension (uses static string)", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "filePath" + } + ] + }, + { + "name": "GetDirectoryPath", + "description": "Get full path for a given fileName with path (uses static string)", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "filePath" + } + ] + }, + { + "name": "GetPrevDirectoryPath", + "description": "Get previous directory path for a given path (uses static string)", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "GetWorkingDirectory", + "description": "Get current working directory (uses static string)", + "returnType": "const char *" + }, + { + "name": "GetApplicationDirectory", + "description": "Get the directory if the running application (uses static string)", + "returnType": "const char *" + }, + { + "name": "ChangeDirectory", + "description": "Change working directory, return true on success", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "dir" + } + ] + }, + { + "name": "IsPathFile", + "description": "Check if a given path is a file or a directory", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "path" + } + ] + }, + { + "name": "LoadDirectoryFiles", + "description": "Load directory filepaths", + "returnType": "FilePathList", + "params": [ + { + "type": "const char *", + "name": "dirPath" + } + ] + }, + { + "name": "LoadDirectoryFilesEx", + "description": "Load directory filepaths with extension filtering and recursive directory scan", + "returnType": "FilePathList", + "params": [ + { + "type": "const char *", + "name": "basePath" + }, + { + "type": "const char *", + "name": "filter" + }, + { + "type": "bool", + "name": "scanSubdirs" + } + ] + }, + { + "name": "UnloadDirectoryFiles", + "description": "Unload filepaths", + "returnType": "void", + "params": [ + { + "type": "FilePathList", + "name": "files" + } + ] + }, + { + "name": "IsFileDropped", + "description": "Check if a file has been dropped into window", + "returnType": "bool" + }, + { + "name": "LoadDroppedFiles", + "description": "Load dropped filepaths", + "returnType": "FilePathList" + }, + { + "name": "UnloadDroppedFiles", + "description": "Unload dropped filepaths", + "returnType": "void", + "params": [ + { + "type": "FilePathList", + "name": "files" + } + ] + }, + { + "name": "GetFileModTime", + "description": "Get file modification time (last write time)", + "returnType": "long", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "CompressData", + "description": "Compress data (DEFLATE algorithm), memory must be MemFree()", + "returnType": "unsigned char *", + "params": [ + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int *", + "name": "compDataSize" + } + ] + }, + { + "name": "DecompressData", + "description": "Decompress data (DEFLATE algorithm), memory must be MemFree()", + "returnType": "unsigned char *", + "params": [ + { + "type": "const unsigned char *", + "name": "compData" + }, + { + "type": "int", + "name": "compDataSize" + }, + { + "type": "int *", + "name": "dataSize" + } + ] + }, + { + "name": "EncodeDataBase64", + "description": "Encode data to Base64 string, memory must be MemFree()", + "returnType": "char *", + "params": [ + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int *", + "name": "outputSize" + } + ] + }, + { + "name": "DecodeDataBase64", + "description": "Decode Base64 string data, memory must be MemFree()", + "returnType": "unsigned char *", + "params": [ + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "int *", + "name": "outputSize" + } + ] + }, + { + "name": "IsKeyPressed", + "description": "Check if a key has been pressed once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "IsKeyDown", + "description": "Check if a key is being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "IsKeyReleased", + "description": "Check if a key has been released once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "IsKeyUp", + "description": "Check if a key is NOT being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "SetExitKey", + "description": "Set a custom key to exit program (default is ESC)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "key" + } + ] + }, + { + "name": "GetKeyPressed", + "description": "Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty", + "returnType": "int" + }, + { + "name": "GetCharPressed", + "description": "Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty", + "returnType": "int" + }, + { + "name": "IsGamepadAvailable", + "description": "Check if a gamepad is available", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + } + ] + }, + { + "name": "GetGamepadName", + "description": "Get gamepad internal name id", + "returnType": "const char *", + "params": [ + { + "type": "int", + "name": "gamepad" + } + ] + }, + { + "name": "IsGamepadButtonPressed", + "description": "Check if a gamepad button has been pressed once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsGamepadButtonDown", + "description": "Check if a gamepad button is being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsGamepadButtonReleased", + "description": "Check if a gamepad button has been released once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsGamepadButtonUp", + "description": "Check if a gamepad button is NOT being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "GetGamepadButtonPressed", + "description": "Get the last gamepad button pressed", + "returnType": "int" + }, + { + "name": "GetGamepadAxisCount", + "description": "Get gamepad axis count for a gamepad", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "gamepad" + } + ] + }, + { + "name": "GetGamepadAxisMovement", + "description": "Get axis movement value for a gamepad axis", + "returnType": "float", + "params": [ + { + "type": "int", + "name": "gamepad" + }, + { + "type": "int", + "name": "axis" + } + ] + }, + { + "name": "SetGamepadMappings", + "description": "Set internal gamepad mappings (SDL_GameControllerDB)", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "mappings" + } + ] + }, + { + "name": "IsMouseButtonPressed", + "description": "Check if a mouse button has been pressed once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsMouseButtonDown", + "description": "Check if a mouse button is being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsMouseButtonReleased", + "description": "Check if a mouse button has been released once", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "IsMouseButtonUp", + "description": "Check if a mouse button is NOT being pressed", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "button" + } + ] + }, + { + "name": "GetMouseX", + "description": "Get mouse position X", + "returnType": "int" + }, + { + "name": "GetMouseY", + "description": "Get mouse position Y", + "returnType": "int" + }, + { + "name": "GetMousePosition", + "description": "Get mouse position XY", + "returnType": "Vector2" + }, + { + "name": "GetMouseDelta", + "description": "Get mouse delta between frames", + "returnType": "Vector2" + }, + { + "name": "SetMousePosition", + "description": "Set mouse position XY", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + } + ] + }, + { + "name": "SetMouseOffset", + "description": "Set mouse offset", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "offsetX" + }, + { + "type": "int", + "name": "offsetY" + } + ] + }, + { + "name": "SetMouseScale", + "description": "Set mouse scaling", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "scaleX" + }, + { + "type": "float", + "name": "scaleY" + } + ] + }, + { + "name": "GetMouseWheelMove", + "description": "Get mouse wheel movement for X or Y, whichever is larger", + "returnType": "float" + }, + { + "name": "GetMouseWheelMoveV", + "description": "Get mouse wheel movement for both X and Y", + "returnType": "Vector2" + }, + { + "name": "SetMouseCursor", + "description": "Set mouse cursor", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "cursor" + } + ] + }, + { + "name": "GetTouchX", + "description": "Get touch position X for touch point 0 (relative to screen size)", + "returnType": "int" + }, + { + "name": "GetTouchY", + "description": "Get touch position Y for touch point 0 (relative to screen size)", + "returnType": "int" + }, + { + "name": "GetTouchPosition", + "description": "Get touch position XY for a touch point index (relative to screen size)", + "returnType": "Vector2", + "params": [ + { + "type": "int", + "name": "index" + } + ] + }, + { + "name": "GetTouchPointId", + "description": "Get touch point identifier for given index", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "index" + } + ] + }, + { + "name": "GetTouchPointCount", + "description": "Get number of touch points", + "returnType": "int" + }, + { + "name": "SetGesturesEnabled", + "description": "Enable a set of gestures using flags", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "flags" + } + ] + }, + { + "name": "IsGestureDetected", + "description": "Check if a gesture have been detected", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "gesture" + } + ] + }, + { + "name": "GetGestureDetected", + "description": "Get latest detected gesture", + "returnType": "int" + }, + { + "name": "GetGestureHoldDuration", + "description": "Get gesture hold time in milliseconds", + "returnType": "float" + }, + { + "name": "GetGestureDragVector", + "description": "Get gesture drag vector", + "returnType": "Vector2" + }, + { + "name": "GetGestureDragAngle", + "description": "Get gesture drag angle", + "returnType": "float" + }, + { + "name": "GetGesturePinchVector", + "description": "Get gesture pinch delta", + "returnType": "Vector2" + }, + { + "name": "GetGesturePinchAngle", + "description": "Get gesture pinch angle", + "returnType": "float" + }, + { + "name": "UpdateCamera", + "description": "Update camera position for selected mode", + "returnType": "void", + "params": [ + { + "type": "Camera *", + "name": "camera" + }, + { + "type": "int", + "name": "mode" + } + ] + }, + { + "name": "UpdateCameraPro", + "description": "Update camera movement/rotation", + "returnType": "void", + "params": [ + { + "type": "Camera *", + "name": "camera" + }, + { + "type": "Vector3", + "name": "movement" + }, + { + "type": "Vector3", + "name": "rotation" + }, + { + "type": "float", + "name": "zoom" + } + ] + }, + { + "name": "SetShapesTexture", + "description": "Set texture and rectangle to be used on shapes drawing", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + } + ] + }, + { + "name": "DrawPixel", + "description": "Draw a pixel", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPixelV", + "description": "Draw a pixel (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLine", + "description": "Draw a line", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "startPosX" + }, + { + "type": "int", + "name": "startPosY" + }, + { + "type": "int", + "name": "endPosX" + }, + { + "type": "int", + "name": "endPosY" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineV", + "description": "Draw a line (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineEx", + "description": "Draw a line defining thickness", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineBezier", + "description": "Draw a line using cubic-bezier curves in-out", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineBezierQuad", + "description": "Draw line using quadratic bezier curves with a control point", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "Vector2", + "name": "controlPos" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineBezierCubic", + "description": "Draw line using cubic bezier curves with 2 control points", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "startPos" + }, + { + "type": "Vector2", + "name": "endPos" + }, + { + "type": "Vector2", + "name": "startControlPos" + }, + { + "type": "Vector2", + "name": "endControlPos" + }, + { + "type": "float", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawLineStrip", + "description": "Draw lines sequence", + "returnType": "void", + "params": [ + { + "type": "Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircle", + "description": "Draw a color-filled circle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleSector", + "description": "Draw a piece of a circle", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "startAngle" + }, + { + "type": "float", + "name": "endAngle" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleSectorLines", + "description": "Draw circle sector outline", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "startAngle" + }, + { + "type": "float", + "name": "endAngle" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleGradient", + "description": "Draw a gradient-filled circle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color1" + }, + { + "type": "Color", + "name": "color2" + } + ] + }, + { + "name": "DrawCircleV", + "description": "Draw a color-filled circle (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircleLines", + "description": "Draw circle outline", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawEllipse", + "description": "Draw ellipse", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radiusH" + }, + { + "type": "float", + "name": "radiusV" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawEllipseLines", + "description": "Draw ellipse outline", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "float", + "name": "radiusH" + }, + { + "type": "float", + "name": "radiusV" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRing", + "description": "Draw ring", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "innerRadius" + }, + { + "type": "float", + "name": "outerRadius" + }, + { + "type": "float", + "name": "startAngle" + }, + { + "type": "float", + "name": "endAngle" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRingLines", + "description": "Draw ring outline", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "innerRadius" + }, + { + "type": "float", + "name": "outerRadius" + }, + { + "type": "float", + "name": "startAngle" + }, + { + "type": "float", + "name": "endAngle" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangle", + "description": "Draw a color-filled rectangle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleV", + "description": "Draw a color-filled rectangle (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleRec", + "description": "Draw a color-filled rectangle", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectanglePro", + "description": "Draw a color-filled rectangle with pro parameters", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleGradientV", + "description": "Draw a vertical-gradient-filled rectangle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color1" + }, + { + "type": "Color", + "name": "color2" + } + ] + }, + { + "name": "DrawRectangleGradientH", + "description": "Draw a horizontal-gradient-filled rectangle", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color1" + }, + { + "type": "Color", + "name": "color2" + } + ] + }, + { + "name": "DrawRectangleGradientEx", + "description": "Draw a gradient-filled rectangle with custom vertex colors", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "Color", + "name": "col1" + }, + { + "type": "Color", + "name": "col2" + }, + { + "type": "Color", + "name": "col3" + }, + { + "type": "Color", + "name": "col4" + } + ] + }, + { + "name": "DrawRectangleLines", + "description": "Draw rectangle outline", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleLinesEx", + "description": "Draw rectangle outline with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "float", + "name": "lineThick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleRounded", + "description": "Draw rectangle with rounded edges", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "float", + "name": "roundness" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRectangleRoundedLines", + "description": "Draw rectangle with rounded edges outline", + "returnType": "void", + "params": [ + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "float", + "name": "roundness" + }, + { + "type": "int", + "name": "segments" + }, + { + "type": "float", + "name": "lineThick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangle", + "description": "Draw a color-filled triangle (vertex in counter-clockwise order!)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + }, + { + "type": "Vector2", + "name": "v3" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangleLines", + "description": "Draw triangle outline (vertex in counter-clockwise order!)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + }, + { + "type": "Vector2", + "name": "v3" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangleFan", + "description": "Draw a triangle fan defined by points (first vertex is the center)", + "returnType": "void", + "params": [ + { + "type": "Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangleStrip", + "description": "Draw a triangle strip defined by points", + "returnType": "void", + "params": [ + { + "type": "Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPoly", + "description": "Draw a regular polygon (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPolyLines", + "description": "Draw a polygon outline of n sides", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPolyLinesEx", + "description": "Draw a polygon outline of n sides with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "float", + "name": "lineThick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "CheckCollisionRecs", + "description": "Check collision between two rectangles", + "returnType": "bool", + "params": [ + { + "type": "Rectangle", + "name": "rec1" + }, + { + "type": "Rectangle", + "name": "rec2" + } + ] + }, + { + "name": "CheckCollisionCircles", + "description": "Check collision between two circles", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "center1" + }, + { + "type": "float", + "name": "radius1" + }, + { + "type": "Vector2", + "name": "center2" + }, + { + "type": "float", + "name": "radius2" + } + ] + }, + { + "name": "CheckCollisionCircleRec", + "description": "Check collision between circle and rectangle", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Rectangle", + "name": "rec" + } + ] + }, + { + "name": "CheckCollisionPointRec", + "description": "Check if point is inside rectangle", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Rectangle", + "name": "rec" + } + ] + }, + { + "name": "CheckCollisionPointCircle", + "description": "Check if point is inside circle", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Vector2", + "name": "center" + }, + { + "type": "float", + "name": "radius" + } + ] + }, + { + "name": "CheckCollisionPointTriangle", + "description": "Check if point is inside a triangle", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "Vector2", + "name": "p3" + } + ] + }, + { + "name": "CheckCollisionPointPoly", + "description": "Check if point is within a polygon described by array of vertices", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Vector2 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + } + ] + }, + { + "name": "CheckCollisionLines", + "description": "Check the collision between two lines defined by two points each, returns collision point by reference", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "startPos1" + }, + { + "type": "Vector2", + "name": "endPos1" + }, + { + "type": "Vector2", + "name": "startPos2" + }, + { + "type": "Vector2", + "name": "endPos2" + }, + { + "type": "Vector2 *", + "name": "collisionPoint" + } + ] + }, + { + "name": "CheckCollisionPointLine", + "description": "Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]", + "returnType": "bool", + "params": [ + { + "type": "Vector2", + "name": "point" + }, + { + "type": "Vector2", + "name": "p1" + }, + { + "type": "Vector2", + "name": "p2" + }, + { + "type": "int", + "name": "threshold" + } + ] + }, + { + "name": "GetCollisionRec", + "description": "Get collision rectangle for two rectangles collision", + "returnType": "Rectangle", + "params": [ + { + "type": "Rectangle", + "name": "rec1" + }, + { + "type": "Rectangle", + "name": "rec2" + } + ] + }, + { + "name": "LoadImage", + "description": "Load image from file into CPU memory (RAM)", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadImageRaw", + "description": "Load image from RAW file data", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "format" + }, + { + "type": "int", + "name": "headerSize" + } + ] + }, + { + "name": "LoadImageAnim", + "description": "Load image sequence from file (frames appended to image.data)", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int *", + "name": "frames" + } + ] + }, + { + "name": "LoadImageFromMemory", + "description": "Load image from memory buffer, fileType refers to extension: i.e. '.png'", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "LoadImageFromTexture", + "description": "Load image from GPU texture data", + "returnType": "Image", + "params": [ + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "LoadImageFromScreen", + "description": "Load image from screen buffer and (screenshot)", + "returnType": "Image" + }, + { + "name": "IsImageReady", + "description": "Check if an image is ready", + "returnType": "bool", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "UnloadImage", + "description": "Unload image from CPU memory (RAM)", + "returnType": "void", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "ExportImage", + "description": "Export image data to file, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "ExportImageAsCode", + "description": "Export image as code file defining an array of bytes, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GenImageColor", + "description": "Generate image: plain color", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "GenImageGradientV", + "description": "Generate image: vertical gradient", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "top" + }, + { + "type": "Color", + "name": "bottom" + } + ] + }, + { + "name": "GenImageGradientH", + "description": "Generate image: horizontal gradient", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "left" + }, + { + "type": "Color", + "name": "right" + } + ] + }, + { + "name": "GenImageGradientRadial", + "description": "Generate image: radial gradient", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "float", + "name": "density" + }, + { + "type": "Color", + "name": "inner" + }, + { + "type": "Color", + "name": "outer" + } + ] + }, + { + "name": "GenImageChecked", + "description": "Generate image: checked", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "checksX" + }, + { + "type": "int", + "name": "checksY" + }, + { + "type": "Color", + "name": "col1" + }, + { + "type": "Color", + "name": "col2" + } + ] + }, + { + "name": "GenImageWhiteNoise", + "description": "Generate image: white noise", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "float", + "name": "factor" + } + ] + }, + { + "name": "GenImagePerlinNoise", + "description": "Generate image: perlin noise", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "offsetX" + }, + { + "type": "int", + "name": "offsetY" + }, + { + "type": "float", + "name": "scale" + } + ] + }, + { + "name": "GenImageCellular", + "description": "Generate image: cellular algorithm, bigger tileSize means bigger cells", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "tileSize" + } + ] + }, + { + "name": "GenImageText", + "description": "Generate image: grayscale image from text data", + "returnType": "Image", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "ImageCopy", + "description": "Create an image duplicate (useful for transformations)", + "returnType": "Image", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "ImageFromImage", + "description": "Create an image from another image piece", + "returnType": "Image", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "Rectangle", + "name": "rec" + } + ] + }, + { + "name": "ImageText", + "description": "Create an image from text (default font)", + "returnType": "Image", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageTextEx", + "description": "Create an image from text (custom sprite font)", + "returnType": "Image", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "ImageFormat", + "description": "Convert image data to desired format", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "newFormat" + } + ] + }, + { + "name": "ImageToPOT", + "description": "Convert image to POT (power-of-two)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Color", + "name": "fill" + } + ] + }, + { + "name": "ImageCrop", + "description": "Crop an image to a defined rectangle", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Rectangle", + "name": "crop" + } + ] + }, + { + "name": "ImageAlphaCrop", + "description": "Crop image depending on alpha value", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "float", + "name": "threshold" + } + ] + }, + { + "name": "ImageAlphaClear", + "description": "Clear alpha channel to desired color", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "threshold" + } + ] + }, + { + "name": "ImageAlphaMask", + "description": "Apply alpha mask to image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Image", + "name": "alphaMask" + } + ] + }, + { + "name": "ImageAlphaPremultiply", + "description": "Premultiply alpha channel", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageBlurGaussian", + "description": "Apply Gaussian blur using a box blur approximation", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "blurSize" + } + ] + }, + { + "name": "ImageResize", + "description": "Resize image (Bicubic scaling algorithm)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "newWidth" + }, + { + "type": "int", + "name": "newHeight" + } + ] + }, + { + "name": "ImageResizeNN", + "description": "Resize image (Nearest-Neighbor scaling algorithm)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "newWidth" + }, + { + "type": "int", + "name": "newHeight" + } + ] + }, + { + "name": "ImageResizeCanvas", + "description": "Resize canvas and fill with color", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "newWidth" + }, + { + "type": "int", + "name": "newHeight" + }, + { + "type": "int", + "name": "offsetX" + }, + { + "type": "int", + "name": "offsetY" + }, + { + "type": "Color", + "name": "fill" + } + ] + }, + { + "name": "ImageMipmaps", + "description": "Compute all mipmap levels for a provided image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageDither", + "description": "Dither image data to 16bpp or lower (Floyd-Steinberg dithering)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "rBpp" + }, + { + "type": "int", + "name": "gBpp" + }, + { + "type": "int", + "name": "bBpp" + }, + { + "type": "int", + "name": "aBpp" + } + ] + }, + { + "name": "ImageFlipVertical", + "description": "Flip image vertically", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageFlipHorizontal", + "description": "Flip image horizontally", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageRotateCW", + "description": "Rotate image clockwise 90deg", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageRotateCCW", + "description": "Rotate image counter-clockwise 90deg", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageColorTint", + "description": "Modify image color: tint", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageColorInvert", + "description": "Modify image color: invert", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageColorGrayscale", + "description": "Modify image color: grayscale", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + } + ] + }, + { + "name": "ImageColorContrast", + "description": "Modify image color: contrast (-100 to 100)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "float", + "name": "contrast" + } + ] + }, + { + "name": "ImageColorBrightness", + "description": "Modify image color: brightness (-255 to 255)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "int", + "name": "brightness" + } + ] + }, + { + "name": "ImageColorReplace", + "description": "Modify image color: replace color", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "image" + }, + { + "type": "Color", + "name": "color" + }, + { + "type": "Color", + "name": "replace" + } + ] + }, + { + "name": "LoadImageColors", + "description": "Load color data from image as a Color array (RGBA - 32bit)", + "returnType": "Color *", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "LoadImagePalette", + "description": "Load colors palette from image as a Color array (RGBA - 32bit)", + "returnType": "Color *", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "int", + "name": "maxPaletteSize" + }, + { + "type": "int *", + "name": "colorCount" + } + ] + }, + { + "name": "UnloadImageColors", + "description": "Unload color data loaded with LoadImageColors()", + "returnType": "void", + "params": [ + { + "type": "Color *", + "name": "colors" + } + ] + }, + { + "name": "UnloadImagePalette", + "description": "Unload colors palette loaded with LoadImagePalette()", + "returnType": "void", + "params": [ + { + "type": "Color *", + "name": "colors" + } + ] + }, + { + "name": "GetImageAlphaBorder", + "description": "Get image alpha border rectangle", + "returnType": "Rectangle", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "float", + "name": "threshold" + } + ] + }, + { + "name": "GetImageColor", + "description": "Get image pixel color at (x, y) position", + "returnType": "Color", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + } + ] + }, + { + "name": "ImageClearBackground", + "description": "Clear image background with given color", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawPixel", + "description": "Draw pixel within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawPixelV", + "description": "Draw pixel within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawLine", + "description": "Draw line within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "startPosX" + }, + { + "type": "int", + "name": "startPosY" + }, + { + "type": "int", + "name": "endPosX" + }, + { + "type": "int", + "name": "endPosY" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawLineV", + "description": "Draw line within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "start" + }, + { + "type": "Vector2", + "name": "end" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawCircle", + "description": "Draw a filled circle within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "int", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawCircleV", + "description": "Draw a filled circle within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawCircleLines", + "description": "Draw circle outline within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "centerX" + }, + { + "type": "int", + "name": "centerY" + }, + { + "type": "int", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawCircleLinesV", + "description": "Draw circle outline within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "center" + }, + { + "type": "int", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawRectangle", + "description": "Draw rectangle within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawRectangleV", + "description": "Draw rectangle within an image (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawRectangleRec", + "description": "Draw rectangle within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawRectangleLines", + "description": "Draw rectangle lines within an image", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "int", + "name": "thick" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDraw", + "description": "Draw a source image within a destination image (tint applied to source)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Image", + "name": "src" + }, + { + "type": "Rectangle", + "name": "srcRec" + }, + { + "type": "Rectangle", + "name": "dstRec" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "ImageDrawText", + "description": "Draw text (using default font) within an image (destination)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ImageDrawTextEx", + "description": "Draw text (custom sprite font) within an image (destination)", + "returnType": "void", + "params": [ + { + "type": "Image *", + "name": "dst" + }, + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "LoadTexture", + "description": "Load texture from file into GPU memory (VRAM)", + "returnType": "Texture2D", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadTextureFromImage", + "description": "Load texture from image data", + "returnType": "Texture2D", + "params": [ + { + "type": "Image", + "name": "image" + } + ] + }, + { + "name": "LoadTextureCubemap", + "description": "Load cubemap from image, multiple image cubemap layouts supported", + "returnType": "TextureCubemap", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "int", + "name": "layout" + } + ] + }, + { + "name": "LoadRenderTexture", + "description": "Load texture for rendering (framebuffer)", + "returnType": "RenderTexture2D", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "IsTextureReady", + "description": "Check if a texture is ready", + "returnType": "bool", + "params": [ + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "UnloadTexture", + "description": "Unload texture from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "IsRenderTextureReady", + "description": "Check if a render texture is ready", + "returnType": "bool", + "params": [ + { + "type": "RenderTexture2D", + "name": "target" + } + ] + }, + { + "name": "UnloadRenderTexture", + "description": "Unload render texture from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "RenderTexture2D", + "name": "target" + } + ] + }, + { + "name": "UpdateTexture", + "description": "Update GPU texture with new data", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "const void *", + "name": "pixels" + } + ] + }, + { + "name": "UpdateTextureRec", + "description": "Update GPU texture rectangle with new data", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "rec" + }, + { + "type": "const void *", + "name": "pixels" + } + ] + }, + { + "name": "GenTextureMipmaps", + "description": "Generate GPU mipmaps for a texture", + "returnType": "void", + "params": [ + { + "type": "Texture2D *", + "name": "texture" + } + ] + }, + { + "name": "SetTextureFilter", + "description": "Set texture scaling filter mode", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "int", + "name": "filter" + } + ] + }, + { + "name": "SetTextureWrap", + "description": "Set texture wrapping mode", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "int", + "name": "wrap" + } + ] + }, + { + "name": "DrawTexture", + "description": "Draw a Texture2D", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextureV", + "description": "Draw a Texture2D with position defined as Vector2", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextureEx", + "description": "Draw a Texture2D with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "float", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextureRec", + "description": "Draw a part of a texture defined by a rectangle", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTexturePro", + "description": "Draw a part of a texture defined by a rectangle with 'pro' parameters", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + }, + { + "type": "Rectangle", + "name": "dest" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextureNPatch", + "description": "Draws a texture (or part of it) that stretches or shrinks nicely", + "returnType": "void", + "params": [ + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "NPatchInfo", + "name": "nPatchInfo" + }, + { + "type": "Rectangle", + "name": "dest" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "Fade", + "description": "Get color with alpha applied, alpha goes from 0.0f to 1.0f", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "alpha" + } + ] + }, + { + "name": "ColorToInt", + "description": "Get hexadecimal value for a Color", + "returnType": "int", + "params": [ + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ColorNormalize", + "description": "Get Color normalized as float [0..1]", + "returnType": "Vector4", + "params": [ + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ColorFromNormalized", + "description": "Get Color from normalized values [0..1]", + "returnType": "Color", + "params": [ + { + "type": "Vector4", + "name": "normalized" + } + ] + }, + { + "name": "ColorToHSV", + "description": "Get HSV values for a Color, hue [0..360], saturation/value [0..1]", + "returnType": "Vector3", + "params": [ + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "ColorFromHSV", + "description": "Get a Color from HSV values, hue [0..360], saturation/value [0..1]", + "returnType": "Color", + "params": [ + { + "type": "float", + "name": "hue" + }, + { + "type": "float", + "name": "saturation" + }, + { + "type": "float", + "name": "value" + } + ] + }, + { + "name": "ColorTint", + "description": "Get color multiplied with another color", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "ColorBrightness", + "description": "Get color with brightness correction, brightness factor goes from -1.0f to 1.0f", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "factor" + } + ] + }, + { + "name": "ColorContrast", + "description": "Get color with contrast correction, contrast values between -1.0f and 1.0f", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "contrast" + } + ] + }, + { + "name": "ColorAlpha", + "description": "Get color with alpha applied, alpha goes from 0.0f to 1.0f", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "color" + }, + { + "type": "float", + "name": "alpha" + } + ] + }, + { + "name": "ColorAlphaBlend", + "description": "Get src alpha-blended into dst color with tint", + "returnType": "Color", + "params": [ + { + "type": "Color", + "name": "dst" + }, + { + "type": "Color", + "name": "src" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "GetColor", + "description": "Get Color structure from hexadecimal value", + "returnType": "Color", + "params": [ + { + "type": "unsigned int", + "name": "hexValue" + } + ] + }, + { + "name": "GetPixelColor", + "description": "Get Color from a source pixel pointer of certain format", + "returnType": "Color", + "params": [ + { + "type": "void *", + "name": "srcPtr" + }, + { + "type": "int", + "name": "format" + } + ] + }, + { + "name": "SetPixelColor", + "description": "Set color formatted into destination pixel pointer", + "returnType": "void", + "params": [ + { + "type": "void *", + "name": "dstPtr" + }, + { + "type": "Color", + "name": "color" + }, + { + "type": "int", + "name": "format" + } + ] + }, + { + "name": "GetPixelDataSize", + "description": "Get pixel data size in bytes for certain format", + "returnType": "int", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "format" + } + ] + }, + { + "name": "GetFontDefault", + "description": "Get the default Font", + "returnType": "Font" + }, + { + "name": "LoadFont", + "description": "Load font from file into GPU memory (VRAM)", + "returnType": "Font", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadFontEx", + "description": "Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set", + "returnType": "Font", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "int *", + "name": "fontChars" + }, + { + "type": "int", + "name": "glyphCount" + } + ] + }, + { + "name": "LoadFontFromImage", + "description": "Load font from Image (XNA style)", + "returnType": "Font", + "params": [ + { + "type": "Image", + "name": "image" + }, + { + "type": "Color", + "name": "key" + }, + { + "type": "int", + "name": "firstChar" + } + ] + }, + { + "name": "LoadFontFromMemory", + "description": "Load font from memory buffer, fileType refers to extension: i.e. '.ttf'", + "returnType": "Font", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "int *", + "name": "fontChars" + }, + { + "type": "int", + "name": "glyphCount" + } + ] + }, + { + "name": "IsFontReady", + "description": "Check if a font is ready", + "returnType": "bool", + "params": [ + { + "type": "Font", + "name": "font" + } + ] + }, + { + "name": "LoadFontData", + "description": "Load font data for further use", + "returnType": "GlyphInfo *", + "params": [ + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "int *", + "name": "fontChars" + }, + { + "type": "int", + "name": "glyphCount" + }, + { + "type": "int", + "name": "type" + } + ] + }, + { + "name": "GenImageFontAtlas", + "description": "Generate image font atlas using chars info", + "returnType": "Image", + "params": [ + { + "type": "const GlyphInfo *", + "name": "chars" + }, + { + "type": "Rectangle **", + "name": "recs" + }, + { + "type": "int", + "name": "glyphCount" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "int", + "name": "padding" + }, + { + "type": "int", + "name": "packMethod" + } + ] + }, + { + "name": "UnloadFontData", + "description": "Unload font chars info data (RAM)", + "returnType": "void", + "params": [ + { + "type": "GlyphInfo *", + "name": "chars" + }, + { + "type": "int", + "name": "glyphCount" + } + ] + }, + { + "name": "UnloadFont", + "description": "Unload font from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + } + ] + }, + { + "name": "ExportFontAsCode", + "description": "Export font as code file, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "DrawFPS", + "description": "Draw current FPS", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + } + ] + }, + { + "name": "DrawText", + "description": "Draw text (using default font)", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "posX" + }, + { + "type": "int", + "name": "posY" + }, + { + "type": "int", + "name": "fontSize" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTextEx", + "description": "Draw text using font and additional parameters", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextPro", + "description": "Draw text using Font and pro parameters (rotation)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextCodepoint", + "description": "Draw one character (codepoint)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "int", + "name": "codepoint" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawTextCodepoints", + "description": "Draw multiple character (codepoint)", + "returnType": "void", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const int *", + "name": "codepoints" + }, + { + "type": "int", + "name": "count" + }, + { + "type": "Vector2", + "name": "position" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "MeasureText", + "description": "Measure string width for default font", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "fontSize" + } + ] + }, + { + "name": "MeasureTextEx", + "description": "Measure string size for Font", + "returnType": "Vector2", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "const char *", + "name": "text" + }, + { + "type": "float", + "name": "fontSize" + }, + { + "type": "float", + "name": "spacing" + } + ] + }, + { + "name": "GetGlyphIndex", + "description": "Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found", + "returnType": "int", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "int", + "name": "codepoint" + } + ] + }, + { + "name": "GetGlyphInfo", + "description": "Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found", + "returnType": "GlyphInfo", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "int", + "name": "codepoint" + } + ] + }, + { + "name": "GetGlyphAtlasRec", + "description": "Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found", + "returnType": "Rectangle", + "params": [ + { + "type": "Font", + "name": "font" + }, + { + "type": "int", + "name": "codepoint" + } + ] + }, + { + "name": "LoadUTF8", + "description": "Load UTF-8 text encoded from codepoints array", + "returnType": "char *", + "params": [ + { + "type": "const int *", + "name": "codepoints" + }, + { + "type": "int", + "name": "length" + } + ] + }, + { + "name": "UnloadUTF8", + "description": "Unload UTF-8 text encoded from codepoints array", + "returnType": "void", + "params": [ + { + "type": "char *", + "name": "text" + } + ] + }, + { + "name": "LoadCodepoints", + "description": "Load all codepoints from a UTF-8 text string, codepoints count returned by parameter", + "returnType": "int *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "count" + } + ] + }, + { + "name": "UnloadCodepoints", + "description": "Unload codepoints data from memory", + "returnType": "void", + "params": [ + { + "type": "int *", + "name": "codepoints" + } + ] + }, + { + "name": "GetCodepointCount", + "description": "Get total number of codepoints in a UTF-8 encoded string", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "GetCodepoint", + "description": "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "codepointSize" + } + ] + }, + { + "name": "GetCodepointNext", + "description": "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "codepointSize" + } + ] + }, + { + "name": "GetCodepointPrevious", + "description": "Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int *", + "name": "codepointSize" + } + ] + }, + { + "name": "CodepointToUTF8", + "description": "Encode one codepoint into UTF-8 byte array (array length returned as parameter)", + "returnType": "const char *", + "params": [ + { + "type": "int", + "name": "codepoint" + }, + { + "type": "int *", + "name": "utf8Size" + } + ] + }, + { + "name": "TextCopy", + "description": "Copy one string to another, returns bytes copied", + "returnType": "int", + "params": [ + { + "type": "char *", + "name": "dst" + }, + { + "type": "const char *", + "name": "src" + } + ] + }, + { + "name": "TextIsEqual", + "description": "Check if two text string are equal", + "returnType": "bool", + "params": [ + { + "type": "const char *", + "name": "text1" + }, + { + "type": "const char *", + "name": "text2" + } + ] + }, + { + "name": "TextLength", + "description": "Get text length, checks for '\\0' ending", + "returnType": "unsigned int", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextFormat", + "description": "Text formatting with variables (sprintf() style)", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "...", + "name": "args" + } + ] + }, + { + "name": "TextSubtext", + "description": "Get a piece of a text string", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "int", + "name": "position" + }, + { + "type": "int", + "name": "length" + } + ] + }, + { + "name": "TextReplace", + "description": "Replace text string (WARNING: memory must be freed!)", + "returnType": "char *", + "params": [ + { + "type": "char *", + "name": "text" + }, + { + "type": "const char *", + "name": "replace" + }, + { + "type": "const char *", + "name": "by" + } + ] + }, + { + "name": "TextInsert", + "description": "Insert text in a position (WARNING: memory must be freed!)", + "returnType": "char *", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "const char *", + "name": "insert" + }, + { + "type": "int", + "name": "position" + } + ] + }, + { + "name": "TextJoin", + "description": "Join text strings with delimiter", + "returnType": "const char *", + "params": [ + { + "type": "const char **", + "name": "textList" + }, + { + "type": "int", + "name": "count" + }, + { + "type": "const char *", + "name": "delimiter" + } + ] + }, + { + "name": "TextSplit", + "description": "Split text into multiple strings", + "returnType": "const char **", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "char", + "name": "delimiter" + }, + { + "type": "int *", + "name": "count" + } + ] + }, + { + "name": "TextAppend", + "description": "Append text at specific position and move cursor!", + "returnType": "void", + "params": [ + { + "type": "char *", + "name": "text" + }, + { + "type": "const char *", + "name": "append" + }, + { + "type": "int *", + "name": "position" + } + ] + }, + { + "name": "TextFindIndex", + "description": "Find first text occurrence within a string", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + }, + { + "type": "const char *", + "name": "find" + } + ] + }, + { + "name": "TextToUpper", + "description": "Get upper case version of provided string", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToLower", + "description": "Get lower case version of provided string", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToPascal", + "description": "Get Pascal case notation version of provided string", + "returnType": "const char *", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "TextToInteger", + "description": "Get integer value from text (negative values not supported)", + "returnType": "int", + "params": [ + { + "type": "const char *", + "name": "text" + } + ] + }, + { + "name": "DrawLine3D", + "description": "Draw a line in 3D world space", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPoint3D", + "description": "Draw a point in 3D space, actually a small line", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCircle3D", + "description": "Draw a circle in 3D world space", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "center" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Vector3", + "name": "rotationAxis" + }, + { + "type": "float", + "name": "rotationAngle" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangle3D", + "description": "Draw a color-filled triangle (vertex in counter-clockwise order!)", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + }, + { + "type": "Vector3", + "name": "v3" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawTriangleStrip3D", + "description": "Draw a triangle strip defined by points", + "returnType": "void", + "params": [ + { + "type": "Vector3 *", + "name": "points" + }, + { + "type": "int", + "name": "pointCount" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCube", + "description": "Draw cube", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "width" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "float", + "name": "length" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCubeV", + "description": "Draw cube (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCubeWires", + "description": "Draw cube wires", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "width" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "float", + "name": "length" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCubeWiresV", + "description": "Draw cube wires (Vector version)", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSphere", + "description": "Draw sphere", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "centerPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSphereEx", + "description": "Draw sphere with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "centerPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawSphereWires", + "description": "Draw sphere wires", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "centerPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCylinder", + "description": "Draw a cylinder/cone", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "radiusTop" + }, + { + "type": "float", + "name": "radiusBottom" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCylinderEx", + "description": "Draw a cylinder with base at startPos and top at endPos", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "float", + "name": "startRadius" + }, + { + "type": "float", + "name": "endRadius" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCylinderWires", + "description": "Draw a cylinder/cone wires", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "radiusTop" + }, + { + "type": "float", + "name": "radiusBottom" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCylinderWiresEx", + "description": "Draw a cylinder wires with base at startPos and top at endPos", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "float", + "name": "startRadius" + }, + { + "type": "float", + "name": "endRadius" + }, + { + "type": "int", + "name": "sides" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCapsule", + "description": "Draw a capsule with the center of its sphere caps at startPos and endPos", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawCapsuleWires", + "description": "Draw capsule wireframe with the center of its sphere caps at startPos and endPos", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "startPos" + }, + { + "type": "Vector3", + "name": "endPos" + }, + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "slices" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawPlane", + "description": "Draw a plane XZ", + "returnType": "void", + "params": [ + { + "type": "Vector3", + "name": "centerPos" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawRay", + "description": "Draw a ray line", + "returnType": "void", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawGrid", + "description": "Draw a grid (centered at (0, 0, 0))", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "slices" + }, + { + "type": "float", + "name": "spacing" + } + ] + }, + { + "name": "LoadModel", + "description": "Load model from files (meshes and materials)", + "returnType": "Model", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadModelFromMesh", + "description": "Load model from generated mesh (default material)", + "returnType": "Model", + "params": [ + { + "type": "Mesh", + "name": "mesh" + } + ] + }, + { + "name": "IsModelReady", + "description": "Check if a model is ready", + "returnType": "bool", + "params": [ + { + "type": "Model", + "name": "model" + } + ] + }, + { + "name": "UnloadModel", + "description": "Unload model (including meshes) from memory (RAM and/or VRAM)", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + } + ] + }, + { + "name": "GetModelBoundingBox", + "description": "Compute model bounding box limits (considers all meshes)", + "returnType": "BoundingBox", + "params": [ + { + "type": "Model", + "name": "model" + } + ] + }, + { + "name": "DrawModel", + "description": "Draw a model (with texture if set)", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawModelEx", + "description": "Draw a model with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "rotationAxis" + }, + { + "type": "float", + "name": "rotationAngle" + }, + { + "type": "Vector3", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawModelWires", + "description": "Draw a model wires (with texture if set)", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawModelWiresEx", + "description": "Draw a model wires (with texture if set) with extended parameters", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "rotationAxis" + }, + { + "type": "float", + "name": "rotationAngle" + }, + { + "type": "Vector3", + "name": "scale" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawBoundingBox", + "description": "Draw bounding box (wires)", + "returnType": "void", + "params": [ + { + "type": "BoundingBox", + "name": "box" + }, + { + "type": "Color", + "name": "color" + } + ] + }, + { + "name": "DrawBillboard", + "description": "Draw a billboard texture", + "returnType": "void", + "params": [ + { + "type": "Camera", + "name": "camera" + }, + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "float", + "name": "size" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawBillboardRec", + "description": "Draw a billboard texture defined by source", + "returnType": "void", + "params": [ + { + "type": "Camera", + "name": "camera" + }, + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "DrawBillboardPro", + "description": "Draw a billboard texture defined by source and rotation", + "returnType": "void", + "params": [ + { + "type": "Camera", + "name": "camera" + }, + { + "type": "Texture2D", + "name": "texture" + }, + { + "type": "Rectangle", + "name": "source" + }, + { + "type": "Vector3", + "name": "position" + }, + { + "type": "Vector3", + "name": "up" + }, + { + "type": "Vector2", + "name": "size" + }, + { + "type": "Vector2", + "name": "origin" + }, + { + "type": "float", + "name": "rotation" + }, + { + "type": "Color", + "name": "tint" + } + ] + }, + { + "name": "UploadMesh", + "description": "Upload mesh vertex data in GPU and provide VAO/VBO ids", + "returnType": "void", + "params": [ + { + "type": "Mesh *", + "name": "mesh" + }, + { + "type": "bool", + "name": "dynamic" + } + ] + }, + { + "name": "UpdateMeshBuffer", + "description": "Update mesh vertex data in GPU for a specific buffer index", + "returnType": "void", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "int", + "name": "index" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int", + "name": "offset" + } + ] + }, + { + "name": "UnloadMesh", + "description": "Unload mesh data from CPU and GPU", + "returnType": "void", + "params": [ + { + "type": "Mesh", + "name": "mesh" + } + ] + }, + { + "name": "DrawMesh", + "description": "Draw a 3d mesh with material and transform", + "returnType": "void", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "Material", + "name": "material" + }, + { + "type": "Matrix", + "name": "transform" + } + ] + }, + { + "name": "DrawMeshInstanced", + "description": "Draw multiple mesh instances with material and different transforms", + "returnType": "void", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "Material", + "name": "material" + }, + { + "type": "const Matrix *", + "name": "transforms" + }, + { + "type": "int", + "name": "instances" + } + ] + }, + { + "name": "ExportMesh", + "description": "Export mesh data to file, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "GetMeshBoundingBox", + "description": "Compute mesh bounding box limits", + "returnType": "BoundingBox", + "params": [ + { + "type": "Mesh", + "name": "mesh" + } + ] + }, + { + "name": "GenMeshTangents", + "description": "Compute mesh tangents", + "returnType": "void", + "params": [ + { + "type": "Mesh *", + "name": "mesh" + } + ] + }, + { + "name": "GenMeshPoly", + "description": "Generate polygonal mesh", + "returnType": "Mesh", + "params": [ + { + "type": "int", + "name": "sides" + }, + { + "type": "float", + "name": "radius" + } + ] + }, + { + "name": "GenMeshPlane", + "description": "Generate plane mesh (with subdivisions)", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "width" + }, + { + "type": "float", + "name": "length" + }, + { + "type": "int", + "name": "resX" + }, + { + "type": "int", + "name": "resZ" + } + ] + }, + { + "name": "GenMeshCube", + "description": "Generate cuboid mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "width" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "float", + "name": "length" + } + ] + }, + { + "name": "GenMeshSphere", + "description": "Generate sphere mesh (standard sphere)", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "int", + "name": "slices" + } + ] + }, + { + "name": "GenMeshHemiSphere", + "description": "Generate half-sphere mesh (no bottom cap)", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "int", + "name": "rings" + }, + { + "type": "int", + "name": "slices" + } + ] + }, + { + "name": "GenMeshCylinder", + "description": "Generate cylinder mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "int", + "name": "slices" + } + ] + }, + { + "name": "GenMeshCone", + "description": "Generate cone/pyramid mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "height" + }, + { + "type": "int", + "name": "slices" + } + ] + }, + { + "name": "GenMeshTorus", + "description": "Generate torus mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "size" + }, + { + "type": "int", + "name": "radSeg" + }, + { + "type": "int", + "name": "sides" + } + ] + }, + { + "name": "GenMeshKnot", + "description": "Generate trefoil knot mesh", + "returnType": "Mesh", + "params": [ + { + "type": "float", + "name": "radius" + }, + { + "type": "float", + "name": "size" + }, + { + "type": "int", + "name": "radSeg" + }, + { + "type": "int", + "name": "sides" + } + ] + }, + { + "name": "GenMeshHeightmap", + "description": "Generate heightmap mesh from image data", + "returnType": "Mesh", + "params": [ + { + "type": "Image", + "name": "heightmap" + }, + { + "type": "Vector3", + "name": "size" + } + ] + }, + { + "name": "GenMeshCubicmap", + "description": "Generate cubes-based map mesh from image data", + "returnType": "Mesh", + "params": [ + { + "type": "Image", + "name": "cubicmap" + }, + { + "type": "Vector3", + "name": "cubeSize" + } + ] + }, + { + "name": "LoadMaterials", + "description": "Load materials from model file", + "returnType": "Material *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int *", + "name": "materialCount" + } + ] + }, + { + "name": "LoadMaterialDefault", + "description": "Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)", + "returnType": "Material" + }, + { + "name": "IsMaterialReady", + "description": "Check if a material is ready", + "returnType": "bool", + "params": [ + { + "type": "Material", + "name": "material" + } + ] + }, + { + "name": "UnloadMaterial", + "description": "Unload material from GPU memory (VRAM)", + "returnType": "void", + "params": [ + { + "type": "Material", + "name": "material" + } + ] + }, + { + "name": "SetMaterialTexture", + "description": "Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)", + "returnType": "void", + "params": [ + { + "type": "Material *", + "name": "material" + }, + { + "type": "int", + "name": "mapType" + }, + { + "type": "Texture2D", + "name": "texture" + } + ] + }, + { + "name": "SetModelMeshMaterial", + "description": "Set material for a mesh", + "returnType": "void", + "params": [ + { + "type": "Model *", + "name": "model" + }, + { + "type": "int", + "name": "meshId" + }, + { + "type": "int", + "name": "materialId" + } + ] + }, + { + "name": "LoadModelAnimations", + "description": "Load model animations from file", + "returnType": "ModelAnimation *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "unsigned int *", + "name": "animCount" + } + ] + }, + { + "name": "UpdateModelAnimation", + "description": "Update model animation pose", + "returnType": "void", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "ModelAnimation", + "name": "anim" + }, + { + "type": "int", + "name": "frame" + } + ] + }, + { + "name": "UnloadModelAnimation", + "description": "Unload animation data", + "returnType": "void", + "params": [ + { + "type": "ModelAnimation", + "name": "anim" + } + ] + }, + { + "name": "UnloadModelAnimations", + "description": "Unload animation array data", + "returnType": "void", + "params": [ + { + "type": "ModelAnimation *", + "name": "animations" + }, + { + "type": "unsigned int", + "name": "count" + } + ] + }, + { + "name": "IsModelAnimationValid", + "description": "Check model animation skeleton match", + "returnType": "bool", + "params": [ + { + "type": "Model", + "name": "model" + }, + { + "type": "ModelAnimation", + "name": "anim" + } + ] + }, + { + "name": "CheckCollisionSpheres", + "description": "Check collision between two spheres", + "returnType": "bool", + "params": [ + { + "type": "Vector3", + "name": "center1" + }, + { + "type": "float", + "name": "radius1" + }, + { + "type": "Vector3", + "name": "center2" + }, + { + "type": "float", + "name": "radius2" + } + ] + }, + { + "name": "CheckCollisionBoxes", + "description": "Check collision between two bounding boxes", + "returnType": "bool", + "params": [ + { + "type": "BoundingBox", + "name": "box1" + }, + { + "type": "BoundingBox", + "name": "box2" + } + ] + }, + { + "name": "CheckCollisionBoxSphere", + "description": "Check collision between box and sphere", + "returnType": "bool", + "params": [ + { + "type": "BoundingBox", + "name": "box" + }, + { + "type": "Vector3", + "name": "center" + }, + { + "type": "float", + "name": "radius" + } + ] + }, + { + "name": "GetRayCollisionSphere", + "description": "Get collision info between ray and sphere", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Vector3", + "name": "center" + }, + { + "type": "float", + "name": "radius" + } + ] + }, + { + "name": "GetRayCollisionBox", + "description": "Get collision info between ray and box", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "BoundingBox", + "name": "box" + } + ] + }, + { + "name": "GetRayCollisionMesh", + "description": "Get collision info between ray and mesh", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Mesh", + "name": "mesh" + }, + { + "type": "Matrix", + "name": "transform" + } + ] + }, + { + "name": "GetRayCollisionTriangle", + "description": "Get collision info between ray and triangle", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Vector3", + "name": "p1" + }, + { + "type": "Vector3", + "name": "p2" + }, + { + "type": "Vector3", + "name": "p3" + } + ] + }, + { + "name": "GetRayCollisionQuad", + "description": "Get collision info between ray and quad", + "returnType": "RayCollision", + "params": [ + { + "type": "Ray", + "name": "ray" + }, + { + "type": "Vector3", + "name": "p1" + }, + { + "type": "Vector3", + "name": "p2" + }, + { + "type": "Vector3", + "name": "p3" + }, + { + "type": "Vector3", + "name": "p4" + } + ] + }, + { + "name": "InitAudioDevice", + "description": "Initialize audio device and context", + "returnType": "void" + }, + { + "name": "CloseAudioDevice", + "description": "Close the audio device and context", + "returnType": "void" + }, + { + "name": "IsAudioDeviceReady", + "description": "Check if audio device has been initialized successfully", + "returnType": "bool" + }, + { + "name": "SetMasterVolume", + "description": "Set master volume (listener)", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "volume" + } + ] + }, + { + "name": "LoadWave", + "description": "Load wave data from file", + "returnType": "Wave", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadWaveFromMemory", + "description": "Load wave from memory buffer, fileType refers to extension: i.e. '.wav'", + "returnType": "Wave", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "fileData" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "IsWaveReady", + "description": "Checks if wave data is ready", + "returnType": "bool", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "LoadSound", + "description": "Load sound from file", + "returnType": "Sound", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadSoundFromWave", + "description": "Load sound from wave data", + "returnType": "Sound", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "IsSoundReady", + "description": "Checks if a sound is ready", + "returnType": "bool", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "UpdateSound", + "description": "Update sound buffer with new data", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "sampleCount" + } + ] + }, + { + "name": "UnloadWave", + "description": "Unload wave data", + "returnType": "void", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "UnloadSound", + "description": "Unload sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "ExportWave", + "description": "Export wave data to file, returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Wave", + "name": "wave" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "ExportWaveAsCode", + "description": "Export wave sample data to code (.h), returns true on success", + "returnType": "bool", + "params": [ + { + "type": "Wave", + "name": "wave" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "PlaySound", + "description": "Play a sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "StopSound", + "description": "Stop playing a sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "PauseSound", + "description": "Pause a sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "ResumeSound", + "description": "Resume a paused sound", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "IsSoundPlaying", + "description": "Check if a sound is currently playing", + "returnType": "bool", + "params": [ + { + "type": "Sound", + "name": "sound" + } + ] + }, + { + "name": "SetSoundVolume", + "description": "Set volume for a sound (1.0 is max level)", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + }, + { + "type": "float", + "name": "volume" + } + ] + }, + { + "name": "SetSoundPitch", + "description": "Set pitch for a sound (1.0 is base level)", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + }, + { + "type": "float", + "name": "pitch" + } + ] + }, + { + "name": "SetSoundPan", + "description": "Set pan for a sound (0.5 is center)", + "returnType": "void", + "params": [ + { + "type": "Sound", + "name": "sound" + }, + { + "type": "float", + "name": "pan" + } + ] + }, + { + "name": "WaveCopy", + "description": "Copy a wave to a new wave", + "returnType": "Wave", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "WaveCrop", + "description": "Crop a wave to defined samples range", + "returnType": "void", + "params": [ + { + "type": "Wave *", + "name": "wave" + }, + { + "type": "int", + "name": "initSample" + }, + { + "type": "int", + "name": "finalSample" + } + ] + }, + { + "name": "WaveFormat", + "description": "Convert wave data to desired format", + "returnType": "void", + "params": [ + { + "type": "Wave *", + "name": "wave" + }, + { + "type": "int", + "name": "sampleRate" + }, + { + "type": "int", + "name": "sampleSize" + }, + { + "type": "int", + "name": "channels" + } + ] + }, + { + "name": "LoadWaveSamples", + "description": "Load samples data from wave as a 32bit float data array", + "returnType": "float *", + "params": [ + { + "type": "Wave", + "name": "wave" + } + ] + }, + { + "name": "UnloadWaveSamples", + "description": "Unload samples data loaded with LoadWaveSamples()", + "returnType": "void", + "params": [ + { + "type": "float *", + "name": "samples" + } + ] + }, + { + "name": "LoadMusicStream", + "description": "Load music stream from file", + "returnType": "Music", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "LoadMusicStreamFromMemory", + "description": "Load music stream from data", + "returnType": "Music", + "params": [ + { + "type": "const char *", + "name": "fileType" + }, + { + "type": "const unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + } + ] + }, + { + "name": "IsMusicReady", + "description": "Checks if a music stream is ready", + "returnType": "bool", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "UnloadMusicStream", + "description": "Unload music stream", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "PlayMusicStream", + "description": "Start music playing", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "IsMusicStreamPlaying", + "description": "Check if music is playing", + "returnType": "bool", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "UpdateMusicStream", + "description": "Updates buffers for music streaming", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "StopMusicStream", + "description": "Stop music playing", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "PauseMusicStream", + "description": "Pause music playing", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "ResumeMusicStream", + "description": "Resume playing paused music", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "SeekMusicStream", + "description": "Seek music to a position (in seconds)", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + }, + { + "type": "float", + "name": "position" + } + ] + }, + { + "name": "SetMusicVolume", + "description": "Set volume for music (1.0 is max level)", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + }, + { + "type": "float", + "name": "volume" + } + ] + }, + { + "name": "SetMusicPitch", + "description": "Set pitch for a music (1.0 is base level)", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + }, + { + "type": "float", + "name": "pitch" + } + ] + }, + { + "name": "SetMusicPan", + "description": "Set pan for a music (0.5 is center)", + "returnType": "void", + "params": [ + { + "type": "Music", + "name": "music" + }, + { + "type": "float", + "name": "pan" + } + ] + }, + { + "name": "GetMusicTimeLength", + "description": "Get music time length (in seconds)", + "returnType": "float", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "GetMusicTimePlayed", + "description": "Get current music time played (in seconds)", + "returnType": "float", + "params": [ + { + "type": "Music", + "name": "music" + } + ] + }, + { + "name": "LoadAudioStream", + "description": "Load audio stream (to stream raw audio pcm data)", + "returnType": "AudioStream", + "params": [ + { + "type": "unsigned int", + "name": "sampleRate" + }, + { + "type": "unsigned int", + "name": "sampleSize" + }, + { + "type": "unsigned int", + "name": "channels" + } + ] + }, + { + "name": "IsAudioStreamReady", + "description": "Checks if an audio stream is ready", + "returnType": "bool", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "UnloadAudioStream", + "description": "Unload audio stream and free memory", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "UpdateAudioStream", + "description": "Update audio stream buffers with data", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "frameCount" + } + ] + }, + { + "name": "IsAudioStreamProcessed", + "description": "Check if any audio stream buffers requires refill", + "returnType": "bool", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "PlayAudioStream", + "description": "Play audio stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "PauseAudioStream", + "description": "Pause audio stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "ResumeAudioStream", + "description": "Resume audio stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "IsAudioStreamPlaying", + "description": "Check if audio stream is playing", + "returnType": "bool", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "StopAudioStream", + "description": "Stop audio stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + } + ] + }, + { + "name": "SetAudioStreamVolume", + "description": "Set volume for audio stream (1.0 is max level)", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "float", + "name": "volume" + } + ] + }, + { + "name": "SetAudioStreamPitch", + "description": "Set pitch for audio stream (1.0 is base level)", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "float", + "name": "pitch" + } + ] + }, + { + "name": "SetAudioStreamPan", + "description": "Set pan for audio stream (0.5 is centered)", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "float", + "name": "pan" + } + ] + }, + { + "name": "SetAudioStreamBufferSizeDefault", + "description": "Default size for new audio streams", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "size" + } + ] + }, + { + "name": "SetAudioStreamCallback", + "description": "Audio thread callback to request new data", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "AudioCallback", + "name": "callback" + } + ] + }, + { + "name": "AttachAudioStreamProcessor", + "description": "Attach audio stream processor to stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "AudioCallback", + "name": "processor" + } + ] + }, + { + "name": "DetachAudioStreamProcessor", + "description": "Detach audio stream processor from stream", + "returnType": "void", + "params": [ + { + "type": "AudioStream", + "name": "stream" + }, + { + "type": "AudioCallback", + "name": "processor" + } + ] + }, + { + "name": "AttachAudioMixedProcessor", + "description": "Attach audio stream processor to the entire audio pipeline", + "returnType": "void", + "params": [ + { + "type": "AudioCallback", + "name": "processor" + } + ] + }, + { + "name": "DetachAudioMixedProcessor", + "description": "Detach audio stream processor from the entire audio pipeline", + "returnType": "void", + "params": [ + { + "type": "AudioCallback", + "name": "processor" + } + ] + } + ] +} diff --git a/raylib-api/raylib.lua b/raylib-api/raylib.lua new file mode 100644 index 0000000..0a1b958 --- /dev/null +++ b/raylib-api/raylib.lua @@ -0,0 +1,7588 @@ +return { + defines = { + { + name = "RAYLIB_H", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RAYLIB_VERSION_MAJOR", + type = "INT", + value = 4, + description = "" + }, + { + name = "RAYLIB_VERSION_MINOR", + type = "INT", + value = 5, + description = "" + }, + { + name = "RAYLIB_VERSION_PATCH", + type = "INT", + value = 0, + description = "" + }, + { + name = "RAYLIB_VERSION", + type = "STRING", + value = "4.5", + description = "" + }, + { + name = "__declspec(x)", + type = "MACRO", + value = "__attribute__((x))", + description = "" + }, + { + name = "RLAPI", + type = "UNKNOWN", + value = "__declspec(dllexport)", + description = "We are building the library as a Win32 shared library (.dll)" + }, + { + name = "PI", + type = "FLOAT", + value = 3.14159265358979323846, + description = "" + }, + { + name = "DEG2RAD", + type = "FLOAT_MATH", + value = "(PI/180.0f)", + description = "" + }, + { + name = "RAD2DEG", + type = "FLOAT_MATH", + value = "(180.0f/PI)", + description = "" + }, + { + name = "RL_MALLOC(sz)", + type = "MACRO", + value = "malloc(sz)", + description = "" + }, + { + name = "RL_CALLOC(n,sz)", + type = "MACRO", + value = "calloc(n,sz)", + description = "" + }, + { + name = "RL_REALLOC(ptr,sz)", + type = "MACRO", + value = "realloc(ptr,sz)", + description = "" + }, + { + name = "RL_FREE(ptr)", + type = "MACRO", + value = "free(ptr)", + description = "" + }, + { + name = "CLITERAL(type)", + type = "MACRO", + value = "type", + description = "" + }, + { + name = "RL_COLOR_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_RECTANGLE_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_VECTOR2_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_VECTOR3_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_VECTOR4_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_QUATERNION_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_MATRIX_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "LIGHTGRAY", + type = "COLOR", + value = "CLITERAL(Color){ 200, 200, 200, 255 }", + description = "Light Gray" + }, + { + name = "GRAY", + type = "COLOR", + value = "CLITERAL(Color){ 130, 130, 130, 255 }", + description = "Gray" + }, + { + name = "DARKGRAY", + type = "COLOR", + value = "CLITERAL(Color){ 80, 80, 80, 255 }", + description = "Dark Gray" + }, + { + name = "YELLOW", + type = "COLOR", + value = "CLITERAL(Color){ 253, 249, 0, 255 }", + description = "Yellow" + }, + { + name = "GOLD", + type = "COLOR", + value = "CLITERAL(Color){ 255, 203, 0, 255 }", + description = "Gold" + }, + { + name = "ORANGE", + type = "COLOR", + value = "CLITERAL(Color){ 255, 161, 0, 255 }", + description = "Orange" + }, + { + name = "PINK", + type = "COLOR", + value = "CLITERAL(Color){ 255, 109, 194, 255 }", + description = "Pink" + }, + { + name = "RED", + type = "COLOR", + value = "CLITERAL(Color){ 230, 41, 55, 255 }", + description = "Red" + }, + { + name = "MAROON", + type = "COLOR", + value = "CLITERAL(Color){ 190, 33, 55, 255 }", + description = "Maroon" + }, + { + name = "GREEN", + type = "COLOR", + value = "CLITERAL(Color){ 0, 228, 48, 255 }", + description = "Green" + }, + { + name = "LIME", + type = "COLOR", + value = "CLITERAL(Color){ 0, 158, 47, 255 }", + description = "Lime" + }, + { + name = "DARKGREEN", + type = "COLOR", + value = "CLITERAL(Color){ 0, 117, 44, 255 }", + description = "Dark Green" + }, + { + name = "SKYBLUE", + type = "COLOR", + value = "CLITERAL(Color){ 102, 191, 255, 255 }", + description = "Sky Blue" + }, + { + name = "BLUE", + type = "COLOR", + value = "CLITERAL(Color){ 0, 121, 241, 255 }", + description = "Blue" + }, + { + name = "DARKBLUE", + type = "COLOR", + value = "CLITERAL(Color){ 0, 82, 172, 255 }", + description = "Dark Blue" + }, + { + name = "PURPLE", + type = "COLOR", + value = "CLITERAL(Color){ 200, 122, 255, 255 }", + description = "Purple" + }, + { + name = "VIOLET", + type = "COLOR", + value = "CLITERAL(Color){ 135, 60, 190, 255 }", + description = "Violet" + }, + { + name = "DARKPURPLE", + type = "COLOR", + value = "CLITERAL(Color){ 112, 31, 126, 255 }", + description = "Dark Purple" + }, + { + name = "BEIGE", + type = "COLOR", + value = "CLITERAL(Color){ 211, 176, 131, 255 }", + description = "Beige" + }, + { + name = "BROWN", + type = "COLOR", + value = "CLITERAL(Color){ 127, 106, 79, 255 }", + description = "Brown" + }, + { + name = "DARKBROWN", + type = "COLOR", + value = "CLITERAL(Color){ 76, 63, 47, 255 }", + description = "Dark Brown" + }, + { + name = "WHITE", + type = "COLOR", + value = "CLITERAL(Color){ 255, 255, 255, 255 }", + description = "White" + }, + { + name = "BLACK", + type = "COLOR", + value = "CLITERAL(Color){ 0, 0, 0, 255 }", + description = "Black" + }, + { + name = "BLANK", + type = "COLOR", + value = "CLITERAL(Color){ 0, 0, 0, 0 }", + description = "Blank (Transparent)" + }, + { + name = "MAGENTA", + type = "COLOR", + value = "CLITERAL(Color){ 255, 0, 255, 255 }", + description = "Magenta" + }, + { + name = "RAYWHITE", + type = "COLOR", + value = "CLITERAL(Color){ 245, 245, 245, 255 }", + description = "My own White (raylib logo)" + }, + { + name = "RL_BOOL_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "MOUSE_LEFT_BUTTON", + type = "UNKNOWN", + value = "MOUSE_BUTTON_LEFT", + description = "" + }, + { + name = "MOUSE_RIGHT_BUTTON", + type = "UNKNOWN", + value = "MOUSE_BUTTON_RIGHT", + description = "" + }, + { + name = "MOUSE_MIDDLE_BUTTON", + type = "UNKNOWN", + value = "MOUSE_BUTTON_MIDDLE", + description = "" + }, + { + name = "MATERIAL_MAP_DIFFUSE", + type = "UNKNOWN", + value = "MATERIAL_MAP_ALBEDO", + description = "" + }, + { + name = "MATERIAL_MAP_SPECULAR", + type = "UNKNOWN", + value = "MATERIAL_MAP_METALNESS", + description = "" + }, + { + name = "SHADER_LOC_MAP_DIFFUSE", + type = "UNKNOWN", + value = "SHADER_LOC_MAP_ALBEDO", + description = "" + }, + { + name = "SHADER_LOC_MAP_SPECULAR", + type = "UNKNOWN", + value = "SHADER_LOC_MAP_METALNESS", + description = "" + } + }, + structs = { + { + name = "Vector2", + description = "Vector2, 2 components", + fields = { + { + type = "float", + name = "x", + description = "Vector x component" + }, + { + type = "float", + name = "y", + description = "Vector y component" + } + } + }, + { + name = "Vector3", + description = "Vector3, 3 components", + fields = { + { + type = "float", + name = "x", + description = "Vector x component" + }, + { + type = "float", + name = "y", + description = "Vector y component" + }, + { + type = "float", + name = "z", + description = "Vector z component" + } + } + }, + { + name = "Vector4", + description = "Vector4, 4 components", + fields = { + { + type = "float", + name = "x", + description = "Vector x component" + }, + { + type = "float", + name = "y", + description = "Vector y component" + }, + { + type = "float", + name = "z", + description = "Vector z component" + }, + { + type = "float", + name = "w", + description = "Vector w component" + } + } + }, + { + name = "Matrix", + description = "Matrix, 4x4 components, column major, OpenGL style, right-handed", + fields = { + { + type = "float", + name = "m0", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m4", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m8", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m12", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m1", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m5", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m9", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m13", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m2", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m6", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m10", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m14", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m3", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m7", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m11", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m15", + description = "Matrix fourth row (4 components)" + } + } + }, + { + name = "Color", + description = "Color, 4 components, R8G8B8A8 (32bit)", + fields = { + { + type = "unsigned char", + name = "r", + description = "Color red value" + }, + { + type = "unsigned char", + name = "g", + description = "Color green value" + }, + { + type = "unsigned char", + name = "b", + description = "Color blue value" + }, + { + type = "unsigned char", + name = "a", + description = "Color alpha value" + } + } + }, + { + name = "Rectangle", + description = "Rectangle, 4 components", + fields = { + { + type = "float", + name = "x", + description = "Rectangle top-left corner position x" + }, + { + type = "float", + name = "y", + description = "Rectangle top-left corner position y" + }, + { + type = "float", + name = "width", + description = "Rectangle width" + }, + { + type = "float", + name = "height", + description = "Rectangle height" + } + } + }, + { + name = "Image", + description = "Image, pixel data stored in CPU memory (RAM)", + fields = { + { + type = "void *", + name = "data", + description = "Image raw data" + }, + { + type = "int", + name = "width", + description = "Image base width" + }, + { + type = "int", + name = "height", + description = "Image base height" + }, + { + type = "int", + name = "mipmaps", + description = "Mipmap levels, 1 by default" + }, + { + type = "int", + name = "format", + description = "Data format (PixelFormat type)" + } + } + }, + { + name = "Texture", + description = "Texture, tex data stored in GPU memory (VRAM)", + fields = { + { + type = "unsigned int", + name = "id", + description = "OpenGL texture id" + }, + { + type = "int", + name = "width", + description = "Texture base width" + }, + { + type = "int", + name = "height", + description = "Texture base height" + }, + { + type = "int", + name = "mipmaps", + description = "Mipmap levels, 1 by default" + }, + { + type = "int", + name = "format", + description = "Data format (PixelFormat type)" + } + } + }, + { + name = "RenderTexture", + description = "RenderTexture, fbo for texture rendering", + fields = { + { + type = "unsigned int", + name = "id", + description = "OpenGL framebuffer object id" + }, + { + type = "Texture", + name = "texture", + description = "Color buffer attachment texture" + }, + { + type = "Texture", + name = "depth", + description = "Depth buffer attachment texture" + } + } + }, + { + name = "NPatchInfo", + description = "NPatchInfo, n-patch layout info", + fields = { + { + type = "Rectangle", + name = "source", + description = "Texture source rectangle" + }, + { + type = "int", + name = "left", + description = "Left border offset" + }, + { + type = "int", + name = "top", + description = "Top border offset" + }, + { + type = "int", + name = "right", + description = "Right border offset" + }, + { + type = "int", + name = "bottom", + description = "Bottom border offset" + }, + { + type = "int", + name = "layout", + description = "Layout of the n-patch: 3x3, 1x3 or 3x1" + } + } + }, + { + name = "GlyphInfo", + description = "GlyphInfo, font characters glyphs info", + fields = { + { + type = "int", + name = "value", + description = "Character value (Unicode)" + }, + { + type = "int", + name = "offsetX", + description = "Character offset X when drawing" + }, + { + type = "int", + name = "offsetY", + description = "Character offset Y when drawing" + }, + { + type = "int", + name = "advanceX", + description = "Character advance position X" + }, + { + type = "Image", + name = "image", + description = "Character image data" + } + } + }, + { + name = "Font", + description = "Font, font texture and GlyphInfo array data", + fields = { + { + type = "int", + name = "baseSize", + description = "Base size (default chars height)" + }, + { + type = "int", + name = "glyphCount", + description = "Number of glyph characters" + }, + { + type = "int", + name = "glyphPadding", + description = "Padding around the glyph characters" + }, + { + type = "Texture2D", + name = "texture", + description = "Texture atlas containing the glyphs" + }, + { + type = "Rectangle *", + name = "recs", + description = "Rectangles in texture for the glyphs" + }, + { + type = "GlyphInfo *", + name = "glyphs", + description = "Glyphs info data" + } + } + }, + { + name = "Camera3D", + description = "Camera, defines position/orientation in 3d space", + fields = { + { + type = "Vector3", + name = "position", + description = "Camera position" + }, + { + type = "Vector3", + name = "target", + description = "Camera target it looks-at" + }, + { + type = "Vector3", + name = "up", + description = "Camera up vector (rotation over its axis)" + }, + { + type = "float", + name = "fovy", + description = "Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic" + }, + { + type = "int", + name = "projection", + description = "Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC" + } + } + }, + { + name = "Camera2D", + description = "Camera2D, defines position/orientation in 2d space", + fields = { + { + type = "Vector2", + name = "offset", + description = "Camera offset (displacement from target)" + }, + { + type = "Vector2", + name = "target", + description = "Camera target (rotation and zoom origin)" + }, + { + type = "float", + name = "rotation", + description = "Camera rotation in degrees" + }, + { + type = "float", + name = "zoom", + description = "Camera zoom (scaling), should be 1.0f by default" + } + } + }, + { + name = "Mesh", + description = "Mesh, vertex data and vao/vbo", + fields = { + { + type = "int", + name = "vertexCount", + description = "Number of vertices stored in arrays" + }, + { + type = "int", + name = "triangleCount", + description = "Number of triangles stored (indexed or not)" + }, + { + type = "float *", + name = "vertices", + description = "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)" + }, + { + type = "float *", + name = "texcoords", + description = "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)" + }, + { + type = "float *", + name = "texcoords2", + description = "Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5)" + }, + { + type = "float *", + name = "normals", + description = "Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)" + }, + { + type = "float *", + name = "tangents", + description = "Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)" + }, + { + type = "unsigned char *", + name = "colors", + description = "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)" + }, + { + type = "unsigned short *", + name = "indices", + description = "Vertex indices (in case vertex data comes indexed)" + }, + { + type = "float *", + name = "animVertices", + description = "Animated vertex positions (after bones transformations)" + }, + { + type = "float *", + name = "animNormals", + description = "Animated normals (after bones transformations)" + }, + { + type = "unsigned char *", + name = "boneIds", + description = "Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning)" + }, + { + type = "float *", + name = "boneWeights", + description = "Vertex bone weight, up to 4 bones influence by vertex (skinning)" + }, + { + type = "unsigned int", + name = "vaoId", + description = "OpenGL Vertex Array Object id" + }, + { + type = "unsigned int *", + name = "vboId", + description = "OpenGL Vertex Buffer Objects id (default vertex data)" + } + } + }, + { + name = "Shader", + description = "Shader", + fields = { + { + type = "unsigned int", + name = "id", + description = "Shader program id" + }, + { + type = "int *", + name = "locs", + description = "Shader locations array (RL_MAX_SHADER_LOCATIONS)" + } + } + }, + { + name = "MaterialMap", + description = "MaterialMap", + fields = { + { + type = "Texture2D", + name = "texture", + description = "Material map texture" + }, + { + type = "Color", + name = "color", + description = "Material map color" + }, + { + type = "float", + name = "value", + description = "Material map value" + } + } + }, + { + name = "Material", + description = "Material, includes shader and maps", + fields = { + { + type = "Shader", + name = "shader", + description = "Material shader" + }, + { + type = "MaterialMap *", + name = "maps", + description = "Material maps array (MAX_MATERIAL_MAPS)" + }, + { + type = "float[4]", + name = "params", + description = "Material generic parameters (if required)" + } + } + }, + { + name = "Transform", + description = "Transform, vertex transformation data", + fields = { + { + type = "Vector3", + name = "translation", + description = "Translation" + }, + { + type = "Quaternion", + name = "rotation", + description = "Rotation" + }, + { + type = "Vector3", + name = "scale", + description = "Scale" + } + } + }, + { + name = "BoneInfo", + description = "Bone, skeletal animation bone", + fields = { + { + type = "char[32]", + name = "name", + description = "Bone name" + }, + { + type = "int", + name = "parent", + description = "Bone parent" + } + } + }, + { + name = "Model", + description = "Model, meshes, materials and animation data", + fields = { + { + type = "Matrix", + name = "transform", + description = "Local transform matrix" + }, + { + type = "int", + name = "meshCount", + description = "Number of meshes" + }, + { + type = "int", + name = "materialCount", + description = "Number of materials" + }, + { + type = "Mesh *", + name = "meshes", + description = "Meshes array" + }, + { + type = "Material *", + name = "materials", + description = "Materials array" + }, + { + type = "int *", + name = "meshMaterial", + description = "Mesh material number" + }, + { + type = "int", + name = "boneCount", + description = "Number of bones" + }, + { + type = "BoneInfo *", + name = "bones", + description = "Bones information (skeleton)" + }, + { + type = "Transform *", + name = "bindPose", + description = "Bones base transformation (pose)" + } + } + }, + { + name = "ModelAnimation", + description = "ModelAnimation", + fields = { + { + type = "int", + name = "boneCount", + description = "Number of bones" + }, + { + type = "int", + name = "frameCount", + description = "Number of animation frames" + }, + { + type = "BoneInfo *", + name = "bones", + description = "Bones information (skeleton)" + }, + { + type = "Transform **", + name = "framePoses", + description = "Poses array by frame" + } + } + }, + { + name = "Ray", + description = "Ray, ray for raycasting", + fields = { + { + type = "Vector3", + name = "position", + description = "Ray position (origin)" + }, + { + type = "Vector3", + name = "direction", + description = "Ray direction" + } + } + }, + { + name = "RayCollision", + description = "RayCollision, ray hit information", + fields = { + { + type = "bool", + name = "hit", + description = "Did the ray hit something?" + }, + { + type = "float", + name = "distance", + description = "Distance to the nearest hit" + }, + { + type = "Vector3", + name = "point", + description = "Point of the nearest hit" + }, + { + type = "Vector3", + name = "normal", + description = "Surface normal of hit" + } + } + }, + { + name = "BoundingBox", + description = "BoundingBox", + fields = { + { + type = "Vector3", + name = "min", + description = "Minimum vertex box-corner" + }, + { + type = "Vector3", + name = "max", + description = "Maximum vertex box-corner" + } + } + }, + { + name = "Wave", + description = "Wave, audio wave data", + fields = { + { + type = "unsigned int", + name = "frameCount", + description = "Total number of frames (considering channels)" + }, + { + type = "unsigned int", + name = "sampleRate", + description = "Frequency (samples per second)" + }, + { + type = "unsigned int", + name = "sampleSize", + description = "Bit depth (bits per sample): 8, 16, 32 (24 not supported)" + }, + { + type = "unsigned int", + name = "channels", + description = "Number of channels (1-mono, 2-stereo, ...)" + }, + { + type = "void *", + name = "data", + description = "Buffer data pointer" + } + } + }, + { + name = "AudioStream", + description = "AudioStream, custom audio stream", + fields = { + { + type = "rAudioBuffer *", + name = "buffer", + description = "Pointer to internal data used by the audio system" + }, + { + type = "rAudioProcessor *", + name = "processor", + description = "Pointer to internal data processor, useful for audio effects" + }, + { + type = "unsigned int", + name = "sampleRate", + description = "Frequency (samples per second)" + }, + { + type = "unsigned int", + name = "sampleSize", + description = "Bit depth (bits per sample): 8, 16, 32 (24 not supported)" + }, + { + type = "unsigned int", + name = "channels", + description = "Number of channels (1-mono, 2-stereo, ...)" + } + } + }, + { + name = "Sound", + description = "Sound", + fields = { + { + type = "AudioStream", + name = "stream", + description = "Audio stream" + }, + { + type = "unsigned int", + name = "frameCount", + description = "Total number of frames (considering channels)" + } + } + }, + { + name = "Music", + description = "Music, audio stream, anything longer than ~10 seconds should be streamed", + fields = { + { + type = "AudioStream", + name = "stream", + description = "Audio stream" + }, + { + type = "unsigned int", + name = "frameCount", + description = "Total number of frames (considering channels)" + }, + { + type = "bool", + name = "looping", + description = "Music looping enable" + }, + { + type = "int", + name = "ctxType", + description = "Type of music context (audio filetype)" + }, + { + type = "void *", + name = "ctxData", + description = "Audio context data, depends on type" + } + } + }, + { + name = "VrDeviceInfo", + description = "VrDeviceInfo, Head-Mounted-Display device parameters", + fields = { + { + type = "int", + name = "hResolution", + description = "Horizontal resolution in pixels" + }, + { + type = "int", + name = "vResolution", + description = "Vertical resolution in pixels" + }, + { + type = "float", + name = "hScreenSize", + description = "Horizontal size in meters" + }, + { + type = "float", + name = "vScreenSize", + description = "Vertical size in meters" + }, + { + type = "float", + name = "vScreenCenter", + description = "Screen center in meters" + }, + { + type = "float", + name = "eyeToScreenDistance", + description = "Distance between eye and display in meters" + }, + { + type = "float", + name = "lensSeparationDistance", + description = "Lens separation distance in meters" + }, + { + type = "float", + name = "interpupillaryDistance", + description = "IPD (distance between pupils) in meters" + }, + { + type = "float[4]", + name = "lensDistortionValues", + description = "Lens distortion constant parameters" + }, + { + type = "float[4]", + name = "chromaAbCorrection", + description = "Chromatic aberration correction parameters" + } + } + }, + { + name = "VrStereoConfig", + description = "VrStereoConfig, VR stereo rendering configuration for simulator", + fields = { + { + type = "Matrix[2]", + name = "projection", + description = "VR projection matrices (per eye)" + }, + { + type = "Matrix[2]", + name = "viewOffset", + description = "VR view offset matrices (per eye)" + }, + { + type = "float[2]", + name = "leftLensCenter", + description = "VR left lens center" + }, + { + type = "float[2]", + name = "rightLensCenter", + description = "VR right lens center" + }, + { + type = "float[2]", + name = "leftScreenCenter", + description = "VR left screen center" + }, + { + type = "float[2]", + name = "rightScreenCenter", + description = "VR right screen center" + }, + { + type = "float[2]", + name = "scale", + description = "VR distortion scale" + }, + { + type = "float[2]", + name = "scaleIn", + description = "VR distortion scale in" + } + } + }, + { + name = "FilePathList", + description = "File path list", + fields = { + { + type = "unsigned int", + name = "capacity", + description = "Filepaths max entries" + }, + { + type = "unsigned int", + name = "count", + description = "Filepaths entries count" + }, + { + type = "char **", + name = "paths", + description = "Filepaths entries" + } + } + } + }, + aliases = { + { + type = "Vector4", + name = "Quaternion", + description = "Quaternion, 4 components (Vector4 alias)" + }, + { + type = "Texture", + name = "Texture2D", + description = "Texture2D, same as Texture" + }, + { + type = "Texture", + name = "TextureCubemap", + description = "TextureCubemap, same as Texture" + }, + { + type = "RenderTexture", + name = "RenderTexture2D", + description = "RenderTexture2D, same as RenderTexture" + }, + { + type = "Camera3D", + name = "Camera", + description = "Camera type fallback, defaults to Camera3D" + } + }, + enums = { + { + name = "ConfigFlags", + description = "System/Window config flags", + values = { + { + name = "FLAG_VSYNC_HINT", + value = 64, + description = "Set to try enabling V-Sync on GPU" + }, + { + name = "FLAG_FULLSCREEN_MODE", + value = 2, + description = "Set to run program in fullscreen" + }, + { + name = "FLAG_WINDOW_RESIZABLE", + value = 4, + description = "Set to allow resizable window" + }, + { + name = "FLAG_WINDOW_UNDECORATED", + value = 8, + description = "Set to disable window decoration (frame and buttons)" + }, + { + name = "FLAG_WINDOW_HIDDEN", + value = 128, + description = "Set to hide window" + }, + { + name = "FLAG_WINDOW_MINIMIZED", + value = 512, + description = "Set to minimize window (iconify)" + }, + { + name = "FLAG_WINDOW_MAXIMIZED", + value = 1024, + description = "Set to maximize window (expanded to monitor)" + }, + { + name = "FLAG_WINDOW_UNFOCUSED", + value = 2048, + description = "Set to window non focused" + }, + { + name = "FLAG_WINDOW_TOPMOST", + value = 4096, + description = "Set to window always on top" + }, + { + name = "FLAG_WINDOW_ALWAYS_RUN", + value = 256, + description = "Set to allow windows running while minimized" + }, + { + name = "FLAG_WINDOW_TRANSPARENT", + value = 16, + description = "Set to allow transparent framebuffer" + }, + { + name = "FLAG_WINDOW_HIGHDPI", + value = 8192, + description = "Set to support HighDPI" + }, + { + name = "FLAG_WINDOW_MOUSE_PASSTHROUGH", + value = 16384, + description = "Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED" + }, + { + name = "FLAG_MSAA_4X_HINT", + value = 32, + description = "Set to try enabling MSAA 4X" + }, + { + name = "FLAG_INTERLACED_HINT", + value = 65536, + description = "Set to try enabling interlaced video format (for V3D)" + } + } + }, + { + name = "TraceLogLevel", + description = "Trace log level", + values = { + { + name = "LOG_ALL", + value = 0, + description = "Display all logs" + }, + { + name = "LOG_TRACE", + value = 1, + description = "Trace logging, intended for internal use only" + }, + { + name = "LOG_DEBUG", + value = 2, + description = "Debug logging, used for internal debugging, it should be disabled on release builds" + }, + { + name = "LOG_INFO", + value = 3, + description = "Info logging, used for program execution info" + }, + { + name = "LOG_WARNING", + value = 4, + description = "Warning logging, used on recoverable failures" + }, + { + name = "LOG_ERROR", + value = 5, + description = "Error logging, used on unrecoverable failures" + }, + { + name = "LOG_FATAL", + value = 6, + description = "Fatal logging, used to abort program: exit(EXIT_FAILURE)" + }, + { + name = "LOG_NONE", + value = 7, + description = "Disable logging" + } + } + }, + { + name = "KeyboardKey", + description = "Keyboard keys (US keyboard layout)", + values = { + { + name = "KEY_NULL", + value = 0, + description = "Key: NULL, used for no key pressed" + }, + { + name = "KEY_APOSTROPHE", + value = 39, + description = "Key: '" + }, + { + name = "KEY_COMMA", + value = 44, + description = "Key: ," + }, + { + name = "KEY_MINUS", + value = 45, + description = "Key: -" + }, + { + name = "KEY_PERIOD", + value = 46, + description = "Key: ." + }, + { + name = "KEY_SLASH", + value = 47, + description = "Key: /" + }, + { + name = "KEY_ZERO", + value = 48, + description = "Key: 0" + }, + { + name = "KEY_ONE", + value = 49, + description = "Key: 1" + }, + { + name = "KEY_TWO", + value = 50, + description = "Key: 2" + }, + { + name = "KEY_THREE", + value = 51, + description = "Key: 3" + }, + { + name = "KEY_FOUR", + value = 52, + description = "Key: 4" + }, + { + name = "KEY_FIVE", + value = 53, + description = "Key: 5" + }, + { + name = "KEY_SIX", + value = 54, + description = "Key: 6" + }, + { + name = "KEY_SEVEN", + value = 55, + description = "Key: 7" + }, + { + name = "KEY_EIGHT", + value = 56, + description = "Key: 8" + }, + { + name = "KEY_NINE", + value = 57, + description = "Key: 9" + }, + { + name = "KEY_SEMICOLON", + value = 59, + description = "Key: ;" + }, + { + name = "KEY_EQUAL", + value = 61, + description = "Key: =" + }, + { + name = "KEY_A", + value = 65, + description = "Key: A | a" + }, + { + name = "KEY_B", + value = 66, + description = "Key: B | b" + }, + { + name = "KEY_C", + value = 67, + description = "Key: C | c" + }, + { + name = "KEY_D", + value = 68, + description = "Key: D | d" + }, + { + name = "KEY_E", + value = 69, + description = "Key: E | e" + }, + { + name = "KEY_F", + value = 70, + description = "Key: F | f" + }, + { + name = "KEY_G", + value = 71, + description = "Key: G | g" + }, + { + name = "KEY_H", + value = 72, + description = "Key: H | h" + }, + { + name = "KEY_I", + value = 73, + description = "Key: I | i" + }, + { + name = "KEY_J", + value = 74, + description = "Key: J | j" + }, + { + name = "KEY_K", + value = 75, + description = "Key: K | k" + }, + { + name = "KEY_L", + value = 76, + description = "Key: L | l" + }, + { + name = "KEY_M", + value = 77, + description = "Key: M | m" + }, + { + name = "KEY_N", + value = 78, + description = "Key: N | n" + }, + { + name = "KEY_O", + value = 79, + description = "Key: O | o" + }, + { + name = "KEY_P", + value = 80, + description = "Key: P | p" + }, + { + name = "KEY_Q", + value = 81, + description = "Key: Q | q" + }, + { + name = "KEY_R", + value = 82, + description = "Key: R | r" + }, + { + name = "KEY_S", + value = 83, + description = "Key: S | s" + }, + { + name = "KEY_T", + value = 84, + description = "Key: T | t" + }, + { + name = "KEY_U", + value = 85, + description = "Key: U | u" + }, + { + name = "KEY_V", + value = 86, + description = "Key: V | v" + }, + { + name = "KEY_W", + value = 87, + description = "Key: W | w" + }, + { + name = "KEY_X", + value = 88, + description = "Key: X | x" + }, + { + name = "KEY_Y", + value = 89, + description = "Key: Y | y" + }, + { + name = "KEY_Z", + value = 90, + description = "Key: Z | z" + }, + { + name = "KEY_LEFT_BRACKET", + value = 91, + description = "Key: [" + }, + { + name = "KEY_BACKSLASH", + value = 92, + description = "Key: '\\'" + }, + { + name = "KEY_RIGHT_BRACKET", + value = 93, + description = "Key: ]" + }, + { + name = "KEY_GRAVE", + value = 96, + description = "Key: `" + }, + { + name = "KEY_SPACE", + value = 32, + description = "Key: Space" + }, + { + name = "KEY_ESCAPE", + value = 256, + description = "Key: Esc" + }, + { + name = "KEY_ENTER", + value = 257, + description = "Key: Enter" + }, + { + name = "KEY_TAB", + value = 258, + description = "Key: Tab" + }, + { + name = "KEY_BACKSPACE", + value = 259, + description = "Key: Backspace" + }, + { + name = "KEY_INSERT", + value = 260, + description = "Key: Ins" + }, + { + name = "KEY_DELETE", + value = 261, + description = "Key: Del" + }, + { + name = "KEY_RIGHT", + value = 262, + description = "Key: Cursor right" + }, + { + name = "KEY_LEFT", + value = 263, + description = "Key: Cursor left" + }, + { + name = "KEY_DOWN", + value = 264, + description = "Key: Cursor down" + }, + { + name = "KEY_UP", + value = 265, + description = "Key: Cursor up" + }, + { + name = "KEY_PAGE_UP", + value = 266, + description = "Key: Page up" + }, + { + name = "KEY_PAGE_DOWN", + value = 267, + description = "Key: Page down" + }, + { + name = "KEY_HOME", + value = 268, + description = "Key: Home" + }, + { + name = "KEY_END", + value = 269, + description = "Key: End" + }, + { + name = "KEY_CAPS_LOCK", + value = 280, + description = "Key: Caps lock" + }, + { + name = "KEY_SCROLL_LOCK", + value = 281, + description = "Key: Scroll down" + }, + { + name = "KEY_NUM_LOCK", + value = 282, + description = "Key: Num lock" + }, + { + name = "KEY_PRINT_SCREEN", + value = 283, + description = "Key: Print screen" + }, + { + name = "KEY_PAUSE", + value = 284, + description = "Key: Pause" + }, + { + name = "KEY_F1", + value = 290, + description = "Key: F1" + }, + { + name = "KEY_F2", + value = 291, + description = "Key: F2" + }, + { + name = "KEY_F3", + value = 292, + description = "Key: F3" + }, + { + name = "KEY_F4", + value = 293, + description = "Key: F4" + }, + { + name = "KEY_F5", + value = 294, + description = "Key: F5" + }, + { + name = "KEY_F6", + value = 295, + description = "Key: F6" + }, + { + name = "KEY_F7", + value = 296, + description = "Key: F7" + }, + { + name = "KEY_F8", + value = 297, + description = "Key: F8" + }, + { + name = "KEY_F9", + value = 298, + description = "Key: F9" + }, + { + name = "KEY_F10", + value = 299, + description = "Key: F10" + }, + { + name = "KEY_F11", + value = 300, + description = "Key: F11" + }, + { + name = "KEY_F12", + value = 301, + description = "Key: F12" + }, + { + name = "KEY_LEFT_SHIFT", + value = 340, + description = "Key: Shift left" + }, + { + name = "KEY_LEFT_CONTROL", + value = 341, + description = "Key: Control left" + }, + { + name = "KEY_LEFT_ALT", + value = 342, + description = "Key: Alt left" + }, + { + name = "KEY_LEFT_SUPER", + value = 343, + description = "Key: Super left" + }, + { + name = "KEY_RIGHT_SHIFT", + value = 344, + description = "Key: Shift right" + }, + { + name = "KEY_RIGHT_CONTROL", + value = 345, + description = "Key: Control right" + }, + { + name = "KEY_RIGHT_ALT", + value = 346, + description = "Key: Alt right" + }, + { + name = "KEY_RIGHT_SUPER", + value = 347, + description = "Key: Super right" + }, + { + name = "KEY_KB_MENU", + value = 348, + description = "Key: KB menu" + }, + { + name = "KEY_KP_0", + value = 320, + description = "Key: Keypad 0" + }, + { + name = "KEY_KP_1", + value = 321, + description = "Key: Keypad 1" + }, + { + name = "KEY_KP_2", + value = 322, + description = "Key: Keypad 2" + }, + { + name = "KEY_KP_3", + value = 323, + description = "Key: Keypad 3" + }, + { + name = "KEY_KP_4", + value = 324, + description = "Key: Keypad 4" + }, + { + name = "KEY_KP_5", + value = 325, + description = "Key: Keypad 5" + }, + { + name = "KEY_KP_6", + value = 326, + description = "Key: Keypad 6" + }, + { + name = "KEY_KP_7", + value = 327, + description = "Key: Keypad 7" + }, + { + name = "KEY_KP_8", + value = 328, + description = "Key: Keypad 8" + }, + { + name = "KEY_KP_9", + value = 329, + description = "Key: Keypad 9" + }, + { + name = "KEY_KP_DECIMAL", + value = 330, + description = "Key: Keypad ." + }, + { + name = "KEY_KP_DIVIDE", + value = 331, + description = "Key: Keypad /" + }, + { + name = "KEY_KP_MULTIPLY", + value = 332, + description = "Key: Keypad *" + }, + { + name = "KEY_KP_SUBTRACT", + value = 333, + description = "Key: Keypad -" + }, + { + name = "KEY_KP_ADD", + value = 334, + description = "Key: Keypad +" + }, + { + name = "KEY_KP_ENTER", + value = 335, + description = "Key: Keypad Enter" + }, + { + name = "KEY_KP_EQUAL", + value = 336, + description = "Key: Keypad =" + }, + { + name = "KEY_BACK", + value = 4, + description = "Key: Android back button" + }, + { + name = "KEY_MENU", + value = 82, + description = "Key: Android menu button" + }, + { + name = "KEY_VOLUME_UP", + value = 24, + description = "Key: Android volume up button" + }, + { + name = "KEY_VOLUME_DOWN", + value = 25, + description = "Key: Android volume down button" + } + } + }, + { + name = "MouseButton", + description = "Mouse buttons", + values = { + { + name = "MOUSE_BUTTON_LEFT", + value = 0, + description = "Mouse button left" + }, + { + name = "MOUSE_BUTTON_RIGHT", + value = 1, + description = "Mouse button right" + }, + { + name = "MOUSE_BUTTON_MIDDLE", + value = 2, + description = "Mouse button middle (pressed wheel)" + }, + { + name = "MOUSE_BUTTON_SIDE", + value = 3, + description = "Mouse button side (advanced mouse device)" + }, + { + name = "MOUSE_BUTTON_EXTRA", + value = 4, + description = "Mouse button extra (advanced mouse device)" + }, + { + name = "MOUSE_BUTTON_FORWARD", + value = 5, + description = "Mouse button forward (advanced mouse device)" + }, + { + name = "MOUSE_BUTTON_BACK", + value = 6, + description = "Mouse button back (advanced mouse device)" + } + } + }, + { + name = "MouseCursor", + description = "Mouse cursor", + values = { + { + name = "MOUSE_CURSOR_DEFAULT", + value = 0, + description = "Default pointer shape" + }, + { + name = "MOUSE_CURSOR_ARROW", + value = 1, + description = "Arrow shape" + }, + { + name = "MOUSE_CURSOR_IBEAM", + value = 2, + description = "Text writing cursor shape" + }, + { + name = "MOUSE_CURSOR_CROSSHAIR", + value = 3, + description = "Cross shape" + }, + { + name = "MOUSE_CURSOR_POINTING_HAND", + value = 4, + description = "Pointing hand cursor" + }, + { + name = "MOUSE_CURSOR_RESIZE_EW", + value = 5, + description = "Horizontal resize/move arrow shape" + }, + { + name = "MOUSE_CURSOR_RESIZE_NS", + value = 6, + description = "Vertical resize/move arrow shape" + }, + { + name = "MOUSE_CURSOR_RESIZE_NWSE", + value = 7, + description = "Top-left to bottom-right diagonal resize/move arrow shape" + }, + { + name = "MOUSE_CURSOR_RESIZE_NESW", + value = 8, + description = "The top-right to bottom-left diagonal resize/move arrow shape" + }, + { + name = "MOUSE_CURSOR_RESIZE_ALL", + value = 9, + description = "The omnidirectional resize/move cursor shape" + }, + { + name = "MOUSE_CURSOR_NOT_ALLOWED", + value = 10, + description = "The operation-not-allowed shape" + } + } + }, + { + name = "GamepadButton", + description = "Gamepad buttons", + values = { + { + name = "GAMEPAD_BUTTON_UNKNOWN", + value = 0, + description = "Unknown button, just for error checking" + }, + { + name = "GAMEPAD_BUTTON_LEFT_FACE_UP", + value = 1, + description = "Gamepad left DPAD up button" + }, + { + name = "GAMEPAD_BUTTON_LEFT_FACE_RIGHT", + value = 2, + description = "Gamepad left DPAD right button" + }, + { + name = "GAMEPAD_BUTTON_LEFT_FACE_DOWN", + value = 3, + description = "Gamepad left DPAD down button" + }, + { + name = "GAMEPAD_BUTTON_LEFT_FACE_LEFT", + value = 4, + description = "Gamepad left DPAD left button" + }, + { + name = "GAMEPAD_BUTTON_RIGHT_FACE_UP", + value = 5, + description = "Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)" + }, + { + name = "GAMEPAD_BUTTON_RIGHT_FACE_RIGHT", + value = 6, + description = "Gamepad right button right (i.e. PS3: Square, Xbox: X)" + }, + { + name = "GAMEPAD_BUTTON_RIGHT_FACE_DOWN", + value = 7, + description = "Gamepad right button down (i.e. PS3: Cross, Xbox: A)" + }, + { + name = "GAMEPAD_BUTTON_RIGHT_FACE_LEFT", + value = 8, + description = "Gamepad right button left (i.e. PS3: Circle, Xbox: B)" + }, + { + name = "GAMEPAD_BUTTON_LEFT_TRIGGER_1", + value = 9, + description = "Gamepad top/back trigger left (first), it could be a trailing button" + }, + { + name = "GAMEPAD_BUTTON_LEFT_TRIGGER_2", + value = 10, + description = "Gamepad top/back trigger left (second), it could be a trailing button" + }, + { + name = "GAMEPAD_BUTTON_RIGHT_TRIGGER_1", + value = 11, + description = "Gamepad top/back trigger right (one), it could be a trailing button" + }, + { + name = "GAMEPAD_BUTTON_RIGHT_TRIGGER_2", + value = 12, + description = "Gamepad top/back trigger right (second), it could be a trailing button" + }, + { + name = "GAMEPAD_BUTTON_MIDDLE_LEFT", + value = 13, + description = "Gamepad center buttons, left one (i.e. PS3: Select)" + }, + { + name = "GAMEPAD_BUTTON_MIDDLE", + value = 14, + description = "Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)" + }, + { + name = "GAMEPAD_BUTTON_MIDDLE_RIGHT", + value = 15, + description = "Gamepad center buttons, right one (i.e. PS3: Start)" + }, + { + name = "GAMEPAD_BUTTON_LEFT_THUMB", + value = 16, + description = "Gamepad joystick pressed button left" + }, + { + name = "GAMEPAD_BUTTON_RIGHT_THUMB", + value = 17, + description = "Gamepad joystick pressed button right" + } + } + }, + { + name = "GamepadAxis", + description = "Gamepad axis", + values = { + { + name = "GAMEPAD_AXIS_LEFT_X", + value = 0, + description = "Gamepad left stick X axis" + }, + { + name = "GAMEPAD_AXIS_LEFT_Y", + value = 1, + description = "Gamepad left stick Y axis" + }, + { + name = "GAMEPAD_AXIS_RIGHT_X", + value = 2, + description = "Gamepad right stick X axis" + }, + { + name = "GAMEPAD_AXIS_RIGHT_Y", + value = 3, + description = "Gamepad right stick Y axis" + }, + { + name = "GAMEPAD_AXIS_LEFT_TRIGGER", + value = 4, + description = "Gamepad back trigger left, pressure level: [1..-1]" + }, + { + name = "GAMEPAD_AXIS_RIGHT_TRIGGER", + value = 5, + description = "Gamepad back trigger right, pressure level: [1..-1]" + } + } + }, + { + name = "MaterialMapIndex", + description = "Material map index", + values = { + { + name = "MATERIAL_MAP_ALBEDO", + value = 0, + description = "Albedo material (same as: MATERIAL_MAP_DIFFUSE)" + }, + { + name = "MATERIAL_MAP_METALNESS", + value = 1, + description = "Metalness material (same as: MATERIAL_MAP_SPECULAR)" + }, + { + name = "MATERIAL_MAP_NORMAL", + value = 2, + description = "Normal material" + }, + { + name = "MATERIAL_MAP_ROUGHNESS", + value = 3, + description = "Roughness material" + }, + { + name = "MATERIAL_MAP_OCCLUSION", + value = 4, + description = "Ambient occlusion material" + }, + { + name = "MATERIAL_MAP_EMISSION", + value = 5, + description = "Emission material" + }, + { + name = "MATERIAL_MAP_HEIGHT", + value = 6, + description = "Heightmap material" + }, + { + name = "MATERIAL_MAP_CUBEMAP", + value = 7, + description = "Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + name = "MATERIAL_MAP_IRRADIANCE", + value = 8, + description = "Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + name = "MATERIAL_MAP_PREFILTER", + value = 9, + description = "Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)" + }, + { + name = "MATERIAL_MAP_BRDF", + value = 10, + description = "Brdf material" + } + } + }, + { + name = "ShaderLocationIndex", + description = "Shader location index", + values = { + { + name = "SHADER_LOC_VERTEX_POSITION", + value = 0, + description = "Shader location: vertex attribute: position" + }, + { + name = "SHADER_LOC_VERTEX_TEXCOORD01", + value = 1, + description = "Shader location: vertex attribute: texcoord01" + }, + { + name = "SHADER_LOC_VERTEX_TEXCOORD02", + value = 2, + description = "Shader location: vertex attribute: texcoord02" + }, + { + name = "SHADER_LOC_VERTEX_NORMAL", + value = 3, + description = "Shader location: vertex attribute: normal" + }, + { + name = "SHADER_LOC_VERTEX_TANGENT", + value = 4, + description = "Shader location: vertex attribute: tangent" + }, + { + name = "SHADER_LOC_VERTEX_COLOR", + value = 5, + description = "Shader location: vertex attribute: color" + }, + { + name = "SHADER_LOC_MATRIX_MVP", + value = 6, + description = "Shader location: matrix uniform: model-view-projection" + }, + { + name = "SHADER_LOC_MATRIX_VIEW", + value = 7, + description = "Shader location: matrix uniform: view (camera transform)" + }, + { + name = "SHADER_LOC_MATRIX_PROJECTION", + value = 8, + description = "Shader location: matrix uniform: projection" + }, + { + name = "SHADER_LOC_MATRIX_MODEL", + value = 9, + description = "Shader location: matrix uniform: model (transform)" + }, + { + name = "SHADER_LOC_MATRIX_NORMAL", + value = 10, + description = "Shader location: matrix uniform: normal" + }, + { + name = "SHADER_LOC_VECTOR_VIEW", + value = 11, + description = "Shader location: vector uniform: view" + }, + { + name = "SHADER_LOC_COLOR_DIFFUSE", + value = 12, + description = "Shader location: vector uniform: diffuse color" + }, + { + name = "SHADER_LOC_COLOR_SPECULAR", + value = 13, + description = "Shader location: vector uniform: specular color" + }, + { + name = "SHADER_LOC_COLOR_AMBIENT", + value = 14, + description = "Shader location: vector uniform: ambient color" + }, + { + name = "SHADER_LOC_MAP_ALBEDO", + value = 15, + description = "Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)" + }, + { + name = "SHADER_LOC_MAP_METALNESS", + value = 16, + description = "Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)" + }, + { + name = "SHADER_LOC_MAP_NORMAL", + value = 17, + description = "Shader location: sampler2d texture: normal" + }, + { + name = "SHADER_LOC_MAP_ROUGHNESS", + value = 18, + description = "Shader location: sampler2d texture: roughness" + }, + { + name = "SHADER_LOC_MAP_OCCLUSION", + value = 19, + description = "Shader location: sampler2d texture: occlusion" + }, + { + name = "SHADER_LOC_MAP_EMISSION", + value = 20, + description = "Shader location: sampler2d texture: emission" + }, + { + name = "SHADER_LOC_MAP_HEIGHT", + value = 21, + description = "Shader location: sampler2d texture: height" + }, + { + name = "SHADER_LOC_MAP_CUBEMAP", + value = 22, + description = "Shader location: samplerCube texture: cubemap" + }, + { + name = "SHADER_LOC_MAP_IRRADIANCE", + value = 23, + description = "Shader location: samplerCube texture: irradiance" + }, + { + name = "SHADER_LOC_MAP_PREFILTER", + value = 24, + description = "Shader location: samplerCube texture: prefilter" + }, + { + name = "SHADER_LOC_MAP_BRDF", + value = 25, + description = "Shader location: sampler2d texture: brdf" + } + } + }, + { + name = "ShaderUniformDataType", + description = "Shader uniform data type", + values = { + { + name = "SHADER_UNIFORM_FLOAT", + value = 0, + description = "Shader uniform type: float" + }, + { + name = "SHADER_UNIFORM_VEC2", + value = 1, + description = "Shader uniform type: vec2 (2 float)" + }, + { + name = "SHADER_UNIFORM_VEC3", + value = 2, + description = "Shader uniform type: vec3 (3 float)" + }, + { + name = "SHADER_UNIFORM_VEC4", + value = 3, + description = "Shader uniform type: vec4 (4 float)" + }, + { + name = "SHADER_UNIFORM_INT", + value = 4, + description = "Shader uniform type: int" + }, + { + name = "SHADER_UNIFORM_IVEC2", + value = 5, + description = "Shader uniform type: ivec2 (2 int)" + }, + { + name = "SHADER_UNIFORM_IVEC3", + value = 6, + description = "Shader uniform type: ivec3 (3 int)" + }, + { + name = "SHADER_UNIFORM_IVEC4", + value = 7, + description = "Shader uniform type: ivec4 (4 int)" + }, + { + name = "SHADER_UNIFORM_SAMPLER2D", + value = 8, + description = "Shader uniform type: sampler2d" + } + } + }, + { + name = "ShaderAttributeDataType", + description = "Shader attribute data types", + values = { + { + name = "SHADER_ATTRIB_FLOAT", + value = 0, + description = "Shader attribute type: float" + }, + { + name = "SHADER_ATTRIB_VEC2", + value = 1, + description = "Shader attribute type: vec2 (2 float)" + }, + { + name = "SHADER_ATTRIB_VEC3", + value = 2, + description = "Shader attribute type: vec3 (3 float)" + }, + { + name = "SHADER_ATTRIB_VEC4", + value = 3, + description = "Shader attribute type: vec4 (4 float)" + } + } + }, + { + name = "PixelFormat", + description = "Pixel formats", + values = { + { + name = "PIXELFORMAT_UNCOMPRESSED_GRAYSCALE", + value = 1, + description = "8 bit per pixel (no alpha)" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA", + value = 2, + description = "8*2 bpp (2 channels)" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_R5G6B5", + value = 3, + description = "16 bpp" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_R8G8B8", + value = 4, + description = "24 bpp" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_R5G5B5A1", + value = 5, + description = "16 bpp (1 bit alpha)" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_R4G4B4A4", + value = 6, + description = "16 bpp (4 bit alpha)" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_R8G8B8A8", + value = 7, + description = "32 bpp" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_R32", + value = 8, + description = "32 bpp (1 channel - float)" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_R32G32B32", + value = 9, + description = "32*3 bpp (3 channels - float)" + }, + { + name = "PIXELFORMAT_UNCOMPRESSED_R32G32B32A32", + value = 10, + description = "32*4 bpp (4 channels - float)" + }, + { + name = "PIXELFORMAT_COMPRESSED_DXT1_RGB", + value = 11, + description = "4 bpp (no alpha)" + }, + { + name = "PIXELFORMAT_COMPRESSED_DXT1_RGBA", + value = 12, + description = "4 bpp (1 bit alpha)" + }, + { + name = "PIXELFORMAT_COMPRESSED_DXT3_RGBA", + value = 13, + description = "8 bpp" + }, + { + name = "PIXELFORMAT_COMPRESSED_DXT5_RGBA", + value = 14, + description = "8 bpp" + }, + { + name = "PIXELFORMAT_COMPRESSED_ETC1_RGB", + value = 15, + description = "4 bpp" + }, + { + name = "PIXELFORMAT_COMPRESSED_ETC2_RGB", + value = 16, + description = "4 bpp" + }, + { + name = "PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA", + value = 17, + description = "8 bpp" + }, + { + name = "PIXELFORMAT_COMPRESSED_PVRT_RGB", + value = 18, + description = "4 bpp" + }, + { + name = "PIXELFORMAT_COMPRESSED_PVRT_RGBA", + value = 19, + description = "4 bpp" + }, + { + name = "PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA", + value = 20, + description = "8 bpp" + }, + { + name = "PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA", + value = 21, + description = "2 bpp" + } + } + }, + { + name = "TextureFilter", + description = "Texture parameters: filter mode", + values = { + { + name = "TEXTURE_FILTER_POINT", + value = 0, + description = "No filter, just pixel approximation" + }, + { + name = "TEXTURE_FILTER_BILINEAR", + value = 1, + description = "Linear filtering" + }, + { + name = "TEXTURE_FILTER_TRILINEAR", + value = 2, + description = "Trilinear filtering (linear with mipmaps)" + }, + { + name = "TEXTURE_FILTER_ANISOTROPIC_4X", + value = 3, + description = "Anisotropic filtering 4x" + }, + { + name = "TEXTURE_FILTER_ANISOTROPIC_8X", + value = 4, + description = "Anisotropic filtering 8x" + }, + { + name = "TEXTURE_FILTER_ANISOTROPIC_16X", + value = 5, + description = "Anisotropic filtering 16x" + } + } + }, + { + name = "TextureWrap", + description = "Texture parameters: wrap mode", + values = { + { + name = "TEXTURE_WRAP_REPEAT", + value = 0, + description = "Repeats texture in tiled mode" + }, + { + name = "TEXTURE_WRAP_CLAMP", + value = 1, + description = "Clamps texture to edge pixel in tiled mode" + }, + { + name = "TEXTURE_WRAP_MIRROR_REPEAT", + value = 2, + description = "Mirrors and repeats the texture in tiled mode" + }, + { + name = "TEXTURE_WRAP_MIRROR_CLAMP", + value = 3, + description = "Mirrors and clamps to border the texture in tiled mode" + } + } + }, + { + name = "CubemapLayout", + description = "Cubemap layouts", + values = { + { + name = "CUBEMAP_LAYOUT_AUTO_DETECT", + value = 0, + description = "Automatically detect layout type" + }, + { + name = "CUBEMAP_LAYOUT_LINE_VERTICAL", + value = 1, + description = "Layout is defined by a vertical line with faces" + }, + { + name = "CUBEMAP_LAYOUT_LINE_HORIZONTAL", + value = 2, + description = "Layout is defined by a horizontal line with faces" + }, + { + name = "CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR", + value = 3, + description = "Layout is defined by a 3x4 cross with cubemap faces" + }, + { + name = "CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE", + value = 4, + description = "Layout is defined by a 4x3 cross with cubemap faces" + }, + { + name = "CUBEMAP_LAYOUT_PANORAMA", + value = 5, + description = "Layout is defined by a panorama image (equirrectangular map)" + } + } + }, + { + name = "FontType", + description = "Font type, defines generation method", + values = { + { + name = "FONT_DEFAULT", + value = 0, + description = "Default font generation, anti-aliased" + }, + { + name = "FONT_BITMAP", + value = 1, + description = "Bitmap font generation, no anti-aliasing" + }, + { + name = "FONT_SDF", + value = 2, + description = "SDF font generation, requires external shader" + } + } + }, + { + name = "BlendMode", + description = "Color blending modes (pre-defined)", + values = { + { + name = "BLEND_ALPHA", + value = 0, + description = "Blend textures considering alpha (default)" + }, + { + name = "BLEND_ADDITIVE", + value = 1, + description = "Blend textures adding colors" + }, + { + name = "BLEND_MULTIPLIED", + value = 2, + description = "Blend textures multiplying colors" + }, + { + name = "BLEND_ADD_COLORS", + value = 3, + description = "Blend textures adding colors (alternative)" + }, + { + name = "BLEND_SUBTRACT_COLORS", + value = 4, + description = "Blend textures subtracting colors (alternative)" + }, + { + name = "BLEND_ALPHA_PREMULTIPLY", + value = 5, + description = "Blend premultiplied textures considering alpha" + }, + { + name = "BLEND_CUSTOM", + value = 6, + description = "Blend textures using custom src/dst factors (use rlSetBlendFactors())" + }, + { + name = "BLEND_CUSTOM_SEPARATE", + value = 7, + description = "Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate())" + } + } + }, + { + name = "Gesture", + description = "Gesture", + values = { + { + name = "GESTURE_NONE", + value = 0, + description = "No gesture" + }, + { + name = "GESTURE_TAP", + value = 1, + description = "Tap gesture" + }, + { + name = "GESTURE_DOUBLETAP", + value = 2, + description = "Double tap gesture" + }, + { + name = "GESTURE_HOLD", + value = 4, + description = "Hold gesture" + }, + { + name = "GESTURE_DRAG", + value = 8, + description = "Drag gesture" + }, + { + name = "GESTURE_SWIPE_RIGHT", + value = 16, + description = "Swipe right gesture" + }, + { + name = "GESTURE_SWIPE_LEFT", + value = 32, + description = "Swipe left gesture" + }, + { + name = "GESTURE_SWIPE_UP", + value = 64, + description = "Swipe up gesture" + }, + { + name = "GESTURE_SWIPE_DOWN", + value = 128, + description = "Swipe down gesture" + }, + { + name = "GESTURE_PINCH_IN", + value = 256, + description = "Pinch in gesture" + }, + { + name = "GESTURE_PINCH_OUT", + value = 512, + description = "Pinch out gesture" + } + } + }, + { + name = "CameraMode", + description = "Camera system modes", + values = { + { + name = "CAMERA_CUSTOM", + value = 0, + description = "Custom camera" + }, + { + name = "CAMERA_FREE", + value = 1, + description = "Free camera" + }, + { + name = "CAMERA_ORBITAL", + value = 2, + description = "Orbital camera" + }, + { + name = "CAMERA_FIRST_PERSON", + value = 3, + description = "First person camera" + }, + { + name = "CAMERA_THIRD_PERSON", + value = 4, + description = "Third person camera" + } + } + }, + { + name = "CameraProjection", + description = "Camera projection", + values = { + { + name = "CAMERA_PERSPECTIVE", + value = 0, + description = "Perspective projection" + }, + { + name = "CAMERA_ORTHOGRAPHIC", + value = 1, + description = "Orthographic projection" + } + } + }, + { + name = "NPatchLayout", + description = "N-patch layout", + values = { + { + name = "NPATCH_NINE_PATCH", + value = 0, + description = "Npatch layout: 3x3 tiles" + }, + { + name = "NPATCH_THREE_PATCH_VERTICAL", + value = 1, + description = "Npatch layout: 1x3 tiles" + }, + { + name = "NPATCH_THREE_PATCH_HORIZONTAL", + value = 2, + description = "Npatch layout: 3x1 tiles" + } + } + } + }, + callbacks = { + { + name = "TraceLogCallback", + description = "Logging: Redirect trace log messages", + returnType = "void", + params = { + {type = "int", name = "logLevel"}, + {type = "const char *", name = "text"}, + {type = "va_list", name = "args"} + } + }, + { + name = "LoadFileDataCallback", + description = "FileIO: Load binary data", + returnType = "unsigned char *", + params = { + {type = "const char *", name = "fileName"}, + {type = "unsigned int *", name = "bytesRead"} + } + }, + { + name = "SaveFileDataCallback", + description = "FileIO: Save binary data", + returnType = "bool", + params = { + {type = "const char *", name = "fileName"}, + {type = "void *", name = "data"}, + {type = "unsigned int", name = "bytesToWrite"} + } + }, + { + name = "LoadFileTextCallback", + description = "FileIO: Load text data", + returnType = "char *", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "SaveFileTextCallback", + description = "FileIO: Save text data", + returnType = "bool", + params = { + {type = "const char *", name = "fileName"}, + {type = "char *", name = "text"} + } + }, + { + name = "AudioCallback", + description = "", + returnType = "void", + params = { + {type = "void *", name = "bufferData"}, + {type = "unsigned int", name = "frames"} + } + } + }, + functions = { + { + name = "InitWindow", + description = "Initialize window and OpenGL context", + returnType = "void", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "const char *", name = "title"} + } + }, + { + name = "WindowShouldClose", + description = "Check if KEY_ESCAPE pressed or Close icon pressed", + returnType = "bool" + }, + { + name = "CloseWindow", + description = "Close window and unload OpenGL context", + returnType = "void" + }, + { + name = "IsWindowReady", + description = "Check if window has been initialized successfully", + returnType = "bool" + }, + { + name = "IsWindowFullscreen", + description = "Check if window is currently fullscreen", + returnType = "bool" + }, + { + name = "IsWindowHidden", + description = "Check if window is currently hidden (only PLATFORM_DESKTOP)", + returnType = "bool" + }, + { + name = "IsWindowMinimized", + description = "Check if window is currently minimized (only PLATFORM_DESKTOP)", + returnType = "bool" + }, + { + name = "IsWindowMaximized", + description = "Check if window is currently maximized (only PLATFORM_DESKTOP)", + returnType = "bool" + }, + { + name = "IsWindowFocused", + description = "Check if window is currently focused (only PLATFORM_DESKTOP)", + returnType = "bool" + }, + { + name = "IsWindowResized", + description = "Check if window has been resized last frame", + returnType = "bool" + }, + { + name = "IsWindowState", + description = "Check if one specific window flag is enabled", + returnType = "bool", + params = { + {type = "unsigned int", name = "flag"} + } + }, + { + name = "SetWindowState", + description = "Set window configuration state using flags (only PLATFORM_DESKTOP)", + returnType = "void", + params = { + {type = "unsigned int", name = "flags"} + } + }, + { + name = "ClearWindowState", + description = "Clear window configuration state flags", + returnType = "void", + params = { + {type = "unsigned int", name = "flags"} + } + }, + { + name = "ToggleFullscreen", + description = "Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)", + returnType = "void" + }, + { + name = "MaximizeWindow", + description = "Set window state: maximized, if resizable (only PLATFORM_DESKTOP)", + returnType = "void" + }, + { + name = "MinimizeWindow", + description = "Set window state: minimized, if resizable (only PLATFORM_DESKTOP)", + returnType = "void" + }, + { + name = "RestoreWindow", + description = "Set window state: not minimized/maximized (only PLATFORM_DESKTOP)", + returnType = "void" + }, + { + name = "SetWindowIcon", + description = "Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP)", + returnType = "void", + params = { + {type = "Image", name = "image"} + } + }, + { + name = "SetWindowIcons", + description = "Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)", + returnType = "void", + params = { + {type = "Image *", name = "images"}, + {type = "int", name = "count"} + } + }, + { + name = "SetWindowTitle", + description = "Set title for window (only PLATFORM_DESKTOP)", + returnType = "void", + params = { + {type = "const char *", name = "title"} + } + }, + { + name = "SetWindowPosition", + description = "Set window position on screen (only PLATFORM_DESKTOP)", + returnType = "void", + params = { + {type = "int", name = "x"}, + {type = "int", name = "y"} + } + }, + { + name = "SetWindowMonitor", + description = "Set monitor for the current window (fullscreen mode)", + returnType = "void", + params = { + {type = "int", name = "monitor"} + } + }, + { + name = "SetWindowMinSize", + description = "Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)", + returnType = "void", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "SetWindowSize", + description = "Set window dimensions", + returnType = "void", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "SetWindowOpacity", + description = "Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)", + returnType = "void", + params = { + {type = "float", name = "opacity"} + } + }, + { + name = "GetWindowHandle", + description = "Get native window handle", + returnType = "void *" + }, + { + name = "GetScreenWidth", + description = "Get current screen width", + returnType = "int" + }, + { + name = "GetScreenHeight", + description = "Get current screen height", + returnType = "int" + }, + { + name = "GetRenderWidth", + description = "Get current render width (it considers HiDPI)", + returnType = "int" + }, + { + name = "GetRenderHeight", + description = "Get current render height (it considers HiDPI)", + returnType = "int" + }, + { + name = "GetMonitorCount", + description = "Get number of connected monitors", + returnType = "int" + }, + { + name = "GetCurrentMonitor", + description = "Get current connected monitor", + returnType = "int" + }, + { + name = "GetMonitorPosition", + description = "Get specified monitor position", + returnType = "Vector2", + params = { + {type = "int", name = "monitor"} + } + }, + { + name = "GetMonitorWidth", + description = "Get specified monitor width (current video mode used by monitor)", + returnType = "int", + params = { + {type = "int", name = "monitor"} + } + }, + { + name = "GetMonitorHeight", + description = "Get specified monitor height (current video mode used by monitor)", + returnType = "int", + params = { + {type = "int", name = "monitor"} + } + }, + { + name = "GetMonitorPhysicalWidth", + description = "Get specified monitor physical width in millimetres", + returnType = "int", + params = { + {type = "int", name = "monitor"} + } + }, + { + name = "GetMonitorPhysicalHeight", + description = "Get specified monitor physical height in millimetres", + returnType = "int", + params = { + {type = "int", name = "monitor"} + } + }, + { + name = "GetMonitorRefreshRate", + description = "Get specified monitor refresh rate", + returnType = "int", + params = { + {type = "int", name = "monitor"} + } + }, + { + name = "GetWindowPosition", + description = "Get window position XY on monitor", + returnType = "Vector2" + }, + { + name = "GetWindowScaleDPI", + description = "Get window scale DPI factor", + returnType = "Vector2" + }, + { + name = "GetMonitorName", + description = "Get the human-readable, UTF-8 encoded name of the primary monitor", + returnType = "const char *", + params = { + {type = "int", name = "monitor"} + } + }, + { + name = "SetClipboardText", + description = "Set clipboard text content", + returnType = "void", + params = { + {type = "const char *", name = "text"} + } + }, + { + name = "GetClipboardText", + description = "Get clipboard text content", + returnType = "const char *" + }, + { + name = "EnableEventWaiting", + description = "Enable waiting for events on EndDrawing(), no automatic event polling", + returnType = "void" + }, + { + name = "DisableEventWaiting", + description = "Disable waiting for events on EndDrawing(), automatic events polling", + returnType = "void" + }, + { + name = "SwapScreenBuffer", + description = "Swap back buffer with front buffer (screen drawing)", + returnType = "void" + }, + { + name = "PollInputEvents", + description = "Register all input events", + returnType = "void" + }, + { + name = "WaitTime", + description = "Wait for some time (halt program execution)", + returnType = "void", + params = { + {type = "double", name = "seconds"} + } + }, + { + name = "ShowCursor", + description = "Shows cursor", + returnType = "void" + }, + { + name = "HideCursor", + description = "Hides cursor", + returnType = "void" + }, + { + name = "IsCursorHidden", + description = "Check if cursor is not visible", + returnType = "bool" + }, + { + name = "EnableCursor", + description = "Enables cursor (unlock cursor)", + returnType = "void" + }, + { + name = "DisableCursor", + description = "Disables cursor (lock cursor)", + returnType = "void" + }, + { + name = "IsCursorOnScreen", + description = "Check if cursor is on the screen", + returnType = "bool" + }, + { + name = "ClearBackground", + description = "Set background color (framebuffer clear color)", + returnType = "void", + params = { + {type = "Color", name = "color"} + } + }, + { + name = "BeginDrawing", + description = "Setup canvas (framebuffer) to start drawing", + returnType = "void" + }, + { + name = "EndDrawing", + description = "End canvas drawing and swap buffers (double buffering)", + returnType = "void" + }, + { + name = "BeginMode2D", + description = "Begin 2D mode with custom camera (2D)", + returnType = "void", + params = { + {type = "Camera2D", name = "camera"} + } + }, + { + name = "EndMode2D", + description = "Ends 2D mode with custom camera", + returnType = "void" + }, + { + name = "BeginMode3D", + description = "Begin 3D mode with custom camera (3D)", + returnType = "void", + params = { + {type = "Camera3D", name = "camera"} + } + }, + { + name = "EndMode3D", + description = "Ends 3D mode and returns to default 2D orthographic mode", + returnType = "void" + }, + { + name = "BeginTextureMode", + description = "Begin drawing to render texture", + returnType = "void", + params = { + {type = "RenderTexture2D", name = "target"} + } + }, + { + name = "EndTextureMode", + description = "Ends drawing to render texture", + returnType = "void" + }, + { + name = "BeginShaderMode", + description = "Begin custom shader drawing", + returnType = "void", + params = { + {type = "Shader", name = "shader"} + } + }, + { + name = "EndShaderMode", + description = "End custom shader drawing (use default shader)", + returnType = "void" + }, + { + name = "BeginBlendMode", + description = "Begin blending mode (alpha, additive, multiplied, subtract, custom)", + returnType = "void", + params = { + {type = "int", name = "mode"} + } + }, + { + name = "EndBlendMode", + description = "End blending mode (reset to default: alpha blending)", + returnType = "void" + }, + { + name = "BeginScissorMode", + description = "Begin scissor mode (define screen area for following drawing)", + returnType = "void", + params = { + {type = "int", name = "x"}, + {type = "int", name = "y"}, + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "EndScissorMode", + description = "End scissor mode", + returnType = "void" + }, + { + name = "BeginVrStereoMode", + description = "Begin stereo rendering (requires VR simulator)", + returnType = "void", + params = { + {type = "VrStereoConfig", name = "config"} + } + }, + { + name = "EndVrStereoMode", + description = "End stereo rendering (requires VR simulator)", + returnType = "void" + }, + { + name = "LoadVrStereoConfig", + description = "Load VR stereo config for VR simulator device parameters", + returnType = "VrStereoConfig", + params = { + {type = "VrDeviceInfo", name = "device"} + } + }, + { + name = "UnloadVrStereoConfig", + description = "Unload VR stereo config", + returnType = "void", + params = { + {type = "VrStereoConfig", name = "config"} + } + }, + { + name = "LoadShader", + description = "Load shader from files and bind default locations", + returnType = "Shader", + params = { + {type = "const char *", name = "vsFileName"}, + {type = "const char *", name = "fsFileName"} + } + }, + { + name = "LoadShaderFromMemory", + description = "Load shader from code strings and bind default locations", + returnType = "Shader", + params = { + {type = "const char *", name = "vsCode"}, + {type = "const char *", name = "fsCode"} + } + }, + { + name = "IsShaderReady", + description = "Check if a shader is ready", + returnType = "bool", + params = { + {type = "Shader", name = "shader"} + } + }, + { + name = "GetShaderLocation", + description = "Get shader uniform location", + returnType = "int", + params = { + {type = "Shader", name = "shader"}, + {type = "const char *", name = "uniformName"} + } + }, + { + name = "GetShaderLocationAttrib", + description = "Get shader attribute location", + returnType = "int", + params = { + {type = "Shader", name = "shader"}, + {type = "const char *", name = "attribName"} + } + }, + { + name = "SetShaderValue", + description = "Set shader uniform value", + returnType = "void", + params = { + {type = "Shader", name = "shader"}, + {type = "int", name = "locIndex"}, + {type = "const void *", name = "value"}, + {type = "int", name = "uniformType"} + } + }, + { + name = "SetShaderValueV", + description = "Set shader uniform value vector", + returnType = "void", + params = { + {type = "Shader", name = "shader"}, + {type = "int", name = "locIndex"}, + {type = "const void *", name = "value"}, + {type = "int", name = "uniformType"}, + {type = "int", name = "count"} + } + }, + { + name = "SetShaderValueMatrix", + description = "Set shader uniform value (matrix 4x4)", + returnType = "void", + params = { + {type = "Shader", name = "shader"}, + {type = "int", name = "locIndex"}, + {type = "Matrix", name = "mat"} + } + }, + { + name = "SetShaderValueTexture", + description = "Set shader uniform value for texture (sampler2d)", + returnType = "void", + params = { + {type = "Shader", name = "shader"}, + {type = "int", name = "locIndex"}, + {type = "Texture2D", name = "texture"} + } + }, + { + name = "UnloadShader", + description = "Unload shader from GPU memory (VRAM)", + returnType = "void", + params = { + {type = "Shader", name = "shader"} + } + }, + { + name = "GetMouseRay", + description = "Get a ray trace from mouse position", + returnType = "Ray", + params = { + {type = "Vector2", name = "mousePosition"}, + {type = "Camera", name = "camera"} + } + }, + { + name = "GetCameraMatrix", + description = "Get camera transform matrix (view matrix)", + returnType = "Matrix", + params = { + {type = "Camera", name = "camera"} + } + }, + { + name = "GetCameraMatrix2D", + description = "Get camera 2d transform matrix", + returnType = "Matrix", + params = { + {type = "Camera2D", name = "camera"} + } + }, + { + name = "GetWorldToScreen", + description = "Get the screen space position for a 3d world space position", + returnType = "Vector2", + params = { + {type = "Vector3", name = "position"}, + {type = "Camera", name = "camera"} + } + }, + { + name = "GetScreenToWorld2D", + description = "Get the world space position for a 2d camera screen space position", + returnType = "Vector2", + params = { + {type = "Vector2", name = "position"}, + {type = "Camera2D", name = "camera"} + } + }, + { + name = "GetWorldToScreenEx", + description = "Get size position for a 3d world space position", + returnType = "Vector2", + params = { + {type = "Vector3", name = "position"}, + {type = "Camera", name = "camera"}, + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "GetWorldToScreen2D", + description = "Get the screen space position for a 2d camera world space position", + returnType = "Vector2", + params = { + {type = "Vector2", name = "position"}, + {type = "Camera2D", name = "camera"} + } + }, + { + name = "SetTargetFPS", + description = "Set target FPS (maximum)", + returnType = "void", + params = { + {type = "int", name = "fps"} + } + }, + { + name = "GetFPS", + description = "Get current FPS", + returnType = "int" + }, + { + name = "GetFrameTime", + description = "Get time in seconds for last frame drawn (delta time)", + returnType = "float" + }, + { + name = "GetTime", + description = "Get elapsed time in seconds since InitWindow()", + returnType = "double" + }, + { + name = "GetRandomValue", + description = "Get a random value between min and max (both included)", + returnType = "int", + params = { + {type = "int", name = "min"}, + {type = "int", name = "max"} + } + }, + { + name = "SetRandomSeed", + description = "Set the seed for the random number generator", + returnType = "void", + params = { + {type = "unsigned int", name = "seed"} + } + }, + { + name = "TakeScreenshot", + description = "Takes a screenshot of current screen (filename extension defines format)", + returnType = "void", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "SetConfigFlags", + description = "Setup init configuration flags (view FLAGS)", + returnType = "void", + params = { + {type = "unsigned int", name = "flags"} + } + }, + { + name = "TraceLog", + description = "Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)", + returnType = "void", + params = { + {type = "int", name = "logLevel"}, + {type = "const char *", name = "text"}, + {type = "...", name = "args"} + } + }, + { + name = "SetTraceLogLevel", + description = "Set the current threshold (minimum) log level", + returnType = "void", + params = { + {type = "int", name = "logLevel"} + } + }, + { + name = "MemAlloc", + description = "Internal memory allocator", + returnType = "void *", + params = { + {type = "unsigned int", name = "size"} + } + }, + { + name = "MemRealloc", + description = "Internal memory reallocator", + returnType = "void *", + params = { + {type = "void *", name = "ptr"}, + {type = "unsigned int", name = "size"} + } + }, + { + name = "MemFree", + description = "Internal memory free", + returnType = "void", + params = { + {type = "void *", name = "ptr"} + } + }, + { + name = "OpenURL", + description = "Open URL with default system browser (if available)", + returnType = "void", + params = { + {type = "const char *", name = "url"} + } + }, + { + name = "SetTraceLogCallback", + description = "Set custom trace log", + returnType = "void", + params = { + {type = "TraceLogCallback", name = "callback"} + } + }, + { + name = "SetLoadFileDataCallback", + description = "Set custom file binary data loader", + returnType = "void", + params = { + {type = "LoadFileDataCallback", name = "callback"} + } + }, + { + name = "SetSaveFileDataCallback", + description = "Set custom file binary data saver", + returnType = "void", + params = { + {type = "SaveFileDataCallback", name = "callback"} + } + }, + { + name = "SetLoadFileTextCallback", + description = "Set custom file text data loader", + returnType = "void", + params = { + {type = "LoadFileTextCallback", name = "callback"} + } + }, + { + name = "SetSaveFileTextCallback", + description = "Set custom file text data saver", + returnType = "void", + params = { + {type = "SaveFileTextCallback", name = "callback"} + } + }, + { + name = "LoadFileData", + description = "Load file data as byte array (read)", + returnType = "unsigned char *", + params = { + {type = "const char *", name = "fileName"}, + {type = "unsigned int *", name = "bytesRead"} + } + }, + { + name = "UnloadFileData", + description = "Unload file data allocated by LoadFileData()", + returnType = "void", + params = { + {type = "unsigned char *", name = "data"} + } + }, + { + name = "SaveFileData", + description = "Save data to file from byte array (write), returns true on success", + returnType = "bool", + params = { + {type = "const char *", name = "fileName"}, + {type = "void *", name = "data"}, + {type = "unsigned int", name = "bytesToWrite"} + } + }, + { + name = "ExportDataAsCode", + description = "Export data to code (.h), returns true on success", + returnType = "bool", + params = { + {type = "const unsigned char *", name = "data"}, + {type = "unsigned int", name = "size"}, + {type = "const char *", name = "fileName"} + } + }, + { + name = "LoadFileText", + description = "Load text data from file (read), returns a '\\0' terminated string", + returnType = "char *", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "UnloadFileText", + description = "Unload file text data allocated by LoadFileText()", + returnType = "void", + params = { + {type = "char *", name = "text"} + } + }, + { + name = "SaveFileText", + description = "Save text data to file (write), string must be '\\0' terminated, returns true on success", + returnType = "bool", + params = { + {type = "const char *", name = "fileName"}, + {type = "char *", name = "text"} + } + }, + { + name = "FileExists", + description = "Check if file exists", + returnType = "bool", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "DirectoryExists", + description = "Check if a directory path exists", + returnType = "bool", + params = { + {type = "const char *", name = "dirPath"} + } + }, + { + name = "IsFileExtension", + description = "Check file extension (including point: .png, .wav)", + returnType = "bool", + params = { + {type = "const char *", name = "fileName"}, + {type = "const char *", name = "ext"} + } + }, + { + name = "GetFileLength", + description = "Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)", + returnType = "int", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "GetFileExtension", + description = "Get pointer to extension for a filename string (includes dot: '.png')", + returnType = "const char *", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "GetFileName", + description = "Get pointer to filename for a path string", + returnType = "const char *", + params = { + {type = "const char *", name = "filePath"} + } + }, + { + name = "GetFileNameWithoutExt", + description = "Get filename string without extension (uses static string)", + returnType = "const char *", + params = { + {type = "const char *", name = "filePath"} + } + }, + { + name = "GetDirectoryPath", + description = "Get full path for a given fileName with path (uses static string)", + returnType = "const char *", + params = { + {type = "const char *", name = "filePath"} + } + }, + { + name = "GetPrevDirectoryPath", + description = "Get previous directory path for a given path (uses static string)", + returnType = "const char *", + params = { + {type = "const char *", name = "dirPath"} + } + }, + { + name = "GetWorkingDirectory", + description = "Get current working directory (uses static string)", + returnType = "const char *" + }, + { + name = "GetApplicationDirectory", + description = "Get the directory if the running application (uses static string)", + returnType = "const char *" + }, + { + name = "ChangeDirectory", + description = "Change working directory, return true on success", + returnType = "bool", + params = { + {type = "const char *", name = "dir"} + } + }, + { + name = "IsPathFile", + description = "Check if a given path is a file or a directory", + returnType = "bool", + params = { + {type = "const char *", name = "path"} + } + }, + { + name = "LoadDirectoryFiles", + description = "Load directory filepaths", + returnType = "FilePathList", + params = { + {type = "const char *", name = "dirPath"} + } + }, + { + name = "LoadDirectoryFilesEx", + description = "Load directory filepaths with extension filtering and recursive directory scan", + returnType = "FilePathList", + params = { + {type = "const char *", name = "basePath"}, + {type = "const char *", name = "filter"}, + {type = "bool", name = "scanSubdirs"} + } + }, + { + name = "UnloadDirectoryFiles", + description = "Unload filepaths", + returnType = "void", + params = { + {type = "FilePathList", name = "files"} + } + }, + { + name = "IsFileDropped", + description = "Check if a file has been dropped into window", + returnType = "bool" + }, + { + name = "LoadDroppedFiles", + description = "Load dropped filepaths", + returnType = "FilePathList" + }, + { + name = "UnloadDroppedFiles", + description = "Unload dropped filepaths", + returnType = "void", + params = { + {type = "FilePathList", name = "files"} + } + }, + { + name = "GetFileModTime", + description = "Get file modification time (last write time)", + returnType = "long", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "CompressData", + description = "Compress data (DEFLATE algorithm), memory must be MemFree()", + returnType = "unsigned char *", + params = { + {type = "const unsigned char *", name = "data"}, + {type = "int", name = "dataSize"}, + {type = "int *", name = "compDataSize"} + } + }, + { + name = "DecompressData", + description = "Decompress data (DEFLATE algorithm), memory must be MemFree()", + returnType = "unsigned char *", + params = { + {type = "const unsigned char *", name = "compData"}, + {type = "int", name = "compDataSize"}, + {type = "int *", name = "dataSize"} + } + }, + { + name = "EncodeDataBase64", + description = "Encode data to Base64 string, memory must be MemFree()", + returnType = "char *", + params = { + {type = "const unsigned char *", name = "data"}, + {type = "int", name = "dataSize"}, + {type = "int *", name = "outputSize"} + } + }, + { + name = "DecodeDataBase64", + description = "Decode Base64 string data, memory must be MemFree()", + returnType = "unsigned char *", + params = { + {type = "const unsigned char *", name = "data"}, + {type = "int *", name = "outputSize"} + } + }, + { + name = "IsKeyPressed", + description = "Check if a key has been pressed once", + returnType = "bool", + params = { + {type = "int", name = "key"} + } + }, + { + name = "IsKeyDown", + description = "Check if a key is being pressed", + returnType = "bool", + params = { + {type = "int", name = "key"} + } + }, + { + name = "IsKeyReleased", + description = "Check if a key has been released once", + returnType = "bool", + params = { + {type = "int", name = "key"} + } + }, + { + name = "IsKeyUp", + description = "Check if a key is NOT being pressed", + returnType = "bool", + params = { + {type = "int", name = "key"} + } + }, + { + name = "SetExitKey", + description = "Set a custom key to exit program (default is ESC)", + returnType = "void", + params = { + {type = "int", name = "key"} + } + }, + { + name = "GetKeyPressed", + description = "Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty", + returnType = "int" + }, + { + name = "GetCharPressed", + description = "Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty", + returnType = "int" + }, + { + name = "IsGamepadAvailable", + description = "Check if a gamepad is available", + returnType = "bool", + params = { + {type = "int", name = "gamepad"} + } + }, + { + name = "GetGamepadName", + description = "Get gamepad internal name id", + returnType = "const char *", + params = { + {type = "int", name = "gamepad"} + } + }, + { + name = "IsGamepadButtonPressed", + description = "Check if a gamepad button has been pressed once", + returnType = "bool", + params = { + {type = "int", name = "gamepad"}, + {type = "int", name = "button"} + } + }, + { + name = "IsGamepadButtonDown", + description = "Check if a gamepad button is being pressed", + returnType = "bool", + params = { + {type = "int", name = "gamepad"}, + {type = "int", name = "button"} + } + }, + { + name = "IsGamepadButtonReleased", + description = "Check if a gamepad button has been released once", + returnType = "bool", + params = { + {type = "int", name = "gamepad"}, + {type = "int", name = "button"} + } + }, + { + name = "IsGamepadButtonUp", + description = "Check if a gamepad button is NOT being pressed", + returnType = "bool", + params = { + {type = "int", name = "gamepad"}, + {type = "int", name = "button"} + } + }, + { + name = "GetGamepadButtonPressed", + description = "Get the last gamepad button pressed", + returnType = "int" + }, + { + name = "GetGamepadAxisCount", + description = "Get gamepad axis count for a gamepad", + returnType = "int", + params = { + {type = "int", name = "gamepad"} + } + }, + { + name = "GetGamepadAxisMovement", + description = "Get axis movement value for a gamepad axis", + returnType = "float", + params = { + {type = "int", name = "gamepad"}, + {type = "int", name = "axis"} + } + }, + { + name = "SetGamepadMappings", + description = "Set internal gamepad mappings (SDL_GameControllerDB)", + returnType = "int", + params = { + {type = "const char *", name = "mappings"} + } + }, + { + name = "IsMouseButtonPressed", + description = "Check if a mouse button has been pressed once", + returnType = "bool", + params = { + {type = "int", name = "button"} + } + }, + { + name = "IsMouseButtonDown", + description = "Check if a mouse button is being pressed", + returnType = "bool", + params = { + {type = "int", name = "button"} + } + }, + { + name = "IsMouseButtonReleased", + description = "Check if a mouse button has been released once", + returnType = "bool", + params = { + {type = "int", name = "button"} + } + }, + { + name = "IsMouseButtonUp", + description = "Check if a mouse button is NOT being pressed", + returnType = "bool", + params = { + {type = "int", name = "button"} + } + }, + { + name = "GetMouseX", + description = "Get mouse position X", + returnType = "int" + }, + { + name = "GetMouseY", + description = "Get mouse position Y", + returnType = "int" + }, + { + name = "GetMousePosition", + description = "Get mouse position XY", + returnType = "Vector2" + }, + { + name = "GetMouseDelta", + description = "Get mouse delta between frames", + returnType = "Vector2" + }, + { + name = "SetMousePosition", + description = "Set mouse position XY", + returnType = "void", + params = { + {type = "int", name = "x"}, + {type = "int", name = "y"} + } + }, + { + name = "SetMouseOffset", + description = "Set mouse offset", + returnType = "void", + params = { + {type = "int", name = "offsetX"}, + {type = "int", name = "offsetY"} + } + }, + { + name = "SetMouseScale", + description = "Set mouse scaling", + returnType = "void", + params = { + {type = "float", name = "scaleX"}, + {type = "float", name = "scaleY"} + } + }, + { + name = "GetMouseWheelMove", + description = "Get mouse wheel movement for X or Y, whichever is larger", + returnType = "float" + }, + { + name = "GetMouseWheelMoveV", + description = "Get mouse wheel movement for both X and Y", + returnType = "Vector2" + }, + { + name = "SetMouseCursor", + description = "Set mouse cursor", + returnType = "void", + params = { + {type = "int", name = "cursor"} + } + }, + { + name = "GetTouchX", + description = "Get touch position X for touch point 0 (relative to screen size)", + returnType = "int" + }, + { + name = "GetTouchY", + description = "Get touch position Y for touch point 0 (relative to screen size)", + returnType = "int" + }, + { + name = "GetTouchPosition", + description = "Get touch position XY for a touch point index (relative to screen size)", + returnType = "Vector2", + params = { + {type = "int", name = "index"} + } + }, + { + name = "GetTouchPointId", + description = "Get touch point identifier for given index", + returnType = "int", + params = { + {type = "int", name = "index"} + } + }, + { + name = "GetTouchPointCount", + description = "Get number of touch points", + returnType = "int" + }, + { + name = "SetGesturesEnabled", + description = "Enable a set of gestures using flags", + returnType = "void", + params = { + {type = "unsigned int", name = "flags"} + } + }, + { + name = "IsGestureDetected", + description = "Check if a gesture have been detected", + returnType = "bool", + params = { + {type = "int", name = "gesture"} + } + }, + { + name = "GetGestureDetected", + description = "Get latest detected gesture", + returnType = "int" + }, + { + name = "GetGestureHoldDuration", + description = "Get gesture hold time in milliseconds", + returnType = "float" + }, + { + name = "GetGestureDragVector", + description = "Get gesture drag vector", + returnType = "Vector2" + }, + { + name = "GetGestureDragAngle", + description = "Get gesture drag angle", + returnType = "float" + }, + { + name = "GetGesturePinchVector", + description = "Get gesture pinch delta", + returnType = "Vector2" + }, + { + name = "GetGesturePinchAngle", + description = "Get gesture pinch angle", + returnType = "float" + }, + { + name = "UpdateCamera", + description = "Update camera position for selected mode", + returnType = "void", + params = { + {type = "Camera *", name = "camera"}, + {type = "int", name = "mode"} + } + }, + { + name = "UpdateCameraPro", + description = "Update camera movement/rotation", + returnType = "void", + params = { + {type = "Camera *", name = "camera"}, + {type = "Vector3", name = "movement"}, + {type = "Vector3", name = "rotation"}, + {type = "float", name = "zoom"} + } + }, + { + name = "SetShapesTexture", + description = "Set texture and rectangle to be used on shapes drawing", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "Rectangle", name = "source"} + } + }, + { + name = "DrawPixel", + description = "Draw a pixel", + returnType = "void", + params = { + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawPixelV", + description = "Draw a pixel (Vector version)", + returnType = "void", + params = { + {type = "Vector2", name = "position"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawLine", + description = "Draw a line", + returnType = "void", + params = { + {type = "int", name = "startPosX"}, + {type = "int", name = "startPosY"}, + {type = "int", name = "endPosX"}, + {type = "int", name = "endPosY"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawLineV", + description = "Draw a line (Vector version)", + returnType = "void", + params = { + {type = "Vector2", name = "startPos"}, + {type = "Vector2", name = "endPos"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawLineEx", + description = "Draw a line defining thickness", + returnType = "void", + params = { + {type = "Vector2", name = "startPos"}, + {type = "Vector2", name = "endPos"}, + {type = "float", name = "thick"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawLineBezier", + description = "Draw a line using cubic-bezier curves in-out", + returnType = "void", + params = { + {type = "Vector2", name = "startPos"}, + {type = "Vector2", name = "endPos"}, + {type = "float", name = "thick"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawLineBezierQuad", + description = "Draw line using quadratic bezier curves with a control point", + returnType = "void", + params = { + {type = "Vector2", name = "startPos"}, + {type = "Vector2", name = "endPos"}, + {type = "Vector2", name = "controlPos"}, + {type = "float", name = "thick"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawLineBezierCubic", + description = "Draw line using cubic bezier curves with 2 control points", + returnType = "void", + params = { + {type = "Vector2", name = "startPos"}, + {type = "Vector2", name = "endPos"}, + {type = "Vector2", name = "startControlPos"}, + {type = "Vector2", name = "endControlPos"}, + {type = "float", name = "thick"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawLineStrip", + description = "Draw lines sequence", + returnType = "void", + params = { + {type = "Vector2 *", name = "points"}, + {type = "int", name = "pointCount"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCircle", + description = "Draw a color-filled circle", + returnType = "void", + params = { + {type = "int", name = "centerX"}, + {type = "int", name = "centerY"}, + {type = "float", name = "radius"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCircleSector", + description = "Draw a piece of a circle", + returnType = "void", + params = { + {type = "Vector2", name = "center"}, + {type = "float", name = "radius"}, + {type = "float", name = "startAngle"}, + {type = "float", name = "endAngle"}, + {type = "int", name = "segments"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCircleSectorLines", + description = "Draw circle sector outline", + returnType = "void", + params = { + {type = "Vector2", name = "center"}, + {type = "float", name = "radius"}, + {type = "float", name = "startAngle"}, + {type = "float", name = "endAngle"}, + {type = "int", name = "segments"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCircleGradient", + description = "Draw a gradient-filled circle", + returnType = "void", + params = { + {type = "int", name = "centerX"}, + {type = "int", name = "centerY"}, + {type = "float", name = "radius"}, + {type = "Color", name = "color1"}, + {type = "Color", name = "color2"} + } + }, + { + name = "DrawCircleV", + description = "Draw a color-filled circle (Vector version)", + returnType = "void", + params = { + {type = "Vector2", name = "center"}, + {type = "float", name = "radius"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCircleLines", + description = "Draw circle outline", + returnType = "void", + params = { + {type = "int", name = "centerX"}, + {type = "int", name = "centerY"}, + {type = "float", name = "radius"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawEllipse", + description = "Draw ellipse", + returnType = "void", + params = { + {type = "int", name = "centerX"}, + {type = "int", name = "centerY"}, + {type = "float", name = "radiusH"}, + {type = "float", name = "radiusV"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawEllipseLines", + description = "Draw ellipse outline", + returnType = "void", + params = { + {type = "int", name = "centerX"}, + {type = "int", name = "centerY"}, + {type = "float", name = "radiusH"}, + {type = "float", name = "radiusV"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRing", + description = "Draw ring", + returnType = "void", + params = { + {type = "Vector2", name = "center"}, + {type = "float", name = "innerRadius"}, + {type = "float", name = "outerRadius"}, + {type = "float", name = "startAngle"}, + {type = "float", name = "endAngle"}, + {type = "int", name = "segments"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRingLines", + description = "Draw ring outline", + returnType = "void", + params = { + {type = "Vector2", name = "center"}, + {type = "float", name = "innerRadius"}, + {type = "float", name = "outerRadius"}, + {type = "float", name = "startAngle"}, + {type = "float", name = "endAngle"}, + {type = "int", name = "segments"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRectangle", + description = "Draw a color-filled rectangle", + returnType = "void", + params = { + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRectangleV", + description = "Draw a color-filled rectangle (Vector version)", + returnType = "void", + params = { + {type = "Vector2", name = "position"}, + {type = "Vector2", name = "size"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRectangleRec", + description = "Draw a color-filled rectangle", + returnType = "void", + params = { + {type = "Rectangle", name = "rec"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRectanglePro", + description = "Draw a color-filled rectangle with pro parameters", + returnType = "void", + params = { + {type = "Rectangle", name = "rec"}, + {type = "Vector2", name = "origin"}, + {type = "float", name = "rotation"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRectangleGradientV", + description = "Draw a vertical-gradient-filled rectangle", + returnType = "void", + params = { + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "Color", name = "color1"}, + {type = "Color", name = "color2"} + } + }, + { + name = "DrawRectangleGradientH", + description = "Draw a horizontal-gradient-filled rectangle", + returnType = "void", + params = { + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "Color", name = "color1"}, + {type = "Color", name = "color2"} + } + }, + { + name = "DrawRectangleGradientEx", + description = "Draw a gradient-filled rectangle with custom vertex colors", + returnType = "void", + params = { + {type = "Rectangle", name = "rec"}, + {type = "Color", name = "col1"}, + {type = "Color", name = "col2"}, + {type = "Color", name = "col3"}, + {type = "Color", name = "col4"} + } + }, + { + name = "DrawRectangleLines", + description = "Draw rectangle outline", + returnType = "void", + params = { + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRectangleLinesEx", + description = "Draw rectangle outline with extended parameters", + returnType = "void", + params = { + {type = "Rectangle", name = "rec"}, + {type = "float", name = "lineThick"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRectangleRounded", + description = "Draw rectangle with rounded edges", + returnType = "void", + params = { + {type = "Rectangle", name = "rec"}, + {type = "float", name = "roundness"}, + {type = "int", name = "segments"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRectangleRoundedLines", + description = "Draw rectangle with rounded edges outline", + returnType = "void", + params = { + {type = "Rectangle", name = "rec"}, + {type = "float", name = "roundness"}, + {type = "int", name = "segments"}, + {type = "float", name = "lineThick"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawTriangle", + description = "Draw a color-filled triangle (vertex in counter-clockwise order!)", + returnType = "void", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"}, + {type = "Vector2", name = "v3"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawTriangleLines", + description = "Draw triangle outline (vertex in counter-clockwise order!)", + returnType = "void", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"}, + {type = "Vector2", name = "v3"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawTriangleFan", + description = "Draw a triangle fan defined by points (first vertex is the center)", + returnType = "void", + params = { + {type = "Vector2 *", name = "points"}, + {type = "int", name = "pointCount"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawTriangleStrip", + description = "Draw a triangle strip defined by points", + returnType = "void", + params = { + {type = "Vector2 *", name = "points"}, + {type = "int", name = "pointCount"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawPoly", + description = "Draw a regular polygon (Vector version)", + returnType = "void", + params = { + {type = "Vector2", name = "center"}, + {type = "int", name = "sides"}, + {type = "float", name = "radius"}, + {type = "float", name = "rotation"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawPolyLines", + description = "Draw a polygon outline of n sides", + returnType = "void", + params = { + {type = "Vector2", name = "center"}, + {type = "int", name = "sides"}, + {type = "float", name = "radius"}, + {type = "float", name = "rotation"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawPolyLinesEx", + description = "Draw a polygon outline of n sides with extended parameters", + returnType = "void", + params = { + {type = "Vector2", name = "center"}, + {type = "int", name = "sides"}, + {type = "float", name = "radius"}, + {type = "float", name = "rotation"}, + {type = "float", name = "lineThick"}, + {type = "Color", name = "color"} + } + }, + { + name = "CheckCollisionRecs", + description = "Check collision between two rectangles", + returnType = "bool", + params = { + {type = "Rectangle", name = "rec1"}, + {type = "Rectangle", name = "rec2"} + } + }, + { + name = "CheckCollisionCircles", + description = "Check collision between two circles", + returnType = "bool", + params = { + {type = "Vector2", name = "center1"}, + {type = "float", name = "radius1"}, + {type = "Vector2", name = "center2"}, + {type = "float", name = "radius2"} + } + }, + { + name = "CheckCollisionCircleRec", + description = "Check collision between circle and rectangle", + returnType = "bool", + params = { + {type = "Vector2", name = "center"}, + {type = "float", name = "radius"}, + {type = "Rectangle", name = "rec"} + } + }, + { + name = "CheckCollisionPointRec", + description = "Check if point is inside rectangle", + returnType = "bool", + params = { + {type = "Vector2", name = "point"}, + {type = "Rectangle", name = "rec"} + } + }, + { + name = "CheckCollisionPointCircle", + description = "Check if point is inside circle", + returnType = "bool", + params = { + {type = "Vector2", name = "point"}, + {type = "Vector2", name = "center"}, + {type = "float", name = "radius"} + } + }, + { + name = "CheckCollisionPointTriangle", + description = "Check if point is inside a triangle", + returnType = "bool", + params = { + {type = "Vector2", name = "point"}, + {type = "Vector2", name = "p1"}, + {type = "Vector2", name = "p2"}, + {type = "Vector2", name = "p3"} + } + }, + { + name = "CheckCollisionPointPoly", + description = "Check if point is within a polygon described by array of vertices", + returnType = "bool", + params = { + {type = "Vector2", name = "point"}, + {type = "Vector2 *", name = "points"}, + {type = "int", name = "pointCount"} + } + }, + { + name = "CheckCollisionLines", + description = "Check the collision between two lines defined by two points each, returns collision point by reference", + returnType = "bool", + params = { + {type = "Vector2", name = "startPos1"}, + {type = "Vector2", name = "endPos1"}, + {type = "Vector2", name = "startPos2"}, + {type = "Vector2", name = "endPos2"}, + {type = "Vector2 *", name = "collisionPoint"} + } + }, + { + name = "CheckCollisionPointLine", + description = "Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]", + returnType = "bool", + params = { + {type = "Vector2", name = "point"}, + {type = "Vector2", name = "p1"}, + {type = "Vector2", name = "p2"}, + {type = "int", name = "threshold"} + } + }, + { + name = "GetCollisionRec", + description = "Get collision rectangle for two rectangles collision", + returnType = "Rectangle", + params = { + {type = "Rectangle", name = "rec1"}, + {type = "Rectangle", name = "rec2"} + } + }, + { + name = "LoadImage", + description = "Load image from file into CPU memory (RAM)", + returnType = "Image", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "LoadImageRaw", + description = "Load image from RAW file data", + returnType = "Image", + params = { + {type = "const char *", name = "fileName"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "format"}, + {type = "int", name = "headerSize"} + } + }, + { + name = "LoadImageAnim", + description = "Load image sequence from file (frames appended to image.data)", + returnType = "Image", + params = { + {type = "const char *", name = "fileName"}, + {type = "int *", name = "frames"} + } + }, + { + name = "LoadImageFromMemory", + description = "Load image from memory buffer, fileType refers to extension: i.e. '.png'", + returnType = "Image", + params = { + {type = "const char *", name = "fileType"}, + {type = "const unsigned char *", name = "fileData"}, + {type = "int", name = "dataSize"} + } + }, + { + name = "LoadImageFromTexture", + description = "Load image from GPU texture data", + returnType = "Image", + params = { + {type = "Texture2D", name = "texture"} + } + }, + { + name = "LoadImageFromScreen", + description = "Load image from screen buffer and (screenshot)", + returnType = "Image" + }, + { + name = "IsImageReady", + description = "Check if an image is ready", + returnType = "bool", + params = { + {type = "Image", name = "image"} + } + }, + { + name = "UnloadImage", + description = "Unload image from CPU memory (RAM)", + returnType = "void", + params = { + {type = "Image", name = "image"} + } + }, + { + name = "ExportImage", + description = "Export image data to file, returns true on success", + returnType = "bool", + params = { + {type = "Image", name = "image"}, + {type = "const char *", name = "fileName"} + } + }, + { + name = "ExportImageAsCode", + description = "Export image as code file defining an array of bytes, returns true on success", + returnType = "bool", + params = { + {type = "Image", name = "image"}, + {type = "const char *", name = "fileName"} + } + }, + { + name = "GenImageColor", + description = "Generate image: plain color", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "Color", name = "color"} + } + }, + { + name = "GenImageGradientV", + description = "Generate image: vertical gradient", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "Color", name = "top"}, + {type = "Color", name = "bottom"} + } + }, + { + name = "GenImageGradientH", + description = "Generate image: horizontal gradient", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "Color", name = "left"}, + {type = "Color", name = "right"} + } + }, + { + name = "GenImageGradientRadial", + description = "Generate image: radial gradient", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "float", name = "density"}, + {type = "Color", name = "inner"}, + {type = "Color", name = "outer"} + } + }, + { + name = "GenImageChecked", + description = "Generate image: checked", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "checksX"}, + {type = "int", name = "checksY"}, + {type = "Color", name = "col1"}, + {type = "Color", name = "col2"} + } + }, + { + name = "GenImageWhiteNoise", + description = "Generate image: white noise", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "float", name = "factor"} + } + }, + { + name = "GenImagePerlinNoise", + description = "Generate image: perlin noise", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "offsetX"}, + {type = "int", name = "offsetY"}, + {type = "float", name = "scale"} + } + }, + { + name = "GenImageCellular", + description = "Generate image: cellular algorithm, bigger tileSize means bigger cells", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "tileSize"} + } + }, + { + name = "GenImageText", + description = "Generate image: grayscale image from text data", + returnType = "Image", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "const char *", name = "text"} + } + }, + { + name = "ImageCopy", + description = "Create an image duplicate (useful for transformations)", + returnType = "Image", + params = { + {type = "Image", name = "image"} + } + }, + { + name = "ImageFromImage", + description = "Create an image from another image piece", + returnType = "Image", + params = { + {type = "Image", name = "image"}, + {type = "Rectangle", name = "rec"} + } + }, + { + name = "ImageText", + description = "Create an image from text (default font)", + returnType = "Image", + params = { + {type = "const char *", name = "text"}, + {type = "int", name = "fontSize"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageTextEx", + description = "Create an image from text (custom sprite font)", + returnType = "Image", + params = { + {type = "Font", name = "font"}, + {type = "const char *", name = "text"}, + {type = "float", name = "fontSize"}, + {type = "float", name = "spacing"}, + {type = "Color", name = "tint"} + } + }, + { + name = "ImageFormat", + description = "Convert image data to desired format", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "int", name = "newFormat"} + } + }, + { + name = "ImageToPOT", + description = "Convert image to POT (power-of-two)", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "Color", name = "fill"} + } + }, + { + name = "ImageCrop", + description = "Crop an image to a defined rectangle", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "Rectangle", name = "crop"} + } + }, + { + name = "ImageAlphaCrop", + description = "Crop image depending on alpha value", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "float", name = "threshold"} + } + }, + { + name = "ImageAlphaClear", + description = "Clear alpha channel to desired color", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "Color", name = "color"}, + {type = "float", name = "threshold"} + } + }, + { + name = "ImageAlphaMask", + description = "Apply alpha mask to image", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "Image", name = "alphaMask"} + } + }, + { + name = "ImageAlphaPremultiply", + description = "Premultiply alpha channel", + returnType = "void", + params = { + {type = "Image *", name = "image"} + } + }, + { + name = "ImageBlurGaussian", + description = "Apply Gaussian blur using a box blur approximation", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "int", name = "blurSize"} + } + }, + { + name = "ImageResize", + description = "Resize image (Bicubic scaling algorithm)", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "int", name = "newWidth"}, + {type = "int", name = "newHeight"} + } + }, + { + name = "ImageResizeNN", + description = "Resize image (Nearest-Neighbor scaling algorithm)", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "int", name = "newWidth"}, + {type = "int", name = "newHeight"} + } + }, + { + name = "ImageResizeCanvas", + description = "Resize canvas and fill with color", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "int", name = "newWidth"}, + {type = "int", name = "newHeight"}, + {type = "int", name = "offsetX"}, + {type = "int", name = "offsetY"}, + {type = "Color", name = "fill"} + } + }, + { + name = "ImageMipmaps", + description = "Compute all mipmap levels for a provided image", + returnType = "void", + params = { + {type = "Image *", name = "image"} + } + }, + { + name = "ImageDither", + description = "Dither image data to 16bpp or lower (Floyd-Steinberg dithering)", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "int", name = "rBpp"}, + {type = "int", name = "gBpp"}, + {type = "int", name = "bBpp"}, + {type = "int", name = "aBpp"} + } + }, + { + name = "ImageFlipVertical", + description = "Flip image vertically", + returnType = "void", + params = { + {type = "Image *", name = "image"} + } + }, + { + name = "ImageFlipHorizontal", + description = "Flip image horizontally", + returnType = "void", + params = { + {type = "Image *", name = "image"} + } + }, + { + name = "ImageRotateCW", + description = "Rotate image clockwise 90deg", + returnType = "void", + params = { + {type = "Image *", name = "image"} + } + }, + { + name = "ImageRotateCCW", + description = "Rotate image counter-clockwise 90deg", + returnType = "void", + params = { + {type = "Image *", name = "image"} + } + }, + { + name = "ImageColorTint", + description = "Modify image color: tint", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageColorInvert", + description = "Modify image color: invert", + returnType = "void", + params = { + {type = "Image *", name = "image"} + } + }, + { + name = "ImageColorGrayscale", + description = "Modify image color: grayscale", + returnType = "void", + params = { + {type = "Image *", name = "image"} + } + }, + { + name = "ImageColorContrast", + description = "Modify image color: contrast (-100 to 100)", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "float", name = "contrast"} + } + }, + { + name = "ImageColorBrightness", + description = "Modify image color: brightness (-255 to 255)", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "int", name = "brightness"} + } + }, + { + name = "ImageColorReplace", + description = "Modify image color: replace color", + returnType = "void", + params = { + {type = "Image *", name = "image"}, + {type = "Color", name = "color"}, + {type = "Color", name = "replace"} + } + }, + { + name = "LoadImageColors", + description = "Load color data from image as a Color array (RGBA - 32bit)", + returnType = "Color *", + params = { + {type = "Image", name = "image"} + } + }, + { + name = "LoadImagePalette", + description = "Load colors palette from image as a Color array (RGBA - 32bit)", + returnType = "Color *", + params = { + {type = "Image", name = "image"}, + {type = "int", name = "maxPaletteSize"}, + {type = "int *", name = "colorCount"} + } + }, + { + name = "UnloadImageColors", + description = "Unload color data loaded with LoadImageColors()", + returnType = "void", + params = { + {type = "Color *", name = "colors"} + } + }, + { + name = "UnloadImagePalette", + description = "Unload colors palette loaded with LoadImagePalette()", + returnType = "void", + params = { + {type = "Color *", name = "colors"} + } + }, + { + name = "GetImageAlphaBorder", + description = "Get image alpha border rectangle", + returnType = "Rectangle", + params = { + {type = "Image", name = "image"}, + {type = "float", name = "threshold"} + } + }, + { + name = "GetImageColor", + description = "Get image pixel color at (x, y) position", + returnType = "Color", + params = { + {type = "Image", name = "image"}, + {type = "int", name = "x"}, + {type = "int", name = "y"} + } + }, + { + name = "ImageClearBackground", + description = "Clear image background with given color", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawPixel", + description = "Draw pixel within an image", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawPixelV", + description = "Draw pixel within an image (Vector version)", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Vector2", name = "position"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawLine", + description = "Draw line within an image", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "int", name = "startPosX"}, + {type = "int", name = "startPosY"}, + {type = "int", name = "endPosX"}, + {type = "int", name = "endPosY"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawLineV", + description = "Draw line within an image (Vector version)", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Vector2", name = "start"}, + {type = "Vector2", name = "end"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawCircle", + description = "Draw a filled circle within an image", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "int", name = "centerX"}, + {type = "int", name = "centerY"}, + {type = "int", name = "radius"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawCircleV", + description = "Draw a filled circle within an image (Vector version)", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Vector2", name = "center"}, + {type = "int", name = "radius"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawCircleLines", + description = "Draw circle outline within an image", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "int", name = "centerX"}, + {type = "int", name = "centerY"}, + {type = "int", name = "radius"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawCircleLinesV", + description = "Draw circle outline within an image (Vector version)", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Vector2", name = "center"}, + {type = "int", name = "radius"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawRectangle", + description = "Draw rectangle within an image", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawRectangleV", + description = "Draw rectangle within an image (Vector version)", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Vector2", name = "position"}, + {type = "Vector2", name = "size"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawRectangleRec", + description = "Draw rectangle within an image", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Rectangle", name = "rec"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawRectangleLines", + description = "Draw rectangle lines within an image", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Rectangle", name = "rec"}, + {type = "int", name = "thick"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDraw", + description = "Draw a source image within a destination image (tint applied to source)", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Image", name = "src"}, + {type = "Rectangle", name = "srcRec"}, + {type = "Rectangle", name = "dstRec"}, + {type = "Color", name = "tint"} + } + }, + { + name = "ImageDrawText", + description = "Draw text (using default font) within an image (destination)", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "const char *", name = "text"}, + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "int", name = "fontSize"}, + {type = "Color", name = "color"} + } + }, + { + name = "ImageDrawTextEx", + description = "Draw text (custom sprite font) within an image (destination)", + returnType = "void", + params = { + {type = "Image *", name = "dst"}, + {type = "Font", name = "font"}, + {type = "const char *", name = "text"}, + {type = "Vector2", name = "position"}, + {type = "float", name = "fontSize"}, + {type = "float", name = "spacing"}, + {type = "Color", name = "tint"} + } + }, + { + name = "LoadTexture", + description = "Load texture from file into GPU memory (VRAM)", + returnType = "Texture2D", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "LoadTextureFromImage", + description = "Load texture from image data", + returnType = "Texture2D", + params = { + {type = "Image", name = "image"} + } + }, + { + name = "LoadTextureCubemap", + description = "Load cubemap from image, multiple image cubemap layouts supported", + returnType = "TextureCubemap", + params = { + {type = "Image", name = "image"}, + {type = "int", name = "layout"} + } + }, + { + name = "LoadRenderTexture", + description = "Load texture for rendering (framebuffer)", + returnType = "RenderTexture2D", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "IsTextureReady", + description = "Check if a texture is ready", + returnType = "bool", + params = { + {type = "Texture2D", name = "texture"} + } + }, + { + name = "UnloadTexture", + description = "Unload texture from GPU memory (VRAM)", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"} + } + }, + { + name = "IsRenderTextureReady", + description = "Check if a render texture is ready", + returnType = "bool", + params = { + {type = "RenderTexture2D", name = "target"} + } + }, + { + name = "UnloadRenderTexture", + description = "Unload render texture from GPU memory (VRAM)", + returnType = "void", + params = { + {type = "RenderTexture2D", name = "target"} + } + }, + { + name = "UpdateTexture", + description = "Update GPU texture with new data", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "const void *", name = "pixels"} + } + }, + { + name = "UpdateTextureRec", + description = "Update GPU texture rectangle with new data", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "Rectangle", name = "rec"}, + {type = "const void *", name = "pixels"} + } + }, + { + name = "GenTextureMipmaps", + description = "Generate GPU mipmaps for a texture", + returnType = "void", + params = { + {type = "Texture2D *", name = "texture"} + } + }, + { + name = "SetTextureFilter", + description = "Set texture scaling filter mode", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "int", name = "filter"} + } + }, + { + name = "SetTextureWrap", + description = "Set texture wrapping mode", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "int", name = "wrap"} + } + }, + { + name = "DrawTexture", + description = "Draw a Texture2D", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawTextureV", + description = "Draw a Texture2D with position defined as Vector2", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "Vector2", name = "position"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawTextureEx", + description = "Draw a Texture2D with extended parameters", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "Vector2", name = "position"}, + {type = "float", name = "rotation"}, + {type = "float", name = "scale"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawTextureRec", + description = "Draw a part of a texture defined by a rectangle", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "Rectangle", name = "source"}, + {type = "Vector2", name = "position"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawTexturePro", + description = "Draw a part of a texture defined by a rectangle with 'pro' parameters", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "Rectangle", name = "source"}, + {type = "Rectangle", name = "dest"}, + {type = "Vector2", name = "origin"}, + {type = "float", name = "rotation"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawTextureNPatch", + description = "Draws a texture (or part of it) that stretches or shrinks nicely", + returnType = "void", + params = { + {type = "Texture2D", name = "texture"}, + {type = "NPatchInfo", name = "nPatchInfo"}, + {type = "Rectangle", name = "dest"}, + {type = "Vector2", name = "origin"}, + {type = "float", name = "rotation"}, + {type = "Color", name = "tint"} + } + }, + { + name = "Fade", + description = "Get color with alpha applied, alpha goes from 0.0f to 1.0f", + returnType = "Color", + params = { + {type = "Color", name = "color"}, + {type = "float", name = "alpha"} + } + }, + { + name = "ColorToInt", + description = "Get hexadecimal value for a Color", + returnType = "int", + params = { + {type = "Color", name = "color"} + } + }, + { + name = "ColorNormalize", + description = "Get Color normalized as float [0..1]", + returnType = "Vector4", + params = { + {type = "Color", name = "color"} + } + }, + { + name = "ColorFromNormalized", + description = "Get Color from normalized values [0..1]", + returnType = "Color", + params = { + {type = "Vector4", name = "normalized"} + } + }, + { + name = "ColorToHSV", + description = "Get HSV values for a Color, hue [0..360], saturation/value [0..1]", + returnType = "Vector3", + params = { + {type = "Color", name = "color"} + } + }, + { + name = "ColorFromHSV", + description = "Get a Color from HSV values, hue [0..360], saturation/value [0..1]", + returnType = "Color", + params = { + {type = "float", name = "hue"}, + {type = "float", name = "saturation"}, + {type = "float", name = "value"} + } + }, + { + name = "ColorTint", + description = "Get color multiplied with another color", + returnType = "Color", + params = { + {type = "Color", name = "color"}, + {type = "Color", name = "tint"} + } + }, + { + name = "ColorBrightness", + description = "Get color with brightness correction, brightness factor goes from -1.0f to 1.0f", + returnType = "Color", + params = { + {type = "Color", name = "color"}, + {type = "float", name = "factor"} + } + }, + { + name = "ColorContrast", + description = "Get color with contrast correction, contrast values between -1.0f and 1.0f", + returnType = "Color", + params = { + {type = "Color", name = "color"}, + {type = "float", name = "contrast"} + } + }, + { + name = "ColorAlpha", + description = "Get color with alpha applied, alpha goes from 0.0f to 1.0f", + returnType = "Color", + params = { + {type = "Color", name = "color"}, + {type = "float", name = "alpha"} + } + }, + { + name = "ColorAlphaBlend", + description = "Get src alpha-blended into dst color with tint", + returnType = "Color", + params = { + {type = "Color", name = "dst"}, + {type = "Color", name = "src"}, + {type = "Color", name = "tint"} + } + }, + { + name = "GetColor", + description = "Get Color structure from hexadecimal value", + returnType = "Color", + params = { + {type = "unsigned int", name = "hexValue"} + } + }, + { + name = "GetPixelColor", + description = "Get Color from a source pixel pointer of certain format", + returnType = "Color", + params = { + {type = "void *", name = "srcPtr"}, + {type = "int", name = "format"} + } + }, + { + name = "SetPixelColor", + description = "Set color formatted into destination pixel pointer", + returnType = "void", + params = { + {type = "void *", name = "dstPtr"}, + {type = "Color", name = "color"}, + {type = "int", name = "format"} + } + }, + { + name = "GetPixelDataSize", + description = "Get pixel data size in bytes for certain format", + returnType = "int", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "format"} + } + }, + { + name = "GetFontDefault", + description = "Get the default Font", + returnType = "Font" + }, + { + name = "LoadFont", + description = "Load font from file into GPU memory (VRAM)", + returnType = "Font", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "LoadFontEx", + description = "Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set", + returnType = "Font", + params = { + {type = "const char *", name = "fileName"}, + {type = "int", name = "fontSize"}, + {type = "int *", name = "fontChars"}, + {type = "int", name = "glyphCount"} + } + }, + { + name = "LoadFontFromImage", + description = "Load font from Image (XNA style)", + returnType = "Font", + params = { + {type = "Image", name = "image"}, + {type = "Color", name = "key"}, + {type = "int", name = "firstChar"} + } + }, + { + name = "LoadFontFromMemory", + description = "Load font from memory buffer, fileType refers to extension: i.e. '.ttf'", + returnType = "Font", + params = { + {type = "const char *", name = "fileType"}, + {type = "const unsigned char *", name = "fileData"}, + {type = "int", name = "dataSize"}, + {type = "int", name = "fontSize"}, + {type = "int *", name = "fontChars"}, + {type = "int", name = "glyphCount"} + } + }, + { + name = "IsFontReady", + description = "Check if a font is ready", + returnType = "bool", + params = { + {type = "Font", name = "font"} + } + }, + { + name = "LoadFontData", + description = "Load font data for further use", + returnType = "GlyphInfo *", + params = { + {type = "const unsigned char *", name = "fileData"}, + {type = "int", name = "dataSize"}, + {type = "int", name = "fontSize"}, + {type = "int *", name = "fontChars"}, + {type = "int", name = "glyphCount"}, + {type = "int", name = "type"} + } + }, + { + name = "GenImageFontAtlas", + description = "Generate image font atlas using chars info", + returnType = "Image", + params = { + {type = "const GlyphInfo *", name = "chars"}, + {type = "Rectangle **", name = "recs"}, + {type = "int", name = "glyphCount"}, + {type = "int", name = "fontSize"}, + {type = "int", name = "padding"}, + {type = "int", name = "packMethod"} + } + }, + { + name = "UnloadFontData", + description = "Unload font chars info data (RAM)", + returnType = "void", + params = { + {type = "GlyphInfo *", name = "chars"}, + {type = "int", name = "glyphCount"} + } + }, + { + name = "UnloadFont", + description = "Unload font from GPU memory (VRAM)", + returnType = "void", + params = { + {type = "Font", name = "font"} + } + }, + { + name = "ExportFontAsCode", + description = "Export font as code file, returns true on success", + returnType = "bool", + params = { + {type = "Font", name = "font"}, + {type = "const char *", name = "fileName"} + } + }, + { + name = "DrawFPS", + description = "Draw current FPS", + returnType = "void", + params = { + {type = "int", name = "posX"}, + {type = "int", name = "posY"} + } + }, + { + name = "DrawText", + description = "Draw text (using default font)", + returnType = "void", + params = { + {type = "const char *", name = "text"}, + {type = "int", name = "posX"}, + {type = "int", name = "posY"}, + {type = "int", name = "fontSize"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawTextEx", + description = "Draw text using font and additional parameters", + returnType = "void", + params = { + {type = "Font", name = "font"}, + {type = "const char *", name = "text"}, + {type = "Vector2", name = "position"}, + {type = "float", name = "fontSize"}, + {type = "float", name = "spacing"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawTextPro", + description = "Draw text using Font and pro parameters (rotation)", + returnType = "void", + params = { + {type = "Font", name = "font"}, + {type = "const char *", name = "text"}, + {type = "Vector2", name = "position"}, + {type = "Vector2", name = "origin"}, + {type = "float", name = "rotation"}, + {type = "float", name = "fontSize"}, + {type = "float", name = "spacing"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawTextCodepoint", + description = "Draw one character (codepoint)", + returnType = "void", + params = { + {type = "Font", name = "font"}, + {type = "int", name = "codepoint"}, + {type = "Vector2", name = "position"}, + {type = "float", name = "fontSize"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawTextCodepoints", + description = "Draw multiple character (codepoint)", + returnType = "void", + params = { + {type = "Font", name = "font"}, + {type = "const int *", name = "codepoints"}, + {type = "int", name = "count"}, + {type = "Vector2", name = "position"}, + {type = "float", name = "fontSize"}, + {type = "float", name = "spacing"}, + {type = "Color", name = "tint"} + } + }, + { + name = "MeasureText", + description = "Measure string width for default font", + returnType = "int", + params = { + {type = "const char *", name = "text"}, + {type = "int", name = "fontSize"} + } + }, + { + name = "MeasureTextEx", + description = "Measure string size for Font", + returnType = "Vector2", + params = { + {type = "Font", name = "font"}, + {type = "const char *", name = "text"}, + {type = "float", name = "fontSize"}, + {type = "float", name = "spacing"} + } + }, + { + name = "GetGlyphIndex", + description = "Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found", + returnType = "int", + params = { + {type = "Font", name = "font"}, + {type = "int", name = "codepoint"} + } + }, + { + name = "GetGlyphInfo", + description = "Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found", + returnType = "GlyphInfo", + params = { + {type = "Font", name = "font"}, + {type = "int", name = "codepoint"} + } + }, + { + name = "GetGlyphAtlasRec", + description = "Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found", + returnType = "Rectangle", + params = { + {type = "Font", name = "font"}, + {type = "int", name = "codepoint"} + } + }, + { + name = "LoadUTF8", + description = "Load UTF-8 text encoded from codepoints array", + returnType = "char *", + params = { + {type = "const int *", name = "codepoints"}, + {type = "int", name = "length"} + } + }, + { + name = "UnloadUTF8", + description = "Unload UTF-8 text encoded from codepoints array", + returnType = "void", + params = { + {type = "char *", name = "text"} + } + }, + { + name = "LoadCodepoints", + description = "Load all codepoints from a UTF-8 text string, codepoints count returned by parameter", + returnType = "int *", + params = { + {type = "const char *", name = "text"}, + {type = "int *", name = "count"} + } + }, + { + name = "UnloadCodepoints", + description = "Unload codepoints data from memory", + returnType = "void", + params = { + {type = "int *", name = "codepoints"} + } + }, + { + name = "GetCodepointCount", + description = "Get total number of codepoints in a UTF-8 encoded string", + returnType = "int", + params = { + {type = "const char *", name = "text"} + } + }, + { + name = "GetCodepoint", + description = "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + returnType = "int", + params = { + {type = "const char *", name = "text"}, + {type = "int *", name = "codepointSize"} + } + }, + { + name = "GetCodepointNext", + description = "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + returnType = "int", + params = { + {type = "const char *", name = "text"}, + {type = "int *", name = "codepointSize"} + } + }, + { + name = "GetCodepointPrevious", + description = "Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure", + returnType = "int", + params = { + {type = "const char *", name = "text"}, + {type = "int *", name = "codepointSize"} + } + }, + { + name = "CodepointToUTF8", + description = "Encode one codepoint into UTF-8 byte array (array length returned as parameter)", + returnType = "const char *", + params = { + {type = "int", name = "codepoint"}, + {type = "int *", name = "utf8Size"} + } + }, + { + name = "TextCopy", + description = "Copy one string to another, returns bytes copied", + returnType = "int", + params = { + {type = "char *", name = "dst"}, + {type = "const char *", name = "src"} + } + }, + { + name = "TextIsEqual", + description = "Check if two text string are equal", + returnType = "bool", + params = { + {type = "const char *", name = "text1"}, + {type = "const char *", name = "text2"} + } + }, + { + name = "TextLength", + description = "Get text length, checks for '\\0' ending", + returnType = "unsigned int", + params = { + {type = "const char *", name = "text"} + } + }, + { + name = "TextFormat", + description = "Text formatting with variables (sprintf() style)", + returnType = "const char *", + params = { + {type = "const char *", name = "text"}, + {type = "...", name = "args"} + } + }, + { + name = "TextSubtext", + description = "Get a piece of a text string", + returnType = "const char *", + params = { + {type = "const char *", name = "text"}, + {type = "int", name = "position"}, + {type = "int", name = "length"} + } + }, + { + name = "TextReplace", + description = "Replace text string (WARNING: memory must be freed!)", + returnType = "char *", + params = { + {type = "char *", name = "text"}, + {type = "const char *", name = "replace"}, + {type = "const char *", name = "by"} + } + }, + { + name = "TextInsert", + description = "Insert text in a position (WARNING: memory must be freed!)", + returnType = "char *", + params = { + {type = "const char *", name = "text"}, + {type = "const char *", name = "insert"}, + {type = "int", name = "position"} + } + }, + { + name = "TextJoin", + description = "Join text strings with delimiter", + returnType = "const char *", + params = { + {type = "const char **", name = "textList"}, + {type = "int", name = "count"}, + {type = "const char *", name = "delimiter"} + } + }, + { + name = "TextSplit", + description = "Split text into multiple strings", + returnType = "const char **", + params = { + {type = "const char *", name = "text"}, + {type = "char", name = "delimiter"}, + {type = "int *", name = "count"} + } + }, + { + name = "TextAppend", + description = "Append text at specific position and move cursor!", + returnType = "void", + params = { + {type = "char *", name = "text"}, + {type = "const char *", name = "append"}, + {type = "int *", name = "position"} + } + }, + { + name = "TextFindIndex", + description = "Find first text occurrence within a string", + returnType = "int", + params = { + {type = "const char *", name = "text"}, + {type = "const char *", name = "find"} + } + }, + { + name = "TextToUpper", + description = "Get upper case version of provided string", + returnType = "const char *", + params = { + {type = "const char *", name = "text"} + } + }, + { + name = "TextToLower", + description = "Get lower case version of provided string", + returnType = "const char *", + params = { + {type = "const char *", name = "text"} + } + }, + { + name = "TextToPascal", + description = "Get Pascal case notation version of provided string", + returnType = "const char *", + params = { + {type = "const char *", name = "text"} + } + }, + { + name = "TextToInteger", + description = "Get integer value from text (negative values not supported)", + returnType = "int", + params = { + {type = "const char *", name = "text"} + } + }, + { + name = "DrawLine3D", + description = "Draw a line in 3D world space", + returnType = "void", + params = { + {type = "Vector3", name = "startPos"}, + {type = "Vector3", name = "endPos"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawPoint3D", + description = "Draw a point in 3D space, actually a small line", + returnType = "void", + params = { + {type = "Vector3", name = "position"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCircle3D", + description = "Draw a circle in 3D world space", + returnType = "void", + params = { + {type = "Vector3", name = "center"}, + {type = "float", name = "radius"}, + {type = "Vector3", name = "rotationAxis"}, + {type = "float", name = "rotationAngle"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawTriangle3D", + description = "Draw a color-filled triangle (vertex in counter-clockwise order!)", + returnType = "void", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"}, + {type = "Vector3", name = "v3"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawTriangleStrip3D", + description = "Draw a triangle strip defined by points", + returnType = "void", + params = { + {type = "Vector3 *", name = "points"}, + {type = "int", name = "pointCount"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCube", + description = "Draw cube", + returnType = "void", + params = { + {type = "Vector3", name = "position"}, + {type = "float", name = "width"}, + {type = "float", name = "height"}, + {type = "float", name = "length"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCubeV", + description = "Draw cube (Vector version)", + returnType = "void", + params = { + {type = "Vector3", name = "position"}, + {type = "Vector3", name = "size"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCubeWires", + description = "Draw cube wires", + returnType = "void", + params = { + {type = "Vector3", name = "position"}, + {type = "float", name = "width"}, + {type = "float", name = "height"}, + {type = "float", name = "length"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCubeWiresV", + description = "Draw cube wires (Vector version)", + returnType = "void", + params = { + {type = "Vector3", name = "position"}, + {type = "Vector3", name = "size"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawSphere", + description = "Draw sphere", + returnType = "void", + params = { + {type = "Vector3", name = "centerPos"}, + {type = "float", name = "radius"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawSphereEx", + description = "Draw sphere with extended parameters", + returnType = "void", + params = { + {type = "Vector3", name = "centerPos"}, + {type = "float", name = "radius"}, + {type = "int", name = "rings"}, + {type = "int", name = "slices"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawSphereWires", + description = "Draw sphere wires", + returnType = "void", + params = { + {type = "Vector3", name = "centerPos"}, + {type = "float", name = "radius"}, + {type = "int", name = "rings"}, + {type = "int", name = "slices"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCylinder", + description = "Draw a cylinder/cone", + returnType = "void", + params = { + {type = "Vector3", name = "position"}, + {type = "float", name = "radiusTop"}, + {type = "float", name = "radiusBottom"}, + {type = "float", name = "height"}, + {type = "int", name = "slices"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCylinderEx", + description = "Draw a cylinder with base at startPos and top at endPos", + returnType = "void", + params = { + {type = "Vector3", name = "startPos"}, + {type = "Vector3", name = "endPos"}, + {type = "float", name = "startRadius"}, + {type = "float", name = "endRadius"}, + {type = "int", name = "sides"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCylinderWires", + description = "Draw a cylinder/cone wires", + returnType = "void", + params = { + {type = "Vector3", name = "position"}, + {type = "float", name = "radiusTop"}, + {type = "float", name = "radiusBottom"}, + {type = "float", name = "height"}, + {type = "int", name = "slices"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCylinderWiresEx", + description = "Draw a cylinder wires with base at startPos and top at endPos", + returnType = "void", + params = { + {type = "Vector3", name = "startPos"}, + {type = "Vector3", name = "endPos"}, + {type = "float", name = "startRadius"}, + {type = "float", name = "endRadius"}, + {type = "int", name = "sides"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCapsule", + description = "Draw a capsule with the center of its sphere caps at startPos and endPos", + returnType = "void", + params = { + {type = "Vector3", name = "startPos"}, + {type = "Vector3", name = "endPos"}, + {type = "float", name = "radius"}, + {type = "int", name = "slices"}, + {type = "int", name = "rings"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawCapsuleWires", + description = "Draw capsule wireframe with the center of its sphere caps at startPos and endPos", + returnType = "void", + params = { + {type = "Vector3", name = "startPos"}, + {type = "Vector3", name = "endPos"}, + {type = "float", name = "radius"}, + {type = "int", name = "slices"}, + {type = "int", name = "rings"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawPlane", + description = "Draw a plane XZ", + returnType = "void", + params = { + {type = "Vector3", name = "centerPos"}, + {type = "Vector2", name = "size"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawRay", + description = "Draw a ray line", + returnType = "void", + params = { + {type = "Ray", name = "ray"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawGrid", + description = "Draw a grid (centered at (0, 0, 0))", + returnType = "void", + params = { + {type = "int", name = "slices"}, + {type = "float", name = "spacing"} + } + }, + { + name = "LoadModel", + description = "Load model from files (meshes and materials)", + returnType = "Model", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "LoadModelFromMesh", + description = "Load model from generated mesh (default material)", + returnType = "Model", + params = { + {type = "Mesh", name = "mesh"} + } + }, + { + name = "IsModelReady", + description = "Check if a model is ready", + returnType = "bool", + params = { + {type = "Model", name = "model"} + } + }, + { + name = "UnloadModel", + description = "Unload model (including meshes) from memory (RAM and/or VRAM)", + returnType = "void", + params = { + {type = "Model", name = "model"} + } + }, + { + name = "GetModelBoundingBox", + description = "Compute model bounding box limits (considers all meshes)", + returnType = "BoundingBox", + params = { + {type = "Model", name = "model"} + } + }, + { + name = "DrawModel", + description = "Draw a model (with texture if set)", + returnType = "void", + params = { + {type = "Model", name = "model"}, + {type = "Vector3", name = "position"}, + {type = "float", name = "scale"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawModelEx", + description = "Draw a model with extended parameters", + returnType = "void", + params = { + {type = "Model", name = "model"}, + {type = "Vector3", name = "position"}, + {type = "Vector3", name = "rotationAxis"}, + {type = "float", name = "rotationAngle"}, + {type = "Vector3", name = "scale"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawModelWires", + description = "Draw a model wires (with texture if set)", + returnType = "void", + params = { + {type = "Model", name = "model"}, + {type = "Vector3", name = "position"}, + {type = "float", name = "scale"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawModelWiresEx", + description = "Draw a model wires (with texture if set) with extended parameters", + returnType = "void", + params = { + {type = "Model", name = "model"}, + {type = "Vector3", name = "position"}, + {type = "Vector3", name = "rotationAxis"}, + {type = "float", name = "rotationAngle"}, + {type = "Vector3", name = "scale"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawBoundingBox", + description = "Draw bounding box (wires)", + returnType = "void", + params = { + {type = "BoundingBox", name = "box"}, + {type = "Color", name = "color"} + } + }, + { + name = "DrawBillboard", + description = "Draw a billboard texture", + returnType = "void", + params = { + {type = "Camera", name = "camera"}, + {type = "Texture2D", name = "texture"}, + {type = "Vector3", name = "position"}, + {type = "float", name = "size"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawBillboardRec", + description = "Draw a billboard texture defined by source", + returnType = "void", + params = { + {type = "Camera", name = "camera"}, + {type = "Texture2D", name = "texture"}, + {type = "Rectangle", name = "source"}, + {type = "Vector3", name = "position"}, + {type = "Vector2", name = "size"}, + {type = "Color", name = "tint"} + } + }, + { + name = "DrawBillboardPro", + description = "Draw a billboard texture defined by source and rotation", + returnType = "void", + params = { + {type = "Camera", name = "camera"}, + {type = "Texture2D", name = "texture"}, + {type = "Rectangle", name = "source"}, + {type = "Vector3", name = "position"}, + {type = "Vector3", name = "up"}, + {type = "Vector2", name = "size"}, + {type = "Vector2", name = "origin"}, + {type = "float", name = "rotation"}, + {type = "Color", name = "tint"} + } + }, + { + name = "UploadMesh", + description = "Upload mesh vertex data in GPU and provide VAO/VBO ids", + returnType = "void", + params = { + {type = "Mesh *", name = "mesh"}, + {type = "bool", name = "dynamic"} + } + }, + { + name = "UpdateMeshBuffer", + description = "Update mesh vertex data in GPU for a specific buffer index", + returnType = "void", + params = { + {type = "Mesh", name = "mesh"}, + {type = "int", name = "index"}, + {type = "const void *", name = "data"}, + {type = "int", name = "dataSize"}, + {type = "int", name = "offset"} + } + }, + { + name = "UnloadMesh", + description = "Unload mesh data from CPU and GPU", + returnType = "void", + params = { + {type = "Mesh", name = "mesh"} + } + }, + { + name = "DrawMesh", + description = "Draw a 3d mesh with material and transform", + returnType = "void", + params = { + {type = "Mesh", name = "mesh"}, + {type = "Material", name = "material"}, + {type = "Matrix", name = "transform"} + } + }, + { + name = "DrawMeshInstanced", + description = "Draw multiple mesh instances with material and different transforms", + returnType = "void", + params = { + {type = "Mesh", name = "mesh"}, + {type = "Material", name = "material"}, + {type = "const Matrix *", name = "transforms"}, + {type = "int", name = "instances"} + } + }, + { + name = "ExportMesh", + description = "Export mesh data to file, returns true on success", + returnType = "bool", + params = { + {type = "Mesh", name = "mesh"}, + {type = "const char *", name = "fileName"} + } + }, + { + name = "GetMeshBoundingBox", + description = "Compute mesh bounding box limits", + returnType = "BoundingBox", + params = { + {type = "Mesh", name = "mesh"} + } + }, + { + name = "GenMeshTangents", + description = "Compute mesh tangents", + returnType = "void", + params = { + {type = "Mesh *", name = "mesh"} + } + }, + { + name = "GenMeshPoly", + description = "Generate polygonal mesh", + returnType = "Mesh", + params = { + {type = "int", name = "sides"}, + {type = "float", name = "radius"} + } + }, + { + name = "GenMeshPlane", + description = "Generate plane mesh (with subdivisions)", + returnType = "Mesh", + params = { + {type = "float", name = "width"}, + {type = "float", name = "length"}, + {type = "int", name = "resX"}, + {type = "int", name = "resZ"} + } + }, + { + name = "GenMeshCube", + description = "Generate cuboid mesh", + returnType = "Mesh", + params = { + {type = "float", name = "width"}, + {type = "float", name = "height"}, + {type = "float", name = "length"} + } + }, + { + name = "GenMeshSphere", + description = "Generate sphere mesh (standard sphere)", + returnType = "Mesh", + params = { + {type = "float", name = "radius"}, + {type = "int", name = "rings"}, + {type = "int", name = "slices"} + } + }, + { + name = "GenMeshHemiSphere", + description = "Generate half-sphere mesh (no bottom cap)", + returnType = "Mesh", + params = { + {type = "float", name = "radius"}, + {type = "int", name = "rings"}, + {type = "int", name = "slices"} + } + }, + { + name = "GenMeshCylinder", + description = "Generate cylinder mesh", + returnType = "Mesh", + params = { + {type = "float", name = "radius"}, + {type = "float", name = "height"}, + {type = "int", name = "slices"} + } + }, + { + name = "GenMeshCone", + description = "Generate cone/pyramid mesh", + returnType = "Mesh", + params = { + {type = "float", name = "radius"}, + {type = "float", name = "height"}, + {type = "int", name = "slices"} + } + }, + { + name = "GenMeshTorus", + description = "Generate torus mesh", + returnType = "Mesh", + params = { + {type = "float", name = "radius"}, + {type = "float", name = "size"}, + {type = "int", name = "radSeg"}, + {type = "int", name = "sides"} + } + }, + { + name = "GenMeshKnot", + description = "Generate trefoil knot mesh", + returnType = "Mesh", + params = { + {type = "float", name = "radius"}, + {type = "float", name = "size"}, + {type = "int", name = "radSeg"}, + {type = "int", name = "sides"} + } + }, + { + name = "GenMeshHeightmap", + description = "Generate heightmap mesh from image data", + returnType = "Mesh", + params = { + {type = "Image", name = "heightmap"}, + {type = "Vector3", name = "size"} + } + }, + { + name = "GenMeshCubicmap", + description = "Generate cubes-based map mesh from image data", + returnType = "Mesh", + params = { + {type = "Image", name = "cubicmap"}, + {type = "Vector3", name = "cubeSize"} + } + }, + { + name = "LoadMaterials", + description = "Load materials from model file", + returnType = "Material *", + params = { + {type = "const char *", name = "fileName"}, + {type = "int *", name = "materialCount"} + } + }, + { + name = "LoadMaterialDefault", + description = "Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)", + returnType = "Material" + }, + { + name = "IsMaterialReady", + description = "Check if a material is ready", + returnType = "bool", + params = { + {type = "Material", name = "material"} + } + }, + { + name = "UnloadMaterial", + description = "Unload material from GPU memory (VRAM)", + returnType = "void", + params = { + {type = "Material", name = "material"} + } + }, + { + name = "SetMaterialTexture", + description = "Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)", + returnType = "void", + params = { + {type = "Material *", name = "material"}, + {type = "int", name = "mapType"}, + {type = "Texture2D", name = "texture"} + } + }, + { + name = "SetModelMeshMaterial", + description = "Set material for a mesh", + returnType = "void", + params = { + {type = "Model *", name = "model"}, + {type = "int", name = "meshId"}, + {type = "int", name = "materialId"} + } + }, + { + name = "LoadModelAnimations", + description = "Load model animations from file", + returnType = "ModelAnimation *", + params = { + {type = "const char *", name = "fileName"}, + {type = "unsigned int *", name = "animCount"} + } + }, + { + name = "UpdateModelAnimation", + description = "Update model animation pose", + returnType = "void", + params = { + {type = "Model", name = "model"}, + {type = "ModelAnimation", name = "anim"}, + {type = "int", name = "frame"} + } + }, + { + name = "UnloadModelAnimation", + description = "Unload animation data", + returnType = "void", + params = { + {type = "ModelAnimation", name = "anim"} + } + }, + { + name = "UnloadModelAnimations", + description = "Unload animation array data", + returnType = "void", + params = { + {type = "ModelAnimation *", name = "animations"}, + {type = "unsigned int", name = "count"} + } + }, + { + name = "IsModelAnimationValid", + description = "Check model animation skeleton match", + returnType = "bool", + params = { + {type = "Model", name = "model"}, + {type = "ModelAnimation", name = "anim"} + } + }, + { + name = "CheckCollisionSpheres", + description = "Check collision between two spheres", + returnType = "bool", + params = { + {type = "Vector3", name = "center1"}, + {type = "float", name = "radius1"}, + {type = "Vector3", name = "center2"}, + {type = "float", name = "radius2"} + } + }, + { + name = "CheckCollisionBoxes", + description = "Check collision between two bounding boxes", + returnType = "bool", + params = { + {type = "BoundingBox", name = "box1"}, + {type = "BoundingBox", name = "box2"} + } + }, + { + name = "CheckCollisionBoxSphere", + description = "Check collision between box and sphere", + returnType = "bool", + params = { + {type = "BoundingBox", name = "box"}, + {type = "Vector3", name = "center"}, + {type = "float", name = "radius"} + } + }, + { + name = "GetRayCollisionSphere", + description = "Get collision info between ray and sphere", + returnType = "RayCollision", + params = { + {type = "Ray", name = "ray"}, + {type = "Vector3", name = "center"}, + {type = "float", name = "radius"} + } + }, + { + name = "GetRayCollisionBox", + description = "Get collision info between ray and box", + returnType = "RayCollision", + params = { + {type = "Ray", name = "ray"}, + {type = "BoundingBox", name = "box"} + } + }, + { + name = "GetRayCollisionMesh", + description = "Get collision info between ray and mesh", + returnType = "RayCollision", + params = { + {type = "Ray", name = "ray"}, + {type = "Mesh", name = "mesh"}, + {type = "Matrix", name = "transform"} + } + }, + { + name = "GetRayCollisionTriangle", + description = "Get collision info between ray and triangle", + returnType = "RayCollision", + params = { + {type = "Ray", name = "ray"}, + {type = "Vector3", name = "p1"}, + {type = "Vector3", name = "p2"}, + {type = "Vector3", name = "p3"} + } + }, + { + name = "GetRayCollisionQuad", + description = "Get collision info between ray and quad", + returnType = "RayCollision", + params = { + {type = "Ray", name = "ray"}, + {type = "Vector3", name = "p1"}, + {type = "Vector3", name = "p2"}, + {type = "Vector3", name = "p3"}, + {type = "Vector3", name = "p4"} + } + }, + { + name = "InitAudioDevice", + description = "Initialize audio device and context", + returnType = "void" + }, + { + name = "CloseAudioDevice", + description = "Close the audio device and context", + returnType = "void" + }, + { + name = "IsAudioDeviceReady", + description = "Check if audio device has been initialized successfully", + returnType = "bool" + }, + { + name = "SetMasterVolume", + description = "Set master volume (listener)", + returnType = "void", + params = { + {type = "float", name = "volume"} + } + }, + { + name = "LoadWave", + description = "Load wave data from file", + returnType = "Wave", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "LoadWaveFromMemory", + description = "Load wave from memory buffer, fileType refers to extension: i.e. '.wav'", + returnType = "Wave", + params = { + {type = "const char *", name = "fileType"}, + {type = "const unsigned char *", name = "fileData"}, + {type = "int", name = "dataSize"} + } + }, + { + name = "IsWaveReady", + description = "Checks if wave data is ready", + returnType = "bool", + params = { + {type = "Wave", name = "wave"} + } + }, + { + name = "LoadSound", + description = "Load sound from file", + returnType = "Sound", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "LoadSoundFromWave", + description = "Load sound from wave data", + returnType = "Sound", + params = { + {type = "Wave", name = "wave"} + } + }, + { + name = "IsSoundReady", + description = "Checks if a sound is ready", + returnType = "bool", + params = { + {type = "Sound", name = "sound"} + } + }, + { + name = "UpdateSound", + description = "Update sound buffer with new data", + returnType = "void", + params = { + {type = "Sound", name = "sound"}, + {type = "const void *", name = "data"}, + {type = "int", name = "sampleCount"} + } + }, + { + name = "UnloadWave", + description = "Unload wave data", + returnType = "void", + params = { + {type = "Wave", name = "wave"} + } + }, + { + name = "UnloadSound", + description = "Unload sound", + returnType = "void", + params = { + {type = "Sound", name = "sound"} + } + }, + { + name = "ExportWave", + description = "Export wave data to file, returns true on success", + returnType = "bool", + params = { + {type = "Wave", name = "wave"}, + {type = "const char *", name = "fileName"} + } + }, + { + name = "ExportWaveAsCode", + description = "Export wave sample data to code (.h), returns true on success", + returnType = "bool", + params = { + {type = "Wave", name = "wave"}, + {type = "const char *", name = "fileName"} + } + }, + { + name = "PlaySound", + description = "Play a sound", + returnType = "void", + params = { + {type = "Sound", name = "sound"} + } + }, + { + name = "StopSound", + description = "Stop playing a sound", + returnType = "void", + params = { + {type = "Sound", name = "sound"} + } + }, + { + name = "PauseSound", + description = "Pause a sound", + returnType = "void", + params = { + {type = "Sound", name = "sound"} + } + }, + { + name = "ResumeSound", + description = "Resume a paused sound", + returnType = "void", + params = { + {type = "Sound", name = "sound"} + } + }, + { + name = "IsSoundPlaying", + description = "Check if a sound is currently playing", + returnType = "bool", + params = { + {type = "Sound", name = "sound"} + } + }, + { + name = "SetSoundVolume", + description = "Set volume for a sound (1.0 is max level)", + returnType = "void", + params = { + {type = "Sound", name = "sound"}, + {type = "float", name = "volume"} + } + }, + { + name = "SetSoundPitch", + description = "Set pitch for a sound (1.0 is base level)", + returnType = "void", + params = { + {type = "Sound", name = "sound"}, + {type = "float", name = "pitch"} + } + }, + { + name = "SetSoundPan", + description = "Set pan for a sound (0.5 is center)", + returnType = "void", + params = { + {type = "Sound", name = "sound"}, + {type = "float", name = "pan"} + } + }, + { + name = "WaveCopy", + description = "Copy a wave to a new wave", + returnType = "Wave", + params = { + {type = "Wave", name = "wave"} + } + }, + { + name = "WaveCrop", + description = "Crop a wave to defined samples range", + returnType = "void", + params = { + {type = "Wave *", name = "wave"}, + {type = "int", name = "initSample"}, + {type = "int", name = "finalSample"} + } + }, + { + name = "WaveFormat", + description = "Convert wave data to desired format", + returnType = "void", + params = { + {type = "Wave *", name = "wave"}, + {type = "int", name = "sampleRate"}, + {type = "int", name = "sampleSize"}, + {type = "int", name = "channels"} + } + }, + { + name = "LoadWaveSamples", + description = "Load samples data from wave as a 32bit float data array", + returnType = "float *", + params = { + {type = "Wave", name = "wave"} + } + }, + { + name = "UnloadWaveSamples", + description = "Unload samples data loaded with LoadWaveSamples()", + returnType = "void", + params = { + {type = "float *", name = "samples"} + } + }, + { + name = "LoadMusicStream", + description = "Load music stream from file", + returnType = "Music", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "LoadMusicStreamFromMemory", + description = "Load music stream from data", + returnType = "Music", + params = { + {type = "const char *", name = "fileType"}, + {type = "const unsigned char *", name = "data"}, + {type = "int", name = "dataSize"} + } + }, + { + name = "IsMusicReady", + description = "Checks if a music stream is ready", + returnType = "bool", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "UnloadMusicStream", + description = "Unload music stream", + returnType = "void", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "PlayMusicStream", + description = "Start music playing", + returnType = "void", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "IsMusicStreamPlaying", + description = "Check if music is playing", + returnType = "bool", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "UpdateMusicStream", + description = "Updates buffers for music streaming", + returnType = "void", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "StopMusicStream", + description = "Stop music playing", + returnType = "void", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "PauseMusicStream", + description = "Pause music playing", + returnType = "void", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "ResumeMusicStream", + description = "Resume playing paused music", + returnType = "void", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "SeekMusicStream", + description = "Seek music to a position (in seconds)", + returnType = "void", + params = { + {type = "Music", name = "music"}, + {type = "float", name = "position"} + } + }, + { + name = "SetMusicVolume", + description = "Set volume for music (1.0 is max level)", + returnType = "void", + params = { + {type = "Music", name = "music"}, + {type = "float", name = "volume"} + } + }, + { + name = "SetMusicPitch", + description = "Set pitch for a music (1.0 is base level)", + returnType = "void", + params = { + {type = "Music", name = "music"}, + {type = "float", name = "pitch"} + } + }, + { + name = "SetMusicPan", + description = "Set pan for a music (0.5 is center)", + returnType = "void", + params = { + {type = "Music", name = "music"}, + {type = "float", name = "pan"} + } + }, + { + name = "GetMusicTimeLength", + description = "Get music time length (in seconds)", + returnType = "float", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "GetMusicTimePlayed", + description = "Get current music time played (in seconds)", + returnType = "float", + params = { + {type = "Music", name = "music"} + } + }, + { + name = "LoadAudioStream", + description = "Load audio stream (to stream raw audio pcm data)", + returnType = "AudioStream", + params = { + {type = "unsigned int", name = "sampleRate"}, + {type = "unsigned int", name = "sampleSize"}, + {type = "unsigned int", name = "channels"} + } + }, + { + name = "IsAudioStreamReady", + description = "Checks if an audio stream is ready", + returnType = "bool", + params = { + {type = "AudioStream", name = "stream"} + } + }, + { + name = "UnloadAudioStream", + description = "Unload audio stream and free memory", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"} + } + }, + { + name = "UpdateAudioStream", + description = "Update audio stream buffers with data", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"}, + {type = "const void *", name = "data"}, + {type = "int", name = "frameCount"} + } + }, + { + name = "IsAudioStreamProcessed", + description = "Check if any audio stream buffers requires refill", + returnType = "bool", + params = { + {type = "AudioStream", name = "stream"} + } + }, + { + name = "PlayAudioStream", + description = "Play audio stream", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"} + } + }, + { + name = "PauseAudioStream", + description = "Pause audio stream", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"} + } + }, + { + name = "ResumeAudioStream", + description = "Resume audio stream", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"} + } + }, + { + name = "IsAudioStreamPlaying", + description = "Check if audio stream is playing", + returnType = "bool", + params = { + {type = "AudioStream", name = "stream"} + } + }, + { + name = "StopAudioStream", + description = "Stop audio stream", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"} + } + }, + { + name = "SetAudioStreamVolume", + description = "Set volume for audio stream (1.0 is max level)", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"}, + {type = "float", name = "volume"} + } + }, + { + name = "SetAudioStreamPitch", + description = "Set pitch for audio stream (1.0 is base level)", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"}, + {type = "float", name = "pitch"} + } + }, + { + name = "SetAudioStreamPan", + description = "Set pan for audio stream (0.5 is centered)", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"}, + {type = "float", name = "pan"} + } + }, + { + name = "SetAudioStreamBufferSizeDefault", + description = "Default size for new audio streams", + returnType = "void", + params = { + {type = "int", name = "size"} + } + }, + { + name = "SetAudioStreamCallback", + description = "Audio thread callback to request new data", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"}, + {type = "AudioCallback", name = "callback"} + } + }, + { + name = "AttachAudioStreamProcessor", + description = "Attach audio stream processor to stream", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"}, + {type = "AudioCallback", name = "processor"} + } + }, + { + name = "DetachAudioStreamProcessor", + description = "Detach audio stream processor from stream", + returnType = "void", + params = { + {type = "AudioStream", name = "stream"}, + {type = "AudioCallback", name = "processor"} + } + }, + { + name = "AttachAudioMixedProcessor", + description = "Attach audio stream processor to the entire audio pipeline", + returnType = "void", + params = { + {type = "AudioCallback", name = "processor"} + } + }, + { + name = "DetachAudioMixedProcessor", + description = "Detach audio stream processor from the entire audio pipeline", + returnType = "void", + params = { + {type = "AudioCallback", name = "processor"} + } + } + } +} diff --git a/raylib-api/raylib.txt b/raylib-api/raylib.txt new file mode 100644 index 0000000..4b13bc3 --- /dev/null +++ b/raylib-api/raylib.txt @@ -0,0 +1,4210 @@ + +Defines found: 56 + +Define 001: RAYLIB_H + Name: RAYLIB_H + Type: GUARD + Value: + Description: +Define 002: RAYLIB_VERSION_MAJOR + Name: RAYLIB_VERSION_MAJOR + Type: INT + Value: 4 + Description: +Define 003: RAYLIB_VERSION_MINOR + Name: RAYLIB_VERSION_MINOR + Type: INT + Value: 5 + Description: +Define 004: RAYLIB_VERSION_PATCH + Name: RAYLIB_VERSION_PATCH + Type: INT + Value: 0 + Description: +Define 005: RAYLIB_VERSION + Name: RAYLIB_VERSION + Type: STRING + Value: "4.5" + Description: +Define 006: __declspec(x) + Name: __declspec(x) + Type: MACRO + Value: __attribute__((x)) + Description: +Define 007: RLAPI + Name: RLAPI + Type: UNKNOWN + Value: __declspec(dllexport) + Description: We are building the library as a Win32 shared library (.dll) +Define 008: PI + Name: PI + Type: FLOAT + Value: 3.14159265358979323846 + Description: +Define 009: DEG2RAD + Name: DEG2RAD + Type: FLOAT_MATH + Value: (PI/180.0f) + Description: +Define 010: RAD2DEG + Name: RAD2DEG + Type: FLOAT_MATH + Value: (180.0f/PI) + Description: +Define 011: RL_MALLOC(sz) + Name: RL_MALLOC(sz) + Type: MACRO + Value: malloc(sz) + Description: +Define 012: RL_CALLOC(n,sz) + Name: RL_CALLOC(n,sz) + Type: MACRO + Value: calloc(n,sz) + Description: +Define 013: RL_REALLOC(ptr,sz) + Name: RL_REALLOC(ptr,sz) + Type: MACRO + Value: realloc(ptr,sz) + Description: +Define 014: RL_FREE(ptr) + Name: RL_FREE(ptr) + Type: MACRO + Value: free(ptr) + Description: +Define 015: CLITERAL(type) + Name: CLITERAL(type) + Type: MACRO + Value: type + Description: +Define 016: RL_COLOR_TYPE + Name: RL_COLOR_TYPE + Type: GUARD + Value: + Description: +Define 017: RL_RECTANGLE_TYPE + Name: RL_RECTANGLE_TYPE + Type: GUARD + Value: + Description: +Define 018: RL_VECTOR2_TYPE + Name: RL_VECTOR2_TYPE + Type: GUARD + Value: + Description: +Define 019: RL_VECTOR3_TYPE + Name: RL_VECTOR3_TYPE + Type: GUARD + Value: + Description: +Define 020: RL_VECTOR4_TYPE + Name: RL_VECTOR4_TYPE + Type: GUARD + Value: + Description: +Define 021: RL_QUATERNION_TYPE + Name: RL_QUATERNION_TYPE + Type: GUARD + Value: + Description: +Define 022: RL_MATRIX_TYPE + Name: RL_MATRIX_TYPE + Type: GUARD + Value: + Description: +Define 023: LIGHTGRAY + Name: LIGHTGRAY + Type: COLOR + Value: CLITERAL(Color){ 200, 200, 200, 255 } + Description: Light Gray +Define 024: GRAY + Name: GRAY + Type: COLOR + Value: CLITERAL(Color){ 130, 130, 130, 255 } + Description: Gray +Define 025: DARKGRAY + Name: DARKGRAY + Type: COLOR + Value: CLITERAL(Color){ 80, 80, 80, 255 } + Description: Dark Gray +Define 026: YELLOW + Name: YELLOW + Type: COLOR + Value: CLITERAL(Color){ 253, 249, 0, 255 } + Description: Yellow +Define 027: GOLD + Name: GOLD + Type: COLOR + Value: CLITERAL(Color){ 255, 203, 0, 255 } + Description: Gold +Define 028: ORANGE + Name: ORANGE + Type: COLOR + Value: CLITERAL(Color){ 255, 161, 0, 255 } + Description: Orange +Define 029: PINK + Name: PINK + Type: COLOR + Value: CLITERAL(Color){ 255, 109, 194, 255 } + Description: Pink +Define 030: RED + Name: RED + Type: COLOR + Value: CLITERAL(Color){ 230, 41, 55, 255 } + Description: Red +Define 031: MAROON + Name: MAROON + Type: COLOR + Value: CLITERAL(Color){ 190, 33, 55, 255 } + Description: Maroon +Define 032: GREEN + Name: GREEN + Type: COLOR + Value: CLITERAL(Color){ 0, 228, 48, 255 } + Description: Green +Define 033: LIME + Name: LIME + Type: COLOR + Value: CLITERAL(Color){ 0, 158, 47, 255 } + Description: Lime +Define 034: DARKGREEN + Name: DARKGREEN + Type: COLOR + Value: CLITERAL(Color){ 0, 117, 44, 255 } + Description: Dark Green +Define 035: SKYBLUE + Name: SKYBLUE + Type: COLOR + Value: CLITERAL(Color){ 102, 191, 255, 255 } + Description: Sky Blue +Define 036: BLUE + Name: BLUE + Type: COLOR + Value: CLITERAL(Color){ 0, 121, 241, 255 } + Description: Blue +Define 037: DARKBLUE + Name: DARKBLUE + Type: COLOR + Value: CLITERAL(Color){ 0, 82, 172, 255 } + Description: Dark Blue +Define 038: PURPLE + Name: PURPLE + Type: COLOR + Value: CLITERAL(Color){ 200, 122, 255, 255 } + Description: Purple +Define 039: VIOLET + Name: VIOLET + Type: COLOR + Value: CLITERAL(Color){ 135, 60, 190, 255 } + Description: Violet +Define 040: DARKPURPLE + Name: DARKPURPLE + Type: COLOR + Value: CLITERAL(Color){ 112, 31, 126, 255 } + Description: Dark Purple +Define 041: BEIGE + Name: BEIGE + Type: COLOR + Value: CLITERAL(Color){ 211, 176, 131, 255 } + Description: Beige +Define 042: BROWN + Name: BROWN + Type: COLOR + Value: CLITERAL(Color){ 127, 106, 79, 255 } + Description: Brown +Define 043: DARKBROWN + Name: DARKBROWN + Type: COLOR + Value: CLITERAL(Color){ 76, 63, 47, 255 } + Description: Dark Brown +Define 044: WHITE + Name: WHITE + Type: COLOR + Value: CLITERAL(Color){ 255, 255, 255, 255 } + Description: White +Define 045: BLACK + Name: BLACK + Type: COLOR + Value: CLITERAL(Color){ 0, 0, 0, 255 } + Description: Black +Define 046: BLANK + Name: BLANK + Type: COLOR + Value: CLITERAL(Color){ 0, 0, 0, 0 } + Description: Blank (Transparent) +Define 047: MAGENTA + Name: MAGENTA + Type: COLOR + Value: CLITERAL(Color){ 255, 0, 255, 255 } + Description: Magenta +Define 048: RAYWHITE + Name: RAYWHITE + Type: COLOR + Value: CLITERAL(Color){ 245, 245, 245, 255 } + Description: My own White (raylib logo) +Define 049: RL_BOOL_TYPE + Name: RL_BOOL_TYPE + Type: GUARD + Value: + Description: +Define 050: MOUSE_LEFT_BUTTON + Name: MOUSE_LEFT_BUTTON + Type: UNKNOWN + Value: MOUSE_BUTTON_LEFT + Description: +Define 051: MOUSE_RIGHT_BUTTON + Name: MOUSE_RIGHT_BUTTON + Type: UNKNOWN + Value: MOUSE_BUTTON_RIGHT + Description: +Define 052: MOUSE_MIDDLE_BUTTON + Name: MOUSE_MIDDLE_BUTTON + Type: UNKNOWN + Value: MOUSE_BUTTON_MIDDLE + Description: +Define 053: MATERIAL_MAP_DIFFUSE + Name: MATERIAL_MAP_DIFFUSE + Type: UNKNOWN + Value: MATERIAL_MAP_ALBEDO + Description: +Define 054: MATERIAL_MAP_SPECULAR + Name: MATERIAL_MAP_SPECULAR + Type: UNKNOWN + Value: MATERIAL_MAP_METALNESS + Description: +Define 055: SHADER_LOC_MAP_DIFFUSE + Name: SHADER_LOC_MAP_DIFFUSE + Type: UNKNOWN + Value: SHADER_LOC_MAP_ALBEDO + Description: +Define 056: SHADER_LOC_MAP_SPECULAR + Name: SHADER_LOC_MAP_SPECULAR + Type: UNKNOWN + Value: SHADER_LOC_MAP_METALNESS + Description: + +Structures found: 32 + +Struct 01: Vector2 (2 fields) + Name: Vector2 + Description: Vector2, 2 components + Field[1]: float x // Vector x component + Field[2]: float y // Vector y component +Struct 02: Vector3 (3 fields) + Name: Vector3 + Description: Vector3, 3 components + Field[1]: float x // Vector x component + Field[2]: float y // Vector y component + Field[3]: float z // Vector z component +Struct 03: Vector4 (4 fields) + Name: Vector4 + Description: Vector4, 4 components + Field[1]: float x // Vector x component + Field[2]: float y // Vector y component + Field[3]: float z // Vector z component + Field[4]: float w // Vector w component +Struct 04: Matrix (16 fields) + Name: Matrix + Description: Matrix, 4x4 components, column major, OpenGL style, right-handed + Field[1]: float m0 // Matrix first row (4 components) + Field[2]: float m4 // Matrix first row (4 components) + Field[3]: float m8 // Matrix first row (4 components) + Field[4]: float m12 // Matrix first row (4 components) + Field[5]: float m1 // Matrix second row (4 components) + Field[6]: float m5 // Matrix second row (4 components) + Field[7]: float m9 // Matrix second row (4 components) + Field[8]: float m13 // Matrix second row (4 components) + Field[9]: float m2 // Matrix third row (4 components) + Field[10]: float m6 // Matrix third row (4 components) + Field[11]: float m10 // Matrix third row (4 components) + Field[12]: float m14 // Matrix third row (4 components) + Field[13]: float m3 // Matrix fourth row (4 components) + Field[14]: float m7 // Matrix fourth row (4 components) + Field[15]: float m11 // Matrix fourth row (4 components) + Field[16]: float m15 // Matrix fourth row (4 components) +Struct 05: Color (4 fields) + Name: Color + Description: Color, 4 components, R8G8B8A8 (32bit) + Field[1]: unsigned char r // Color red value + Field[2]: unsigned char g // Color green value + Field[3]: unsigned char b // Color blue value + Field[4]: unsigned char a // Color alpha value +Struct 06: Rectangle (4 fields) + Name: Rectangle + Description: Rectangle, 4 components + Field[1]: float x // Rectangle top-left corner position x + Field[2]: float y // Rectangle top-left corner position y + Field[3]: float width // Rectangle width + Field[4]: float height // Rectangle height +Struct 07: Image (5 fields) + Name: Image + Description: Image, pixel data stored in CPU memory (RAM) + Field[1]: void * data // Image raw data + Field[2]: int width // Image base width + Field[3]: int height // Image base height + Field[4]: int mipmaps // Mipmap levels, 1 by default + Field[5]: int format // Data format (PixelFormat type) +Struct 08: Texture (5 fields) + Name: Texture + Description: Texture, tex data stored in GPU memory (VRAM) + Field[1]: unsigned int id // OpenGL texture id + Field[2]: int width // Texture base width + Field[3]: int height // Texture base height + Field[4]: int mipmaps // Mipmap levels, 1 by default + Field[5]: int format // Data format (PixelFormat type) +Struct 09: RenderTexture (3 fields) + Name: RenderTexture + Description: RenderTexture, fbo for texture rendering + Field[1]: unsigned int id // OpenGL framebuffer object id + Field[2]: Texture texture // Color buffer attachment texture + Field[3]: Texture depth // Depth buffer attachment texture +Struct 10: NPatchInfo (6 fields) + Name: NPatchInfo + Description: NPatchInfo, n-patch layout info + Field[1]: Rectangle source // Texture source rectangle + Field[2]: int left // Left border offset + Field[3]: int top // Top border offset + Field[4]: int right // Right border offset + Field[5]: int bottom // Bottom border offset + Field[6]: int layout // Layout of the n-patch: 3x3, 1x3 or 3x1 +Struct 11: GlyphInfo (5 fields) + Name: GlyphInfo + Description: GlyphInfo, font characters glyphs info + Field[1]: int value // Character value (Unicode) + Field[2]: int offsetX // Character offset X when drawing + Field[3]: int offsetY // Character offset Y when drawing + Field[4]: int advanceX // Character advance position X + Field[5]: Image image // Character image data +Struct 12: Font (6 fields) + Name: Font + Description: Font, font texture and GlyphInfo array data + Field[1]: int baseSize // Base size (default chars height) + Field[2]: int glyphCount // Number of glyph characters + Field[3]: int glyphPadding // Padding around the glyph characters + Field[4]: Texture2D texture // Texture atlas containing the glyphs + Field[5]: Rectangle * recs // Rectangles in texture for the glyphs + Field[6]: GlyphInfo * glyphs // Glyphs info data +Struct 13: Camera3D (5 fields) + Name: Camera3D + Description: Camera, defines position/orientation in 3d space + Field[1]: Vector3 position // Camera position + Field[2]: Vector3 target // Camera target it looks-at + Field[3]: Vector3 up // Camera up vector (rotation over its axis) + Field[4]: float fovy // Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic + Field[5]: int projection // Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC +Struct 14: Camera2D (4 fields) + Name: Camera2D + Description: Camera2D, defines position/orientation in 2d space + Field[1]: Vector2 offset // Camera offset (displacement from target) + Field[2]: Vector2 target // Camera target (rotation and zoom origin) + Field[3]: float rotation // Camera rotation in degrees + Field[4]: float zoom // Camera zoom (scaling), should be 1.0f by default +Struct 15: Mesh (15 fields) + Name: Mesh + Description: Mesh, vertex data and vao/vbo + Field[1]: int vertexCount // Number of vertices stored in arrays + Field[2]: int triangleCount // Number of triangles stored (indexed or not) + Field[3]: float * vertices // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) + Field[4]: float * texcoords // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) + Field[5]: float * texcoords2 // Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5) + Field[6]: float * normals // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2) + Field[7]: float * tangents // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) + Field[8]: unsigned char * colors // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) + Field[9]: unsigned short * indices // Vertex indices (in case vertex data comes indexed) + Field[10]: float * animVertices // Animated vertex positions (after bones transformations) + Field[11]: float * animNormals // Animated normals (after bones transformations) + Field[12]: unsigned char * boneIds // Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning) + Field[13]: float * boneWeights // Vertex bone weight, up to 4 bones influence by vertex (skinning) + Field[14]: unsigned int vaoId // OpenGL Vertex Array Object id + Field[15]: unsigned int * vboId // OpenGL Vertex Buffer Objects id (default vertex data) +Struct 16: Shader (2 fields) + Name: Shader + Description: Shader + Field[1]: unsigned int id // Shader program id + Field[2]: int * locs // Shader locations array (RL_MAX_SHADER_LOCATIONS) +Struct 17: MaterialMap (3 fields) + Name: MaterialMap + Description: MaterialMap + Field[1]: Texture2D texture // Material map texture + Field[2]: Color color // Material map color + Field[3]: float value // Material map value +Struct 18: Material (3 fields) + Name: Material + Description: Material, includes shader and maps + Field[1]: Shader shader // Material shader + Field[2]: MaterialMap * maps // Material maps array (MAX_MATERIAL_MAPS) + Field[3]: float[4] params // Material generic parameters (if required) +Struct 19: Transform (3 fields) + Name: Transform + Description: Transform, vertex transformation data + Field[1]: Vector3 translation // Translation + Field[2]: Quaternion rotation // Rotation + Field[3]: Vector3 scale // Scale +Struct 20: BoneInfo (2 fields) + Name: BoneInfo + Description: Bone, skeletal animation bone + Field[1]: char[32] name // Bone name + Field[2]: int parent // Bone parent +Struct 21: Model (9 fields) + Name: Model + Description: Model, meshes, materials and animation data + Field[1]: Matrix transform // Local transform matrix + Field[2]: int meshCount // Number of meshes + Field[3]: int materialCount // Number of materials + Field[4]: Mesh * meshes // Meshes array + Field[5]: Material * materials // Materials array + Field[6]: int * meshMaterial // Mesh material number + Field[7]: int boneCount // Number of bones + Field[8]: BoneInfo * bones // Bones information (skeleton) + Field[9]: Transform * bindPose // Bones base transformation (pose) +Struct 22: ModelAnimation (4 fields) + Name: ModelAnimation + Description: ModelAnimation + Field[1]: int boneCount // Number of bones + Field[2]: int frameCount // Number of animation frames + Field[3]: BoneInfo * bones // Bones information (skeleton) + Field[4]: Transform ** framePoses // Poses array by frame +Struct 23: Ray (2 fields) + Name: Ray + Description: Ray, ray for raycasting + Field[1]: Vector3 position // Ray position (origin) + Field[2]: Vector3 direction // Ray direction +Struct 24: RayCollision (4 fields) + Name: RayCollision + Description: RayCollision, ray hit information + Field[1]: bool hit // Did the ray hit something? + Field[2]: float distance // Distance to the nearest hit + Field[3]: Vector3 point // Point of the nearest hit + Field[4]: Vector3 normal // Surface normal of hit +Struct 25: BoundingBox (2 fields) + Name: BoundingBox + Description: BoundingBox + Field[1]: Vector3 min // Minimum vertex box-corner + Field[2]: Vector3 max // Maximum vertex box-corner +Struct 26: Wave (5 fields) + Name: Wave + Description: Wave, audio wave data + Field[1]: unsigned int frameCount // Total number of frames (considering channels) + Field[2]: unsigned int sampleRate // Frequency (samples per second) + Field[3]: unsigned int sampleSize // Bit depth (bits per sample): 8, 16, 32 (24 not supported) + Field[4]: unsigned int channels // Number of channels (1-mono, 2-stereo, ...) + Field[5]: void * data // Buffer data pointer +Struct 27: AudioStream (5 fields) + Name: AudioStream + Description: AudioStream, custom audio stream + Field[1]: rAudioBuffer * buffer // Pointer to internal data used by the audio system + Field[2]: rAudioProcessor * processor // Pointer to internal data processor, useful for audio effects + Field[3]: unsigned int sampleRate // Frequency (samples per second) + Field[4]: unsigned int sampleSize // Bit depth (bits per sample): 8, 16, 32 (24 not supported) + Field[5]: unsigned int channels // Number of channels (1-mono, 2-stereo, ...) +Struct 28: Sound (2 fields) + Name: Sound + Description: Sound + Field[1]: AudioStream stream // Audio stream + Field[2]: unsigned int frameCount // Total number of frames (considering channels) +Struct 29: Music (5 fields) + Name: Music + Description: Music, audio stream, anything longer than ~10 seconds should be streamed + Field[1]: AudioStream stream // Audio stream + Field[2]: unsigned int frameCount // Total number of frames (considering channels) + Field[3]: bool looping // Music looping enable + Field[4]: int ctxType // Type of music context (audio filetype) + Field[5]: void * ctxData // Audio context data, depends on type +Struct 30: VrDeviceInfo (10 fields) + Name: VrDeviceInfo + Description: VrDeviceInfo, Head-Mounted-Display device parameters + Field[1]: int hResolution // Horizontal resolution in pixels + Field[2]: int vResolution // Vertical resolution in pixels + Field[3]: float hScreenSize // Horizontal size in meters + Field[4]: float vScreenSize // Vertical size in meters + Field[5]: float vScreenCenter // Screen center in meters + Field[6]: float eyeToScreenDistance // Distance between eye and display in meters + Field[7]: float lensSeparationDistance // Lens separation distance in meters + Field[8]: float interpupillaryDistance // IPD (distance between pupils) in meters + Field[9]: float[4] lensDistortionValues // Lens distortion constant parameters + Field[10]: float[4] chromaAbCorrection // Chromatic aberration correction parameters +Struct 31: VrStereoConfig (8 fields) + Name: VrStereoConfig + Description: VrStereoConfig, VR stereo rendering configuration for simulator + Field[1]: Matrix[2] projection // VR projection matrices (per eye) + Field[2]: Matrix[2] viewOffset // VR view offset matrices (per eye) + Field[3]: float[2] leftLensCenter // VR left lens center + Field[4]: float[2] rightLensCenter // VR right lens center + Field[5]: float[2] leftScreenCenter // VR left screen center + Field[6]: float[2] rightScreenCenter // VR right screen center + Field[7]: float[2] scale // VR distortion scale + Field[8]: float[2] scaleIn // VR distortion scale in +Struct 32: FilePathList (3 fields) + Name: FilePathList + Description: File path list + Field[1]: unsigned int capacity // Filepaths max entries + Field[2]: unsigned int count // Filepaths entries count + Field[3]: char ** paths // Filepaths entries + +Aliases found: 5 + +Alias 001: Quaternion + Type: Vector4 + Name: Quaternion + Description: Quaternion, 4 components (Vector4 alias) +Alias 002: Texture2D + Type: Texture + Name: Texture2D + Description: Texture2D, same as Texture +Alias 003: TextureCubemap + Type: Texture + Name: TextureCubemap + Description: TextureCubemap, same as Texture +Alias 004: RenderTexture2D + Type: RenderTexture + Name: RenderTexture2D + Description: RenderTexture2D, same as RenderTexture +Alias 005: Camera + Type: Camera3D + Name: Camera + Description: Camera type fallback, defaults to Camera3D + +Enums found: 21 + +Enum 01: ConfigFlags (15 values) + Name: ConfigFlags + Description: System/Window config flags + Value[FLAG_VSYNC_HINT]: 64 + Value[FLAG_FULLSCREEN_MODE]: 2 + Value[FLAG_WINDOW_RESIZABLE]: 4 + Value[FLAG_WINDOW_UNDECORATED]: 8 + Value[FLAG_WINDOW_HIDDEN]: 128 + Value[FLAG_WINDOW_MINIMIZED]: 512 + Value[FLAG_WINDOW_MAXIMIZED]: 1024 + Value[FLAG_WINDOW_UNFOCUSED]: 2048 + Value[FLAG_WINDOW_TOPMOST]: 4096 + Value[FLAG_WINDOW_ALWAYS_RUN]: 256 + Value[FLAG_WINDOW_TRANSPARENT]: 16 + Value[FLAG_WINDOW_HIGHDPI]: 8192 + Value[FLAG_WINDOW_MOUSE_PASSTHROUGH]: 16384 + Value[FLAG_MSAA_4X_HINT]: 32 + Value[FLAG_INTERLACED_HINT]: 65536 +Enum 02: TraceLogLevel (8 values) + Name: TraceLogLevel + Description: Trace log level + Value[LOG_ALL]: 0 + Value[LOG_TRACE]: 1 + Value[LOG_DEBUG]: 2 + Value[LOG_INFO]: 3 + Value[LOG_WARNING]: 4 + Value[LOG_ERROR]: 5 + Value[LOG_FATAL]: 6 + Value[LOG_NONE]: 7 +Enum 03: KeyboardKey (110 values) + Name: KeyboardKey + Description: Keyboard keys (US keyboard layout) + Value[KEY_NULL]: 0 + Value[KEY_APOSTROPHE]: 39 + Value[KEY_COMMA]: 44 + Value[KEY_MINUS]: 45 + Value[KEY_PERIOD]: 46 + Value[KEY_SLASH]: 47 + Value[KEY_ZERO]: 48 + Value[KEY_ONE]: 49 + Value[KEY_TWO]: 50 + Value[KEY_THREE]: 51 + Value[KEY_FOUR]: 52 + Value[KEY_FIVE]: 53 + Value[KEY_SIX]: 54 + Value[KEY_SEVEN]: 55 + Value[KEY_EIGHT]: 56 + Value[KEY_NINE]: 57 + Value[KEY_SEMICOLON]: 59 + Value[KEY_EQUAL]: 61 + Value[KEY_A]: 65 + Value[KEY_B]: 66 + Value[KEY_C]: 67 + Value[KEY_D]: 68 + Value[KEY_E]: 69 + Value[KEY_F]: 70 + Value[KEY_G]: 71 + Value[KEY_H]: 72 + Value[KEY_I]: 73 + Value[KEY_J]: 74 + Value[KEY_K]: 75 + Value[KEY_L]: 76 + Value[KEY_M]: 77 + Value[KEY_N]: 78 + Value[KEY_O]: 79 + Value[KEY_P]: 80 + Value[KEY_Q]: 81 + Value[KEY_R]: 82 + Value[KEY_S]: 83 + Value[KEY_T]: 84 + Value[KEY_U]: 85 + Value[KEY_V]: 86 + Value[KEY_W]: 87 + Value[KEY_X]: 88 + Value[KEY_Y]: 89 + Value[KEY_Z]: 90 + Value[KEY_LEFT_BRACKET]: 91 + Value[KEY_BACKSLASH]: 92 + Value[KEY_RIGHT_BRACKET]: 93 + Value[KEY_GRAVE]: 96 + Value[KEY_SPACE]: 32 + Value[KEY_ESCAPE]: 256 + Value[KEY_ENTER]: 257 + Value[KEY_TAB]: 258 + Value[KEY_BACKSPACE]: 259 + Value[KEY_INSERT]: 260 + Value[KEY_DELETE]: 261 + Value[KEY_RIGHT]: 262 + Value[KEY_LEFT]: 263 + Value[KEY_DOWN]: 264 + Value[KEY_UP]: 265 + Value[KEY_PAGE_UP]: 266 + Value[KEY_PAGE_DOWN]: 267 + Value[KEY_HOME]: 268 + Value[KEY_END]: 269 + Value[KEY_CAPS_LOCK]: 280 + Value[KEY_SCROLL_LOCK]: 281 + Value[KEY_NUM_LOCK]: 282 + Value[KEY_PRINT_SCREEN]: 283 + Value[KEY_PAUSE]: 284 + Value[KEY_F1]: 290 + Value[KEY_F2]: 291 + Value[KEY_F3]: 292 + Value[KEY_F4]: 293 + Value[KEY_F5]: 294 + Value[KEY_F6]: 295 + Value[KEY_F7]: 296 + Value[KEY_F8]: 297 + Value[KEY_F9]: 298 + Value[KEY_F10]: 299 + Value[KEY_F11]: 300 + Value[KEY_F12]: 301 + Value[KEY_LEFT_SHIFT]: 340 + Value[KEY_LEFT_CONTROL]: 341 + Value[KEY_LEFT_ALT]: 342 + Value[KEY_LEFT_SUPER]: 343 + Value[KEY_RIGHT_SHIFT]: 344 + Value[KEY_RIGHT_CONTROL]: 345 + Value[KEY_RIGHT_ALT]: 346 + Value[KEY_RIGHT_SUPER]: 347 + Value[KEY_KB_MENU]: 348 + Value[KEY_KP_0]: 320 + Value[KEY_KP_1]: 321 + Value[KEY_KP_2]: 322 + Value[KEY_KP_3]: 323 + Value[KEY_KP_4]: 324 + Value[KEY_KP_5]: 325 + Value[KEY_KP_6]: 326 + Value[KEY_KP_7]: 327 + Value[KEY_KP_8]: 328 + Value[KEY_KP_9]: 329 + Value[KEY_KP_DECIMAL]: 330 + Value[KEY_KP_DIVIDE]: 331 + Value[KEY_KP_MULTIPLY]: 332 + Value[KEY_KP_SUBTRACT]: 333 + Value[KEY_KP_ADD]: 334 + Value[KEY_KP_ENTER]: 335 + Value[KEY_KP_EQUAL]: 336 + Value[KEY_BACK]: 4 + Value[KEY_MENU]: 82 + Value[KEY_VOLUME_UP]: 24 + Value[KEY_VOLUME_DOWN]: 25 +Enum 04: MouseButton (7 values) + Name: MouseButton + Description: Mouse buttons + Value[MOUSE_BUTTON_LEFT]: 0 + Value[MOUSE_BUTTON_RIGHT]: 1 + Value[MOUSE_BUTTON_MIDDLE]: 2 + Value[MOUSE_BUTTON_SIDE]: 3 + Value[MOUSE_BUTTON_EXTRA]: 4 + Value[MOUSE_BUTTON_FORWARD]: 5 + Value[MOUSE_BUTTON_BACK]: 6 +Enum 05: MouseCursor (11 values) + Name: MouseCursor + Description: Mouse cursor + Value[MOUSE_CURSOR_DEFAULT]: 0 + Value[MOUSE_CURSOR_ARROW]: 1 + Value[MOUSE_CURSOR_IBEAM]: 2 + Value[MOUSE_CURSOR_CROSSHAIR]: 3 + Value[MOUSE_CURSOR_POINTING_HAND]: 4 + Value[MOUSE_CURSOR_RESIZE_EW]: 5 + Value[MOUSE_CURSOR_RESIZE_NS]: 6 + Value[MOUSE_CURSOR_RESIZE_NWSE]: 7 + Value[MOUSE_CURSOR_RESIZE_NESW]: 8 + Value[MOUSE_CURSOR_RESIZE_ALL]: 9 + Value[MOUSE_CURSOR_NOT_ALLOWED]: 10 +Enum 06: GamepadButton (18 values) + Name: GamepadButton + Description: Gamepad buttons + Value[GAMEPAD_BUTTON_UNKNOWN]: 0 + Value[GAMEPAD_BUTTON_LEFT_FACE_UP]: 1 + Value[GAMEPAD_BUTTON_LEFT_FACE_RIGHT]: 2 + Value[GAMEPAD_BUTTON_LEFT_FACE_DOWN]: 3 + Value[GAMEPAD_BUTTON_LEFT_FACE_LEFT]: 4 + Value[GAMEPAD_BUTTON_RIGHT_FACE_UP]: 5 + Value[GAMEPAD_BUTTON_RIGHT_FACE_RIGHT]: 6 + Value[GAMEPAD_BUTTON_RIGHT_FACE_DOWN]: 7 + Value[GAMEPAD_BUTTON_RIGHT_FACE_LEFT]: 8 + Value[GAMEPAD_BUTTON_LEFT_TRIGGER_1]: 9 + Value[GAMEPAD_BUTTON_LEFT_TRIGGER_2]: 10 + Value[GAMEPAD_BUTTON_RIGHT_TRIGGER_1]: 11 + Value[GAMEPAD_BUTTON_RIGHT_TRIGGER_2]: 12 + Value[GAMEPAD_BUTTON_MIDDLE_LEFT]: 13 + Value[GAMEPAD_BUTTON_MIDDLE]: 14 + Value[GAMEPAD_BUTTON_MIDDLE_RIGHT]: 15 + Value[GAMEPAD_BUTTON_LEFT_THUMB]: 16 + Value[GAMEPAD_BUTTON_RIGHT_THUMB]: 17 +Enum 07: GamepadAxis (6 values) + Name: GamepadAxis + Description: Gamepad axis + Value[GAMEPAD_AXIS_LEFT_X]: 0 + Value[GAMEPAD_AXIS_LEFT_Y]: 1 + Value[GAMEPAD_AXIS_RIGHT_X]: 2 + Value[GAMEPAD_AXIS_RIGHT_Y]: 3 + Value[GAMEPAD_AXIS_LEFT_TRIGGER]: 4 + Value[GAMEPAD_AXIS_RIGHT_TRIGGER]: 5 +Enum 08: MaterialMapIndex (11 values) + Name: MaterialMapIndex + Description: Material map index + Value[MATERIAL_MAP_ALBEDO]: 0 + Value[MATERIAL_MAP_METALNESS]: 1 + Value[MATERIAL_MAP_NORMAL]: 2 + Value[MATERIAL_MAP_ROUGHNESS]: 3 + Value[MATERIAL_MAP_OCCLUSION]: 4 + Value[MATERIAL_MAP_EMISSION]: 5 + Value[MATERIAL_MAP_HEIGHT]: 6 + Value[MATERIAL_MAP_CUBEMAP]: 7 + Value[MATERIAL_MAP_IRRADIANCE]: 8 + Value[MATERIAL_MAP_PREFILTER]: 9 + Value[MATERIAL_MAP_BRDF]: 10 +Enum 09: ShaderLocationIndex (26 values) + Name: ShaderLocationIndex + Description: Shader location index + Value[SHADER_LOC_VERTEX_POSITION]: 0 + Value[SHADER_LOC_VERTEX_TEXCOORD01]: 1 + Value[SHADER_LOC_VERTEX_TEXCOORD02]: 2 + Value[SHADER_LOC_VERTEX_NORMAL]: 3 + Value[SHADER_LOC_VERTEX_TANGENT]: 4 + Value[SHADER_LOC_VERTEX_COLOR]: 5 + Value[SHADER_LOC_MATRIX_MVP]: 6 + Value[SHADER_LOC_MATRIX_VIEW]: 7 + Value[SHADER_LOC_MATRIX_PROJECTION]: 8 + Value[SHADER_LOC_MATRIX_MODEL]: 9 + Value[SHADER_LOC_MATRIX_NORMAL]: 10 + Value[SHADER_LOC_VECTOR_VIEW]: 11 + Value[SHADER_LOC_COLOR_DIFFUSE]: 12 + Value[SHADER_LOC_COLOR_SPECULAR]: 13 + Value[SHADER_LOC_COLOR_AMBIENT]: 14 + Value[SHADER_LOC_MAP_ALBEDO]: 15 + Value[SHADER_LOC_MAP_METALNESS]: 16 + Value[SHADER_LOC_MAP_NORMAL]: 17 + Value[SHADER_LOC_MAP_ROUGHNESS]: 18 + Value[SHADER_LOC_MAP_OCCLUSION]: 19 + Value[SHADER_LOC_MAP_EMISSION]: 20 + Value[SHADER_LOC_MAP_HEIGHT]: 21 + Value[SHADER_LOC_MAP_CUBEMAP]: 22 + Value[SHADER_LOC_MAP_IRRADIANCE]: 23 + Value[SHADER_LOC_MAP_PREFILTER]: 24 + Value[SHADER_LOC_MAP_BRDF]: 25 +Enum 10: ShaderUniformDataType (9 values) + Name: ShaderUniformDataType + Description: Shader uniform data type + Value[SHADER_UNIFORM_FLOAT]: 0 + Value[SHADER_UNIFORM_VEC2]: 1 + Value[SHADER_UNIFORM_VEC3]: 2 + Value[SHADER_UNIFORM_VEC4]: 3 + Value[SHADER_UNIFORM_INT]: 4 + Value[SHADER_UNIFORM_IVEC2]: 5 + Value[SHADER_UNIFORM_IVEC3]: 6 + Value[SHADER_UNIFORM_IVEC4]: 7 + Value[SHADER_UNIFORM_SAMPLER2D]: 8 +Enum 11: ShaderAttributeDataType (4 values) + Name: ShaderAttributeDataType + Description: Shader attribute data types + Value[SHADER_ATTRIB_FLOAT]: 0 + Value[SHADER_ATTRIB_VEC2]: 1 + Value[SHADER_ATTRIB_VEC3]: 2 + Value[SHADER_ATTRIB_VEC4]: 3 +Enum 12: PixelFormat (21 values) + Name: PixelFormat + Description: Pixel formats + Value[PIXELFORMAT_UNCOMPRESSED_GRAYSCALE]: 1 + Value[PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA]: 2 + Value[PIXELFORMAT_UNCOMPRESSED_R5G6B5]: 3 + Value[PIXELFORMAT_UNCOMPRESSED_R8G8B8]: 4 + Value[PIXELFORMAT_UNCOMPRESSED_R5G5B5A1]: 5 + Value[PIXELFORMAT_UNCOMPRESSED_R4G4B4A4]: 6 + Value[PIXELFORMAT_UNCOMPRESSED_R8G8B8A8]: 7 + Value[PIXELFORMAT_UNCOMPRESSED_R32]: 8 + Value[PIXELFORMAT_UNCOMPRESSED_R32G32B32]: 9 + Value[PIXELFORMAT_UNCOMPRESSED_R32G32B32A32]: 10 + Value[PIXELFORMAT_COMPRESSED_DXT1_RGB]: 11 + Value[PIXELFORMAT_COMPRESSED_DXT1_RGBA]: 12 + Value[PIXELFORMAT_COMPRESSED_DXT3_RGBA]: 13 + Value[PIXELFORMAT_COMPRESSED_DXT5_RGBA]: 14 + Value[PIXELFORMAT_COMPRESSED_ETC1_RGB]: 15 + Value[PIXELFORMAT_COMPRESSED_ETC2_RGB]: 16 + Value[PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA]: 17 + Value[PIXELFORMAT_COMPRESSED_PVRT_RGB]: 18 + Value[PIXELFORMAT_COMPRESSED_PVRT_RGBA]: 19 + Value[PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA]: 20 + Value[PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA]: 21 +Enum 13: TextureFilter (6 values) + Name: TextureFilter + Description: Texture parameters: filter mode + Value[TEXTURE_FILTER_POINT]: 0 + Value[TEXTURE_FILTER_BILINEAR]: 1 + Value[TEXTURE_FILTER_TRILINEAR]: 2 + Value[TEXTURE_FILTER_ANISOTROPIC_4X]: 3 + Value[TEXTURE_FILTER_ANISOTROPIC_8X]: 4 + Value[TEXTURE_FILTER_ANISOTROPIC_16X]: 5 +Enum 14: TextureWrap (4 values) + Name: TextureWrap + Description: Texture parameters: wrap mode + Value[TEXTURE_WRAP_REPEAT]: 0 + Value[TEXTURE_WRAP_CLAMP]: 1 + Value[TEXTURE_WRAP_MIRROR_REPEAT]: 2 + Value[TEXTURE_WRAP_MIRROR_CLAMP]: 3 +Enum 15: CubemapLayout (6 values) + Name: CubemapLayout + Description: Cubemap layouts + Value[CUBEMAP_LAYOUT_AUTO_DETECT]: 0 + Value[CUBEMAP_LAYOUT_LINE_VERTICAL]: 1 + Value[CUBEMAP_LAYOUT_LINE_HORIZONTAL]: 2 + Value[CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR]: 3 + Value[CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE]: 4 + Value[CUBEMAP_LAYOUT_PANORAMA]: 5 +Enum 16: FontType (3 values) + Name: FontType + Description: Font type, defines generation method + Value[FONT_DEFAULT]: 0 + Value[FONT_BITMAP]: 1 + Value[FONT_SDF]: 2 +Enum 17: BlendMode (8 values) + Name: BlendMode + Description: Color blending modes (pre-defined) + Value[BLEND_ALPHA]: 0 + Value[BLEND_ADDITIVE]: 1 + Value[BLEND_MULTIPLIED]: 2 + Value[BLEND_ADD_COLORS]: 3 + Value[BLEND_SUBTRACT_COLORS]: 4 + Value[BLEND_ALPHA_PREMULTIPLY]: 5 + Value[BLEND_CUSTOM]: 6 + Value[BLEND_CUSTOM_SEPARATE]: 7 +Enum 18: Gesture (11 values) + Name: Gesture + Description: Gesture + Value[GESTURE_NONE]: 0 + Value[GESTURE_TAP]: 1 + Value[GESTURE_DOUBLETAP]: 2 + Value[GESTURE_HOLD]: 4 + Value[GESTURE_DRAG]: 8 + Value[GESTURE_SWIPE_RIGHT]: 16 + Value[GESTURE_SWIPE_LEFT]: 32 + Value[GESTURE_SWIPE_UP]: 64 + Value[GESTURE_SWIPE_DOWN]: 128 + Value[GESTURE_PINCH_IN]: 256 + Value[GESTURE_PINCH_OUT]: 512 +Enum 19: CameraMode (5 values) + Name: CameraMode + Description: Camera system modes + Value[CAMERA_CUSTOM]: 0 + Value[CAMERA_FREE]: 1 + Value[CAMERA_ORBITAL]: 2 + Value[CAMERA_FIRST_PERSON]: 3 + Value[CAMERA_THIRD_PERSON]: 4 +Enum 20: CameraProjection (2 values) + Name: CameraProjection + Description: Camera projection + Value[CAMERA_PERSPECTIVE]: 0 + Value[CAMERA_ORTHOGRAPHIC]: 1 +Enum 21: NPatchLayout (3 values) + Name: NPatchLayout + Description: N-patch layout + Value[NPATCH_NINE_PATCH]: 0 + Value[NPATCH_THREE_PATCH_VERTICAL]: 1 + Value[NPATCH_THREE_PATCH_HORIZONTAL]: 2 + +Callbacks found: 6 + +Callback 001: TraceLogCallback() (3 input parameters) + Name: TraceLogCallback + Return type: void + Description: Logging: Redirect trace log messages + Param[1]: logLevel (type: int) + Param[2]: text (type: const char *) + Param[3]: args (type: va_list) +Callback 002: LoadFileDataCallback() (2 input parameters) + Name: LoadFileDataCallback + Return type: unsigned char * + Description: FileIO: Load binary data + Param[1]: fileName (type: const char *) + Param[2]: bytesRead (type: unsigned int *) +Callback 003: SaveFileDataCallback() (3 input parameters) + Name: SaveFileDataCallback + Return type: bool + Description: FileIO: Save binary data + Param[1]: fileName (type: const char *) + Param[2]: data (type: void *) + Param[3]: bytesToWrite (type: unsigned int) +Callback 004: LoadFileTextCallback() (1 input parameters) + Name: LoadFileTextCallback + Return type: char * + Description: FileIO: Load text data + Param[1]: fileName (type: const char *) +Callback 005: SaveFileTextCallback() (2 input parameters) + Name: SaveFileTextCallback + Return type: bool + Description: FileIO: Save text data + Param[1]: fileName (type: const char *) + Param[2]: text (type: char *) +Callback 006: AudioCallback() (2 input parameters) + Name: AudioCallback + Return type: void + Description: + Param[1]: bufferData (type: void *) + Param[2]: frames (type: unsigned int) + +Functions found: 517 + +Function 001: InitWindow() (3 input parameters) + Name: InitWindow + Return type: void + Description: Initialize window and OpenGL context + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: title (type: const char *) +Function 002: WindowShouldClose() (0 input parameters) + Name: WindowShouldClose + Return type: bool + Description: Check if KEY_ESCAPE pressed or Close icon pressed + No input parameters +Function 003: CloseWindow() (0 input parameters) + Name: CloseWindow + Return type: void + Description: Close window and unload OpenGL context + No input parameters +Function 004: IsWindowReady() (0 input parameters) + Name: IsWindowReady + Return type: bool + Description: Check if window has been initialized successfully + No input parameters +Function 005: IsWindowFullscreen() (0 input parameters) + Name: IsWindowFullscreen + Return type: bool + Description: Check if window is currently fullscreen + No input parameters +Function 006: IsWindowHidden() (0 input parameters) + Name: IsWindowHidden + Return type: bool + Description: Check if window is currently hidden (only PLATFORM_DESKTOP) + No input parameters +Function 007: IsWindowMinimized() (0 input parameters) + Name: IsWindowMinimized + Return type: bool + Description: Check if window is currently minimized (only PLATFORM_DESKTOP) + No input parameters +Function 008: IsWindowMaximized() (0 input parameters) + Name: IsWindowMaximized + Return type: bool + Description: Check if window is currently maximized (only PLATFORM_DESKTOP) + No input parameters +Function 009: IsWindowFocused() (0 input parameters) + Name: IsWindowFocused + Return type: bool + Description: Check if window is currently focused (only PLATFORM_DESKTOP) + No input parameters +Function 010: IsWindowResized() (0 input parameters) + Name: IsWindowResized + Return type: bool + Description: Check if window has been resized last frame + No input parameters +Function 011: IsWindowState() (1 input parameters) + Name: IsWindowState + Return type: bool + Description: Check if one specific window flag is enabled + Param[1]: flag (type: unsigned int) +Function 012: SetWindowState() (1 input parameters) + Name: SetWindowState + Return type: void + Description: Set window configuration state using flags (only PLATFORM_DESKTOP) + Param[1]: flags (type: unsigned int) +Function 013: ClearWindowState() (1 input parameters) + Name: ClearWindowState + Return type: void + Description: Clear window configuration state flags + Param[1]: flags (type: unsigned int) +Function 014: ToggleFullscreen() (0 input parameters) + Name: ToggleFullscreen + Return type: void + Description: Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) + No input parameters +Function 015: MaximizeWindow() (0 input parameters) + Name: MaximizeWindow + Return type: void + Description: Set window state: maximized, if resizable (only PLATFORM_DESKTOP) + No input parameters +Function 016: MinimizeWindow() (0 input parameters) + Name: MinimizeWindow + Return type: void + Description: Set window state: minimized, if resizable (only PLATFORM_DESKTOP) + No input parameters +Function 017: RestoreWindow() (0 input parameters) + Name: RestoreWindow + Return type: void + Description: Set window state: not minimized/maximized (only PLATFORM_DESKTOP) + No input parameters +Function 018: SetWindowIcon() (1 input parameters) + Name: SetWindowIcon + Return type: void + Description: Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP) + Param[1]: image (type: Image) +Function 019: SetWindowIcons() (2 input parameters) + Name: SetWindowIcons + Return type: void + Description: Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) + Param[1]: images (type: Image *) + Param[2]: count (type: int) +Function 020: SetWindowTitle() (1 input parameters) + Name: SetWindowTitle + Return type: void + Description: Set title for window (only PLATFORM_DESKTOP) + Param[1]: title (type: const char *) +Function 021: SetWindowPosition() (2 input parameters) + Name: SetWindowPosition + Return type: void + Description: Set window position on screen (only PLATFORM_DESKTOP) + Param[1]: x (type: int) + Param[2]: y (type: int) +Function 022: SetWindowMonitor() (1 input parameters) + Name: SetWindowMonitor + Return type: void + Description: Set monitor for the current window (fullscreen mode) + Param[1]: monitor (type: int) +Function 023: SetWindowMinSize() (2 input parameters) + Name: SetWindowMinSize + Return type: void + Description: Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) + Param[1]: width (type: int) + Param[2]: height (type: int) +Function 024: SetWindowSize() (2 input parameters) + Name: SetWindowSize + Return type: void + Description: Set window dimensions + Param[1]: width (type: int) + Param[2]: height (type: int) +Function 025: SetWindowOpacity() (1 input parameters) + Name: SetWindowOpacity + Return type: void + Description: Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) + Param[1]: opacity (type: float) +Function 026: GetWindowHandle() (0 input parameters) + Name: GetWindowHandle + Return type: void * + Description: Get native window handle + No input parameters +Function 027: GetScreenWidth() (0 input parameters) + Name: GetScreenWidth + Return type: int + Description: Get current screen width + No input parameters +Function 028: GetScreenHeight() (0 input parameters) + Name: GetScreenHeight + Return type: int + Description: Get current screen height + No input parameters +Function 029: GetRenderWidth() (0 input parameters) + Name: GetRenderWidth + Return type: int + Description: Get current render width (it considers HiDPI) + No input parameters +Function 030: GetRenderHeight() (0 input parameters) + Name: GetRenderHeight + Return type: int + Description: Get current render height (it considers HiDPI) + No input parameters +Function 031: GetMonitorCount() (0 input parameters) + Name: GetMonitorCount + Return type: int + Description: Get number of connected monitors + No input parameters +Function 032: GetCurrentMonitor() (0 input parameters) + Name: GetCurrentMonitor + Return type: int + Description: Get current connected monitor + No input parameters +Function 033: GetMonitorPosition() (1 input parameters) + Name: GetMonitorPosition + Return type: Vector2 + Description: Get specified monitor position + Param[1]: monitor (type: int) +Function 034: GetMonitorWidth() (1 input parameters) + Name: GetMonitorWidth + Return type: int + Description: Get specified monitor width (current video mode used by monitor) + Param[1]: monitor (type: int) +Function 035: GetMonitorHeight() (1 input parameters) + Name: GetMonitorHeight + Return type: int + Description: Get specified monitor height (current video mode used by monitor) + Param[1]: monitor (type: int) +Function 036: GetMonitorPhysicalWidth() (1 input parameters) + Name: GetMonitorPhysicalWidth + Return type: int + Description: Get specified monitor physical width in millimetres + Param[1]: monitor (type: int) +Function 037: GetMonitorPhysicalHeight() (1 input parameters) + Name: GetMonitorPhysicalHeight + Return type: int + Description: Get specified monitor physical height in millimetres + Param[1]: monitor (type: int) +Function 038: GetMonitorRefreshRate() (1 input parameters) + Name: GetMonitorRefreshRate + Return type: int + Description: Get specified monitor refresh rate + Param[1]: monitor (type: int) +Function 039: GetWindowPosition() (0 input parameters) + Name: GetWindowPosition + Return type: Vector2 + Description: Get window position XY on monitor + No input parameters +Function 040: GetWindowScaleDPI() (0 input parameters) + Name: GetWindowScaleDPI + Return type: Vector2 + Description: Get window scale DPI factor + No input parameters +Function 041: GetMonitorName() (1 input parameters) + Name: GetMonitorName + Return type: const char * + Description: Get the human-readable, UTF-8 encoded name of the primary monitor + Param[1]: monitor (type: int) +Function 042: SetClipboardText() (1 input parameters) + Name: SetClipboardText + Return type: void + Description: Set clipboard text content + Param[1]: text (type: const char *) +Function 043: GetClipboardText() (0 input parameters) + Name: GetClipboardText + Return type: const char * + Description: Get clipboard text content + No input parameters +Function 044: EnableEventWaiting() (0 input parameters) + Name: EnableEventWaiting + Return type: void + Description: Enable waiting for events on EndDrawing(), no automatic event polling + No input parameters +Function 045: DisableEventWaiting() (0 input parameters) + Name: DisableEventWaiting + Return type: void + Description: Disable waiting for events on EndDrawing(), automatic events polling + No input parameters +Function 046: SwapScreenBuffer() (0 input parameters) + Name: SwapScreenBuffer + Return type: void + Description: Swap back buffer with front buffer (screen drawing) + No input parameters +Function 047: PollInputEvents() (0 input parameters) + Name: PollInputEvents + Return type: void + Description: Register all input events + No input parameters +Function 048: WaitTime() (1 input parameters) + Name: WaitTime + Return type: void + Description: Wait for some time (halt program execution) + Param[1]: seconds (type: double) +Function 049: ShowCursor() (0 input parameters) + Name: ShowCursor + Return type: void + Description: Shows cursor + No input parameters +Function 050: HideCursor() (0 input parameters) + Name: HideCursor + Return type: void + Description: Hides cursor + No input parameters +Function 051: IsCursorHidden() (0 input parameters) + Name: IsCursorHidden + Return type: bool + Description: Check if cursor is not visible + No input parameters +Function 052: EnableCursor() (0 input parameters) + Name: EnableCursor + Return type: void + Description: Enables cursor (unlock cursor) + No input parameters +Function 053: DisableCursor() (0 input parameters) + Name: DisableCursor + Return type: void + Description: Disables cursor (lock cursor) + No input parameters +Function 054: IsCursorOnScreen() (0 input parameters) + Name: IsCursorOnScreen + Return type: bool + Description: Check if cursor is on the screen + No input parameters +Function 055: ClearBackground() (1 input parameters) + Name: ClearBackground + Return type: void + Description: Set background color (framebuffer clear color) + Param[1]: color (type: Color) +Function 056: BeginDrawing() (0 input parameters) + Name: BeginDrawing + Return type: void + Description: Setup canvas (framebuffer) to start drawing + No input parameters +Function 057: EndDrawing() (0 input parameters) + Name: EndDrawing + Return type: void + Description: End canvas drawing and swap buffers (double buffering) + No input parameters +Function 058: BeginMode2D() (1 input parameters) + Name: BeginMode2D + Return type: void + Description: Begin 2D mode with custom camera (2D) + Param[1]: camera (type: Camera2D) +Function 059: EndMode2D() (0 input parameters) + Name: EndMode2D + Return type: void + Description: Ends 2D mode with custom camera + No input parameters +Function 060: BeginMode3D() (1 input parameters) + Name: BeginMode3D + Return type: void + Description: Begin 3D mode with custom camera (3D) + Param[1]: camera (type: Camera3D) +Function 061: EndMode3D() (0 input parameters) + Name: EndMode3D + Return type: void + Description: Ends 3D mode and returns to default 2D orthographic mode + No input parameters +Function 062: BeginTextureMode() (1 input parameters) + Name: BeginTextureMode + Return type: void + Description: Begin drawing to render texture + Param[1]: target (type: RenderTexture2D) +Function 063: EndTextureMode() (0 input parameters) + Name: EndTextureMode + Return type: void + Description: Ends drawing to render texture + No input parameters +Function 064: BeginShaderMode() (1 input parameters) + Name: BeginShaderMode + Return type: void + Description: Begin custom shader drawing + Param[1]: shader (type: Shader) +Function 065: EndShaderMode() (0 input parameters) + Name: EndShaderMode + Return type: void + Description: End custom shader drawing (use default shader) + No input parameters +Function 066: BeginBlendMode() (1 input parameters) + Name: BeginBlendMode + Return type: void + Description: Begin blending mode (alpha, additive, multiplied, subtract, custom) + Param[1]: mode (type: int) +Function 067: EndBlendMode() (0 input parameters) + Name: EndBlendMode + Return type: void + Description: End blending mode (reset to default: alpha blending) + No input parameters +Function 068: BeginScissorMode() (4 input parameters) + Name: BeginScissorMode + Return type: void + Description: Begin scissor mode (define screen area for following drawing) + Param[1]: x (type: int) + Param[2]: y (type: int) + Param[3]: width (type: int) + Param[4]: height (type: int) +Function 069: EndScissorMode() (0 input parameters) + Name: EndScissorMode + Return type: void + Description: End scissor mode + No input parameters +Function 070: BeginVrStereoMode() (1 input parameters) + Name: BeginVrStereoMode + Return type: void + Description: Begin stereo rendering (requires VR simulator) + Param[1]: config (type: VrStereoConfig) +Function 071: EndVrStereoMode() (0 input parameters) + Name: EndVrStereoMode + Return type: void + Description: End stereo rendering (requires VR simulator) + No input parameters +Function 072: LoadVrStereoConfig() (1 input parameters) + Name: LoadVrStereoConfig + Return type: VrStereoConfig + Description: Load VR stereo config for VR simulator device parameters + Param[1]: device (type: VrDeviceInfo) +Function 073: UnloadVrStereoConfig() (1 input parameters) + Name: UnloadVrStereoConfig + Return type: void + Description: Unload VR stereo config + Param[1]: config (type: VrStereoConfig) +Function 074: LoadShader() (2 input parameters) + Name: LoadShader + Return type: Shader + Description: Load shader from files and bind default locations + Param[1]: vsFileName (type: const char *) + Param[2]: fsFileName (type: const char *) +Function 075: LoadShaderFromMemory() (2 input parameters) + Name: LoadShaderFromMemory + Return type: Shader + Description: Load shader from code strings and bind default locations + Param[1]: vsCode (type: const char *) + Param[2]: fsCode (type: const char *) +Function 076: IsShaderReady() (1 input parameters) + Name: IsShaderReady + Return type: bool + Description: Check if a shader is ready + Param[1]: shader (type: Shader) +Function 077: GetShaderLocation() (2 input parameters) + Name: GetShaderLocation + Return type: int + Description: Get shader uniform location + Param[1]: shader (type: Shader) + Param[2]: uniformName (type: const char *) +Function 078: GetShaderLocationAttrib() (2 input parameters) + Name: GetShaderLocationAttrib + Return type: int + Description: Get shader attribute location + Param[1]: shader (type: Shader) + Param[2]: attribName (type: const char *) +Function 079: SetShaderValue() (4 input parameters) + Name: SetShaderValue + Return type: void + Description: Set shader uniform value + Param[1]: shader (type: Shader) + Param[2]: locIndex (type: int) + Param[3]: value (type: const void *) + Param[4]: uniformType (type: int) +Function 080: SetShaderValueV() (5 input parameters) + Name: SetShaderValueV + Return type: void + Description: Set shader uniform value vector + Param[1]: shader (type: Shader) + Param[2]: locIndex (type: int) + Param[3]: value (type: const void *) + Param[4]: uniformType (type: int) + Param[5]: count (type: int) +Function 081: SetShaderValueMatrix() (3 input parameters) + Name: SetShaderValueMatrix + Return type: void + Description: Set shader uniform value (matrix 4x4) + Param[1]: shader (type: Shader) + Param[2]: locIndex (type: int) + Param[3]: mat (type: Matrix) +Function 082: SetShaderValueTexture() (3 input parameters) + Name: SetShaderValueTexture + Return type: void + Description: Set shader uniform value for texture (sampler2d) + Param[1]: shader (type: Shader) + Param[2]: locIndex (type: int) + Param[3]: texture (type: Texture2D) +Function 083: UnloadShader() (1 input parameters) + Name: UnloadShader + Return type: void + Description: Unload shader from GPU memory (VRAM) + Param[1]: shader (type: Shader) +Function 084: GetMouseRay() (2 input parameters) + Name: GetMouseRay + Return type: Ray + Description: Get a ray trace from mouse position + Param[1]: mousePosition (type: Vector2) + Param[2]: camera (type: Camera) +Function 085: GetCameraMatrix() (1 input parameters) + Name: GetCameraMatrix + Return type: Matrix + Description: Get camera transform matrix (view matrix) + Param[1]: camera (type: Camera) +Function 086: GetCameraMatrix2D() (1 input parameters) + Name: GetCameraMatrix2D + Return type: Matrix + Description: Get camera 2d transform matrix + Param[1]: camera (type: Camera2D) +Function 087: GetWorldToScreen() (2 input parameters) + Name: GetWorldToScreen + Return type: Vector2 + Description: Get the screen space position for a 3d world space position + Param[1]: position (type: Vector3) + Param[2]: camera (type: Camera) +Function 088: GetScreenToWorld2D() (2 input parameters) + Name: GetScreenToWorld2D + Return type: Vector2 + Description: Get the world space position for a 2d camera screen space position + Param[1]: position (type: Vector2) + Param[2]: camera (type: Camera2D) +Function 089: GetWorldToScreenEx() (4 input parameters) + Name: GetWorldToScreenEx + Return type: Vector2 + Description: Get size position for a 3d world space position + Param[1]: position (type: Vector3) + Param[2]: camera (type: Camera) + Param[3]: width (type: int) + Param[4]: height (type: int) +Function 090: GetWorldToScreen2D() (2 input parameters) + Name: GetWorldToScreen2D + Return type: Vector2 + Description: Get the screen space position for a 2d camera world space position + Param[1]: position (type: Vector2) + Param[2]: camera (type: Camera2D) +Function 091: SetTargetFPS() (1 input parameters) + Name: SetTargetFPS + Return type: void + Description: Set target FPS (maximum) + Param[1]: fps (type: int) +Function 092: GetFPS() (0 input parameters) + Name: GetFPS + Return type: int + Description: Get current FPS + No input parameters +Function 093: GetFrameTime() (0 input parameters) + Name: GetFrameTime + Return type: float + Description: Get time in seconds for last frame drawn (delta time) + No input parameters +Function 094: GetTime() (0 input parameters) + Name: GetTime + Return type: double + Description: Get elapsed time in seconds since InitWindow() + No input parameters +Function 095: GetRandomValue() (2 input parameters) + Name: GetRandomValue + Return type: int + Description: Get a random value between min and max (both included) + Param[1]: min (type: int) + Param[2]: max (type: int) +Function 096: SetRandomSeed() (1 input parameters) + Name: SetRandomSeed + Return type: void + Description: Set the seed for the random number generator + Param[1]: seed (type: unsigned int) +Function 097: TakeScreenshot() (1 input parameters) + Name: TakeScreenshot + Return type: void + Description: Takes a screenshot of current screen (filename extension defines format) + Param[1]: fileName (type: const char *) +Function 098: SetConfigFlags() (1 input parameters) + Name: SetConfigFlags + Return type: void + Description: Setup init configuration flags (view FLAGS) + Param[1]: flags (type: unsigned int) +Function 099: TraceLog() (3 input parameters) + Name: TraceLog + Return type: void + Description: Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) + Param[1]: logLevel (type: int) + Param[2]: text (type: const char *) + Param[3]: args (type: ...) +Function 100: SetTraceLogLevel() (1 input parameters) + Name: SetTraceLogLevel + Return type: void + Description: Set the current threshold (minimum) log level + Param[1]: logLevel (type: int) +Function 101: MemAlloc() (1 input parameters) + Name: MemAlloc + Return type: void * + Description: Internal memory allocator + Param[1]: size (type: unsigned int) +Function 102: MemRealloc() (2 input parameters) + Name: MemRealloc + Return type: void * + Description: Internal memory reallocator + Param[1]: ptr (type: void *) + Param[2]: size (type: unsigned int) +Function 103: MemFree() (1 input parameters) + Name: MemFree + Return type: void + Description: Internal memory free + Param[1]: ptr (type: void *) +Function 104: OpenURL() (1 input parameters) + Name: OpenURL + Return type: void + Description: Open URL with default system browser (if available) + Param[1]: url (type: const char *) +Function 105: SetTraceLogCallback() (1 input parameters) + Name: SetTraceLogCallback + Return type: void + Description: Set custom trace log + Param[1]: callback (type: TraceLogCallback) +Function 106: SetLoadFileDataCallback() (1 input parameters) + Name: SetLoadFileDataCallback + Return type: void + Description: Set custom file binary data loader + Param[1]: callback (type: LoadFileDataCallback) +Function 107: SetSaveFileDataCallback() (1 input parameters) + Name: SetSaveFileDataCallback + Return type: void + Description: Set custom file binary data saver + Param[1]: callback (type: SaveFileDataCallback) +Function 108: SetLoadFileTextCallback() (1 input parameters) + Name: SetLoadFileTextCallback + Return type: void + Description: Set custom file text data loader + Param[1]: callback (type: LoadFileTextCallback) +Function 109: SetSaveFileTextCallback() (1 input parameters) + Name: SetSaveFileTextCallback + Return type: void + Description: Set custom file text data saver + Param[1]: callback (type: SaveFileTextCallback) +Function 110: LoadFileData() (2 input parameters) + Name: LoadFileData + Return type: unsigned char * + Description: Load file data as byte array (read) + Param[1]: fileName (type: const char *) + Param[2]: bytesRead (type: unsigned int *) +Function 111: UnloadFileData() (1 input parameters) + Name: UnloadFileData + Return type: void + Description: Unload file data allocated by LoadFileData() + Param[1]: data (type: unsigned char *) +Function 112: SaveFileData() (3 input parameters) + Name: SaveFileData + Return type: bool + Description: Save data to file from byte array (write), returns true on success + Param[1]: fileName (type: const char *) + Param[2]: data (type: void *) + Param[3]: bytesToWrite (type: unsigned int) +Function 113: ExportDataAsCode() (3 input parameters) + Name: ExportDataAsCode + Return type: bool + Description: Export data to code (.h), returns true on success + Param[1]: data (type: const unsigned char *) + Param[2]: size (type: unsigned int) + Param[3]: fileName (type: const char *) +Function 114: LoadFileText() (1 input parameters) + Name: LoadFileText + Return type: char * + Description: Load text data from file (read), returns a '\0' terminated string + Param[1]: fileName (type: const char *) +Function 115: UnloadFileText() (1 input parameters) + Name: UnloadFileText + Return type: void + Description: Unload file text data allocated by LoadFileText() + Param[1]: text (type: char *) +Function 116: SaveFileText() (2 input parameters) + Name: SaveFileText + Return type: bool + Description: Save text data to file (write), string must be '\0' terminated, returns true on success + Param[1]: fileName (type: const char *) + Param[2]: text (type: char *) +Function 117: FileExists() (1 input parameters) + Name: FileExists + Return type: bool + Description: Check if file exists + Param[1]: fileName (type: const char *) +Function 118: DirectoryExists() (1 input parameters) + Name: DirectoryExists + Return type: bool + Description: Check if a directory path exists + Param[1]: dirPath (type: const char *) +Function 119: IsFileExtension() (2 input parameters) + Name: IsFileExtension + Return type: bool + Description: Check file extension (including point: .png, .wav) + Param[1]: fileName (type: const char *) + Param[2]: ext (type: const char *) +Function 120: GetFileLength() (1 input parameters) + Name: GetFileLength + Return type: int + Description: Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h) + Param[1]: fileName (type: const char *) +Function 121: GetFileExtension() (1 input parameters) + Name: GetFileExtension + Return type: const char * + Description: Get pointer to extension for a filename string (includes dot: '.png') + Param[1]: fileName (type: const char *) +Function 122: GetFileName() (1 input parameters) + Name: GetFileName + Return type: const char * + Description: Get pointer to filename for a path string + Param[1]: filePath (type: const char *) +Function 123: GetFileNameWithoutExt() (1 input parameters) + Name: GetFileNameWithoutExt + Return type: const char * + Description: Get filename string without extension (uses static string) + Param[1]: filePath (type: const char *) +Function 124: GetDirectoryPath() (1 input parameters) + Name: GetDirectoryPath + Return type: const char * + Description: Get full path for a given fileName with path (uses static string) + Param[1]: filePath (type: const char *) +Function 125: GetPrevDirectoryPath() (1 input parameters) + Name: GetPrevDirectoryPath + Return type: const char * + Description: Get previous directory path for a given path (uses static string) + Param[1]: dirPath (type: const char *) +Function 126: GetWorkingDirectory() (0 input parameters) + Name: GetWorkingDirectory + Return type: const char * + Description: Get current working directory (uses static string) + No input parameters +Function 127: GetApplicationDirectory() (0 input parameters) + Name: GetApplicationDirectory + Return type: const char * + Description: Get the directory if the running application (uses static string) + No input parameters +Function 128: ChangeDirectory() (1 input parameters) + Name: ChangeDirectory + Return type: bool + Description: Change working directory, return true on success + Param[1]: dir (type: const char *) +Function 129: IsPathFile() (1 input parameters) + Name: IsPathFile + Return type: bool + Description: Check if a given path is a file or a directory + Param[1]: path (type: const char *) +Function 130: LoadDirectoryFiles() (1 input parameters) + Name: LoadDirectoryFiles + Return type: FilePathList + Description: Load directory filepaths + Param[1]: dirPath (type: const char *) +Function 131: LoadDirectoryFilesEx() (3 input parameters) + Name: LoadDirectoryFilesEx + Return type: FilePathList + Description: Load directory filepaths with extension filtering and recursive directory scan + Param[1]: basePath (type: const char *) + Param[2]: filter (type: const char *) + Param[3]: scanSubdirs (type: bool) +Function 132: UnloadDirectoryFiles() (1 input parameters) + Name: UnloadDirectoryFiles + Return type: void + Description: Unload filepaths + Param[1]: files (type: FilePathList) +Function 133: IsFileDropped() (0 input parameters) + Name: IsFileDropped + Return type: bool + Description: Check if a file has been dropped into window + No input parameters +Function 134: LoadDroppedFiles() (0 input parameters) + Name: LoadDroppedFiles + Return type: FilePathList + Description: Load dropped filepaths + No input parameters +Function 135: UnloadDroppedFiles() (1 input parameters) + Name: UnloadDroppedFiles + Return type: void + Description: Unload dropped filepaths + Param[1]: files (type: FilePathList) +Function 136: GetFileModTime() (1 input parameters) + Name: GetFileModTime + Return type: long + Description: Get file modification time (last write time) + Param[1]: fileName (type: const char *) +Function 137: CompressData() (3 input parameters) + Name: CompressData + Return type: unsigned char * + Description: Compress data (DEFLATE algorithm), memory must be MemFree() + Param[1]: data (type: const unsigned char *) + Param[2]: dataSize (type: int) + Param[3]: compDataSize (type: int *) +Function 138: DecompressData() (3 input parameters) + Name: DecompressData + Return type: unsigned char * + Description: Decompress data (DEFLATE algorithm), memory must be MemFree() + Param[1]: compData (type: const unsigned char *) + Param[2]: compDataSize (type: int) + Param[3]: dataSize (type: int *) +Function 139: EncodeDataBase64() (3 input parameters) + Name: EncodeDataBase64 + Return type: char * + Description: Encode data to Base64 string, memory must be MemFree() + Param[1]: data (type: const unsigned char *) + Param[2]: dataSize (type: int) + Param[3]: outputSize (type: int *) +Function 140: DecodeDataBase64() (2 input parameters) + Name: DecodeDataBase64 + Return type: unsigned char * + Description: Decode Base64 string data, memory must be MemFree() + Param[1]: data (type: const unsigned char *) + Param[2]: outputSize (type: int *) +Function 141: IsKeyPressed() (1 input parameters) + Name: IsKeyPressed + Return type: bool + Description: Check if a key has been pressed once + Param[1]: key (type: int) +Function 142: IsKeyDown() (1 input parameters) + Name: IsKeyDown + Return type: bool + Description: Check if a key is being pressed + Param[1]: key (type: int) +Function 143: IsKeyReleased() (1 input parameters) + Name: IsKeyReleased + Return type: bool + Description: Check if a key has been released once + Param[1]: key (type: int) +Function 144: IsKeyUp() (1 input parameters) + Name: IsKeyUp + Return type: bool + Description: Check if a key is NOT being pressed + Param[1]: key (type: int) +Function 145: SetExitKey() (1 input parameters) + Name: SetExitKey + Return type: void + Description: Set a custom key to exit program (default is ESC) + Param[1]: key (type: int) +Function 146: GetKeyPressed() (0 input parameters) + Name: GetKeyPressed + Return type: int + Description: Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty + No input parameters +Function 147: GetCharPressed() (0 input parameters) + Name: GetCharPressed + Return type: int + Description: Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty + No input parameters +Function 148: IsGamepadAvailable() (1 input parameters) + Name: IsGamepadAvailable + Return type: bool + Description: Check if a gamepad is available + Param[1]: gamepad (type: int) +Function 149: GetGamepadName() (1 input parameters) + Name: GetGamepadName + Return type: const char * + Description: Get gamepad internal name id + Param[1]: gamepad (type: int) +Function 150: IsGamepadButtonPressed() (2 input parameters) + Name: IsGamepadButtonPressed + Return type: bool + Description: Check if a gamepad button has been pressed once + Param[1]: gamepad (type: int) + Param[2]: button (type: int) +Function 151: IsGamepadButtonDown() (2 input parameters) + Name: IsGamepadButtonDown + Return type: bool + Description: Check if a gamepad button is being pressed + Param[1]: gamepad (type: int) + Param[2]: button (type: int) +Function 152: IsGamepadButtonReleased() (2 input parameters) + Name: IsGamepadButtonReleased + Return type: bool + Description: Check if a gamepad button has been released once + Param[1]: gamepad (type: int) + Param[2]: button (type: int) +Function 153: IsGamepadButtonUp() (2 input parameters) + Name: IsGamepadButtonUp + Return type: bool + Description: Check if a gamepad button is NOT being pressed + Param[1]: gamepad (type: int) + Param[2]: button (type: int) +Function 154: GetGamepadButtonPressed() (0 input parameters) + Name: GetGamepadButtonPressed + Return type: int + Description: Get the last gamepad button pressed + No input parameters +Function 155: GetGamepadAxisCount() (1 input parameters) + Name: GetGamepadAxisCount + Return type: int + Description: Get gamepad axis count for a gamepad + Param[1]: gamepad (type: int) +Function 156: GetGamepadAxisMovement() (2 input parameters) + Name: GetGamepadAxisMovement + Return type: float + Description: Get axis movement value for a gamepad axis + Param[1]: gamepad (type: int) + Param[2]: axis (type: int) +Function 157: SetGamepadMappings() (1 input parameters) + Name: SetGamepadMappings + Return type: int + Description: Set internal gamepad mappings (SDL_GameControllerDB) + Param[1]: mappings (type: const char *) +Function 158: IsMouseButtonPressed() (1 input parameters) + Name: IsMouseButtonPressed + Return type: bool + Description: Check if a mouse button has been pressed once + Param[1]: button (type: int) +Function 159: IsMouseButtonDown() (1 input parameters) + Name: IsMouseButtonDown + Return type: bool + Description: Check if a mouse button is being pressed + Param[1]: button (type: int) +Function 160: IsMouseButtonReleased() (1 input parameters) + Name: IsMouseButtonReleased + Return type: bool + Description: Check if a mouse button has been released once + Param[1]: button (type: int) +Function 161: IsMouseButtonUp() (1 input parameters) + Name: IsMouseButtonUp + Return type: bool + Description: Check if a mouse button is NOT being pressed + Param[1]: button (type: int) +Function 162: GetMouseX() (0 input parameters) + Name: GetMouseX + Return type: int + Description: Get mouse position X + No input parameters +Function 163: GetMouseY() (0 input parameters) + Name: GetMouseY + Return type: int + Description: Get mouse position Y + No input parameters +Function 164: GetMousePosition() (0 input parameters) + Name: GetMousePosition + Return type: Vector2 + Description: Get mouse position XY + No input parameters +Function 165: GetMouseDelta() (0 input parameters) + Name: GetMouseDelta + Return type: Vector2 + Description: Get mouse delta between frames + No input parameters +Function 166: SetMousePosition() (2 input parameters) + Name: SetMousePosition + Return type: void + Description: Set mouse position XY + Param[1]: x (type: int) + Param[2]: y (type: int) +Function 167: SetMouseOffset() (2 input parameters) + Name: SetMouseOffset + Return type: void + Description: Set mouse offset + Param[1]: offsetX (type: int) + Param[2]: offsetY (type: int) +Function 168: SetMouseScale() (2 input parameters) + Name: SetMouseScale + Return type: void + Description: Set mouse scaling + Param[1]: scaleX (type: float) + Param[2]: scaleY (type: float) +Function 169: GetMouseWheelMove() (0 input parameters) + Name: GetMouseWheelMove + Return type: float + Description: Get mouse wheel movement for X or Y, whichever is larger + No input parameters +Function 170: GetMouseWheelMoveV() (0 input parameters) + Name: GetMouseWheelMoveV + Return type: Vector2 + Description: Get mouse wheel movement for both X and Y + No input parameters +Function 171: SetMouseCursor() (1 input parameters) + Name: SetMouseCursor + Return type: void + Description: Set mouse cursor + Param[1]: cursor (type: int) +Function 172: GetTouchX() (0 input parameters) + Name: GetTouchX + Return type: int + Description: Get touch position X for touch point 0 (relative to screen size) + No input parameters +Function 173: GetTouchY() (0 input parameters) + Name: GetTouchY + Return type: int + Description: Get touch position Y for touch point 0 (relative to screen size) + No input parameters +Function 174: GetTouchPosition() (1 input parameters) + Name: GetTouchPosition + Return type: Vector2 + Description: Get touch position XY for a touch point index (relative to screen size) + Param[1]: index (type: int) +Function 175: GetTouchPointId() (1 input parameters) + Name: GetTouchPointId + Return type: int + Description: Get touch point identifier for given index + Param[1]: index (type: int) +Function 176: GetTouchPointCount() (0 input parameters) + Name: GetTouchPointCount + Return type: int + Description: Get number of touch points + No input parameters +Function 177: SetGesturesEnabled() (1 input parameters) + Name: SetGesturesEnabled + Return type: void + Description: Enable a set of gestures using flags + Param[1]: flags (type: unsigned int) +Function 178: IsGestureDetected() (1 input parameters) + Name: IsGestureDetected + Return type: bool + Description: Check if a gesture have been detected + Param[1]: gesture (type: int) +Function 179: GetGestureDetected() (0 input parameters) + Name: GetGestureDetected + Return type: int + Description: Get latest detected gesture + No input parameters +Function 180: GetGestureHoldDuration() (0 input parameters) + Name: GetGestureHoldDuration + Return type: float + Description: Get gesture hold time in milliseconds + No input parameters +Function 181: GetGestureDragVector() (0 input parameters) + Name: GetGestureDragVector + Return type: Vector2 + Description: Get gesture drag vector + No input parameters +Function 182: GetGestureDragAngle() (0 input parameters) + Name: GetGestureDragAngle + Return type: float + Description: Get gesture drag angle + No input parameters +Function 183: GetGesturePinchVector() (0 input parameters) + Name: GetGesturePinchVector + Return type: Vector2 + Description: Get gesture pinch delta + No input parameters +Function 184: GetGesturePinchAngle() (0 input parameters) + Name: GetGesturePinchAngle + Return type: float + Description: Get gesture pinch angle + No input parameters +Function 185: UpdateCamera() (2 input parameters) + Name: UpdateCamera + Return type: void + Description: Update camera position for selected mode + Param[1]: camera (type: Camera *) + Param[2]: mode (type: int) +Function 186: UpdateCameraPro() (4 input parameters) + Name: UpdateCameraPro + Return type: void + Description: Update camera movement/rotation + Param[1]: camera (type: Camera *) + Param[2]: movement (type: Vector3) + Param[3]: rotation (type: Vector3) + Param[4]: zoom (type: float) +Function 187: SetShapesTexture() (2 input parameters) + Name: SetShapesTexture + Return type: void + Description: Set texture and rectangle to be used on shapes drawing + Param[1]: texture (type: Texture2D) + Param[2]: source (type: Rectangle) +Function 188: DrawPixel() (3 input parameters) + Name: DrawPixel + Return type: void + Description: Draw a pixel + Param[1]: posX (type: int) + Param[2]: posY (type: int) + Param[3]: color (type: Color) +Function 189: DrawPixelV() (2 input parameters) + Name: DrawPixelV + Return type: void + Description: Draw a pixel (Vector version) + Param[1]: position (type: Vector2) + Param[2]: color (type: Color) +Function 190: DrawLine() (5 input parameters) + Name: DrawLine + Return type: void + Description: Draw a line + Param[1]: startPosX (type: int) + Param[2]: startPosY (type: int) + Param[3]: endPosX (type: int) + Param[4]: endPosY (type: int) + Param[5]: color (type: Color) +Function 191: DrawLineV() (3 input parameters) + Name: DrawLineV + Return type: void + Description: Draw a line (Vector version) + Param[1]: startPos (type: Vector2) + Param[2]: endPos (type: Vector2) + Param[3]: color (type: Color) +Function 192: DrawLineEx() (4 input parameters) + Name: DrawLineEx + Return type: void + Description: Draw a line defining thickness + Param[1]: startPos (type: Vector2) + Param[2]: endPos (type: Vector2) + Param[3]: thick (type: float) + Param[4]: color (type: Color) +Function 193: DrawLineBezier() (4 input parameters) + Name: DrawLineBezier + Return type: void + Description: Draw a line using cubic-bezier curves in-out + Param[1]: startPos (type: Vector2) + Param[2]: endPos (type: Vector2) + Param[3]: thick (type: float) + Param[4]: color (type: Color) +Function 194: DrawLineBezierQuad() (5 input parameters) + Name: DrawLineBezierQuad + Return type: void + Description: Draw line using quadratic bezier curves with a control point + Param[1]: startPos (type: Vector2) + Param[2]: endPos (type: Vector2) + Param[3]: controlPos (type: Vector2) + Param[4]: thick (type: float) + Param[5]: color (type: Color) +Function 195: DrawLineBezierCubic() (6 input parameters) + Name: DrawLineBezierCubic + Return type: void + Description: Draw line using cubic bezier curves with 2 control points + Param[1]: startPos (type: Vector2) + Param[2]: endPos (type: Vector2) + Param[3]: startControlPos (type: Vector2) + Param[4]: endControlPos (type: Vector2) + Param[5]: thick (type: float) + Param[6]: color (type: Color) +Function 196: DrawLineStrip() (3 input parameters) + Name: DrawLineStrip + Return type: void + Description: Draw lines sequence + Param[1]: points (type: Vector2 *) + Param[2]: pointCount (type: int) + Param[3]: color (type: Color) +Function 197: DrawCircle() (4 input parameters) + Name: DrawCircle + Return type: void + Description: Draw a color-filled circle + Param[1]: centerX (type: int) + Param[2]: centerY (type: int) + Param[3]: radius (type: float) + Param[4]: color (type: Color) +Function 198: DrawCircleSector() (6 input parameters) + Name: DrawCircleSector + Return type: void + Description: Draw a piece of a circle + Param[1]: center (type: Vector2) + Param[2]: radius (type: float) + Param[3]: startAngle (type: float) + Param[4]: endAngle (type: float) + Param[5]: segments (type: int) + Param[6]: color (type: Color) +Function 199: DrawCircleSectorLines() (6 input parameters) + Name: DrawCircleSectorLines + Return type: void + Description: Draw circle sector outline + Param[1]: center (type: Vector2) + Param[2]: radius (type: float) + Param[3]: startAngle (type: float) + Param[4]: endAngle (type: float) + Param[5]: segments (type: int) + Param[6]: color (type: Color) +Function 200: DrawCircleGradient() (5 input parameters) + Name: DrawCircleGradient + Return type: void + Description: Draw a gradient-filled circle + Param[1]: centerX (type: int) + Param[2]: centerY (type: int) + Param[3]: radius (type: float) + Param[4]: color1 (type: Color) + Param[5]: color2 (type: Color) +Function 201: DrawCircleV() (3 input parameters) + Name: DrawCircleV + Return type: void + Description: Draw a color-filled circle (Vector version) + Param[1]: center (type: Vector2) + Param[2]: radius (type: float) + Param[3]: color (type: Color) +Function 202: DrawCircleLines() (4 input parameters) + Name: DrawCircleLines + Return type: void + Description: Draw circle outline + Param[1]: centerX (type: int) + Param[2]: centerY (type: int) + Param[3]: radius (type: float) + Param[4]: color (type: Color) +Function 203: DrawEllipse() (5 input parameters) + Name: DrawEllipse + Return type: void + Description: Draw ellipse + Param[1]: centerX (type: int) + Param[2]: centerY (type: int) + Param[3]: radiusH (type: float) + Param[4]: radiusV (type: float) + Param[5]: color (type: Color) +Function 204: DrawEllipseLines() (5 input parameters) + Name: DrawEllipseLines + Return type: void + Description: Draw ellipse outline + Param[1]: centerX (type: int) + Param[2]: centerY (type: int) + Param[3]: radiusH (type: float) + Param[4]: radiusV (type: float) + Param[5]: color (type: Color) +Function 205: DrawRing() (7 input parameters) + Name: DrawRing + Return type: void + Description: Draw ring + Param[1]: center (type: Vector2) + Param[2]: innerRadius (type: float) + Param[3]: outerRadius (type: float) + Param[4]: startAngle (type: float) + Param[5]: endAngle (type: float) + Param[6]: segments (type: int) + Param[7]: color (type: Color) +Function 206: DrawRingLines() (7 input parameters) + Name: DrawRingLines + Return type: void + Description: Draw ring outline + Param[1]: center (type: Vector2) + Param[2]: innerRadius (type: float) + Param[3]: outerRadius (type: float) + Param[4]: startAngle (type: float) + Param[5]: endAngle (type: float) + Param[6]: segments (type: int) + Param[7]: color (type: Color) +Function 207: DrawRectangle() (5 input parameters) + Name: DrawRectangle + Return type: void + Description: Draw a color-filled rectangle + Param[1]: posX (type: int) + Param[2]: posY (type: int) + Param[3]: width (type: int) + Param[4]: height (type: int) + Param[5]: color (type: Color) +Function 208: DrawRectangleV() (3 input parameters) + Name: DrawRectangleV + Return type: void + Description: Draw a color-filled rectangle (Vector version) + Param[1]: position (type: Vector2) + Param[2]: size (type: Vector2) + Param[3]: color (type: Color) +Function 209: DrawRectangleRec() (2 input parameters) + Name: DrawRectangleRec + Return type: void + Description: Draw a color-filled rectangle + Param[1]: rec (type: Rectangle) + Param[2]: color (type: Color) +Function 210: DrawRectanglePro() (4 input parameters) + Name: DrawRectanglePro + Return type: void + Description: Draw a color-filled rectangle with pro parameters + Param[1]: rec (type: Rectangle) + Param[2]: origin (type: Vector2) + Param[3]: rotation (type: float) + Param[4]: color (type: Color) +Function 211: DrawRectangleGradientV() (6 input parameters) + Name: DrawRectangleGradientV + Return type: void + Description: Draw a vertical-gradient-filled rectangle + Param[1]: posX (type: int) + Param[2]: posY (type: int) + Param[3]: width (type: int) + Param[4]: height (type: int) + Param[5]: color1 (type: Color) + Param[6]: color2 (type: Color) +Function 212: DrawRectangleGradientH() (6 input parameters) + Name: DrawRectangleGradientH + Return type: void + Description: Draw a horizontal-gradient-filled rectangle + Param[1]: posX (type: int) + Param[2]: posY (type: int) + Param[3]: width (type: int) + Param[4]: height (type: int) + Param[5]: color1 (type: Color) + Param[6]: color2 (type: Color) +Function 213: DrawRectangleGradientEx() (5 input parameters) + Name: DrawRectangleGradientEx + Return type: void + Description: Draw a gradient-filled rectangle with custom vertex colors + Param[1]: rec (type: Rectangle) + Param[2]: col1 (type: Color) + Param[3]: col2 (type: Color) + Param[4]: col3 (type: Color) + Param[5]: col4 (type: Color) +Function 214: DrawRectangleLines() (5 input parameters) + Name: DrawRectangleLines + Return type: void + Description: Draw rectangle outline + Param[1]: posX (type: int) + Param[2]: posY (type: int) + Param[3]: width (type: int) + Param[4]: height (type: int) + Param[5]: color (type: Color) +Function 215: DrawRectangleLinesEx() (3 input parameters) + Name: DrawRectangleLinesEx + Return type: void + Description: Draw rectangle outline with extended parameters + Param[1]: rec (type: Rectangle) + Param[2]: lineThick (type: float) + Param[3]: color (type: Color) +Function 216: DrawRectangleRounded() (4 input parameters) + Name: DrawRectangleRounded + Return type: void + Description: Draw rectangle with rounded edges + Param[1]: rec (type: Rectangle) + Param[2]: roundness (type: float) + Param[3]: segments (type: int) + Param[4]: color (type: Color) +Function 217: DrawRectangleRoundedLines() (5 input parameters) + Name: DrawRectangleRoundedLines + Return type: void + Description: Draw rectangle with rounded edges outline + Param[1]: rec (type: Rectangle) + Param[2]: roundness (type: float) + Param[3]: segments (type: int) + Param[4]: lineThick (type: float) + Param[5]: color (type: Color) +Function 218: DrawTriangle() (4 input parameters) + Name: DrawTriangle + Return type: void + Description: Draw a color-filled triangle (vertex in counter-clockwise order!) + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) + Param[3]: v3 (type: Vector2) + Param[4]: color (type: Color) +Function 219: DrawTriangleLines() (4 input parameters) + Name: DrawTriangleLines + Return type: void + Description: Draw triangle outline (vertex in counter-clockwise order!) + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) + Param[3]: v3 (type: Vector2) + Param[4]: color (type: Color) +Function 220: DrawTriangleFan() (3 input parameters) + Name: DrawTriangleFan + Return type: void + Description: Draw a triangle fan defined by points (first vertex is the center) + Param[1]: points (type: Vector2 *) + Param[2]: pointCount (type: int) + Param[3]: color (type: Color) +Function 221: DrawTriangleStrip() (3 input parameters) + Name: DrawTriangleStrip + Return type: void + Description: Draw a triangle strip defined by points + Param[1]: points (type: Vector2 *) + Param[2]: pointCount (type: int) + Param[3]: color (type: Color) +Function 222: DrawPoly() (5 input parameters) + Name: DrawPoly + Return type: void + Description: Draw a regular polygon (Vector version) + Param[1]: center (type: Vector2) + Param[2]: sides (type: int) + Param[3]: radius (type: float) + Param[4]: rotation (type: float) + Param[5]: color (type: Color) +Function 223: DrawPolyLines() (5 input parameters) + Name: DrawPolyLines + Return type: void + Description: Draw a polygon outline of n sides + Param[1]: center (type: Vector2) + Param[2]: sides (type: int) + Param[3]: radius (type: float) + Param[4]: rotation (type: float) + Param[5]: color (type: Color) +Function 224: DrawPolyLinesEx() (6 input parameters) + Name: DrawPolyLinesEx + Return type: void + Description: Draw a polygon outline of n sides with extended parameters + Param[1]: center (type: Vector2) + Param[2]: sides (type: int) + Param[3]: radius (type: float) + Param[4]: rotation (type: float) + Param[5]: lineThick (type: float) + Param[6]: color (type: Color) +Function 225: CheckCollisionRecs() (2 input parameters) + Name: CheckCollisionRecs + Return type: bool + Description: Check collision between two rectangles + Param[1]: rec1 (type: Rectangle) + Param[2]: rec2 (type: Rectangle) +Function 226: CheckCollisionCircles() (4 input parameters) + Name: CheckCollisionCircles + Return type: bool + Description: Check collision between two circles + Param[1]: center1 (type: Vector2) + Param[2]: radius1 (type: float) + Param[3]: center2 (type: Vector2) + Param[4]: radius2 (type: float) +Function 227: CheckCollisionCircleRec() (3 input parameters) + Name: CheckCollisionCircleRec + Return type: bool + Description: Check collision between circle and rectangle + Param[1]: center (type: Vector2) + Param[2]: radius (type: float) + Param[3]: rec (type: Rectangle) +Function 228: CheckCollisionPointRec() (2 input parameters) + Name: CheckCollisionPointRec + Return type: bool + Description: Check if point is inside rectangle + Param[1]: point (type: Vector2) + Param[2]: rec (type: Rectangle) +Function 229: CheckCollisionPointCircle() (3 input parameters) + Name: CheckCollisionPointCircle + Return type: bool + Description: Check if point is inside circle + Param[1]: point (type: Vector2) + Param[2]: center (type: Vector2) + Param[3]: radius (type: float) +Function 230: CheckCollisionPointTriangle() (4 input parameters) + Name: CheckCollisionPointTriangle + Return type: bool + Description: Check if point is inside a triangle + Param[1]: point (type: Vector2) + Param[2]: p1 (type: Vector2) + Param[3]: p2 (type: Vector2) + Param[4]: p3 (type: Vector2) +Function 231: CheckCollisionPointPoly() (3 input parameters) + Name: CheckCollisionPointPoly + Return type: bool + Description: Check if point is within a polygon described by array of vertices + Param[1]: point (type: Vector2) + Param[2]: points (type: Vector2 *) + Param[3]: pointCount (type: int) +Function 232: CheckCollisionLines() (5 input parameters) + Name: CheckCollisionLines + Return type: bool + Description: Check the collision between two lines defined by two points each, returns collision point by reference + Param[1]: startPos1 (type: Vector2) + Param[2]: endPos1 (type: Vector2) + Param[3]: startPos2 (type: Vector2) + Param[4]: endPos2 (type: Vector2) + Param[5]: collisionPoint (type: Vector2 *) +Function 233: CheckCollisionPointLine() (4 input parameters) + Name: CheckCollisionPointLine + Return type: bool + Description: Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] + Param[1]: point (type: Vector2) + Param[2]: p1 (type: Vector2) + Param[3]: p2 (type: Vector2) + Param[4]: threshold (type: int) +Function 234: GetCollisionRec() (2 input parameters) + Name: GetCollisionRec + Return type: Rectangle + Description: Get collision rectangle for two rectangles collision + Param[1]: rec1 (type: Rectangle) + Param[2]: rec2 (type: Rectangle) +Function 235: LoadImage() (1 input parameters) + Name: LoadImage + Return type: Image + Description: Load image from file into CPU memory (RAM) + Param[1]: fileName (type: const char *) +Function 236: LoadImageRaw() (5 input parameters) + Name: LoadImageRaw + Return type: Image + Description: Load image from RAW file data + Param[1]: fileName (type: const char *) + Param[2]: width (type: int) + Param[3]: height (type: int) + Param[4]: format (type: int) + Param[5]: headerSize (type: int) +Function 237: LoadImageAnim() (2 input parameters) + Name: LoadImageAnim + Return type: Image + Description: Load image sequence from file (frames appended to image.data) + Param[1]: fileName (type: const char *) + Param[2]: frames (type: int *) +Function 238: LoadImageFromMemory() (3 input parameters) + Name: LoadImageFromMemory + Return type: Image + Description: Load image from memory buffer, fileType refers to extension: i.e. '.png' + Param[1]: fileType (type: const char *) + Param[2]: fileData (type: const unsigned char *) + Param[3]: dataSize (type: int) +Function 239: LoadImageFromTexture() (1 input parameters) + Name: LoadImageFromTexture + Return type: Image + Description: Load image from GPU texture data + Param[1]: texture (type: Texture2D) +Function 240: LoadImageFromScreen() (0 input parameters) + Name: LoadImageFromScreen + Return type: Image + Description: Load image from screen buffer and (screenshot) + No input parameters +Function 241: IsImageReady() (1 input parameters) + Name: IsImageReady + Return type: bool + Description: Check if an image is ready + Param[1]: image (type: Image) +Function 242: UnloadImage() (1 input parameters) + Name: UnloadImage + Return type: void + Description: Unload image from CPU memory (RAM) + Param[1]: image (type: Image) +Function 243: ExportImage() (2 input parameters) + Name: ExportImage + Return type: bool + Description: Export image data to file, returns true on success + Param[1]: image (type: Image) + Param[2]: fileName (type: const char *) +Function 244: ExportImageAsCode() (2 input parameters) + Name: ExportImageAsCode + Return type: bool + Description: Export image as code file defining an array of bytes, returns true on success + Param[1]: image (type: Image) + Param[2]: fileName (type: const char *) +Function 245: GenImageColor() (3 input parameters) + Name: GenImageColor + Return type: Image + Description: Generate image: plain color + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: color (type: Color) +Function 246: GenImageGradientV() (4 input parameters) + Name: GenImageGradientV + Return type: Image + Description: Generate image: vertical gradient + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: top (type: Color) + Param[4]: bottom (type: Color) +Function 247: GenImageGradientH() (4 input parameters) + Name: GenImageGradientH + Return type: Image + Description: Generate image: horizontal gradient + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: left (type: Color) + Param[4]: right (type: Color) +Function 248: GenImageGradientRadial() (5 input parameters) + Name: GenImageGradientRadial + Return type: Image + Description: Generate image: radial gradient + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: density (type: float) + Param[4]: inner (type: Color) + Param[5]: outer (type: Color) +Function 249: GenImageChecked() (6 input parameters) + Name: GenImageChecked + Return type: Image + Description: Generate image: checked + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: checksX (type: int) + Param[4]: checksY (type: int) + Param[5]: col1 (type: Color) + Param[6]: col2 (type: Color) +Function 250: GenImageWhiteNoise() (3 input parameters) + Name: GenImageWhiteNoise + Return type: Image + Description: Generate image: white noise + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: factor (type: float) +Function 251: GenImagePerlinNoise() (5 input parameters) + Name: GenImagePerlinNoise + Return type: Image + Description: Generate image: perlin noise + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: offsetX (type: int) + Param[4]: offsetY (type: int) + Param[5]: scale (type: float) +Function 252: GenImageCellular() (3 input parameters) + Name: GenImageCellular + Return type: Image + Description: Generate image: cellular algorithm, bigger tileSize means bigger cells + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: tileSize (type: int) +Function 253: GenImageText() (3 input parameters) + Name: GenImageText + Return type: Image + Description: Generate image: grayscale image from text data + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: text (type: const char *) +Function 254: ImageCopy() (1 input parameters) + Name: ImageCopy + Return type: Image + Description: Create an image duplicate (useful for transformations) + Param[1]: image (type: Image) +Function 255: ImageFromImage() (2 input parameters) + Name: ImageFromImage + Return type: Image + Description: Create an image from another image piece + Param[1]: image (type: Image) + Param[2]: rec (type: Rectangle) +Function 256: ImageText() (3 input parameters) + Name: ImageText + Return type: Image + Description: Create an image from text (default font) + Param[1]: text (type: const char *) + Param[2]: fontSize (type: int) + Param[3]: color (type: Color) +Function 257: ImageTextEx() (5 input parameters) + Name: ImageTextEx + Return type: Image + Description: Create an image from text (custom sprite font) + Param[1]: font (type: Font) + Param[2]: text (type: const char *) + Param[3]: fontSize (type: float) + Param[4]: spacing (type: float) + Param[5]: tint (type: Color) +Function 258: ImageFormat() (2 input parameters) + Name: ImageFormat + Return type: void + Description: Convert image data to desired format + Param[1]: image (type: Image *) + Param[2]: newFormat (type: int) +Function 259: ImageToPOT() (2 input parameters) + Name: ImageToPOT + Return type: void + Description: Convert image to POT (power-of-two) + Param[1]: image (type: Image *) + Param[2]: fill (type: Color) +Function 260: ImageCrop() (2 input parameters) + Name: ImageCrop + Return type: void + Description: Crop an image to a defined rectangle + Param[1]: image (type: Image *) + Param[2]: crop (type: Rectangle) +Function 261: ImageAlphaCrop() (2 input parameters) + Name: ImageAlphaCrop + Return type: void + Description: Crop image depending on alpha value + Param[1]: image (type: Image *) + Param[2]: threshold (type: float) +Function 262: ImageAlphaClear() (3 input parameters) + Name: ImageAlphaClear + Return type: void + Description: Clear alpha channel to desired color + Param[1]: image (type: Image *) + Param[2]: color (type: Color) + Param[3]: threshold (type: float) +Function 263: ImageAlphaMask() (2 input parameters) + Name: ImageAlphaMask + Return type: void + Description: Apply alpha mask to image + Param[1]: image (type: Image *) + Param[2]: alphaMask (type: Image) +Function 264: ImageAlphaPremultiply() (1 input parameters) + Name: ImageAlphaPremultiply + Return type: void + Description: Premultiply alpha channel + Param[1]: image (type: Image *) +Function 265: ImageBlurGaussian() (2 input parameters) + Name: ImageBlurGaussian + Return type: void + Description: Apply Gaussian blur using a box blur approximation + Param[1]: image (type: Image *) + Param[2]: blurSize (type: int) +Function 266: ImageResize() (3 input parameters) + Name: ImageResize + Return type: void + Description: Resize image (Bicubic scaling algorithm) + Param[1]: image (type: Image *) + Param[2]: newWidth (type: int) + Param[3]: newHeight (type: int) +Function 267: ImageResizeNN() (3 input parameters) + Name: ImageResizeNN + Return type: void + Description: Resize image (Nearest-Neighbor scaling algorithm) + Param[1]: image (type: Image *) + Param[2]: newWidth (type: int) + Param[3]: newHeight (type: int) +Function 268: ImageResizeCanvas() (6 input parameters) + Name: ImageResizeCanvas + Return type: void + Description: Resize canvas and fill with color + Param[1]: image (type: Image *) + Param[2]: newWidth (type: int) + Param[3]: newHeight (type: int) + Param[4]: offsetX (type: int) + Param[5]: offsetY (type: int) + Param[6]: fill (type: Color) +Function 269: ImageMipmaps() (1 input parameters) + Name: ImageMipmaps + Return type: void + Description: Compute all mipmap levels for a provided image + Param[1]: image (type: Image *) +Function 270: ImageDither() (5 input parameters) + Name: ImageDither + Return type: void + Description: Dither image data to 16bpp or lower (Floyd-Steinberg dithering) + Param[1]: image (type: Image *) + Param[2]: rBpp (type: int) + Param[3]: gBpp (type: int) + Param[4]: bBpp (type: int) + Param[5]: aBpp (type: int) +Function 271: ImageFlipVertical() (1 input parameters) + Name: ImageFlipVertical + Return type: void + Description: Flip image vertically + Param[1]: image (type: Image *) +Function 272: ImageFlipHorizontal() (1 input parameters) + Name: ImageFlipHorizontal + Return type: void + Description: Flip image horizontally + Param[1]: image (type: Image *) +Function 273: ImageRotateCW() (1 input parameters) + Name: ImageRotateCW + Return type: void + Description: Rotate image clockwise 90deg + Param[1]: image (type: Image *) +Function 274: ImageRotateCCW() (1 input parameters) + Name: ImageRotateCCW + Return type: void + Description: Rotate image counter-clockwise 90deg + Param[1]: image (type: Image *) +Function 275: ImageColorTint() (2 input parameters) + Name: ImageColorTint + Return type: void + Description: Modify image color: tint + Param[1]: image (type: Image *) + Param[2]: color (type: Color) +Function 276: ImageColorInvert() (1 input parameters) + Name: ImageColorInvert + Return type: void + Description: Modify image color: invert + Param[1]: image (type: Image *) +Function 277: ImageColorGrayscale() (1 input parameters) + Name: ImageColorGrayscale + Return type: void + Description: Modify image color: grayscale + Param[1]: image (type: Image *) +Function 278: ImageColorContrast() (2 input parameters) + Name: ImageColorContrast + Return type: void + Description: Modify image color: contrast (-100 to 100) + Param[1]: image (type: Image *) + Param[2]: contrast (type: float) +Function 279: ImageColorBrightness() (2 input parameters) + Name: ImageColorBrightness + Return type: void + Description: Modify image color: brightness (-255 to 255) + Param[1]: image (type: Image *) + Param[2]: brightness (type: int) +Function 280: ImageColorReplace() (3 input parameters) + Name: ImageColorReplace + Return type: void + Description: Modify image color: replace color + Param[1]: image (type: Image *) + Param[2]: color (type: Color) + Param[3]: replace (type: Color) +Function 281: LoadImageColors() (1 input parameters) + Name: LoadImageColors + Return type: Color * + Description: Load color data from image as a Color array (RGBA - 32bit) + Param[1]: image (type: Image) +Function 282: LoadImagePalette() (3 input parameters) + Name: LoadImagePalette + Return type: Color * + Description: Load colors palette from image as a Color array (RGBA - 32bit) + Param[1]: image (type: Image) + Param[2]: maxPaletteSize (type: int) + Param[3]: colorCount (type: int *) +Function 283: UnloadImageColors() (1 input parameters) + Name: UnloadImageColors + Return type: void + Description: Unload color data loaded with LoadImageColors() + Param[1]: colors (type: Color *) +Function 284: UnloadImagePalette() (1 input parameters) + Name: UnloadImagePalette + Return type: void + Description: Unload colors palette loaded with LoadImagePalette() + Param[1]: colors (type: Color *) +Function 285: GetImageAlphaBorder() (2 input parameters) + Name: GetImageAlphaBorder + Return type: Rectangle + Description: Get image alpha border rectangle + Param[1]: image (type: Image) + Param[2]: threshold (type: float) +Function 286: GetImageColor() (3 input parameters) + Name: GetImageColor + Return type: Color + Description: Get image pixel color at (x, y) position + Param[1]: image (type: Image) + Param[2]: x (type: int) + Param[3]: y (type: int) +Function 287: ImageClearBackground() (2 input parameters) + Name: ImageClearBackground + Return type: void + Description: Clear image background with given color + Param[1]: dst (type: Image *) + Param[2]: color (type: Color) +Function 288: ImageDrawPixel() (4 input parameters) + Name: ImageDrawPixel + Return type: void + Description: Draw pixel within an image + Param[1]: dst (type: Image *) + Param[2]: posX (type: int) + Param[3]: posY (type: int) + Param[4]: color (type: Color) +Function 289: ImageDrawPixelV() (3 input parameters) + Name: ImageDrawPixelV + Return type: void + Description: Draw pixel within an image (Vector version) + Param[1]: dst (type: Image *) + Param[2]: position (type: Vector2) + Param[3]: color (type: Color) +Function 290: ImageDrawLine() (6 input parameters) + Name: ImageDrawLine + Return type: void + Description: Draw line within an image + Param[1]: dst (type: Image *) + Param[2]: startPosX (type: int) + Param[3]: startPosY (type: int) + Param[4]: endPosX (type: int) + Param[5]: endPosY (type: int) + Param[6]: color (type: Color) +Function 291: ImageDrawLineV() (4 input parameters) + Name: ImageDrawLineV + Return type: void + Description: Draw line within an image (Vector version) + Param[1]: dst (type: Image *) + Param[2]: start (type: Vector2) + Param[3]: end (type: Vector2) + Param[4]: color (type: Color) +Function 292: ImageDrawCircle() (5 input parameters) + Name: ImageDrawCircle + Return type: void + Description: Draw a filled circle within an image + Param[1]: dst (type: Image *) + Param[2]: centerX (type: int) + Param[3]: centerY (type: int) + Param[4]: radius (type: int) + Param[5]: color (type: Color) +Function 293: ImageDrawCircleV() (4 input parameters) + Name: ImageDrawCircleV + Return type: void + Description: Draw a filled circle within an image (Vector version) + Param[1]: dst (type: Image *) + Param[2]: center (type: Vector2) + Param[3]: radius (type: int) + Param[4]: color (type: Color) +Function 294: ImageDrawCircleLines() (5 input parameters) + Name: ImageDrawCircleLines + Return type: void + Description: Draw circle outline within an image + Param[1]: dst (type: Image *) + Param[2]: centerX (type: int) + Param[3]: centerY (type: int) + Param[4]: radius (type: int) + Param[5]: color (type: Color) +Function 295: ImageDrawCircleLinesV() (4 input parameters) + Name: ImageDrawCircleLinesV + Return type: void + Description: Draw circle outline within an image (Vector version) + Param[1]: dst (type: Image *) + Param[2]: center (type: Vector2) + Param[3]: radius (type: int) + Param[4]: color (type: Color) +Function 296: ImageDrawRectangle() (6 input parameters) + Name: ImageDrawRectangle + Return type: void + Description: Draw rectangle within an image + Param[1]: dst (type: Image *) + Param[2]: posX (type: int) + Param[3]: posY (type: int) + Param[4]: width (type: int) + Param[5]: height (type: int) + Param[6]: color (type: Color) +Function 297: ImageDrawRectangleV() (4 input parameters) + Name: ImageDrawRectangleV + Return type: void + Description: Draw rectangle within an image (Vector version) + Param[1]: dst (type: Image *) + Param[2]: position (type: Vector2) + Param[3]: size (type: Vector2) + Param[4]: color (type: Color) +Function 298: ImageDrawRectangleRec() (3 input parameters) + Name: ImageDrawRectangleRec + Return type: void + Description: Draw rectangle within an image + Param[1]: dst (type: Image *) + Param[2]: rec (type: Rectangle) + Param[3]: color (type: Color) +Function 299: ImageDrawRectangleLines() (4 input parameters) + Name: ImageDrawRectangleLines + Return type: void + Description: Draw rectangle lines within an image + Param[1]: dst (type: Image *) + Param[2]: rec (type: Rectangle) + Param[3]: thick (type: int) + Param[4]: color (type: Color) +Function 300: ImageDraw() (5 input parameters) + Name: ImageDraw + Return type: void + Description: Draw a source image within a destination image (tint applied to source) + Param[1]: dst (type: Image *) + Param[2]: src (type: Image) + Param[3]: srcRec (type: Rectangle) + Param[4]: dstRec (type: Rectangle) + Param[5]: tint (type: Color) +Function 301: ImageDrawText() (6 input parameters) + Name: ImageDrawText + Return type: void + Description: Draw text (using default font) within an image (destination) + Param[1]: dst (type: Image *) + Param[2]: text (type: const char *) + Param[3]: posX (type: int) + Param[4]: posY (type: int) + Param[5]: fontSize (type: int) + Param[6]: color (type: Color) +Function 302: ImageDrawTextEx() (7 input parameters) + Name: ImageDrawTextEx + Return type: void + Description: Draw text (custom sprite font) within an image (destination) + Param[1]: dst (type: Image *) + Param[2]: font (type: Font) + Param[3]: text (type: const char *) + Param[4]: position (type: Vector2) + Param[5]: fontSize (type: float) + Param[6]: spacing (type: float) + Param[7]: tint (type: Color) +Function 303: LoadTexture() (1 input parameters) + Name: LoadTexture + Return type: Texture2D + Description: Load texture from file into GPU memory (VRAM) + Param[1]: fileName (type: const char *) +Function 304: LoadTextureFromImage() (1 input parameters) + Name: LoadTextureFromImage + Return type: Texture2D + Description: Load texture from image data + Param[1]: image (type: Image) +Function 305: LoadTextureCubemap() (2 input parameters) + Name: LoadTextureCubemap + Return type: TextureCubemap + Description: Load cubemap from image, multiple image cubemap layouts supported + Param[1]: image (type: Image) + Param[2]: layout (type: int) +Function 306: LoadRenderTexture() (2 input parameters) + Name: LoadRenderTexture + Return type: RenderTexture2D + Description: Load texture for rendering (framebuffer) + Param[1]: width (type: int) + Param[2]: height (type: int) +Function 307: IsTextureReady() (1 input parameters) + Name: IsTextureReady + Return type: bool + Description: Check if a texture is ready + Param[1]: texture (type: Texture2D) +Function 308: UnloadTexture() (1 input parameters) + Name: UnloadTexture + Return type: void + Description: Unload texture from GPU memory (VRAM) + Param[1]: texture (type: Texture2D) +Function 309: IsRenderTextureReady() (1 input parameters) + Name: IsRenderTextureReady + Return type: bool + Description: Check if a render texture is ready + Param[1]: target (type: RenderTexture2D) +Function 310: UnloadRenderTexture() (1 input parameters) + Name: UnloadRenderTexture + Return type: void + Description: Unload render texture from GPU memory (VRAM) + Param[1]: target (type: RenderTexture2D) +Function 311: UpdateTexture() (2 input parameters) + Name: UpdateTexture + Return type: void + Description: Update GPU texture with new data + Param[1]: texture (type: Texture2D) + Param[2]: pixels (type: const void *) +Function 312: UpdateTextureRec() (3 input parameters) + Name: UpdateTextureRec + Return type: void + Description: Update GPU texture rectangle with new data + Param[1]: texture (type: Texture2D) + Param[2]: rec (type: Rectangle) + Param[3]: pixels (type: const void *) +Function 313: GenTextureMipmaps() (1 input parameters) + Name: GenTextureMipmaps + Return type: void + Description: Generate GPU mipmaps for a texture + Param[1]: texture (type: Texture2D *) +Function 314: SetTextureFilter() (2 input parameters) + Name: SetTextureFilter + Return type: void + Description: Set texture scaling filter mode + Param[1]: texture (type: Texture2D) + Param[2]: filter (type: int) +Function 315: SetTextureWrap() (2 input parameters) + Name: SetTextureWrap + Return type: void + Description: Set texture wrapping mode + Param[1]: texture (type: Texture2D) + Param[2]: wrap (type: int) +Function 316: DrawTexture() (4 input parameters) + Name: DrawTexture + Return type: void + Description: Draw a Texture2D + Param[1]: texture (type: Texture2D) + Param[2]: posX (type: int) + Param[3]: posY (type: int) + Param[4]: tint (type: Color) +Function 317: DrawTextureV() (3 input parameters) + Name: DrawTextureV + Return type: void + Description: Draw a Texture2D with position defined as Vector2 + Param[1]: texture (type: Texture2D) + Param[2]: position (type: Vector2) + Param[3]: tint (type: Color) +Function 318: DrawTextureEx() (5 input parameters) + Name: DrawTextureEx + Return type: void + Description: Draw a Texture2D with extended parameters + Param[1]: texture (type: Texture2D) + Param[2]: position (type: Vector2) + Param[3]: rotation (type: float) + Param[4]: scale (type: float) + Param[5]: tint (type: Color) +Function 319: DrawTextureRec() (4 input parameters) + Name: DrawTextureRec + Return type: void + Description: Draw a part of a texture defined by a rectangle + Param[1]: texture (type: Texture2D) + Param[2]: source (type: Rectangle) + Param[3]: position (type: Vector2) + Param[4]: tint (type: Color) +Function 320: DrawTexturePro() (6 input parameters) + Name: DrawTexturePro + Return type: void + Description: Draw a part of a texture defined by a rectangle with 'pro' parameters + Param[1]: texture (type: Texture2D) + Param[2]: source (type: Rectangle) + Param[3]: dest (type: Rectangle) + Param[4]: origin (type: Vector2) + Param[5]: rotation (type: float) + Param[6]: tint (type: Color) +Function 321: DrawTextureNPatch() (6 input parameters) + Name: DrawTextureNPatch + Return type: void + Description: Draws a texture (or part of it) that stretches or shrinks nicely + Param[1]: texture (type: Texture2D) + Param[2]: nPatchInfo (type: NPatchInfo) + Param[3]: dest (type: Rectangle) + Param[4]: origin (type: Vector2) + Param[5]: rotation (type: float) + Param[6]: tint (type: Color) +Function 322: Fade() (2 input parameters) + Name: Fade + Return type: Color + Description: Get color with alpha applied, alpha goes from 0.0f to 1.0f + Param[1]: color (type: Color) + Param[2]: alpha (type: float) +Function 323: ColorToInt() (1 input parameters) + Name: ColorToInt + Return type: int + Description: Get hexadecimal value for a Color + Param[1]: color (type: Color) +Function 324: ColorNormalize() (1 input parameters) + Name: ColorNormalize + Return type: Vector4 + Description: Get Color normalized as float [0..1] + Param[1]: color (type: Color) +Function 325: ColorFromNormalized() (1 input parameters) + Name: ColorFromNormalized + Return type: Color + Description: Get Color from normalized values [0..1] + Param[1]: normalized (type: Vector4) +Function 326: ColorToHSV() (1 input parameters) + Name: ColorToHSV + Return type: Vector3 + Description: Get HSV values for a Color, hue [0..360], saturation/value [0..1] + Param[1]: color (type: Color) +Function 327: ColorFromHSV() (3 input parameters) + Name: ColorFromHSV + Return type: Color + Description: Get a Color from HSV values, hue [0..360], saturation/value [0..1] + Param[1]: hue (type: float) + Param[2]: saturation (type: float) + Param[3]: value (type: float) +Function 328: ColorTint() (2 input parameters) + Name: ColorTint + Return type: Color + Description: Get color multiplied with another color + Param[1]: color (type: Color) + Param[2]: tint (type: Color) +Function 329: ColorBrightness() (2 input parameters) + Name: ColorBrightness + Return type: Color + Description: Get color with brightness correction, brightness factor goes from -1.0f to 1.0f + Param[1]: color (type: Color) + Param[2]: factor (type: float) +Function 330: ColorContrast() (2 input parameters) + Name: ColorContrast + Return type: Color + Description: Get color with contrast correction, contrast values between -1.0f and 1.0f + Param[1]: color (type: Color) + Param[2]: contrast (type: float) +Function 331: ColorAlpha() (2 input parameters) + Name: ColorAlpha + Return type: Color + Description: Get color with alpha applied, alpha goes from 0.0f to 1.0f + Param[1]: color (type: Color) + Param[2]: alpha (type: float) +Function 332: ColorAlphaBlend() (3 input parameters) + Name: ColorAlphaBlend + Return type: Color + Description: Get src alpha-blended into dst color with tint + Param[1]: dst (type: Color) + Param[2]: src (type: Color) + Param[3]: tint (type: Color) +Function 333: GetColor() (1 input parameters) + Name: GetColor + Return type: Color + Description: Get Color structure from hexadecimal value + Param[1]: hexValue (type: unsigned int) +Function 334: GetPixelColor() (2 input parameters) + Name: GetPixelColor + Return type: Color + Description: Get Color from a source pixel pointer of certain format + Param[1]: srcPtr (type: void *) + Param[2]: format (type: int) +Function 335: SetPixelColor() (3 input parameters) + Name: SetPixelColor + Return type: void + Description: Set color formatted into destination pixel pointer + Param[1]: dstPtr (type: void *) + Param[2]: color (type: Color) + Param[3]: format (type: int) +Function 336: GetPixelDataSize() (3 input parameters) + Name: GetPixelDataSize + Return type: int + Description: Get pixel data size in bytes for certain format + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: format (type: int) +Function 337: GetFontDefault() (0 input parameters) + Name: GetFontDefault + Return type: Font + Description: Get the default Font + No input parameters +Function 338: LoadFont() (1 input parameters) + Name: LoadFont + Return type: Font + Description: Load font from file into GPU memory (VRAM) + Param[1]: fileName (type: const char *) +Function 339: LoadFontEx() (4 input parameters) + Name: LoadFontEx + Return type: Font + Description: Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set + Param[1]: fileName (type: const char *) + Param[2]: fontSize (type: int) + Param[3]: fontChars (type: int *) + Param[4]: glyphCount (type: int) +Function 340: LoadFontFromImage() (3 input parameters) + Name: LoadFontFromImage + Return type: Font + Description: Load font from Image (XNA style) + Param[1]: image (type: Image) + Param[2]: key (type: Color) + Param[3]: firstChar (type: int) +Function 341: LoadFontFromMemory() (6 input parameters) + Name: LoadFontFromMemory + Return type: Font + Description: Load font from memory buffer, fileType refers to extension: i.e. '.ttf' + Param[1]: fileType (type: const char *) + Param[2]: fileData (type: const unsigned char *) + Param[3]: dataSize (type: int) + Param[4]: fontSize (type: int) + Param[5]: fontChars (type: int *) + Param[6]: glyphCount (type: int) +Function 342: IsFontReady() (1 input parameters) + Name: IsFontReady + Return type: bool + Description: Check if a font is ready + Param[1]: font (type: Font) +Function 343: LoadFontData() (6 input parameters) + Name: LoadFontData + Return type: GlyphInfo * + Description: Load font data for further use + Param[1]: fileData (type: const unsigned char *) + Param[2]: dataSize (type: int) + Param[3]: fontSize (type: int) + Param[4]: fontChars (type: int *) + Param[5]: glyphCount (type: int) + Param[6]: type (type: int) +Function 344: GenImageFontAtlas() (6 input parameters) + Name: GenImageFontAtlas + Return type: Image + Description: Generate image font atlas using chars info + Param[1]: chars (type: const GlyphInfo *) + Param[2]: recs (type: Rectangle **) + Param[3]: glyphCount (type: int) + Param[4]: fontSize (type: int) + Param[5]: padding (type: int) + Param[6]: packMethod (type: int) +Function 345: UnloadFontData() (2 input parameters) + Name: UnloadFontData + Return type: void + Description: Unload font chars info data (RAM) + Param[1]: chars (type: GlyphInfo *) + Param[2]: glyphCount (type: int) +Function 346: UnloadFont() (1 input parameters) + Name: UnloadFont + Return type: void + Description: Unload font from GPU memory (VRAM) + Param[1]: font (type: Font) +Function 347: ExportFontAsCode() (2 input parameters) + Name: ExportFontAsCode + Return type: bool + Description: Export font as code file, returns true on success + Param[1]: font (type: Font) + Param[2]: fileName (type: const char *) +Function 348: DrawFPS() (2 input parameters) + Name: DrawFPS + Return type: void + Description: Draw current FPS + Param[1]: posX (type: int) + Param[2]: posY (type: int) +Function 349: DrawText() (5 input parameters) + Name: DrawText + Return type: void + Description: Draw text (using default font) + Param[1]: text (type: const char *) + Param[2]: posX (type: int) + Param[3]: posY (type: int) + Param[4]: fontSize (type: int) + Param[5]: color (type: Color) +Function 350: DrawTextEx() (6 input parameters) + Name: DrawTextEx + Return type: void + Description: Draw text using font and additional parameters + Param[1]: font (type: Font) + Param[2]: text (type: const char *) + Param[3]: position (type: Vector2) + Param[4]: fontSize (type: float) + Param[5]: spacing (type: float) + Param[6]: tint (type: Color) +Function 351: DrawTextPro() (8 input parameters) + Name: DrawTextPro + Return type: void + Description: Draw text using Font and pro parameters (rotation) + Param[1]: font (type: Font) + Param[2]: text (type: const char *) + Param[3]: position (type: Vector2) + Param[4]: origin (type: Vector2) + Param[5]: rotation (type: float) + Param[6]: fontSize (type: float) + Param[7]: spacing (type: float) + Param[8]: tint (type: Color) +Function 352: DrawTextCodepoint() (5 input parameters) + Name: DrawTextCodepoint + Return type: void + Description: Draw one character (codepoint) + Param[1]: font (type: Font) + Param[2]: codepoint (type: int) + Param[3]: position (type: Vector2) + Param[4]: fontSize (type: float) + Param[5]: tint (type: Color) +Function 353: DrawTextCodepoints() (7 input parameters) + Name: DrawTextCodepoints + Return type: void + Description: Draw multiple character (codepoint) + Param[1]: font (type: Font) + Param[2]: codepoints (type: const int *) + Param[3]: count (type: int) + Param[4]: position (type: Vector2) + Param[5]: fontSize (type: float) + Param[6]: spacing (type: float) + Param[7]: tint (type: Color) +Function 354: MeasureText() (2 input parameters) + Name: MeasureText + Return type: int + Description: Measure string width for default font + Param[1]: text (type: const char *) + Param[2]: fontSize (type: int) +Function 355: MeasureTextEx() (4 input parameters) + Name: MeasureTextEx + Return type: Vector2 + Description: Measure string size for Font + Param[1]: font (type: Font) + Param[2]: text (type: const char *) + Param[3]: fontSize (type: float) + Param[4]: spacing (type: float) +Function 356: GetGlyphIndex() (2 input parameters) + Name: GetGlyphIndex + Return type: int + Description: Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found + Param[1]: font (type: Font) + Param[2]: codepoint (type: int) +Function 357: GetGlyphInfo() (2 input parameters) + Name: GetGlyphInfo + Return type: GlyphInfo + Description: Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found + Param[1]: font (type: Font) + Param[2]: codepoint (type: int) +Function 358: GetGlyphAtlasRec() (2 input parameters) + Name: GetGlyphAtlasRec + Return type: Rectangle + Description: Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found + Param[1]: font (type: Font) + Param[2]: codepoint (type: int) +Function 359: LoadUTF8() (2 input parameters) + Name: LoadUTF8 + Return type: char * + Description: Load UTF-8 text encoded from codepoints array + Param[1]: codepoints (type: const int *) + Param[2]: length (type: int) +Function 360: UnloadUTF8() (1 input parameters) + Name: UnloadUTF8 + Return type: void + Description: Unload UTF-8 text encoded from codepoints array + Param[1]: text (type: char *) +Function 361: LoadCodepoints() (2 input parameters) + Name: LoadCodepoints + Return type: int * + Description: Load all codepoints from a UTF-8 text string, codepoints count returned by parameter + Param[1]: text (type: const char *) + Param[2]: count (type: int *) +Function 362: UnloadCodepoints() (1 input parameters) + Name: UnloadCodepoints + Return type: void + Description: Unload codepoints data from memory + Param[1]: codepoints (type: int *) +Function 363: GetCodepointCount() (1 input parameters) + Name: GetCodepointCount + Return type: int + Description: Get total number of codepoints in a UTF-8 encoded string + Param[1]: text (type: const char *) +Function 364: GetCodepoint() (2 input parameters) + Name: GetCodepoint + Return type: int + Description: Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + Param[1]: text (type: const char *) + Param[2]: codepointSize (type: int *) +Function 365: GetCodepointNext() (2 input parameters) + Name: GetCodepointNext + Return type: int + Description: Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + Param[1]: text (type: const char *) + Param[2]: codepointSize (type: int *) +Function 366: GetCodepointPrevious() (2 input parameters) + Name: GetCodepointPrevious + Return type: int + Description: Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure + Param[1]: text (type: const char *) + Param[2]: codepointSize (type: int *) +Function 367: CodepointToUTF8() (2 input parameters) + Name: CodepointToUTF8 + Return type: const char * + Description: Encode one codepoint into UTF-8 byte array (array length returned as parameter) + Param[1]: codepoint (type: int) + Param[2]: utf8Size (type: int *) +Function 368: TextCopy() (2 input parameters) + Name: TextCopy + Return type: int + Description: Copy one string to another, returns bytes copied + Param[1]: dst (type: char *) + Param[2]: src (type: const char *) +Function 369: TextIsEqual() (2 input parameters) + Name: TextIsEqual + Return type: bool + Description: Check if two text string are equal + Param[1]: text1 (type: const char *) + Param[2]: text2 (type: const char *) +Function 370: TextLength() (1 input parameters) + Name: TextLength + Return type: unsigned int + Description: Get text length, checks for '\0' ending + Param[1]: text (type: const char *) +Function 371: TextFormat() (2 input parameters) + Name: TextFormat + Return type: const char * + Description: Text formatting with variables (sprintf() style) + Param[1]: text (type: const char *) + Param[2]: args (type: ...) +Function 372: TextSubtext() (3 input parameters) + Name: TextSubtext + Return type: const char * + Description: Get a piece of a text string + Param[1]: text (type: const char *) + Param[2]: position (type: int) + Param[3]: length (type: int) +Function 373: TextReplace() (3 input parameters) + Name: TextReplace + Return type: char * + Description: Replace text string (WARNING: memory must be freed!) + Param[1]: text (type: char *) + Param[2]: replace (type: const char *) + Param[3]: by (type: const char *) +Function 374: TextInsert() (3 input parameters) + Name: TextInsert + Return type: char * + Description: Insert text in a position (WARNING: memory must be freed!) + Param[1]: text (type: const char *) + Param[2]: insert (type: const char *) + Param[3]: position (type: int) +Function 375: TextJoin() (3 input parameters) + Name: TextJoin + Return type: const char * + Description: Join text strings with delimiter + Param[1]: textList (type: const char **) + Param[2]: count (type: int) + Param[3]: delimiter (type: const char *) +Function 376: TextSplit() (3 input parameters) + Name: TextSplit + Return type: const char ** + Description: Split text into multiple strings + Param[1]: text (type: const char *) + Param[2]: delimiter (type: char) + Param[3]: count (type: int *) +Function 377: TextAppend() (3 input parameters) + Name: TextAppend + Return type: void + Description: Append text at specific position and move cursor! + Param[1]: text (type: char *) + Param[2]: append (type: const char *) + Param[3]: position (type: int *) +Function 378: TextFindIndex() (2 input parameters) + Name: TextFindIndex + Return type: int + Description: Find first text occurrence within a string + Param[1]: text (type: const char *) + Param[2]: find (type: const char *) +Function 379: TextToUpper() (1 input parameters) + Name: TextToUpper + Return type: const char * + Description: Get upper case version of provided string + Param[1]: text (type: const char *) +Function 380: TextToLower() (1 input parameters) + Name: TextToLower + Return type: const char * + Description: Get lower case version of provided string + Param[1]: text (type: const char *) +Function 381: TextToPascal() (1 input parameters) + Name: TextToPascal + Return type: const char * + Description: Get Pascal case notation version of provided string + Param[1]: text (type: const char *) +Function 382: TextToInteger() (1 input parameters) + Name: TextToInteger + Return type: int + Description: Get integer value from text (negative values not supported) + Param[1]: text (type: const char *) +Function 383: DrawLine3D() (3 input parameters) + Name: DrawLine3D + Return type: void + Description: Draw a line in 3D world space + Param[1]: startPos (type: Vector3) + Param[2]: endPos (type: Vector3) + Param[3]: color (type: Color) +Function 384: DrawPoint3D() (2 input parameters) + Name: DrawPoint3D + Return type: void + Description: Draw a point in 3D space, actually a small line + Param[1]: position (type: Vector3) + Param[2]: color (type: Color) +Function 385: DrawCircle3D() (5 input parameters) + Name: DrawCircle3D + Return type: void + Description: Draw a circle in 3D world space + Param[1]: center (type: Vector3) + Param[2]: radius (type: float) + Param[3]: rotationAxis (type: Vector3) + Param[4]: rotationAngle (type: float) + Param[5]: color (type: Color) +Function 386: DrawTriangle3D() (4 input parameters) + Name: DrawTriangle3D + Return type: void + Description: Draw a color-filled triangle (vertex in counter-clockwise order!) + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) + Param[3]: v3 (type: Vector3) + Param[4]: color (type: Color) +Function 387: DrawTriangleStrip3D() (3 input parameters) + Name: DrawTriangleStrip3D + Return type: void + Description: Draw a triangle strip defined by points + Param[1]: points (type: Vector3 *) + Param[2]: pointCount (type: int) + Param[3]: color (type: Color) +Function 388: DrawCube() (5 input parameters) + Name: DrawCube + Return type: void + Description: Draw cube + Param[1]: position (type: Vector3) + Param[2]: width (type: float) + Param[3]: height (type: float) + Param[4]: length (type: float) + Param[5]: color (type: Color) +Function 389: DrawCubeV() (3 input parameters) + Name: DrawCubeV + Return type: void + Description: Draw cube (Vector version) + Param[1]: position (type: Vector3) + Param[2]: size (type: Vector3) + Param[3]: color (type: Color) +Function 390: DrawCubeWires() (5 input parameters) + Name: DrawCubeWires + Return type: void + Description: Draw cube wires + Param[1]: position (type: Vector3) + Param[2]: width (type: float) + Param[3]: height (type: float) + Param[4]: length (type: float) + Param[5]: color (type: Color) +Function 391: DrawCubeWiresV() (3 input parameters) + Name: DrawCubeWiresV + Return type: void + Description: Draw cube wires (Vector version) + Param[1]: position (type: Vector3) + Param[2]: size (type: Vector3) + Param[3]: color (type: Color) +Function 392: DrawSphere() (3 input parameters) + Name: DrawSphere + Return type: void + Description: Draw sphere + Param[1]: centerPos (type: Vector3) + Param[2]: radius (type: float) + Param[3]: color (type: Color) +Function 393: DrawSphereEx() (5 input parameters) + Name: DrawSphereEx + Return type: void + Description: Draw sphere with extended parameters + Param[1]: centerPos (type: Vector3) + Param[2]: radius (type: float) + Param[3]: rings (type: int) + Param[4]: slices (type: int) + Param[5]: color (type: Color) +Function 394: DrawSphereWires() (5 input parameters) + Name: DrawSphereWires + Return type: void + Description: Draw sphere wires + Param[1]: centerPos (type: Vector3) + Param[2]: radius (type: float) + Param[3]: rings (type: int) + Param[4]: slices (type: int) + Param[5]: color (type: Color) +Function 395: DrawCylinder() (6 input parameters) + Name: DrawCylinder + Return type: void + Description: Draw a cylinder/cone + Param[1]: position (type: Vector3) + Param[2]: radiusTop (type: float) + Param[3]: radiusBottom (type: float) + Param[4]: height (type: float) + Param[5]: slices (type: int) + Param[6]: color (type: Color) +Function 396: DrawCylinderEx() (6 input parameters) + Name: DrawCylinderEx + Return type: void + Description: Draw a cylinder with base at startPos and top at endPos + Param[1]: startPos (type: Vector3) + Param[2]: endPos (type: Vector3) + Param[3]: startRadius (type: float) + Param[4]: endRadius (type: float) + Param[5]: sides (type: int) + Param[6]: color (type: Color) +Function 397: DrawCylinderWires() (6 input parameters) + Name: DrawCylinderWires + Return type: void + Description: Draw a cylinder/cone wires + Param[1]: position (type: Vector3) + Param[2]: radiusTop (type: float) + Param[3]: radiusBottom (type: float) + Param[4]: height (type: float) + Param[5]: slices (type: int) + Param[6]: color (type: Color) +Function 398: DrawCylinderWiresEx() (6 input parameters) + Name: DrawCylinderWiresEx + Return type: void + Description: Draw a cylinder wires with base at startPos and top at endPos + Param[1]: startPos (type: Vector3) + Param[2]: endPos (type: Vector3) + Param[3]: startRadius (type: float) + Param[4]: endRadius (type: float) + Param[5]: sides (type: int) + Param[6]: color (type: Color) +Function 399: DrawCapsule() (6 input parameters) + Name: DrawCapsule + Return type: void + Description: Draw a capsule with the center of its sphere caps at startPos and endPos + Param[1]: startPos (type: Vector3) + Param[2]: endPos (type: Vector3) + Param[3]: radius (type: float) + Param[4]: slices (type: int) + Param[5]: rings (type: int) + Param[6]: color (type: Color) +Function 400: DrawCapsuleWires() (6 input parameters) + Name: DrawCapsuleWires + Return type: void + Description: Draw capsule wireframe with the center of its sphere caps at startPos and endPos + Param[1]: startPos (type: Vector3) + Param[2]: endPos (type: Vector3) + Param[3]: radius (type: float) + Param[4]: slices (type: int) + Param[5]: rings (type: int) + Param[6]: color (type: Color) +Function 401: DrawPlane() (3 input parameters) + Name: DrawPlane + Return type: void + Description: Draw a plane XZ + Param[1]: centerPos (type: Vector3) + Param[2]: size (type: Vector2) + Param[3]: color (type: Color) +Function 402: DrawRay() (2 input parameters) + Name: DrawRay + Return type: void + Description: Draw a ray line + Param[1]: ray (type: Ray) + Param[2]: color (type: Color) +Function 403: DrawGrid() (2 input parameters) + Name: DrawGrid + Return type: void + Description: Draw a grid (centered at (0, 0, 0)) + Param[1]: slices (type: int) + Param[2]: spacing (type: float) +Function 404: LoadModel() (1 input parameters) + Name: LoadModel + Return type: Model + Description: Load model from files (meshes and materials) + Param[1]: fileName (type: const char *) +Function 405: LoadModelFromMesh() (1 input parameters) + Name: LoadModelFromMesh + Return type: Model + Description: Load model from generated mesh (default material) + Param[1]: mesh (type: Mesh) +Function 406: IsModelReady() (1 input parameters) + Name: IsModelReady + Return type: bool + Description: Check if a model is ready + Param[1]: model (type: Model) +Function 407: UnloadModel() (1 input parameters) + Name: UnloadModel + Return type: void + Description: Unload model (including meshes) from memory (RAM and/or VRAM) + Param[1]: model (type: Model) +Function 408: GetModelBoundingBox() (1 input parameters) + Name: GetModelBoundingBox + Return type: BoundingBox + Description: Compute model bounding box limits (considers all meshes) + Param[1]: model (type: Model) +Function 409: DrawModel() (4 input parameters) + Name: DrawModel + Return type: void + Description: Draw a model (with texture if set) + Param[1]: model (type: Model) + Param[2]: position (type: Vector3) + Param[3]: scale (type: float) + Param[4]: tint (type: Color) +Function 410: DrawModelEx() (6 input parameters) + Name: DrawModelEx + Return type: void + Description: Draw a model with extended parameters + Param[1]: model (type: Model) + Param[2]: position (type: Vector3) + Param[3]: rotationAxis (type: Vector3) + Param[4]: rotationAngle (type: float) + Param[5]: scale (type: Vector3) + Param[6]: tint (type: Color) +Function 411: DrawModelWires() (4 input parameters) + Name: DrawModelWires + Return type: void + Description: Draw a model wires (with texture if set) + Param[1]: model (type: Model) + Param[2]: position (type: Vector3) + Param[3]: scale (type: float) + Param[4]: tint (type: Color) +Function 412: DrawModelWiresEx() (6 input parameters) + Name: DrawModelWiresEx + Return type: void + Description: Draw a model wires (with texture if set) with extended parameters + Param[1]: model (type: Model) + Param[2]: position (type: Vector3) + Param[3]: rotationAxis (type: Vector3) + Param[4]: rotationAngle (type: float) + Param[5]: scale (type: Vector3) + Param[6]: tint (type: Color) +Function 413: DrawBoundingBox() (2 input parameters) + Name: DrawBoundingBox + Return type: void + Description: Draw bounding box (wires) + Param[1]: box (type: BoundingBox) + Param[2]: color (type: Color) +Function 414: DrawBillboard() (5 input parameters) + Name: DrawBillboard + Return type: void + Description: Draw a billboard texture + Param[1]: camera (type: Camera) + Param[2]: texture (type: Texture2D) + Param[3]: position (type: Vector3) + Param[4]: size (type: float) + Param[5]: tint (type: Color) +Function 415: DrawBillboardRec() (6 input parameters) + Name: DrawBillboardRec + Return type: void + Description: Draw a billboard texture defined by source + Param[1]: camera (type: Camera) + Param[2]: texture (type: Texture2D) + Param[3]: source (type: Rectangle) + Param[4]: position (type: Vector3) + Param[5]: size (type: Vector2) + Param[6]: tint (type: Color) +Function 416: DrawBillboardPro() (9 input parameters) + Name: DrawBillboardPro + Return type: void + Description: Draw a billboard texture defined by source and rotation + Param[1]: camera (type: Camera) + Param[2]: texture (type: Texture2D) + Param[3]: source (type: Rectangle) + Param[4]: position (type: Vector3) + Param[5]: up (type: Vector3) + Param[6]: size (type: Vector2) + Param[7]: origin (type: Vector2) + Param[8]: rotation (type: float) + Param[9]: tint (type: Color) +Function 417: UploadMesh() (2 input parameters) + Name: UploadMesh + Return type: void + Description: Upload mesh vertex data in GPU and provide VAO/VBO ids + Param[1]: mesh (type: Mesh *) + Param[2]: dynamic (type: bool) +Function 418: UpdateMeshBuffer() (5 input parameters) + Name: UpdateMeshBuffer + Return type: void + Description: Update mesh vertex data in GPU for a specific buffer index + Param[1]: mesh (type: Mesh) + Param[2]: index (type: int) + Param[3]: data (type: const void *) + Param[4]: dataSize (type: int) + Param[5]: offset (type: int) +Function 419: UnloadMesh() (1 input parameters) + Name: UnloadMesh + Return type: void + Description: Unload mesh data from CPU and GPU + Param[1]: mesh (type: Mesh) +Function 420: DrawMesh() (3 input parameters) + Name: DrawMesh + Return type: void + Description: Draw a 3d mesh with material and transform + Param[1]: mesh (type: Mesh) + Param[2]: material (type: Material) + Param[3]: transform (type: Matrix) +Function 421: DrawMeshInstanced() (4 input parameters) + Name: DrawMeshInstanced + Return type: void + Description: Draw multiple mesh instances with material and different transforms + Param[1]: mesh (type: Mesh) + Param[2]: material (type: Material) + Param[3]: transforms (type: const Matrix *) + Param[4]: instances (type: int) +Function 422: ExportMesh() (2 input parameters) + Name: ExportMesh + Return type: bool + Description: Export mesh data to file, returns true on success + Param[1]: mesh (type: Mesh) + Param[2]: fileName (type: const char *) +Function 423: GetMeshBoundingBox() (1 input parameters) + Name: GetMeshBoundingBox + Return type: BoundingBox + Description: Compute mesh bounding box limits + Param[1]: mesh (type: Mesh) +Function 424: GenMeshTangents() (1 input parameters) + Name: GenMeshTangents + Return type: void + Description: Compute mesh tangents + Param[1]: mesh (type: Mesh *) +Function 425: GenMeshPoly() (2 input parameters) + Name: GenMeshPoly + Return type: Mesh + Description: Generate polygonal mesh + Param[1]: sides (type: int) + Param[2]: radius (type: float) +Function 426: GenMeshPlane() (4 input parameters) + Name: GenMeshPlane + Return type: Mesh + Description: Generate plane mesh (with subdivisions) + Param[1]: width (type: float) + Param[2]: length (type: float) + Param[3]: resX (type: int) + Param[4]: resZ (type: int) +Function 427: GenMeshCube() (3 input parameters) + Name: GenMeshCube + Return type: Mesh + Description: Generate cuboid mesh + Param[1]: width (type: float) + Param[2]: height (type: float) + Param[3]: length (type: float) +Function 428: GenMeshSphere() (3 input parameters) + Name: GenMeshSphere + Return type: Mesh + Description: Generate sphere mesh (standard sphere) + Param[1]: radius (type: float) + Param[2]: rings (type: int) + Param[3]: slices (type: int) +Function 429: GenMeshHemiSphere() (3 input parameters) + Name: GenMeshHemiSphere + Return type: Mesh + Description: Generate half-sphere mesh (no bottom cap) + Param[1]: radius (type: float) + Param[2]: rings (type: int) + Param[3]: slices (type: int) +Function 430: GenMeshCylinder() (3 input parameters) + Name: GenMeshCylinder + Return type: Mesh + Description: Generate cylinder mesh + Param[1]: radius (type: float) + Param[2]: height (type: float) + Param[3]: slices (type: int) +Function 431: GenMeshCone() (3 input parameters) + Name: GenMeshCone + Return type: Mesh + Description: Generate cone/pyramid mesh + Param[1]: radius (type: float) + Param[2]: height (type: float) + Param[3]: slices (type: int) +Function 432: GenMeshTorus() (4 input parameters) + Name: GenMeshTorus + Return type: Mesh + Description: Generate torus mesh + Param[1]: radius (type: float) + Param[2]: size (type: float) + Param[3]: radSeg (type: int) + Param[4]: sides (type: int) +Function 433: GenMeshKnot() (4 input parameters) + Name: GenMeshKnot + Return type: Mesh + Description: Generate trefoil knot mesh + Param[1]: radius (type: float) + Param[2]: size (type: float) + Param[3]: radSeg (type: int) + Param[4]: sides (type: int) +Function 434: GenMeshHeightmap() (2 input parameters) + Name: GenMeshHeightmap + Return type: Mesh + Description: Generate heightmap mesh from image data + Param[1]: heightmap (type: Image) + Param[2]: size (type: Vector3) +Function 435: GenMeshCubicmap() (2 input parameters) + Name: GenMeshCubicmap + Return type: Mesh + Description: Generate cubes-based map mesh from image data + Param[1]: cubicmap (type: Image) + Param[2]: cubeSize (type: Vector3) +Function 436: LoadMaterials() (2 input parameters) + Name: LoadMaterials + Return type: Material * + Description: Load materials from model file + Param[1]: fileName (type: const char *) + Param[2]: materialCount (type: int *) +Function 437: LoadMaterialDefault() (0 input parameters) + Name: LoadMaterialDefault + Return type: Material + Description: Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) + No input parameters +Function 438: IsMaterialReady() (1 input parameters) + Name: IsMaterialReady + Return type: bool + Description: Check if a material is ready + Param[1]: material (type: Material) +Function 439: UnloadMaterial() (1 input parameters) + Name: UnloadMaterial + Return type: void + Description: Unload material from GPU memory (VRAM) + Param[1]: material (type: Material) +Function 440: SetMaterialTexture() (3 input parameters) + Name: SetMaterialTexture + Return type: void + Description: Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) + Param[1]: material (type: Material *) + Param[2]: mapType (type: int) + Param[3]: texture (type: Texture2D) +Function 441: SetModelMeshMaterial() (3 input parameters) + Name: SetModelMeshMaterial + Return type: void + Description: Set material for a mesh + Param[1]: model (type: Model *) + Param[2]: meshId (type: int) + Param[3]: materialId (type: int) +Function 442: LoadModelAnimations() (2 input parameters) + Name: LoadModelAnimations + Return type: ModelAnimation * + Description: Load model animations from file + Param[1]: fileName (type: const char *) + Param[2]: animCount (type: unsigned int *) +Function 443: UpdateModelAnimation() (3 input parameters) + Name: UpdateModelAnimation + Return type: void + Description: Update model animation pose + Param[1]: model (type: Model) + Param[2]: anim (type: ModelAnimation) + Param[3]: frame (type: int) +Function 444: UnloadModelAnimation() (1 input parameters) + Name: UnloadModelAnimation + Return type: void + Description: Unload animation data + Param[1]: anim (type: ModelAnimation) +Function 445: UnloadModelAnimations() (2 input parameters) + Name: UnloadModelAnimations + Return type: void + Description: Unload animation array data + Param[1]: animations (type: ModelAnimation *) + Param[2]: count (type: unsigned int) +Function 446: IsModelAnimationValid() (2 input parameters) + Name: IsModelAnimationValid + Return type: bool + Description: Check model animation skeleton match + Param[1]: model (type: Model) + Param[2]: anim (type: ModelAnimation) +Function 447: CheckCollisionSpheres() (4 input parameters) + Name: CheckCollisionSpheres + Return type: bool + Description: Check collision between two spheres + Param[1]: center1 (type: Vector3) + Param[2]: radius1 (type: float) + Param[3]: center2 (type: Vector3) + Param[4]: radius2 (type: float) +Function 448: CheckCollisionBoxes() (2 input parameters) + Name: CheckCollisionBoxes + Return type: bool + Description: Check collision between two bounding boxes + Param[1]: box1 (type: BoundingBox) + Param[2]: box2 (type: BoundingBox) +Function 449: CheckCollisionBoxSphere() (3 input parameters) + Name: CheckCollisionBoxSphere + Return type: bool + Description: Check collision between box and sphere + Param[1]: box (type: BoundingBox) + Param[2]: center (type: Vector3) + Param[3]: radius (type: float) +Function 450: GetRayCollisionSphere() (3 input parameters) + Name: GetRayCollisionSphere + Return type: RayCollision + Description: Get collision info between ray and sphere + Param[1]: ray (type: Ray) + Param[2]: center (type: Vector3) + Param[3]: radius (type: float) +Function 451: GetRayCollisionBox() (2 input parameters) + Name: GetRayCollisionBox + Return type: RayCollision + Description: Get collision info between ray and box + Param[1]: ray (type: Ray) + Param[2]: box (type: BoundingBox) +Function 452: GetRayCollisionMesh() (3 input parameters) + Name: GetRayCollisionMesh + Return type: RayCollision + Description: Get collision info between ray and mesh + Param[1]: ray (type: Ray) + Param[2]: mesh (type: Mesh) + Param[3]: transform (type: Matrix) +Function 453: GetRayCollisionTriangle() (4 input parameters) + Name: GetRayCollisionTriangle + Return type: RayCollision + Description: Get collision info between ray and triangle + Param[1]: ray (type: Ray) + Param[2]: p1 (type: Vector3) + Param[3]: p2 (type: Vector3) + Param[4]: p3 (type: Vector3) +Function 454: GetRayCollisionQuad() (5 input parameters) + Name: GetRayCollisionQuad + Return type: RayCollision + Description: Get collision info between ray and quad + Param[1]: ray (type: Ray) + Param[2]: p1 (type: Vector3) + Param[3]: p2 (type: Vector3) + Param[4]: p3 (type: Vector3) + Param[5]: p4 (type: Vector3) +Function 455: InitAudioDevice() (0 input parameters) + Name: InitAudioDevice + Return type: void + Description: Initialize audio device and context + No input parameters +Function 456: CloseAudioDevice() (0 input parameters) + Name: CloseAudioDevice + Return type: void + Description: Close the audio device and context + No input parameters +Function 457: IsAudioDeviceReady() (0 input parameters) + Name: IsAudioDeviceReady + Return type: bool + Description: Check if audio device has been initialized successfully + No input parameters +Function 458: SetMasterVolume() (1 input parameters) + Name: SetMasterVolume + Return type: void + Description: Set master volume (listener) + Param[1]: volume (type: float) +Function 459: LoadWave() (1 input parameters) + Name: LoadWave + Return type: Wave + Description: Load wave data from file + Param[1]: fileName (type: const char *) +Function 460: LoadWaveFromMemory() (3 input parameters) + Name: LoadWaveFromMemory + Return type: Wave + Description: Load wave from memory buffer, fileType refers to extension: i.e. '.wav' + Param[1]: fileType (type: const char *) + Param[2]: fileData (type: const unsigned char *) + Param[3]: dataSize (type: int) +Function 461: IsWaveReady() (1 input parameters) + Name: IsWaveReady + Return type: bool + Description: Checks if wave data is ready + Param[1]: wave (type: Wave) +Function 462: LoadSound() (1 input parameters) + Name: LoadSound + Return type: Sound + Description: Load sound from file + Param[1]: fileName (type: const char *) +Function 463: LoadSoundFromWave() (1 input parameters) + Name: LoadSoundFromWave + Return type: Sound + Description: Load sound from wave data + Param[1]: wave (type: Wave) +Function 464: IsSoundReady() (1 input parameters) + Name: IsSoundReady + Return type: bool + Description: Checks if a sound is ready + Param[1]: sound (type: Sound) +Function 465: UpdateSound() (3 input parameters) + Name: UpdateSound + Return type: void + Description: Update sound buffer with new data + Param[1]: sound (type: Sound) + Param[2]: data (type: const void *) + Param[3]: sampleCount (type: int) +Function 466: UnloadWave() (1 input parameters) + Name: UnloadWave + Return type: void + Description: Unload wave data + Param[1]: wave (type: Wave) +Function 467: UnloadSound() (1 input parameters) + Name: UnloadSound + Return type: void + Description: Unload sound + Param[1]: sound (type: Sound) +Function 468: ExportWave() (2 input parameters) + Name: ExportWave + Return type: bool + Description: Export wave data to file, returns true on success + Param[1]: wave (type: Wave) + Param[2]: fileName (type: const char *) +Function 469: ExportWaveAsCode() (2 input parameters) + Name: ExportWaveAsCode + Return type: bool + Description: Export wave sample data to code (.h), returns true on success + Param[1]: wave (type: Wave) + Param[2]: fileName (type: const char *) +Function 470: PlaySound() (1 input parameters) + Name: PlaySound + Return type: void + Description: Play a sound + Param[1]: sound (type: Sound) +Function 471: StopSound() (1 input parameters) + Name: StopSound + Return type: void + Description: Stop playing a sound + Param[1]: sound (type: Sound) +Function 472: PauseSound() (1 input parameters) + Name: PauseSound + Return type: void + Description: Pause a sound + Param[1]: sound (type: Sound) +Function 473: ResumeSound() (1 input parameters) + Name: ResumeSound + Return type: void + Description: Resume a paused sound + Param[1]: sound (type: Sound) +Function 474: IsSoundPlaying() (1 input parameters) + Name: IsSoundPlaying + Return type: bool + Description: Check if a sound is currently playing + Param[1]: sound (type: Sound) +Function 475: SetSoundVolume() (2 input parameters) + Name: SetSoundVolume + Return type: void + Description: Set volume for a sound (1.0 is max level) + Param[1]: sound (type: Sound) + Param[2]: volume (type: float) +Function 476: SetSoundPitch() (2 input parameters) + Name: SetSoundPitch + Return type: void + Description: Set pitch for a sound (1.0 is base level) + Param[1]: sound (type: Sound) + Param[2]: pitch (type: float) +Function 477: SetSoundPan() (2 input parameters) + Name: SetSoundPan + Return type: void + Description: Set pan for a sound (0.5 is center) + Param[1]: sound (type: Sound) + Param[2]: pan (type: float) +Function 478: WaveCopy() (1 input parameters) + Name: WaveCopy + Return type: Wave + Description: Copy a wave to a new wave + Param[1]: wave (type: Wave) +Function 479: WaveCrop() (3 input parameters) + Name: WaveCrop + Return type: void + Description: Crop a wave to defined samples range + Param[1]: wave (type: Wave *) + Param[2]: initSample (type: int) + Param[3]: finalSample (type: int) +Function 480: WaveFormat() (4 input parameters) + Name: WaveFormat + Return type: void + Description: Convert wave data to desired format + Param[1]: wave (type: Wave *) + Param[2]: sampleRate (type: int) + Param[3]: sampleSize (type: int) + Param[4]: channels (type: int) +Function 481: LoadWaveSamples() (1 input parameters) + Name: LoadWaveSamples + Return type: float * + Description: Load samples data from wave as a 32bit float data array + Param[1]: wave (type: Wave) +Function 482: UnloadWaveSamples() (1 input parameters) + Name: UnloadWaveSamples + Return type: void + Description: Unload samples data loaded with LoadWaveSamples() + Param[1]: samples (type: float *) +Function 483: LoadMusicStream() (1 input parameters) + Name: LoadMusicStream + Return type: Music + Description: Load music stream from file + Param[1]: fileName (type: const char *) +Function 484: LoadMusicStreamFromMemory() (3 input parameters) + Name: LoadMusicStreamFromMemory + Return type: Music + Description: Load music stream from data + Param[1]: fileType (type: const char *) + Param[2]: data (type: const unsigned char *) + Param[3]: dataSize (type: int) +Function 485: IsMusicReady() (1 input parameters) + Name: IsMusicReady + Return type: bool + Description: Checks if a music stream is ready + Param[1]: music (type: Music) +Function 486: UnloadMusicStream() (1 input parameters) + Name: UnloadMusicStream + Return type: void + Description: Unload music stream + Param[1]: music (type: Music) +Function 487: PlayMusicStream() (1 input parameters) + Name: PlayMusicStream + Return type: void + Description: Start music playing + Param[1]: music (type: Music) +Function 488: IsMusicStreamPlaying() (1 input parameters) + Name: IsMusicStreamPlaying + Return type: bool + Description: Check if music is playing + Param[1]: music (type: Music) +Function 489: UpdateMusicStream() (1 input parameters) + Name: UpdateMusicStream + Return type: void + Description: Updates buffers for music streaming + Param[1]: music (type: Music) +Function 490: StopMusicStream() (1 input parameters) + Name: StopMusicStream + Return type: void + Description: Stop music playing + Param[1]: music (type: Music) +Function 491: PauseMusicStream() (1 input parameters) + Name: PauseMusicStream + Return type: void + Description: Pause music playing + Param[1]: music (type: Music) +Function 492: ResumeMusicStream() (1 input parameters) + Name: ResumeMusicStream + Return type: void + Description: Resume playing paused music + Param[1]: music (type: Music) +Function 493: SeekMusicStream() (2 input parameters) + Name: SeekMusicStream + Return type: void + Description: Seek music to a position (in seconds) + Param[1]: music (type: Music) + Param[2]: position (type: float) +Function 494: SetMusicVolume() (2 input parameters) + Name: SetMusicVolume + Return type: void + Description: Set volume for music (1.0 is max level) + Param[1]: music (type: Music) + Param[2]: volume (type: float) +Function 495: SetMusicPitch() (2 input parameters) + Name: SetMusicPitch + Return type: void + Description: Set pitch for a music (1.0 is base level) + Param[1]: music (type: Music) + Param[2]: pitch (type: float) +Function 496: SetMusicPan() (2 input parameters) + Name: SetMusicPan + Return type: void + Description: Set pan for a music (0.5 is center) + Param[1]: music (type: Music) + Param[2]: pan (type: float) +Function 497: GetMusicTimeLength() (1 input parameters) + Name: GetMusicTimeLength + Return type: float + Description: Get music time length (in seconds) + Param[1]: music (type: Music) +Function 498: GetMusicTimePlayed() (1 input parameters) + Name: GetMusicTimePlayed + Return type: float + Description: Get current music time played (in seconds) + Param[1]: music (type: Music) +Function 499: LoadAudioStream() (3 input parameters) + Name: LoadAudioStream + Return type: AudioStream + Description: Load audio stream (to stream raw audio pcm data) + Param[1]: sampleRate (type: unsigned int) + Param[2]: sampleSize (type: unsigned int) + Param[3]: channels (type: unsigned int) +Function 500: IsAudioStreamReady() (1 input parameters) + Name: IsAudioStreamReady + Return type: bool + Description: Checks if an audio stream is ready + Param[1]: stream (type: AudioStream) +Function 501: UnloadAudioStream() (1 input parameters) + Name: UnloadAudioStream + Return type: void + Description: Unload audio stream and free memory + Param[1]: stream (type: AudioStream) +Function 502: UpdateAudioStream() (3 input parameters) + Name: UpdateAudioStream + Return type: void + Description: Update audio stream buffers with data + Param[1]: stream (type: AudioStream) + Param[2]: data (type: const void *) + Param[3]: frameCount (type: int) +Function 503: IsAudioStreamProcessed() (1 input parameters) + Name: IsAudioStreamProcessed + Return type: bool + Description: Check if any audio stream buffers requires refill + Param[1]: stream (type: AudioStream) +Function 504: PlayAudioStream() (1 input parameters) + Name: PlayAudioStream + Return type: void + Description: Play audio stream + Param[1]: stream (type: AudioStream) +Function 505: PauseAudioStream() (1 input parameters) + Name: PauseAudioStream + Return type: void + Description: Pause audio stream + Param[1]: stream (type: AudioStream) +Function 506: ResumeAudioStream() (1 input parameters) + Name: ResumeAudioStream + Return type: void + Description: Resume audio stream + Param[1]: stream (type: AudioStream) +Function 507: IsAudioStreamPlaying() (1 input parameters) + Name: IsAudioStreamPlaying + Return type: bool + Description: Check if audio stream is playing + Param[1]: stream (type: AudioStream) +Function 508: StopAudioStream() (1 input parameters) + Name: StopAudioStream + Return type: void + Description: Stop audio stream + Param[1]: stream (type: AudioStream) +Function 509: SetAudioStreamVolume() (2 input parameters) + Name: SetAudioStreamVolume + Return type: void + Description: Set volume for audio stream (1.0 is max level) + Param[1]: stream (type: AudioStream) + Param[2]: volume (type: float) +Function 510: SetAudioStreamPitch() (2 input parameters) + Name: SetAudioStreamPitch + Return type: void + Description: Set pitch for audio stream (1.0 is base level) + Param[1]: stream (type: AudioStream) + Param[2]: pitch (type: float) +Function 511: SetAudioStreamPan() (2 input parameters) + Name: SetAudioStreamPan + Return type: void + Description: Set pan for audio stream (0.5 is centered) + Param[1]: stream (type: AudioStream) + Param[2]: pan (type: float) +Function 512: SetAudioStreamBufferSizeDefault() (1 input parameters) + Name: SetAudioStreamBufferSizeDefault + Return type: void + Description: Default size for new audio streams + Param[1]: size (type: int) +Function 513: SetAudioStreamCallback() (2 input parameters) + Name: SetAudioStreamCallback + Return type: void + Description: Audio thread callback to request new data + Param[1]: stream (type: AudioStream) + Param[2]: callback (type: AudioCallback) +Function 514: AttachAudioStreamProcessor() (2 input parameters) + Name: AttachAudioStreamProcessor + Return type: void + Description: Attach audio stream processor to stream + Param[1]: stream (type: AudioStream) + Param[2]: processor (type: AudioCallback) +Function 515: DetachAudioStreamProcessor() (2 input parameters) + Name: DetachAudioStreamProcessor + Return type: void + Description: Detach audio stream processor from stream + Param[1]: stream (type: AudioStream) + Param[2]: processor (type: AudioCallback) +Function 516: AttachAudioMixedProcessor() (1 input parameters) + Name: AttachAudioMixedProcessor + Return type: void + Description: Attach audio stream processor to the entire audio pipeline + Param[1]: processor (type: AudioCallback) +Function 517: DetachAudioMixedProcessor() (1 input parameters) + Name: DetachAudioMixedProcessor + Return type: void + Description: Detach audio stream processor from the entire audio pipeline + Param[1]: processor (type: AudioCallback) diff --git a/raylib-api/raylib.xml b/raylib-api/raylib.xml new file mode 100644 index 0000000..4530595 --- /dev/null +++ b/raylib-api/raylib.xml @@ -0,0 +1,2796 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/raylib-api/raymath.json b/raylib-api/raymath.json new file mode 100644 index 0000000..86cbd85 --- /dev/null +++ b/raylib-api/raymath.json @@ -0,0 +1,1924 @@ +{ + "defines": [ + { + "name": "RAYMATH_H", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RMAPI", + "type": "UNKNOWN", + "value": "__declspec(dllexport) extern inline", + "description": "We are building raylib as a Win32 shared library (.dll)." + }, + { + "name": "PI", + "type": "FLOAT", + "value": 3.14159265358979323846, + "description": "" + }, + { + "name": "EPSILON", + "type": "FLOAT", + "value": 0.000001, + "description": "" + }, + { + "name": "DEG2RAD", + "type": "FLOAT_MATH", + "value": "(PI/180.0f)", + "description": "" + }, + { + "name": "RAD2DEG", + "type": "FLOAT_MATH", + "value": "(180.0f/PI)", + "description": "" + }, + { + "name": "MatrixToFloat(mat)", + "type": "MACRO", + "value": "(MatrixToFloatV(mat).v)", + "description": "" + }, + { + "name": "Vector3ToFloat(vec)", + "type": "MACRO", + "value": "(Vector3ToFloatV(vec).v)", + "description": "" + }, + { + "name": "RL_VECTOR2_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_VECTOR3_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_VECTOR4_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_QUATERNION_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_MATRIX_TYPE", + "type": "GUARD", + "value": "", + "description": "" + } + ], + "structs": [ + { + "name": "Vector2", + "description": "Vector2 type", + "fields": [ + { + "type": "float", + "name": "x", + "description": "" + }, + { + "type": "float", + "name": "y", + "description": "" + } + ] + }, + { + "name": "Vector3", + "description": "Vector3 type", + "fields": [ + { + "type": "float", + "name": "x", + "description": "" + }, + { + "type": "float", + "name": "y", + "description": "" + }, + { + "type": "float", + "name": "z", + "description": "" + } + ] + }, + { + "name": "Vector4", + "description": "Vector4 type", + "fields": [ + { + "type": "float", + "name": "x", + "description": "" + }, + { + "type": "float", + "name": "y", + "description": "" + }, + { + "type": "float", + "name": "z", + "description": "" + }, + { + "type": "float", + "name": "w", + "description": "" + } + ] + }, + { + "name": "Matrix", + "description": "Matrix type (OpenGL style 4x4 - right handed, column major)", + "fields": [ + { + "type": "float", + "name": "m0", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m4", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m8", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m12", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m1", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m5", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m9", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m13", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m2", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m6", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m10", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m14", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m3", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m7", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m11", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m15", + "description": "Matrix fourth row (4 components)" + } + ] + }, + { + "name": "float3", + "description": "NOTE: Helper types to be used instead of array return types for *ToFloat functions", + "fields": [ + { + "type": "float[3]", + "name": "v", + "description": "" + } + ] + }, + { + "name": "float16", + "description": "", + "fields": [ + { + "type": "float[16]", + "name": "v", + "description": "" + } + ] + } + ], + "aliases": [ + { + "type": "Vector4", + "name": "Quaternion", + "description": "Quaternion type" + } + ], + "enums": [ + ], + "callbacks": [ + ], + "functions": [ + { + "name": "Clamp", + "description": "", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "value" + }, + { + "type": "float", + "name": "min" + }, + { + "type": "float", + "name": "max" + } + ] + }, + { + "name": "Lerp", + "description": "", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "start" + }, + { + "type": "float", + "name": "end" + }, + { + "type": "float", + "name": "amount" + } + ] + }, + { + "name": "Normalize", + "description": "", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "value" + }, + { + "type": "float", + "name": "start" + }, + { + "type": "float", + "name": "end" + } + ] + }, + { + "name": "Remap", + "description": "", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "value" + }, + { + "type": "float", + "name": "inputStart" + }, + { + "type": "float", + "name": "inputEnd" + }, + { + "type": "float", + "name": "outputStart" + }, + { + "type": "float", + "name": "outputEnd" + } + ] + }, + { + "name": "Wrap", + "description": "", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "value" + }, + { + "type": "float", + "name": "min" + }, + { + "type": "float", + "name": "max" + } + ] + }, + { + "name": "FloatEquals", + "description": "", + "returnType": "int", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + } + ] + }, + { + "name": "Vector2Zero", + "description": "", + "returnType": "Vector2" + }, + { + "name": "Vector2One", + "description": "", + "returnType": "Vector2" + }, + { + "name": "Vector2Add", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + } + ] + }, + { + "name": "Vector2AddValue", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "float", + "name": "add" + } + ] + }, + { + "name": "Vector2Subtract", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + } + ] + }, + { + "name": "Vector2SubtractValue", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "float", + "name": "sub" + } + ] + }, + { + "name": "Vector2Length", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector2", + "name": "v" + } + ] + }, + { + "name": "Vector2LengthSqr", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector2", + "name": "v" + } + ] + }, + { + "name": "Vector2DotProduct", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + } + ] + }, + { + "name": "Vector2Distance", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + } + ] + }, + { + "name": "Vector2DistanceSqr", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + } + ] + }, + { + "name": "Vector2Angle", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + } + ] + }, + { + "name": "Vector2LineAngle", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector2", + "name": "start" + }, + { + "type": "Vector2", + "name": "end" + } + ] + }, + { + "name": "Vector2Scale", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "float", + "name": "scale" + } + ] + }, + { + "name": "Vector2Multiply", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + } + ] + }, + { + "name": "Vector2Negate", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + } + ] + }, + { + "name": "Vector2Divide", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + } + ] + }, + { + "name": "Vector2Normalize", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + } + ] + }, + { + "name": "Vector2Transform", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "Vector2Lerp", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v1" + }, + { + "type": "Vector2", + "name": "v2" + }, + { + "type": "float", + "name": "amount" + } + ] + }, + { + "name": "Vector2Reflect", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "Vector2", + "name": "normal" + } + ] + }, + { + "name": "Vector2Rotate", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "float", + "name": "angle" + } + ] + }, + { + "name": "Vector2MoveTowards", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "Vector2", + "name": "target" + }, + { + "type": "float", + "name": "maxDistance" + } + ] + }, + { + "name": "Vector2Invert", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + } + ] + }, + { + "name": "Vector2Clamp", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "Vector2", + "name": "min" + }, + { + "type": "Vector2", + "name": "max" + } + ] + }, + { + "name": "Vector2ClampValue", + "description": "", + "returnType": "Vector2", + "params": [ + { + "type": "Vector2", + "name": "v" + }, + { + "type": "float", + "name": "min" + }, + { + "type": "float", + "name": "max" + } + ] + }, + { + "name": "Vector2Equals", + "description": "", + "returnType": "int", + "params": [ + { + "type": "Vector2", + "name": "p" + }, + { + "type": "Vector2", + "name": "q" + } + ] + }, + { + "name": "Vector3Zero", + "description": "", + "returnType": "Vector3" + }, + { + "name": "Vector3One", + "description": "", + "returnType": "Vector3" + }, + { + "name": "Vector3Add", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3AddValue", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "float", + "name": "add" + } + ] + }, + { + "name": "Vector3Subtract", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3SubtractValue", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "float", + "name": "sub" + } + ] + }, + { + "name": "Vector3Scale", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "float", + "name": "scalar" + } + ] + }, + { + "name": "Vector3Multiply", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3CrossProduct", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3Perpendicular", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + } + ] + }, + { + "name": "Vector3Length", + "description": "", + "returnType": "float", + "params": [ + { + "type": "const Vector3", + "name": "v" + } + ] + }, + { + "name": "Vector3LengthSqr", + "description": "", + "returnType": "float", + "params": [ + { + "type": "const Vector3", + "name": "v" + } + ] + }, + { + "name": "Vector3DotProduct", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3Distance", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3DistanceSqr", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3Angle", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3Negate", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + } + ] + }, + { + "name": "Vector3Divide", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3Normalize", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + } + ] + }, + { + "name": "Vector3OrthoNormalize", + "description": "", + "returnType": "void", + "params": [ + { + "type": "Vector3 *", + "name": "v1" + }, + { + "type": "Vector3 *", + "name": "v2" + } + ] + }, + { + "name": "Vector3Transform", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "Vector3RotateByQuaternion", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "Quaternion", + "name": "q" + } + ] + }, + { + "name": "Vector3RotateByAxisAngle", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "Vector3", + "name": "axis" + }, + { + "type": "float", + "name": "angle" + } + ] + }, + { + "name": "Vector3Lerp", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + }, + { + "type": "float", + "name": "amount" + } + ] + }, + { + "name": "Vector3Reflect", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "Vector3", + "name": "normal" + } + ] + }, + { + "name": "Vector3Min", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3Max", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v1" + }, + { + "type": "Vector3", + "name": "v2" + } + ] + }, + { + "name": "Vector3Barycenter", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "p" + }, + { + "type": "Vector3", + "name": "a" + }, + { + "type": "Vector3", + "name": "b" + }, + { + "type": "Vector3", + "name": "c" + } + ] + }, + { + "name": "Vector3Unproject", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "source" + }, + { + "type": "Matrix", + "name": "projection" + }, + { + "type": "Matrix", + "name": "view" + } + ] + }, + { + "name": "Vector3ToFloatV", + "description": "", + "returnType": "float3", + "params": [ + { + "type": "Vector3", + "name": "v" + } + ] + }, + { + "name": "Vector3Invert", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + } + ] + }, + { + "name": "Vector3Clamp", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "Vector3", + "name": "min" + }, + { + "type": "Vector3", + "name": "max" + } + ] + }, + { + "name": "Vector3ClampValue", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "float", + "name": "min" + }, + { + "type": "float", + "name": "max" + } + ] + }, + { + "name": "Vector3Equals", + "description": "", + "returnType": "int", + "params": [ + { + "type": "Vector3", + "name": "p" + }, + { + "type": "Vector3", + "name": "q" + } + ] + }, + { + "name": "Vector3Refract", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Vector3", + "name": "v" + }, + { + "type": "Vector3", + "name": "n" + }, + { + "type": "float", + "name": "r" + } + ] + }, + { + "name": "MatrixDeterminant", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "MatrixTrace", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "MatrixTranspose", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "MatrixInvert", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "MatrixIdentity", + "description": "", + "returnType": "Matrix" + }, + { + "name": "MatrixAdd", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Matrix", + "name": "left" + }, + { + "type": "Matrix", + "name": "right" + } + ] + }, + { + "name": "MatrixSubtract", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Matrix", + "name": "left" + }, + { + "type": "Matrix", + "name": "right" + } + ] + }, + { + "name": "MatrixMultiply", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Matrix", + "name": "left" + }, + { + "type": "Matrix", + "name": "right" + } + ] + }, + { + "name": "MatrixTranslate", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + } + ] + }, + { + "name": "MatrixRotate", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Vector3", + "name": "axis" + }, + { + "type": "float", + "name": "angle" + } + ] + }, + { + "name": "MatrixRotateX", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "float", + "name": "angle" + } + ] + }, + { + "name": "MatrixRotateY", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "float", + "name": "angle" + } + ] + }, + { + "name": "MatrixRotateZ", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "float", + "name": "angle" + } + ] + }, + { + "name": "MatrixRotateXYZ", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Vector3", + "name": "angle" + } + ] + }, + { + "name": "MatrixRotateZYX", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Vector3", + "name": "angle" + } + ] + }, + { + "name": "MatrixScale", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + } + ] + }, + { + "name": "MatrixFrustum", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "double", + "name": "left" + }, + { + "type": "double", + "name": "right" + }, + { + "type": "double", + "name": "bottom" + }, + { + "type": "double", + "name": "top" + }, + { + "type": "double", + "name": "near" + }, + { + "type": "double", + "name": "far" + } + ] + }, + { + "name": "MatrixPerspective", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "double", + "name": "fovy" + }, + { + "type": "double", + "name": "aspect" + }, + { + "type": "double", + "name": "near" + }, + { + "type": "double", + "name": "far" + } + ] + }, + { + "name": "MatrixOrtho", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "double", + "name": "left" + }, + { + "type": "double", + "name": "right" + }, + { + "type": "double", + "name": "bottom" + }, + { + "type": "double", + "name": "top" + }, + { + "type": "double", + "name": "near" + }, + { + "type": "double", + "name": "far" + } + ] + }, + { + "name": "MatrixLookAt", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Vector3", + "name": "eye" + }, + { + "type": "Vector3", + "name": "target" + }, + { + "type": "Vector3", + "name": "up" + } + ] + }, + { + "name": "MatrixToFloatV", + "description": "", + "returnType": "float16", + "params": [ + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "QuaternionAdd", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q1" + }, + { + "type": "Quaternion", + "name": "q2" + } + ] + }, + { + "name": "QuaternionAddValue", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q" + }, + { + "type": "float", + "name": "add" + } + ] + }, + { + "name": "QuaternionSubtract", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q1" + }, + { + "type": "Quaternion", + "name": "q2" + } + ] + }, + { + "name": "QuaternionSubtractValue", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q" + }, + { + "type": "float", + "name": "sub" + } + ] + }, + { + "name": "QuaternionIdentity", + "description": "", + "returnType": "Quaternion" + }, + { + "name": "QuaternionLength", + "description": "", + "returnType": "float", + "params": [ + { + "type": "Quaternion", + "name": "q" + } + ] + }, + { + "name": "QuaternionNormalize", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q" + } + ] + }, + { + "name": "QuaternionInvert", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q" + } + ] + }, + { + "name": "QuaternionMultiply", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q1" + }, + { + "type": "Quaternion", + "name": "q2" + } + ] + }, + { + "name": "QuaternionScale", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q" + }, + { + "type": "float", + "name": "mul" + } + ] + }, + { + "name": "QuaternionDivide", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q1" + }, + { + "type": "Quaternion", + "name": "q2" + } + ] + }, + { + "name": "QuaternionLerp", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q1" + }, + { + "type": "Quaternion", + "name": "q2" + }, + { + "type": "float", + "name": "amount" + } + ] + }, + { + "name": "QuaternionNlerp", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q1" + }, + { + "type": "Quaternion", + "name": "q2" + }, + { + "type": "float", + "name": "amount" + } + ] + }, + { + "name": "QuaternionSlerp", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q1" + }, + { + "type": "Quaternion", + "name": "q2" + }, + { + "type": "float", + "name": "amount" + } + ] + }, + { + "name": "QuaternionFromVector3ToVector3", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Vector3", + "name": "from" + }, + { + "type": "Vector3", + "name": "to" + } + ] + }, + { + "name": "QuaternionFromMatrix", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "QuaternionToMatrix", + "description": "", + "returnType": "Matrix", + "params": [ + { + "type": "Quaternion", + "name": "q" + } + ] + }, + { + "name": "QuaternionFromAxisAngle", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Vector3", + "name": "axis" + }, + { + "type": "float", + "name": "angle" + } + ] + }, + { + "name": "QuaternionToAxisAngle", + "description": "", + "returnType": "void", + "params": [ + { + "type": "Quaternion", + "name": "q" + }, + { + "type": "Vector3 *", + "name": "outAxis" + }, + { + "type": "float *", + "name": "outAngle" + } + ] + }, + { + "name": "QuaternionFromEuler", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "float", + "name": "pitch" + }, + { + "type": "float", + "name": "yaw" + }, + { + "type": "float", + "name": "roll" + } + ] + }, + { + "name": "QuaternionToEuler", + "description": "", + "returnType": "Vector3", + "params": [ + { + "type": "Quaternion", + "name": "q" + } + ] + }, + { + "name": "QuaternionTransform", + "description": "", + "returnType": "Quaternion", + "params": [ + { + "type": "Quaternion", + "name": "q" + }, + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "QuaternionEquals", + "description": "", + "returnType": "int", + "params": [ + { + "type": "Quaternion", + "name": "p" + }, + { + "type": "Quaternion", + "name": "q" + } + ] + } + ] +} diff --git a/raylib-api/raymath.lua b/raylib-api/raymath.lua new file mode 100644 index 0000000..7f43735 --- /dev/null +++ b/raylib-api/raymath.lua @@ -0,0 +1,1261 @@ +return { + defines = { + { + name = "RAYMATH_H", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RMAPI", + type = "UNKNOWN", + value = "__declspec(dllexport) extern inline", + description = "We are building raylib as a Win32 shared library (.dll)." + }, + { + name = "PI", + type = "FLOAT", + value = 3.14159265358979323846, + description = "" + }, + { + name = "EPSILON", + type = "FLOAT", + value = 0.000001, + description = "" + }, + { + name = "DEG2RAD", + type = "FLOAT_MATH", + value = "(PI/180.0f)", + description = "" + }, + { + name = "RAD2DEG", + type = "FLOAT_MATH", + value = "(180.0f/PI)", + description = "" + }, + { + name = "MatrixToFloat(mat)", + type = "MACRO", + value = "(MatrixToFloatV(mat).v)", + description = "" + }, + { + name = "Vector3ToFloat(vec)", + type = "MACRO", + value = "(Vector3ToFloatV(vec).v)", + description = "" + }, + { + name = "RL_VECTOR2_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_VECTOR3_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_VECTOR4_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_QUATERNION_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_MATRIX_TYPE", + type = "GUARD", + value = "", + description = "" + } + }, + structs = { + { + name = "Vector2", + description = "Vector2 type", + fields = { + { + type = "float", + name = "x", + description = "" + }, + { + type = "float", + name = "y", + description = "" + } + } + }, + { + name = "Vector3", + description = "Vector3 type", + fields = { + { + type = "float", + name = "x", + description = "" + }, + { + type = "float", + name = "y", + description = "" + }, + { + type = "float", + name = "z", + description = "" + } + } + }, + { + name = "Vector4", + description = "Vector4 type", + fields = { + { + type = "float", + name = "x", + description = "" + }, + { + type = "float", + name = "y", + description = "" + }, + { + type = "float", + name = "z", + description = "" + }, + { + type = "float", + name = "w", + description = "" + } + } + }, + { + name = "Matrix", + description = "Matrix type (OpenGL style 4x4 - right handed, column major)", + fields = { + { + type = "float", + name = "m0", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m4", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m8", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m12", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m1", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m5", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m9", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m13", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m2", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m6", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m10", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m14", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m3", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m7", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m11", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m15", + description = "Matrix fourth row (4 components)" + } + } + }, + { + name = "float3", + description = "NOTE: Helper types to be used instead of array return types for *ToFloat functions", + fields = { + { + type = "float[3]", + name = "v", + description = "" + } + } + }, + { + name = "float16", + description = "", + fields = { + { + type = "float[16]", + name = "v", + description = "" + } + } + } + }, + aliases = { + { + type = "Vector4", + name = "Quaternion", + description = "Quaternion type" + } + }, + enums = { + }, + callbacks = { + }, + functions = { + { + name = "Clamp", + description = "", + returnType = "float", + params = { + {type = "float", name = "value"}, + {type = "float", name = "min"}, + {type = "float", name = "max"} + } + }, + { + name = "Lerp", + description = "", + returnType = "float", + params = { + {type = "float", name = "start"}, + {type = "float", name = "end"}, + {type = "float", name = "amount"} + } + }, + { + name = "Normalize", + description = "", + returnType = "float", + params = { + {type = "float", name = "value"}, + {type = "float", name = "start"}, + {type = "float", name = "end"} + } + }, + { + name = "Remap", + description = "", + returnType = "float", + params = { + {type = "float", name = "value"}, + {type = "float", name = "inputStart"}, + {type = "float", name = "inputEnd"}, + {type = "float", name = "outputStart"}, + {type = "float", name = "outputEnd"} + } + }, + { + name = "Wrap", + description = "", + returnType = "float", + params = { + {type = "float", name = "value"}, + {type = "float", name = "min"}, + {type = "float", name = "max"} + } + }, + { + name = "FloatEquals", + description = "", + returnType = "int", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"} + } + }, + { + name = "Vector2Zero", + description = "", + returnType = "Vector2" + }, + { + name = "Vector2One", + description = "", + returnType = "Vector2" + }, + { + name = "Vector2Add", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"} + } + }, + { + name = "Vector2AddValue", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "float", name = "add"} + } + }, + { + name = "Vector2Subtract", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"} + } + }, + { + name = "Vector2SubtractValue", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "float", name = "sub"} + } + }, + { + name = "Vector2Length", + description = "", + returnType = "float", + params = { + {type = "Vector2", name = "v"} + } + }, + { + name = "Vector2LengthSqr", + description = "", + returnType = "float", + params = { + {type = "Vector2", name = "v"} + } + }, + { + name = "Vector2DotProduct", + description = "", + returnType = "float", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"} + } + }, + { + name = "Vector2Distance", + description = "", + returnType = "float", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"} + } + }, + { + name = "Vector2DistanceSqr", + description = "", + returnType = "float", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"} + } + }, + { + name = "Vector2Angle", + description = "", + returnType = "float", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"} + } + }, + { + name = "Vector2LineAngle", + description = "", + returnType = "float", + params = { + {type = "Vector2", name = "start"}, + {type = "Vector2", name = "end"} + } + }, + { + name = "Vector2Scale", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "float", name = "scale"} + } + }, + { + name = "Vector2Multiply", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"} + } + }, + { + name = "Vector2Negate", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"} + } + }, + { + name = "Vector2Divide", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"} + } + }, + { + name = "Vector2Normalize", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"} + } + }, + { + name = "Vector2Transform", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "Matrix", name = "mat"} + } + }, + { + name = "Vector2Lerp", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v1"}, + {type = "Vector2", name = "v2"}, + {type = "float", name = "amount"} + } + }, + { + name = "Vector2Reflect", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "Vector2", name = "normal"} + } + }, + { + name = "Vector2Rotate", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "float", name = "angle"} + } + }, + { + name = "Vector2MoveTowards", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "Vector2", name = "target"}, + {type = "float", name = "maxDistance"} + } + }, + { + name = "Vector2Invert", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"} + } + }, + { + name = "Vector2Clamp", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "Vector2", name = "min"}, + {type = "Vector2", name = "max"} + } + }, + { + name = "Vector2ClampValue", + description = "", + returnType = "Vector2", + params = { + {type = "Vector2", name = "v"}, + {type = "float", name = "min"}, + {type = "float", name = "max"} + } + }, + { + name = "Vector2Equals", + description = "", + returnType = "int", + params = { + {type = "Vector2", name = "p"}, + {type = "Vector2", name = "q"} + } + }, + { + name = "Vector3Zero", + description = "", + returnType = "Vector3" + }, + { + name = "Vector3One", + description = "", + returnType = "Vector3" + }, + { + name = "Vector3Add", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3AddValue", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "float", name = "add"} + } + }, + { + name = "Vector3Subtract", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3SubtractValue", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "float", name = "sub"} + } + }, + { + name = "Vector3Scale", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "float", name = "scalar"} + } + }, + { + name = "Vector3Multiply", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3CrossProduct", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3Perpendicular", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"} + } + }, + { + name = "Vector3Length", + description = "", + returnType = "float", + params = { + {type = "const Vector3", name = "v"} + } + }, + { + name = "Vector3LengthSqr", + description = "", + returnType = "float", + params = { + {type = "const Vector3", name = "v"} + } + }, + { + name = "Vector3DotProduct", + description = "", + returnType = "float", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3Distance", + description = "", + returnType = "float", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3DistanceSqr", + description = "", + returnType = "float", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3Angle", + description = "", + returnType = "float", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3Negate", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"} + } + }, + { + name = "Vector3Divide", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3Normalize", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"} + } + }, + { + name = "Vector3OrthoNormalize", + description = "", + returnType = "void", + params = { + {type = "Vector3 *", name = "v1"}, + {type = "Vector3 *", name = "v2"} + } + }, + { + name = "Vector3Transform", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "Matrix", name = "mat"} + } + }, + { + name = "Vector3RotateByQuaternion", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "Quaternion", name = "q"} + } + }, + { + name = "Vector3RotateByAxisAngle", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "Vector3", name = "axis"}, + {type = "float", name = "angle"} + } + }, + { + name = "Vector3Lerp", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"}, + {type = "float", name = "amount"} + } + }, + { + name = "Vector3Reflect", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "Vector3", name = "normal"} + } + }, + { + name = "Vector3Min", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3Max", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v1"}, + {type = "Vector3", name = "v2"} + } + }, + { + name = "Vector3Barycenter", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "p"}, + {type = "Vector3", name = "a"}, + {type = "Vector3", name = "b"}, + {type = "Vector3", name = "c"} + } + }, + { + name = "Vector3Unproject", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "source"}, + {type = "Matrix", name = "projection"}, + {type = "Matrix", name = "view"} + } + }, + { + name = "Vector3ToFloatV", + description = "", + returnType = "float3", + params = { + {type = "Vector3", name = "v"} + } + }, + { + name = "Vector3Invert", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"} + } + }, + { + name = "Vector3Clamp", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "Vector3", name = "min"}, + {type = "Vector3", name = "max"} + } + }, + { + name = "Vector3ClampValue", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "float", name = "min"}, + {type = "float", name = "max"} + } + }, + { + name = "Vector3Equals", + description = "", + returnType = "int", + params = { + {type = "Vector3", name = "p"}, + {type = "Vector3", name = "q"} + } + }, + { + name = "Vector3Refract", + description = "", + returnType = "Vector3", + params = { + {type = "Vector3", name = "v"}, + {type = "Vector3", name = "n"}, + {type = "float", name = "r"} + } + }, + { + name = "MatrixDeterminant", + description = "", + returnType = "float", + params = { + {type = "Matrix", name = "mat"} + } + }, + { + name = "MatrixTrace", + description = "", + returnType = "float", + params = { + {type = "Matrix", name = "mat"} + } + }, + { + name = "MatrixTranspose", + description = "", + returnType = "Matrix", + params = { + {type = "Matrix", name = "mat"} + } + }, + { + name = "MatrixInvert", + description = "", + returnType = "Matrix", + params = { + {type = "Matrix", name = "mat"} + } + }, + { + name = "MatrixIdentity", + description = "", + returnType = "Matrix" + }, + { + name = "MatrixAdd", + description = "", + returnType = "Matrix", + params = { + {type = "Matrix", name = "left"}, + {type = "Matrix", name = "right"} + } + }, + { + name = "MatrixSubtract", + description = "", + returnType = "Matrix", + params = { + {type = "Matrix", name = "left"}, + {type = "Matrix", name = "right"} + } + }, + { + name = "MatrixMultiply", + description = "", + returnType = "Matrix", + params = { + {type = "Matrix", name = "left"}, + {type = "Matrix", name = "right"} + } + }, + { + name = "MatrixTranslate", + description = "", + returnType = "Matrix", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"} + } + }, + { + name = "MatrixRotate", + description = "", + returnType = "Matrix", + params = { + {type = "Vector3", name = "axis"}, + {type = "float", name = "angle"} + } + }, + { + name = "MatrixRotateX", + description = "", + returnType = "Matrix", + params = { + {type = "float", name = "angle"} + } + }, + { + name = "MatrixRotateY", + description = "", + returnType = "Matrix", + params = { + {type = "float", name = "angle"} + } + }, + { + name = "MatrixRotateZ", + description = "", + returnType = "Matrix", + params = { + {type = "float", name = "angle"} + } + }, + { + name = "MatrixRotateXYZ", + description = "", + returnType = "Matrix", + params = { + {type = "Vector3", name = "angle"} + } + }, + { + name = "MatrixRotateZYX", + description = "", + returnType = "Matrix", + params = { + {type = "Vector3", name = "angle"} + } + }, + { + name = "MatrixScale", + description = "", + returnType = "Matrix", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"} + } + }, + { + name = "MatrixFrustum", + description = "", + returnType = "Matrix", + params = { + {type = "double", name = "left"}, + {type = "double", name = "right"}, + {type = "double", name = "bottom"}, + {type = "double", name = "top"}, + {type = "double", name = "near"}, + {type = "double", name = "far"} + } + }, + { + name = "MatrixPerspective", + description = "", + returnType = "Matrix", + params = { + {type = "double", name = "fovy"}, + {type = "double", name = "aspect"}, + {type = "double", name = "near"}, + {type = "double", name = "far"} + } + }, + { + name = "MatrixOrtho", + description = "", + returnType = "Matrix", + params = { + {type = "double", name = "left"}, + {type = "double", name = "right"}, + {type = "double", name = "bottom"}, + {type = "double", name = "top"}, + {type = "double", name = "near"}, + {type = "double", name = "far"} + } + }, + { + name = "MatrixLookAt", + description = "", + returnType = "Matrix", + params = { + {type = "Vector3", name = "eye"}, + {type = "Vector3", name = "target"}, + {type = "Vector3", name = "up"} + } + }, + { + name = "MatrixToFloatV", + description = "", + returnType = "float16", + params = { + {type = "Matrix", name = "mat"} + } + }, + { + name = "QuaternionAdd", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q1"}, + {type = "Quaternion", name = "q2"} + } + }, + { + name = "QuaternionAddValue", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q"}, + {type = "float", name = "add"} + } + }, + { + name = "QuaternionSubtract", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q1"}, + {type = "Quaternion", name = "q2"} + } + }, + { + name = "QuaternionSubtractValue", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q"}, + {type = "float", name = "sub"} + } + }, + { + name = "QuaternionIdentity", + description = "", + returnType = "Quaternion" + }, + { + name = "QuaternionLength", + description = "", + returnType = "float", + params = { + {type = "Quaternion", name = "q"} + } + }, + { + name = "QuaternionNormalize", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q"} + } + }, + { + name = "QuaternionInvert", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q"} + } + }, + { + name = "QuaternionMultiply", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q1"}, + {type = "Quaternion", name = "q2"} + } + }, + { + name = "QuaternionScale", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q"}, + {type = "float", name = "mul"} + } + }, + { + name = "QuaternionDivide", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q1"}, + {type = "Quaternion", name = "q2"} + } + }, + { + name = "QuaternionLerp", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q1"}, + {type = "Quaternion", name = "q2"}, + {type = "float", name = "amount"} + } + }, + { + name = "QuaternionNlerp", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q1"}, + {type = "Quaternion", name = "q2"}, + {type = "float", name = "amount"} + } + }, + { + name = "QuaternionSlerp", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q1"}, + {type = "Quaternion", name = "q2"}, + {type = "float", name = "amount"} + } + }, + { + name = "QuaternionFromVector3ToVector3", + description = "", + returnType = "Quaternion", + params = { + {type = "Vector3", name = "from"}, + {type = "Vector3", name = "to"} + } + }, + { + name = "QuaternionFromMatrix", + description = "", + returnType = "Quaternion", + params = { + {type = "Matrix", name = "mat"} + } + }, + { + name = "QuaternionToMatrix", + description = "", + returnType = "Matrix", + params = { + {type = "Quaternion", name = "q"} + } + }, + { + name = "QuaternionFromAxisAngle", + description = "", + returnType = "Quaternion", + params = { + {type = "Vector3", name = "axis"}, + {type = "float", name = "angle"} + } + }, + { + name = "QuaternionToAxisAngle", + description = "", + returnType = "void", + params = { + {type = "Quaternion", name = "q"}, + {type = "Vector3 *", name = "outAxis"}, + {type = "float *", name = "outAngle"} + } + }, + { + name = "QuaternionFromEuler", + description = "", + returnType = "Quaternion", + params = { + {type = "float", name = "pitch"}, + {type = "float", name = "yaw"}, + {type = "float", name = "roll"} + } + }, + { + name = "QuaternionToEuler", + description = "", + returnType = "Vector3", + params = { + {type = "Quaternion", name = "q"} + } + }, + { + name = "QuaternionTransform", + description = "", + returnType = "Quaternion", + params = { + {type = "Quaternion", name = "q"}, + {type = "Matrix", name = "mat"} + } + }, + { + name = "QuaternionEquals", + description = "", + returnType = "int", + params = { + {type = "Quaternion", name = "p"}, + {type = "Quaternion", name = "q"} + } + } + } +} diff --git a/raylib-api/raymath.txt b/raylib-api/raymath.txt new file mode 100644 index 0000000..03ac1b5 --- /dev/null +++ b/raylib-api/raymath.txt @@ -0,0 +1,807 @@ + +Defines found: 13 + +Define 001: RAYMATH_H + Name: RAYMATH_H + Type: GUARD + Value: + Description: +Define 002: RMAPI + Name: RMAPI + Type: UNKNOWN + Value: __declspec(dllexport) extern inline + Description: We are building raylib as a Win32 shared library (.dll). +Define 003: PI + Name: PI + Type: FLOAT + Value: 3.14159265358979323846 + Description: +Define 004: EPSILON + Name: EPSILON + Type: FLOAT + Value: 0.000001 + Description: +Define 005: DEG2RAD + Name: DEG2RAD + Type: FLOAT_MATH + Value: (PI/180.0f) + Description: +Define 006: RAD2DEG + Name: RAD2DEG + Type: FLOAT_MATH + Value: (180.0f/PI) + Description: +Define 007: MatrixToFloat(mat) + Name: MatrixToFloat(mat) + Type: MACRO + Value: (MatrixToFloatV(mat).v) + Description: +Define 008: Vector3ToFloat(vec) + Name: Vector3ToFloat(vec) + Type: MACRO + Value: (Vector3ToFloatV(vec).v) + Description: +Define 009: RL_VECTOR2_TYPE + Name: RL_VECTOR2_TYPE + Type: GUARD + Value: + Description: +Define 010: RL_VECTOR3_TYPE + Name: RL_VECTOR3_TYPE + Type: GUARD + Value: + Description: +Define 011: RL_VECTOR4_TYPE + Name: RL_VECTOR4_TYPE + Type: GUARD + Value: + Description: +Define 012: RL_QUATERNION_TYPE + Name: RL_QUATERNION_TYPE + Type: GUARD + Value: + Description: +Define 013: RL_MATRIX_TYPE + Name: RL_MATRIX_TYPE + Type: GUARD + Value: + Description: + +Structures found: 6 + +Struct 01: Vector2 (2 fields) + Name: Vector2 + Description: Vector2 type + Field[1]: float x + Field[2]: float y +Struct 02: Vector3 (3 fields) + Name: Vector3 + Description: Vector3 type + Field[1]: float x + Field[2]: float y + Field[3]: float z +Struct 03: Vector4 (4 fields) + Name: Vector4 + Description: Vector4 type + Field[1]: float x + Field[2]: float y + Field[3]: float z + Field[4]: float w +Struct 04: Matrix (16 fields) + Name: Matrix + Description: Matrix type (OpenGL style 4x4 - right handed, column major) + Field[1]: float m0 // Matrix first row (4 components) + Field[2]: float m4 // Matrix first row (4 components) + Field[3]: float m8 // Matrix first row (4 components) + Field[4]: float m12 // Matrix first row (4 components) + Field[5]: float m1 // Matrix second row (4 components) + Field[6]: float m5 // Matrix second row (4 components) + Field[7]: float m9 // Matrix second row (4 components) + Field[8]: float m13 // Matrix second row (4 components) + Field[9]: float m2 // Matrix third row (4 components) + Field[10]: float m6 // Matrix third row (4 components) + Field[11]: float m10 // Matrix third row (4 components) + Field[12]: float m14 // Matrix third row (4 components) + Field[13]: float m3 // Matrix fourth row (4 components) + Field[14]: float m7 // Matrix fourth row (4 components) + Field[15]: float m11 // Matrix fourth row (4 components) + Field[16]: float m15 // Matrix fourth row (4 components) +Struct 05: float3 (1 fields) + Name: float3 + Description: NOTE: Helper types to be used instead of array return types for *ToFloat functions + Field[1]: float[3] v +Struct 06: float16 (1 fields) + Name: float16 + Description: + Field[1]: float[16] v + +Aliases found: 1 + +Alias 001: Quaternion + Type: Vector4 + Name: Quaternion + Description: Quaternion type + +Enums found: 0 + + +Callbacks found: 0 + + +Functions found: 112 + +Function 001: Clamp() (3 input parameters) + Name: Clamp + Return type: float + Description: + Param[1]: value (type: float) + Param[2]: min (type: float) + Param[3]: max (type: float) +Function 002: Lerp() (3 input parameters) + Name: Lerp + Return type: float + Description: + Param[1]: start (type: float) + Param[2]: end (type: float) + Param[3]: amount (type: float) +Function 003: Normalize() (3 input parameters) + Name: Normalize + Return type: float + Description: + Param[1]: value (type: float) + Param[2]: start (type: float) + Param[3]: end (type: float) +Function 004: Remap() (5 input parameters) + Name: Remap + Return type: float + Description: + Param[1]: value (type: float) + Param[2]: inputStart (type: float) + Param[3]: inputEnd (type: float) + Param[4]: outputStart (type: float) + Param[5]: outputEnd (type: float) +Function 005: Wrap() (3 input parameters) + Name: Wrap + Return type: float + Description: + Param[1]: value (type: float) + Param[2]: min (type: float) + Param[3]: max (type: float) +Function 006: FloatEquals() (2 input parameters) + Name: FloatEquals + Return type: int + Description: + Param[1]: x (type: float) + Param[2]: y (type: float) +Function 007: Vector2Zero() (0 input parameters) + Name: Vector2Zero + Return type: Vector2 + Description: + No input parameters +Function 008: Vector2One() (0 input parameters) + Name: Vector2One + Return type: Vector2 + Description: + No input parameters +Function 009: Vector2Add() (2 input parameters) + Name: Vector2Add + Return type: Vector2 + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) +Function 010: Vector2AddValue() (2 input parameters) + Name: Vector2AddValue + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: add (type: float) +Function 011: Vector2Subtract() (2 input parameters) + Name: Vector2Subtract + Return type: Vector2 + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) +Function 012: Vector2SubtractValue() (2 input parameters) + Name: Vector2SubtractValue + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: sub (type: float) +Function 013: Vector2Length() (1 input parameters) + Name: Vector2Length + Return type: float + Description: + Param[1]: v (type: Vector2) +Function 014: Vector2LengthSqr() (1 input parameters) + Name: Vector2LengthSqr + Return type: float + Description: + Param[1]: v (type: Vector2) +Function 015: Vector2DotProduct() (2 input parameters) + Name: Vector2DotProduct + Return type: float + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) +Function 016: Vector2Distance() (2 input parameters) + Name: Vector2Distance + Return type: float + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) +Function 017: Vector2DistanceSqr() (2 input parameters) + Name: Vector2DistanceSqr + Return type: float + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) +Function 018: Vector2Angle() (2 input parameters) + Name: Vector2Angle + Return type: float + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) +Function 019: Vector2LineAngle() (2 input parameters) + Name: Vector2LineAngle + Return type: float + Description: + Param[1]: start (type: Vector2) + Param[2]: end (type: Vector2) +Function 020: Vector2Scale() (2 input parameters) + Name: Vector2Scale + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: scale (type: float) +Function 021: Vector2Multiply() (2 input parameters) + Name: Vector2Multiply + Return type: Vector2 + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) +Function 022: Vector2Negate() (1 input parameters) + Name: Vector2Negate + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) +Function 023: Vector2Divide() (2 input parameters) + Name: Vector2Divide + Return type: Vector2 + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) +Function 024: Vector2Normalize() (1 input parameters) + Name: Vector2Normalize + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) +Function 025: Vector2Transform() (2 input parameters) + Name: Vector2Transform + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: mat (type: Matrix) +Function 026: Vector2Lerp() (3 input parameters) + Name: Vector2Lerp + Return type: Vector2 + Description: + Param[1]: v1 (type: Vector2) + Param[2]: v2 (type: Vector2) + Param[3]: amount (type: float) +Function 027: Vector2Reflect() (2 input parameters) + Name: Vector2Reflect + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: normal (type: Vector2) +Function 028: Vector2Rotate() (2 input parameters) + Name: Vector2Rotate + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: angle (type: float) +Function 029: Vector2MoveTowards() (3 input parameters) + Name: Vector2MoveTowards + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: target (type: Vector2) + Param[3]: maxDistance (type: float) +Function 030: Vector2Invert() (1 input parameters) + Name: Vector2Invert + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) +Function 031: Vector2Clamp() (3 input parameters) + Name: Vector2Clamp + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: min (type: Vector2) + Param[3]: max (type: Vector2) +Function 032: Vector2ClampValue() (3 input parameters) + Name: Vector2ClampValue + Return type: Vector2 + Description: + Param[1]: v (type: Vector2) + Param[2]: min (type: float) + Param[3]: max (type: float) +Function 033: Vector2Equals() (2 input parameters) + Name: Vector2Equals + Return type: int + Description: + Param[1]: p (type: Vector2) + Param[2]: q (type: Vector2) +Function 034: Vector3Zero() (0 input parameters) + Name: Vector3Zero + Return type: Vector3 + Description: + No input parameters +Function 035: Vector3One() (0 input parameters) + Name: Vector3One + Return type: Vector3 + Description: + No input parameters +Function 036: Vector3Add() (2 input parameters) + Name: Vector3Add + Return type: Vector3 + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 037: Vector3AddValue() (2 input parameters) + Name: Vector3AddValue + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: add (type: float) +Function 038: Vector3Subtract() (2 input parameters) + Name: Vector3Subtract + Return type: Vector3 + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 039: Vector3SubtractValue() (2 input parameters) + Name: Vector3SubtractValue + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: sub (type: float) +Function 040: Vector3Scale() (2 input parameters) + Name: Vector3Scale + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: scalar (type: float) +Function 041: Vector3Multiply() (2 input parameters) + Name: Vector3Multiply + Return type: Vector3 + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 042: Vector3CrossProduct() (2 input parameters) + Name: Vector3CrossProduct + Return type: Vector3 + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 043: Vector3Perpendicular() (1 input parameters) + Name: Vector3Perpendicular + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) +Function 044: Vector3Length() (1 input parameters) + Name: Vector3Length + Return type: float + Description: + Param[1]: v (type: const Vector3) +Function 045: Vector3LengthSqr() (1 input parameters) + Name: Vector3LengthSqr + Return type: float + Description: + Param[1]: v (type: const Vector3) +Function 046: Vector3DotProduct() (2 input parameters) + Name: Vector3DotProduct + Return type: float + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 047: Vector3Distance() (2 input parameters) + Name: Vector3Distance + Return type: float + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 048: Vector3DistanceSqr() (2 input parameters) + Name: Vector3DistanceSqr + Return type: float + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 049: Vector3Angle() (2 input parameters) + Name: Vector3Angle + Return type: float + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 050: Vector3Negate() (1 input parameters) + Name: Vector3Negate + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) +Function 051: Vector3Divide() (2 input parameters) + Name: Vector3Divide + Return type: Vector3 + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 052: Vector3Normalize() (1 input parameters) + Name: Vector3Normalize + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) +Function 053: Vector3OrthoNormalize() (2 input parameters) + Name: Vector3OrthoNormalize + Return type: void + Description: + Param[1]: v1 (type: Vector3 *) + Param[2]: v2 (type: Vector3 *) +Function 054: Vector3Transform() (2 input parameters) + Name: Vector3Transform + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: mat (type: Matrix) +Function 055: Vector3RotateByQuaternion() (2 input parameters) + Name: Vector3RotateByQuaternion + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: q (type: Quaternion) +Function 056: Vector3RotateByAxisAngle() (3 input parameters) + Name: Vector3RotateByAxisAngle + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: axis (type: Vector3) + Param[3]: angle (type: float) +Function 057: Vector3Lerp() (3 input parameters) + Name: Vector3Lerp + Return type: Vector3 + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) + Param[3]: amount (type: float) +Function 058: Vector3Reflect() (2 input parameters) + Name: Vector3Reflect + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: normal (type: Vector3) +Function 059: Vector3Min() (2 input parameters) + Name: Vector3Min + Return type: Vector3 + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 060: Vector3Max() (2 input parameters) + Name: Vector3Max + Return type: Vector3 + Description: + Param[1]: v1 (type: Vector3) + Param[2]: v2 (type: Vector3) +Function 061: Vector3Barycenter() (4 input parameters) + Name: Vector3Barycenter + Return type: Vector3 + Description: + Param[1]: p (type: Vector3) + Param[2]: a (type: Vector3) + Param[3]: b (type: Vector3) + Param[4]: c (type: Vector3) +Function 062: Vector3Unproject() (3 input parameters) + Name: Vector3Unproject + Return type: Vector3 + Description: + Param[1]: source (type: Vector3) + Param[2]: projection (type: Matrix) + Param[3]: view (type: Matrix) +Function 063: Vector3ToFloatV() (1 input parameters) + Name: Vector3ToFloatV + Return type: float3 + Description: + Param[1]: v (type: Vector3) +Function 064: Vector3Invert() (1 input parameters) + Name: Vector3Invert + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) +Function 065: Vector3Clamp() (3 input parameters) + Name: Vector3Clamp + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: min (type: Vector3) + Param[3]: max (type: Vector3) +Function 066: Vector3ClampValue() (3 input parameters) + Name: Vector3ClampValue + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: min (type: float) + Param[3]: max (type: float) +Function 067: Vector3Equals() (2 input parameters) + Name: Vector3Equals + Return type: int + Description: + Param[1]: p (type: Vector3) + Param[2]: q (type: Vector3) +Function 068: Vector3Refract() (3 input parameters) + Name: Vector3Refract + Return type: Vector3 + Description: + Param[1]: v (type: Vector3) + Param[2]: n (type: Vector3) + Param[3]: r (type: float) +Function 069: MatrixDeterminant() (1 input parameters) + Name: MatrixDeterminant + Return type: float + Description: + Param[1]: mat (type: Matrix) +Function 070: MatrixTrace() (1 input parameters) + Name: MatrixTrace + Return type: float + Description: + Param[1]: mat (type: Matrix) +Function 071: MatrixTranspose() (1 input parameters) + Name: MatrixTranspose + Return type: Matrix + Description: + Param[1]: mat (type: Matrix) +Function 072: MatrixInvert() (1 input parameters) + Name: MatrixInvert + Return type: Matrix + Description: + Param[1]: mat (type: Matrix) +Function 073: MatrixIdentity() (0 input parameters) + Name: MatrixIdentity + Return type: Matrix + Description: + No input parameters +Function 074: MatrixAdd() (2 input parameters) + Name: MatrixAdd + Return type: Matrix + Description: + Param[1]: left (type: Matrix) + Param[2]: right (type: Matrix) +Function 075: MatrixSubtract() (2 input parameters) + Name: MatrixSubtract + Return type: Matrix + Description: + Param[1]: left (type: Matrix) + Param[2]: right (type: Matrix) +Function 076: MatrixMultiply() (2 input parameters) + Name: MatrixMultiply + Return type: Matrix + Description: + Param[1]: left (type: Matrix) + Param[2]: right (type: Matrix) +Function 077: MatrixTranslate() (3 input parameters) + Name: MatrixTranslate + Return type: Matrix + Description: + Param[1]: x (type: float) + Param[2]: y (type: float) + Param[3]: z (type: float) +Function 078: MatrixRotate() (2 input parameters) + Name: MatrixRotate + Return type: Matrix + Description: + Param[1]: axis (type: Vector3) + Param[2]: angle (type: float) +Function 079: MatrixRotateX() (1 input parameters) + Name: MatrixRotateX + Return type: Matrix + Description: + Param[1]: angle (type: float) +Function 080: MatrixRotateY() (1 input parameters) + Name: MatrixRotateY + Return type: Matrix + Description: + Param[1]: angle (type: float) +Function 081: MatrixRotateZ() (1 input parameters) + Name: MatrixRotateZ + Return type: Matrix + Description: + Param[1]: angle (type: float) +Function 082: MatrixRotateXYZ() (1 input parameters) + Name: MatrixRotateXYZ + Return type: Matrix + Description: + Param[1]: angle (type: Vector3) +Function 083: MatrixRotateZYX() (1 input parameters) + Name: MatrixRotateZYX + Return type: Matrix + Description: + Param[1]: angle (type: Vector3) +Function 084: MatrixScale() (3 input parameters) + Name: MatrixScale + Return type: Matrix + Description: + Param[1]: x (type: float) + Param[2]: y (type: float) + Param[3]: z (type: float) +Function 085: MatrixFrustum() (6 input parameters) + Name: MatrixFrustum + Return type: Matrix + Description: + Param[1]: left (type: double) + Param[2]: right (type: double) + Param[3]: bottom (type: double) + Param[4]: top (type: double) + Param[5]: near (type: double) + Param[6]: far (type: double) +Function 086: MatrixPerspective() (4 input parameters) + Name: MatrixPerspective + Return type: Matrix + Description: + Param[1]: fovy (type: double) + Param[2]: aspect (type: double) + Param[3]: near (type: double) + Param[4]: far (type: double) +Function 087: MatrixOrtho() (6 input parameters) + Name: MatrixOrtho + Return type: Matrix + Description: + Param[1]: left (type: double) + Param[2]: right (type: double) + Param[3]: bottom (type: double) + Param[4]: top (type: double) + Param[5]: near (type: double) + Param[6]: far (type: double) +Function 088: MatrixLookAt() (3 input parameters) + Name: MatrixLookAt + Return type: Matrix + Description: + Param[1]: eye (type: Vector3) + Param[2]: target (type: Vector3) + Param[3]: up (type: Vector3) +Function 089: MatrixToFloatV() (1 input parameters) + Name: MatrixToFloatV + Return type: float16 + Description: + Param[1]: mat (type: Matrix) +Function 090: QuaternionAdd() (2 input parameters) + Name: QuaternionAdd + Return type: Quaternion + Description: + Param[1]: q1 (type: Quaternion) + Param[2]: q2 (type: Quaternion) +Function 091: QuaternionAddValue() (2 input parameters) + Name: QuaternionAddValue + Return type: Quaternion + Description: + Param[1]: q (type: Quaternion) + Param[2]: add (type: float) +Function 092: QuaternionSubtract() (2 input parameters) + Name: QuaternionSubtract + Return type: Quaternion + Description: + Param[1]: q1 (type: Quaternion) + Param[2]: q2 (type: Quaternion) +Function 093: QuaternionSubtractValue() (2 input parameters) + Name: QuaternionSubtractValue + Return type: Quaternion + Description: + Param[1]: q (type: Quaternion) + Param[2]: sub (type: float) +Function 094: QuaternionIdentity() (0 input parameters) + Name: QuaternionIdentity + Return type: Quaternion + Description: + No input parameters +Function 095: QuaternionLength() (1 input parameters) + Name: QuaternionLength + Return type: float + Description: + Param[1]: q (type: Quaternion) +Function 096: QuaternionNormalize() (1 input parameters) + Name: QuaternionNormalize + Return type: Quaternion + Description: + Param[1]: q (type: Quaternion) +Function 097: QuaternionInvert() (1 input parameters) + Name: QuaternionInvert + Return type: Quaternion + Description: + Param[1]: q (type: Quaternion) +Function 098: QuaternionMultiply() (2 input parameters) + Name: QuaternionMultiply + Return type: Quaternion + Description: + Param[1]: q1 (type: Quaternion) + Param[2]: q2 (type: Quaternion) +Function 099: QuaternionScale() (2 input parameters) + Name: QuaternionScale + Return type: Quaternion + Description: + Param[1]: q (type: Quaternion) + Param[2]: mul (type: float) +Function 100: QuaternionDivide() (2 input parameters) + Name: QuaternionDivide + Return type: Quaternion + Description: + Param[1]: q1 (type: Quaternion) + Param[2]: q2 (type: Quaternion) +Function 101: QuaternionLerp() (3 input parameters) + Name: QuaternionLerp + Return type: Quaternion + Description: + Param[1]: q1 (type: Quaternion) + Param[2]: q2 (type: Quaternion) + Param[3]: amount (type: float) +Function 102: QuaternionNlerp() (3 input parameters) + Name: QuaternionNlerp + Return type: Quaternion + Description: + Param[1]: q1 (type: Quaternion) + Param[2]: q2 (type: Quaternion) + Param[3]: amount (type: float) +Function 103: QuaternionSlerp() (3 input parameters) + Name: QuaternionSlerp + Return type: Quaternion + Description: + Param[1]: q1 (type: Quaternion) + Param[2]: q2 (type: Quaternion) + Param[3]: amount (type: float) +Function 104: QuaternionFromVector3ToVector3() (2 input parameters) + Name: QuaternionFromVector3ToVector3 + Return type: Quaternion + Description: + Param[1]: from (type: Vector3) + Param[2]: to (type: Vector3) +Function 105: QuaternionFromMatrix() (1 input parameters) + Name: QuaternionFromMatrix + Return type: Quaternion + Description: + Param[1]: mat (type: Matrix) +Function 106: QuaternionToMatrix() (1 input parameters) + Name: QuaternionToMatrix + Return type: Matrix + Description: + Param[1]: q (type: Quaternion) +Function 107: QuaternionFromAxisAngle() (2 input parameters) + Name: QuaternionFromAxisAngle + Return type: Quaternion + Description: + Param[1]: axis (type: Vector3) + Param[2]: angle (type: float) +Function 108: QuaternionToAxisAngle() (3 input parameters) + Name: QuaternionToAxisAngle + Return type: void + Description: + Param[1]: q (type: Quaternion) + Param[2]: outAxis (type: Vector3 *) + Param[3]: outAngle (type: float *) +Function 109: QuaternionFromEuler() (3 input parameters) + Name: QuaternionFromEuler + Return type: Quaternion + Description: + Param[1]: pitch (type: float) + Param[2]: yaw (type: float) + Param[3]: roll (type: float) +Function 110: QuaternionToEuler() (1 input parameters) + Name: QuaternionToEuler + Return type: Vector3 + Description: + Param[1]: q (type: Quaternion) +Function 111: QuaternionTransform() (2 input parameters) + Name: QuaternionTransform + Return type: Quaternion + Description: + Param[1]: q (type: Quaternion) + Param[2]: mat (type: Matrix) +Function 112: QuaternionEquals() (2 input parameters) + Name: QuaternionEquals + Return type: int + Description: + Param[1]: p (type: Quaternion) + Param[2]: q (type: Quaternion) diff --git a/raylib-api/raymath.xml b/raylib-api/raymath.xml new file mode 100644 index 0000000..e7c9c78 --- /dev/null +++ b/raylib-api/raymath.xml @@ -0,0 +1,513 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/raylib-api/reasings.json b/raylib-api/reasings.json new file mode 100644 index 0000000..82a5335 --- /dev/null +++ b/raylib-api/reasings.json @@ -0,0 +1,682 @@ +{ + "defines": [ + { + "name": "REASINGS_H", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "REASINGS_STATIC_INLINE", + "type": "GUARD", + "value": "", + "description": "NOTE: By default, compile functions as static inline" + }, + { + "name": "EASEDEF", + "type": "UNKNOWN", + "value": "static inline", + "description": "" + }, + { + "name": "PI", + "type": "FLOAT", + "value": 3.14159265358979323846, + "description": "Required as PI is not always defined in math.h" + } + ], + "structs": [ + ], + "aliases": [ + ], + "enums": [ + ], + "callbacks": [ + ], + "functions": [ + { + "name": "EaseLinearNone", + "description": "Ease: Linear", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseLinearIn", + "description": "Ease: Linear In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseLinearOut", + "description": "Ease: Linear Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseLinearInOut", + "description": "Ease: Linear In Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseSineIn", + "description": "Ease: Sine In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseSineOut", + "description": "Ease: Sine Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseSineInOut", + "description": "Ease: Sine Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseCircIn", + "description": "Ease: Circular In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseCircOut", + "description": "Ease: Circular Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseCircInOut", + "description": "Ease: Circular In Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseCubicIn", + "description": "Ease: Cubic In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseCubicOut", + "description": "Ease: Cubic Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseCubicInOut", + "description": "Ease: Cubic In Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseQuadIn", + "description": "Ease: Quadratic In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseQuadOut", + "description": "Ease: Quadratic Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseQuadInOut", + "description": "Ease: Quadratic In Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseExpoIn", + "description": "Ease: Exponential In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseExpoOut", + "description": "Ease: Exponential Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseExpoInOut", + "description": "Ease: Exponential In Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseBackIn", + "description": "Ease: Back In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseBackOut", + "description": "Ease: Back Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseBackInOut", + "description": "Ease: Back In Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseBounceOut", + "description": "Ease: Bounce Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseBounceIn", + "description": "Ease: Bounce In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseBounceInOut", + "description": "Ease: Bounce In Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseElasticIn", + "description": "Ease: Elastic In", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseElasticOut", + "description": "Ease: Elastic Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + }, + { + "name": "EaseElasticInOut", + "description": "Ease: Elastic In Out", + "returnType": "float", + "params": [ + { + "type": "float", + "name": "t" + }, + { + "type": "float", + "name": "b" + }, + { + "type": "float", + "name": "c" + }, + { + "type": "float", + "name": "d" + } + ] + } + ] +} diff --git a/raylib-api/reasings.lua b/raylib-api/reasings.lua new file mode 100644 index 0000000..59d99c7 --- /dev/null +++ b/raylib-api/reasings.lua @@ -0,0 +1,346 @@ +return { + defines = { + { + name = "REASINGS_H", + type = "GUARD", + value = "", + description = "" + }, + { + name = "REASINGS_STATIC_INLINE", + type = "GUARD", + value = "", + description = "NOTE: By default, compile functions as static inline" + }, + { + name = "EASEDEF", + type = "UNKNOWN", + value = "static inline", + description = "" + }, + { + name = "PI", + type = "FLOAT", + value = 3.14159265358979323846, + description = "Required as PI is not always defined in math.h" + } + }, + structs = { + }, + aliases = { + }, + enums = { + }, + callbacks = { + }, + functions = { + { + name = "EaseLinearNone", + description = "Ease: Linear", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseLinearIn", + description = "Ease: Linear In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseLinearOut", + description = "Ease: Linear Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseLinearInOut", + description = "Ease: Linear In Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseSineIn", + description = "Ease: Sine In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseSineOut", + description = "Ease: Sine Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseSineInOut", + description = "Ease: Sine Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseCircIn", + description = "Ease: Circular In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseCircOut", + description = "Ease: Circular Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseCircInOut", + description = "Ease: Circular In Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseCubicIn", + description = "Ease: Cubic In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseCubicOut", + description = "Ease: Cubic Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseCubicInOut", + description = "Ease: Cubic In Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseQuadIn", + description = "Ease: Quadratic In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseQuadOut", + description = "Ease: Quadratic Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseQuadInOut", + description = "Ease: Quadratic In Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseExpoIn", + description = "Ease: Exponential In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseExpoOut", + description = "Ease: Exponential Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseExpoInOut", + description = "Ease: Exponential In Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseBackIn", + description = "Ease: Back In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseBackOut", + description = "Ease: Back Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseBackInOut", + description = "Ease: Back In Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseBounceOut", + description = "Ease: Bounce Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseBounceIn", + description = "Ease: Bounce In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseBounceInOut", + description = "Ease: Bounce In Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseElasticIn", + description = "Ease: Elastic In", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseElasticOut", + description = "Ease: Elastic Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + }, + { + name = "EaseElasticInOut", + description = "Ease: Elastic In Out", + returnType = "float", + params = { + {type = "float", name = "t"}, + {type = "float", name = "b"}, + {type = "float", name = "c"}, + {type = "float", name = "d"} + } + } + } +} diff --git a/raylib-api/reasings.txt b/raylib-api/reasings.txt new file mode 100644 index 0000000..3fa44cf --- /dev/null +++ b/raylib-api/reasings.txt @@ -0,0 +1,262 @@ + +Defines found: 4 + +Define 001: REASINGS_H + Name: REASINGS_H + Type: GUARD + Value: + Description: +Define 002: REASINGS_STATIC_INLINE + Name: REASINGS_STATIC_INLINE + Type: GUARD + Value: + Description: NOTE: By default, compile functions as static inline +Define 003: EASEDEF + Name: EASEDEF + Type: UNKNOWN + Value: static inline + Description: +Define 004: PI + Name: PI + Type: FLOAT + Value: 3.14159265358979323846 + Description: Required as PI is not always defined in math.h + +Structures found: 0 + + +Aliases found: 0 + + +Enums found: 0 + + +Callbacks found: 0 + + +Functions found: 28 + +Function 001: EaseLinearNone() (4 input parameters) + Name: EaseLinearNone + Return type: float + Description: Ease: Linear + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 002: EaseLinearIn() (4 input parameters) + Name: EaseLinearIn + Return type: float + Description: Ease: Linear In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 003: EaseLinearOut() (4 input parameters) + Name: EaseLinearOut + Return type: float + Description: Ease: Linear Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 004: EaseLinearInOut() (4 input parameters) + Name: EaseLinearInOut + Return type: float + Description: Ease: Linear In Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 005: EaseSineIn() (4 input parameters) + Name: EaseSineIn + Return type: float + Description: Ease: Sine In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 006: EaseSineOut() (4 input parameters) + Name: EaseSineOut + Return type: float + Description: Ease: Sine Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 007: EaseSineInOut() (4 input parameters) + Name: EaseSineInOut + Return type: float + Description: Ease: Sine Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 008: EaseCircIn() (4 input parameters) + Name: EaseCircIn + Return type: float + Description: Ease: Circular In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 009: EaseCircOut() (4 input parameters) + Name: EaseCircOut + Return type: float + Description: Ease: Circular Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 010: EaseCircInOut() (4 input parameters) + Name: EaseCircInOut + Return type: float + Description: Ease: Circular In Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 011: EaseCubicIn() (4 input parameters) + Name: EaseCubicIn + Return type: float + Description: Ease: Cubic In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 012: EaseCubicOut() (4 input parameters) + Name: EaseCubicOut + Return type: float + Description: Ease: Cubic Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 013: EaseCubicInOut() (4 input parameters) + Name: EaseCubicInOut + Return type: float + Description: Ease: Cubic In Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 014: EaseQuadIn() (4 input parameters) + Name: EaseQuadIn + Return type: float + Description: Ease: Quadratic In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 015: EaseQuadOut() (4 input parameters) + Name: EaseQuadOut + Return type: float + Description: Ease: Quadratic Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 016: EaseQuadInOut() (4 input parameters) + Name: EaseQuadInOut + Return type: float + Description: Ease: Quadratic In Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 017: EaseExpoIn() (4 input parameters) + Name: EaseExpoIn + Return type: float + Description: Ease: Exponential In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 018: EaseExpoOut() (4 input parameters) + Name: EaseExpoOut + Return type: float + Description: Ease: Exponential Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 019: EaseExpoInOut() (4 input parameters) + Name: EaseExpoInOut + Return type: float + Description: Ease: Exponential In Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 020: EaseBackIn() (4 input parameters) + Name: EaseBackIn + Return type: float + Description: Ease: Back In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 021: EaseBackOut() (4 input parameters) + Name: EaseBackOut + Return type: float + Description: Ease: Back Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 022: EaseBackInOut() (4 input parameters) + Name: EaseBackInOut + Return type: float + Description: Ease: Back In Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 023: EaseBounceOut() (4 input parameters) + Name: EaseBounceOut + Return type: float + Description: Ease: Bounce Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 024: EaseBounceIn() (4 input parameters) + Name: EaseBounceIn + Return type: float + Description: Ease: Bounce In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 025: EaseBounceInOut() (4 input parameters) + Name: EaseBounceInOut + Return type: float + Description: Ease: Bounce In Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 026: EaseElasticIn() (4 input parameters) + Name: EaseElasticIn + Return type: float + Description: Ease: Elastic In + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 027: EaseElasticOut() (4 input parameters) + Name: EaseElasticOut + Return type: float + Description: Ease: Elastic Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) +Function 028: EaseElasticInOut() (4 input parameters) + Name: EaseElasticInOut + Return type: float + Description: Ease: Elastic In Out + Param[1]: t (type: float) + Param[2]: b (type: float) + Param[3]: c (type: float) + Param[4]: d (type: float) diff --git a/raylib-api/reasings.xml b/raylib-api/reasings.xml new file mode 100644 index 0000000..5475a87 --- /dev/null +++ b/raylib-api/reasings.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/raylib-api/rlgl.json b/raylib-api/rlgl.json new file mode 100644 index 0000000..1190ef1 --- /dev/null +++ b/raylib-api/rlgl.json @@ -0,0 +1,3264 @@ +{ + "defines": [ + { + "name": "RLGL_H", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RLGL_VERSION", + "type": "STRING", + "value": "4.5", + "description": "" + }, + { + "name": "RLAPI", + "type": "UNKNOWN", + "value": "__declspec(dllexport)", + "description": "We are building the library as a Win32 shared library (.dll)" + }, + { + "name": "TRACELOG(level, ...)", + "type": "MACRO", + "value": "(void)0", + "description": "" + }, + { + "name": "TRACELOGD(...)", + "type": "MACRO", + "value": "(void)0", + "description": "" + }, + { + "name": "RL_MALLOC(sz)", + "type": "MACRO", + "value": "malloc(sz)", + "description": "" + }, + { + "name": "RL_CALLOC(n,sz)", + "type": "MACRO", + "value": "calloc(n,sz)", + "description": "" + }, + { + "name": "RL_REALLOC(n,sz)", + "type": "MACRO", + "value": "realloc(n,sz)", + "description": "" + }, + { + "name": "RL_FREE(p)", + "type": "MACRO", + "value": "free(p)", + "description": "" + }, + { + "name": "GRAPHICS_API_OPENGL_33", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RLGL_RENDER_TEXTURES_HINT", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_DEFAULT_BATCH_BUFFER_ELEMENTS", + "type": "INT", + "value": 8192, + "description": "" + }, + { + "name": "RL_DEFAULT_BATCH_BUFFERS", + "type": "INT", + "value": 1, + "description": "Default number of batch buffers (multi-buffering)" + }, + { + "name": "RL_DEFAULT_BATCH_DRAWCALLS", + "type": "INT", + "value": 256, + "description": "Default number of batch draw calls (by state changes: mode, texture)" + }, + { + "name": "RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS", + "type": "INT", + "value": 4, + "description": "Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())" + }, + { + "name": "RL_MAX_MATRIX_STACK_SIZE", + "type": "INT", + "value": 32, + "description": "Maximum size of Matrix stack" + }, + { + "name": "RL_MAX_SHADER_LOCATIONS", + "type": "INT", + "value": 32, + "description": "Maximum number of shader locations supported" + }, + { + "name": "RL_CULL_DISTANCE_NEAR", + "type": "DOUBLE", + "value": 0.01, + "description": "Default near cull distance" + }, + { + "name": "RL_CULL_DISTANCE_FAR", + "type": "DOUBLE", + "value": 1000.0, + "description": "Default far cull distance" + }, + { + "name": "RL_TEXTURE_WRAP_S", + "type": "INT", + "value": 10242, + "description": "GL_TEXTURE_WRAP_S" + }, + { + "name": "RL_TEXTURE_WRAP_T", + "type": "INT", + "value": 10243, + "description": "GL_TEXTURE_WRAP_T" + }, + { + "name": "RL_TEXTURE_MAG_FILTER", + "type": "INT", + "value": 10240, + "description": "GL_TEXTURE_MAG_FILTER" + }, + { + "name": "RL_TEXTURE_MIN_FILTER", + "type": "INT", + "value": 10241, + "description": "GL_TEXTURE_MIN_FILTER" + }, + { + "name": "RL_TEXTURE_FILTER_NEAREST", + "type": "INT", + "value": 9728, + "description": "GL_NEAREST" + }, + { + "name": "RL_TEXTURE_FILTER_LINEAR", + "type": "INT", + "value": 9729, + "description": "GL_LINEAR" + }, + { + "name": "RL_TEXTURE_FILTER_MIP_NEAREST", + "type": "INT", + "value": 9984, + "description": "GL_NEAREST_MIPMAP_NEAREST" + }, + { + "name": "RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR", + "type": "INT", + "value": 9986, + "description": "GL_NEAREST_MIPMAP_LINEAR" + }, + { + "name": "RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST", + "type": "INT", + "value": 9985, + "description": "GL_LINEAR_MIPMAP_NEAREST" + }, + { + "name": "RL_TEXTURE_FILTER_MIP_LINEAR", + "type": "INT", + "value": 9987, + "description": "GL_LINEAR_MIPMAP_LINEAR" + }, + { + "name": "RL_TEXTURE_FILTER_ANISOTROPIC", + "type": "INT", + "value": 12288, + "description": "Anisotropic filter (custom identifier)" + }, + { + "name": "RL_TEXTURE_MIPMAP_BIAS_RATIO", + "type": "INT", + "value": 16384, + "description": "Texture mipmap bias, percentage ratio (custom identifier)" + }, + { + "name": "RL_TEXTURE_WRAP_REPEAT", + "type": "INT", + "value": 10497, + "description": "GL_REPEAT" + }, + { + "name": "RL_TEXTURE_WRAP_CLAMP", + "type": "INT", + "value": 33071, + "description": "GL_CLAMP_TO_EDGE" + }, + { + "name": "RL_TEXTURE_WRAP_MIRROR_REPEAT", + "type": "INT", + "value": 33648, + "description": "GL_MIRRORED_REPEAT" + }, + { + "name": "RL_TEXTURE_WRAP_MIRROR_CLAMP", + "type": "INT", + "value": 34626, + "description": "GL_MIRROR_CLAMP_EXT" + }, + { + "name": "RL_MODELVIEW", + "type": "INT", + "value": 5888, + "description": "GL_MODELVIEW" + }, + { + "name": "RL_PROJECTION", + "type": "INT", + "value": 5889, + "description": "GL_PROJECTION" + }, + { + "name": "RL_TEXTURE", + "type": "INT", + "value": 5890, + "description": "GL_TEXTURE" + }, + { + "name": "RL_LINES", + "type": "INT", + "value": 1, + "description": "GL_LINES" + }, + { + "name": "RL_TRIANGLES", + "type": "INT", + "value": 4, + "description": "GL_TRIANGLES" + }, + { + "name": "RL_QUADS", + "type": "INT", + "value": 7, + "description": "GL_QUADS" + }, + { + "name": "RL_UNSIGNED_BYTE", + "type": "INT", + "value": 5121, + "description": "GL_UNSIGNED_BYTE" + }, + { + "name": "RL_FLOAT", + "type": "INT", + "value": 5126, + "description": "GL_FLOAT" + }, + { + "name": "RL_STREAM_DRAW", + "type": "INT", + "value": 35040, + "description": "GL_STREAM_DRAW" + }, + { + "name": "RL_STREAM_READ", + "type": "INT", + "value": 35041, + "description": "GL_STREAM_READ" + }, + { + "name": "RL_STREAM_COPY", + "type": "INT", + "value": 35042, + "description": "GL_STREAM_COPY" + }, + { + "name": "RL_STATIC_DRAW", + "type": "INT", + "value": 35044, + "description": "GL_STATIC_DRAW" + }, + { + "name": "RL_STATIC_READ", + "type": "INT", + "value": 35045, + "description": "GL_STATIC_READ" + }, + { + "name": "RL_STATIC_COPY", + "type": "INT", + "value": 35046, + "description": "GL_STATIC_COPY" + }, + { + "name": "RL_DYNAMIC_DRAW", + "type": "INT", + "value": 35048, + "description": "GL_DYNAMIC_DRAW" + }, + { + "name": "RL_DYNAMIC_READ", + "type": "INT", + "value": 35049, + "description": "GL_DYNAMIC_READ" + }, + { + "name": "RL_DYNAMIC_COPY", + "type": "INT", + "value": 35050, + "description": "GL_DYNAMIC_COPY" + }, + { + "name": "RL_FRAGMENT_SHADER", + "type": "INT", + "value": 35632, + "description": "GL_FRAGMENT_SHADER" + }, + { + "name": "RL_VERTEX_SHADER", + "type": "INT", + "value": 35633, + "description": "GL_VERTEX_SHADER" + }, + { + "name": "RL_COMPUTE_SHADER", + "type": "INT", + "value": 37305, + "description": "GL_COMPUTE_SHADER" + }, + { + "name": "RL_ZERO", + "type": "INT", + "value": 0, + "description": "GL_ZERO" + }, + { + "name": "RL_ONE", + "type": "INT", + "value": 1, + "description": "GL_ONE" + }, + { + "name": "RL_SRC_COLOR", + "type": "INT", + "value": 768, + "description": "GL_SRC_COLOR" + }, + { + "name": "RL_ONE_MINUS_SRC_COLOR", + "type": "INT", + "value": 769, + "description": "GL_ONE_MINUS_SRC_COLOR" + }, + { + "name": "RL_SRC_ALPHA", + "type": "INT", + "value": 770, + "description": "GL_SRC_ALPHA" + }, + { + "name": "RL_ONE_MINUS_SRC_ALPHA", + "type": "INT", + "value": 771, + "description": "GL_ONE_MINUS_SRC_ALPHA" + }, + { + "name": "RL_DST_ALPHA", + "type": "INT", + "value": 772, + "description": "GL_DST_ALPHA" + }, + { + "name": "RL_ONE_MINUS_DST_ALPHA", + "type": "INT", + "value": 773, + "description": "GL_ONE_MINUS_DST_ALPHA" + }, + { + "name": "RL_DST_COLOR", + "type": "INT", + "value": 774, + "description": "GL_DST_COLOR" + }, + { + "name": "RL_ONE_MINUS_DST_COLOR", + "type": "INT", + "value": 775, + "description": "GL_ONE_MINUS_DST_COLOR" + }, + { + "name": "RL_SRC_ALPHA_SATURATE", + "type": "INT", + "value": 776, + "description": "GL_SRC_ALPHA_SATURATE" + }, + { + "name": "RL_CONSTANT_COLOR", + "type": "INT", + "value": 32769, + "description": "GL_CONSTANT_COLOR" + }, + { + "name": "RL_ONE_MINUS_CONSTANT_COLOR", + "type": "INT", + "value": 32770, + "description": "GL_ONE_MINUS_CONSTANT_COLOR" + }, + { + "name": "RL_CONSTANT_ALPHA", + "type": "INT", + "value": 32771, + "description": "GL_CONSTANT_ALPHA" + }, + { + "name": "RL_ONE_MINUS_CONSTANT_ALPHA", + "type": "INT", + "value": 32772, + "description": "GL_ONE_MINUS_CONSTANT_ALPHA" + }, + { + "name": "RL_FUNC_ADD", + "type": "INT", + "value": 32774, + "description": "GL_FUNC_ADD" + }, + { + "name": "RL_MIN", + "type": "INT", + "value": 32775, + "description": "GL_MIN" + }, + { + "name": "RL_MAX", + "type": "INT", + "value": 32776, + "description": "GL_MAX" + }, + { + "name": "RL_FUNC_SUBTRACT", + "type": "INT", + "value": 32778, + "description": "GL_FUNC_SUBTRACT" + }, + { + "name": "RL_FUNC_REVERSE_SUBTRACT", + "type": "INT", + "value": 32779, + "description": "GL_FUNC_REVERSE_SUBTRACT" + }, + { + "name": "RL_BLEND_EQUATION", + "type": "INT", + "value": 32777, + "description": "GL_BLEND_EQUATION" + }, + { + "name": "RL_BLEND_EQUATION_RGB", + "type": "INT", + "value": 32777, + "description": "GL_BLEND_EQUATION_RGB // (Same as BLEND_EQUATION)" + }, + { + "name": "RL_BLEND_EQUATION_ALPHA", + "type": "INT", + "value": 34877, + "description": "GL_BLEND_EQUATION_ALPHA" + }, + { + "name": "RL_BLEND_DST_RGB", + "type": "INT", + "value": 32968, + "description": "GL_BLEND_DST_RGB" + }, + { + "name": "RL_BLEND_SRC_RGB", + "type": "INT", + "value": 32969, + "description": "GL_BLEND_SRC_RGB" + }, + { + "name": "RL_BLEND_DST_ALPHA", + "type": "INT", + "value": 32970, + "description": "GL_BLEND_DST_ALPHA" + }, + { + "name": "RL_BLEND_SRC_ALPHA", + "type": "INT", + "value": 32971, + "description": "GL_BLEND_SRC_ALPHA" + }, + { + "name": "RL_BLEND_COLOR", + "type": "INT", + "value": 32773, + "description": "GL_BLEND_COLOR" + }, + { + "name": "RL_MATRIX_TYPE", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RL_SHADER_LOC_MAP_DIFFUSE", + "type": "UNKNOWN", + "value": "RL_SHADER_LOC_MAP_ALBEDO", + "description": "" + }, + { + "name": "RL_SHADER_LOC_MAP_SPECULAR", + "type": "UNKNOWN", + "value": "RL_SHADER_LOC_MAP_METALNESS", + "description": "" + } + ], + "structs": [ + { + "name": "Matrix", + "description": "Matrix, 4x4 components, column major, OpenGL style, right handed", + "fields": [ + { + "type": "float", + "name": "m0", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m4", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m8", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m12", + "description": "Matrix first row (4 components)" + }, + { + "type": "float", + "name": "m1", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m5", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m9", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m13", + "description": "Matrix second row (4 components)" + }, + { + "type": "float", + "name": "m2", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m6", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m10", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m14", + "description": "Matrix third row (4 components)" + }, + { + "type": "float", + "name": "m3", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m7", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m11", + "description": "Matrix fourth row (4 components)" + }, + { + "type": "float", + "name": "m15", + "description": "Matrix fourth row (4 components)" + } + ] + }, + { + "name": "rlVertexBuffer", + "description": "Dynamic vertex buffers (position + texcoords + colors + indices arrays)", + "fields": [ + { + "type": "int", + "name": "elementCount", + "description": "Number of elements in the buffer (QUADS)" + }, + { + "type": "float *", + "name": "vertices", + "description": "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)" + }, + { + "type": "float *", + "name": "texcoords", + "description": "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)" + }, + { + "type": "unsigned char *", + "name": "colors", + "description": "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)" + }, + { + "type": "#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENunsigned int *", + "name": "indices", + "description": "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + "type": "unsigned int *", + "name": "indices", + "description": "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + "type": "#endif", + "name": "indices", + "description": "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + "type": "#if defined(GRAPHICS_API_OPENGL_ES2)", + "name": "indices", + "description": "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + "type": "unsigned short *", + "name": "indices", + "description": "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + "type": "#endif", + "name": "vaoId", + "description": "OpenGL Vertex Array Object id" + }, + { + "type": "unsigned int", + "name": "vaoId", + "description": "OpenGL Vertex Array Object id" + }, + { + "type": "unsigned int[4]", + "name": "vboId", + "description": "OpenGL Vertex Buffer Objects id (4 types of vertex data)" + } + ] + }, + { + "name": "rlDrawCall", + "description": "of those state-change happens (this is done in core module)", + "fields": [ + { + "type": "int", + "name": "mode", + "description": "Drawing mode: LINES, TRIANGLES, QUADS" + }, + { + "type": "int", + "name": "vertexCount", + "description": "Number of vertex of the draw" + }, + { + "type": "int", + "name": "vertexAlignment", + "description": "Number of vertex required for index alignment (LINES, TRIANGLES)" + }, + { + "type": "unsigned int", + "name": "textureId", + "description": "Texture id to be used on the draw -> Use to create new draw call if changes" + } + ] + }, + { + "name": "rlRenderBatch", + "description": "rlRenderBatch type", + "fields": [ + { + "type": "int", + "name": "bufferCount", + "description": "Number of vertex buffers (multi-buffering support)" + }, + { + "type": "int", + "name": "currentBuffer", + "description": "Current buffer tracking in case of multi-buffering" + }, + { + "type": "rlVertexBuffer *", + "name": "vertexBuffer", + "description": "Dynamic buffer(s) for vertex data" + }, + { + "type": "rlDrawCall *", + "name": "draws", + "description": "Draw calls array, depends on textureId" + }, + { + "type": "int", + "name": "drawCounter", + "description": "Draw calls counter" + }, + { + "type": "float", + "name": "currentDepth", + "description": "Current depth value for next draw" + } + ] + } + ], + "aliases": [ + ], + "enums": [ + { + "name": "rlGlVersion", + "description": "OpenGL version", + "values": [ + { + "name": "RL_OPENGL_11", + "value": 1, + "description": "OpenGL 1.1" + }, + { + "name": "RL_OPENGL_21", + "value": 2, + "description": "OpenGL 2.1 (GLSL 120)" + }, + { + "name": "RL_OPENGL_33", + "value": 3, + "description": "OpenGL 3.3 (GLSL 330)" + }, + { + "name": "RL_OPENGL_43", + "value": 4, + "description": "OpenGL 4.3 (using GLSL 330)" + }, + { + "name": "RL_OPENGL_ES_20", + "value": 5, + "description": "OpenGL ES 2.0 (GLSL 100)" + } + ] + }, + { + "name": "rlTraceLogLevel", + "description": "Trace log level", + "values": [ + { + "name": "RL_LOG_ALL", + "value": 0, + "description": "Display all logs" + }, + { + "name": "RL_LOG_TRACE", + "value": 1, + "description": "Trace logging, intended for internal use only" + }, + { + "name": "RL_LOG_DEBUG", + "value": 2, + "description": "Debug logging, used for internal debugging, it should be disabled on release builds" + }, + { + "name": "RL_LOG_INFO", + "value": 3, + "description": "Info logging, used for program execution info" + }, + { + "name": "RL_LOG_WARNING", + "value": 4, + "description": "Warning logging, used on recoverable failures" + }, + { + "name": "RL_LOG_ERROR", + "value": 5, + "description": "Error logging, used on unrecoverable failures" + }, + { + "name": "RL_LOG_FATAL", + "value": 6, + "description": "Fatal logging, used to abort program: exit(EXIT_FAILURE)" + }, + { + "name": "RL_LOG_NONE", + "value": 7, + "description": "Disable logging" + } + ] + }, + { + "name": "rlPixelFormat", + "description": "Texture pixel formats", + "values": [ + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE", + "value": 1, + "description": "8 bit per pixel (no alpha)" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA", + "value": 2, + "description": "8*2 bpp (2 channels)" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5", + "value": 3, + "description": "16 bpp" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8", + "value": 4, + "description": "24 bpp" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1", + "value": 5, + "description": "16 bpp (1 bit alpha)" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4", + "value": 6, + "description": "16 bpp (4 bit alpha)" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8", + "value": 7, + "description": "32 bpp" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32", + "value": 8, + "description": "32 bpp (1 channel - float)" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32", + "value": 9, + "description": "32*3 bpp (3 channels - float)" + }, + { + "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32", + "value": 10, + "description": "32*4 bpp (4 channels - float)" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_DXT1_RGB", + "value": 11, + "description": "4 bpp (no alpha)" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA", + "value": 12, + "description": "4 bpp (1 bit alpha)" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA", + "value": 13, + "description": "8 bpp" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA", + "value": 14, + "description": "8 bpp" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_ETC1_RGB", + "value": 15, + "description": "4 bpp" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_ETC2_RGB", + "value": 16, + "description": "4 bpp" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA", + "value": 17, + "description": "8 bpp" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_PVRT_RGB", + "value": 18, + "description": "4 bpp" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA", + "value": 19, + "description": "4 bpp" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA", + "value": 20, + "description": "8 bpp" + }, + { + "name": "RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA", + "value": 21, + "description": "2 bpp" + } + ] + }, + { + "name": "rlTextureFilter", + "description": "Texture parameters: filter mode", + "values": [ + { + "name": "RL_TEXTURE_FILTER_POINT", + "value": 0, + "description": "No filter, just pixel approximation" + }, + { + "name": "RL_TEXTURE_FILTER_BILINEAR", + "value": 1, + "description": "Linear filtering" + }, + { + "name": "RL_TEXTURE_FILTER_TRILINEAR", + "value": 2, + "description": "Trilinear filtering (linear with mipmaps)" + }, + { + "name": "RL_TEXTURE_FILTER_ANISOTROPIC_4X", + "value": 3, + "description": "Anisotropic filtering 4x" + }, + { + "name": "RL_TEXTURE_FILTER_ANISOTROPIC_8X", + "value": 4, + "description": "Anisotropic filtering 8x" + }, + { + "name": "RL_TEXTURE_FILTER_ANISOTROPIC_16X", + "value": 5, + "description": "Anisotropic filtering 16x" + } + ] + }, + { + "name": "rlBlendMode", + "description": "Color blending modes (pre-defined)", + "values": [ + { + "name": "RL_BLEND_ALPHA", + "value": 0, + "description": "Blend textures considering alpha (default)" + }, + { + "name": "RL_BLEND_ADDITIVE", + "value": 1, + "description": "Blend textures adding colors" + }, + { + "name": "RL_BLEND_MULTIPLIED", + "value": 2, + "description": "Blend textures multiplying colors" + }, + { + "name": "RL_BLEND_ADD_COLORS", + "value": 3, + "description": "Blend textures adding colors (alternative)" + }, + { + "name": "RL_BLEND_SUBTRACT_COLORS", + "value": 4, + "description": "Blend textures subtracting colors (alternative)" + }, + { + "name": "RL_BLEND_ALPHA_PREMULTIPLY", + "value": 5, + "description": "Blend premultiplied textures considering alpha" + }, + { + "name": "RL_BLEND_CUSTOM", + "value": 6, + "description": "Blend textures using custom src/dst factors (use rlSetBlendFactors())" + }, + { + "name": "RL_BLEND_CUSTOM_SEPARATE", + "value": 7, + "description": "Blend textures using custom src/dst factors (use rlSetBlendFactorsSeparate())" + } + ] + }, + { + "name": "rlShaderLocationIndex", + "description": "Shader location point type", + "values": [ + { + "name": "RL_SHADER_LOC_VERTEX_POSITION", + "value": 0, + "description": "Shader location: vertex attribute: position" + }, + { + "name": "RL_SHADER_LOC_VERTEX_TEXCOORD01", + "value": 1, + "description": "Shader location: vertex attribute: texcoord01" + }, + { + "name": "RL_SHADER_LOC_VERTEX_TEXCOORD02", + "value": 2, + "description": "Shader location: vertex attribute: texcoord02" + }, + { + "name": "RL_SHADER_LOC_VERTEX_NORMAL", + "value": 3, + "description": "Shader location: vertex attribute: normal" + }, + { + "name": "RL_SHADER_LOC_VERTEX_TANGENT", + "value": 4, + "description": "Shader location: vertex attribute: tangent" + }, + { + "name": "RL_SHADER_LOC_VERTEX_COLOR", + "value": 5, + "description": "Shader location: vertex attribute: color" + }, + { + "name": "RL_SHADER_LOC_MATRIX_MVP", + "value": 6, + "description": "Shader location: matrix uniform: model-view-projection" + }, + { + "name": "RL_SHADER_LOC_MATRIX_VIEW", + "value": 7, + "description": "Shader location: matrix uniform: view (camera transform)" + }, + { + "name": "RL_SHADER_LOC_MATRIX_PROJECTION", + "value": 8, + "description": "Shader location: matrix uniform: projection" + }, + { + "name": "RL_SHADER_LOC_MATRIX_MODEL", + "value": 9, + "description": "Shader location: matrix uniform: model (transform)" + }, + { + "name": "RL_SHADER_LOC_MATRIX_NORMAL", + "value": 10, + "description": "Shader location: matrix uniform: normal" + }, + { + "name": "RL_SHADER_LOC_VECTOR_VIEW", + "value": 11, + "description": "Shader location: vector uniform: view" + }, + { + "name": "RL_SHADER_LOC_COLOR_DIFFUSE", + "value": 12, + "description": "Shader location: vector uniform: diffuse color" + }, + { + "name": "RL_SHADER_LOC_COLOR_SPECULAR", + "value": 13, + "description": "Shader location: vector uniform: specular color" + }, + { + "name": "RL_SHADER_LOC_COLOR_AMBIENT", + "value": 14, + "description": "Shader location: vector uniform: ambient color" + }, + { + "name": "RL_SHADER_LOC_MAP_ALBEDO", + "value": 15, + "description": "Shader location: sampler2d texture: albedo (same as: RL_SHADER_LOC_MAP_DIFFUSE)" + }, + { + "name": "RL_SHADER_LOC_MAP_METALNESS", + "value": 16, + "description": "Shader location: sampler2d texture: metalness (same as: RL_SHADER_LOC_MAP_SPECULAR)" + }, + { + "name": "RL_SHADER_LOC_MAP_NORMAL", + "value": 17, + "description": "Shader location: sampler2d texture: normal" + }, + { + "name": "RL_SHADER_LOC_MAP_ROUGHNESS", + "value": 18, + "description": "Shader location: sampler2d texture: roughness" + }, + { + "name": "RL_SHADER_LOC_MAP_OCCLUSION", + "value": 19, + "description": "Shader location: sampler2d texture: occlusion" + }, + { + "name": "RL_SHADER_LOC_MAP_EMISSION", + "value": 20, + "description": "Shader location: sampler2d texture: emission" + }, + { + "name": "RL_SHADER_LOC_MAP_HEIGHT", + "value": 21, + "description": "Shader location: sampler2d texture: height" + }, + { + "name": "RL_SHADER_LOC_MAP_CUBEMAP", + "value": 22, + "description": "Shader location: samplerCube texture: cubemap" + }, + { + "name": "RL_SHADER_LOC_MAP_IRRADIANCE", + "value": 23, + "description": "Shader location: samplerCube texture: irradiance" + }, + { + "name": "RL_SHADER_LOC_MAP_PREFILTER", + "value": 24, + "description": "Shader location: samplerCube texture: prefilter" + }, + { + "name": "RL_SHADER_LOC_MAP_BRDF", + "value": 25, + "description": "Shader location: sampler2d texture: brdf" + } + ] + }, + { + "name": "rlShaderUniformDataType", + "description": "Shader uniform data type", + "values": [ + { + "name": "RL_SHADER_UNIFORM_FLOAT", + "value": 0, + "description": "Shader uniform type: float" + }, + { + "name": "RL_SHADER_UNIFORM_VEC2", + "value": 1, + "description": "Shader uniform type: vec2 (2 float)" + }, + { + "name": "RL_SHADER_UNIFORM_VEC3", + "value": 2, + "description": "Shader uniform type: vec3 (3 float)" + }, + { + "name": "RL_SHADER_UNIFORM_VEC4", + "value": 3, + "description": "Shader uniform type: vec4 (4 float)" + }, + { + "name": "RL_SHADER_UNIFORM_INT", + "value": 4, + "description": "Shader uniform type: int" + }, + { + "name": "RL_SHADER_UNIFORM_IVEC2", + "value": 5, + "description": "Shader uniform type: ivec2 (2 int)" + }, + { + "name": "RL_SHADER_UNIFORM_IVEC3", + "value": 6, + "description": "Shader uniform type: ivec3 (3 int)" + }, + { + "name": "RL_SHADER_UNIFORM_IVEC4", + "value": 7, + "description": "Shader uniform type: ivec4 (4 int)" + }, + { + "name": "RL_SHADER_UNIFORM_SAMPLER2D", + "value": 8, + "description": "Shader uniform type: sampler2d" + } + ] + }, + { + "name": "rlShaderAttributeDataType", + "description": "Shader attribute data types", + "values": [ + { + "name": "RL_SHADER_ATTRIB_FLOAT", + "value": 0, + "description": "Shader attribute type: float" + }, + { + "name": "RL_SHADER_ATTRIB_VEC2", + "value": 1, + "description": "Shader attribute type: vec2 (2 float)" + }, + { + "name": "RL_SHADER_ATTRIB_VEC3", + "value": 2, + "description": "Shader attribute type: vec3 (3 float)" + }, + { + "name": "RL_SHADER_ATTRIB_VEC4", + "value": 3, + "description": "Shader attribute type: vec4 (4 float)" + } + ] + }, + { + "name": "rlFramebufferAttachType", + "description": "Framebuffer attachment type", + "values": [ + { + "name": "RL_ATTACHMENT_COLOR_CHANNEL0", + "value": 0, + "description": "Framebuffer attachment type: color 0" + }, + { + "name": "RL_ATTACHMENT_COLOR_CHANNEL1", + "value": 1, + "description": "Framebuffer attachment type: color 1" + }, + { + "name": "RL_ATTACHMENT_COLOR_CHANNEL2", + "value": 2, + "description": "Framebuffer attachment type: color 2" + }, + { + "name": "RL_ATTACHMENT_COLOR_CHANNEL3", + "value": 3, + "description": "Framebuffer attachment type: color 3" + }, + { + "name": "RL_ATTACHMENT_COLOR_CHANNEL4", + "value": 4, + "description": "Framebuffer attachment type: color 4" + }, + { + "name": "RL_ATTACHMENT_COLOR_CHANNEL5", + "value": 5, + "description": "Framebuffer attachment type: color 5" + }, + { + "name": "RL_ATTACHMENT_COLOR_CHANNEL6", + "value": 6, + "description": "Framebuffer attachment type: color 6" + }, + { + "name": "RL_ATTACHMENT_COLOR_CHANNEL7", + "value": 7, + "description": "Framebuffer attachment type: color 7" + }, + { + "name": "RL_ATTACHMENT_DEPTH", + "value": 100, + "description": "Framebuffer attachment type: depth" + }, + { + "name": "RL_ATTACHMENT_STENCIL", + "value": 200, + "description": "Framebuffer attachment type: stencil" + } + ] + }, + { + "name": "rlFramebufferAttachTextureType", + "description": "Framebuffer texture attachment type", + "values": [ + { + "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_X", + "value": 0, + "description": "Framebuffer texture attachment type: cubemap, +X side" + }, + { + "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_X", + "value": 1, + "description": "Framebuffer texture attachment type: cubemap, -X side" + }, + { + "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_Y", + "value": 2, + "description": "Framebuffer texture attachment type: cubemap, +Y side" + }, + { + "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y", + "value": 3, + "description": "Framebuffer texture attachment type: cubemap, -Y side" + }, + { + "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_Z", + "value": 4, + "description": "Framebuffer texture attachment type: cubemap, +Z side" + }, + { + "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z", + "value": 5, + "description": "Framebuffer texture attachment type: cubemap, -Z side" + }, + { + "name": "RL_ATTACHMENT_TEXTURE2D", + "value": 100, + "description": "Framebuffer texture attachment type: texture2d" + }, + { + "name": "RL_ATTACHMENT_RENDERBUFFER", + "value": 200, + "description": "Framebuffer texture attachment type: renderbuffer" + } + ] + }, + { + "name": "rlCullMode", + "description": "Face culling mode", + "values": [ + { + "name": "RL_CULL_FACE_FRONT", + "value": 0, + "description": "" + }, + { + "name": "RL_CULL_FACE_BACK", + "value": 1, + "description": "" + } + ] + } + ], + "callbacks": [ + ], + "functions": [ + { + "name": "rlMatrixMode", + "description": "Choose the current matrix to be transformed", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "mode" + } + ] + }, + { + "name": "rlPushMatrix", + "description": "Push the current matrix to stack", + "returnType": "void" + }, + { + "name": "rlPopMatrix", + "description": "Pop latest inserted matrix from stack", + "returnType": "void" + }, + { + "name": "rlLoadIdentity", + "description": "Reset current matrix to identity matrix", + "returnType": "void" + }, + { + "name": "rlTranslatef", + "description": "Multiply the current matrix by a translation matrix", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + } + ] + }, + { + "name": "rlRotatef", + "description": "Multiply the current matrix by a rotation matrix", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "angle" + }, + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + } + ] + }, + { + "name": "rlScalef", + "description": "Multiply the current matrix by a scaling matrix", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + } + ] + }, + { + "name": "rlMultMatrixf", + "description": "Multiply the current matrix by another matrix", + "returnType": "void", + "params": [ + { + "type": "const float *", + "name": "matf" + } + ] + }, + { + "name": "rlFrustum", + "description": "", + "returnType": "void", + "params": [ + { + "type": "double", + "name": "left" + }, + { + "type": "double", + "name": "right" + }, + { + "type": "double", + "name": "bottom" + }, + { + "type": "double", + "name": "top" + }, + { + "type": "double", + "name": "znear" + }, + { + "type": "double", + "name": "zfar" + } + ] + }, + { + "name": "rlOrtho", + "description": "", + "returnType": "void", + "params": [ + { + "type": "double", + "name": "left" + }, + { + "type": "double", + "name": "right" + }, + { + "type": "double", + "name": "bottom" + }, + { + "type": "double", + "name": "top" + }, + { + "type": "double", + "name": "znear" + }, + { + "type": "double", + "name": "zfar" + } + ] + }, + { + "name": "rlViewport", + "description": "Set the viewport area", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "rlBegin", + "description": "Initialize drawing mode (how to organize vertex)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "mode" + } + ] + }, + { + "name": "rlEnd", + "description": "Finish vertex providing", + "returnType": "void" + }, + { + "name": "rlVertex2i", + "description": "Define one vertex (position) - 2 int", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + } + ] + }, + { + "name": "rlVertex2f", + "description": "Define one vertex (position) - 2 float", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + } + ] + }, + { + "name": "rlVertex3f", + "description": "Define one vertex (position) - 3 float", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + } + ] + }, + { + "name": "rlTexCoord2f", + "description": "Define one vertex (texture coordinate) - 2 float", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + } + ] + }, + { + "name": "rlNormal3f", + "description": "Define one vertex (normal) - 3 float", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + } + ] + }, + { + "name": "rlColor4ub", + "description": "Define one vertex (color) - 4 byte", + "returnType": "void", + "params": [ + { + "type": "unsigned char", + "name": "r" + }, + { + "type": "unsigned char", + "name": "g" + }, + { + "type": "unsigned char", + "name": "b" + }, + { + "type": "unsigned char", + "name": "a" + } + ] + }, + { + "name": "rlColor3f", + "description": "Define one vertex (color) - 3 float", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + } + ] + }, + { + "name": "rlColor4f", + "description": "Define one vertex (color) - 4 float", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "x" + }, + { + "type": "float", + "name": "y" + }, + { + "type": "float", + "name": "z" + }, + { + "type": "float", + "name": "w" + } + ] + }, + { + "name": "rlEnableVertexArray", + "description": "Enable vertex array (VAO, if supported)", + "returnType": "bool", + "params": [ + { + "type": "unsigned int", + "name": "vaoId" + } + ] + }, + { + "name": "rlDisableVertexArray", + "description": "Disable vertex array (VAO, if supported)", + "returnType": "void" + }, + { + "name": "rlEnableVertexBuffer", + "description": "Enable vertex buffer (VBO)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlDisableVertexBuffer", + "description": "Disable vertex buffer (VBO)", + "returnType": "void" + }, + { + "name": "rlEnableVertexBufferElement", + "description": "Enable vertex buffer element (VBO element)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlDisableVertexBufferElement", + "description": "Disable vertex buffer element (VBO element)", + "returnType": "void" + }, + { + "name": "rlEnableVertexAttribute", + "description": "Enable vertex attribute index", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "index" + } + ] + }, + { + "name": "rlDisableVertexAttribute", + "description": "Disable vertex attribute index", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "index" + } + ] + }, + { + "name": "rlEnableStatePointer", + "description": "Enable attribute state pointer", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "vertexAttribType" + }, + { + "type": "void *", + "name": "buffer" + } + ] + }, + { + "name": "rlDisableStatePointer", + "description": "Disable attribute state pointer", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "vertexAttribType" + } + ] + }, + { + "name": "rlActiveTextureSlot", + "description": "Select and active a texture slot", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "slot" + } + ] + }, + { + "name": "rlEnableTexture", + "description": "Enable texture", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlDisableTexture", + "description": "Disable texture", + "returnType": "void" + }, + { + "name": "rlEnableTextureCubemap", + "description": "Enable texture cubemap", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlDisableTextureCubemap", + "description": "Disable texture cubemap", + "returnType": "void" + }, + { + "name": "rlTextureParameters", + "description": "Set texture parameters (filter, wrap)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "int", + "name": "param" + }, + { + "type": "int", + "name": "value" + } + ] + }, + { + "name": "rlCubemapParameters", + "description": "Set cubemap parameters (filter, wrap)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "int", + "name": "param" + }, + { + "type": "int", + "name": "value" + } + ] + }, + { + "name": "rlEnableShader", + "description": "Enable shader program", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlDisableShader", + "description": "Disable shader program", + "returnType": "void" + }, + { + "name": "rlEnableFramebuffer", + "description": "Enable render texture (fbo)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlDisableFramebuffer", + "description": "Disable render texture (fbo), return to default framebuffer", + "returnType": "void" + }, + { + "name": "rlActiveDrawBuffers", + "description": "Activate multiple draw color buffers", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "count" + } + ] + }, + { + "name": "rlEnableColorBlend", + "description": "Enable color blending", + "returnType": "void" + }, + { + "name": "rlDisableColorBlend", + "description": "Disable color blending", + "returnType": "void" + }, + { + "name": "rlEnableDepthTest", + "description": "Enable depth test", + "returnType": "void" + }, + { + "name": "rlDisableDepthTest", + "description": "Disable depth test", + "returnType": "void" + }, + { + "name": "rlEnableDepthMask", + "description": "Enable depth write", + "returnType": "void" + }, + { + "name": "rlDisableDepthMask", + "description": "Disable depth write", + "returnType": "void" + }, + { + "name": "rlEnableBackfaceCulling", + "description": "Enable backface culling", + "returnType": "void" + }, + { + "name": "rlDisableBackfaceCulling", + "description": "Disable backface culling", + "returnType": "void" + }, + { + "name": "rlSetCullFace", + "description": "Set face culling mode", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "mode" + } + ] + }, + { + "name": "rlEnableScissorTest", + "description": "Enable scissor test", + "returnType": "void" + }, + { + "name": "rlDisableScissorTest", + "description": "Disable scissor test", + "returnType": "void" + }, + { + "name": "rlScissor", + "description": "Scissor test", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "x" + }, + { + "type": "int", + "name": "y" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "rlEnableWireMode", + "description": "Enable wire mode", + "returnType": "void" + }, + { + "name": "rlDisableWireMode", + "description": "Disable wire mode", + "returnType": "void" + }, + { + "name": "rlSetLineWidth", + "description": "Set the line drawing width", + "returnType": "void", + "params": [ + { + "type": "float", + "name": "width" + } + ] + }, + { + "name": "rlGetLineWidth", + "description": "Get the line drawing width", + "returnType": "float" + }, + { + "name": "rlEnableSmoothLines", + "description": "Enable line aliasing", + "returnType": "void" + }, + { + "name": "rlDisableSmoothLines", + "description": "Disable line aliasing", + "returnType": "void" + }, + { + "name": "rlEnableStereoRender", + "description": "Enable stereo rendering", + "returnType": "void" + }, + { + "name": "rlDisableStereoRender", + "description": "Disable stereo rendering", + "returnType": "void" + }, + { + "name": "rlIsStereoRenderEnabled", + "description": "Check if stereo render is enabled", + "returnType": "bool" + }, + { + "name": "rlClearColor", + "description": "Clear color buffer with color", + "returnType": "void", + "params": [ + { + "type": "unsigned char", + "name": "r" + }, + { + "type": "unsigned char", + "name": "g" + }, + { + "type": "unsigned char", + "name": "b" + }, + { + "type": "unsigned char", + "name": "a" + } + ] + }, + { + "name": "rlClearScreenBuffers", + "description": "Clear used screen buffers (color and depth)", + "returnType": "void" + }, + { + "name": "rlCheckErrors", + "description": "Check and log OpenGL error codes", + "returnType": "void" + }, + { + "name": "rlSetBlendMode", + "description": "Set blending mode", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "mode" + } + ] + }, + { + "name": "rlSetBlendFactors", + "description": "Set blending mode factor and equation (using OpenGL factors)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "glSrcFactor" + }, + { + "type": "int", + "name": "glDstFactor" + }, + { + "type": "int", + "name": "glEquation" + } + ] + }, + { + "name": "rlSetBlendFactorsSeparate", + "description": "Set blending mode factors and equations separately (using OpenGL factors)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "glSrcRGB" + }, + { + "type": "int", + "name": "glDstRGB" + }, + { + "type": "int", + "name": "glSrcAlpha" + }, + { + "type": "int", + "name": "glDstAlpha" + }, + { + "type": "int", + "name": "glEqRGB" + }, + { + "type": "int", + "name": "glEqAlpha" + } + ] + }, + { + "name": "rlglInit", + "description": "Initialize rlgl (buffers, shaders, textures, states)", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "rlglClose", + "description": "De-initialize rlgl (buffers, shaders, textures)", + "returnType": "void" + }, + { + "name": "rlLoadExtensions", + "description": "Load OpenGL extensions (loader function required)", + "returnType": "void", + "params": [ + { + "type": "void *", + "name": "loader" + } + ] + }, + { + "name": "rlGetVersion", + "description": "Get current OpenGL version", + "returnType": "int" + }, + { + "name": "rlSetFramebufferWidth", + "description": "Set current framebuffer width", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "width" + } + ] + }, + { + "name": "rlGetFramebufferWidth", + "description": "Get default framebuffer width", + "returnType": "int" + }, + { + "name": "rlSetFramebufferHeight", + "description": "Set current framebuffer height", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "rlGetFramebufferHeight", + "description": "Get default framebuffer height", + "returnType": "int" + }, + { + "name": "rlGetTextureIdDefault", + "description": "Get default texture id", + "returnType": "unsigned int" + }, + { + "name": "rlGetShaderIdDefault", + "description": "Get default shader id", + "returnType": "unsigned int" + }, + { + "name": "rlGetShaderLocsDefault", + "description": "Get default shader locations", + "returnType": "int *" + }, + { + "name": "rlLoadRenderBatch", + "description": "Load a render batch system", + "returnType": "rlRenderBatch", + "params": [ + { + "type": "int", + "name": "numBuffers" + }, + { + "type": "int", + "name": "bufferElements" + } + ] + }, + { + "name": "rlUnloadRenderBatch", + "description": "Unload render batch system", + "returnType": "void", + "params": [ + { + "type": "rlRenderBatch", + "name": "batch" + } + ] + }, + { + "name": "rlDrawRenderBatch", + "description": "Draw render batch data (Update->Draw->Reset)", + "returnType": "void", + "params": [ + { + "type": "rlRenderBatch *", + "name": "batch" + } + ] + }, + { + "name": "rlSetRenderBatchActive", + "description": "Set the active render batch for rlgl (NULL for default internal)", + "returnType": "void", + "params": [ + { + "type": "rlRenderBatch *", + "name": "batch" + } + ] + }, + { + "name": "rlDrawRenderBatchActive", + "description": "Update and draw internal render batch", + "returnType": "void" + }, + { + "name": "rlCheckRenderBatchLimit", + "description": "Check internal buffer overflow for a given number of vertex", + "returnType": "bool", + "params": [ + { + "type": "int", + "name": "vCount" + } + ] + }, + { + "name": "rlSetTexture", + "description": "Set current texture for render batch and check buffers limits", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlLoadVertexArray", + "description": "Load vertex array (vao) if supported", + "returnType": "unsigned int" + }, + { + "name": "rlLoadVertexBuffer", + "description": "Load a vertex buffer attribute", + "returnType": "unsigned int", + "params": [ + { + "type": "const void *", + "name": "buffer" + }, + { + "type": "int", + "name": "size" + }, + { + "type": "bool", + "name": "dynamic" + } + ] + }, + { + "name": "rlLoadVertexBufferElement", + "description": "Load a new attributes element buffer", + "returnType": "unsigned int", + "params": [ + { + "type": "const void *", + "name": "buffer" + }, + { + "type": "int", + "name": "size" + }, + { + "type": "bool", + "name": "dynamic" + } + ] + }, + { + "name": "rlUpdateVertexBuffer", + "description": "Update GPU buffer with new data", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "bufferId" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int", + "name": "offset" + } + ] + }, + { + "name": "rlUpdateVertexBufferElements", + "description": "Update vertex buffer elements with new data", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "dataSize" + }, + { + "type": "int", + "name": "offset" + } + ] + }, + { + "name": "rlUnloadVertexArray", + "description": "", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "vaoId" + } + ] + }, + { + "name": "rlUnloadVertexBuffer", + "description": "", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "vboId" + } + ] + }, + { + "name": "rlSetVertexAttribute", + "description": "", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "index" + }, + { + "type": "int", + "name": "compSize" + }, + { + "type": "int", + "name": "type" + }, + { + "type": "bool", + "name": "normalized" + }, + { + "type": "int", + "name": "stride" + }, + { + "type": "const void *", + "name": "pointer" + } + ] + }, + { + "name": "rlSetVertexAttributeDivisor", + "description": "", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "index" + }, + { + "type": "int", + "name": "divisor" + } + ] + }, + { + "name": "rlSetVertexAttributeDefault", + "description": "Set vertex attribute default value", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "locIndex" + }, + { + "type": "const void *", + "name": "value" + }, + { + "type": "int", + "name": "attribType" + }, + { + "type": "int", + "name": "count" + } + ] + }, + { + "name": "rlDrawVertexArray", + "description": "", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "offset" + }, + { + "type": "int", + "name": "count" + } + ] + }, + { + "name": "rlDrawVertexArrayElements", + "description": "", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "offset" + }, + { + "type": "int", + "name": "count" + }, + { + "type": "const void *", + "name": "buffer" + } + ] + }, + { + "name": "rlDrawVertexArrayInstanced", + "description": "", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "offset" + }, + { + "type": "int", + "name": "count" + }, + { + "type": "int", + "name": "instances" + } + ] + }, + { + "name": "rlDrawVertexArrayElementsInstanced", + "description": "", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "offset" + }, + { + "type": "int", + "name": "count" + }, + { + "type": "const void *", + "name": "buffer" + }, + { + "type": "int", + "name": "instances" + } + ] + }, + { + "name": "rlLoadTexture", + "description": "Load texture in GPU", + "returnType": "unsigned int", + "params": [ + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "format" + }, + { + "type": "int", + "name": "mipmapCount" + } + ] + }, + { + "name": "rlLoadTextureDepth", + "description": "Load depth texture/renderbuffer (to be attached to fbo)", + "returnType": "unsigned int", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "bool", + "name": "useRenderBuffer" + } + ] + }, + { + "name": "rlLoadTextureCubemap", + "description": "Load texture cubemap", + "returnType": "unsigned int", + "params": [ + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "size" + }, + { + "type": "int", + "name": "format" + } + ] + }, + { + "name": "rlUpdateTexture", + "description": "Update GPU texture with new data", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "int", + "name": "offsetX" + }, + { + "type": "int", + "name": "offsetY" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "format" + }, + { + "type": "const void *", + "name": "data" + } + ] + }, + { + "name": "rlGetGlTextureFormats", + "description": "Get OpenGL internal formats", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "format" + }, + { + "type": "unsigned int *", + "name": "glInternalFormat" + }, + { + "type": "unsigned int *", + "name": "glFormat" + }, + { + "type": "unsigned int *", + "name": "glType" + } + ] + }, + { + "name": "rlGetPixelFormatName", + "description": "Get name string for pixel format", + "returnType": "const char *", + "params": [ + { + "type": "unsigned int", + "name": "format" + } + ] + }, + { + "name": "rlUnloadTexture", + "description": "Unload texture from GPU memory", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlGenTextureMipmaps", + "description": "Generate mipmap data for selected texture", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "format" + }, + { + "type": "int *", + "name": "mipmaps" + } + ] + }, + { + "name": "rlReadTexturePixels", + "description": "Read texture pixel data", + "returnType": "void *", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + }, + { + "type": "int", + "name": "format" + } + ] + }, + { + "name": "rlReadScreenPixels", + "description": "Read screen pixel data (color buffer)", + "returnType": "unsigned char *", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "rlLoadFramebuffer", + "description": "Load an empty framebuffer", + "returnType": "unsigned int", + "params": [ + { + "type": "int", + "name": "width" + }, + { + "type": "int", + "name": "height" + } + ] + }, + { + "name": "rlFramebufferAttach", + "description": "Attach texture/renderbuffer to a framebuffer", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "fboId" + }, + { + "type": "unsigned int", + "name": "texId" + }, + { + "type": "int", + "name": "attachType" + }, + { + "type": "int", + "name": "texType" + }, + { + "type": "int", + "name": "mipLevel" + } + ] + }, + { + "name": "rlFramebufferComplete", + "description": "Verify framebuffer is complete", + "returnType": "bool", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlUnloadFramebuffer", + "description": "Delete framebuffer from GPU", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlLoadShaderCode", + "description": "Load shader from code strings", + "returnType": "unsigned int", + "params": [ + { + "type": "const char *", + "name": "vsCode" + }, + { + "type": "const char *", + "name": "fsCode" + } + ] + }, + { + "name": "rlCompileShader", + "description": "Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)", + "returnType": "unsigned int", + "params": [ + { + "type": "const char *", + "name": "shaderCode" + }, + { + "type": "int", + "name": "type" + } + ] + }, + { + "name": "rlLoadShaderProgram", + "description": "Load custom shader program", + "returnType": "unsigned int", + "params": [ + { + "type": "unsigned int", + "name": "vShaderId" + }, + { + "type": "unsigned int", + "name": "fShaderId" + } + ] + }, + { + "name": "rlUnloadShaderProgram", + "description": "Unload shader program", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlGetLocationUniform", + "description": "Get shader location uniform", + "returnType": "int", + "params": [ + { + "type": "unsigned int", + "name": "shaderId" + }, + { + "type": "const char *", + "name": "uniformName" + } + ] + }, + { + "name": "rlGetLocationAttrib", + "description": "Get shader location attribute", + "returnType": "int", + "params": [ + { + "type": "unsigned int", + "name": "shaderId" + }, + { + "type": "const char *", + "name": "attribName" + } + ] + }, + { + "name": "rlSetUniform", + "description": "Set shader value uniform", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "locIndex" + }, + { + "type": "const void *", + "name": "value" + }, + { + "type": "int", + "name": "uniformType" + }, + { + "type": "int", + "name": "count" + } + ] + }, + { + "name": "rlSetUniformMatrix", + "description": "Set shader value matrix", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "locIndex" + }, + { + "type": "Matrix", + "name": "mat" + } + ] + }, + { + "name": "rlSetUniformSampler", + "description": "Set shader value sampler", + "returnType": "void", + "params": [ + { + "type": "int", + "name": "locIndex" + }, + { + "type": "unsigned int", + "name": "textureId" + } + ] + }, + { + "name": "rlSetShader", + "description": "Set shader currently active (id and locations)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "int *", + "name": "locs" + } + ] + }, + { + "name": "rlLoadComputeShaderProgram", + "description": "Load compute shader program", + "returnType": "unsigned int", + "params": [ + { + "type": "unsigned int", + "name": "shaderId" + } + ] + }, + { + "name": "rlComputeShaderDispatch", + "description": "Dispatch compute shader (equivalent to *draw* for graphics pipeline)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "groupX" + }, + { + "type": "unsigned int", + "name": "groupY" + }, + { + "type": "unsigned int", + "name": "groupZ" + } + ] + }, + { + "name": "rlLoadShaderBuffer", + "description": "Load shader storage buffer object (SSBO)", + "returnType": "unsigned int", + "params": [ + { + "type": "unsigned int", + "name": "size" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "int", + "name": "usageHint" + } + ] + }, + { + "name": "rlUnloadShaderBuffer", + "description": "Unload shader storage buffer object (SSBO)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "ssboId" + } + ] + }, + { + "name": "rlUpdateShaderBuffer", + "description": "Update SSBO buffer data", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "const void *", + "name": "data" + }, + { + "type": "unsigned int", + "name": "dataSize" + }, + { + "type": "unsigned int", + "name": "offset" + } + ] + }, + { + "name": "rlBindShaderBuffer", + "description": "Bind SSBO buffer", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "unsigned int", + "name": "index" + } + ] + }, + { + "name": "rlReadShaderBuffer", + "description": "Read SSBO buffer data (GPU->CPU)", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "void *", + "name": "dest" + }, + { + "type": "unsigned int", + "name": "count" + }, + { + "type": "unsigned int", + "name": "offset" + } + ] + }, + { + "name": "rlCopyShaderBuffer", + "description": "Copy SSBO data between buffers", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "destId" + }, + { + "type": "unsigned int", + "name": "srcId" + }, + { + "type": "unsigned int", + "name": "destOffset" + }, + { + "type": "unsigned int", + "name": "srcOffset" + }, + { + "type": "unsigned int", + "name": "count" + } + ] + }, + { + "name": "rlGetShaderBufferSize", + "description": "Get SSBO buffer size", + "returnType": "unsigned int", + "params": [ + { + "type": "unsigned int", + "name": "id" + } + ] + }, + { + "name": "rlBindImageTexture", + "description": "Bind image texture", + "returnType": "void", + "params": [ + { + "type": "unsigned int", + "name": "id" + }, + { + "type": "unsigned int", + "name": "index" + }, + { + "type": "int", + "name": "format" + }, + { + "type": "bool", + "name": "readonly" + } + ] + }, + { + "name": "rlGetMatrixModelview", + "description": "Get internal modelview matrix", + "returnType": "Matrix" + }, + { + "name": "rlGetMatrixProjection", + "description": "Get internal projection matrix", + "returnType": "Matrix" + }, + { + "name": "rlGetMatrixTransform", + "description": "Get internal accumulated transform matrix", + "returnType": "Matrix" + }, + { + "name": "rlGetMatrixProjectionStereo", + "description": "Get internal projection matrix for stereo render (selected eye)", + "returnType": "Matrix", + "params": [ + { + "type": "int", + "name": "eye" + } + ] + }, + { + "name": "rlGetMatrixViewOffsetStereo", + "description": "Get internal view offset matrix for stereo render (selected eye)", + "returnType": "Matrix", + "params": [ + { + "type": "int", + "name": "eye" + } + ] + }, + { + "name": "rlSetMatrixProjection", + "description": "Set a custom projection matrix (replaces internal projection matrix)", + "returnType": "void", + "params": [ + { + "type": "Matrix", + "name": "proj" + } + ] + }, + { + "name": "rlSetMatrixModelview", + "description": "Set a custom modelview matrix (replaces internal modelview matrix)", + "returnType": "void", + "params": [ + { + "type": "Matrix", + "name": "view" + } + ] + }, + { + "name": "rlSetMatrixProjectionStereo", + "description": "Set eyes projection matrices for stereo rendering", + "returnType": "void", + "params": [ + { + "type": "Matrix", + "name": "right" + }, + { + "type": "Matrix", + "name": "left" + } + ] + }, + { + "name": "rlSetMatrixViewOffsetStereo", + "description": "Set eyes view offsets matrices for stereo rendering", + "returnType": "void", + "params": [ + { + "type": "Matrix", + "name": "right" + }, + { + "type": "Matrix", + "name": "left" + } + ] + }, + { + "name": "rlLoadDrawCube", + "description": "Load and draw a cube", + "returnType": "void" + }, + { + "name": "rlLoadDrawQuad", + "description": "Load and draw a quad", + "returnType": "void" + } + ] +} diff --git a/raylib-api/rlgl.lua b/raylib-api/rlgl.lua new file mode 100644 index 0000000..460e9ad --- /dev/null +++ b/raylib-api/rlgl.lua @@ -0,0 +1,2529 @@ +return { + defines = { + { + name = "RLGL_H", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RLGL_VERSION", + type = "STRING", + value = "4.5", + description = "" + }, + { + name = "RLAPI", + type = "UNKNOWN", + value = "__declspec(dllexport)", + description = "We are building the library as a Win32 shared library (.dll)" + }, + { + name = "TRACELOG(level, ...)", + type = "MACRO", + value = "(void)0", + description = "" + }, + { + name = "TRACELOGD(...)", + type = "MACRO", + value = "(void)0", + description = "" + }, + { + name = "RL_MALLOC(sz)", + type = "MACRO", + value = "malloc(sz)", + description = "" + }, + { + name = "RL_CALLOC(n,sz)", + type = "MACRO", + value = "calloc(n,sz)", + description = "" + }, + { + name = "RL_REALLOC(n,sz)", + type = "MACRO", + value = "realloc(n,sz)", + description = "" + }, + { + name = "RL_FREE(p)", + type = "MACRO", + value = "free(p)", + description = "" + }, + { + name = "GRAPHICS_API_OPENGL_33", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RLGL_RENDER_TEXTURES_HINT", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_DEFAULT_BATCH_BUFFER_ELEMENTS", + type = "INT", + value = 8192, + description = "" + }, + { + name = "RL_DEFAULT_BATCH_BUFFERS", + type = "INT", + value = 1, + description = "Default number of batch buffers (multi-buffering)" + }, + { + name = "RL_DEFAULT_BATCH_DRAWCALLS", + type = "INT", + value = 256, + description = "Default number of batch draw calls (by state changes: mode, texture)" + }, + { + name = "RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS", + type = "INT", + value = 4, + description = "Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())" + }, + { + name = "RL_MAX_MATRIX_STACK_SIZE", + type = "INT", + value = 32, + description = "Maximum size of Matrix stack" + }, + { + name = "RL_MAX_SHADER_LOCATIONS", + type = "INT", + value = 32, + description = "Maximum number of shader locations supported" + }, + { + name = "RL_CULL_DISTANCE_NEAR", + type = "DOUBLE", + value = 0.01, + description = "Default near cull distance" + }, + { + name = "RL_CULL_DISTANCE_FAR", + type = "DOUBLE", + value = 1000.0, + description = "Default far cull distance" + }, + { + name = "RL_TEXTURE_WRAP_S", + type = "INT", + value = 0x2802, + description = "GL_TEXTURE_WRAP_S" + }, + { + name = "RL_TEXTURE_WRAP_T", + type = "INT", + value = 0x2803, + description = "GL_TEXTURE_WRAP_T" + }, + { + name = "RL_TEXTURE_MAG_FILTER", + type = "INT", + value = 0x2800, + description = "GL_TEXTURE_MAG_FILTER" + }, + { + name = "RL_TEXTURE_MIN_FILTER", + type = "INT", + value = 0x2801, + description = "GL_TEXTURE_MIN_FILTER" + }, + { + name = "RL_TEXTURE_FILTER_NEAREST", + type = "INT", + value = 0x2600, + description = "GL_NEAREST" + }, + { + name = "RL_TEXTURE_FILTER_LINEAR", + type = "INT", + value = 0x2601, + description = "GL_LINEAR" + }, + { + name = "RL_TEXTURE_FILTER_MIP_NEAREST", + type = "INT", + value = 0x2700, + description = "GL_NEAREST_MIPMAP_NEAREST" + }, + { + name = "RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR", + type = "INT", + value = 0x2702, + description = "GL_NEAREST_MIPMAP_LINEAR" + }, + { + name = "RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST", + type = "INT", + value = 0x2701, + description = "GL_LINEAR_MIPMAP_NEAREST" + }, + { + name = "RL_TEXTURE_FILTER_MIP_LINEAR", + type = "INT", + value = 0x2703, + description = "GL_LINEAR_MIPMAP_LINEAR" + }, + { + name = "RL_TEXTURE_FILTER_ANISOTROPIC", + type = "INT", + value = 0x3000, + description = "Anisotropic filter (custom identifier)" + }, + { + name = "RL_TEXTURE_MIPMAP_BIAS_RATIO", + type = "INT", + value = 0x4000, + description = "Texture mipmap bias, percentage ratio (custom identifier)" + }, + { + name = "RL_TEXTURE_WRAP_REPEAT", + type = "INT", + value = 0x2901, + description = "GL_REPEAT" + }, + { + name = "RL_TEXTURE_WRAP_CLAMP", + type = "INT", + value = 0x812F, + description = "GL_CLAMP_TO_EDGE" + }, + { + name = "RL_TEXTURE_WRAP_MIRROR_REPEAT", + type = "INT", + value = 0x8370, + description = "GL_MIRRORED_REPEAT" + }, + { + name = "RL_TEXTURE_WRAP_MIRROR_CLAMP", + type = "INT", + value = 0x8742, + description = "GL_MIRROR_CLAMP_EXT" + }, + { + name = "RL_MODELVIEW", + type = "INT", + value = 0x1700, + description = "GL_MODELVIEW" + }, + { + name = "RL_PROJECTION", + type = "INT", + value = 0x1701, + description = "GL_PROJECTION" + }, + { + name = "RL_TEXTURE", + type = "INT", + value = 0x1702, + description = "GL_TEXTURE" + }, + { + name = "RL_LINES", + type = "INT", + value = 0x0001, + description = "GL_LINES" + }, + { + name = "RL_TRIANGLES", + type = "INT", + value = 0x0004, + description = "GL_TRIANGLES" + }, + { + name = "RL_QUADS", + type = "INT", + value = 0x0007, + description = "GL_QUADS" + }, + { + name = "RL_UNSIGNED_BYTE", + type = "INT", + value = 0x1401, + description = "GL_UNSIGNED_BYTE" + }, + { + name = "RL_FLOAT", + type = "INT", + value = 0x1406, + description = "GL_FLOAT" + }, + { + name = "RL_STREAM_DRAW", + type = "INT", + value = 0x88E0, + description = "GL_STREAM_DRAW" + }, + { + name = "RL_STREAM_READ", + type = "INT", + value = 0x88E1, + description = "GL_STREAM_READ" + }, + { + name = "RL_STREAM_COPY", + type = "INT", + value = 0x88E2, + description = "GL_STREAM_COPY" + }, + { + name = "RL_STATIC_DRAW", + type = "INT", + value = 0x88E4, + description = "GL_STATIC_DRAW" + }, + { + name = "RL_STATIC_READ", + type = "INT", + value = 0x88E5, + description = "GL_STATIC_READ" + }, + { + name = "RL_STATIC_COPY", + type = "INT", + value = 0x88E6, + description = "GL_STATIC_COPY" + }, + { + name = "RL_DYNAMIC_DRAW", + type = "INT", + value = 0x88E8, + description = "GL_DYNAMIC_DRAW" + }, + { + name = "RL_DYNAMIC_READ", + type = "INT", + value = 0x88E9, + description = "GL_DYNAMIC_READ" + }, + { + name = "RL_DYNAMIC_COPY", + type = "INT", + value = 0x88EA, + description = "GL_DYNAMIC_COPY" + }, + { + name = "RL_FRAGMENT_SHADER", + type = "INT", + value = 0x8B30, + description = "GL_FRAGMENT_SHADER" + }, + { + name = "RL_VERTEX_SHADER", + type = "INT", + value = 0x8B31, + description = "GL_VERTEX_SHADER" + }, + { + name = "RL_COMPUTE_SHADER", + type = "INT", + value = 0x91B9, + description = "GL_COMPUTE_SHADER" + }, + { + name = "RL_ZERO", + type = "INT", + value = 0, + description = "GL_ZERO" + }, + { + name = "RL_ONE", + type = "INT", + value = 1, + description = "GL_ONE" + }, + { + name = "RL_SRC_COLOR", + type = "INT", + value = 0x0300, + description = "GL_SRC_COLOR" + }, + { + name = "RL_ONE_MINUS_SRC_COLOR", + type = "INT", + value = 0x0301, + description = "GL_ONE_MINUS_SRC_COLOR" + }, + { + name = "RL_SRC_ALPHA", + type = "INT", + value = 0x0302, + description = "GL_SRC_ALPHA" + }, + { + name = "RL_ONE_MINUS_SRC_ALPHA", + type = "INT", + value = 0x0303, + description = "GL_ONE_MINUS_SRC_ALPHA" + }, + { + name = "RL_DST_ALPHA", + type = "INT", + value = 0x0304, + description = "GL_DST_ALPHA" + }, + { + name = "RL_ONE_MINUS_DST_ALPHA", + type = "INT", + value = 0x0305, + description = "GL_ONE_MINUS_DST_ALPHA" + }, + { + name = "RL_DST_COLOR", + type = "INT", + value = 0x0306, + description = "GL_DST_COLOR" + }, + { + name = "RL_ONE_MINUS_DST_COLOR", + type = "INT", + value = 0x0307, + description = "GL_ONE_MINUS_DST_COLOR" + }, + { + name = "RL_SRC_ALPHA_SATURATE", + type = "INT", + value = 0x0308, + description = "GL_SRC_ALPHA_SATURATE" + }, + { + name = "RL_CONSTANT_COLOR", + type = "INT", + value = 0x8001, + description = "GL_CONSTANT_COLOR" + }, + { + name = "RL_ONE_MINUS_CONSTANT_COLOR", + type = "INT", + value = 0x8002, + description = "GL_ONE_MINUS_CONSTANT_COLOR" + }, + { + name = "RL_CONSTANT_ALPHA", + type = "INT", + value = 0x8003, + description = "GL_CONSTANT_ALPHA" + }, + { + name = "RL_ONE_MINUS_CONSTANT_ALPHA", + type = "INT", + value = 0x8004, + description = "GL_ONE_MINUS_CONSTANT_ALPHA" + }, + { + name = "RL_FUNC_ADD", + type = "INT", + value = 0x8006, + description = "GL_FUNC_ADD" + }, + { + name = "RL_MIN", + type = "INT", + value = 0x8007, + description = "GL_MIN" + }, + { + name = "RL_MAX", + type = "INT", + value = 0x8008, + description = "GL_MAX" + }, + { + name = "RL_FUNC_SUBTRACT", + type = "INT", + value = 0x800A, + description = "GL_FUNC_SUBTRACT" + }, + { + name = "RL_FUNC_REVERSE_SUBTRACT", + type = "INT", + value = 0x800B, + description = "GL_FUNC_REVERSE_SUBTRACT" + }, + { + name = "RL_BLEND_EQUATION", + type = "INT", + value = 0x8009, + description = "GL_BLEND_EQUATION" + }, + { + name = "RL_BLEND_EQUATION_RGB", + type = "INT", + value = 0x8009, + description = "GL_BLEND_EQUATION_RGB // (Same as BLEND_EQUATION)" + }, + { + name = "RL_BLEND_EQUATION_ALPHA", + type = "INT", + value = 0x883D, + description = "GL_BLEND_EQUATION_ALPHA" + }, + { + name = "RL_BLEND_DST_RGB", + type = "INT", + value = 0x80C8, + description = "GL_BLEND_DST_RGB" + }, + { + name = "RL_BLEND_SRC_RGB", + type = "INT", + value = 0x80C9, + description = "GL_BLEND_SRC_RGB" + }, + { + name = "RL_BLEND_DST_ALPHA", + type = "INT", + value = 0x80CA, + description = "GL_BLEND_DST_ALPHA" + }, + { + name = "RL_BLEND_SRC_ALPHA", + type = "INT", + value = 0x80CB, + description = "GL_BLEND_SRC_ALPHA" + }, + { + name = "RL_BLEND_COLOR", + type = "INT", + value = 0x8005, + description = "GL_BLEND_COLOR" + }, + { + name = "RL_MATRIX_TYPE", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RL_SHADER_LOC_MAP_DIFFUSE", + type = "UNKNOWN", + value = "RL_SHADER_LOC_MAP_ALBEDO", + description = "" + }, + { + name = "RL_SHADER_LOC_MAP_SPECULAR", + type = "UNKNOWN", + value = "RL_SHADER_LOC_MAP_METALNESS", + description = "" + } + }, + structs = { + { + name = "Matrix", + description = "Matrix, 4x4 components, column major, OpenGL style, right handed", + fields = { + { + type = "float", + name = "m0", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m4", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m8", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m12", + description = "Matrix first row (4 components)" + }, + { + type = "float", + name = "m1", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m5", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m9", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m13", + description = "Matrix second row (4 components)" + }, + { + type = "float", + name = "m2", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m6", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m10", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m14", + description = "Matrix third row (4 components)" + }, + { + type = "float", + name = "m3", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m7", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m11", + description = "Matrix fourth row (4 components)" + }, + { + type = "float", + name = "m15", + description = "Matrix fourth row (4 components)" + } + } + }, + { + name = "rlVertexBuffer", + description = "Dynamic vertex buffers (position + texcoords + colors + indices arrays)", + fields = { + { + type = "int", + name = "elementCount", + description = "Number of elements in the buffer (QUADS)" + }, + { + type = "float *", + name = "vertices", + description = "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)" + }, + { + type = "float *", + name = "texcoords", + description = "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)" + }, + { + type = "unsigned char *", + name = "colors", + description = "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)" + }, + { + type = "#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENunsigned int *", + name = "indices", + description = "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + type = "unsigned int *", + name = "indices", + description = "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + type = "#endif", + name = "indices", + description = "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + type = "#if defined(GRAPHICS_API_OPENGL_ES2)", + name = "indices", + description = "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + type = "unsigned short *", + name = "indices", + description = "Vertex indices (in case vertex data comes indexed) (6 indices per quad)" + }, + { + type = "#endif", + name = "vaoId", + description = "OpenGL Vertex Array Object id" + }, + { + type = "unsigned int", + name = "vaoId", + description = "OpenGL Vertex Array Object id" + }, + { + type = "unsigned int[4]", + name = "vboId", + description = "OpenGL Vertex Buffer Objects id (4 types of vertex data)" + } + } + }, + { + name = "rlDrawCall", + description = "of those state-change happens (this is done in core module)", + fields = { + { + type = "int", + name = "mode", + description = "Drawing mode: LINES, TRIANGLES, QUADS" + }, + { + type = "int", + name = "vertexCount", + description = "Number of vertex of the draw" + }, + { + type = "int", + name = "vertexAlignment", + description = "Number of vertex required for index alignment (LINES, TRIANGLES)" + }, + { + type = "unsigned int", + name = "textureId", + description = "Texture id to be used on the draw -> Use to create new draw call if changes" + } + } + }, + { + name = "rlRenderBatch", + description = "rlRenderBatch type", + fields = { + { + type = "int", + name = "bufferCount", + description = "Number of vertex buffers (multi-buffering support)" + }, + { + type = "int", + name = "currentBuffer", + description = "Current buffer tracking in case of multi-buffering" + }, + { + type = "rlVertexBuffer *", + name = "vertexBuffer", + description = "Dynamic buffer(s) for vertex data" + }, + { + type = "rlDrawCall *", + name = "draws", + description = "Draw calls array, depends on textureId" + }, + { + type = "int", + name = "drawCounter", + description = "Draw calls counter" + }, + { + type = "float", + name = "currentDepth", + description = "Current depth value for next draw" + } + } + } + }, + aliases = { + }, + enums = { + { + name = "rlGlVersion", + description = "OpenGL version", + values = { + { + name = "RL_OPENGL_11", + value = 1, + description = "OpenGL 1.1" + }, + { + name = "RL_OPENGL_21", + value = 2, + description = "OpenGL 2.1 (GLSL 120)" + }, + { + name = "RL_OPENGL_33", + value = 3, + description = "OpenGL 3.3 (GLSL 330)" + }, + { + name = "RL_OPENGL_43", + value = 4, + description = "OpenGL 4.3 (using GLSL 330)" + }, + { + name = "RL_OPENGL_ES_20", + value = 5, + description = "OpenGL ES 2.0 (GLSL 100)" + } + } + }, + { + name = "rlTraceLogLevel", + description = "Trace log level", + values = { + { + name = "RL_LOG_ALL", + value = 0, + description = "Display all logs" + }, + { + name = "RL_LOG_TRACE", + value = 1, + description = "Trace logging, intended for internal use only" + }, + { + name = "RL_LOG_DEBUG", + value = 2, + description = "Debug logging, used for internal debugging, it should be disabled on release builds" + }, + { + name = "RL_LOG_INFO", + value = 3, + description = "Info logging, used for program execution info" + }, + { + name = "RL_LOG_WARNING", + value = 4, + description = "Warning logging, used on recoverable failures" + }, + { + name = "RL_LOG_ERROR", + value = 5, + description = "Error logging, used on unrecoverable failures" + }, + { + name = "RL_LOG_FATAL", + value = 6, + description = "Fatal logging, used to abort program: exit(EXIT_FAILURE)" + }, + { + name = "RL_LOG_NONE", + value = 7, + description = "Disable logging" + } + } + }, + { + name = "rlPixelFormat", + description = "Texture pixel formats", + values = { + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE", + value = 1, + description = "8 bit per pixel (no alpha)" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA", + value = 2, + description = "8*2 bpp (2 channels)" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5", + value = 3, + description = "16 bpp" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8", + value = 4, + description = "24 bpp" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1", + value = 5, + description = "16 bpp (1 bit alpha)" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4", + value = 6, + description = "16 bpp (4 bit alpha)" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8", + value = 7, + description = "32 bpp" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_R32", + value = 8, + description = "32 bpp (1 channel - float)" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32", + value = 9, + description = "32*3 bpp (3 channels - float)" + }, + { + name = "RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32", + value = 10, + description = "32*4 bpp (4 channels - float)" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_DXT1_RGB", + value = 11, + description = "4 bpp (no alpha)" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA", + value = 12, + description = "4 bpp (1 bit alpha)" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA", + value = 13, + description = "8 bpp" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA", + value = 14, + description = "8 bpp" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_ETC1_RGB", + value = 15, + description = "4 bpp" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_ETC2_RGB", + value = 16, + description = "4 bpp" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA", + value = 17, + description = "8 bpp" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_PVRT_RGB", + value = 18, + description = "4 bpp" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA", + value = 19, + description = "4 bpp" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA", + value = 20, + description = "8 bpp" + }, + { + name = "RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA", + value = 21, + description = "2 bpp" + } + } + }, + { + name = "rlTextureFilter", + description = "Texture parameters: filter mode", + values = { + { + name = "RL_TEXTURE_FILTER_POINT", + value = 0, + description = "No filter, just pixel approximation" + }, + { + name = "RL_TEXTURE_FILTER_BILINEAR", + value = 1, + description = "Linear filtering" + }, + { + name = "RL_TEXTURE_FILTER_TRILINEAR", + value = 2, + description = "Trilinear filtering (linear with mipmaps)" + }, + { + name = "RL_TEXTURE_FILTER_ANISOTROPIC_4X", + value = 3, + description = "Anisotropic filtering 4x" + }, + { + name = "RL_TEXTURE_FILTER_ANISOTROPIC_8X", + value = 4, + description = "Anisotropic filtering 8x" + }, + { + name = "RL_TEXTURE_FILTER_ANISOTROPIC_16X", + value = 5, + description = "Anisotropic filtering 16x" + } + } + }, + { + name = "rlBlendMode", + description = "Color blending modes (pre-defined)", + values = { + { + name = "RL_BLEND_ALPHA", + value = 0, + description = "Blend textures considering alpha (default)" + }, + { + name = "RL_BLEND_ADDITIVE", + value = 1, + description = "Blend textures adding colors" + }, + { + name = "RL_BLEND_MULTIPLIED", + value = 2, + description = "Blend textures multiplying colors" + }, + { + name = "RL_BLEND_ADD_COLORS", + value = 3, + description = "Blend textures adding colors (alternative)" + }, + { + name = "RL_BLEND_SUBTRACT_COLORS", + value = 4, + description = "Blend textures subtracting colors (alternative)" + }, + { + name = "RL_BLEND_ALPHA_PREMULTIPLY", + value = 5, + description = "Blend premultiplied textures considering alpha" + }, + { + name = "RL_BLEND_CUSTOM", + value = 6, + description = "Blend textures using custom src/dst factors (use rlSetBlendFactors())" + }, + { + name = "RL_BLEND_CUSTOM_SEPARATE", + value = 7, + description = "Blend textures using custom src/dst factors (use rlSetBlendFactorsSeparate())" + } + } + }, + { + name = "rlShaderLocationIndex", + description = "Shader location point type", + values = { + { + name = "RL_SHADER_LOC_VERTEX_POSITION", + value = 0, + description = "Shader location: vertex attribute: position" + }, + { + name = "RL_SHADER_LOC_VERTEX_TEXCOORD01", + value = 1, + description = "Shader location: vertex attribute: texcoord01" + }, + { + name = "RL_SHADER_LOC_VERTEX_TEXCOORD02", + value = 2, + description = "Shader location: vertex attribute: texcoord02" + }, + { + name = "RL_SHADER_LOC_VERTEX_NORMAL", + value = 3, + description = "Shader location: vertex attribute: normal" + }, + { + name = "RL_SHADER_LOC_VERTEX_TANGENT", + value = 4, + description = "Shader location: vertex attribute: tangent" + }, + { + name = "RL_SHADER_LOC_VERTEX_COLOR", + value = 5, + description = "Shader location: vertex attribute: color" + }, + { + name = "RL_SHADER_LOC_MATRIX_MVP", + value = 6, + description = "Shader location: matrix uniform: model-view-projection" + }, + { + name = "RL_SHADER_LOC_MATRIX_VIEW", + value = 7, + description = "Shader location: matrix uniform: view (camera transform)" + }, + { + name = "RL_SHADER_LOC_MATRIX_PROJECTION", + value = 8, + description = "Shader location: matrix uniform: projection" + }, + { + name = "RL_SHADER_LOC_MATRIX_MODEL", + value = 9, + description = "Shader location: matrix uniform: model (transform)" + }, + { + name = "RL_SHADER_LOC_MATRIX_NORMAL", + value = 10, + description = "Shader location: matrix uniform: normal" + }, + { + name = "RL_SHADER_LOC_VECTOR_VIEW", + value = 11, + description = "Shader location: vector uniform: view" + }, + { + name = "RL_SHADER_LOC_COLOR_DIFFUSE", + value = 12, + description = "Shader location: vector uniform: diffuse color" + }, + { + name = "RL_SHADER_LOC_COLOR_SPECULAR", + value = 13, + description = "Shader location: vector uniform: specular color" + }, + { + name = "RL_SHADER_LOC_COLOR_AMBIENT", + value = 14, + description = "Shader location: vector uniform: ambient color" + }, + { + name = "RL_SHADER_LOC_MAP_ALBEDO", + value = 15, + description = "Shader location: sampler2d texture: albedo (same as: RL_SHADER_LOC_MAP_DIFFUSE)" + }, + { + name = "RL_SHADER_LOC_MAP_METALNESS", + value = 16, + description = "Shader location: sampler2d texture: metalness (same as: RL_SHADER_LOC_MAP_SPECULAR)" + }, + { + name = "RL_SHADER_LOC_MAP_NORMAL", + value = 17, + description = "Shader location: sampler2d texture: normal" + }, + { + name = "RL_SHADER_LOC_MAP_ROUGHNESS", + value = 18, + description = "Shader location: sampler2d texture: roughness" + }, + { + name = "RL_SHADER_LOC_MAP_OCCLUSION", + value = 19, + description = "Shader location: sampler2d texture: occlusion" + }, + { + name = "RL_SHADER_LOC_MAP_EMISSION", + value = 20, + description = "Shader location: sampler2d texture: emission" + }, + { + name = "RL_SHADER_LOC_MAP_HEIGHT", + value = 21, + description = "Shader location: sampler2d texture: height" + }, + { + name = "RL_SHADER_LOC_MAP_CUBEMAP", + value = 22, + description = "Shader location: samplerCube texture: cubemap" + }, + { + name = "RL_SHADER_LOC_MAP_IRRADIANCE", + value = 23, + description = "Shader location: samplerCube texture: irradiance" + }, + { + name = "RL_SHADER_LOC_MAP_PREFILTER", + value = 24, + description = "Shader location: samplerCube texture: prefilter" + }, + { + name = "RL_SHADER_LOC_MAP_BRDF", + value = 25, + description = "Shader location: sampler2d texture: brdf" + } + } + }, + { + name = "rlShaderUniformDataType", + description = "Shader uniform data type", + values = { + { + name = "RL_SHADER_UNIFORM_FLOAT", + value = 0, + description = "Shader uniform type: float" + }, + { + name = "RL_SHADER_UNIFORM_VEC2", + value = 1, + description = "Shader uniform type: vec2 (2 float)" + }, + { + name = "RL_SHADER_UNIFORM_VEC3", + value = 2, + description = "Shader uniform type: vec3 (3 float)" + }, + { + name = "RL_SHADER_UNIFORM_VEC4", + value = 3, + description = "Shader uniform type: vec4 (4 float)" + }, + { + name = "RL_SHADER_UNIFORM_INT", + value = 4, + description = "Shader uniform type: int" + }, + { + name = "RL_SHADER_UNIFORM_IVEC2", + value = 5, + description = "Shader uniform type: ivec2 (2 int)" + }, + { + name = "RL_SHADER_UNIFORM_IVEC3", + value = 6, + description = "Shader uniform type: ivec3 (3 int)" + }, + { + name = "RL_SHADER_UNIFORM_IVEC4", + value = 7, + description = "Shader uniform type: ivec4 (4 int)" + }, + { + name = "RL_SHADER_UNIFORM_SAMPLER2D", + value = 8, + description = "Shader uniform type: sampler2d" + } + } + }, + { + name = "rlShaderAttributeDataType", + description = "Shader attribute data types", + values = { + { + name = "RL_SHADER_ATTRIB_FLOAT", + value = 0, + description = "Shader attribute type: float" + }, + { + name = "RL_SHADER_ATTRIB_VEC2", + value = 1, + description = "Shader attribute type: vec2 (2 float)" + }, + { + name = "RL_SHADER_ATTRIB_VEC3", + value = 2, + description = "Shader attribute type: vec3 (3 float)" + }, + { + name = "RL_SHADER_ATTRIB_VEC4", + value = 3, + description = "Shader attribute type: vec4 (4 float)" + } + } + }, + { + name = "rlFramebufferAttachType", + description = "Framebuffer attachment type", + values = { + { + name = "RL_ATTACHMENT_COLOR_CHANNEL0", + value = 0, + description = "Framebuffer attachment type: color 0" + }, + { + name = "RL_ATTACHMENT_COLOR_CHANNEL1", + value = 1, + description = "Framebuffer attachment type: color 1" + }, + { + name = "RL_ATTACHMENT_COLOR_CHANNEL2", + value = 2, + description = "Framebuffer attachment type: color 2" + }, + { + name = "RL_ATTACHMENT_COLOR_CHANNEL3", + value = 3, + description = "Framebuffer attachment type: color 3" + }, + { + name = "RL_ATTACHMENT_COLOR_CHANNEL4", + value = 4, + description = "Framebuffer attachment type: color 4" + }, + { + name = "RL_ATTACHMENT_COLOR_CHANNEL5", + value = 5, + description = "Framebuffer attachment type: color 5" + }, + { + name = "RL_ATTACHMENT_COLOR_CHANNEL6", + value = 6, + description = "Framebuffer attachment type: color 6" + }, + { + name = "RL_ATTACHMENT_COLOR_CHANNEL7", + value = 7, + description = "Framebuffer attachment type: color 7" + }, + { + name = "RL_ATTACHMENT_DEPTH", + value = 100, + description = "Framebuffer attachment type: depth" + }, + { + name = "RL_ATTACHMENT_STENCIL", + value = 200, + description = "Framebuffer attachment type: stencil" + } + } + }, + { + name = "rlFramebufferAttachTextureType", + description = "Framebuffer texture attachment type", + values = { + { + name = "RL_ATTACHMENT_CUBEMAP_POSITIVE_X", + value = 0, + description = "Framebuffer texture attachment type: cubemap, +X side" + }, + { + name = "RL_ATTACHMENT_CUBEMAP_NEGATIVE_X", + value = 1, + description = "Framebuffer texture attachment type: cubemap, -X side" + }, + { + name = "RL_ATTACHMENT_CUBEMAP_POSITIVE_Y", + value = 2, + description = "Framebuffer texture attachment type: cubemap, +Y side" + }, + { + name = "RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y", + value = 3, + description = "Framebuffer texture attachment type: cubemap, -Y side" + }, + { + name = "RL_ATTACHMENT_CUBEMAP_POSITIVE_Z", + value = 4, + description = "Framebuffer texture attachment type: cubemap, +Z side" + }, + { + name = "RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z", + value = 5, + description = "Framebuffer texture attachment type: cubemap, -Z side" + }, + { + name = "RL_ATTACHMENT_TEXTURE2D", + value = 100, + description = "Framebuffer texture attachment type: texture2d" + }, + { + name = "RL_ATTACHMENT_RENDERBUFFER", + value = 200, + description = "Framebuffer texture attachment type: renderbuffer" + } + } + }, + { + name = "rlCullMode", + description = "Face culling mode", + values = { + { + name = "RL_CULL_FACE_FRONT", + value = 0, + description = "" + }, + { + name = "RL_CULL_FACE_BACK", + value = 1, + description = "" + } + } + } + }, + callbacks = { + }, + functions = { + { + name = "rlMatrixMode", + description = "Choose the current matrix to be transformed", + returnType = "void", + params = { + {type = "int", name = "mode"} + } + }, + { + name = "rlPushMatrix", + description = "Push the current matrix to stack", + returnType = "void" + }, + { + name = "rlPopMatrix", + description = "Pop latest inserted matrix from stack", + returnType = "void" + }, + { + name = "rlLoadIdentity", + description = "Reset current matrix to identity matrix", + returnType = "void" + }, + { + name = "rlTranslatef", + description = "Multiply the current matrix by a translation matrix", + returnType = "void", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"} + } + }, + { + name = "rlRotatef", + description = "Multiply the current matrix by a rotation matrix", + returnType = "void", + params = { + {type = "float", name = "angle"}, + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"} + } + }, + { + name = "rlScalef", + description = "Multiply the current matrix by a scaling matrix", + returnType = "void", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"} + } + }, + { + name = "rlMultMatrixf", + description = "Multiply the current matrix by another matrix", + returnType = "void", + params = { + {type = "const float *", name = "matf"} + } + }, + { + name = "rlFrustum", + description = "", + returnType = "void", + params = { + {type = "double", name = "left"}, + {type = "double", name = "right"}, + {type = "double", name = "bottom"}, + {type = "double", name = "top"}, + {type = "double", name = "znear"}, + {type = "double", name = "zfar"} + } + }, + { + name = "rlOrtho", + description = "", + returnType = "void", + params = { + {type = "double", name = "left"}, + {type = "double", name = "right"}, + {type = "double", name = "bottom"}, + {type = "double", name = "top"}, + {type = "double", name = "znear"}, + {type = "double", name = "zfar"} + } + }, + { + name = "rlViewport", + description = "Set the viewport area", + returnType = "void", + params = { + {type = "int", name = "x"}, + {type = "int", name = "y"}, + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "rlBegin", + description = "Initialize drawing mode (how to organize vertex)", + returnType = "void", + params = { + {type = "int", name = "mode"} + } + }, + { + name = "rlEnd", + description = "Finish vertex providing", + returnType = "void" + }, + { + name = "rlVertex2i", + description = "Define one vertex (position) - 2 int", + returnType = "void", + params = { + {type = "int", name = "x"}, + {type = "int", name = "y"} + } + }, + { + name = "rlVertex2f", + description = "Define one vertex (position) - 2 float", + returnType = "void", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"} + } + }, + { + name = "rlVertex3f", + description = "Define one vertex (position) - 3 float", + returnType = "void", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"} + } + }, + { + name = "rlTexCoord2f", + description = "Define one vertex (texture coordinate) - 2 float", + returnType = "void", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"} + } + }, + { + name = "rlNormal3f", + description = "Define one vertex (normal) - 3 float", + returnType = "void", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"} + } + }, + { + name = "rlColor4ub", + description = "Define one vertex (color) - 4 byte", + returnType = "void", + params = { + {type = "unsigned char", name = "r"}, + {type = "unsigned char", name = "g"}, + {type = "unsigned char", name = "b"}, + {type = "unsigned char", name = "a"} + } + }, + { + name = "rlColor3f", + description = "Define one vertex (color) - 3 float", + returnType = "void", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"} + } + }, + { + name = "rlColor4f", + description = "Define one vertex (color) - 4 float", + returnType = "void", + params = { + {type = "float", name = "x"}, + {type = "float", name = "y"}, + {type = "float", name = "z"}, + {type = "float", name = "w"} + } + }, + { + name = "rlEnableVertexArray", + description = "Enable vertex array (VAO, if supported)", + returnType = "bool", + params = { + {type = "unsigned int", name = "vaoId"} + } + }, + { + name = "rlDisableVertexArray", + description = "Disable vertex array (VAO, if supported)", + returnType = "void" + }, + { + name = "rlEnableVertexBuffer", + description = "Enable vertex buffer (VBO)", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlDisableVertexBuffer", + description = "Disable vertex buffer (VBO)", + returnType = "void" + }, + { + name = "rlEnableVertexBufferElement", + description = "Enable vertex buffer element (VBO element)", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlDisableVertexBufferElement", + description = "Disable vertex buffer element (VBO element)", + returnType = "void" + }, + { + name = "rlEnableVertexAttribute", + description = "Enable vertex attribute index", + returnType = "void", + params = { + {type = "unsigned int", name = "index"} + } + }, + { + name = "rlDisableVertexAttribute", + description = "Disable vertex attribute index", + returnType = "void", + params = { + {type = "unsigned int", name = "index"} + } + }, + { + name = "rlEnableStatePointer", + description = "Enable attribute state pointer", + returnType = "void", + params = { + {type = "int", name = "vertexAttribType"}, + {type = "void *", name = "buffer"} + } + }, + { + name = "rlDisableStatePointer", + description = "Disable attribute state pointer", + returnType = "void", + params = { + {type = "int", name = "vertexAttribType"} + } + }, + { + name = "rlActiveTextureSlot", + description = "Select and active a texture slot", + returnType = "void", + params = { + {type = "int", name = "slot"} + } + }, + { + name = "rlEnableTexture", + description = "Enable texture", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlDisableTexture", + description = "Disable texture", + returnType = "void" + }, + { + name = "rlEnableTextureCubemap", + description = "Enable texture cubemap", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlDisableTextureCubemap", + description = "Disable texture cubemap", + returnType = "void" + }, + { + name = "rlTextureParameters", + description = "Set texture parameters (filter, wrap)", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "int", name = "param"}, + {type = "int", name = "value"} + } + }, + { + name = "rlCubemapParameters", + description = "Set cubemap parameters (filter, wrap)", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "int", name = "param"}, + {type = "int", name = "value"} + } + }, + { + name = "rlEnableShader", + description = "Enable shader program", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlDisableShader", + description = "Disable shader program", + returnType = "void" + }, + { + name = "rlEnableFramebuffer", + description = "Enable render texture (fbo)", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlDisableFramebuffer", + description = "Disable render texture (fbo), return to default framebuffer", + returnType = "void" + }, + { + name = "rlActiveDrawBuffers", + description = "Activate multiple draw color buffers", + returnType = "void", + params = { + {type = "int", name = "count"} + } + }, + { + name = "rlEnableColorBlend", + description = "Enable color blending", + returnType = "void" + }, + { + name = "rlDisableColorBlend", + description = "Disable color blending", + returnType = "void" + }, + { + name = "rlEnableDepthTest", + description = "Enable depth test", + returnType = "void" + }, + { + name = "rlDisableDepthTest", + description = "Disable depth test", + returnType = "void" + }, + { + name = "rlEnableDepthMask", + description = "Enable depth write", + returnType = "void" + }, + { + name = "rlDisableDepthMask", + description = "Disable depth write", + returnType = "void" + }, + { + name = "rlEnableBackfaceCulling", + description = "Enable backface culling", + returnType = "void" + }, + { + name = "rlDisableBackfaceCulling", + description = "Disable backface culling", + returnType = "void" + }, + { + name = "rlSetCullFace", + description = "Set face culling mode", + returnType = "void", + params = { + {type = "int", name = "mode"} + } + }, + { + name = "rlEnableScissorTest", + description = "Enable scissor test", + returnType = "void" + }, + { + name = "rlDisableScissorTest", + description = "Disable scissor test", + returnType = "void" + }, + { + name = "rlScissor", + description = "Scissor test", + returnType = "void", + params = { + {type = "int", name = "x"}, + {type = "int", name = "y"}, + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "rlEnableWireMode", + description = "Enable wire mode", + returnType = "void" + }, + { + name = "rlDisableWireMode", + description = "Disable wire mode", + returnType = "void" + }, + { + name = "rlSetLineWidth", + description = "Set the line drawing width", + returnType = "void", + params = { + {type = "float", name = "width"} + } + }, + { + name = "rlGetLineWidth", + description = "Get the line drawing width", + returnType = "float" + }, + { + name = "rlEnableSmoothLines", + description = "Enable line aliasing", + returnType = "void" + }, + { + name = "rlDisableSmoothLines", + description = "Disable line aliasing", + returnType = "void" + }, + { + name = "rlEnableStereoRender", + description = "Enable stereo rendering", + returnType = "void" + }, + { + name = "rlDisableStereoRender", + description = "Disable stereo rendering", + returnType = "void" + }, + { + name = "rlIsStereoRenderEnabled", + description = "Check if stereo render is enabled", + returnType = "bool" + }, + { + name = "rlClearColor", + description = "Clear color buffer with color", + returnType = "void", + params = { + {type = "unsigned char", name = "r"}, + {type = "unsigned char", name = "g"}, + {type = "unsigned char", name = "b"}, + {type = "unsigned char", name = "a"} + } + }, + { + name = "rlClearScreenBuffers", + description = "Clear used screen buffers (color and depth)", + returnType = "void" + }, + { + name = "rlCheckErrors", + description = "Check and log OpenGL error codes", + returnType = "void" + }, + { + name = "rlSetBlendMode", + description = "Set blending mode", + returnType = "void", + params = { + {type = "int", name = "mode"} + } + }, + { + name = "rlSetBlendFactors", + description = "Set blending mode factor and equation (using OpenGL factors)", + returnType = "void", + params = { + {type = "int", name = "glSrcFactor"}, + {type = "int", name = "glDstFactor"}, + {type = "int", name = "glEquation"} + } + }, + { + name = "rlSetBlendFactorsSeparate", + description = "Set blending mode factors and equations separately (using OpenGL factors)", + returnType = "void", + params = { + {type = "int", name = "glSrcRGB"}, + {type = "int", name = "glDstRGB"}, + {type = "int", name = "glSrcAlpha"}, + {type = "int", name = "glDstAlpha"}, + {type = "int", name = "glEqRGB"}, + {type = "int", name = "glEqAlpha"} + } + }, + { + name = "rlglInit", + description = "Initialize rlgl (buffers, shaders, textures, states)", + returnType = "void", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "rlglClose", + description = "De-initialize rlgl (buffers, shaders, textures)", + returnType = "void" + }, + { + name = "rlLoadExtensions", + description = "Load OpenGL extensions (loader function required)", + returnType = "void", + params = { + {type = "void *", name = "loader"} + } + }, + { + name = "rlGetVersion", + description = "Get current OpenGL version", + returnType = "int" + }, + { + name = "rlSetFramebufferWidth", + description = "Set current framebuffer width", + returnType = "void", + params = { + {type = "int", name = "width"} + } + }, + { + name = "rlGetFramebufferWidth", + description = "Get default framebuffer width", + returnType = "int" + }, + { + name = "rlSetFramebufferHeight", + description = "Set current framebuffer height", + returnType = "void", + params = { + {type = "int", name = "height"} + } + }, + { + name = "rlGetFramebufferHeight", + description = "Get default framebuffer height", + returnType = "int" + }, + { + name = "rlGetTextureIdDefault", + description = "Get default texture id", + returnType = "unsigned int" + }, + { + name = "rlGetShaderIdDefault", + description = "Get default shader id", + returnType = "unsigned int" + }, + { + name = "rlGetShaderLocsDefault", + description = "Get default shader locations", + returnType = "int *" + }, + { + name = "rlLoadRenderBatch", + description = "Load a render batch system", + returnType = "rlRenderBatch", + params = { + {type = "int", name = "numBuffers"}, + {type = "int", name = "bufferElements"} + } + }, + { + name = "rlUnloadRenderBatch", + description = "Unload render batch system", + returnType = "void", + params = { + {type = "rlRenderBatch", name = "batch"} + } + }, + { + name = "rlDrawRenderBatch", + description = "Draw render batch data (Update->Draw->Reset)", + returnType = "void", + params = { + {type = "rlRenderBatch *", name = "batch"} + } + }, + { + name = "rlSetRenderBatchActive", + description = "Set the active render batch for rlgl (NULL for default internal)", + returnType = "void", + params = { + {type = "rlRenderBatch *", name = "batch"} + } + }, + { + name = "rlDrawRenderBatchActive", + description = "Update and draw internal render batch", + returnType = "void" + }, + { + name = "rlCheckRenderBatchLimit", + description = "Check internal buffer overflow for a given number of vertex", + returnType = "bool", + params = { + {type = "int", name = "vCount"} + } + }, + { + name = "rlSetTexture", + description = "Set current texture for render batch and check buffers limits", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlLoadVertexArray", + description = "Load vertex array (vao) if supported", + returnType = "unsigned int" + }, + { + name = "rlLoadVertexBuffer", + description = "Load a vertex buffer attribute", + returnType = "unsigned int", + params = { + {type = "const void *", name = "buffer"}, + {type = "int", name = "size"}, + {type = "bool", name = "dynamic"} + } + }, + { + name = "rlLoadVertexBufferElement", + description = "Load a new attributes element buffer", + returnType = "unsigned int", + params = { + {type = "const void *", name = "buffer"}, + {type = "int", name = "size"}, + {type = "bool", name = "dynamic"} + } + }, + { + name = "rlUpdateVertexBuffer", + description = "Update GPU buffer with new data", + returnType = "void", + params = { + {type = "unsigned int", name = "bufferId"}, + {type = "const void *", name = "data"}, + {type = "int", name = "dataSize"}, + {type = "int", name = "offset"} + } + }, + { + name = "rlUpdateVertexBufferElements", + description = "Update vertex buffer elements with new data", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "const void *", name = "data"}, + {type = "int", name = "dataSize"}, + {type = "int", name = "offset"} + } + }, + { + name = "rlUnloadVertexArray", + description = "", + returnType = "void", + params = { + {type = "unsigned int", name = "vaoId"} + } + }, + { + name = "rlUnloadVertexBuffer", + description = "", + returnType = "void", + params = { + {type = "unsigned int", name = "vboId"} + } + }, + { + name = "rlSetVertexAttribute", + description = "", + returnType = "void", + params = { + {type = "unsigned int", name = "index"}, + {type = "int", name = "compSize"}, + {type = "int", name = "type"}, + {type = "bool", name = "normalized"}, + {type = "int", name = "stride"}, + {type = "const void *", name = "pointer"} + } + }, + { + name = "rlSetVertexAttributeDivisor", + description = "", + returnType = "void", + params = { + {type = "unsigned int", name = "index"}, + {type = "int", name = "divisor"} + } + }, + { + name = "rlSetVertexAttributeDefault", + description = "Set vertex attribute default value", + returnType = "void", + params = { + {type = "int", name = "locIndex"}, + {type = "const void *", name = "value"}, + {type = "int", name = "attribType"}, + {type = "int", name = "count"} + } + }, + { + name = "rlDrawVertexArray", + description = "", + returnType = "void", + params = { + {type = "int", name = "offset"}, + {type = "int", name = "count"} + } + }, + { + name = "rlDrawVertexArrayElements", + description = "", + returnType = "void", + params = { + {type = "int", name = "offset"}, + {type = "int", name = "count"}, + {type = "const void *", name = "buffer"} + } + }, + { + name = "rlDrawVertexArrayInstanced", + description = "", + returnType = "void", + params = { + {type = "int", name = "offset"}, + {type = "int", name = "count"}, + {type = "int", name = "instances"} + } + }, + { + name = "rlDrawVertexArrayElementsInstanced", + description = "", + returnType = "void", + params = { + {type = "int", name = "offset"}, + {type = "int", name = "count"}, + {type = "const void *", name = "buffer"}, + {type = "int", name = "instances"} + } + }, + { + name = "rlLoadTexture", + description = "Load texture in GPU", + returnType = "unsigned int", + params = { + {type = "const void *", name = "data"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "format"}, + {type = "int", name = "mipmapCount"} + } + }, + { + name = "rlLoadTextureDepth", + description = "Load depth texture/renderbuffer (to be attached to fbo)", + returnType = "unsigned int", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "bool", name = "useRenderBuffer"} + } + }, + { + name = "rlLoadTextureCubemap", + description = "Load texture cubemap", + returnType = "unsigned int", + params = { + {type = "const void *", name = "data"}, + {type = "int", name = "size"}, + {type = "int", name = "format"} + } + }, + { + name = "rlUpdateTexture", + description = "Update GPU texture with new data", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "int", name = "offsetX"}, + {type = "int", name = "offsetY"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "format"}, + {type = "const void *", name = "data"} + } + }, + { + name = "rlGetGlTextureFormats", + description = "Get OpenGL internal formats", + returnType = "void", + params = { + {type = "int", name = "format"}, + {type = "unsigned int *", name = "glInternalFormat"}, + {type = "unsigned int *", name = "glFormat"}, + {type = "unsigned int *", name = "glType"} + } + }, + { + name = "rlGetPixelFormatName", + description = "Get name string for pixel format", + returnType = "const char *", + params = { + {type = "unsigned int", name = "format"} + } + }, + { + name = "rlUnloadTexture", + description = "Unload texture from GPU memory", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlGenTextureMipmaps", + description = "Generate mipmap data for selected texture", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "format"}, + {type = "int *", name = "mipmaps"} + } + }, + { + name = "rlReadTexturePixels", + description = "Read texture pixel data", + returnType = "void *", + params = { + {type = "unsigned int", name = "id"}, + {type = "int", name = "width"}, + {type = "int", name = "height"}, + {type = "int", name = "format"} + } + }, + { + name = "rlReadScreenPixels", + description = "Read screen pixel data (color buffer)", + returnType = "unsigned char *", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "rlLoadFramebuffer", + description = "Load an empty framebuffer", + returnType = "unsigned int", + params = { + {type = "int", name = "width"}, + {type = "int", name = "height"} + } + }, + { + name = "rlFramebufferAttach", + description = "Attach texture/renderbuffer to a framebuffer", + returnType = "void", + params = { + {type = "unsigned int", name = "fboId"}, + {type = "unsigned int", name = "texId"}, + {type = "int", name = "attachType"}, + {type = "int", name = "texType"}, + {type = "int", name = "mipLevel"} + } + }, + { + name = "rlFramebufferComplete", + description = "Verify framebuffer is complete", + returnType = "bool", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlUnloadFramebuffer", + description = "Delete framebuffer from GPU", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlLoadShaderCode", + description = "Load shader from code strings", + returnType = "unsigned int", + params = { + {type = "const char *", name = "vsCode"}, + {type = "const char *", name = "fsCode"} + } + }, + { + name = "rlCompileShader", + description = "Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)", + returnType = "unsigned int", + params = { + {type = "const char *", name = "shaderCode"}, + {type = "int", name = "type"} + } + }, + { + name = "rlLoadShaderProgram", + description = "Load custom shader program", + returnType = "unsigned int", + params = { + {type = "unsigned int", name = "vShaderId"}, + {type = "unsigned int", name = "fShaderId"} + } + }, + { + name = "rlUnloadShaderProgram", + description = "Unload shader program", + returnType = "void", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlGetLocationUniform", + description = "Get shader location uniform", + returnType = "int", + params = { + {type = "unsigned int", name = "shaderId"}, + {type = "const char *", name = "uniformName"} + } + }, + { + name = "rlGetLocationAttrib", + description = "Get shader location attribute", + returnType = "int", + params = { + {type = "unsigned int", name = "shaderId"}, + {type = "const char *", name = "attribName"} + } + }, + { + name = "rlSetUniform", + description = "Set shader value uniform", + returnType = "void", + params = { + {type = "int", name = "locIndex"}, + {type = "const void *", name = "value"}, + {type = "int", name = "uniformType"}, + {type = "int", name = "count"} + } + }, + { + name = "rlSetUniformMatrix", + description = "Set shader value matrix", + returnType = "void", + params = { + {type = "int", name = "locIndex"}, + {type = "Matrix", name = "mat"} + } + }, + { + name = "rlSetUniformSampler", + description = "Set shader value sampler", + returnType = "void", + params = { + {type = "int", name = "locIndex"}, + {type = "unsigned int", name = "textureId"} + } + }, + { + name = "rlSetShader", + description = "Set shader currently active (id and locations)", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "int *", name = "locs"} + } + }, + { + name = "rlLoadComputeShaderProgram", + description = "Load compute shader program", + returnType = "unsigned int", + params = { + {type = "unsigned int", name = "shaderId"} + } + }, + { + name = "rlComputeShaderDispatch", + description = "Dispatch compute shader (equivalent to *draw* for graphics pipeline)", + returnType = "void", + params = { + {type = "unsigned int", name = "groupX"}, + {type = "unsigned int", name = "groupY"}, + {type = "unsigned int", name = "groupZ"} + } + }, + { + name = "rlLoadShaderBuffer", + description = "Load shader storage buffer object (SSBO)", + returnType = "unsigned int", + params = { + {type = "unsigned int", name = "size"}, + {type = "const void *", name = "data"}, + {type = "int", name = "usageHint"} + } + }, + { + name = "rlUnloadShaderBuffer", + description = "Unload shader storage buffer object (SSBO)", + returnType = "void", + params = { + {type = "unsigned int", name = "ssboId"} + } + }, + { + name = "rlUpdateShaderBuffer", + description = "Update SSBO buffer data", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "const void *", name = "data"}, + {type = "unsigned int", name = "dataSize"}, + {type = "unsigned int", name = "offset"} + } + }, + { + name = "rlBindShaderBuffer", + description = "Bind SSBO buffer", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "unsigned int", name = "index"} + } + }, + { + name = "rlReadShaderBuffer", + description = "Read SSBO buffer data (GPU->CPU)", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "void *", name = "dest"}, + {type = "unsigned int", name = "count"}, + {type = "unsigned int", name = "offset"} + } + }, + { + name = "rlCopyShaderBuffer", + description = "Copy SSBO data between buffers", + returnType = "void", + params = { + {type = "unsigned int", name = "destId"}, + {type = "unsigned int", name = "srcId"}, + {type = "unsigned int", name = "destOffset"}, + {type = "unsigned int", name = "srcOffset"}, + {type = "unsigned int", name = "count"} + } + }, + { + name = "rlGetShaderBufferSize", + description = "Get SSBO buffer size", + returnType = "unsigned int", + params = { + {type = "unsigned int", name = "id"} + } + }, + { + name = "rlBindImageTexture", + description = "Bind image texture", + returnType = "void", + params = { + {type = "unsigned int", name = "id"}, + {type = "unsigned int", name = "index"}, + {type = "int", name = "format"}, + {type = "bool", name = "readonly"} + } + }, + { + name = "rlGetMatrixModelview", + description = "Get internal modelview matrix", + returnType = "Matrix" + }, + { + name = "rlGetMatrixProjection", + description = "Get internal projection matrix", + returnType = "Matrix" + }, + { + name = "rlGetMatrixTransform", + description = "Get internal accumulated transform matrix", + returnType = "Matrix" + }, + { + name = "rlGetMatrixProjectionStereo", + description = "Get internal projection matrix for stereo render (selected eye)", + returnType = "Matrix", + params = { + {type = "int", name = "eye"} + } + }, + { + name = "rlGetMatrixViewOffsetStereo", + description = "Get internal view offset matrix for stereo render (selected eye)", + returnType = "Matrix", + params = { + {type = "int", name = "eye"} + } + }, + { + name = "rlSetMatrixProjection", + description = "Set a custom projection matrix (replaces internal projection matrix)", + returnType = "void", + params = { + {type = "Matrix", name = "proj"} + } + }, + { + name = "rlSetMatrixModelview", + description = "Set a custom modelview matrix (replaces internal modelview matrix)", + returnType = "void", + params = { + {type = "Matrix", name = "view"} + } + }, + { + name = "rlSetMatrixProjectionStereo", + description = "Set eyes projection matrices for stereo rendering", + returnType = "void", + params = { + {type = "Matrix", name = "right"}, + {type = "Matrix", name = "left"} + } + }, + { + name = "rlSetMatrixViewOffsetStereo", + description = "Set eyes view offsets matrices for stereo rendering", + returnType = "void", + params = { + {type = "Matrix", name = "right"}, + {type = "Matrix", name = "left"} + } + }, + { + name = "rlLoadDrawCube", + description = "Load and draw a cube", + returnType = "void" + }, + { + name = "rlLoadDrawQuad", + description = "Load and draw a quad", + returnType = "void" + } + } +} diff --git a/raylib-api/rlgl.txt b/raylib-api/rlgl.txt new file mode 100644 index 0000000..933ddfc --- /dev/null +++ b/raylib-api/rlgl.txt @@ -0,0 +1,1516 @@ + +Defines found: 86 + +Define 001: RLGL_H + Name: RLGL_H + Type: GUARD + Value: + Description: +Define 002: RLGL_VERSION + Name: RLGL_VERSION + Type: STRING + Value: "4.5" + Description: +Define 003: RLAPI + Name: RLAPI + Type: UNKNOWN + Value: __declspec(dllexport) + Description: We are building the library as a Win32 shared library (.dll) +Define 004: TRACELOG(level, ...) + Name: TRACELOG(level, ...) + Type: MACRO + Value: (void)0 + Description: +Define 005: TRACELOGD(...) + Name: TRACELOGD(...) + Type: MACRO + Value: (void)0 + Description: +Define 006: RL_MALLOC(sz) + Name: RL_MALLOC(sz) + Type: MACRO + Value: malloc(sz) + Description: +Define 007: RL_CALLOC(n,sz) + Name: RL_CALLOC(n,sz) + Type: MACRO + Value: calloc(n,sz) + Description: +Define 008: RL_REALLOC(n,sz) + Name: RL_REALLOC(n,sz) + Type: MACRO + Value: realloc(n,sz) + Description: +Define 009: RL_FREE(p) + Name: RL_FREE(p) + Type: MACRO + Value: free(p) + Description: +Define 010: GRAPHICS_API_OPENGL_33 + Name: GRAPHICS_API_OPENGL_33 + Type: GUARD + Value: + Description: +Define 011: RLGL_RENDER_TEXTURES_HINT + Name: RLGL_RENDER_TEXTURES_HINT + Type: GUARD + Value: + Description: +Define 012: RL_DEFAULT_BATCH_BUFFER_ELEMENTS + Name: RL_DEFAULT_BATCH_BUFFER_ELEMENTS + Type: INT + Value: 8192 + Description: +Define 013: RL_DEFAULT_BATCH_BUFFERS + Name: RL_DEFAULT_BATCH_BUFFERS + Type: INT + Value: 1 + Description: Default number of batch buffers (multi-buffering) +Define 014: RL_DEFAULT_BATCH_DRAWCALLS + Name: RL_DEFAULT_BATCH_DRAWCALLS + Type: INT + Value: 256 + Description: Default number of batch draw calls (by state changes: mode, texture) +Define 015: RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS + Name: RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS + Type: INT + Value: 4 + Description: Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture()) +Define 016: RL_MAX_MATRIX_STACK_SIZE + Name: RL_MAX_MATRIX_STACK_SIZE + Type: INT + Value: 32 + Description: Maximum size of Matrix stack +Define 017: RL_MAX_SHADER_LOCATIONS + Name: RL_MAX_SHADER_LOCATIONS + Type: INT + Value: 32 + Description: Maximum number of shader locations supported +Define 018: RL_CULL_DISTANCE_NEAR + Name: RL_CULL_DISTANCE_NEAR + Type: DOUBLE + Value: 0.01 + Description: Default near cull distance +Define 019: RL_CULL_DISTANCE_FAR + Name: RL_CULL_DISTANCE_FAR + Type: DOUBLE + Value: 1000.0 + Description: Default far cull distance +Define 020: RL_TEXTURE_WRAP_S + Name: RL_TEXTURE_WRAP_S + Type: INT + Value: 0x2802 + Description: GL_TEXTURE_WRAP_S +Define 021: RL_TEXTURE_WRAP_T + Name: RL_TEXTURE_WRAP_T + Type: INT + Value: 0x2803 + Description: GL_TEXTURE_WRAP_T +Define 022: RL_TEXTURE_MAG_FILTER + Name: RL_TEXTURE_MAG_FILTER + Type: INT + Value: 0x2800 + Description: GL_TEXTURE_MAG_FILTER +Define 023: RL_TEXTURE_MIN_FILTER + Name: RL_TEXTURE_MIN_FILTER + Type: INT + Value: 0x2801 + Description: GL_TEXTURE_MIN_FILTER +Define 024: RL_TEXTURE_FILTER_NEAREST + Name: RL_TEXTURE_FILTER_NEAREST + Type: INT + Value: 0x2600 + Description: GL_NEAREST +Define 025: RL_TEXTURE_FILTER_LINEAR + Name: RL_TEXTURE_FILTER_LINEAR + Type: INT + Value: 0x2601 + Description: GL_LINEAR +Define 026: RL_TEXTURE_FILTER_MIP_NEAREST + Name: RL_TEXTURE_FILTER_MIP_NEAREST + Type: INT + Value: 0x2700 + Description: GL_NEAREST_MIPMAP_NEAREST +Define 027: RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR + Name: RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR + Type: INT + Value: 0x2702 + Description: GL_NEAREST_MIPMAP_LINEAR +Define 028: RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST + Name: RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST + Type: INT + Value: 0x2701 + Description: GL_LINEAR_MIPMAP_NEAREST +Define 029: RL_TEXTURE_FILTER_MIP_LINEAR + Name: RL_TEXTURE_FILTER_MIP_LINEAR + Type: INT + Value: 0x2703 + Description: GL_LINEAR_MIPMAP_LINEAR +Define 030: RL_TEXTURE_FILTER_ANISOTROPIC + Name: RL_TEXTURE_FILTER_ANISOTROPIC + Type: INT + Value: 0x3000 + Description: Anisotropic filter (custom identifier) +Define 031: RL_TEXTURE_MIPMAP_BIAS_RATIO + Name: RL_TEXTURE_MIPMAP_BIAS_RATIO + Type: INT + Value: 0x4000 + Description: Texture mipmap bias, percentage ratio (custom identifier) +Define 032: RL_TEXTURE_WRAP_REPEAT + Name: RL_TEXTURE_WRAP_REPEAT + Type: INT + Value: 0x2901 + Description: GL_REPEAT +Define 033: RL_TEXTURE_WRAP_CLAMP + Name: RL_TEXTURE_WRAP_CLAMP + Type: INT + Value: 0x812F + Description: GL_CLAMP_TO_EDGE +Define 034: RL_TEXTURE_WRAP_MIRROR_REPEAT + Name: RL_TEXTURE_WRAP_MIRROR_REPEAT + Type: INT + Value: 0x8370 + Description: GL_MIRRORED_REPEAT +Define 035: RL_TEXTURE_WRAP_MIRROR_CLAMP + Name: RL_TEXTURE_WRAP_MIRROR_CLAMP + Type: INT + Value: 0x8742 + Description: GL_MIRROR_CLAMP_EXT +Define 036: RL_MODELVIEW + Name: RL_MODELVIEW + Type: INT + Value: 0x1700 + Description: GL_MODELVIEW +Define 037: RL_PROJECTION + Name: RL_PROJECTION + Type: INT + Value: 0x1701 + Description: GL_PROJECTION +Define 038: RL_TEXTURE + Name: RL_TEXTURE + Type: INT + Value: 0x1702 + Description: GL_TEXTURE +Define 039: RL_LINES + Name: RL_LINES + Type: INT + Value: 0x0001 + Description: GL_LINES +Define 040: RL_TRIANGLES + Name: RL_TRIANGLES + Type: INT + Value: 0x0004 + Description: GL_TRIANGLES +Define 041: RL_QUADS + Name: RL_QUADS + Type: INT + Value: 0x0007 + Description: GL_QUADS +Define 042: RL_UNSIGNED_BYTE + Name: RL_UNSIGNED_BYTE + Type: INT + Value: 0x1401 + Description: GL_UNSIGNED_BYTE +Define 043: RL_FLOAT + Name: RL_FLOAT + Type: INT + Value: 0x1406 + Description: GL_FLOAT +Define 044: RL_STREAM_DRAW + Name: RL_STREAM_DRAW + Type: INT + Value: 0x88E0 + Description: GL_STREAM_DRAW +Define 045: RL_STREAM_READ + Name: RL_STREAM_READ + Type: INT + Value: 0x88E1 + Description: GL_STREAM_READ +Define 046: RL_STREAM_COPY + Name: RL_STREAM_COPY + Type: INT + Value: 0x88E2 + Description: GL_STREAM_COPY +Define 047: RL_STATIC_DRAW + Name: RL_STATIC_DRAW + Type: INT + Value: 0x88E4 + Description: GL_STATIC_DRAW +Define 048: RL_STATIC_READ + Name: RL_STATIC_READ + Type: INT + Value: 0x88E5 + Description: GL_STATIC_READ +Define 049: RL_STATIC_COPY + Name: RL_STATIC_COPY + Type: INT + Value: 0x88E6 + Description: GL_STATIC_COPY +Define 050: RL_DYNAMIC_DRAW + Name: RL_DYNAMIC_DRAW + Type: INT + Value: 0x88E8 + Description: GL_DYNAMIC_DRAW +Define 051: RL_DYNAMIC_READ + Name: RL_DYNAMIC_READ + Type: INT + Value: 0x88E9 + Description: GL_DYNAMIC_READ +Define 052: RL_DYNAMIC_COPY + Name: RL_DYNAMIC_COPY + Type: INT + Value: 0x88EA + Description: GL_DYNAMIC_COPY +Define 053: RL_FRAGMENT_SHADER + Name: RL_FRAGMENT_SHADER + Type: INT + Value: 0x8B30 + Description: GL_FRAGMENT_SHADER +Define 054: RL_VERTEX_SHADER + Name: RL_VERTEX_SHADER + Type: INT + Value: 0x8B31 + Description: GL_VERTEX_SHADER +Define 055: RL_COMPUTE_SHADER + Name: RL_COMPUTE_SHADER + Type: INT + Value: 0x91B9 + Description: GL_COMPUTE_SHADER +Define 056: RL_ZERO + Name: RL_ZERO + Type: INT + Value: 0 + Description: GL_ZERO +Define 057: RL_ONE + Name: RL_ONE + Type: INT + Value: 1 + Description: GL_ONE +Define 058: RL_SRC_COLOR + Name: RL_SRC_COLOR + Type: INT + Value: 0x0300 + Description: GL_SRC_COLOR +Define 059: RL_ONE_MINUS_SRC_COLOR + Name: RL_ONE_MINUS_SRC_COLOR + Type: INT + Value: 0x0301 + Description: GL_ONE_MINUS_SRC_COLOR +Define 060: RL_SRC_ALPHA + Name: RL_SRC_ALPHA + Type: INT + Value: 0x0302 + Description: GL_SRC_ALPHA +Define 061: RL_ONE_MINUS_SRC_ALPHA + Name: RL_ONE_MINUS_SRC_ALPHA + Type: INT + Value: 0x0303 + Description: GL_ONE_MINUS_SRC_ALPHA +Define 062: RL_DST_ALPHA + Name: RL_DST_ALPHA + Type: INT + Value: 0x0304 + Description: GL_DST_ALPHA +Define 063: RL_ONE_MINUS_DST_ALPHA + Name: RL_ONE_MINUS_DST_ALPHA + Type: INT + Value: 0x0305 + Description: GL_ONE_MINUS_DST_ALPHA +Define 064: RL_DST_COLOR + Name: RL_DST_COLOR + Type: INT + Value: 0x0306 + Description: GL_DST_COLOR +Define 065: RL_ONE_MINUS_DST_COLOR + Name: RL_ONE_MINUS_DST_COLOR + Type: INT + Value: 0x0307 + Description: GL_ONE_MINUS_DST_COLOR +Define 066: RL_SRC_ALPHA_SATURATE + Name: RL_SRC_ALPHA_SATURATE + Type: INT + Value: 0x0308 + Description: GL_SRC_ALPHA_SATURATE +Define 067: RL_CONSTANT_COLOR + Name: RL_CONSTANT_COLOR + Type: INT + Value: 0x8001 + Description: GL_CONSTANT_COLOR +Define 068: RL_ONE_MINUS_CONSTANT_COLOR + Name: RL_ONE_MINUS_CONSTANT_COLOR + Type: INT + Value: 0x8002 + Description: GL_ONE_MINUS_CONSTANT_COLOR +Define 069: RL_CONSTANT_ALPHA + Name: RL_CONSTANT_ALPHA + Type: INT + Value: 0x8003 + Description: GL_CONSTANT_ALPHA +Define 070: RL_ONE_MINUS_CONSTANT_ALPHA + Name: RL_ONE_MINUS_CONSTANT_ALPHA + Type: INT + Value: 0x8004 + Description: GL_ONE_MINUS_CONSTANT_ALPHA +Define 071: RL_FUNC_ADD + Name: RL_FUNC_ADD + Type: INT + Value: 0x8006 + Description: GL_FUNC_ADD +Define 072: RL_MIN + Name: RL_MIN + Type: INT + Value: 0x8007 + Description: GL_MIN +Define 073: RL_MAX + Name: RL_MAX + Type: INT + Value: 0x8008 + Description: GL_MAX +Define 074: RL_FUNC_SUBTRACT + Name: RL_FUNC_SUBTRACT + Type: INT + Value: 0x800A + Description: GL_FUNC_SUBTRACT +Define 075: RL_FUNC_REVERSE_SUBTRACT + Name: RL_FUNC_REVERSE_SUBTRACT + Type: INT + Value: 0x800B + Description: GL_FUNC_REVERSE_SUBTRACT +Define 076: RL_BLEND_EQUATION + Name: RL_BLEND_EQUATION + Type: INT + Value: 0x8009 + Description: GL_BLEND_EQUATION +Define 077: RL_BLEND_EQUATION_RGB + Name: RL_BLEND_EQUATION_RGB + Type: INT + Value: 0x8009 + Description: GL_BLEND_EQUATION_RGB // (Same as BLEND_EQUATION) +Define 078: RL_BLEND_EQUATION_ALPHA + Name: RL_BLEND_EQUATION_ALPHA + Type: INT + Value: 0x883D + Description: GL_BLEND_EQUATION_ALPHA +Define 079: RL_BLEND_DST_RGB + Name: RL_BLEND_DST_RGB + Type: INT + Value: 0x80C8 + Description: GL_BLEND_DST_RGB +Define 080: RL_BLEND_SRC_RGB + Name: RL_BLEND_SRC_RGB + Type: INT + Value: 0x80C9 + Description: GL_BLEND_SRC_RGB +Define 081: RL_BLEND_DST_ALPHA + Name: RL_BLEND_DST_ALPHA + Type: INT + Value: 0x80CA + Description: GL_BLEND_DST_ALPHA +Define 082: RL_BLEND_SRC_ALPHA + Name: RL_BLEND_SRC_ALPHA + Type: INT + Value: 0x80CB + Description: GL_BLEND_SRC_ALPHA +Define 083: RL_BLEND_COLOR + Name: RL_BLEND_COLOR + Type: INT + Value: 0x8005 + Description: GL_BLEND_COLOR +Define 084: RL_MATRIX_TYPE + Name: RL_MATRIX_TYPE + Type: GUARD + Value: + Description: +Define 085: RL_SHADER_LOC_MAP_DIFFUSE + Name: RL_SHADER_LOC_MAP_DIFFUSE + Type: UNKNOWN + Value: RL_SHADER_LOC_MAP_ALBEDO + Description: +Define 086: RL_SHADER_LOC_MAP_SPECULAR + Name: RL_SHADER_LOC_MAP_SPECULAR + Type: UNKNOWN + Value: RL_SHADER_LOC_MAP_METALNESS + Description: + +Structures found: 4 + +Struct 01: Matrix (16 fields) + Name: Matrix + Description: Matrix, 4x4 components, column major, OpenGL style, right handed + Field[1]: float m0 // Matrix first row (4 components) + Field[2]: float m4 // Matrix first row (4 components) + Field[3]: float m8 // Matrix first row (4 components) + Field[4]: float m12 // Matrix first row (4 components) + Field[5]: float m1 // Matrix second row (4 components) + Field[6]: float m5 // Matrix second row (4 components) + Field[7]: float m9 // Matrix second row (4 components) + Field[8]: float m13 // Matrix second row (4 components) + Field[9]: float m2 // Matrix third row (4 components) + Field[10]: float m6 // Matrix third row (4 components) + Field[11]: float m10 // Matrix third row (4 components) + Field[12]: float m14 // Matrix third row (4 components) + Field[13]: float m3 // Matrix fourth row (4 components) + Field[14]: float m7 // Matrix fourth row (4 components) + Field[15]: float m11 // Matrix fourth row (4 components) + Field[16]: float m15 // Matrix fourth row (4 components) +Struct 02: rlVertexBuffer (12 fields) + Name: rlVertexBuffer + Description: Dynamic vertex buffers (position + texcoords + colors + indices arrays) + Field[1]: int elementCount // Number of elements in the buffer (QUADS) + Field[2]: float * vertices // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) + Field[3]: float * texcoords // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) + Field[4]: unsigned char * colors // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) + Field[5]: #if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENunsigned int * indices // Vertex indices (in case vertex data comes indexed) (6 indices per quad) + Field[6]: unsigned int * indices // Vertex indices (in case vertex data comes indexed) (6 indices per quad) + Field[7]: #endif indices // Vertex indices (in case vertex data comes indexed) (6 indices per quad) + Field[8]: #if defined(GRAPHICS_API_OPENGL_ES2) indices // Vertex indices (in case vertex data comes indexed) (6 indices per quad) + Field[9]: unsigned short * indices // Vertex indices (in case vertex data comes indexed) (6 indices per quad) + Field[10]: #endif vaoId // OpenGL Vertex Array Object id + Field[11]: unsigned int vaoId // OpenGL Vertex Array Object id + Field[12]: unsigned int[4] vboId // OpenGL Vertex Buffer Objects id (4 types of vertex data) +Struct 03: rlDrawCall (4 fields) + Name: rlDrawCall + Description: of those state-change happens (this is done in core module) + Field[1]: int mode // Drawing mode: LINES, TRIANGLES, QUADS + Field[2]: int vertexCount // Number of vertex of the draw + Field[3]: int vertexAlignment // Number of vertex required for index alignment (LINES, TRIANGLES) + Field[4]: unsigned int textureId // Texture id to be used on the draw -> Use to create new draw call if changes +Struct 04: rlRenderBatch (6 fields) + Name: rlRenderBatch + Description: rlRenderBatch type + Field[1]: int bufferCount // Number of vertex buffers (multi-buffering support) + Field[2]: int currentBuffer // Current buffer tracking in case of multi-buffering + Field[3]: rlVertexBuffer * vertexBuffer // Dynamic buffer(s) for vertex data + Field[4]: rlDrawCall * draws // Draw calls array, depends on textureId + Field[5]: int drawCounter // Draw calls counter + Field[6]: float currentDepth // Current depth value for next draw + +Aliases found: 0 + + +Enums found: 11 + +Enum 01: rlGlVersion (5 values) + Name: rlGlVersion + Description: OpenGL version + Value[RL_OPENGL_11]: 1 + Value[RL_OPENGL_21]: 2 + Value[RL_OPENGL_33]: 3 + Value[RL_OPENGL_43]: 4 + Value[RL_OPENGL_ES_20]: 5 +Enum 02: rlTraceLogLevel (8 values) + Name: rlTraceLogLevel + Description: Trace log level + Value[RL_LOG_ALL]: 0 + Value[RL_LOG_TRACE]: 1 + Value[RL_LOG_DEBUG]: 2 + Value[RL_LOG_INFO]: 3 + Value[RL_LOG_WARNING]: 4 + Value[RL_LOG_ERROR]: 5 + Value[RL_LOG_FATAL]: 6 + Value[RL_LOG_NONE]: 7 +Enum 03: rlPixelFormat (21 values) + Name: rlPixelFormat + Description: Texture pixel formats + Value[RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE]: 1 + Value[RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA]: 2 + Value[RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5]: 3 + Value[RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8]: 4 + Value[RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1]: 5 + Value[RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4]: 6 + Value[RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8]: 7 + Value[RL_PIXELFORMAT_UNCOMPRESSED_R32]: 8 + Value[RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32]: 9 + Value[RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32]: 10 + Value[RL_PIXELFORMAT_COMPRESSED_DXT1_RGB]: 11 + Value[RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA]: 12 + Value[RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA]: 13 + Value[RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA]: 14 + Value[RL_PIXELFORMAT_COMPRESSED_ETC1_RGB]: 15 + Value[RL_PIXELFORMAT_COMPRESSED_ETC2_RGB]: 16 + Value[RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA]: 17 + Value[RL_PIXELFORMAT_COMPRESSED_PVRT_RGB]: 18 + Value[RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA]: 19 + Value[RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA]: 20 + Value[RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA]: 21 +Enum 04: rlTextureFilter (6 values) + Name: rlTextureFilter + Description: Texture parameters: filter mode + Value[RL_TEXTURE_FILTER_POINT]: 0 + Value[RL_TEXTURE_FILTER_BILINEAR]: 1 + Value[RL_TEXTURE_FILTER_TRILINEAR]: 2 + Value[RL_TEXTURE_FILTER_ANISOTROPIC_4X]: 3 + Value[RL_TEXTURE_FILTER_ANISOTROPIC_8X]: 4 + Value[RL_TEXTURE_FILTER_ANISOTROPIC_16X]: 5 +Enum 05: rlBlendMode (8 values) + Name: rlBlendMode + Description: Color blending modes (pre-defined) + Value[RL_BLEND_ALPHA]: 0 + Value[RL_BLEND_ADDITIVE]: 1 + Value[RL_BLEND_MULTIPLIED]: 2 + Value[RL_BLEND_ADD_COLORS]: 3 + Value[RL_BLEND_SUBTRACT_COLORS]: 4 + Value[RL_BLEND_ALPHA_PREMULTIPLY]: 5 + Value[RL_BLEND_CUSTOM]: 6 + Value[RL_BLEND_CUSTOM_SEPARATE]: 7 +Enum 06: rlShaderLocationIndex (26 values) + Name: rlShaderLocationIndex + Description: Shader location point type + Value[RL_SHADER_LOC_VERTEX_POSITION]: 0 + Value[RL_SHADER_LOC_VERTEX_TEXCOORD01]: 1 + Value[RL_SHADER_LOC_VERTEX_TEXCOORD02]: 2 + Value[RL_SHADER_LOC_VERTEX_NORMAL]: 3 + Value[RL_SHADER_LOC_VERTEX_TANGENT]: 4 + Value[RL_SHADER_LOC_VERTEX_COLOR]: 5 + Value[RL_SHADER_LOC_MATRIX_MVP]: 6 + Value[RL_SHADER_LOC_MATRIX_VIEW]: 7 + Value[RL_SHADER_LOC_MATRIX_PROJECTION]: 8 + Value[RL_SHADER_LOC_MATRIX_MODEL]: 9 + Value[RL_SHADER_LOC_MATRIX_NORMAL]: 10 + Value[RL_SHADER_LOC_VECTOR_VIEW]: 11 + Value[RL_SHADER_LOC_COLOR_DIFFUSE]: 12 + Value[RL_SHADER_LOC_COLOR_SPECULAR]: 13 + Value[RL_SHADER_LOC_COLOR_AMBIENT]: 14 + Value[RL_SHADER_LOC_MAP_ALBEDO]: 15 + Value[RL_SHADER_LOC_MAP_METALNESS]: 16 + Value[RL_SHADER_LOC_MAP_NORMAL]: 17 + Value[RL_SHADER_LOC_MAP_ROUGHNESS]: 18 + Value[RL_SHADER_LOC_MAP_OCCLUSION]: 19 + Value[RL_SHADER_LOC_MAP_EMISSION]: 20 + Value[RL_SHADER_LOC_MAP_HEIGHT]: 21 + Value[RL_SHADER_LOC_MAP_CUBEMAP]: 22 + Value[RL_SHADER_LOC_MAP_IRRADIANCE]: 23 + Value[RL_SHADER_LOC_MAP_PREFILTER]: 24 + Value[RL_SHADER_LOC_MAP_BRDF]: 25 +Enum 07: rlShaderUniformDataType (9 values) + Name: rlShaderUniformDataType + Description: Shader uniform data type + Value[RL_SHADER_UNIFORM_FLOAT]: 0 + Value[RL_SHADER_UNIFORM_VEC2]: 1 + Value[RL_SHADER_UNIFORM_VEC3]: 2 + Value[RL_SHADER_UNIFORM_VEC4]: 3 + Value[RL_SHADER_UNIFORM_INT]: 4 + Value[RL_SHADER_UNIFORM_IVEC2]: 5 + Value[RL_SHADER_UNIFORM_IVEC3]: 6 + Value[RL_SHADER_UNIFORM_IVEC4]: 7 + Value[RL_SHADER_UNIFORM_SAMPLER2D]: 8 +Enum 08: rlShaderAttributeDataType (4 values) + Name: rlShaderAttributeDataType + Description: Shader attribute data types + Value[RL_SHADER_ATTRIB_FLOAT]: 0 + Value[RL_SHADER_ATTRIB_VEC2]: 1 + Value[RL_SHADER_ATTRIB_VEC3]: 2 + Value[RL_SHADER_ATTRIB_VEC4]: 3 +Enum 09: rlFramebufferAttachType (10 values) + Name: rlFramebufferAttachType + Description: Framebuffer attachment type + Value[RL_ATTACHMENT_COLOR_CHANNEL0]: 0 + Value[RL_ATTACHMENT_COLOR_CHANNEL1]: 1 + Value[RL_ATTACHMENT_COLOR_CHANNEL2]: 2 + Value[RL_ATTACHMENT_COLOR_CHANNEL3]: 3 + Value[RL_ATTACHMENT_COLOR_CHANNEL4]: 4 + Value[RL_ATTACHMENT_COLOR_CHANNEL5]: 5 + Value[RL_ATTACHMENT_COLOR_CHANNEL6]: 6 + Value[RL_ATTACHMENT_COLOR_CHANNEL7]: 7 + Value[RL_ATTACHMENT_DEPTH]: 100 + Value[RL_ATTACHMENT_STENCIL]: 200 +Enum 10: rlFramebufferAttachTextureType (8 values) + Name: rlFramebufferAttachTextureType + Description: Framebuffer texture attachment type + Value[RL_ATTACHMENT_CUBEMAP_POSITIVE_X]: 0 + Value[RL_ATTACHMENT_CUBEMAP_NEGATIVE_X]: 1 + Value[RL_ATTACHMENT_CUBEMAP_POSITIVE_Y]: 2 + Value[RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y]: 3 + Value[RL_ATTACHMENT_CUBEMAP_POSITIVE_Z]: 4 + Value[RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z]: 5 + Value[RL_ATTACHMENT_TEXTURE2D]: 100 + Value[RL_ATTACHMENT_RENDERBUFFER]: 200 +Enum 11: rlCullMode (2 values) + Name: rlCullMode + Description: Face culling mode + Value[RL_CULL_FACE_FRONT]: 0 + Value[RL_CULL_FACE_BACK]: 1 + +Callbacks found: 0 + + +Functions found: 147 + +Function 001: rlMatrixMode() (1 input parameters) + Name: rlMatrixMode + Return type: void + Description: Choose the current matrix to be transformed + Param[1]: mode (type: int) +Function 002: rlPushMatrix() (0 input parameters) + Name: rlPushMatrix + Return type: void + Description: Push the current matrix to stack + No input parameters +Function 003: rlPopMatrix() (0 input parameters) + Name: rlPopMatrix + Return type: void + Description: Pop latest inserted matrix from stack + No input parameters +Function 004: rlLoadIdentity() (0 input parameters) + Name: rlLoadIdentity + Return type: void + Description: Reset current matrix to identity matrix + No input parameters +Function 005: rlTranslatef() (3 input parameters) + Name: rlTranslatef + Return type: void + Description: Multiply the current matrix by a translation matrix + Param[1]: x (type: float) + Param[2]: y (type: float) + Param[3]: z (type: float) +Function 006: rlRotatef() (4 input parameters) + Name: rlRotatef + Return type: void + Description: Multiply the current matrix by a rotation matrix + Param[1]: angle (type: float) + Param[2]: x (type: float) + Param[3]: y (type: float) + Param[4]: z (type: float) +Function 007: rlScalef() (3 input parameters) + Name: rlScalef + Return type: void + Description: Multiply the current matrix by a scaling matrix + Param[1]: x (type: float) + Param[2]: y (type: float) + Param[3]: z (type: float) +Function 008: rlMultMatrixf() (1 input parameters) + Name: rlMultMatrixf + Return type: void + Description: Multiply the current matrix by another matrix + Param[1]: matf (type: const float *) +Function 009: rlFrustum() (6 input parameters) + Name: rlFrustum + Return type: void + Description: + Param[1]: left (type: double) + Param[2]: right (type: double) + Param[3]: bottom (type: double) + Param[4]: top (type: double) + Param[5]: znear (type: double) + Param[6]: zfar (type: double) +Function 010: rlOrtho() (6 input parameters) + Name: rlOrtho + Return type: void + Description: + Param[1]: left (type: double) + Param[2]: right (type: double) + Param[3]: bottom (type: double) + Param[4]: top (type: double) + Param[5]: znear (type: double) + Param[6]: zfar (type: double) +Function 011: rlViewport() (4 input parameters) + Name: rlViewport + Return type: void + Description: Set the viewport area + Param[1]: x (type: int) + Param[2]: y (type: int) + Param[3]: width (type: int) + Param[4]: height (type: int) +Function 012: rlBegin() (1 input parameters) + Name: rlBegin + Return type: void + Description: Initialize drawing mode (how to organize vertex) + Param[1]: mode (type: int) +Function 013: rlEnd() (0 input parameters) + Name: rlEnd + Return type: void + Description: Finish vertex providing + No input parameters +Function 014: rlVertex2i() (2 input parameters) + Name: rlVertex2i + Return type: void + Description: Define one vertex (position) - 2 int + Param[1]: x (type: int) + Param[2]: y (type: int) +Function 015: rlVertex2f() (2 input parameters) + Name: rlVertex2f + Return type: void + Description: Define one vertex (position) - 2 float + Param[1]: x (type: float) + Param[2]: y (type: float) +Function 016: rlVertex3f() (3 input parameters) + Name: rlVertex3f + Return type: void + Description: Define one vertex (position) - 3 float + Param[1]: x (type: float) + Param[2]: y (type: float) + Param[3]: z (type: float) +Function 017: rlTexCoord2f() (2 input parameters) + Name: rlTexCoord2f + Return type: void + Description: Define one vertex (texture coordinate) - 2 float + Param[1]: x (type: float) + Param[2]: y (type: float) +Function 018: rlNormal3f() (3 input parameters) + Name: rlNormal3f + Return type: void + Description: Define one vertex (normal) - 3 float + Param[1]: x (type: float) + Param[2]: y (type: float) + Param[3]: z (type: float) +Function 019: rlColor4ub() (4 input parameters) + Name: rlColor4ub + Return type: void + Description: Define one vertex (color) - 4 byte + Param[1]: r (type: unsigned char) + Param[2]: g (type: unsigned char) + Param[3]: b (type: unsigned char) + Param[4]: a (type: unsigned char) +Function 020: rlColor3f() (3 input parameters) + Name: rlColor3f + Return type: void + Description: Define one vertex (color) - 3 float + Param[1]: x (type: float) + Param[2]: y (type: float) + Param[3]: z (type: float) +Function 021: rlColor4f() (4 input parameters) + Name: rlColor4f + Return type: void + Description: Define one vertex (color) - 4 float + Param[1]: x (type: float) + Param[2]: y (type: float) + Param[3]: z (type: float) + Param[4]: w (type: float) +Function 022: rlEnableVertexArray() (1 input parameters) + Name: rlEnableVertexArray + Return type: bool + Description: Enable vertex array (VAO, if supported) + Param[1]: vaoId (type: unsigned int) +Function 023: rlDisableVertexArray() (0 input parameters) + Name: rlDisableVertexArray + Return type: void + Description: Disable vertex array (VAO, if supported) + No input parameters +Function 024: rlEnableVertexBuffer() (1 input parameters) + Name: rlEnableVertexBuffer + Return type: void + Description: Enable vertex buffer (VBO) + Param[1]: id (type: unsigned int) +Function 025: rlDisableVertexBuffer() (0 input parameters) + Name: rlDisableVertexBuffer + Return type: void + Description: Disable vertex buffer (VBO) + No input parameters +Function 026: rlEnableVertexBufferElement() (1 input parameters) + Name: rlEnableVertexBufferElement + Return type: void + Description: Enable vertex buffer element (VBO element) + Param[1]: id (type: unsigned int) +Function 027: rlDisableVertexBufferElement() (0 input parameters) + Name: rlDisableVertexBufferElement + Return type: void + Description: Disable vertex buffer element (VBO element) + No input parameters +Function 028: rlEnableVertexAttribute() (1 input parameters) + Name: rlEnableVertexAttribute + Return type: void + Description: Enable vertex attribute index + Param[1]: index (type: unsigned int) +Function 029: rlDisableVertexAttribute() (1 input parameters) + Name: rlDisableVertexAttribute + Return type: void + Description: Disable vertex attribute index + Param[1]: index (type: unsigned int) +Function 030: rlEnableStatePointer() (2 input parameters) + Name: rlEnableStatePointer + Return type: void + Description: Enable attribute state pointer + Param[1]: vertexAttribType (type: int) + Param[2]: buffer (type: void *) +Function 031: rlDisableStatePointer() (1 input parameters) + Name: rlDisableStatePointer + Return type: void + Description: Disable attribute state pointer + Param[1]: vertexAttribType (type: int) +Function 032: rlActiveTextureSlot() (1 input parameters) + Name: rlActiveTextureSlot + Return type: void + Description: Select and active a texture slot + Param[1]: slot (type: int) +Function 033: rlEnableTexture() (1 input parameters) + Name: rlEnableTexture + Return type: void + Description: Enable texture + Param[1]: id (type: unsigned int) +Function 034: rlDisableTexture() (0 input parameters) + Name: rlDisableTexture + Return type: void + Description: Disable texture + No input parameters +Function 035: rlEnableTextureCubemap() (1 input parameters) + Name: rlEnableTextureCubemap + Return type: void + Description: Enable texture cubemap + Param[1]: id (type: unsigned int) +Function 036: rlDisableTextureCubemap() (0 input parameters) + Name: rlDisableTextureCubemap + Return type: void + Description: Disable texture cubemap + No input parameters +Function 037: rlTextureParameters() (3 input parameters) + Name: rlTextureParameters + Return type: void + Description: Set texture parameters (filter, wrap) + Param[1]: id (type: unsigned int) + Param[2]: param (type: int) + Param[3]: value (type: int) +Function 038: rlCubemapParameters() (3 input parameters) + Name: rlCubemapParameters + Return type: void + Description: Set cubemap parameters (filter, wrap) + Param[1]: id (type: unsigned int) + Param[2]: param (type: int) + Param[3]: value (type: int) +Function 039: rlEnableShader() (1 input parameters) + Name: rlEnableShader + Return type: void + Description: Enable shader program + Param[1]: id (type: unsigned int) +Function 040: rlDisableShader() (0 input parameters) + Name: rlDisableShader + Return type: void + Description: Disable shader program + No input parameters +Function 041: rlEnableFramebuffer() (1 input parameters) + Name: rlEnableFramebuffer + Return type: void + Description: Enable render texture (fbo) + Param[1]: id (type: unsigned int) +Function 042: rlDisableFramebuffer() (0 input parameters) + Name: rlDisableFramebuffer + Return type: void + Description: Disable render texture (fbo), return to default framebuffer + No input parameters +Function 043: rlActiveDrawBuffers() (1 input parameters) + Name: rlActiveDrawBuffers + Return type: void + Description: Activate multiple draw color buffers + Param[1]: count (type: int) +Function 044: rlEnableColorBlend() (0 input parameters) + Name: rlEnableColorBlend + Return type: void + Description: Enable color blending + No input parameters +Function 045: rlDisableColorBlend() (0 input parameters) + Name: rlDisableColorBlend + Return type: void + Description: Disable color blending + No input parameters +Function 046: rlEnableDepthTest() (0 input parameters) + Name: rlEnableDepthTest + Return type: void + Description: Enable depth test + No input parameters +Function 047: rlDisableDepthTest() (0 input parameters) + Name: rlDisableDepthTest + Return type: void + Description: Disable depth test + No input parameters +Function 048: rlEnableDepthMask() (0 input parameters) + Name: rlEnableDepthMask + Return type: void + Description: Enable depth write + No input parameters +Function 049: rlDisableDepthMask() (0 input parameters) + Name: rlDisableDepthMask + Return type: void + Description: Disable depth write + No input parameters +Function 050: rlEnableBackfaceCulling() (0 input parameters) + Name: rlEnableBackfaceCulling + Return type: void + Description: Enable backface culling + No input parameters +Function 051: rlDisableBackfaceCulling() (0 input parameters) + Name: rlDisableBackfaceCulling + Return type: void + Description: Disable backface culling + No input parameters +Function 052: rlSetCullFace() (1 input parameters) + Name: rlSetCullFace + Return type: void + Description: Set face culling mode + Param[1]: mode (type: int) +Function 053: rlEnableScissorTest() (0 input parameters) + Name: rlEnableScissorTest + Return type: void + Description: Enable scissor test + No input parameters +Function 054: rlDisableScissorTest() (0 input parameters) + Name: rlDisableScissorTest + Return type: void + Description: Disable scissor test + No input parameters +Function 055: rlScissor() (4 input parameters) + Name: rlScissor + Return type: void + Description: Scissor test + Param[1]: x (type: int) + Param[2]: y (type: int) + Param[3]: width (type: int) + Param[4]: height (type: int) +Function 056: rlEnableWireMode() (0 input parameters) + Name: rlEnableWireMode + Return type: void + Description: Enable wire mode + No input parameters +Function 057: rlDisableWireMode() (0 input parameters) + Name: rlDisableWireMode + Return type: void + Description: Disable wire mode + No input parameters +Function 058: rlSetLineWidth() (1 input parameters) + Name: rlSetLineWidth + Return type: void + Description: Set the line drawing width + Param[1]: width (type: float) +Function 059: rlGetLineWidth() (0 input parameters) + Name: rlGetLineWidth + Return type: float + Description: Get the line drawing width + No input parameters +Function 060: rlEnableSmoothLines() (0 input parameters) + Name: rlEnableSmoothLines + Return type: void + Description: Enable line aliasing + No input parameters +Function 061: rlDisableSmoothLines() (0 input parameters) + Name: rlDisableSmoothLines + Return type: void + Description: Disable line aliasing + No input parameters +Function 062: rlEnableStereoRender() (0 input parameters) + Name: rlEnableStereoRender + Return type: void + Description: Enable stereo rendering + No input parameters +Function 063: rlDisableStereoRender() (0 input parameters) + Name: rlDisableStereoRender + Return type: void + Description: Disable stereo rendering + No input parameters +Function 064: rlIsStereoRenderEnabled() (0 input parameters) + Name: rlIsStereoRenderEnabled + Return type: bool + Description: Check if stereo render is enabled + No input parameters +Function 065: rlClearColor() (4 input parameters) + Name: rlClearColor + Return type: void + Description: Clear color buffer with color + Param[1]: r (type: unsigned char) + Param[2]: g (type: unsigned char) + Param[3]: b (type: unsigned char) + Param[4]: a (type: unsigned char) +Function 066: rlClearScreenBuffers() (0 input parameters) + Name: rlClearScreenBuffers + Return type: void + Description: Clear used screen buffers (color and depth) + No input parameters +Function 067: rlCheckErrors() (0 input parameters) + Name: rlCheckErrors + Return type: void + Description: Check and log OpenGL error codes + No input parameters +Function 068: rlSetBlendMode() (1 input parameters) + Name: rlSetBlendMode + Return type: void + Description: Set blending mode + Param[1]: mode (type: int) +Function 069: rlSetBlendFactors() (3 input parameters) + Name: rlSetBlendFactors + Return type: void + Description: Set blending mode factor and equation (using OpenGL factors) + Param[1]: glSrcFactor (type: int) + Param[2]: glDstFactor (type: int) + Param[3]: glEquation (type: int) +Function 070: rlSetBlendFactorsSeparate() (6 input parameters) + Name: rlSetBlendFactorsSeparate + Return type: void + Description: Set blending mode factors and equations separately (using OpenGL factors) + Param[1]: glSrcRGB (type: int) + Param[2]: glDstRGB (type: int) + Param[3]: glSrcAlpha (type: int) + Param[4]: glDstAlpha (type: int) + Param[5]: glEqRGB (type: int) + Param[6]: glEqAlpha (type: int) +Function 071: rlglInit() (2 input parameters) + Name: rlglInit + Return type: void + Description: Initialize rlgl (buffers, shaders, textures, states) + Param[1]: width (type: int) + Param[2]: height (type: int) +Function 072: rlglClose() (0 input parameters) + Name: rlglClose + Return type: void + Description: De-initialize rlgl (buffers, shaders, textures) + No input parameters +Function 073: rlLoadExtensions() (1 input parameters) + Name: rlLoadExtensions + Return type: void + Description: Load OpenGL extensions (loader function required) + Param[1]: loader (type: void *) +Function 074: rlGetVersion() (0 input parameters) + Name: rlGetVersion + Return type: int + Description: Get current OpenGL version + No input parameters +Function 075: rlSetFramebufferWidth() (1 input parameters) + Name: rlSetFramebufferWidth + Return type: void + Description: Set current framebuffer width + Param[1]: width (type: int) +Function 076: rlGetFramebufferWidth() (0 input parameters) + Name: rlGetFramebufferWidth + Return type: int + Description: Get default framebuffer width + No input parameters +Function 077: rlSetFramebufferHeight() (1 input parameters) + Name: rlSetFramebufferHeight + Return type: void + Description: Set current framebuffer height + Param[1]: height (type: int) +Function 078: rlGetFramebufferHeight() (0 input parameters) + Name: rlGetFramebufferHeight + Return type: int + Description: Get default framebuffer height + No input parameters +Function 079: rlGetTextureIdDefault() (0 input parameters) + Name: rlGetTextureIdDefault + Return type: unsigned int + Description: Get default texture id + No input parameters +Function 080: rlGetShaderIdDefault() (0 input parameters) + Name: rlGetShaderIdDefault + Return type: unsigned int + Description: Get default shader id + No input parameters +Function 081: rlGetShaderLocsDefault() (0 input parameters) + Name: rlGetShaderLocsDefault + Return type: int * + Description: Get default shader locations + No input parameters +Function 082: rlLoadRenderBatch() (2 input parameters) + Name: rlLoadRenderBatch + Return type: rlRenderBatch + Description: Load a render batch system + Param[1]: numBuffers (type: int) + Param[2]: bufferElements (type: int) +Function 083: rlUnloadRenderBatch() (1 input parameters) + Name: rlUnloadRenderBatch + Return type: void + Description: Unload render batch system + Param[1]: batch (type: rlRenderBatch) +Function 084: rlDrawRenderBatch() (1 input parameters) + Name: rlDrawRenderBatch + Return type: void + Description: Draw render batch data (Update->Draw->Reset) + Param[1]: batch (type: rlRenderBatch *) +Function 085: rlSetRenderBatchActive() (1 input parameters) + Name: rlSetRenderBatchActive + Return type: void + Description: Set the active render batch for rlgl (NULL for default internal) + Param[1]: batch (type: rlRenderBatch *) +Function 086: rlDrawRenderBatchActive() (0 input parameters) + Name: rlDrawRenderBatchActive + Return type: void + Description: Update and draw internal render batch + No input parameters +Function 087: rlCheckRenderBatchLimit() (1 input parameters) + Name: rlCheckRenderBatchLimit + Return type: bool + Description: Check internal buffer overflow for a given number of vertex + Param[1]: vCount (type: int) +Function 088: rlSetTexture() (1 input parameters) + Name: rlSetTexture + Return type: void + Description: Set current texture for render batch and check buffers limits + Param[1]: id (type: unsigned int) +Function 089: rlLoadVertexArray() (0 input parameters) + Name: rlLoadVertexArray + Return type: unsigned int + Description: Load vertex array (vao) if supported + No input parameters +Function 090: rlLoadVertexBuffer() (3 input parameters) + Name: rlLoadVertexBuffer + Return type: unsigned int + Description: Load a vertex buffer attribute + Param[1]: buffer (type: const void *) + Param[2]: size (type: int) + Param[3]: dynamic (type: bool) +Function 091: rlLoadVertexBufferElement() (3 input parameters) + Name: rlLoadVertexBufferElement + Return type: unsigned int + Description: Load a new attributes element buffer + Param[1]: buffer (type: const void *) + Param[2]: size (type: int) + Param[3]: dynamic (type: bool) +Function 092: rlUpdateVertexBuffer() (4 input parameters) + Name: rlUpdateVertexBuffer + Return type: void + Description: Update GPU buffer with new data + Param[1]: bufferId (type: unsigned int) + Param[2]: data (type: const void *) + Param[3]: dataSize (type: int) + Param[4]: offset (type: int) +Function 093: rlUpdateVertexBufferElements() (4 input parameters) + Name: rlUpdateVertexBufferElements + Return type: void + Description: Update vertex buffer elements with new data + Param[1]: id (type: unsigned int) + Param[2]: data (type: const void *) + Param[3]: dataSize (type: int) + Param[4]: offset (type: int) +Function 094: rlUnloadVertexArray() (1 input parameters) + Name: rlUnloadVertexArray + Return type: void + Description: + Param[1]: vaoId (type: unsigned int) +Function 095: rlUnloadVertexBuffer() (1 input parameters) + Name: rlUnloadVertexBuffer + Return type: void + Description: + Param[1]: vboId (type: unsigned int) +Function 096: rlSetVertexAttribute() (6 input parameters) + Name: rlSetVertexAttribute + Return type: void + Description: + Param[1]: index (type: unsigned int) + Param[2]: compSize (type: int) + Param[3]: type (type: int) + Param[4]: normalized (type: bool) + Param[5]: stride (type: int) + Param[6]: pointer (type: const void *) +Function 097: rlSetVertexAttributeDivisor() (2 input parameters) + Name: rlSetVertexAttributeDivisor + Return type: void + Description: + Param[1]: index (type: unsigned int) + Param[2]: divisor (type: int) +Function 098: rlSetVertexAttributeDefault() (4 input parameters) + Name: rlSetVertexAttributeDefault + Return type: void + Description: Set vertex attribute default value + Param[1]: locIndex (type: int) + Param[2]: value (type: const void *) + Param[3]: attribType (type: int) + Param[4]: count (type: int) +Function 099: rlDrawVertexArray() (2 input parameters) + Name: rlDrawVertexArray + Return type: void + Description: + Param[1]: offset (type: int) + Param[2]: count (type: int) +Function 100: rlDrawVertexArrayElements() (3 input parameters) + Name: rlDrawVertexArrayElements + Return type: void + Description: + Param[1]: offset (type: int) + Param[2]: count (type: int) + Param[3]: buffer (type: const void *) +Function 101: rlDrawVertexArrayInstanced() (3 input parameters) + Name: rlDrawVertexArrayInstanced + Return type: void + Description: + Param[1]: offset (type: int) + Param[2]: count (type: int) + Param[3]: instances (type: int) +Function 102: rlDrawVertexArrayElementsInstanced() (4 input parameters) + Name: rlDrawVertexArrayElementsInstanced + Return type: void + Description: + Param[1]: offset (type: int) + Param[2]: count (type: int) + Param[3]: buffer (type: const void *) + Param[4]: instances (type: int) +Function 103: rlLoadTexture() (5 input parameters) + Name: rlLoadTexture + Return type: unsigned int + Description: Load texture in GPU + Param[1]: data (type: const void *) + Param[2]: width (type: int) + Param[3]: height (type: int) + Param[4]: format (type: int) + Param[5]: mipmapCount (type: int) +Function 104: rlLoadTextureDepth() (3 input parameters) + Name: rlLoadTextureDepth + Return type: unsigned int + Description: Load depth texture/renderbuffer (to be attached to fbo) + Param[1]: width (type: int) + Param[2]: height (type: int) + Param[3]: useRenderBuffer (type: bool) +Function 105: rlLoadTextureCubemap() (3 input parameters) + Name: rlLoadTextureCubemap + Return type: unsigned int + Description: Load texture cubemap + Param[1]: data (type: const void *) + Param[2]: size (type: int) + Param[3]: format (type: int) +Function 106: rlUpdateTexture() (7 input parameters) + Name: rlUpdateTexture + Return type: void + Description: Update GPU texture with new data + Param[1]: id (type: unsigned int) + Param[2]: offsetX (type: int) + Param[3]: offsetY (type: int) + Param[4]: width (type: int) + Param[5]: height (type: int) + Param[6]: format (type: int) + Param[7]: data (type: const void *) +Function 107: rlGetGlTextureFormats() (4 input parameters) + Name: rlGetGlTextureFormats + Return type: void + Description: Get OpenGL internal formats + Param[1]: format (type: int) + Param[2]: glInternalFormat (type: unsigned int *) + Param[3]: glFormat (type: unsigned int *) + Param[4]: glType (type: unsigned int *) +Function 108: rlGetPixelFormatName() (1 input parameters) + Name: rlGetPixelFormatName + Return type: const char * + Description: Get name string for pixel format + Param[1]: format (type: unsigned int) +Function 109: rlUnloadTexture() (1 input parameters) + Name: rlUnloadTexture + Return type: void + Description: Unload texture from GPU memory + Param[1]: id (type: unsigned int) +Function 110: rlGenTextureMipmaps() (5 input parameters) + Name: rlGenTextureMipmaps + Return type: void + Description: Generate mipmap data for selected texture + Param[1]: id (type: unsigned int) + Param[2]: width (type: int) + Param[3]: height (type: int) + Param[4]: format (type: int) + Param[5]: mipmaps (type: int *) +Function 111: rlReadTexturePixels() (4 input parameters) + Name: rlReadTexturePixels + Return type: void * + Description: Read texture pixel data + Param[1]: id (type: unsigned int) + Param[2]: width (type: int) + Param[3]: height (type: int) + Param[4]: format (type: int) +Function 112: rlReadScreenPixels() (2 input parameters) + Name: rlReadScreenPixels + Return type: unsigned char * + Description: Read screen pixel data (color buffer) + Param[1]: width (type: int) + Param[2]: height (type: int) +Function 113: rlLoadFramebuffer() (2 input parameters) + Name: rlLoadFramebuffer + Return type: unsigned int + Description: Load an empty framebuffer + Param[1]: width (type: int) + Param[2]: height (type: int) +Function 114: rlFramebufferAttach() (5 input parameters) + Name: rlFramebufferAttach + Return type: void + Description: Attach texture/renderbuffer to a framebuffer + Param[1]: fboId (type: unsigned int) + Param[2]: texId (type: unsigned int) + Param[3]: attachType (type: int) + Param[4]: texType (type: int) + Param[5]: mipLevel (type: int) +Function 115: rlFramebufferComplete() (1 input parameters) + Name: rlFramebufferComplete + Return type: bool + Description: Verify framebuffer is complete + Param[1]: id (type: unsigned int) +Function 116: rlUnloadFramebuffer() (1 input parameters) + Name: rlUnloadFramebuffer + Return type: void + Description: Delete framebuffer from GPU + Param[1]: id (type: unsigned int) +Function 117: rlLoadShaderCode() (2 input parameters) + Name: rlLoadShaderCode + Return type: unsigned int + Description: Load shader from code strings + Param[1]: vsCode (type: const char *) + Param[2]: fsCode (type: const char *) +Function 118: rlCompileShader() (2 input parameters) + Name: rlCompileShader + Return type: unsigned int + Description: Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER) + Param[1]: shaderCode (type: const char *) + Param[2]: type (type: int) +Function 119: rlLoadShaderProgram() (2 input parameters) + Name: rlLoadShaderProgram + Return type: unsigned int + Description: Load custom shader program + Param[1]: vShaderId (type: unsigned int) + Param[2]: fShaderId (type: unsigned int) +Function 120: rlUnloadShaderProgram() (1 input parameters) + Name: rlUnloadShaderProgram + Return type: void + Description: Unload shader program + Param[1]: id (type: unsigned int) +Function 121: rlGetLocationUniform() (2 input parameters) + Name: rlGetLocationUniform + Return type: int + Description: Get shader location uniform + Param[1]: shaderId (type: unsigned int) + Param[2]: uniformName (type: const char *) +Function 122: rlGetLocationAttrib() (2 input parameters) + Name: rlGetLocationAttrib + Return type: int + Description: Get shader location attribute + Param[1]: shaderId (type: unsigned int) + Param[2]: attribName (type: const char *) +Function 123: rlSetUniform() (4 input parameters) + Name: rlSetUniform + Return type: void + Description: Set shader value uniform + Param[1]: locIndex (type: int) + Param[2]: value (type: const void *) + Param[3]: uniformType (type: int) + Param[4]: count (type: int) +Function 124: rlSetUniformMatrix() (2 input parameters) + Name: rlSetUniformMatrix + Return type: void + Description: Set shader value matrix + Param[1]: locIndex (type: int) + Param[2]: mat (type: Matrix) +Function 125: rlSetUniformSampler() (2 input parameters) + Name: rlSetUniformSampler + Return type: void + Description: Set shader value sampler + Param[1]: locIndex (type: int) + Param[2]: textureId (type: unsigned int) +Function 126: rlSetShader() (2 input parameters) + Name: rlSetShader + Return type: void + Description: Set shader currently active (id and locations) + Param[1]: id (type: unsigned int) + Param[2]: locs (type: int *) +Function 127: rlLoadComputeShaderProgram() (1 input parameters) + Name: rlLoadComputeShaderProgram + Return type: unsigned int + Description: Load compute shader program + Param[1]: shaderId (type: unsigned int) +Function 128: rlComputeShaderDispatch() (3 input parameters) + Name: rlComputeShaderDispatch + Return type: void + Description: Dispatch compute shader (equivalent to *draw* for graphics pipeline) + Param[1]: groupX (type: unsigned int) + Param[2]: groupY (type: unsigned int) + Param[3]: groupZ (type: unsigned int) +Function 129: rlLoadShaderBuffer() (3 input parameters) + Name: rlLoadShaderBuffer + Return type: unsigned int + Description: Load shader storage buffer object (SSBO) + Param[1]: size (type: unsigned int) + Param[2]: data (type: const void *) + Param[3]: usageHint (type: int) +Function 130: rlUnloadShaderBuffer() (1 input parameters) + Name: rlUnloadShaderBuffer + Return type: void + Description: Unload shader storage buffer object (SSBO) + Param[1]: ssboId (type: unsigned int) +Function 131: rlUpdateShaderBuffer() (4 input parameters) + Name: rlUpdateShaderBuffer + Return type: void + Description: Update SSBO buffer data + Param[1]: id (type: unsigned int) + Param[2]: data (type: const void *) + Param[3]: dataSize (type: unsigned int) + Param[4]: offset (type: unsigned int) +Function 132: rlBindShaderBuffer() (2 input parameters) + Name: rlBindShaderBuffer + Return type: void + Description: Bind SSBO buffer + Param[1]: id (type: unsigned int) + Param[2]: index (type: unsigned int) +Function 133: rlReadShaderBuffer() (4 input parameters) + Name: rlReadShaderBuffer + Return type: void + Description: Read SSBO buffer data (GPU->CPU) + Param[1]: id (type: unsigned int) + Param[2]: dest (type: void *) + Param[3]: count (type: unsigned int) + Param[4]: offset (type: unsigned int) +Function 134: rlCopyShaderBuffer() (5 input parameters) + Name: rlCopyShaderBuffer + Return type: void + Description: Copy SSBO data between buffers + Param[1]: destId (type: unsigned int) + Param[2]: srcId (type: unsigned int) + Param[3]: destOffset (type: unsigned int) + Param[4]: srcOffset (type: unsigned int) + Param[5]: count (type: unsigned int) +Function 135: rlGetShaderBufferSize() (1 input parameters) + Name: rlGetShaderBufferSize + Return type: unsigned int + Description: Get SSBO buffer size + Param[1]: id (type: unsigned int) +Function 136: rlBindImageTexture() (4 input parameters) + Name: rlBindImageTexture + Return type: void + Description: Bind image texture + Param[1]: id (type: unsigned int) + Param[2]: index (type: unsigned int) + Param[3]: format (type: int) + Param[4]: readonly (type: bool) +Function 137: rlGetMatrixModelview() (0 input parameters) + Name: rlGetMatrixModelview + Return type: Matrix + Description: Get internal modelview matrix + No input parameters +Function 138: rlGetMatrixProjection() (0 input parameters) + Name: rlGetMatrixProjection + Return type: Matrix + Description: Get internal projection matrix + No input parameters +Function 139: rlGetMatrixTransform() (0 input parameters) + Name: rlGetMatrixTransform + Return type: Matrix + Description: Get internal accumulated transform matrix + No input parameters +Function 140: rlGetMatrixProjectionStereo() (1 input parameters) + Name: rlGetMatrixProjectionStereo + Return type: Matrix + Description: Get internal projection matrix for stereo render (selected eye) + Param[1]: eye (type: int) +Function 141: rlGetMatrixViewOffsetStereo() (1 input parameters) + Name: rlGetMatrixViewOffsetStereo + Return type: Matrix + Description: Get internal view offset matrix for stereo render (selected eye) + Param[1]: eye (type: int) +Function 142: rlSetMatrixProjection() (1 input parameters) + Name: rlSetMatrixProjection + Return type: void + Description: Set a custom projection matrix (replaces internal projection matrix) + Param[1]: proj (type: Matrix) +Function 143: rlSetMatrixModelview() (1 input parameters) + Name: rlSetMatrixModelview + Return type: void + Description: Set a custom modelview matrix (replaces internal modelview matrix) + Param[1]: view (type: Matrix) +Function 144: rlSetMatrixProjectionStereo() (2 input parameters) + Name: rlSetMatrixProjectionStereo + Return type: void + Description: Set eyes projection matrices for stereo rendering + Param[1]: right (type: Matrix) + Param[2]: left (type: Matrix) +Function 145: rlSetMatrixViewOffsetStereo() (2 input parameters) + Name: rlSetMatrixViewOffsetStereo + Return type: void + Description: Set eyes view offsets matrices for stereo rendering + Param[1]: right (type: Matrix) + Param[2]: left (type: Matrix) +Function 146: rlLoadDrawCube() (0 input parameters) + Name: rlLoadDrawCube + Return type: void + Description: Load and draw a cube + No input parameters +Function 147: rlLoadDrawQuad() (0 input parameters) + Name: rlLoadDrawQuad + Return type: void + Description: Load and draw a quad + No input parameters diff --git a/raylib-api/rlgl.xml b/raylib-api/rlgl.xml new file mode 100644 index 0000000..59b5fa0 --- /dev/null +++ b/raylib-api/rlgl.xml @@ -0,0 +1,815 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/raylib-api/rmem.json b/raylib-api/rmem.json new file mode 100644 index 0000000..01ad307 --- /dev/null +++ b/raylib-api/rmem.json @@ -0,0 +1,493 @@ +{ + "defines": [ + { + "name": "RMEM_H", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RMEMAPI", + "type": "UNKNOWN", + "value": "__declspec(dllexport)", + "description": "We are building library as a Win32 shared library (.dll)" + }, + { + "name": "RMEM_VERSION", + "type": "STRING", + "value": "v1.3", + "description": "changelog at bottom of header." + } + ], + "structs": [ + { + "name": "MemNode", + "description": "Memory pool node", + "fields": [ + { + "type": "size_t", + "name": "size", + "description": "" + }, + { + "type": "MemNode *", + "name": "next", + "description": "" + }, + { + "type": "MemNode *", + "name": "prev", + "description": "" + } + ] + }, + { + "name": "AllocList", + "description": "Freelist implementation", + "fields": [ + { + "type": "MemNode *", + "name": "head", + "description": "" + }, + { + "type": "MemNode *", + "name": "tail", + "description": "" + }, + { + "type": "size_t", + "name": "len", + "description": "" + } + ] + }, + { + "name": "Arena", + "description": "Arena allocator", + "fields": [ + { + "type": "uintptr_t", + "name": "mem", + "description": "" + }, + { + "type": "uintptr_t", + "name": "offs", + "description": "" + }, + { + "type": "size_t", + "name": "size", + "description": "" + } + ] + }, + { + "name": "MemPool", + "description": "Memory pool", + "fields": [ + { + "type": "AllocList", + "name": "large", + "description": "" + }, + { + "type": "AllocList[MEMPOOL_BUCKET_SIZE]", + "name": "buckets", + "description": "" + }, + { + "type": "Arena", + "name": "arena", + "description": "" + } + ] + }, + { + "name": "ObjPool", + "description": "Object pool", + "fields": [ + { + "type": "uintptr_t", + "name": "mem", + "description": "" + }, + { + "type": "uintptr_t", + "name": "offs", + "description": "" + }, + { + "type": "size_t", + "name": "objSize", + "description": "" + }, + { + "type": "size_t", + "name": "freeBlocks", + "description": "" + }, + { + "type": "size_t", + "name": "memSize", + "description": "" + } + ] + }, + { + "name": "BiStack", + "description": "Double-ended stack (aka Deque)", + "fields": [ + { + "type": "uintptr_t", + "name": "mem", + "description": "" + }, + { + "type": "uintptr_t", + "name": "front", + "description": "" + }, + { + "type": "uintptr_t", + "name": "back", + "description": "" + }, + { + "type": "size_t", + "name": "size", + "description": "" + } + ] + } + ], + "aliases": [ + ], + "enums": [ + ], + "callbacks": [ + ], + "functions": [ + { + "name": "CreateMemPool", + "description": "", + "returnType": "MemPool", + "params": [ + { + "type": "size_t", + "name": "bytes" + } + ] + }, + { + "name": "CreateMemPoolFromBuffer", + "description": "", + "returnType": "MemPool", + "params": [ + { + "type": "void *", + "name": "buf" + }, + { + "type": "size_t", + "name": "bytes" + } + ] + }, + { + "name": "DestroyMemPool", + "description": "", + "returnType": "void", + "params": [ + { + "type": "MemPool *", + "name": "mempool" + } + ] + }, + { + "name": "MemPoolAlloc", + "description": "", + "returnType": "void *", + "params": [ + { + "type": "MemPool *", + "name": "mempool" + }, + { + "type": "size_t", + "name": "bytes" + } + ] + }, + { + "name": "MemPoolRealloc", + "description": "", + "returnType": "void *", + "params": [ + { + "type": "MemPool *", + "name": "mempool" + }, + { + "type": "void *", + "name": "ptr" + }, + { + "type": "size_t", + "name": "bytes" + } + ] + }, + { + "name": "MemPoolFree", + "description": "", + "returnType": "void", + "params": [ + { + "type": "MemPool *", + "name": "mempool" + }, + { + "type": "void *", + "name": "ptr" + } + ] + }, + { + "name": "MemPoolCleanUp", + "description": "", + "returnType": "void", + "params": [ + { + "type": "MemPool *", + "name": "mempool" + }, + { + "type": "void **", + "name": "ptrref" + } + ] + }, + { + "name": "MemPoolReset", + "description": "", + "returnType": "void", + "params": [ + { + "type": "MemPool *", + "name": "mempool" + } + ] + }, + { + "name": "GetMemPoolFreeMemory", + "description": "", + "returnType": "size_t", + "params": [ + { + "type": "const MemPool", + "name": "mempool" + } + ] + }, + { + "name": "CreateObjPool", + "description": "", + "returnType": "ObjPool", + "params": [ + { + "type": "size_t", + "name": "objsize" + }, + { + "type": "size_t", + "name": "len" + } + ] + }, + { + "name": "CreateObjPoolFromBuffer", + "description": "", + "returnType": "ObjPool", + "params": [ + { + "type": "void *", + "name": "buf" + }, + { + "type": "size_t", + "name": "objsize" + }, + { + "type": "size_t", + "name": "len" + } + ] + }, + { + "name": "DestroyObjPool", + "description": "", + "returnType": "void", + "params": [ + { + "type": "ObjPool *", + "name": "objpool" + } + ] + }, + { + "name": "ObjPoolAlloc", + "description": "", + "returnType": "void *", + "params": [ + { + "type": "ObjPool *", + "name": "objpool" + } + ] + }, + { + "name": "ObjPoolFree", + "description": "", + "returnType": "void", + "params": [ + { + "type": "ObjPool *", + "name": "objpool" + }, + { + "type": "void *", + "name": "ptr" + } + ] + }, + { + "name": "ObjPoolCleanUp", + "description": "", + "returnType": "void", + "params": [ + { + "type": "ObjPool *", + "name": "objpool" + }, + { + "type": "void **", + "name": "ptrref" + } + ] + }, + { + "name": "CreateBiStack", + "description": "", + "returnType": "BiStack", + "params": [ + { + "type": "size_t", + "name": "len" + } + ] + }, + { + "name": "CreateBiStackFromBuffer", + "description": "", + "returnType": "BiStack", + "params": [ + { + "type": "void *", + "name": "buf" + }, + { + "type": "size_t", + "name": "len" + } + ] + }, + { + "name": "DestroyBiStack", + "description": "", + "returnType": "void", + "params": [ + { + "type": "BiStack *", + "name": "destack" + } + ] + }, + { + "name": "BiStackAllocFront", + "description": "", + "returnType": "void *", + "params": [ + { + "type": "BiStack *", + "name": "destack" + }, + { + "type": "size_t", + "name": "len" + } + ] + }, + { + "name": "BiStackAllocBack", + "description": "", + "returnType": "void *", + "params": [ + { + "type": "BiStack *", + "name": "destack" + }, + { + "type": "size_t", + "name": "len" + } + ] + }, + { + "name": "BiStackResetFront", + "description": "", + "returnType": "void", + "params": [ + { + "type": "BiStack *", + "name": "destack" + } + ] + }, + { + "name": "BiStackResetBack", + "description": "", + "returnType": "void", + "params": [ + { + "type": "BiStack *", + "name": "destack" + } + ] + }, + { + "name": "BiStackResetAll", + "description": "", + "returnType": "void", + "params": [ + { + "type": "BiStack *", + "name": "destack" + } + ] + }, + { + "name": "BiStackMargins", + "description": "", + "returnType": "intptr_t", + "params": [ + { + "type": "BiStack", + "name": "destack" + } + ] + } + ] +} diff --git a/raylib-api/rmem.lua b/raylib-api/rmem.lua new file mode 100644 index 0000000..2f35ed3 --- /dev/null +++ b/raylib-api/rmem.lua @@ -0,0 +1,379 @@ +return { + defines = { + { + name = "RMEM_H", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RMEMAPI", + type = "UNKNOWN", + value = "__declspec(dllexport)", + description = "We are building library as a Win32 shared library (.dll)" + }, + { + name = "RMEM_VERSION", + type = "STRING", + value = "v1.3", + description = "changelog at bottom of header." + } + }, + structs = { + { + name = "MemNode", + description = "Memory pool node", + fields = { + { + type = "size_t", + name = "size", + description = "" + }, + { + type = "MemNode *", + name = "next", + description = "" + }, + { + type = "MemNode *", + name = "prev", + description = "" + } + } + }, + { + name = "AllocList", + description = "Freelist implementation", + fields = { + { + type = "MemNode *", + name = "head", + description = "" + }, + { + type = "MemNode *", + name = "tail", + description = "" + }, + { + type = "size_t", + name = "len", + description = "" + } + } + }, + { + name = "Arena", + description = "Arena allocator", + fields = { + { + type = "uintptr_t", + name = "mem", + description = "" + }, + { + type = "uintptr_t", + name = "offs", + description = "" + }, + { + type = "size_t", + name = "size", + description = "" + } + } + }, + { + name = "MemPool", + description = "Memory pool", + fields = { + { + type = "AllocList", + name = "large", + description = "" + }, + { + type = "AllocList[MEMPOOL_BUCKET_SIZE]", + name = "buckets", + description = "" + }, + { + type = "Arena", + name = "arena", + description = "" + } + } + }, + { + name = "ObjPool", + description = "Object pool", + fields = { + { + type = "uintptr_t", + name = "mem", + description = "" + }, + { + type = "uintptr_t", + name = "offs", + description = "" + }, + { + type = "size_t", + name = "objSize", + description = "" + }, + { + type = "size_t", + name = "freeBlocks", + description = "" + }, + { + type = "size_t", + name = "memSize", + description = "" + } + } + }, + { + name = "BiStack", + description = "Double-ended stack (aka Deque)", + fields = { + { + type = "uintptr_t", + name = "mem", + description = "" + }, + { + type = "uintptr_t", + name = "front", + description = "" + }, + { + type = "uintptr_t", + name = "back", + description = "" + }, + { + type = "size_t", + name = "size", + description = "" + } + } + } + }, + aliases = { + }, + enums = { + }, + callbacks = { + }, + functions = { + { + name = "CreateMemPool", + description = "", + returnType = "MemPool", + params = { + {type = "size_t", name = "bytes"} + } + }, + { + name = "CreateMemPoolFromBuffer", + description = "", + returnType = "MemPool", + params = { + {type = "void *", name = "buf"}, + {type = "size_t", name = "bytes"} + } + }, + { + name = "DestroyMemPool", + description = "", + returnType = "void", + params = { + {type = "MemPool *", name = "mempool"} + } + }, + { + name = "MemPoolAlloc", + description = "", + returnType = "void *", + params = { + {type = "MemPool *", name = "mempool"}, + {type = "size_t", name = "bytes"} + } + }, + { + name = "MemPoolRealloc", + description = "", + returnType = "void *", + params = { + {type = "MemPool *", name = "mempool"}, + {type = "void *", name = "ptr"}, + {type = "size_t", name = "bytes"} + } + }, + { + name = "MemPoolFree", + description = "", + returnType = "void", + params = { + {type = "MemPool *", name = "mempool"}, + {type = "void *", name = "ptr"} + } + }, + { + name = "MemPoolCleanUp", + description = "", + returnType = "void", + params = { + {type = "MemPool *", name = "mempool"}, + {type = "void **", name = "ptrref"} + } + }, + { + name = "MemPoolReset", + description = "", + returnType = "void", + params = { + {type = "MemPool *", name = "mempool"} + } + }, + { + name = "GetMemPoolFreeMemory", + description = "", + returnType = "size_t", + params = { + {type = "const MemPool", name = "mempool"} + } + }, + { + name = "CreateObjPool", + description = "", + returnType = "ObjPool", + params = { + {type = "size_t", name = "objsize"}, + {type = "size_t", name = "len"} + } + }, + { + name = "CreateObjPoolFromBuffer", + description = "", + returnType = "ObjPool", + params = { + {type = "void *", name = "buf"}, + {type = "size_t", name = "objsize"}, + {type = "size_t", name = "len"} + } + }, + { + name = "DestroyObjPool", + description = "", + returnType = "void", + params = { + {type = "ObjPool *", name = "objpool"} + } + }, + { + name = "ObjPoolAlloc", + description = "", + returnType = "void *", + params = { + {type = "ObjPool *", name = "objpool"} + } + }, + { + name = "ObjPoolFree", + description = "", + returnType = "void", + params = { + {type = "ObjPool *", name = "objpool"}, + {type = "void *", name = "ptr"} + } + }, + { + name = "ObjPoolCleanUp", + description = "", + returnType = "void", + params = { + {type = "ObjPool *", name = "objpool"}, + {type = "void **", name = "ptrref"} + } + }, + { + name = "CreateBiStack", + description = "", + returnType = "BiStack", + params = { + {type = "size_t", name = "len"} + } + }, + { + name = "CreateBiStackFromBuffer", + description = "", + returnType = "BiStack", + params = { + {type = "void *", name = "buf"}, + {type = "size_t", name = "len"} + } + }, + { + name = "DestroyBiStack", + description = "", + returnType = "void", + params = { + {type = "BiStack *", name = "destack"} + } + }, + { + name = "BiStackAllocFront", + description = "", + returnType = "void *", + params = { + {type = "BiStack *", name = "destack"}, + {type = "size_t", name = "len"} + } + }, + { + name = "BiStackAllocBack", + description = "", + returnType = "void *", + params = { + {type = "BiStack *", name = "destack"}, + {type = "size_t", name = "len"} + } + }, + { + name = "BiStackResetFront", + description = "", + returnType = "void", + params = { + {type = "BiStack *", name = "destack"} + } + }, + { + name = "BiStackResetBack", + description = "", + returnType = "void", + params = { + {type = "BiStack *", name = "destack"} + } + }, + { + name = "BiStackResetAll", + description = "", + returnType = "void", + params = { + {type = "BiStack *", name = "destack"} + } + }, + { + name = "BiStackMargins", + description = "", + returnType = "intptr_t", + params = { + {type = "BiStack", name = "destack"} + } + } + } +} diff --git a/raylib-api/rmem.txt b/raylib-api/rmem.txt new file mode 100644 index 0000000..8aa023d --- /dev/null +++ b/raylib-api/rmem.txt @@ -0,0 +1,206 @@ + +Defines found: 3 + +Define 001: RMEM_H + Name: RMEM_H + Type: GUARD + Value: + Description: +Define 002: RMEMAPI + Name: RMEMAPI + Type: UNKNOWN + Value: __declspec(dllexport) + Description: We are building library as a Win32 shared library (.dll) +Define 003: RMEM_VERSION + Name: RMEM_VERSION + Type: STRING + Value: "v1.3" + Description: changelog at bottom of header. + +Structures found: 6 + +Struct 01: MemNode (3 fields) + Name: MemNode + Description: Memory pool node + Field[1]: size_t size + Field[2]: MemNode * next + Field[3]: MemNode * prev +Struct 02: AllocList (3 fields) + Name: AllocList + Description: Freelist implementation + Field[1]: MemNode * head + Field[2]: MemNode * tail + Field[3]: size_t len +Struct 03: Arena (3 fields) + Name: Arena + Description: Arena allocator + Field[1]: uintptr_t mem + Field[2]: uintptr_t offs + Field[3]: size_t size +Struct 04: MemPool (3 fields) + Name: MemPool + Description: Memory pool + Field[1]: AllocList large + Field[2]: AllocList[MEMPOOL_BUCKET_SIZE] buckets + Field[3]: Arena arena +Struct 05: ObjPool (5 fields) + Name: ObjPool + Description: Object pool + Field[1]: uintptr_t mem + Field[2]: uintptr_t offs + Field[3]: size_t objSize + Field[4]: size_t freeBlocks + Field[5]: size_t memSize +Struct 06: BiStack (4 fields) + Name: BiStack + Description: Double-ended stack (aka Deque) + Field[1]: uintptr_t mem + Field[2]: uintptr_t front + Field[3]: uintptr_t back + Field[4]: size_t size + +Aliases found: 0 + + +Enums found: 0 + + +Callbacks found: 0 + + +Functions found: 24 + +Function 001: CreateMemPool() (1 input parameters) + Name: CreateMemPool + Return type: MemPool + Description: + Param[1]: bytes (type: size_t) +Function 002: CreateMemPoolFromBuffer() (2 input parameters) + Name: CreateMemPoolFromBuffer + Return type: MemPool + Description: + Param[1]: buf (type: void *) + Param[2]: bytes (type: size_t) +Function 003: DestroyMemPool() (1 input parameters) + Name: DestroyMemPool + Return type: void + Description: + Param[1]: mempool (type: MemPool *) +Function 004: MemPoolAlloc() (2 input parameters) + Name: MemPoolAlloc + Return type: void * + Description: + Param[1]: mempool (type: MemPool *) + Param[2]: bytes (type: size_t) +Function 005: MemPoolRealloc() (3 input parameters) + Name: MemPoolRealloc + Return type: void * + Description: + Param[1]: mempool (type: MemPool *) + Param[2]: ptr (type: void *) + Param[3]: bytes (type: size_t) +Function 006: MemPoolFree() (2 input parameters) + Name: MemPoolFree + Return type: void + Description: + Param[1]: mempool (type: MemPool *) + Param[2]: ptr (type: void *) +Function 007: MemPoolCleanUp() (2 input parameters) + Name: MemPoolCleanUp + Return type: void + Description: + Param[1]: mempool (type: MemPool *) + Param[2]: ptrref (type: void **) +Function 008: MemPoolReset() (1 input parameters) + Name: MemPoolReset + Return type: void + Description: + Param[1]: mempool (type: MemPool *) +Function 009: GetMemPoolFreeMemory() (1 input parameters) + Name: GetMemPoolFreeMemory + Return type: size_t + Description: + Param[1]: mempool (type: const MemPool) +Function 010: CreateObjPool() (2 input parameters) + Name: CreateObjPool + Return type: ObjPool + Description: + Param[1]: objsize (type: size_t) + Param[2]: len (type: size_t) +Function 011: CreateObjPoolFromBuffer() (3 input parameters) + Name: CreateObjPoolFromBuffer + Return type: ObjPool + Description: + Param[1]: buf (type: void *) + Param[2]: objsize (type: size_t) + Param[3]: len (type: size_t) +Function 012: DestroyObjPool() (1 input parameters) + Name: DestroyObjPool + Return type: void + Description: + Param[1]: objpool (type: ObjPool *) +Function 013: ObjPoolAlloc() (1 input parameters) + Name: ObjPoolAlloc + Return type: void * + Description: + Param[1]: objpool (type: ObjPool *) +Function 014: ObjPoolFree() (2 input parameters) + Name: ObjPoolFree + Return type: void + Description: + Param[1]: objpool (type: ObjPool *) + Param[2]: ptr (type: void *) +Function 015: ObjPoolCleanUp() (2 input parameters) + Name: ObjPoolCleanUp + Return type: void + Description: + Param[1]: objpool (type: ObjPool *) + Param[2]: ptrref (type: void **) +Function 016: CreateBiStack() (1 input parameters) + Name: CreateBiStack + Return type: BiStack + Description: + Param[1]: len (type: size_t) +Function 017: CreateBiStackFromBuffer() (2 input parameters) + Name: CreateBiStackFromBuffer + Return type: BiStack + Description: + Param[1]: buf (type: void *) + Param[2]: len (type: size_t) +Function 018: DestroyBiStack() (1 input parameters) + Name: DestroyBiStack + Return type: void + Description: + Param[1]: destack (type: BiStack *) +Function 019: BiStackAllocFront() (2 input parameters) + Name: BiStackAllocFront + Return type: void * + Description: + Param[1]: destack (type: BiStack *) + Param[2]: len (type: size_t) +Function 020: BiStackAllocBack() (2 input parameters) + Name: BiStackAllocBack + Return type: void * + Description: + Param[1]: destack (type: BiStack *) + Param[2]: len (type: size_t) +Function 021: BiStackResetFront() (1 input parameters) + Name: BiStackResetFront + Return type: void + Description: + Param[1]: destack (type: BiStack *) +Function 022: BiStackResetBack() (1 input parameters) + Name: BiStackResetBack + Return type: void + Description: + Param[1]: destack (type: BiStack *) +Function 023: BiStackResetAll() (1 input parameters) + Name: BiStackResetAll + Return type: void + Description: + Param[1]: destack (type: BiStack *) +Function 024: BiStackMargins() (1 input parameters) + Name: BiStackMargins + Return type: intptr_t + Description: + Param[1]: destack (type: BiStack) diff --git a/raylib-api/rmem.xml b/raylib-api/rmem.xml new file mode 100644 index 0000000..4b42448 --- /dev/null +++ b/raylib-api/rmem.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/raylib-api/rres.json b/raylib-api/rres.json new file mode 100644 index 0000000..02c1448 --- /dev/null +++ b/raylib-api/rres.json @@ -0,0 +1,462 @@ +{ + "defines": [ + { + "name": "RRES_H", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RRESAPI", + "type": "UNKNOWN", + "value": "__declspec(dllexport)", + "description": "We are building the library as a Win32 shared library (.dll)" + }, + { + "name": "RRES_MALLOC(sz)", + "type": "MACRO", + "value": "malloc(sz)", + "description": "" + }, + { + "name": "RRES_CALLOC(ptr,sz)", + "type": "MACRO", + "value": "calloc(ptr,sz)", + "description": "" + }, + { + "name": "RRES_REALLOC(ptr,sz)", + "type": "MACRO", + "value": "realloc(ptr,sz)", + "description": "" + }, + { + "name": "RRES_FREE(ptr)", + "type": "MACRO", + "value": "free(ptr)", + "description": "" + }, + { + "name": "RRES_SUPPORT_LOG_INFO", + "type": "GUARD", + "value": "", + "description": "" + }, + { + "name": "RRES_LOG(...)", + "type": "MACRO", + "value": "printf(__VA_ARGS__)", + "description": "" + }, + { + "name": "RRES_MAX_FILENAME_SIZE", + "type": "INT", + "value": 1024, + "description": "" + } + ], + "structs": [ + { + "name": "rresFileHeader", + "description": "rres file header (16 bytes)", + "fields": [ + { + "type": "unsigned char[4]", + "name": "id", + "description": "File identifier: rres" + }, + { + "type": "unsigned short", + "name": "version", + "description": "File version: 100 for version 1.0" + }, + { + "type": "unsigned short", + "name": "chunkCount", + "description": "Number of resource chunks in the file (MAX: 65535)" + }, + { + "type": "unsigned int", + "name": "cdOffset", + "description": "Central Directory offset in file (0 if not available)" + }, + { + "type": "unsigned int", + "name": "reserved", + "description": "" + } + ] + }, + { + "name": "rresResourceChunkInfo", + "description": "rres resource chunk info header (32 bytes)", + "fields": [ + { + "type": "unsigned char[4]", + "name": "type", + "description": "Resource chunk type (FourCC)" + }, + { + "type": "unsigned int", + "name": "id", + "description": "Resource chunk identifier (generated from filename CRC32 hash)" + }, + { + "type": "unsigned char", + "name": "compType", + "description": "Data compression algorithm" + }, + { + "type": "unsigned char", + "name": "cipherType", + "description": "Data encription algorithm" + }, + { + "type": "unsigned short", + "name": "flags", + "description": "Data flags (if required)" + }, + { + "type": "unsigned int", + "name": "packedSize", + "description": "Data chunk size (compressed/encrypted + custom data appended)" + }, + { + "type": "unsigned int", + "name": "baseSize", + "description": "Data base size (uncompressed/unencrypted)" + }, + { + "type": "unsigned int", + "name": "nextOffset", + "description": "Next resource chunk global offset (if resource has multiple chunks)" + }, + { + "type": "unsigned int", + "name": "reserved", + "description": "" + }, + { + "type": "unsigned int", + "name": "crc32", + "description": "Data chunk CRC32 (propCount + props[] + data)" + } + ] + }, + { + "name": "rresResourceChunkData", + "description": "rres resource chunk data", + "fields": [ + { + "type": "unsigned int", + "name": "propCount", + "description": "Resource chunk properties count" + }, + { + "type": "unsigned int *", + "name": "props", + "description": "Resource chunk properties" + }, + { + "type": "void *", + "name": "raw", + "description": "Resource chunk raw data" + } + ] + }, + { + "name": "rresResourceChunk", + "description": "rres resource chunk", + "fields": [ + { + "type": "rresResourceChunkInfo", + "name": "info", + "description": "Resource chunk info" + }, + { + "type": "rresResourceChunkData", + "name": "data", + "description": "Resource chunk packed data, contains propCount, props[] and raw data" + } + ] + }, + { + "name": "rresResourceMulti", + "description": "NOTE: It supports multiple resource chunks", + "fields": [ + { + "type": "unsigned int", + "name": "count", + "description": "Resource chunks count" + }, + { + "type": "rresResourceChunk *", + "name": "chunks", + "description": "Resource chunks" + } + ] + }, + { + "name": "rresDirEntry", + "description": "CDIR: rres central directory entry", + "fields": [ + { + "type": "unsigned int", + "name": "id", + "description": "Resource id" + }, + { + "type": "unsigned int", + "name": "offset", + "description": "Resource global offset in file" + }, + { + "type": "unsigned int", + "name": "reserved", + "description": "reserved" + }, + { + "type": "unsigned int", + "name": "fileNameSize", + "description": "Resource fileName size (NULL terminator and 4-byte alignment padding considered)" + }, + { + "type": "char[RRES_MAX_FILENAME_SIZE]", + "name": "fileName", + "description": "Resource original fileName (NULL terminated and padded to 4-byte alignment)" + } + ] + }, + { + "name": "rresCentralDir", + "description": "NOTE: This data conforms the rresResourceChunkData", + "fields": [ + { + "type": "unsigned int", + "name": "count", + "description": "Central directory entries count" + }, + { + "type": "rresDirEntry *", + "name": "entries", + "description": "Central directory entries" + } + ] + }, + { + "name": "rresFontGlyphInfo", + "description": "NOTE: And array of this type conforms the rresResourceChunkData", + "fields": [ + { + "type": "int", + "name": "x", + "description": "Glyph rectangle in the atlas image" + }, + { + "type": "int", + "name": "y", + "description": "Glyph rectangle in the atlas image" + }, + { + "type": "int", + "name": "width", + "description": "Glyph rectangle in the atlas image" + }, + { + "type": "int", + "name": "height", + "description": "Glyph rectangle in the atlas image" + }, + { + "type": "int", + "name": "value", + "description": "Glyph codepoint value" + }, + { + "type": "int", + "name": "offsetX", + "description": "Glyph drawing offset (from base line)" + }, + { + "type": "int", + "name": "offsetY", + "description": "Glyph drawing offset (from base line)" + }, + { + "type": "int", + "name": "advanceX", + "description": "Glyph advance X for next character" + } + ] + } + ], + "aliases": [ + ], + "enums": [ + ], + "callbacks": [ + ], + "functions": [ + { + "name": "rresLoadResourceChunk", + "description": "Load one resource chunk for provided id", + "returnType": "rresResourceChunk", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int", + "name": "rresId" + } + ] + }, + { + "name": "rresUnloadResourceChunk", + "description": "Unload resource chunk from memory", + "returnType": "void", + "params": [ + { + "type": "rresResourceChunk", + "name": "chunk" + } + ] + }, + { + "name": "rresLoadResourceMulti", + "description": "Load resource for provided id (multiple resource chunks)", + "returnType": "rresResourceMulti", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int", + "name": "rresId" + } + ] + }, + { + "name": "rresUnloadResourceMulti", + "description": "Unload resource from memory (multiple resource chunks)", + "returnType": "void", + "params": [ + { + "type": "rresResourceMulti", + "name": "multi" + } + ] + }, + { + "name": "rresLoadResourceChunkInfo", + "description": "Load resource chunk info for provided id", + "returnType": "rresResourceChunkInfo", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "int", + "name": "rresId" + } + ] + }, + { + "name": "rresLoadResourceChunkInfoAll", + "description": "Load all resource chunks info", + "returnType": "rresResourceChunkInfo *", + "params": [ + { + "type": "const char *", + "name": "fileName" + }, + { + "type": "unsigned int *", + "name": "chunkCount" + } + ] + }, + { + "name": "rresLoadCentralDirectory", + "description": "Load central directory resource chunk from file", + "returnType": "rresCentralDir", + "params": [ + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "rresUnloadCentralDirectory", + "description": "Unload central directory resource chunk", + "returnType": "void", + "params": [ + { + "type": "rresCentralDir", + "name": "dir" + } + ] + }, + { + "name": "rresGetDataType", + "description": "Get rresResourceDataType from FourCC code", + "returnType": "unsigned int", + "params": [ + { + "type": "const unsigned char *", + "name": "fourCC" + } + ] + }, + { + "name": "rresGetResourceId", + "description": "Get resource id for a provided filename", + "returnType": "int", + "params": [ + { + "type": "rresCentralDir", + "name": "dir" + }, + { + "type": "const char *", + "name": "fileName" + } + ] + }, + { + "name": "rresComputeCRC32", + "description": "Compute CRC32 for provided data", + "returnType": "unsigned int", + "params": [ + { + "type": "unsigned char *", + "name": "data" + }, + { + "type": "int", + "name": "len" + } + ] + }, + { + "name": "rresSetCipherPassword", + "description": "Set password to be used on data decryption", + "returnType": "void", + "params": [ + { + "type": "const char *", + "name": "pass" + } + ] + }, + { + "name": "rresGetCipherPassword", + "description": "Get password to be used on data decryption", + "returnType": "const char *" + } + ] +} diff --git a/raylib-api/rres.lua b/raylib-api/rres.lua new file mode 100644 index 0000000..6eea7ac --- /dev/null +++ b/raylib-api/rres.lua @@ -0,0 +1,408 @@ +return { + defines = { + { + name = "RRES_H", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RRESAPI", + type = "UNKNOWN", + value = "__declspec(dllexport)", + description = "We are building the library as a Win32 shared library (.dll)" + }, + { + name = "RRES_MALLOC(sz)", + type = "MACRO", + value = "malloc(sz)", + description = "" + }, + { + name = "RRES_CALLOC(ptr,sz)", + type = "MACRO", + value = "calloc(ptr,sz)", + description = "" + }, + { + name = "RRES_REALLOC(ptr,sz)", + type = "MACRO", + value = "realloc(ptr,sz)", + description = "" + }, + { + name = "RRES_FREE(ptr)", + type = "MACRO", + value = "free(ptr)", + description = "" + }, + { + name = "RRES_SUPPORT_LOG_INFO", + type = "GUARD", + value = "", + description = "" + }, + { + name = "RRES_LOG(...)", + type = "MACRO", + value = "printf(__VA_ARGS__)", + description = "" + }, + { + name = "RRES_MAX_FILENAME_SIZE", + type = "INT", + value = 1024, + description = "" + } + }, + structs = { + { + name = "rresFileHeader", + description = "rres file header (16 bytes)", + fields = { + { + type = "unsigned char[4]", + name = "id", + description = "File identifier: rres" + }, + { + type = "unsigned short", + name = "version", + description = "File version: 100 for version 1.0" + }, + { + type = "unsigned short", + name = "chunkCount", + description = "Number of resource chunks in the file (MAX: 65535)" + }, + { + type = "unsigned int", + name = "cdOffset", + description = "Central Directory offset in file (0 if not available)" + }, + { + type = "unsigned int", + name = "reserved", + description = "" + } + } + }, + { + name = "rresResourceChunkInfo", + description = "rres resource chunk info header (32 bytes)", + fields = { + { + type = "unsigned char[4]", + name = "type", + description = "Resource chunk type (FourCC)" + }, + { + type = "unsigned int", + name = "id", + description = "Resource chunk identifier (generated from filename CRC32 hash)" + }, + { + type = "unsigned char", + name = "compType", + description = "Data compression algorithm" + }, + { + type = "unsigned char", + name = "cipherType", + description = "Data encription algorithm" + }, + { + type = "unsigned short", + name = "flags", + description = "Data flags (if required)" + }, + { + type = "unsigned int", + name = "packedSize", + description = "Data chunk size (compressed/encrypted + custom data appended)" + }, + { + type = "unsigned int", + name = "baseSize", + description = "Data base size (uncompressed/unencrypted)" + }, + { + type = "unsigned int", + name = "nextOffset", + description = "Next resource chunk global offset (if resource has multiple chunks)" + }, + { + type = "unsigned int", + name = "reserved", + description = "" + }, + { + type = "unsigned int", + name = "crc32", + description = "Data chunk CRC32 (propCount + props[] + data)" + } + } + }, + { + name = "rresResourceChunkData", + description = "rres resource chunk data", + fields = { + { + type = "unsigned int", + name = "propCount", + description = "Resource chunk properties count" + }, + { + type = "unsigned int *", + name = "props", + description = "Resource chunk properties" + }, + { + type = "void *", + name = "raw", + description = "Resource chunk raw data" + } + } + }, + { + name = "rresResourceChunk", + description = "rres resource chunk", + fields = { + { + type = "rresResourceChunkInfo", + name = "info", + description = "Resource chunk info" + }, + { + type = "rresResourceChunkData", + name = "data", + description = "Resource chunk packed data, contains propCount, props[] and raw data" + } + } + }, + { + name = "rresResourceMulti", + description = "NOTE: It supports multiple resource chunks", + fields = { + { + type = "unsigned int", + name = "count", + description = "Resource chunks count" + }, + { + type = "rresResourceChunk *", + name = "chunks", + description = "Resource chunks" + } + } + }, + { + name = "rresDirEntry", + description = "CDIR: rres central directory entry", + fields = { + { + type = "unsigned int", + name = "id", + description = "Resource id" + }, + { + type = "unsigned int", + name = "offset", + description = "Resource global offset in file" + }, + { + type = "unsigned int", + name = "reserved", + description = "reserved" + }, + { + type = "unsigned int", + name = "fileNameSize", + description = "Resource fileName size (NULL terminator and 4-byte alignment padding considered)" + }, + { + type = "char[RRES_MAX_FILENAME_SIZE]", + name = "fileName", + description = "Resource original fileName (NULL terminated and padded to 4-byte alignment)" + } + } + }, + { + name = "rresCentralDir", + description = "NOTE: This data conforms the rresResourceChunkData", + fields = { + { + type = "unsigned int", + name = "count", + description = "Central directory entries count" + }, + { + type = "rresDirEntry *", + name = "entries", + description = "Central directory entries" + } + } + }, + { + name = "rresFontGlyphInfo", + description = "NOTE: And array of this type conforms the rresResourceChunkData", + fields = { + { + type = "int", + name = "x", + description = "Glyph rectangle in the atlas image" + }, + { + type = "int", + name = "y", + description = "Glyph rectangle in the atlas image" + }, + { + type = "int", + name = "width", + description = "Glyph rectangle in the atlas image" + }, + { + type = "int", + name = "height", + description = "Glyph rectangle in the atlas image" + }, + { + type = "int", + name = "value", + description = "Glyph codepoint value" + }, + { + type = "int", + name = "offsetX", + description = "Glyph drawing offset (from base line)" + }, + { + type = "int", + name = "offsetY", + description = "Glyph drawing offset (from base line)" + }, + { + type = "int", + name = "advanceX", + description = "Glyph advance X for next character" + } + } + } + }, + aliases = { + }, + enums = { + }, + callbacks = { + }, + functions = { + { + name = "rresLoadResourceChunk", + description = "Load one resource chunk for provided id", + returnType = "rresResourceChunk", + params = { + {type = "const char *", name = "fileName"}, + {type = "int", name = "rresId"} + } + }, + { + name = "rresUnloadResourceChunk", + description = "Unload resource chunk from memory", + returnType = "void", + params = { + {type = "rresResourceChunk", name = "chunk"} + } + }, + { + name = "rresLoadResourceMulti", + description = "Load resource for provided id (multiple resource chunks)", + returnType = "rresResourceMulti", + params = { + {type = "const char *", name = "fileName"}, + {type = "int", name = "rresId"} + } + }, + { + name = "rresUnloadResourceMulti", + description = "Unload resource from memory (multiple resource chunks)", + returnType = "void", + params = { + {type = "rresResourceMulti", name = "multi"} + } + }, + { + name = "rresLoadResourceChunkInfo", + description = "Load resource chunk info for provided id", + returnType = "rresResourceChunkInfo", + params = { + {type = "const char *", name = "fileName"}, + {type = "int", name = "rresId"} + } + }, + { + name = "rresLoadResourceChunkInfoAll", + description = "Load all resource chunks info", + returnType = "rresResourceChunkInfo *", + params = { + {type = "const char *", name = "fileName"}, + {type = "unsigned int *", name = "chunkCount"} + } + }, + { + name = "rresLoadCentralDirectory", + description = "Load central directory resource chunk from file", + returnType = "rresCentralDir", + params = { + {type = "const char *", name = "fileName"} + } + }, + { + name = "rresUnloadCentralDirectory", + description = "Unload central directory resource chunk", + returnType = "void", + params = { + {type = "rresCentralDir", name = "dir"} + } + }, + { + name = "rresGetDataType", + description = "Get rresResourceDataType from FourCC code", + returnType = "unsigned int", + params = { + {type = "const unsigned char *", name = "fourCC"} + } + }, + { + name = "rresGetResourceId", + description = "Get resource id for a provided filename", + returnType = "int", + params = { + {type = "rresCentralDir", name = "dir"}, + {type = "const char *", name = "fileName"} + } + }, + { + name = "rresComputeCRC32", + description = "Compute CRC32 for provided data", + returnType = "unsigned int", + params = { + {type = "unsigned char *", name = "data"}, + {type = "int", name = "len"} + } + }, + { + name = "rresSetCipherPassword", + description = "Set password to be used on data decryption", + returnType = "void", + params = { + {type = "const char *", name = "pass"} + } + }, + { + name = "rresGetCipherPassword", + description = "Get password to be used on data decryption", + returnType = "const char *" + } + } +} diff --git a/raylib-api/rres.txt b/raylib-api/rres.txt new file mode 100644 index 0000000..3632954 --- /dev/null +++ b/raylib-api/rres.txt @@ -0,0 +1,195 @@ + +Defines found: 9 + +Define 001: RRES_H + Name: RRES_H + Type: GUARD + Value: + Description: +Define 002: RRESAPI + Name: RRESAPI + Type: UNKNOWN + Value: __declspec(dllexport) + Description: We are building the library as a Win32 shared library (.dll) +Define 003: RRES_MALLOC(sz) + Name: RRES_MALLOC(sz) + Type: MACRO + Value: malloc(sz) + Description: +Define 004: RRES_CALLOC(ptr,sz) + Name: RRES_CALLOC(ptr,sz) + Type: MACRO + Value: calloc(ptr,sz) + Description: +Define 005: RRES_REALLOC(ptr,sz) + Name: RRES_REALLOC(ptr,sz) + Type: MACRO + Value: realloc(ptr,sz) + Description: +Define 006: RRES_FREE(ptr) + Name: RRES_FREE(ptr) + Type: MACRO + Value: free(ptr) + Description: +Define 007: RRES_SUPPORT_LOG_INFO + Name: RRES_SUPPORT_LOG_INFO + Type: GUARD + Value: + Description: +Define 008: RRES_LOG(...) + Name: RRES_LOG(...) + Type: MACRO + Value: printf(__VA_ARGS__) + Description: +Define 009: RRES_MAX_FILENAME_SIZE + Name: RRES_MAX_FILENAME_SIZE + Type: INT + Value: 1024 + Description: + +Structures found: 8 + +Struct 01: rresFileHeader (5 fields) + Name: rresFileHeader + Description: rres file header (16 bytes) + Field[1]: unsigned char[4] id // File identifier: rres + Field[2]: unsigned short version // File version: 100 for version 1.0 + Field[3]: unsigned short chunkCount // Number of resource chunks in the file (MAX: 65535) + Field[4]: unsigned int cdOffset // Central Directory offset in file (0 if not available) + Field[5]: unsigned int reserved // +Struct 02: rresResourceChunkInfo (10 fields) + Name: rresResourceChunkInfo + Description: rres resource chunk info header (32 bytes) + Field[1]: unsigned char[4] type // Resource chunk type (FourCC) + Field[2]: unsigned int id // Resource chunk identifier (generated from filename CRC32 hash) + Field[3]: unsigned char compType // Data compression algorithm + Field[4]: unsigned char cipherType // Data encription algorithm + Field[5]: unsigned short flags // Data flags (if required) + Field[6]: unsigned int packedSize // Data chunk size (compressed/encrypted + custom data appended) + Field[7]: unsigned int baseSize // Data base size (uncompressed/unencrypted) + Field[8]: unsigned int nextOffset // Next resource chunk global offset (if resource has multiple chunks) + Field[9]: unsigned int reserved // + Field[10]: unsigned int crc32 // Data chunk CRC32 (propCount + props[] + data) +Struct 03: rresResourceChunkData (3 fields) + Name: rresResourceChunkData + Description: rres resource chunk data + Field[1]: unsigned int propCount // Resource chunk properties count + Field[2]: unsigned int * props // Resource chunk properties + Field[3]: void * raw // Resource chunk raw data +Struct 04: rresResourceChunk (2 fields) + Name: rresResourceChunk + Description: rres resource chunk + Field[1]: rresResourceChunkInfo info // Resource chunk info + Field[2]: rresResourceChunkData data // Resource chunk packed data, contains propCount, props[] and raw data +Struct 05: rresResourceMulti (2 fields) + Name: rresResourceMulti + Description: NOTE: It supports multiple resource chunks + Field[1]: unsigned int count // Resource chunks count + Field[2]: rresResourceChunk * chunks // Resource chunks +Struct 06: rresDirEntry (5 fields) + Name: rresDirEntry + Description: CDIR: rres central directory entry + Field[1]: unsigned int id // Resource id + Field[2]: unsigned int offset // Resource global offset in file + Field[3]: unsigned int reserved // reserved + Field[4]: unsigned int fileNameSize // Resource fileName size (NULL terminator and 4-byte alignment padding considered) + Field[5]: char[RRES_MAX_FILENAME_SIZE] fileName // Resource original fileName (NULL terminated and padded to 4-byte alignment) +Struct 07: rresCentralDir (2 fields) + Name: rresCentralDir + Description: NOTE: This data conforms the rresResourceChunkData + Field[1]: unsigned int count // Central directory entries count + Field[2]: rresDirEntry * entries // Central directory entries +Struct 08: rresFontGlyphInfo (8 fields) + Name: rresFontGlyphInfo + Description: NOTE: And array of this type conforms the rresResourceChunkData + Field[1]: int x // Glyph rectangle in the atlas image + Field[2]: int y // Glyph rectangle in the atlas image + Field[3]: int width // Glyph rectangle in the atlas image + Field[4]: int height // Glyph rectangle in the atlas image + Field[5]: int value // Glyph codepoint value + Field[6]: int offsetX // Glyph drawing offset (from base line) + Field[7]: int offsetY // Glyph drawing offset (from base line) + Field[8]: int advanceX // Glyph advance X for next character + +Aliases found: 0 + + +Enums found: 0 + + +Callbacks found: 0 + + +Functions found: 13 + +Function 001: rresLoadResourceChunk() (2 input parameters) + Name: rresLoadResourceChunk + Return type: rresResourceChunk + Description: Load one resource chunk for provided id + Param[1]: fileName (type: const char *) + Param[2]: rresId (type: int) +Function 002: rresUnloadResourceChunk() (1 input parameters) + Name: rresUnloadResourceChunk + Return type: void + Description: Unload resource chunk from memory + Param[1]: chunk (type: rresResourceChunk) +Function 003: rresLoadResourceMulti() (2 input parameters) + Name: rresLoadResourceMulti + Return type: rresResourceMulti + Description: Load resource for provided id (multiple resource chunks) + Param[1]: fileName (type: const char *) + Param[2]: rresId (type: int) +Function 004: rresUnloadResourceMulti() (1 input parameters) + Name: rresUnloadResourceMulti + Return type: void + Description: Unload resource from memory (multiple resource chunks) + Param[1]: multi (type: rresResourceMulti) +Function 005: rresLoadResourceChunkInfo() (2 input parameters) + Name: rresLoadResourceChunkInfo + Return type: rresResourceChunkInfo + Description: Load resource chunk info for provided id + Param[1]: fileName (type: const char *) + Param[2]: rresId (type: int) +Function 006: rresLoadResourceChunkInfoAll() (2 input parameters) + Name: rresLoadResourceChunkInfoAll + Return type: rresResourceChunkInfo * + Description: Load all resource chunks info + Param[1]: fileName (type: const char *) + Param[2]: chunkCount (type: unsigned int *) +Function 007: rresLoadCentralDirectory() (1 input parameters) + Name: rresLoadCentralDirectory + Return type: rresCentralDir + Description: Load central directory resource chunk from file + Param[1]: fileName (type: const char *) +Function 008: rresUnloadCentralDirectory() (1 input parameters) + Name: rresUnloadCentralDirectory + Return type: void + Description: Unload central directory resource chunk + Param[1]: dir (type: rresCentralDir) +Function 009: rresGetDataType() (1 input parameters) + Name: rresGetDataType + Return type: unsigned int + Description: Get rresResourceDataType from FourCC code + Param[1]: fourCC (type: const unsigned char *) +Function 010: rresGetResourceId() (2 input parameters) + Name: rresGetResourceId + Return type: int + Description: Get resource id for a provided filename + Param[1]: dir (type: rresCentralDir) + Param[2]: fileName (type: const char *) +Function 011: rresComputeCRC32() (2 input parameters) + Name: rresComputeCRC32 + Return type: unsigned int + Description: Compute CRC32 for provided data + Param[1]: data (type: unsigned char *) + Param[2]: len (type: int) +Function 012: rresSetCipherPassword() (1 input parameters) + Name: rresSetCipherPassword + Return type: void + Description: Set password to be used on data decryption + Param[1]: pass (type: const char *) +Function 013: rresGetCipherPassword() (0 input parameters) + Name: rresGetCipherPassword + Return type: const char * + Description: Get password to be used on data decryption + No input parameters diff --git a/raylib-api/rres.xml b/raylib-api/rres.xml new file mode 100644 index 0000000..077c5b0 --- /dev/null +++ b/raylib-api/rres.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/raylib-beef.sln b/raylib-beef.sln new file mode 100644 index 0000000..1741d86 --- /dev/null +++ b/raylib-beef.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33502.453 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "generator", "generator\generator.csproj", "{41E5F3B3-561D-4670-8097-9C5695B0006A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {41E5F3B3-561D-4670-8097-9C5695B0006A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {41E5F3B3-561D-4670-8097-9C5695B0006A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {41E5F3B3-561D-4670-8097-9C5695B0006A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {41E5F3B3-561D-4670-8097-9C5695B0006A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FF8032B5-1C8E-41D9-900E-23666B500305} + EndGlobalSection +EndGlobal