Full Code of love2d/love for AI

main 7d41f3ad30f4 cached
1124 files
37.3 MB
9.8M tokens
29837 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (39,335K chars total). Download the full file to get everything.
Repository: love2d/love
Branch: main
Commit: 7d41f3ad30f4
Files: 1124
Total size: 37.3 MB

Directory structure:
gitextract_aaj4kzw1/

├── .gitattributes
├── .github/
│   └── workflows/
│       └── main.yml
├── .gitignore
├── CMakeLists.txt
├── changes.txt
├── extra/
│   ├── cmake/
│   │   ├── FindHarfbuzz.cmake
│   │   ├── FindLuaJIT.cmake
│   │   ├── FindModPlug.cmake
│   │   ├── FindOgg.cmake
│   │   ├── FindSDL2.cmake
│   │   ├── FindTheora.cmake
│   │   ├── FindVorbis.cmake
│   │   ├── LoveMacros.cmake
│   │   └── NSIS.template.in
│   ├── resources/
│   │   ├── NotoSans-Regular.ttf.gzip
│   │   └── b64.lua
│   └── windows/
│       └── love.rc
├── license.txt
├── platform/
│   ├── unix/
│   │   ├── debian/
│   │   │   ├── changelog.in
│   │   │   ├── compat
│   │   │   ├── control.in
│   │   │   ├── copyright
│   │   │   ├── docs
│   │   │   ├── liblove-unstable0.docs
│   │   │   ├── liblove-unstable0.install
│   │   │   ├── liblove0.docs
│   │   │   ├── liblove0.install
│   │   │   ├── love-unstable.install
│   │   │   ├── love-unstable.manpages
│   │   │   ├── love.install
│   │   │   ├── love.manpages
│   │   │   ├── rules.in
│   │   │   └── source/
│   │   │       └── format
│   │   ├── love.6
│   │   ├── love.desktop.in
│   │   └── love.xml
│   └── xcode/
│       ├── Images.xcassets/
│       │   ├── Contents.json
│       │   ├── OS X AppIcon.appiconset/
│       │   │   └── Contents.json
│       │   └── iOS AppIcon.appiconset/
│       │       └── Contents.json
│       ├── ios/
│       │   ├── Launch Screen.xib
│       │   ├── love-ios.plist
│       │   └── lovedocument.icns
│       ├── liblove.xcodeproj/
│       │   ├── project.pbxproj
│       │   └── project.xcworkspace/
│       │       └── contents.xcworkspacedata
│       ├── love.entitlements
│       ├── love.xcodeproj/
│       │   ├── TemplateIcon.icns
│       │   ├── default.pbxuser
│       │   ├── project.pbxproj
│       │   └── project.xcworkspace/
│       │       ├── contents.xcworkspacedata
│       │       └── xcshareddata/
│       │           ├── IDEWorkspaceChecks.plist
│       │           └── WorkspaceSettings.xcsettings
│       └── macosx/
│           ├── liblove-macosx.plist
│           ├── love-macosx.plist
│           └── macos-copy-app.plist
├── readme-iOS.rtf
├── readme.md
├── src/
│   ├── .editorconfig
│   ├── common/
│   │   ├── Color.h
│   │   ├── Data.cpp
│   │   ├── Data.h
│   │   ├── EnumMap.h
│   │   ├── Exception.cpp
│   │   ├── Exception.h
│   │   ├── Matrix.cpp
│   │   ├── Matrix.h
│   │   ├── Module.cpp
│   │   ├── Module.h
│   │   ├── Object.cpp
│   │   ├── Object.h
│   │   ├── Optional.h
│   │   ├── Range.h
│   │   ├── Reference.cpp
│   │   ├── Reference.h
│   │   ├── Stream.cpp
│   │   ├── Stream.h
│   │   ├── StringMap.cpp
│   │   ├── StringMap.h
│   │   ├── Variant.cpp
│   │   ├── Variant.h
│   │   ├── Vector.cpp
│   │   ├── Vector.h
│   │   ├── android.cpp
│   │   ├── android.h
│   │   ├── apple.h
│   │   ├── apple.mm
│   │   ├── b64.cpp
│   │   ├── b64.h
│   │   ├── config.h
│   │   ├── delay.cpp
│   │   ├── delay.h
│   │   ├── deprecation.cpp
│   │   ├── deprecation.h
│   │   ├── floattypes.cpp
│   │   ├── floattypes.h
│   │   ├── int.h
│   │   ├── ios.h
│   │   ├── ios.mm
│   │   ├── macos.h
│   │   ├── macos.mm
│   │   ├── math.h
│   │   ├── memory.cpp
│   │   ├── memory.h
│   │   ├── pixelformat.cpp
│   │   ├── pixelformat.h
│   │   ├── runtime.cpp
│   │   ├── runtime.h
│   │   ├── types.cpp
│   │   ├── types.h
│   │   ├── utf8.cpp
│   │   ├── utf8.h
│   │   └── version.h
│   ├── libraries/
│   │   ├── .editorconfig
│   │   ├── Wuff/
│   │   │   ├── wuff.c
│   │   │   ├── wuff.h
│   │   │   ├── wuff_config.h
│   │   │   ├── wuff_convert.c
│   │   │   ├── wuff_convert.h
│   │   │   ├── wuff_internal.c
│   │   │   ├── wuff_internal.h
│   │   │   └── wuff_memory.c
│   │   ├── box2d/
│   │   │   ├── Box2D.h
│   │   │   ├── README.MODIFIED
│   │   │   ├── b2_api.h
│   │   │   ├── b2_block_allocator.h
│   │   │   ├── b2_body.h
│   │   │   ├── b2_broad_phase.h
│   │   │   ├── b2_chain_shape.h
│   │   │   ├── b2_circle_shape.h
│   │   │   ├── b2_collision.h
│   │   │   ├── b2_common.h
│   │   │   ├── b2_contact.h
│   │   │   ├── b2_contact_manager.h
│   │   │   ├── b2_distance.h
│   │   │   ├── b2_distance_joint.h
│   │   │   ├── b2_draw.h
│   │   │   ├── b2_dynamic_tree.h
│   │   │   ├── b2_edge_shape.h
│   │   │   ├── b2_fixture.h
│   │   │   ├── b2_friction_joint.h
│   │   │   ├── b2_gear_joint.h
│   │   │   ├── b2_growable_stack.h
│   │   │   ├── b2_joint.h
│   │   │   ├── b2_math.h
│   │   │   ├── b2_motor_joint.h
│   │   │   ├── b2_mouse_joint.h
│   │   │   ├── b2_polygon_shape.h
│   │   │   ├── b2_prismatic_joint.h
│   │   │   ├── b2_pulley_joint.h
│   │   │   ├── b2_revolute_joint.h
│   │   │   ├── b2_rope.h
│   │   │   ├── b2_settings.h
│   │   │   ├── b2_shape.h
│   │   │   ├── b2_stack_allocator.h
│   │   │   ├── b2_time_of_impact.h
│   │   │   ├── b2_time_step.h
│   │   │   ├── b2_timer.h
│   │   │   ├── b2_types.h
│   │   │   ├── b2_weld_joint.h
│   │   │   ├── b2_wheel_joint.h
│   │   │   ├── b2_world.h
│   │   │   ├── b2_world_callbacks.h
│   │   │   ├── collision/
│   │   │   │   ├── b2_broad_phase.cpp
│   │   │   │   ├── b2_chain_shape.cpp
│   │   │   │   ├── b2_circle_shape.cpp
│   │   │   │   ├── b2_collide_circle.cpp
│   │   │   │   ├── b2_collide_edge.cpp
│   │   │   │   ├── b2_collide_polygon.cpp
│   │   │   │   ├── b2_collision.cpp
│   │   │   │   ├── b2_distance.cpp
│   │   │   │   ├── b2_dynamic_tree.cpp
│   │   │   │   ├── b2_edge_shape.cpp
│   │   │   │   ├── b2_polygon_shape.cpp
│   │   │   │   └── b2_time_of_impact.cpp
│   │   │   ├── common/
│   │   │   │   ├── b2_block_allocator.cpp
│   │   │   │   ├── b2_draw.cpp
│   │   │   │   ├── b2_math.cpp
│   │   │   │   ├── b2_settings.cpp
│   │   │   │   ├── b2_stack_allocator.cpp
│   │   │   │   └── b2_timer.cpp
│   │   │   ├── dynamics/
│   │   │   │   ├── b2_body.cpp
│   │   │   │   ├── b2_chain_circle_contact.cpp
│   │   │   │   ├── b2_chain_circle_contact.h
│   │   │   │   ├── b2_chain_polygon_contact.cpp
│   │   │   │   ├── b2_chain_polygon_contact.h
│   │   │   │   ├── b2_circle_contact.cpp
│   │   │   │   ├── b2_circle_contact.h
│   │   │   │   ├── b2_contact.cpp
│   │   │   │   ├── b2_contact_manager.cpp
│   │   │   │   ├── b2_contact_solver.cpp
│   │   │   │   ├── b2_contact_solver.h
│   │   │   │   ├── b2_distance_joint.cpp
│   │   │   │   ├── b2_edge_circle_contact.cpp
│   │   │   │   ├── b2_edge_circle_contact.h
│   │   │   │   ├── b2_edge_polygon_contact.cpp
│   │   │   │   ├── b2_edge_polygon_contact.h
│   │   │   │   ├── b2_fixture.cpp
│   │   │   │   ├── b2_friction_joint.cpp
│   │   │   │   ├── b2_gear_joint.cpp
│   │   │   │   ├── b2_island.cpp
│   │   │   │   ├── b2_island.h
│   │   │   │   ├── b2_joint.cpp
│   │   │   │   ├── b2_motor_joint.cpp
│   │   │   │   ├── b2_mouse_joint.cpp
│   │   │   │   ├── b2_polygon_circle_contact.cpp
│   │   │   │   ├── b2_polygon_circle_contact.h
│   │   │   │   ├── b2_polygon_contact.cpp
│   │   │   │   ├── b2_polygon_contact.h
│   │   │   │   ├── b2_prismatic_joint.cpp
│   │   │   │   ├── b2_pulley_joint.cpp
│   │   │   │   ├── b2_revolute_joint.cpp
│   │   │   │   ├── b2_weld_joint.cpp
│   │   │   │   ├── b2_wheel_joint.cpp
│   │   │   │   ├── b2_world.cpp
│   │   │   │   └── b2_world_callbacks.cpp
│   │   │   └── rope/
│   │   │       └── b2_rope.cpp
│   │   ├── ddsparse/
│   │   │   ├── ddsinfo.h
│   │   │   ├── ddsparse.cpp
│   │   │   └── ddsparse.h
│   │   ├── dr/
│   │   │   ├── dr_flac.h
│   │   │   └── dr_mp3.h
│   │   ├── enet/
│   │   │   ├── enet.cpp
│   │   │   ├── libenet/
│   │   │   │   ├── ChangeLog
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README
│   │   │   │   ├── callbacks.c
│   │   │   │   ├── compress.c
│   │   │   │   ├── host.c
│   │   │   │   ├── include/
│   │   │   │   │   └── enet/
│   │   │   │   │       ├── callbacks.h
│   │   │   │   │       ├── enet.h
│   │   │   │   │       ├── list.h
│   │   │   │   │       ├── protocol.h
│   │   │   │   │       ├── time.h
│   │   │   │   │       ├── types.h
│   │   │   │   │       ├── unix.h
│   │   │   │   │       ├── utility.h
│   │   │   │   │       └── win32.h
│   │   │   │   ├── list.c
│   │   │   │   ├── packet.c
│   │   │   │   ├── peer.c
│   │   │   │   ├── protocol.c
│   │   │   │   ├── unix.c
│   │   │   │   └── win32.c
│   │   │   └── lua-enet.h
│   │   ├── glad/
│   │   │   ├── glad.cpp
│   │   │   ├── glad.hpp
│   │   │   └── gladfuncs.hpp
│   │   ├── glslang/
│   │   │   ├── SPIRV/
│   │   │   │   ├── GLSL.ext.AMD.h
│   │   │   │   ├── GLSL.ext.ARM.h
│   │   │   │   ├── GLSL.ext.EXT.h
│   │   │   │   ├── GLSL.ext.KHR.h
│   │   │   │   ├── GLSL.ext.NV.h
│   │   │   │   ├── GLSL.ext.QCOM.h
│   │   │   │   ├── GLSL.std.450.h
│   │   │   │   ├── GlslangToSpv.cpp
│   │   │   │   ├── GlslangToSpv.h
│   │   │   │   ├── InReadableOrder.cpp
│   │   │   │   ├── Logger.cpp
│   │   │   │   ├── Logger.h
│   │   │   │   ├── NonSemanticDebugPrintf.h
│   │   │   │   ├── NonSemanticShaderDebugInfo100.h
│   │   │   │   ├── SPVRemapper.cpp
│   │   │   │   ├── SPVRemapper.h
│   │   │   │   ├── SpvBuilder.cpp
│   │   │   │   ├── SpvBuilder.h
│   │   │   │   ├── SpvPostProcess.cpp
│   │   │   │   ├── SpvTools.cpp
│   │   │   │   ├── SpvTools.h
│   │   │   │   ├── bitutils.h
│   │   │   │   ├── disassemble.cpp
│   │   │   │   ├── disassemble.h
│   │   │   │   ├── doc.cpp
│   │   │   │   ├── doc.h
│   │   │   │   ├── hex_float.h
│   │   │   │   ├── spirv.hpp11
│   │   │   │   ├── spvIR.h
│   │   │   │   └── spvUtil.h
│   │   │   └── glslang/
│   │   │       ├── ExtensionHeaders/
│   │   │       │   └── GL_EXT_shader_realtime_clock.glsl
│   │   │       ├── GenericCodeGen/
│   │   │       │   ├── CodeGen.cpp
│   │   │       │   └── Link.cpp
│   │   │       ├── Include/
│   │   │       │   ├── BaseTypes.h
│   │   │       │   ├── Common.h
│   │   │       │   ├── ConstantUnion.h
│   │   │       │   ├── InfoSink.h
│   │   │       │   ├── InitializeGlobals.h
│   │   │       │   ├── PoolAlloc.h
│   │   │       │   ├── ResourceLimits.h
│   │   │       │   ├── ShHandle.h
│   │   │       │   ├── SpirvIntrinsics.h
│   │   │       │   ├── Types.h
│   │   │       │   ├── arrays.h
│   │   │       │   ├── intermediate.h
│   │   │       │   └── visibility.h
│   │   │       ├── MachineIndependent/
│   │   │       │   ├── Constant.cpp
│   │   │       │   ├── InfoSink.cpp
│   │   │       │   ├── Initialize.cpp
│   │   │       │   ├── Initialize.h
│   │   │       │   ├── IntermTraverse.cpp
│   │   │       │   ├── Intermediate.cpp
│   │   │       │   ├── LiveTraverser.h
│   │   │       │   ├── ParseContextBase.cpp
│   │   │       │   ├── ParseHelper.cpp
│   │   │       │   ├── ParseHelper.h
│   │   │       │   ├── PoolAlloc.cpp
│   │   │       │   ├── RemoveTree.cpp
│   │   │       │   ├── RemoveTree.h
│   │   │       │   ├── Scan.cpp
│   │   │       │   ├── Scan.h
│   │   │       │   ├── ScanContext.h
│   │   │       │   ├── ShaderLang.cpp
│   │   │       │   ├── SpirvIntrinsics.cpp
│   │   │       │   ├── SymbolTable.cpp
│   │   │       │   ├── SymbolTable.h
│   │   │       │   ├── Versions.cpp
│   │   │       │   ├── Versions.h
│   │   │       │   ├── attribute.cpp
│   │   │       │   ├── attribute.h
│   │   │       │   ├── gl_types.h
│   │   │       │   ├── glslang_tab.cpp
│   │   │       │   ├── glslang_tab.cpp.h
│   │   │       │   ├── intermOut.cpp
│   │   │       │   ├── iomapper.cpp
│   │   │       │   ├── iomapper.h
│   │   │       │   ├── limits.cpp
│   │   │       │   ├── linkValidate.cpp
│   │   │       │   ├── localintermediate.h
│   │   │       │   ├── parseConst.cpp
│   │   │       │   ├── parseVersions.h
│   │   │       │   ├── pch.h
│   │   │       │   ├── preprocessor/
│   │   │       │   │   ├── Pp.cpp
│   │   │       │   │   ├── PpAtom.cpp
│   │   │       │   │   ├── PpContext.cpp
│   │   │       │   │   ├── PpContext.h
│   │   │       │   │   ├── PpScanner.cpp
│   │   │       │   │   ├── PpTokens.cpp
│   │   │       │   │   └── PpTokens.h
│   │   │       │   ├── propagateNoContraction.cpp
│   │   │       │   ├── propagateNoContraction.h
│   │   │       │   ├── reflection.cpp
│   │   │       │   ├── reflection.h
│   │   │       │   └── span.h
│   │   │       ├── OSDependent/
│   │   │       │   ├── Unix/
│   │   │       │   │   └── ossource.cpp
│   │   │       │   ├── Web/
│   │   │       │   │   ├── glslang.after.js
│   │   │       │   │   ├── glslang.js.cpp
│   │   │       │   │   └── glslang.pre.js
│   │   │       │   ├── Windows/
│   │   │       │   │   └── ossource.cpp
│   │   │       │   └── osinclude.h
│   │   │       ├── Public/
│   │   │       │   ├── ResourceLimits.h
│   │   │       │   └── ShaderLang.h
│   │   │       ├── ResourceLimits/
│   │   │       │   └── ResourceLimits.cpp
│   │   │       └── build_info.h
│   │   ├── lodepng/
│   │   │   ├── lodepng.cpp
│   │   │   └── lodepng.h
│   │   ├── lua53/
│   │   │   ├── lprefix.h
│   │   │   ├── lstrlib.c
│   │   │   ├── lstrlib.h
│   │   │   ├── lutf8lib.c
│   │   │   └── lutf8lib.h
│   │   ├── luahttps/
│   │   │   ├── Android.mk
│   │   │   ├── java.txt
│   │   │   ├── license.txt
│   │   │   └── src/
│   │   │       ├── android/
│   │   │       │   ├── AndroidClient.cpp
│   │   │       │   ├── AndroidClient.h
│   │   │       │   └── java/
│   │   │       │       └── org/
│   │   │       │           └── love2d/
│   │   │       │               └── luahttps/
│   │   │       │                   └── LuaHTTPS.java
│   │   │       ├── apple/
│   │   │       │   ├── NSURLClient.h
│   │   │       │   └── NSURLClient.mm
│   │   │       ├── common/
│   │   │       │   ├── Connection.h
│   │   │       │   ├── ConnectionClient.h
│   │   │       │   ├── HTTPRequest.cpp
│   │   │       │   ├── HTTPRequest.h
│   │   │       │   ├── HTTPS.cpp
│   │   │       │   ├── HTTPS.h
│   │   │       │   ├── HTTPSClient.cpp
│   │   │       │   ├── HTTPSClient.h
│   │   │       │   ├── LibraryLoader.h
│   │   │       │   ├── PlaintextConnection.cpp
│   │   │       │   ├── PlaintextConnection.h
│   │   │       │   └── config.h
│   │   │       ├── generic/
│   │   │       │   ├── CurlClient.cpp
│   │   │       │   ├── CurlClient.h
│   │   │       │   ├── LinktimeLibraryLoader.cpp
│   │   │       │   ├── OpenSSLConnection.cpp
│   │   │       │   ├── OpenSSLConnection.h
│   │   │       │   └── UnixLibraryLoader.cpp
│   │   │       ├── lua/
│   │   │       │   └── main.cpp
│   │   │       └── windows/
│   │   │           ├── SChannelConnection.cpp
│   │   │           ├── SChannelConnection.h
│   │   │           ├── WinINetClient.cpp
│   │   │           ├── WinINetClient.h
│   │   │           └── WindowsLibraryLoader.cpp
│   │   ├── luasocket/
│   │   │   ├── libluasocket/
│   │   │   │   ├── auxiliar.c
│   │   │   │   ├── auxiliar.h
│   │   │   │   ├── buffer.c
│   │   │   │   ├── buffer.h
│   │   │   │   ├── compat.c
│   │   │   │   ├── compat.h
│   │   │   │   ├── except.c
│   │   │   │   ├── except.h
│   │   │   │   ├── ftp.lua
│   │   │   │   ├── ftp.lua.h
│   │   │   │   ├── headers.lua
│   │   │   │   ├── headers.lua.h
│   │   │   │   ├── http.lua
│   │   │   │   ├── http.lua.h
│   │   │   │   ├── inet.c
│   │   │   │   ├── inet.h
│   │   │   │   ├── io.c
│   │   │   │   ├── io.h
│   │   │   │   ├── ltn12.lua
│   │   │   │   ├── ltn12.lua.h
│   │   │   │   ├── luasocket.c
│   │   │   │   ├── luasocket.h
│   │   │   │   ├── makefile
│   │   │   │   ├── mbox.lua
│   │   │   │   ├── mbox.lua.h
│   │   │   │   ├── mime.c
│   │   │   │   ├── mime.h
│   │   │   │   ├── mime.lua
│   │   │   │   ├── mime.lua.h
│   │   │   │   ├── options.c
│   │   │   │   ├── options.h
│   │   │   │   ├── pierror.h
│   │   │   │   ├── select.c
│   │   │   │   ├── select.h
│   │   │   │   ├── serial.c
│   │   │   │   ├── smtp.lua
│   │   │   │   ├── smtp.lua.h
│   │   │   │   ├── socket.h
│   │   │   │   ├── socket.lua
│   │   │   │   ├── socket.lua.h
│   │   │   │   ├── tcp.c
│   │   │   │   ├── tcp.h
│   │   │   │   ├── timeout.c
│   │   │   │   ├── timeout.h
│   │   │   │   ├── tp.lua
│   │   │   │   ├── tp.lua.h
│   │   │   │   ├── udp.c
│   │   │   │   ├── udp.h
│   │   │   │   ├── unix.c
│   │   │   │   ├── unix.h
│   │   │   │   ├── unixdgram.c
│   │   │   │   ├── unixdgram.h
│   │   │   │   ├── unixstream.c
│   │   │   │   ├── unixstream.h
│   │   │   │   ├── url.lua
│   │   │   │   ├── url.lua.h
│   │   │   │   ├── usocket.c
│   │   │   │   ├── usocket.h
│   │   │   │   ├── wsocket.c
│   │   │   │   └── wsocket.h
│   │   │   ├── luasocket.cpp
│   │   │   └── luasocket.h
│   │   ├── lz4/
│   │   │   ├── lz4.c
│   │   │   ├── lz4.h
│   │   │   ├── lz4hc.c
│   │   │   ├── lz4hc.h
│   │   │   └── lz4opt.h
│   │   ├── noise1234/
│   │   │   ├── noise1234.cpp
│   │   │   ├── noise1234.h
│   │   │   ├── simplexnoise1234.cpp
│   │   │   └── simplexnoise1234.h
│   │   ├── physfs/
│   │   │   ├── physfs.c
│   │   │   ├── physfs.h
│   │   │   ├── physfs_archiver_7z.c
│   │   │   ├── physfs_archiver_dir.c
│   │   │   ├── physfs_archiver_grp.c
│   │   │   ├── physfs_archiver_hog.c
│   │   │   ├── physfs_archiver_iso9660.c
│   │   │   ├── physfs_archiver_mvl.c
│   │   │   ├── physfs_archiver_qpak.c
│   │   │   ├── physfs_archiver_slb.c
│   │   │   ├── physfs_archiver_unpacked.c
│   │   │   ├── physfs_archiver_vdf.c
│   │   │   ├── physfs_archiver_wad.c
│   │   │   ├── physfs_archiver_zip.c
│   │   │   ├── physfs_byteorder.c
│   │   │   ├── physfs_casefolding.h
│   │   │   ├── physfs_internal.h
│   │   │   ├── physfs_lzmasdk.h
│   │   │   ├── physfs_miniz.h
│   │   │   ├── physfs_platform_android.c
│   │   │   ├── physfs_platform_apple.m
│   │   │   ├── physfs_platform_haiku.cpp
│   │   │   ├── physfs_platform_os2.c
│   │   │   ├── physfs_platform_posix.c
│   │   │   ├── physfs_platform_qnx.c
│   │   │   ├── physfs_platform_unix.c
│   │   │   ├── physfs_platform_windows.c
│   │   │   ├── physfs_platform_winrt.cpp
│   │   │   ├── physfs_platforms.h
│   │   │   └── physfs_unicode.c
│   │   ├── spirv_cross/
│   │   │   ├── GLSL.std.450.h
│   │   │   ├── include/
│   │   │   │   └── spirv_cross/
│   │   │   │       ├── barrier.hpp
│   │   │   │       ├── external_interface.h
│   │   │   │       ├── image.hpp
│   │   │   │       ├── internal_interface.hpp
│   │   │   │       ├── sampler.hpp
│   │   │   │       └── thread_group.hpp
│   │   │   ├── spirv.hpp
│   │   │   ├── spirv_cfg.cpp
│   │   │   ├── spirv_cfg.hpp
│   │   │   ├── spirv_common.hpp
│   │   │   ├── spirv_cpp.cpp
│   │   │   ├── spirv_cpp.hpp
│   │   │   ├── spirv_cross.cpp
│   │   │   ├── spirv_cross.hpp
│   │   │   ├── spirv_cross_containers.hpp
│   │   │   ├── spirv_cross_error_handling.hpp
│   │   │   ├── spirv_cross_parsed_ir.cpp
│   │   │   ├── spirv_cross_parsed_ir.hpp
│   │   │   ├── spirv_cross_util.cpp
│   │   │   ├── spirv_cross_util.hpp
│   │   │   ├── spirv_glsl.cpp
│   │   │   ├── spirv_glsl.hpp
│   │   │   ├── spirv_hlsl.cpp
│   │   │   ├── spirv_hlsl.hpp
│   │   │   ├── spirv_msl.cpp
│   │   │   ├── spirv_msl.hpp
│   │   │   ├── spirv_parser.cpp
│   │   │   ├── spirv_parser.hpp
│   │   │   ├── spirv_reflect.cpp
│   │   │   └── spirv_reflect.hpp
│   │   ├── stb/
│   │   │   └── stb_image.h
│   │   ├── tinyexr/
│   │   │   └── tinyexr.h
│   │   ├── utf8/
│   │   │   ├── utf8/
│   │   │   │   ├── checked.h
│   │   │   │   ├── core.h
│   │   │   │   └── unchecked.h
│   │   │   └── utf8.h
│   │   ├── vk_video/
│   │   │   ├── vulkan_video_codec_av1std.h
│   │   │   ├── vulkan_video_codec_av1std_decode.h
│   │   │   ├── vulkan_video_codec_av1std_encode.h
│   │   │   ├── vulkan_video_codec_h264std.h
│   │   │   ├── vulkan_video_codec_h264std_decode.h
│   │   │   ├── vulkan_video_codec_h264std_encode.h
│   │   │   ├── vulkan_video_codec_h265std.h
│   │   │   ├── vulkan_video_codec_h265std_decode.h
│   │   │   ├── vulkan_video_codec_h265std_encode.h
│   │   │   └── vulkan_video_codecs_common.h
│   │   ├── vma/
│   │   │   └── vk_mem_alloc.h
│   │   ├── volk/
│   │   │   ├── volk.c
│   │   │   └── volk.h
│   │   ├── vulkanheaders/
│   │   │   ├── vk_icd.h
│   │   │   ├── vk_layer.h
│   │   │   ├── vk_platform.h
│   │   │   ├── vulkan.h
│   │   │   ├── vulkan.hpp
│   │   │   ├── vulkan_android.h
│   │   │   ├── vulkan_beta.h
│   │   │   ├── vulkan_core.h
│   │   │   ├── vulkan_directfb.h
│   │   │   ├── vulkan_enums.hpp
│   │   │   ├── vulkan_extension_inspection.hpp
│   │   │   ├── vulkan_format_traits.hpp
│   │   │   ├── vulkan_fuchsia.h
│   │   │   ├── vulkan_funcs.hpp
│   │   │   ├── vulkan_ggp.h
│   │   │   ├── vulkan_handles.hpp
│   │   │   ├── vulkan_hash.hpp
│   │   │   ├── vulkan_hpp_macros.hpp
│   │   │   ├── vulkan_ios.h
│   │   │   ├── vulkan_macos.h
│   │   │   ├── vulkan_metal.h
│   │   │   ├── vulkan_raii.hpp
│   │   │   ├── vulkan_screen.h
│   │   │   ├── vulkan_shared.hpp
│   │   │   ├── vulkan_static_assertions.hpp
│   │   │   ├── vulkan_structs.hpp
│   │   │   ├── vulkan_to_string.hpp
│   │   │   ├── vulkan_vi.h
│   │   │   ├── vulkan_video.hpp
│   │   │   ├── vulkan_wayland.h
│   │   │   ├── vulkan_win32.h
│   │   │   ├── vulkan_xcb.h
│   │   │   ├── vulkan_xlib.h
│   │   │   └── vulkan_xlib_xrandr.h
│   │   └── xxHash/
│   │       ├── xxhash.c
│   │       └── xxhash.h
│   ├── love.cpp
│   ├── modules/
│   │   ├── audio/
│   │   │   ├── Audio.cpp
│   │   │   ├── Audio.h
│   │   │   ├── Effect.cpp
│   │   │   ├── Effect.h
│   │   │   ├── Filter.cpp
│   │   │   ├── Filter.h
│   │   │   ├── RecordingDevice.cpp
│   │   │   ├── RecordingDevice.h
│   │   │   ├── Source.cpp
│   │   │   ├── Source.h
│   │   │   ├── null/
│   │   │   │   ├── Audio.cpp
│   │   │   │   ├── Audio.h
│   │   │   │   ├── RecordingDevice.cpp
│   │   │   │   ├── RecordingDevice.h
│   │   │   │   ├── Source.cpp
│   │   │   │   └── Source.h
│   │   │   ├── openal/
│   │   │   │   ├── Audio.cpp
│   │   │   │   ├── Audio.h
│   │   │   │   ├── Effect.cpp
│   │   │   │   ├── Effect.h
│   │   │   │   ├── Filter.cpp
│   │   │   │   ├── Filter.h
│   │   │   │   ├── Pool.cpp
│   │   │   │   ├── Pool.h
│   │   │   │   ├── RecordingDevice.cpp
│   │   │   │   ├── RecordingDevice.h
│   │   │   │   ├── Source.cpp
│   │   │   │   └── Source.h
│   │   │   ├── wrap_Audio.cpp
│   │   │   ├── wrap_Audio.h
│   │   │   ├── wrap_RecordingDevice.cpp
│   │   │   ├── wrap_RecordingDevice.h
│   │   │   ├── wrap_Source.cpp
│   │   │   └── wrap_Source.h
│   │   ├── data/
│   │   │   ├── ByteData.cpp
│   │   │   ├── ByteData.h
│   │   │   ├── CompressedData.cpp
│   │   │   ├── CompressedData.h
│   │   │   ├── Compressor.cpp
│   │   │   ├── Compressor.h
│   │   │   ├── DataModule.cpp
│   │   │   ├── DataModule.h
│   │   │   ├── DataStream.cpp
│   │   │   ├── DataStream.h
│   │   │   ├── DataView.cpp
│   │   │   ├── DataView.h
│   │   │   ├── HashFunction.cpp
│   │   │   ├── HashFunction.h
│   │   │   ├── wrap_ByteData.cpp
│   │   │   ├── wrap_ByteData.h
│   │   │   ├── wrap_CompressedData.cpp
│   │   │   ├── wrap_CompressedData.h
│   │   │   ├── wrap_Data.cpp
│   │   │   ├── wrap_Data.h
│   │   │   ├── wrap_Data.lua
│   │   │   ├── wrap_DataModule.cpp
│   │   │   ├── wrap_DataModule.h
│   │   │   ├── wrap_DataView.cpp
│   │   │   └── wrap_DataView.h
│   │   ├── event/
│   │   │   ├── Event.cpp
│   │   │   ├── Event.h
│   │   │   ├── sdl/
│   │   │   │   ├── Event.cpp
│   │   │   │   └── Event.h
│   │   │   ├── wrap_Event.cpp
│   │   │   ├── wrap_Event.h
│   │   │   └── wrap_Event.lua
│   │   ├── filesystem/
│   │   │   ├── File.cpp
│   │   │   ├── File.h
│   │   │   ├── FileData.cpp
│   │   │   ├── FileData.h
│   │   │   ├── Filesystem.cpp
│   │   │   ├── Filesystem.h
│   │   │   ├── NativeFile.cpp
│   │   │   ├── NativeFile.h
│   │   │   ├── physfs/
│   │   │   │   ├── File.cpp
│   │   │   │   ├── File.h
│   │   │   │   ├── Filesystem.cpp
│   │   │   │   ├── Filesystem.h
│   │   │   │   ├── PhysfsIo.cpp
│   │   │   │   └── PhysfsIo.h
│   │   │   ├── wrap_File.cpp
│   │   │   ├── wrap_File.h
│   │   │   ├── wrap_FileData.cpp
│   │   │   ├── wrap_FileData.h
│   │   │   ├── wrap_Filesystem.cpp
│   │   │   ├── wrap_Filesystem.h
│   │   │   ├── wrap_NativeFile.cpp
│   │   │   └── wrap_NativeFile.h
│   │   ├── font/
│   │   │   ├── BMFontRasterizer.cpp
│   │   │   ├── BMFontRasterizer.h
│   │   │   ├── Font.cpp
│   │   │   ├── Font.h
│   │   │   ├── GenericShaper.cpp
│   │   │   ├── GenericShaper.h
│   │   │   ├── GlyphData.cpp
│   │   │   ├── GlyphData.h
│   │   │   ├── ImageRasterizer.cpp
│   │   │   ├── ImageRasterizer.h
│   │   │   ├── NotoSans-Regular.ttf.gzip.h
│   │   │   ├── Rasterizer.cpp
│   │   │   ├── Rasterizer.h
│   │   │   ├── TextShaper.cpp
│   │   │   ├── TextShaper.h
│   │   │   ├── TrueTypeRasterizer.cpp
│   │   │   ├── TrueTypeRasterizer.h
│   │   │   ├── freetype/
│   │   │   │   ├── Font.cpp
│   │   │   │   ├── Font.h
│   │   │   │   ├── HarfbuzzShaper.cpp
│   │   │   │   ├── HarfbuzzShaper.h
│   │   │   │   ├── TrueTypeRasterizer.cpp
│   │   │   │   └── TrueTypeRasterizer.h
│   │   │   ├── wrap_Font.cpp
│   │   │   ├── wrap_Font.h
│   │   │   ├── wrap_GlyphData.cpp
│   │   │   ├── wrap_GlyphData.h
│   │   │   ├── wrap_Rasterizer.cpp
│   │   │   └── wrap_Rasterizer.h
│   │   ├── graphics/
│   │   │   ├── Buffer.cpp
│   │   │   ├── Buffer.h
│   │   │   ├── Deprecations.cpp
│   │   │   ├── Deprecations.h
│   │   │   ├── Drawable.cpp
│   │   │   ├── Drawable.h
│   │   │   ├── Font.cpp
│   │   │   ├── Font.h
│   │   │   ├── Graphics.cpp
│   │   │   ├── Graphics.h
│   │   │   ├── GraphicsReadback.cpp
│   │   │   ├── GraphicsReadback.h
│   │   │   ├── Mesh.cpp
│   │   │   ├── Mesh.h
│   │   │   ├── ParticleSystem.cpp
│   │   │   ├── ParticleSystem.h
│   │   │   ├── Polyline.cpp
│   │   │   ├── Polyline.h
│   │   │   ├── Quad.cpp
│   │   │   ├── Quad.h
│   │   │   ├── Resource.h
│   │   │   ├── Shader.cpp
│   │   │   ├── Shader.h
│   │   │   ├── ShaderStage.cpp
│   │   │   ├── ShaderStage.h
│   │   │   ├── SpriteBatch.cpp
│   │   │   ├── SpriteBatch.h
│   │   │   ├── StreamBuffer.cpp
│   │   │   ├── StreamBuffer.h
│   │   │   ├── TextBatch.cpp
│   │   │   ├── TextBatch.h
│   │   │   ├── Texture.cpp
│   │   │   ├── Texture.h
│   │   │   ├── Video.cpp
│   │   │   ├── Video.h
│   │   │   ├── Volatile.cpp
│   │   │   ├── Volatile.h
│   │   │   ├── metal/
│   │   │   │   ├── Buffer.h
│   │   │   │   ├── Buffer.mm
│   │   │   │   ├── Graphics.h
│   │   │   │   ├── Graphics.mm
│   │   │   │   ├── GraphicsReadback.h
│   │   │   │   ├── GraphicsReadback.mm
│   │   │   │   ├── Metal.h
│   │   │   │   ├── Metal.mm
│   │   │   │   ├── Shader.h
│   │   │   │   ├── Shader.mm
│   │   │   │   ├── ShaderStage.h
│   │   │   │   ├── ShaderStage.mm
│   │   │   │   ├── StreamBuffer.h
│   │   │   │   ├── StreamBuffer.mm
│   │   │   │   ├── Texture.h
│   │   │   │   └── Texture.mm
│   │   │   ├── opengl/
│   │   │   │   ├── Buffer.cpp
│   │   │   │   ├── Buffer.h
│   │   │   │   ├── FenceSync.cpp
│   │   │   │   ├── FenceSync.h
│   │   │   │   ├── Graphics.cpp
│   │   │   │   ├── Graphics.h
│   │   │   │   ├── GraphicsReadback.cpp
│   │   │   │   ├── GraphicsReadback.h
│   │   │   │   ├── OpenGL.cpp
│   │   │   │   ├── OpenGL.h
│   │   │   │   ├── Shader.cpp
│   │   │   │   ├── Shader.h
│   │   │   │   ├── ShaderStage.cpp
│   │   │   │   ├── ShaderStage.h
│   │   │   │   ├── StreamBuffer.cpp
│   │   │   │   ├── StreamBuffer.h
│   │   │   │   ├── Texture.cpp
│   │   │   │   └── Texture.h
│   │   │   ├── renderstate.cpp
│   │   │   ├── renderstate.h
│   │   │   ├── vertex.cpp
│   │   │   ├── vertex.h
│   │   │   ├── vulkan/
│   │   │   │   ├── Buffer.cpp
│   │   │   │   ├── Buffer.h
│   │   │   │   ├── Graphics.cpp
│   │   │   │   ├── Graphics.h
│   │   │   │   ├── GraphicsReadback.cpp
│   │   │   │   ├── GraphicsReadback.h
│   │   │   │   ├── Shader.cpp
│   │   │   │   ├── Shader.h
│   │   │   │   ├── ShaderStage.cpp
│   │   │   │   ├── ShaderStage.h
│   │   │   │   ├── StreamBuffer.cpp
│   │   │   │   ├── StreamBuffer.h
│   │   │   │   ├── Texture.cpp
│   │   │   │   ├── Texture.h
│   │   │   │   ├── Vulkan.cpp
│   │   │   │   ├── Vulkan.h
│   │   │   │   └── VulkanWrapper.h
│   │   │   ├── wrap_Buffer.cpp
│   │   │   ├── wrap_Buffer.h
│   │   │   ├── wrap_Font.cpp
│   │   │   ├── wrap_Font.h
│   │   │   ├── wrap_Graphics.cpp
│   │   │   ├── wrap_Graphics.h
│   │   │   ├── wrap_Graphics.lua
│   │   │   ├── wrap_GraphicsReadback.cpp
│   │   │   ├── wrap_GraphicsReadback.h
│   │   │   ├── wrap_Mesh.cpp
│   │   │   ├── wrap_Mesh.h
│   │   │   ├── wrap_ParticleSystem.cpp
│   │   │   ├── wrap_ParticleSystem.h
│   │   │   ├── wrap_Quad.cpp
│   │   │   ├── wrap_Quad.h
│   │   │   ├── wrap_Shader.cpp
│   │   │   ├── wrap_Shader.h
│   │   │   ├── wrap_SpriteBatch.cpp
│   │   │   ├── wrap_SpriteBatch.h
│   │   │   ├── wrap_TextBatch.cpp
│   │   │   ├── wrap_TextBatch.h
│   │   │   ├── wrap_Texture.cpp
│   │   │   ├── wrap_Texture.h
│   │   │   ├── wrap_Video.cpp
│   │   │   ├── wrap_Video.h
│   │   │   └── wrap_Video.lua
│   │   ├── image/
│   │   │   ├── CompressedImageData.cpp
│   │   │   ├── CompressedImageData.h
│   │   │   ├── CompressedSlice.cpp
│   │   │   ├── CompressedSlice.h
│   │   │   ├── FormatHandler.cpp
│   │   │   ├── FormatHandler.h
│   │   │   ├── Image.cpp
│   │   │   ├── Image.h
│   │   │   ├── ImageData.cpp
│   │   │   ├── ImageData.h
│   │   │   ├── ImageDataBase.cpp
│   │   │   ├── ImageDataBase.h
│   │   │   ├── magpie/
│   │   │   │   ├── ASTCHandler.cpp
│   │   │   │   ├── ASTCHandler.h
│   │   │   │   ├── EXRHandler.cpp
│   │   │   │   ├── EXRHandler.h
│   │   │   │   ├── KTXHandler.cpp
│   │   │   │   ├── KTXHandler.h
│   │   │   │   ├── PKMHandler.cpp
│   │   │   │   ├── PKMHandler.h
│   │   │   │   ├── PNGHandler.cpp
│   │   │   │   ├── PNGHandler.h
│   │   │   │   ├── PVRHandler.cpp
│   │   │   │   ├── PVRHandler.h
│   │   │   │   ├── STBHandler.cpp
│   │   │   │   ├── STBHandler.h
│   │   │   │   ├── ddsHandler.cpp
│   │   │   │   └── ddsHandler.h
│   │   │   ├── wrap_CompressedImageData.cpp
│   │   │   ├── wrap_CompressedImageData.h
│   │   │   ├── wrap_Image.cpp
│   │   │   ├── wrap_Image.h
│   │   │   ├── wrap_ImageData.cpp
│   │   │   ├── wrap_ImageData.h
│   │   │   └── wrap_ImageData.lua
│   │   ├── joystick/
│   │   │   ├── Joystick.cpp
│   │   │   ├── Joystick.h
│   │   │   ├── JoystickModule.h
│   │   │   ├── sdl/
│   │   │   │   ├── Joystick.cpp
│   │   │   │   ├── Joystick.h
│   │   │   │   ├── JoystickModule.cpp
│   │   │   │   └── JoystickModule.h
│   │   │   ├── wrap_Joystick.cpp
│   │   │   ├── wrap_Joystick.h
│   │   │   ├── wrap_JoystickModule.cpp
│   │   │   └── wrap_JoystickModule.h
│   │   ├── keyboard/
│   │   │   ├── Keyboard.cpp
│   │   │   ├── Keyboard.h
│   │   │   ├── sdl/
│   │   │   │   ├── Keyboard.cpp
│   │   │   │   └── Keyboard.h
│   │   │   ├── wrap_Keyboard.cpp
│   │   │   └── wrap_Keyboard.h
│   │   ├── love/
│   │   │   ├── arg.lua
│   │   │   ├── boot.lua
│   │   │   ├── callbacks.lua
│   │   │   ├── jitsetup.lua
│   │   │   ├── love.cpp
│   │   │   └── love.h
│   │   ├── math/
│   │   │   ├── BezierCurve.cpp
│   │   │   ├── BezierCurve.h
│   │   │   ├── MathModule.cpp
│   │   │   ├── MathModule.h
│   │   │   ├── RandomGenerator.cpp
│   │   │   ├── RandomGenerator.h
│   │   │   ├── Transform.cpp
│   │   │   ├── Transform.h
│   │   │   ├── wrap_BezierCurve.cpp
│   │   │   ├── wrap_BezierCurve.h
│   │   │   ├── wrap_Math.cpp
│   │   │   ├── wrap_Math.h
│   │   │   ├── wrap_Math.lua
│   │   │   ├── wrap_RandomGenerator.cpp
│   │   │   ├── wrap_RandomGenerator.h
│   │   │   ├── wrap_RandomGenerator.lua
│   │   │   ├── wrap_Transform.cpp
│   │   │   └── wrap_Transform.h
│   │   ├── mouse/
│   │   │   ├── Cursor.cpp
│   │   │   ├── Cursor.h
│   │   │   ├── Mouse.h
│   │   │   ├── sdl/
│   │   │   │   ├── Cursor.cpp
│   │   │   │   ├── Cursor.h
│   │   │   │   ├── Mouse.cpp
│   │   │   │   └── Mouse.h
│   │   │   ├── wrap_Cursor.cpp
│   │   │   ├── wrap_Cursor.h
│   │   │   ├── wrap_Mouse.cpp
│   │   │   └── wrap_Mouse.h
│   │   ├── physics/
│   │   │   ├── Body.cpp
│   │   │   ├── Body.h
│   │   │   ├── Joint.cpp
│   │   │   ├── Joint.h
│   │   │   ├── Shape.cpp
│   │   │   ├── Shape.h
│   │   │   └── box2d/
│   │   │       ├── Body.cpp
│   │   │       ├── Body.h
│   │   │       ├── ChainShape.cpp
│   │   │       ├── ChainShape.h
│   │   │       ├── CircleShape.cpp
│   │   │       ├── CircleShape.h
│   │   │       ├── Contact.cpp
│   │   │       ├── Contact.h
│   │   │       ├── DistanceJoint.cpp
│   │   │       ├── DistanceJoint.h
│   │   │       ├── EdgeShape.cpp
│   │   │       ├── EdgeShape.h
│   │   │       ├── FrictionJoint.cpp
│   │   │       ├── FrictionJoint.h
│   │   │       ├── GearJoint.cpp
│   │   │       ├── GearJoint.h
│   │   │       ├── Joint.cpp
│   │   │       ├── Joint.h
│   │   │       ├── MotorJoint.cpp
│   │   │       ├── MotorJoint.h
│   │   │       ├── MouseJoint.cpp
│   │   │       ├── MouseJoint.h
│   │   │       ├── Physics.cpp
│   │   │       ├── Physics.h
│   │   │       ├── PolygonShape.cpp
│   │   │       ├── PolygonShape.h
│   │   │       ├── PrismaticJoint.cpp
│   │   │       ├── PrismaticJoint.h
│   │   │       ├── PulleyJoint.cpp
│   │   │       ├── PulleyJoint.h
│   │   │       ├── RevoluteJoint.cpp
│   │   │       ├── RevoluteJoint.h
│   │   │       ├── RopeJoint.cpp
│   │   │       ├── RopeJoint.h
│   │   │       ├── Shape.cpp
│   │   │       ├── Shape.h
│   │   │       ├── WeldJoint.cpp
│   │   │       ├── WeldJoint.h
│   │   │       ├── WheelJoint.cpp
│   │   │       ├── WheelJoint.h
│   │   │       ├── World.cpp
│   │   │       ├── World.h
│   │   │       ├── wrap_Body.cpp
│   │   │       ├── wrap_Body.h
│   │   │       ├── wrap_ChainShape.cpp
│   │   │       ├── wrap_ChainShape.h
│   │   │       ├── wrap_CircleShape.cpp
│   │   │       ├── wrap_CircleShape.h
│   │   │       ├── wrap_Contact.cpp
│   │   │       ├── wrap_Contact.h
│   │   │       ├── wrap_DistanceJoint.cpp
│   │   │       ├── wrap_DistanceJoint.h
│   │   │       ├── wrap_EdgeShape.cpp
│   │   │       ├── wrap_EdgeShape.h
│   │   │       ├── wrap_FrictionJoint.cpp
│   │   │       ├── wrap_FrictionJoint.h
│   │   │       ├── wrap_GearJoint.cpp
│   │   │       ├── wrap_GearJoint.h
│   │   │       ├── wrap_Joint.cpp
│   │   │       ├── wrap_Joint.h
│   │   │       ├── wrap_MotorJoint.cpp
│   │   │       ├── wrap_MotorJoint.h
│   │   │       ├── wrap_MouseJoint.cpp
│   │   │       ├── wrap_MouseJoint.h
│   │   │       ├── wrap_Physics.cpp
│   │   │       ├── wrap_Physics.h
│   │   │       ├── wrap_PolygonShape.cpp
│   │   │       ├── wrap_PolygonShape.h
│   │   │       ├── wrap_PrismaticJoint.cpp
│   │   │       ├── wrap_PrismaticJoint.h
│   │   │       ├── wrap_PulleyJoint.cpp
│   │   │       ├── wrap_PulleyJoint.h
│   │   │       ├── wrap_RevoluteJoint.cpp
│   │   │       ├── wrap_RevoluteJoint.h
│   │   │       ├── wrap_RopeJoint.cpp
│   │   │       ├── wrap_RopeJoint.h
│   │   │       ├── wrap_Shape.cpp
│   │   │       ├── wrap_Shape.h
│   │   │       ├── wrap_WeldJoint.cpp
│   │   │       ├── wrap_WeldJoint.h
│   │   │       ├── wrap_WheelJoint.cpp
│   │   │       ├── wrap_WheelJoint.h
│   │   │       ├── wrap_World.cpp
│   │   │       └── wrap_World.h
│   │   ├── sensor/
│   │   │   ├── Sensor.cpp
│   │   │   ├── Sensor.h
│   │   │   ├── sdl/
│   │   │   │   ├── Sensor.cpp
│   │   │   │   └── Sensor.h
│   │   │   ├── wrap_Sensor.cpp
│   │   │   └── wrap_Sensor.h
│   │   ├── sound/
│   │   │   ├── Decoder.cpp
│   │   │   ├── Decoder.h
│   │   │   ├── Sound.cpp
│   │   │   ├── Sound.h
│   │   │   ├── SoundData.cpp
│   │   │   ├── SoundData.h
│   │   │   ├── lullaby/
│   │   │   │   ├── CoreAudioDecoder.cpp
│   │   │   │   ├── CoreAudioDecoder.h
│   │   │   │   ├── FLACDecoder.cpp
│   │   │   │   ├── FLACDecoder.h
│   │   │   │   ├── MP3Decoder.cpp
│   │   │   │   ├── MP3Decoder.h
│   │   │   │   ├── ModPlugDecoder.cpp
│   │   │   │   ├── ModPlugDecoder.h
│   │   │   │   ├── Sound.cpp
│   │   │   │   ├── Sound.h
│   │   │   │   ├── VorbisDecoder.cpp
│   │   │   │   ├── VorbisDecoder.h
│   │   │   │   ├── WaveDecoder.cpp
│   │   │   │   └── WaveDecoder.h
│   │   │   ├── wrap_Decoder.cpp
│   │   │   ├── wrap_Decoder.h
│   │   │   ├── wrap_Sound.cpp
│   │   │   ├── wrap_Sound.h
│   │   │   ├── wrap_SoundData.cpp
│   │   │   ├── wrap_SoundData.h
│   │   │   └── wrap_SoundData.lua
│   │   ├── system/
│   │   │   ├── System.cpp
│   │   │   ├── System.h
│   │   │   ├── sdl/
│   │   │   │   ├── System.cpp
│   │   │   │   └── System.h
│   │   │   ├── wrap_System.cpp
│   │   │   └── wrap_System.h
│   │   ├── thread/
│   │   │   ├── Channel.cpp
│   │   │   ├── Channel.h
│   │   │   ├── LuaThread.cpp
│   │   │   ├── LuaThread.h
│   │   │   ├── Thread.h
│   │   │   ├── ThreadModule.cpp
│   │   │   ├── ThreadModule.h
│   │   │   ├── sdl/
│   │   │   │   ├── Thread.cpp
│   │   │   │   ├── Thread.h
│   │   │   │   ├── threads.cpp
│   │   │   │   └── threads.h
│   │   │   ├── threads.cpp
│   │   │   ├── threads.h
│   │   │   ├── wrap_Channel.cpp
│   │   │   ├── wrap_Channel.h
│   │   │   ├── wrap_LuaThread.cpp
│   │   │   ├── wrap_LuaThread.h
│   │   │   ├── wrap_ThreadModule.cpp
│   │   │   └── wrap_ThreadModule.h
│   │   ├── timer/
│   │   │   ├── Timer.cpp
│   │   │   ├── Timer.h
│   │   │   ├── wrap_Timer.cpp
│   │   │   └── wrap_Timer.h
│   │   ├── touch/
│   │   │   ├── Touch.cpp
│   │   │   ├── Touch.h
│   │   │   ├── sdl/
│   │   │   │   ├── Touch.cpp
│   │   │   │   └── Touch.h
│   │   │   ├── wrap_Touch.cpp
│   │   │   └── wrap_Touch.h
│   │   ├── video/
│   │   │   ├── Video.h
│   │   │   ├── VideoStream.cpp
│   │   │   ├── VideoStream.h
│   │   │   ├── theora/
│   │   │   │   ├── OggDemuxer.cpp
│   │   │   │   ├── OggDemuxer.h
│   │   │   │   ├── TheoraVideoStream.cpp
│   │   │   │   ├── TheoraVideoStream.h
│   │   │   │   ├── Video.cpp
│   │   │   │   └── Video.h
│   │   │   ├── wrap_Video.cpp
│   │   │   ├── wrap_Video.h
│   │   │   ├── wrap_VideoStream.cpp
│   │   │   └── wrap_VideoStream.h
│   │   └── window/
│   │       ├── Window.cpp
│   │       ├── Window.h
│   │       ├── sdl/
│   │       │   ├── Window.cpp
│   │       │   └── Window.h
│   │       ├── wrap_Window.cpp
│   │       └── wrap_Window.h
│   └── scripts/
│       ├── auto.lua
│       ├── nogame.lua
│       └── nogame.lua.h
└── testing/
    ├── classes/
    │   ├── TestMethod.lua
    │   ├── TestModule.lua
    │   └── TestSuite.lua
    ├── conf.lua
    ├── examples/
    │   ├── lovetest_runAllTests.html
    │   ├── lovetest_runAllTests.md
    │   └── lovetest_runAllTests.xml
    ├── main.lua
    ├── output/
    │   ├── actual/
    │   │   └── notes.txt
    │   ├── difference/
    │   │   └── notes.txt
    │   ├── expected/
    │   │   └── notes.txt
    │   └── notes.txt
    ├── readme.md
    ├── resources/
    │   ├── alsoft.conf
    │   ├── click.ogg
    │   ├── clickmono.ogg
    │   ├── love.dxt1
    │   ├── mappings.txt
    │   ├── pop.ogg
    │   ├── sample.ogv
    │   ├── test.txt
    │   ├── tone.ogg
    │   └── vk_layer_settings.txt
    ├── tests/
    │   ├── audio.lua
    │   ├── data.lua
    │   ├── event.lua
    │   ├── filesystem.lua
    │   ├── font.lua
    │   ├── graphics.lua
    │   ├── image.lua
    │   ├── joystick.lua
    │   ├── keyboard.lua
    │   ├── love.lua
    │   ├── math.lua
    │   ├── mouse.lua
    │   ├── physics.lua
    │   ├── sensor.lua
    │   ├── sound.lua
    │   ├── system.lua
    │   ├── thread.lua
    │   ├── timer.lua
    │   ├── touch.lua
    │   ├── video.lua
    │   └── window.lua
    └── todo.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
.git* export-ignore
.hg* export-ignore
*.c diff=cpp
*.cpp diff=cpp
*.h diff=cpp


================================================
FILE: .github/workflows/main.yml
================================================
name: continuous-integration
on: [push, pull_request]

jobs:
  Linux:
    runs-on: ${{ matrix.runner }}
    strategy:
      matrix:
        runner: [ubuntu-22.04, ubuntu-24.04-arm]
    permissions:
      checks: write
      pull-requests: write
    env:
      ALSOFT_CONF: love2d-${{ github.sha }}/testing/resources/alsoft.conf
      VK_LAYER_SETTINGS_PATH: love2d-${{ github.sha }}/testing/resources/vk_layer_settings.txt
      DISPLAY: :99
    steps:
    - name: Update APT
      run: sudo apt-get update
    - name: Install Dependencies
      run: |
        sudo apt-get install --assume-yes build-essential git make cmake autoconf automake \
                                          libtool pkg-config libasound2-dev libpulse-dev libaudio-dev \
                                          libjack-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev \
                                          libxfixes-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev \
                                          libxtst-dev \
                                          libgl1-mesa-dev libdbus-1-dev libudev-dev libgles2-mesa-dev \
                                          libegl1-mesa-dev libibus-1.0-dev fcitx-libs-dev libsamplerate0-dev \
                                          libsndio-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev \
                                          libcurl4-openssl-dev libfuse2 wmctrl openbox mesa-vulkan-drivers \
                                          libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev \
                                          libvulkan1
    - name: Install Vulkan SDK
      if: ${{ runner.arch == 'X64' }}
      run: |
        set -e
        wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
        sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.283-jammy.list https://packages.lunarg.com/vulkan/1.3.283/lunarg-vulkan-1.3.283-jammy.list
        sudo apt-get update
        sudo apt-get install --assume-yes vulkan-sdk
    - name: Checkout love-appimage-source
      uses: actions/checkout@v4
      with:
        repository: love2d/love-appimage-source
        ref: main
    - name: Checkout LÖVE
      uses: actions/checkout@v4
      with:
        path: love2d-${{ github.sha }}
    - name: Get Dependencies for AppImage
      shell: python
      env:
        LOVE_BRANCH: ${{ github.sha }}
      run: |
        import os
        for i in range(250):
            if os.system(f"make getdeps LOVE_BRANCH={os.environ['LOVE_BRANCH']}") == 0:
                raise SystemExit(0)
        raise Exception("make getdeps failed")
    - name: Build AppImage
      run: make LOVE_BRANCH=${{ github.sha }}
    - name: Print LuaJIT branch
      run: git -C LuaJIT-v2.1 branch -v
    # start xvfb for test running
    - name: Start xvfb and openbox
      run: |
        echo "Starting XVFB on $DISPLAY"
        Xvfb $DISPLAY -screen 0, 360x240x24 &
        echo "XVFBPID=$!" >> $GITHUB_ENV
        # wait for xvfb to startup (3s is the same amount xvfb-run waits by default)
        sleep 3
        openbox &
        echo "OPENBOXPID=$!" >> $GITHUB_ENV
    # linux opengl tests
    - name: Run Test Suite (opengl)
      run: |
        chmod a+x love-${{ github.sha }}.AppImage
        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --all --isRunner --renderers opengl
    - name: Love Test Report (opengl)
      id: report1
      uses: ellraiser/love-test-report@main
      with:
        name: Love Testsuite Linux
        title: test-report-linux-${{ runner.arch }}-opengl
        path: love2d-${{ github.sha }}/testing/output/lovetest_all.md
        token: ${{ secrets.GITHUB_TOKEN }}
    - name: Zip Test Output (opengl)
      run: |
        7z a -tzip test-output-linux-opengl-${{ runner.arch }}.zip love2d-${{ github.sha }}/testing/output/
    - name: Artifact Test Output (opengl)
      uses: actions/upload-artifact@v4
      with:
        name: test-output-linux-${{ runner.arch }}-opengl-${{ steps.report1.outputs.conclusion }}
        path: test-output-linux-${{ runner.arch }}-opengl.zip
    # linux opengles tests
    - name: Run Test Suite (opengles)
      env:
        LOVE_GRAPHICS_DEBUG: 1
      run: |
        export LOVE_GRAPHICS_USE_OPENGLES=1
        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --all --isRunner --renderers opengl
    - name: Love Test Report (opengles)
      uses: ellraiser/love-test-report@main
      id: report2
      with:
        name: Love Testsuite Linux
        title: test-report-linux-${{ runner.arch }}-opengles
        path: love2d-${{ github.sha }}/testing/output/lovetest_all.md
        token: ${{ secrets.GITHUB_TOKEN }}
    - name: Zip Test Output (opengles)
      run: |
        7z a -tzip test-output-linux-opengles-${{ runner.arch }}.zip love2d-${{ github.sha }}/testing/output/
    - name: Artifact Test Output (opengles)
      uses: actions/upload-artifact@v4
      with:
        name: test-output-linux-${{ runner.arch }}-opengles-${{ steps.report2.outputs.conclusion }}
        path: test-output-linux-${{ runner.arch }}-opengles.zip
    # linux vulkan tests
    - name: Run Test Suite (vulkan)
      env:
        LOVE_GRAPHICS_DEBUG: ${{ runner.arch == 'ARM64' && '0' || '1' }} 
        LOVE_GRAPHICS_VULKAN_ALLOW_SOFTWARE: 1
      run: |
        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --all --isRunner --renderers vulkan
    - name: Love Test Report (vulkan)
      uses: ellraiser/love-test-report@main
      id: report3
      with:
        name: Love Testsuite Linux
        title: test-report-linux-${{ runner.arch }}-vulkan
        path: love2d-${{ github.sha }}/testing/output/lovetest_all.md
    - name: Zip Test Output (vulkan)
      run: |
        7z a -tzip test-output-linux-vulkan-${{ runner.arch }}.zip love2d-${{ github.sha }}/testing/output/
    - name: Artifact Test Output (vulkan)
      uses: actions/upload-artifact@v4
      with:
        name: test-output-linux-${{ runner.arch }}-vulkan-${{ steps.report3.outputs.conclusion }}
        path: test-output-linux-${{ runner.arch }}-vulkan.zip
    - name: Stop xvfb and openbox
      # should always stop xvfb and openbox even if other steps failed
      if: always()
      run: |
        kill $XVFBPID
        kill $OPENBOXPID
    - name: Artifact
      uses: actions/upload-artifact@v4
      with:
        name: love-linux-${{ runner.arch }}.AppImage
        path: love-${{ github.sha }}.AppImage
    - name: Artifact Debug Symbols
      uses: actions/upload-artifact@v4
      with:
        name: love-${{ runner.arch }}-AppImage-debug
        path: love-${{ github.sha }}.AppImage-debug.tar.gz
    - name: Check Tests Passing
      if: steps.report1.outputs.conclusion == 'failure' || steps.report2.outputs.conclusion == 'failure' || steps.report3.outputs.conclusion == 'failure'
      run: |
        echo "${{ steps.report1.outputs.failed }} opengl tests failed"
        echo "${{ steps.report2.outputs.failed }} opengles tests failed"
        echo "${{ steps.report3.outputs.failed }} vulkan tests failed"
        exit 1

  Windows:
    runs-on: windows-2025
    permissions:
      checks: write
      pull-requests: write
    env: 
      ALSOFT_CONF: megasource/libs/love/testing/resources/alsoft.conf
      VK_ICD_FILENAMES: ${{ github.workspace }}\mesa\x64\lvp_icd.x86_64.json
      VULKAN_SDK: C:/VulkanSDK/1.3.231.1
    strategy:
      matrix:
        platform: [x64, ARM64]
    defaults:
      run:
        shell: cmd
    continue-on-error: ${{ matrix.platform == 'ARM64' }}
    steps:
    - name: Define Variables
      id: vars
      run: |
        rem JIT Modules
        if "${{ matrix.platform }}" == "x64" (
          (echo jitmodules=1)>> "%GITHUB_OUTPUT%"
        ) else (
          (echo jitmodules=0)>> "%GITHUB_OUTPUT%"
        )
        
        rem Architecture-Specific Switch
        goto ${{ matrix.platform }}
        exit /b 1
        
        :Win32
        (echo arch=x86)>> "%GITHUB_OUTPUT%"
        (echo angle=0)>> "%GITHUB_OUTPUT%"
        echo nofiles=warn>> "%GITHUB_OUTPUT%"
        exit /b 0
        
        :x64
        (echo arch=x64)>> "%GITHUB_OUTPUT%"
        (echo angle=0)>> "%GITHUB_OUTPUT%"
        echo nofiles=warn>> "%GITHUB_OUTPUT%"
        exit /b 0
        
        :ARM64
        (echo arch=arm64)>> "%GITHUB_OUTPUT%"
        (echo angle=1)>> "%GITHUB_OUTPUT%"
        echo nofiles=ignore>> "%GITHUB_OUTPUT%"
        echo moredef=-DLOVE_EXTRA_DLLS=%CD%\angle\libEGL.dll;%CD%\angle\libGLESv2.dll>> "%GITHUB_OUTPUT%"
        exit /b 0
    - name: Install NSIS
      run: winget install nsis --disable-interactivity --accept-source-agreements --accept-package-agreements
    - name: Download pdbstr
      run: curl -Lfo pdbstr.nupkg https://www.nuget.org/api/v2/package/Microsoft.Debugging.Tools.PdbStr/20230731.1609.0
    - name: Download srctool
      run: curl -Lfo srctool.nupkg https://www.nuget.org/api/v2/package/Microsoft.Debugging.Tools.SrcTool/20230731.1609.0
    - name: Extract Tools and Add to PATH
      run: |
        mkdir debugtools
        cd debugtools
        if errorlevel 1 exit /b 1
        7z e ..\srctool.nupkg content/amd64/srctool.exe
        if errorlevel 1 exit /b 1
        7z e ..\pdbstr.nupkg content/amd64/pdbstr.exe
        if errorlevel 1 exit /b 1
        echo %CD%>>%GITHUB_PATH%
    - name: Setup Python 3.10
      uses: actions/setup-python@v5
      with:
        python-version: "3.10"
    - name: Download source_index.py
      run: curl -Lfo source_index.py https://gist.github.com/MikuAuahDark/d9c099f5714e09a765496471c2827a55/raw/df34956052035f3473c5f01861dfb53930d06843/source_index.py
    - name: Clone Megasource
      uses: actions/checkout@v4
      with:
        path: megasource
        repository: love2d/megasource
        ref: main
    - id: megasource
      name: Get Megasource Commit SHA
      shell: python
      run: |
        import os
        import subprocess
        
        result = subprocess.run("git -C megasource rev-parse HEAD".split(), check=True, capture_output=True, encoding="UTF-8")
        commit = result.stdout.split()[0]
        with open(os.environ["GITHUB_OUTPUT"], "w", encoding="UTF-8") as f: f.write(f"commit={commit}")
    - name: Checkout
      uses: actions/checkout@v4
      with:
        path: megasource/libs/love
    - name: Download ANGLE
      uses: robinraju/release-downloader@v1.9
      if: steps.vars.outputs.angle == '1'
      with:
        repository: MikuAuahDark/angle-winbuild
        tag: cr_5249
        fileName: angle-win-${{ steps.vars.outputs.arch }}.zip
        tarBall: false
        zipBall: false
        out-file-path: angle
    - name: Extract ANGLE
      if: steps.vars.outputs.angle == '1'
      working-directory: angle
      run: 7z x angle-win-${{ steps.vars.outputs.arch }}.zip
    - name: Remove Strawbery Perl From Path
      # https://github.com/actions/runner-images/issues/6627
      # In particular, this is not pretty, but even CMAKE_IGNORE_PREFIX_PATH
      # cannot help in this case.
      run: |
        move /y C:\Strawberry C:\Strawberry_not_in_PATH
        exit /b 0
    - name: Configure
      env:
        CFLAGS: /Zi
        CXXFLAGS: /Zi
        LDFLAGS: /DEBUG:FULL /OPT:REF /OPT:ICF
      run: cmake -Bbuild -Smegasource -T v143 -A ${{ matrix.platform }},version=10.0.26100.0 --install-prefix %CD%\install -DCMAKE_PDB_OUTPUT_DIRECTORY=%CD%\pdb ${{ steps.vars.outputs.moredef }}
    - name: Install
      run: cmake --build build --target PACKAGE --config Release -j2
    - name: Copy LuaJIT lua51.pdb
      run: |
        copy /Y build\libs\LuaJIT\src\lua51.pdb pdb\Release\lua51.pdb
        exit /b 0
    - name: Add srcsrv to PATH
      run: |
        echo C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\srcsrv>>%GITHUB_PATH%
    - name: Embed Source Index into PDBs
      run: |
        python source_index.py ^
        --source %CD%\megasource\libs\love https://raw.githubusercontent.com/${{ github.repository }}/${{ github.sha }} ^
        --source %CD%\megasource https://raw.githubusercontent.com/love2d/megasource/${{ steps.megasource.outputs.commit }} ^
        --source %CD%\build\libs\LuaJIT https://raw.githubusercontent.com/love2d/megasource/${{ steps.megasource.outputs.commit }}/libs/LuaJIT ^
        pdb\Release\*.pdb
    - name: Artifact
      uses: actions/upload-artifact@v4
      with:
        name: love-windows-${{ steps.vars.outputs.arch }}
        path: |
          build/*.zip
          build/*.exe
        if-no-files-found: ${{ steps.vars.outputs.nofiles }}
    - name: Artifact JIT Modules
      if: steps.vars.outputs.jitmodules == '1'
      uses: actions/upload-artifact@v4
      with:
        name: love-windows-jitmodules
        path: build/libs/LuaJIT/src/jit/*.lua
    - name: Artifact PDB
      uses: actions/upload-artifact@v4
      with:
        name: love-windows-${{ steps.vars.outputs.arch }}-dbg
        path: pdb/Release/*.pdb
    # install mesa for graphic tests
    - name: Install Mesa 
      if: steps.vars.outputs.arch != 'ARM64'
      run: |
        curl -L --output mesa.7z --url https://github.com/pal1000/mesa-dist-win/releases/download/24.2.4/mesa3d-24.2.4-release-msvc.7z
        7z x mesa.7z -o*
        powershell.exe mesa\systemwidedeploy.cmd 1
    # build love to use for the tests
    - name: Build Test Exe
      if: steps.vars.outputs.arch != 'ARM64'
      run: cmake --build build --config Release --target install
    # windows opengl tests
    - name: Run Tests (opengl)
      if: steps.vars.outputs.arch != 'ARM64'
      env:
        LOVE_GRAPHICS_DEBUG: 1
      run: |
        echo 'check dir'
        ls
        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --all --isRunner --renderers opengl
    - name: Love Test Report (opengl)
      id: report1
      if: steps.vars.outputs.arch != 'ARM64'
      uses: ellraiser/love-test-report@main
      with:
        name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} (opengl)
        title: test-report-windows-${{ steps.vars.outputs.arch }}-opengl
        path: megasource/libs/love/testing/output/lovetest_all.md
        token: ${{ secrets.GITHUB_TOKEN }}
    - name: Zip Test Output (opengl)
      if: steps.vars.outputs.arch != 'ARM64'
      run: |
        7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}-opengl.zip megasource/libs/love/testing/output/
    - name: Artifact Test Output (opengl)
      if: steps.vars.outputs.arch != 'ARM64'
      uses: actions/upload-artifact@v4
      with:
        name: test-output-windows-${{ steps.vars.outputs.arch }}-opengl-${{ steps.report1.outputs.conclusion }}
        path: test-output-windows-${{ steps.vars.outputs.arch }}-opengl.zip
    # windows opengles tests
    - name: Run Tests (opengles)
      if: steps.vars.outputs.arch != 'ARM64'
      env:
        LOVE_GRAPHICS_DEBUG: 1
        LOVE_GRAPHICS_USE_OPENGLES: 1
      run: |
        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --all --isRunner --renderers opengl
    - name: Love Test Report (opengles)
      id: report2
      if: steps.vars.outputs.arch != 'ARM64'
      uses: ellraiser/love-test-report@main
      with:
        name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} (opengles)
        title: test-report-windows-${{ steps.vars.outputs.arch }}-opengles
        path: megasource/libs/love/testing/output/lovetest_all.md
        token: ${{ secrets.GITHUB_TOKEN }}
    - name: Zip Test Output (opengles)
      if: steps.vars.outputs.arch != 'ARM64'
      run: |
        7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}-opengles.zip megasource/libs/love/testing/output/
    - name: Artifact Test Output (opengles)
      if: steps.vars.outputs.arch != 'ARM64'
      uses: actions/upload-artifact@v4
      with:
        name: test-output-windows-${{ steps.vars.outputs.arch }}-opengles-${{ steps.report2.outputs.conclusion }}
        path: test-output-windows-${{ steps.vars.outputs.arch }}-opengles.zip
    - name: Check Tests Passing
      if: steps.report1.outputs.conclusion == 'failure' || steps.report2.outputs.conclusion == 'failure'
      run: |
        echo "${{ steps.report1.outputs.failed }} opengl tests failed"
        echo "${{ steps.report2.outputs.failed }} opengles tests failed"
        exit 1
#    # install vulkan
#    - name: Install Vulkan
#      if: steps.vars.outputs.arch != 'ARM64'
#      run: |
#        curl -L --show-error --output VulkanSDK.exe https://sdk.lunarg.com/sdk/download/1.3.231.1/windows/VulkanSDK-1.3.231.1-Installer.exe
#        ./VulkanSDK.exe --root C:/VulkanSDK/1.3.231.1 --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.core com.lunarg.vulkan.vma 
#        curl -L --show-error --output vulkan-runtime.zip https://sdk.lunarg.com/sdk/download/1.3.231.1/windows/vulkan-runtime-components.zip
#        7z e vulkan-runtime.zip -o"C:/VulkanSDK/1.3.231.1/runtime/x64" */x64
#        copy "C:/VulkanSDK/1.3.231.1/runtime/x64/vulkan-1.dll" "mesa/x64"
#        copy "C:/VulkanSDK/1.3.231.1/runtime/x64/vulkan-1.dll" "C:/Windows/System32"
#        copy "C:/VulkanSDK/1.3.231.1/runtime/x64/vulkan-1.dll" "love-12.0-win64/love-12.0-win64"
#        reg add HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers /v "${{ github.workspace }}\mesa\x64\lvp_icd.x86_64.json" /t REG_DWORD /d 0
#        powershell.exe C:/VulkanSDK/1.3.231.1/runtime/x64/vulkaninfo.exe --summary
#    # windows vulkan tests
#    - name: Run Tests (vulkan)
#      if: steps.vars.outputs.arch != 'ARM64'
#      env:
#        LOVE_GRAPHICS_DEBUG: 1
#        LOVE_GRAPHICS_VULKAN_ALLOW_SOFTWARE: 1
#      run: |
#        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --all --isRunner --renderers vulkan
#    - name: Love Test Report (vulkan)
#      if: steps.vars.outputs.arch != 'ARM64'
#      uses: ellraiser/love-test-report@main
#      with:
#        name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} (vulkan)
#        title: test-report-windows-${{ steps.vars.outputs.arch }}-vulkan
#        path: megasource/libs/love/testing/output/lovetest_all.md
#    - name: Zip Test Output (vulkan)
#      if: steps.vars.outputs.arch != 'ARM64'
#      run: |
#        7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}-vulkan.zip megasource/libs/love/testing/output/
#    - name: Artifact Test Output (vulkan)
#      if: steps.vars.outputs.arch != 'ARM64'
#      uses: actions/upload-artifact@v4
#      with:
#        name: test-output-windows-${{ steps.vars.outputs.arch }}-vulkan
#        path: test-output-windows-${{ steps.vars.outputs.arch }}-vulkan.zip

  macOS:
    runs-on: macos-latest
    permissions:
      checks: write
      pull-requests: write
    env:
      ALSOFT_CONF: testing/resources/alsoft.conf
    steps:
    - name: Checkout
      uses: actions/checkout@v4
    - name: Clone Dependencies
      uses: actions/checkout@v4
      with:
        path: apple-dependencies
        repository: love2d/love-apple-dependencies
        ref: main
    - name: Move Dependencies
      run: |
        mv apple-dependencies/macOS/Frameworks platform/xcode/macosx
        mv apple-dependencies/shared platform/xcode
    - name: Build
      run:
        xcodebuild clean archive -project platform/xcode/love.xcodeproj -scheme love-macosx -configuration Release -destination generic/platform=macOS -archivePath love-macos.xcarchive
    - name: Export Archive
      run:
        xcodebuild -exportArchive -archivePath love-macos.xcarchive -exportPath love-macos -exportOptionsPlist platform/xcode/macosx/macos-copy-app.plist
    - name: Zip Archive
      run:
        ditto -c -k --sequesterRsrc --keepParent love-macos/love.app love-macos.zip 
    - name: Artifact
      uses: actions/upload-artifact@v4
      with:
        name: love-macos
        path: love-macos.zip
    # macos opengl tests
    - name: Run Test Suite (OpenGL)
      env:
        LOVE_GRAPHICS_DEBUG: 1
      run: |
        ls
        love-macos/love.app/Contents/MacOS/love ./testing/main.lua --all --isRunner --renderers opengl
    - name: Love Test Report (OpenGL)
      id: report1
      uses: ellraiser/love-test-report@main
      with:
        name: Love Testsuite MacOS
        title: test-report-macos-opengl
        path: testing/output/lovetest_all.md
        token: ${{ secrets.GITHUB_TOKEN }}
    - name: Zip Test Output (OpenGL)
      run: |
        7z a -tzip test-output-macos-opengl.zip ./testing/output/
    - name: Artifact Test Output (OpenGL)
      uses: actions/upload-artifact@v4
      with:
        name: test-output-macos-opengl-${{ steps.report1.outputs.conclusion }}
        path: test-output-macos-opengl.zip
    - name: Check Tests Passing (OpenGL)
      if: steps.report1.outputs.conclusion == 'failure'
      run: |
        echo "${{ steps.report1.outputs.failed }} opengl tests failed"
        exit 1
    # macos metal tests
    - name: Run Test Suite (Metal)
      env:
        LOVE_GRAPHICS_DEBUG: 1
      run: |
        ls
        love-macos/love.app/Contents/MacOS/love ./testing/main.lua --all --isRunner --renderers metal
    - name: Love Test Report (Metal)
      id: report2
      uses: ellraiser/love-test-report@main
      with:
        name: Love Testsuite MacOS (Metal)
        title: test-report-macos-metal
        path: testing/output/lovetest_all.md
        token: ${{ secrets.GITHUB_TOKEN }}
    - name: Zip Test Output (Metal)
      run: |
        7z a -tzip test-output-macos-metal.zip ./testing/output/
    - name: Artifact Test Output (Metal)
      uses: actions/upload-artifact@v4
      with:
        name: test-output-macos-metal-${{ steps.report2.outputs.conclusion }}
        path: test-output-macos-metal.zip
    - name: Check Tests Passing (Metal)
      if: steps.report2.outputs.conclusion == 'failure'
      run: |
        echo "${{ steps.report2.outputs.failed }} metal tests failed"
        exit 1

  iOS-Simulator:
    runs-on: macos-14
    steps:
    - name: Checkout
      uses: actions/checkout@v4
    - name: Clone Dependencies
      uses: actions/checkout@v4
      with:
        path: apple-dependencies
        repository: love2d/love-apple-dependencies
        ref: main
    - name: Move Dependencies
      run: |
        mv apple-dependencies/iOS/libraries platform/xcode/ios
        mv apple-dependencies/shared platform/xcode
    - name: Build
      run:
        xcodebuild -project platform/xcode/love.xcodeproj -scheme love-ios -configuration Release -destination 'platform=iOS Simulator,name=iPhone 15'

  Android:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        build_type: [Debug, Release]
    env:
      GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4G'"
    steps:
    - name: Prepare Environment
      run: sudo apt-get update && curl -Lfo kitware-archive.sh https://apt.kitware.com/kitware-archive.sh && sudo bash ./kitware-archive.sh
    - name: Install Dependencies
      run: sudo apt-get install ninja-build cmake
    - name: Checkout love-android
      uses: actions/checkout@v4
      with:
        repository: love2d/love-android
        submodules: false
    - name: Setup Java 17
      uses: actions/setup-java@v4
      with:
        distribution: adopt-hotspot
        java-version: 17
        cache: gradle
    - name: Clone Megasource
      uses: actions/checkout@v4
      with:
        path: app/src/main/cpp/megasource
        repository: love2d/megasource
        ref: main
    - name: Checkout
      uses: actions/checkout@v4
      with:
        path: app/src/main/cpp/love
    - name: Build Normal Flavor
      run: bash ./gradlew assembleNormalRecord${{ matrix.build_type }}
    - name: Build Release-specific Binaries
      if: ${{ matrix.build_type == 'Release' }}
      run: bash ./gradlew bundleNormalNoRecordRelease bundleEmbedRecordRelease bundleEmbedNoRecordRelease
    - name: Artifact (Normal debug APK)
      if: ${{ matrix.build_type == 'Debug' }}
      uses: actions/upload-artifact@v4
      with:
        name: love-android-debug.apk
        path: app/build/outputs/apk/normalRecord/debug/app-normal-record-debug.apk
    - name: Artifact (Normal unsigned APK)
      if: ${{ matrix.build_type == 'Release' }}
      uses: actions/upload-artifact@v4
      with:
        name: love-android.apk
        path: app/build/outputs/apk/normalRecord/release/app-normal-record-release-unsigned.apk
    - name: Artifact (Normal AAB w/o recording)
      if: ${{ matrix.build_type == 'Release' }}
      uses: actions/upload-artifact@v4
      with:
        name: love-android-ps.aab
        path: app/build/outputs/bundle/normalNoRecordRelease/app-normal-noRecord-release.aab
    - name: Artifact (Embed AAB)
      if: ${{ matrix.build_type == 'Release' }}
      uses: actions/upload-artifact@v4
      with:
        name: love-android-embed-record.aab
        path: app/build/outputs/bundle/embedRecordRelease/app-embed-record-release.aab
    - name: Artifact (Embed AAB w/o recording)
      if: ${{ matrix.build_type == 'Release' }}
      uses: actions/upload-artifact@v4
      with:
        name: love-android-embed.aab
        path: app/build/outputs/bundle/embedNoRecordRelease/app-embed-noRecord-release.aab
    - name: Artifact (Debug symbols)
      uses: actions/upload-artifact@v4
      with:
        name: love-android-unstripped-debugsyms-${{ matrix.build_type }}
        path: app/build/intermediates/cxx


================================================
FILE: .gitignore
================================================
# automake products
/config.h
/config.h.in
/config.log
/config.status
/configure
/configure-modules-post.ac
/configure-modules-pre.ac
/configure.ac

/extra/reshax/Release/
/extra/reshax/Debug/
/extra/reshax/resources.h
/extra/reshax/resources.cpp
*.obj
*.o
*.dirstamp
*.m4
*.Po
*.lo
*.Plo
*.dll
*.user
*.suo
*/Release*
*/Debug*
*.lib
*.ncb
*.exe
*.bat
/platform/xcode/Build
/platform/xcode/DerivedData
/platform/xcode/ios/include
/platform/xcode/ios/libraries
/platform/xcode/ios/luajit-git
/platform/xcode/macosx/Frameworks
/platform/xcode/shared/Frameworks
*xcuserdata*
*.DS_Store
*.dylib
*.dmg*
demos
*.orig
.*.swp
/autom4te.cache/
/src/.libs/
*~
Makefile*
libtool
/src/config.h
/platform/unix/ar-lib
/platform/unix/compile
/platform/unix/config.guess
/platform/unix/config.sub
/platform/unix/debian/changelog
/platform/unix/debian/control
/platform/unix/debian/rules
/platform/unix/depcomp
/platform/unix/install-sh
/platform/unix/love.desktop
/platform/unix/ltmain.sh
/platform/unix/missing
.lineno
*.la
*.Tpo
*.rej
*/.deps
stamp-h1
/src/love
/src/tags
.vs/
.vscode/
/testing/output/*.xml
/testing/output/*.html
/testing/output/*.md
/testing/output/actual/*.png
/testing/output/difference/*.png


================================================
FILE: CMakeLists.txt
================================================
#
# Copyright (c) 2006-2026 LOVE Development Team
#
# 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.
#

if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
	# Protip: run cmake like this: cmake -G "<generator>" -H. -Bbuild
	message(FATAL_ERROR "Prevented in-tree build.")
endif()

cmake_minimum_required(VERSION 3.19)

project(love)

set(CMAKE_MODULE_PATH "${love_SOURCE_DIR}/extra/cmake" ${CMAKE_MODULE_PATH})
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) # Needed for shared libs on Linux. (-fPIC).
set(CMAKE_CXX_STANDARD 17)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)	# Allow grouping projects in Visual Studio

if(APPLE)
	message(WARNING "CMake is not an officially supported build system for love on Apple platforms.")
	message(WARNING "Use the prebuilt .app or the xcode project in platform/xcode/ instead.")
endif()

if(MINGW)
	message(WARNING "MinGW is not an officially supported build system for love.")
	message(WARNING "Use megasource with Visual Studio instead.")
	message(WARNING "Please see https://github.com/love2d/megasource")
endif()

include(LoveMacros)

# Extract version.h contents.
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/src/common/version.h LOVE_VERSION_FILE_CONTENTS)

# Extract one of LOVE_VERSION_MAJOR/MINOR/REV.
function(match_version ARG_STRING OUT_VAR)
	string(REGEX MATCH "VERSION_${ARG_STRING} = ([0-9]+);" TMP_VER "${LOVE_VERSION_FILE_CONTENTS}")
	string(REGEX MATCH "[0-9]+" TMP_VER "${TMP_VER}")
	set(${OUT_VAR} ${TMP_VER} PARENT_SCOPE)
endfunction()

match_version("MAJOR" LOVE_VERSION_MAJOR)
match_version("MINOR" LOVE_VERSION_MINOR)
match_version("REV" LOVE_VERSION_REV)

set(LOVE_VERSION_STR "${LOVE_VERSION_MAJOR}.${LOVE_VERSION_MINOR}")

message(STATUS "Version: ${LOVE_VERSION_STR}")

set(LOVE_EXE_NAME love CACHE STRING "The name of the executable, usually 'love'")

set(LOVE_DEFAULT_LIB_NAME liblove)
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
	set(LOVE_DEFAULT_LIB_NAME "${LOVE_EXE_NAME}-${LOVE_VERSION_STR}")
endif()

set(LOVE_LIB_NAME ${LOVE_DEFAULT_LIB_NAME} CACHE STRING "The name of the lua library, usually 'liblove' or 'love'")
set(LOVE_CONSOLE_EXE_NAME "${LOVE_EXE_NAME}c" CACHE STRING "The name of the console version of the executable, usually 'lovec'")

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
	set(LOVE_X64 TRUE)
	set(LOVE_TARGET_PLATFORM x64)
else()
	set(LOVE_X86 TRUE)
	set(LOVE_TARGET_PLATFORM x86)
endif()


if(APPLE)
	set(LOVE_DEFAULT_JIT FALSE)
else()
	set(LOVE_DEFAULT_JIT TRUE)
endif()

option(LOVE_JIT "Use LuaJIT" ${LOVE_DEFAULT_JIT})

if(LOVE_JIT)
	if(APPLE)
		message(WARNING "JIT not supported yet on Mac.")
	endif()
	message(STATUS "LuaJIT: Enabled")
else()
	message(STATUS "LuaJIT: Disabled")
endif()

message(STATUS "Target platform: ${LOVE_TARGET_PLATFORM}")

add_library(lovedep::SDL INTERFACE IMPORTED)
add_library(lovedep::Freetype INTERFACE IMPORTED)
add_library(lovedep::Harfbuzz INTERFACE IMPORTED)
add_library(lovedep::OpenAL INTERFACE IMPORTED)
add_library(lovedep::Modplug INTERFACE IMPORTED)
add_library(lovedep::Theora INTERFACE IMPORTED)
add_library(lovedep::Vorbis INTERFACE IMPORTED)
add_library(lovedep::Ogg INTERFACE IMPORTED)
add_library(lovedep::Zlib INTERFACE IMPORTED)
add_library(lovedep::Lua INTERFACE IMPORTED)

if(MEGA)
	# LOVE_MSVC_DLLS contains runtime DLLs that should be bundled with the love
	# binary (in e.g. the installer). Example: msvcp140.dll.
	set(LOVE_MSVC_DLLS ${MEGA_MSVC_DLLS})

	# These DLLs are moved next to the love binary in a post-build step to
	# love runnable from inside Visual Studio.
	#
	# LOVE_MOVE_DLLS can contain CMake targets, in which case the target's
	# output is assumed to be a DLL, or it can contain paths to actual files.
	# We detect whether or not each item is a target, and take the appropriate
	# action.
	set(LOVE_MOVE_DLLS
		${MEGA_SDL3}
		${MEGA_OPENAL}
	)

	# LOVE_EXTRA_DLLS are non-runtime DLLs which should be bundled with the
	# love binary in installers, etc. It's only needed for external
	# (non-CMake) targets, i.e. LuaJIT.
	if(NOT DEFINED LOVE_EXTRA_DLLS)
		set(LOVE_EXTRA_DLLS)
	endif()

	target_link_libraries(lovedep::SDL INTERFACE ${MEGA_SDL3})
	target_link_libraries(lovedep::Freetype INTERFACE ${MEGA_FREETYPE})
	target_link_libraries(lovedep::Harfbuzz INTERFACE ${MEGA_HARFBUZZ})
	target_link_libraries(lovedep::OpenAL INTERFACE ${MEGA_OPENAL})
	target_link_libraries(lovedep::Modplug INTERFACE ${MEGA_MODPLUG})
	target_link_libraries(lovedep::Theora INTERFACE ${MEGA_LIBTHEORA})
	target_link_libraries(lovedep::Vorbis INTERFACE ${MEGA_LIBVORBIS} ${MEGA_LIBVORBISFILE})
	target_link_libraries(lovedep::Ogg INTERFACE ${MEGA_LIBOGG})
	target_link_libraries(lovedep::Zlib INTERFACE ${MEGA_ZLIB})

	if(LOVE_JIT)
		target_include_directories(lovedep::Lua INTERFACE ${MEGA_LUAJIT_INCLUDE})
		target_link_libraries(lovedep::Lua INTERFACE ${MEGA_LUAJIT_LIB})
		set(LOVE_EXTRA_DLLS ${LOVE_EXTRA_DLLS} ${MEGA_LUAJIT_DLL})
		set(LOVE_EXTRA_DEPENDECIES luajit)
		set(LOVE_MOVE_DLLS
			${LOVE_MOVE_DLLS}
			${MEGA_LUAJIT_DLL}
		)
	else()
		# MEGA_LUA51 is a CMake target, so includes are handled
		# automatically.
		target_link_libraries(lovedep::Lua INTERFACE ${MEGA_LUA51})
		set(LOVE_MOVE_DLLS
			${LOVE_MOVE_DLLS}
			${MEGA_LUA51}
		)
	endif()
else()
	if(MSVC OR ANDROID)
		message(FATAL_ERROR "
It is currently only possible to build with megasource on Windows and Android.
Please see https://github.com/love2d/megasource
")
	endif()

	# required for enet
	add_definitions(-D HAS_SOCKLEN_T)

	find_package(SDL3 3.1.3 REQUIRED CONFIG)
	target_include_directories(lovedep::SDL INTERFACE ${SDL3_INCLUDE_DIRS})
	target_link_libraries(lovedep::SDL INTERFACE ${SDL3_LIBRARIES})

	find_package(Freetype REQUIRED)
	target_include_directories(lovedep::Freetype INTERFACE ${FREETYPE_INCLUDE_DIRS})
	target_link_libraries(lovedep::Freetype INTERFACE ${FREETYPE_LIBRARY})

	find_package(Harfbuzz REQUIRED)
	target_include_directories(lovedep::Harfbuzz INTERFACE ${HARFBUZZ_INCLUDE_DIR})
	target_link_libraries(lovedep::Harfbuzz INTERFACE ${HARFBUZZ_LIBRARY})

	find_package(OpenAL REQUIRED)
	target_include_directories(lovedep::OpenAL INTERFACE ${OPENAL_INCLUDE_DIR})
	target_link_libraries(lovedep::OpenAL INTERFACE ${OPENAL_LIBRARY})

	find_package(ModPlug REQUIRED)
	target_include_directories(lovedep::Modplug INTERFACE ${MODPLUG_INCLUDE_DIR})
	target_link_libraries(lovedep::Modplug INTERFACE ${MODPLUG_LIBRARY})

	find_package(Theora REQUIRED)
	target_include_directories(lovedep::Theora INTERFACE ${THEORA_INCLUDE_DIR})
	target_link_libraries(lovedep::Theora INTERFACE ${THEORA_LIBRARY} ${THEORADEC_LIBRARY})

	find_package(Vorbis REQUIRED)
	target_include_directories(lovedep::Vorbis INTERFACE ${VORBIS_INCLUDE_DIR})
	target_link_libraries(lovedep::Vorbis INTERFACE ${VORBISFILE_LIBRARY})

	find_package(Ogg REQUIRED)
	target_include_directories(lovedep::Ogg INTERFACE ${OGG_INCLUDE_DIR})
	target_link_libraries(lovedep::Ogg INTERFACE ${OGG_LIBRARY})

	find_package(ZLIB REQUIRED)
	target_include_directories(lovedep::Zlib INTERFACE ${ZLIB_INCLUDE_DIRS})
	target_link_libraries(lovedep::Zlib INTERFACE ${ZLIB_LIBRARY})

	if(LOVE_JIT)
		find_package(LuaJIT REQUIRED)
		target_include_directories(lovedep::Lua INTERFACE ${LUAJIT_INCLUDE_DIR})
		target_link_libraries(lovedep::Lua INTERFACE ${LUAJIT_LIBRARY})
	else()
		find_package(Lua51 REQUIRED)
		target_include_directories(lovedep::Lua INTERFACE ${LUA_INCLUDE_DIR})
		target_link_libraries(lovedep::Lua INTERFACE ${LUA_LIBRARY})
	endif()
endif()

###
### No Megasource-specific stuff beyond this point!
###

if(MSVC)
	set(DISABLE_WARNING_FLAG -W0)
else()
	set(DISABLE_WARNING_FLAG -w)
endif()

function(love_disable_warnings ARG_TARGET)
	target_compile_options(${ARG_TARGET} PRIVATE ${DISABLE_WARNING_FLAG})
endfunction()

#
# common
#

add_library(love_common STATIC
	src/common/android.cpp
	src/common/android.h
	src/common/b64.cpp
	src/common/b64.h
	src/common/Color.h
	src/common/config.h
	src/common/Data.cpp
	src/common/Data.h
	src/common/delay.cpp
	src/common/delay.h
	src/common/deprecation.cpp
	src/common/deprecation.h
	src/common/EnumMap.h
	src/common/Exception.cpp
	src/common/Exception.h
	src/common/floattypes.cpp
	src/common/floattypes.h
	src/common/int.h
	src/common/math.h
	src/common/Matrix.cpp
	src/common/Matrix.h
	src/common/memory.cpp
	src/common/memory.h
	src/common/Module.cpp
	src/common/Module.h
	src/common/Object.cpp
	src/common/Object.h
	src/common/Optional.h
	src/common/pixelformat.cpp
	src/common/pixelformat.h
	src/common/Range.h
	src/common/Reference.cpp
	src/common/Reference.h
	src/common/runtime.cpp
	src/common/runtime.h
	src/common/Stream.cpp
	src/common/Stream.h
	src/common/StringMap.cpp
	src/common/StringMap.h
	src/common/types.cpp
	src/common/types.h
	src/common/utf8.cpp
	src/common/utf8.h
	src/common/Variant.cpp
	src/common/Variant.h
	#src/common/Vector.cpp # Vector.cpp is empty.
	src/common/Vector.h
	src/common/version.h
)
target_link_libraries(love_common PUBLIC
	lovedep::Lua
	lovedep::SDL
)

if (APPLE)
	target_sources(love_common PRIVATE
		src/common/apple.mm
	)
	target_link_libraries(love_common PUBLIC
		objc
		"-framework CoreFoundation"
	)
	if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
		target_sources(love_common PRIVATE
			src/common/macos.mm
		)
		target_link_libraries(love_common PUBLIC
			"-framework AppKit"
		)
	else()
		target_sources(love_common PRIVATE
			src/common/ios.mm
		)
		target_link_libraries(love_common PUBLIC
			"-framework UIKit"
		)
	endif()
endif()

#
# love.audio
#

add_library(love_audio_root STATIC
	src/modules/audio/Audio.cpp
	src/modules/audio/Audio.h
	src/modules/audio/Source.cpp
	src/modules/audio/Source.h
	src/modules/audio/RecordingDevice.cpp
	src/modules/audio/RecordingDevice.h
	src/modules/audio/Filter.cpp
	src/modules/audio/Filter.h
	src/modules/audio/Effect.cpp
	src/modules/audio/Effect.h
	src/modules/audio/wrap_Audio.cpp
	src/modules/audio/wrap_Audio.h
	src/modules/audio/wrap_Source.cpp
	src/modules/audio/wrap_Source.h
	src/modules/audio/wrap_RecordingDevice.cpp
	src/modules/audio/wrap_RecordingDevice.h
)
target_link_libraries(love_audio_root PUBLIC
	lovedep::Lua
	lovedep::OpenAL
)

add_library(love_audio_null STATIC
	src/modules/audio/null/Audio.cpp
	src/modules/audio/null/Audio.h
	src/modules/audio/null/Source.cpp
	src/modules/audio/null/Source.h
	src/modules/audio/null/RecordingDevice.cpp
	src/modules/audio/null/RecordingDevice.h
)

add_library(love_audio_openal STATIC
	src/modules/audio/openal/Audio.cpp
	src/modules/audio/openal/Audio.h
	src/modules/audio/openal/Pool.cpp
	src/modules/audio/openal/Pool.h
	src/modules/audio/openal/Source.cpp
	src/modules/audio/openal/Source.h
	src/modules/audio/openal/RecordingDevice.cpp
	src/modules/audio/openal/RecordingDevice.h
	src/modules/audio/openal/Filter.cpp
	src/modules/audio/openal/Filter.h
	src/modules/audio/openal/Effect.cpp
	src/modules/audio/openal/Effect.h
)
target_link_libraries(love_audio_openal PUBLIC
	lovedep::OpenAL
)

add_library(love_audio INTERFACE)
target_link_libraries(love_audio INTERFACE
	love_audio_root
	love_audio_null
	love_audio_openal
)

#
# love.data
#

add_library(love_data STATIC
	src/modules/data/ByteData.cpp
	src/modules/data/ByteData.h
	src/modules/data/CompressedData.cpp
	src/modules/data/CompressedData.h
	src/modules/data/Compressor.cpp
	src/modules/data/Compressor.h
	src/modules/data/DataModule.cpp
	src/modules/data/DataModule.h
	src/modules/data/DataStream.cpp
	src/modules/data/DataStream.h
	src/modules/data/DataView.cpp
	src/modules/data/DataView.h
	src/modules/data/HashFunction.cpp
	src/modules/data/HashFunction.h
	src/modules/data/wrap_ByteData.cpp
	src/modules/data/wrap_ByteData.h
	src/modules/data/wrap_CompressedData.cpp
	src/modules/data/wrap_CompressedData.h
	src/modules/data/wrap_Data.cpp
	src/modules/data/wrap_Data.h
	src/modules/data/wrap_Data.lua
	src/modules/data/wrap_DataModule.cpp
	src/modules/data/wrap_DataModule.h
	src/modules/data/wrap_DataView.cpp
	src/modules/data/wrap_DataView.h
)
target_link_libraries(love_data PUBLIC
	lovedep::Lua
	lovedep::Zlib
)

#
# love.event
#

add_library(love_event_root STATIC
	src/modules/event/Event.cpp
	src/modules/event/Event.h
	src/modules/event/wrap_Event.cpp
	src/modules/event/wrap_Event.h
	src/modules/event/wrap_Event.lua
)
target_link_libraries(love_event_root PUBLIC
	lovedep::Lua
	lovedep::SDL
)

add_library(love_event_sdl STATIC
	src/modules/event/sdl/Event.cpp
	src/modules/event/sdl/Event.h
)
target_link_libraries(love_event_sdl PUBLIC
	lovedep::SDL
)

add_library(love_event INTERFACE)
target_link_libraries(love_event INTERFACE
	love_event_root
	love_event_sdl
)

#
# love.filesystem
#

add_library(love_filesystem_root STATIC
	src/modules/filesystem/File.cpp
	src/modules/filesystem/File.h
	src/modules/filesystem/FileData.cpp
	src/modules/filesystem/FileData.h
	src/modules/filesystem/Filesystem.cpp
	src/modules/filesystem/Filesystem.h
	src/modules/filesystem/NativeFile.cpp
	src/modules/filesystem/NativeFile.h
	src/modules/filesystem/wrap_File.cpp
	src/modules/filesystem/wrap_File.h
	src/modules/filesystem/wrap_FileData.cpp
	src/modules/filesystem/wrap_FileData.h
	src/modules/filesystem/wrap_Filesystem.cpp
	src/modules/filesystem/wrap_Filesystem.h
	src/modules/filesystem/wrap_NativeFile.cpp
	src/modules/filesystem/wrap_NativeFile.h
)
target_link_libraries(love_filesystem_root PUBLIC
	lovedep::Lua
	lovedep::SDL
)

add_library(love_filesystem_physfs STATIC
	src/modules/filesystem/physfs/File.cpp
	src/modules/filesystem/physfs/File.h
	src/modules/filesystem/physfs/Filesystem.cpp
	src/modules/filesystem/physfs/Filesystem.h
	src/modules/filesystem/physfs/PhysfsIo.h
	src/modules/filesystem/physfs/PhysfsIo.cpp
)
if(ANDROID)
	target_link_libraries(love_filesystem_physfs PUBLIC
		lovedep::SDL
	)
endif()

add_library(love_filesystem INTERFACE)
target_link_libraries(love_filesystem INTERFACE
	love_filesystem_root
	love_filesystem_physfs
)

#
# love.font
#

add_library(love_font_root STATIC
	src/modules/font/BMFontRasterizer.cpp
	src/modules/font/BMFontRasterizer.h
	src/modules/font/Font.cpp
	src/modules/font/Font.h
	src/modules/font/GenericShaper.cpp
	src/modules/font/GenericShaper.h
	src/modules/font/GlyphData.cpp
	src/modules/font/GlyphData.h
	src/modules/font/ImageRasterizer.cpp
	src/modules/font/ImageRasterizer.h
	src/modules/font/Rasterizer.cpp
	src/modules/font/Rasterizer.h
	src/modules/font/TextShaper.cpp
	src/modules/font/TextShaper.h
	src/modules/font/TrueTypeRasterizer.cpp
	src/modules/font/TrueTypeRasterizer.h
	src/modules/font/wrap_Font.cpp
	src/modules/font/wrap_Font.h
	src/modules/font/wrap_GlyphData.cpp
	src/modules/font/wrap_GlyphData.h
	src/modules/font/wrap_Rasterizer.cpp
	src/modules/font/wrap_Rasterizer.h
)
target_link_libraries(love_font_root PUBLIC
	lovedep::Lua
	lovedep::Freetype
)

add_library(love_font_freetype STATIC
	src/modules/font/freetype/Font.cpp
	src/modules/font/freetype/Font.h
	src/modules/font/freetype/HarfbuzzShaper.cpp
	src/modules/font/freetype/HarfbuzzShaper.h
	src/modules/font/freetype/TrueTypeRasterizer.cpp
	src/modules/font/freetype/TrueTypeRasterizer.h
)
target_link_libraries(love_font_freetype PUBLIC
	lovedep::Freetype
	lovedep::Harfbuzz
)

add_library(love_font INTERFACE)
target_link_libraries(love_font INTERFACE
	love_font_root
	love_font_freetype
)

#
# love.graphics
#

add_library(love_graphics_root STATIC
	src/modules/graphics/Buffer.cpp
	src/modules/graphics/Buffer.h
	src/modules/graphics/Deprecations.cpp
	src/modules/graphics/Deprecations.h
	src/modules/graphics/Drawable.cpp
	src/modules/graphics/Drawable.h
	src/modules/graphics/Font.cpp
	src/modules/graphics/Font.h
	src/modules/graphics/Graphics.cpp
	src/modules/graphics/Graphics.h
	src/modules/graphics/GraphicsReadback.cpp
	src/modules/graphics/GraphicsReadback.h
	src/modules/graphics/Mesh.cpp
	src/modules/graphics/Mesh.h
	src/modules/graphics/ParticleSystem.cpp
	src/modules/graphics/ParticleSystem.h
	src/modules/graphics/Polyline.cpp
	src/modules/graphics/Polyline.h
	src/modules/graphics/Quad.cpp
	src/modules/graphics/Quad.h
	src/modules/graphics/renderstate.cpp
	src/modules/graphics/renderstate.h
	src/modules/graphics/Resource.h
	src/modules/graphics/Shader.cpp
	src/modules/graphics/Shader.h
	src/modules/graphics/ShaderStage.cpp
	src/modules/graphics/ShaderStage.h
	src/modules/graphics/SpriteBatch.cpp
	src/modules/graphics/SpriteBatch.h
	src/modules/graphics/StreamBuffer.cpp
	src/modules/graphics/StreamBuffer.h
	src/modules/graphics/TextBatch.cpp
	src/modules/graphics/TextBatch.h
	src/modules/graphics/Texture.cpp
	src/modules/graphics/Texture.h
	src/modules/graphics/vertex.cpp
	src/modules/graphics/vertex.h
	src/modules/graphics/Video.cpp
	src/modules/graphics/Video.h
	src/modules/graphics/Volatile.cpp
	src/modules/graphics/Volatile.h
	src/modules/graphics/wrap_Buffer.cpp
	src/modules/graphics/wrap_Buffer.h
	src/modules/graphics/wrap_Font.cpp
	src/modules/graphics/wrap_Font.h
	src/modules/graphics/wrap_Graphics.cpp
	src/modules/graphics/wrap_Graphics.h
	src/modules/graphics/wrap_Graphics.lua
	src/modules/graphics/wrap_GraphicsReadback.cpp
	src/modules/graphics/wrap_GraphicsReadback.h
	src/modules/graphics/wrap_Mesh.cpp
	src/modules/graphics/wrap_Mesh.h
	src/modules/graphics/wrap_ParticleSystem.cpp
	src/modules/graphics/wrap_ParticleSystem.h
	src/modules/graphics/wrap_Quad.cpp
	src/modules/graphics/wrap_Quad.h
	src/modules/graphics/wrap_Shader.cpp
	src/modules/graphics/wrap_Shader.h
	src/modules/graphics/wrap_SpriteBatch.cpp
	src/modules/graphics/wrap_SpriteBatch.h
	src/modules/graphics/wrap_Texture.cpp
	src/modules/graphics/wrap_Texture.h
	src/modules/graphics/wrap_TextBatch.cpp
	src/modules/graphics/wrap_TextBatch.h
	src/modules/graphics/wrap_Video.cpp
	src/modules/graphics/wrap_Video.h
	src/modules/graphics/wrap_Video.lua
)
target_link_libraries(love_graphics_root PUBLIC
	lovedep::Lua
)

add_library(love_graphics_opengl STATIC
	src/modules/graphics/opengl/Buffer.cpp
	src/modules/graphics/opengl/Buffer.h
	src/modules/graphics/opengl/FenceSync.cpp
	src/modules/graphics/opengl/FenceSync.h
	src/modules/graphics/opengl/Graphics.cpp
	src/modules/graphics/opengl/Graphics.h
	src/modules/graphics/opengl/GraphicsReadback.cpp
	src/modules/graphics/opengl/GraphicsReadback.h
	src/modules/graphics/opengl/OpenGL.cpp
	src/modules/graphics/opengl/OpenGL.h
	src/modules/graphics/opengl/Shader.cpp
	src/modules/graphics/opengl/Shader.h
	src/modules/graphics/opengl/ShaderStage.cpp
	src/modules/graphics/opengl/ShaderStage.h
	src/modules/graphics/opengl/StreamBuffer.cpp
	src/modules/graphics/opengl/StreamBuffer.h
	src/modules/graphics/opengl/Texture.cpp
	src/modules/graphics/opengl/Texture.h
)
target_link_libraries(love_graphics_opengl PUBLIC
	lovedep::SDL
)

add_library(love_graphics INTERFACE)
target_link_libraries(love_graphics INTERFACE
	love_graphics_root
	love_graphics_opengl
)

if(APPLE)
	add_library(love_graphics_metal STATIC
		src/modules/graphics/metal/Buffer.h
		src/modules/graphics/metal/Buffer.mm
		src/modules/graphics/metal/Graphics.h
		src/modules/graphics/metal/Graphics.mm
		src/modules/graphics/metal/GraphicsReadback.h
		src/modules/graphics/metal/GraphicsReadback.mm
		src/modules/graphics/metal/Metal.h
		src/modules/graphics/metal/Metal.mm
		src/modules/graphics/metal/Shader.h
		src/modules/graphics/metal/Shader.mm
		src/modules/graphics/metal/ShaderStage.h
		src/modules/graphics/metal/ShaderStage.mm
		src/modules/graphics/metal/StreamBuffer.h
		src/modules/graphics/metal/StreamBuffer.mm
		src/modules/graphics/metal/Texture.h
		src/modules/graphics/metal/Texture.mm
	)
	target_link_libraries(love_graphics_metal PUBLIC
		objc
		"-framework Metal"
		"-framework QuartzCore"
	)
	target_link_libraries(love_graphics INTERFACE
		love_graphics_metal
	)
else()
	add_library(love_graphics_vulkan STATIC
		src/modules/graphics/vulkan/Graphics.h
		src/modules/graphics/vulkan/Graphics.cpp
		src/modules/graphics/vulkan/GraphicsReadback.h
		src/modules/graphics/vulkan/GraphicsReadback.cpp
		src/modules/graphics/vulkan/Shader.h
		src/modules/graphics/vulkan/Shader.cpp
		src/modules/graphics/vulkan/ShaderStage.h
		src/modules/graphics/vulkan/ShaderStage.cpp
		src/modules/graphics/vulkan/StreamBuffer.h
		src/modules/graphics/vulkan/StreamBuffer.cpp
		src/modules/graphics/vulkan/Buffer.h
		src/modules/graphics/vulkan/Buffer.cpp
		src/modules/graphics/vulkan/Texture.h
		src/modules/graphics/vulkan/Texture.cpp
		src/modules/graphics/vulkan/Vulkan.h
		src/modules/graphics/vulkan/Vulkan.cpp
		src/modules/graphics/vulkan/VulkanWrapper.h
	)
	target_link_libraries(love_graphics_vulkan PUBLIC
		lovedep::SDL
	)
	target_link_libraries(love_graphics INTERFACE
		love_graphics_vulkan
	)
endif()

#
# love.image
#

add_library(love_image_root STATIC
	src/modules/image/CompressedImageData.cpp
	src/modules/image/CompressedImageData.h
	src/modules/image/CompressedSlice.cpp
	src/modules/image/CompressedSlice.h
	src/modules/image/FormatHandler.cpp
	src/modules/image/FormatHandler.h
	src/modules/image/Image.cpp
	src/modules/image/Image.h
	src/modules/image/ImageData.cpp
	src/modules/image/ImageData.h
	src/modules/image/ImageDataBase.cpp
	src/modules/image/ImageDataBase.h
	src/modules/image/wrap_CompressedImageData.cpp
	src/modules/image/wrap_CompressedImageData.h
	src/modules/image/wrap_Image.cpp
	src/modules/image/wrap_Image.h
	src/modules/image/wrap_ImageData.cpp
	src/modules/image/wrap_ImageData.h
	src/modules/image/wrap_ImageData.lua
)
target_link_libraries(love_image_root PUBLIC
	lovedep::Lua
)

add_library(love_image_magpie STATIC
	src/modules/image/magpie/ASTCHandler.cpp
	src/modules/image/magpie/ASTCHandler.h
	src/modules/image/magpie/ddsHandler.cpp
	src/modules/image/magpie/ddsHandler.h
	src/modules/image/magpie/EXRHandler.cpp
	src/modules/image/magpie/EXRHandler.h
	src/modules/image/magpie/KTXHandler.cpp
	src/modules/image/magpie/KTXHandler.h
	src/modules/image/magpie/PKMHandler.cpp
	src/modules/image/magpie/PKMHandler.h
	src/modules/image/magpie/PNGHandler.cpp
	src/modules/image/magpie/PNGHandler.h
	src/modules/image/magpie/PVRHandler.cpp
	src/modules/image/magpie/PVRHandler.h
	src/modules/image/magpie/STBHandler.cpp
	src/modules/image/magpie/STBHandler.h
)
target_link_libraries(love_image_magpie PUBLIC
	lovedep::Zlib
)

add_library(love_image INTERFACE)
target_link_libraries(love_image INTERFACE
	love_image_root
	love_image_magpie
)

#
# love.joystick
#

add_library(love_joystick_root STATIC
	src/modules/joystick/Joystick.cpp
	src/modules/joystick/Joystick.h
	src/modules/joystick/JoystickModule.h
	src/modules/joystick/wrap_Joystick.cpp
	src/modules/joystick/wrap_Joystick.h
	src/modules/joystick/wrap_JoystickModule.cpp
	src/modules/joystick/wrap_JoystickModule.h
)
target_link_libraries(love_joystick_root PUBLIC
	lovedep::Lua
)

add_library(love_joystick_sdl STATIC
	src/modules/joystick/sdl/Joystick.cpp
	src/modules/joystick/sdl/Joystick.h
	src/modules/joystick/sdl/JoystickModule.cpp
	src/modules/joystick/sdl/JoystickModule.h
)
target_link_libraries(love_joystick_sdl PUBLIC
	lovedep::SDL
)

add_library(love_joystick INTERFACE)
target_link_libraries(love_joystick INTERFACE
	love_joystick_root
	love_joystick_sdl
)

#
# love.keyboard
#

add_library(love_keyboard_root STATIC
	src/modules/keyboard/Keyboard.cpp
	src/modules/keyboard/Keyboard.h
	src/modules/keyboard/wrap_Keyboard.cpp
	src/modules/keyboard/wrap_Keyboard.h
)
target_link_libraries(love_keyboard_root PUBLIC
	lovedep::Lua
	lovedep::SDL
)

add_library(love_keyboard_sdl STATIC
	src/modules/keyboard/sdl/Keyboard.cpp
	src/modules/keyboard/sdl/Keyboard.h
)
target_link_libraries(love_keyboard_sdl PUBLIC
	lovedep::SDL
)

add_library(love_keyboard INTERFACE)
target_link_libraries(love_keyboard INTERFACE
	love_keyboard_root
	love_keyboard_sdl
)

#
# love.math
#

add_library(love_math STATIC
	src/modules/math/BezierCurve.cpp
	src/modules/math/BezierCurve.h
	src/modules/math/MathModule.cpp
	src/modules/math/MathModule.h
	src/modules/math/RandomGenerator.cpp
	src/modules/math/RandomGenerator.h
	src/modules/math/Transform.cpp
	src/modules/math/Transform.h
	src/modules/math/wrap_BezierCurve.cpp
	src/modules/math/wrap_BezierCurve.h
	src/modules/math/wrap_Math.cpp
	src/modules/math/wrap_Math.h
	src/modules/math/wrap_Math.lua
	src/modules/math/wrap_RandomGenerator.cpp
	src/modules/math/wrap_RandomGenerator.h
	src/modules/math/wrap_RandomGenerator.lua
	src/modules/math/wrap_Transform.cpp
	src/modules/math/wrap_Transform.h
)
target_link_libraries(love_math PUBLIC
	lovedep::Lua
)

#
# love.mouse
#

add_library(love_mouse_root STATIC
	src/modules/mouse/Cursor.cpp
	src/modules/mouse/Cursor.h
	src/modules/mouse/Mouse.h
	src/modules/mouse/wrap_Cursor.cpp
	src/modules/mouse/wrap_Cursor.h
	src/modules/mouse/wrap_Mouse.cpp
	src/modules/mouse/wrap_Mouse.h
)
target_link_libraries(love_mouse_root PUBLIC
	lovedep::Lua
	lovedep::SDL
)

add_library(love_mouse_sdl STATIC
	src/modules/mouse/sdl/Cursor.cpp
	src/modules/mouse/sdl/Cursor.h
	src/modules/mouse/sdl/Mouse.cpp
	src/modules/mouse/sdl/Mouse.h
)
target_link_libraries(love_mouse_sdl PUBLIC
	lovedep::SDL
)

add_library(love_mouse INTERFACE)
target_link_libraries(love_mouse INTERFACE
	love_mouse_root
	love_mouse_sdl
)

#
# love.physics
#

add_library(love_physics_root STATIC
	src/modules/physics/Body.cpp
	src/modules/physics/Body.h
	src/modules/physics/Joint.cpp
	src/modules/physics/Joint.h
	src/modules/physics/Shape.cpp
	src/modules/physics/Shape.h
)

add_library(love_physics_box2d STATIC
	src/modules/physics/box2d/Body.cpp
	src/modules/physics/box2d/Body.h
	src/modules/physics/box2d/ChainShape.cpp
	src/modules/physics/box2d/ChainShape.h
	src/modules/physics/box2d/CircleShape.cpp
	src/modules/physics/box2d/CircleShape.h
	src/modules/physics/box2d/Contact.cpp
	src/modules/physics/box2d/Contact.h
	src/modules/physics/box2d/DistanceJoint.cpp
	src/modules/physics/box2d/DistanceJoint.h
	src/modules/physics/box2d/EdgeShape.cpp
	src/modules/physics/box2d/EdgeShape.h
	src/modules/physics/box2d/FrictionJoint.cpp
	src/modules/physics/box2d/FrictionJoint.h
	src/modules/physics/box2d/GearJoint.cpp
	src/modules/physics/box2d/GearJoint.h
	src/modules/physics/box2d/Joint.cpp
	src/modules/physics/box2d/Joint.h
	src/modules/physics/box2d/MotorJoint.cpp
	src/modules/physics/box2d/MotorJoint.h
	src/modules/physics/box2d/MouseJoint.cpp
	src/modules/physics/box2d/MouseJoint.h
	src/modules/physics/box2d/Physics.cpp
	src/modules/physics/box2d/Physics.h
	src/modules/physics/box2d/PolygonShape.cpp
	src/modules/physics/box2d/PolygonShape.h
	src/modules/physics/box2d/PrismaticJoint.cpp
	src/modules/physics/box2d/PrismaticJoint.h
	src/modules/physics/box2d/PulleyJoint.cpp
	src/modules/physics/box2d/PulleyJoint.h
	src/modules/physics/box2d/RevoluteJoint.cpp
	src/modules/physics/box2d/RevoluteJoint.h
	src/modules/physics/box2d/RopeJoint.cpp
	src/modules/physics/box2d/RopeJoint.h
	src/modules/physics/box2d/Shape.cpp
	src/modules/physics/box2d/Shape.h
	src/modules/physics/box2d/WeldJoint.cpp
	src/modules/physics/box2d/WeldJoint.h
	src/modules/physics/box2d/WheelJoint.cpp
	src/modules/physics/box2d/WheelJoint.h
	src/modules/physics/box2d/World.cpp
	src/modules/physics/box2d/World.h
	src/modules/physics/box2d/wrap_Body.cpp
	src/modules/physics/box2d/wrap_Body.h
	src/modules/physics/box2d/wrap_ChainShape.cpp
	src/modules/physics/box2d/wrap_ChainShape.h
	src/modules/physics/box2d/wrap_CircleShape.cpp
	src/modules/physics/box2d/wrap_CircleShape.h
	src/modules/physics/box2d/wrap_Contact.cpp
	src/modules/physics/box2d/wrap_Contact.h
	src/modules/physics/box2d/wrap_DistanceJoint.cpp
	src/modules/physics/box2d/wrap_DistanceJoint.h
	src/modules/physics/box2d/wrap_EdgeShape.cpp
	src/modules/physics/box2d/wrap_EdgeShape.h
	src/modules/physics/box2d/wrap_FrictionJoint.cpp
	src/modules/physics/box2d/wrap_FrictionJoint.h
	src/modules/physics/box2d/wrap_GearJoint.cpp
	src/modules/physics/box2d/wrap_GearJoint.h
	src/modules/physics/box2d/wrap_Joint.cpp
	src/modules/physics/box2d/wrap_Joint.h
	src/modules/physics/box2d/wrap_MotorJoint.cpp
	src/modules/physics/box2d/wrap_MotorJoint.h
	src/modules/physics/box2d/wrap_MouseJoint.cpp
	src/modules/physics/box2d/wrap_MouseJoint.h
	src/modules/physics/box2d/wrap_Physics.cpp
	src/modules/physics/box2d/wrap_Physics.h
	src/modules/physics/box2d/wrap_PolygonShape.cpp
	src/modules/physics/box2d/wrap_PolygonShape.h
	src/modules/physics/box2d/wrap_PrismaticJoint.cpp
	src/modules/physics/box2d/wrap_PrismaticJoint.h
	src/modules/physics/box2d/wrap_PulleyJoint.cpp
	src/modules/physics/box2d/wrap_PulleyJoint.h
	src/modules/physics/box2d/wrap_RevoluteJoint.cpp
	src/modules/physics/box2d/wrap_RevoluteJoint.h
	src/modules/physics/box2d/wrap_RopeJoint.cpp
	src/modules/physics/box2d/wrap_RopeJoint.h
	src/modules/physics/box2d/wrap_Shape.cpp
	src/modules/physics/box2d/wrap_Shape.h
	src/modules/physics/box2d/wrap_WeldJoint.cpp
	src/modules/physics/box2d/wrap_WeldJoint.h
	src/modules/physics/box2d/wrap_WheelJoint.cpp
	src/modules/physics/box2d/wrap_WheelJoint.h
	src/modules/physics/box2d/wrap_World.cpp
	src/modules/physics/box2d/wrap_World.h
)
target_link_libraries(love_physics_box2d PUBLIC
	lovedep::Lua
)

add_library(love_physics INTERFACE)
target_link_libraries(love_physics INTERFACE
	love_physics_root
	love_physics_box2d
)

#
# love.sensor
#

add_library(love_sensor_root STATIC
	src/modules/sensor/Sensor.cpp
	src/modules/sensor/Sensor.h
	src/modules/sensor/wrap_Sensor.cpp
	src/modules/sensor/wrap_Sensor.h
)
target_link_libraries(love_sensor_root PUBLIC
	lovedep::Lua
	lovedep::SDL
)

add_library(love_sensor_sdl STATIC
	src/modules/sensor/sdl/Sensor.cpp
	src/modules/sensor/sdl/Sensor.h
)
target_link_libraries(love_sensor_sdl PUBLIC
	lovedep::SDL
)

add_library(love_sensor INTERFACE)
target_link_libraries(love_sensor INTERFACE
	love_sensor_root
	love_sensor_sdl
)

#
# love.sound
#

add_library(love_sound_root STATIC
	src/modules/sound/Decoder.cpp
	src/modules/sound/Decoder.h
	src/modules/sound/Sound.cpp
	src/modules/sound/Sound.h
	src/modules/sound/SoundData.cpp
	src/modules/sound/SoundData.h
	src/modules/sound/wrap_Decoder.cpp
	src/modules/sound/wrap_Decoder.h
	src/modules/sound/wrap_Sound.cpp
	src/modules/sound/wrap_Sound.h
	src/modules/sound/wrap_SoundData.cpp
	src/modules/sound/wrap_SoundData.h
	src/modules/sound/wrap_SoundData.lua
)
target_link_libraries(love_sound_root PUBLIC
	lovedep::Lua
)

add_library(love_sound_lullaby STATIC
	src/modules/sound/lullaby/FLACDecoder.cpp
	src/modules/sound/lullaby/FLACDecoder.h
	src/modules/sound/lullaby/ModPlugDecoder.cpp
	src/modules/sound/lullaby/ModPlugDecoder.h
	src/modules/sound/lullaby/MP3Decoder.h
	src/modules/sound/lullaby/MP3Decoder.cpp
	src/modules/sound/lullaby/Sound.cpp
	src/modules/sound/lullaby/Sound.h
	src/modules/sound/lullaby/VorbisDecoder.cpp
	src/modules/sound/lullaby/VorbisDecoder.h
	src/modules/sound/lullaby/WaveDecoder.cpp
	src/modules/sound/lullaby/WaveDecoder.h
)
target_link_libraries(love_sound_lullaby PUBLIC
	lovedep::Modplug
	lovedep::Vorbis
	lovedep::Ogg
)

add_library(love_sound INTERFACE)
target_link_libraries(love_sound INTERFACE
	love_sound_root
	love_sound_lullaby
)

#
# love.system
#

add_library(love_system_root STATIC
	src/modules/system/System.cpp
	src/modules/system/System.h
	src/modules/system/wrap_System.cpp
	src/modules/system/wrap_System.h
)
target_link_libraries(love_system_root PUBLIC
	lovedep::Lua
	lovedep::SDL
)

add_library(love_system_sdl STATIC
	src/modules/system/sdl/System.cpp
	src/modules/system/sdl/System.h
)
target_link_libraries(love_system_sdl PUBLIC
	lovedep::SDL
)

add_library(love_system INTERFACE)
target_link_libraries(love_system INTERFACE
	love_system_root
	love_system_sdl
)

#
# love.thread
#

add_library(love_thread_root STATIC
	src/modules/thread/Channel.cpp
	src/modules/thread/Channel.h
	src/modules/thread/LuaThread.cpp
	src/modules/thread/LuaThread.h
	src/modules/thread/Thread.h
	src/modules/thread/ThreadModule.cpp
	src/modules/thread/ThreadModule.h
	src/modules/thread/threads.cpp
	src/modules/thread/threads.h
	src/modules/thread/wrap_Channel.cpp
	src/modules/thread/wrap_Channel.h
	src/modules/thread/wrap_LuaThread.cpp
	src/modules/thread/wrap_LuaThread.h
	src/modules/thread/wrap_ThreadModule.cpp
	src/modules/thread/wrap_ThreadModule.h
)
target_link_libraries(love_thread_root PUBLIC
	lovedep::Lua
)

add_library(love_thread_sdl STATIC
	src/modules/thread/sdl/Thread.cpp
	src/modules/thread/sdl/Thread.h
	src/modules/thread/sdl/threads.cpp
	src/modules/thread/sdl/threads.h
)
target_link_libraries(love_thread_sdl PUBLIC
	lovedep::SDL
)

add_library(love_thread INTERFACE)
target_link_libraries(love_thread INTERFACE
	love_thread_root
	love_thread_sdl
)

#
# love.timer
#

add_library(love_timer STATIC
	src/modules/timer/Timer.cpp
	src/modules/timer/Timer.h
	src/modules/timer/wrap_Timer.cpp
	src/modules/timer/wrap_Timer.h
)
target_link_libraries(love_timer PUBLIC
	lovedep::Lua
)

#
# love.touch
#

add_library(love_touch_root STATIC
	src/modules/touch/Touch.cpp
	src/modules/touch/Touch.h
	src/modules/touch/wrap_Touch.cpp
	src/modules/touch/wrap_Touch.h
)
target_link_libraries(love_touch_root PUBLIC
	lovedep::Lua
	lovedep::SDL
)

add_library(love_touch_sdl STATIC
	src/modules/touch/sdl/Touch.cpp
	src/modules/touch/sdl/Touch.h
)
target_link_libraries(love_touch_sdl PUBLIC
	lovedep::SDL
)

add_library(love_touch INTERFACE)
target_link_libraries(love_touch INTERFACE
	love_touch_root
	love_touch_sdl
)
#
# love.video
#

add_library(love_video_root STATIC
	src/modules/video/Video.h
	src/modules/video/VideoStream.cpp
	src/modules/video/VideoStream.h
	src/modules/video/wrap_Video.cpp
	src/modules/video/wrap_Video.h
	src/modules/video/wrap_VideoStream.cpp
	src/modules/video/wrap_VideoStream.h
)
target_link_libraries(love_video_root PUBLIC
	lovedep::Lua
	lovedep::Theora
	lovedep::Ogg
)

add_library(love_video_theora STATIC
	src/modules/video/theora/Video.cpp
	src/modules/video/theora/Video.h
	src/modules/video/theora/OggDemuxer.cpp
	src/modules/video/theora/OggDemuxer.h
	src/modules/video/theora/TheoraVideoStream.cpp
	src/modules/video/theora/TheoraVideoStream.h
)
target_link_libraries(love_video_theora PUBLIC
	lovedep::Theora
	lovedep::Ogg
)

add_library(love_video INTERFACE)
target_link_libraries(love_video INTERFACE
	love_video_root
	love_video_theora
)

#
# love.window
#

add_library(love_window_root STATIC
	src/modules/window/Window.cpp
	src/modules/window/Window.h
	src/modules/window/wrap_Window.cpp
	src/modules/window/wrap_Window.h
)
target_link_libraries(love_window_root PUBLIC
	lovedep::Lua
	lovedep::SDL
)

add_library(love_window_sdl STATIC
	src/modules/window/sdl/Window.cpp
	src/modules/window/sdl/Window.h
)
target_link_libraries(love_window_sdl PUBLIC
	lovedep::SDL
)

add_library(love_window INTERFACE)
target_link_libraries(love_window INTERFACE
	love_window_root
	love_window_sdl
)

###################################
# Third-party libraries
###################################

#
# Box2D
#

add_library(love_3p_box2d
	src/libraries/box2d/Box2D.h
	src/libraries/box2d/collision/b2_broad_phase.cpp
	src/libraries/box2d/collision/b2_chain_shape.cpp
	src/libraries/box2d/collision/b2_circle_shape.cpp
	src/libraries/box2d/collision/b2_collide_circle.cpp
	src/libraries/box2d/collision/b2_collide_edge.cpp
	src/libraries/box2d/collision/b2_collide_polygon.cpp
	src/libraries/box2d/collision/b2_collision.cpp
	src/libraries/box2d/collision/b2_distance.cpp
	src/libraries/box2d/collision/b2_dynamic_tree.cpp
	src/libraries/box2d/collision/b2_edge_shape.cpp
	src/libraries/box2d/collision/b2_polygon_shape.cpp
	src/libraries/box2d/collision/b2_time_of_impact.cpp
	src/libraries/box2d/common/b2_block_allocator.cpp
	src/libraries/box2d/common/b2_draw.cpp
	src/libraries/box2d/common/b2_math.cpp
	src/libraries/box2d/common/b2_settings.cpp
	src/libraries/box2d/common/b2_stack_allocator.cpp
	src/libraries/box2d/common/b2_timer.cpp
	src/libraries/box2d/dynamics/b2_body.cpp
	src/libraries/box2d/dynamics/b2_chain_circle_contact.cpp
	src/libraries/box2d/dynamics/b2_chain_circle_contact.h
	src/libraries/box2d/dynamics/b2_chain_polygon_contact.cpp
	src/libraries/box2d/dynamics/b2_chain_polygon_contact.h
	src/libraries/box2d/dynamics/b2_circle_contact.cpp
	src/libraries/box2d/dynamics/b2_circle_contact.h
	src/libraries/box2d/dynamics/b2_contact.cpp
	src/libraries/box2d/dynamics/b2_contact_manager.cpp
	src/libraries/box2d/dynamics/b2_contact_solver.cpp
	src/libraries/box2d/dynamics/b2_contact_solver.h
	src/libraries/box2d/dynamics/b2_distance_joint.cpp
	src/libraries/box2d/dynamics/b2_edge_circle_contact.cpp
	src/libraries/box2d/dynamics/b2_edge_circle_contact.h
	src/libraries/box2d/dynamics/b2_edge_polygon_contact.cpp
	src/libraries/box2d/dynamics/b2_edge_polygon_contact.h
	src/libraries/box2d/dynamics/b2_fixture.cpp
	src/libraries/box2d/dynamics/b2_friction_joint.cpp
	src/libraries/box2d/dynamics/b2_gear_joint.cpp
	src/libraries/box2d/dynamics/b2_island.cpp
	src/libraries/box2d/dynamics/b2_island.h
	src/libraries/box2d/dynamics/b2_joint.cpp
	src/libraries/box2d/dynamics/b2_motor_joint.cpp
	src/libraries/box2d/dynamics/b2_mouse_joint.cpp
	src/libraries/box2d/dynamics/b2_polygon_circle_contact.cpp
	src/libraries/box2d/dynamics/b2_polygon_circle_contact.h
	src/libraries/box2d/dynamics/b2_polygon_contact.cpp
	src/libraries/box2d/dynamics/b2_polygon_contact.h
	src/libraries/box2d/dynamics/b2_prismatic_joint.cpp
	src/libraries/box2d/dynamics/b2_pulley_joint.cpp
	src/libraries/box2d/dynamics/b2_revolute_joint.cpp
	src/libraries/box2d/dynamics/b2_weld_joint.cpp
	src/libraries/box2d/dynamics/b2_wheel_joint.cpp
	src/libraries/box2d/dynamics/b2_world.cpp
	src/libraries/box2d/dynamics/b2_world_callbacks.cpp
	src/libraries/box2d/rope/b2_rope.cpp
)
love_disable_warnings(love_3p_box2d)

#
# ddsparse
#

add_library(love_3p_ddsparse
	src/libraries/ddsparse/ddsinfo.h
	src/libraries/ddsparse/ddsparse.cpp
	src/libraries/ddsparse/ddsparse.h
)

#
# dr_flac
#

# dr_flac has no implementation files of its own.
#add_library(love_3p_drflac
#	src/libraries/dr/dr_flac.h
#)

#
# dr_mp3
#

# dr_mp3 has no implementation files of its own.
#add_library(love_3p_drmp3
#	src/libraries/dr/dr_mp3.h
#)

#
# enet
#

add_library(love_3p_enet
	src/libraries/enet/enet.cpp
	src/libraries/enet/lua-enet.h
	src/libraries/enet/libenet/callbacks.c
	src/libraries/enet/libenet/compress.c
	src/libraries/enet/libenet/host.c
	src/libraries/enet/libenet/list.c
	src/libraries/enet/libenet/packet.c
	src/libraries/enet/libenet/peer.c
	src/libraries/enet/libenet/protocol.c
	src/libraries/enet/libenet/unix.c
	src/libraries/enet/libenet/win32.c
	src/libraries/enet/libenet/include/enet/enet.h
	src/libraries/enet/libenet/include/enet/list.h
	src/libraries/enet/libenet/include/enet/protocol.h
	src/libraries/enet/libenet/include/enet/time.h
	src/libraries/enet/libenet/include/enet/types.h
	src/libraries/enet/libenet/include/enet/unix.h
	src/libraries/enet/libenet/include/enet/utility.h
	src/libraries/enet/libenet/include/enet/win32.h
)
love_disable_warnings(love_3p_enet)
target_link_libraries(love_3p_enet lovedep::Lua)
target_include_directories(love_3p_enet PUBLIC src/libraries/enet/libenet/include)
if(MINGW)
	target_link_libraries(love_3p_enet winmm.a)
endif()

#
# GLAD
#

add_library(love_3p_glad
	src/libraries/glad/glad.cpp
	src/libraries/glad/glad.hpp
	src/libraries/glad/gladfuncs.hpp
)

#
# glslang
#

add_library(love_3p_glslang
	src/libraries/glslang/glslang/build_info.h
	src/libraries/glslang/glslang/GenericCodeGen/CodeGen.cpp
	src/libraries/glslang/glslang/GenericCodeGen/Link.cpp
	src/libraries/glslang/glslang/Include/arrays.h
	src/libraries/glslang/glslang/Include/BaseTypes.h
	src/libraries/glslang/glslang/Include/Common.h
	src/libraries/glslang/glslang/Include/ConstantUnion.h
	src/libraries/glslang/glslang/Include/InfoSink.h
	src/libraries/glslang/glslang/Include/InitializeGlobals.h
	src/libraries/glslang/glslang/Include/intermediate.h
	src/libraries/glslang/glslang/Include/PoolAlloc.h
	src/libraries/glslang/glslang/Include/ResourceLimits.h
	src/libraries/glslang/glslang/Include/ShHandle.h
	src/libraries/glslang/glslang/Include/SpirvIntrinsics.h
	src/libraries/glslang/glslang/Include/Types.h
	src/libraries/glslang/glslang/Include/visibility.h
	src/libraries/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp
	src/libraries/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp
	src/libraries/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp
	src/libraries/glslang/glslang/MachineIndependent/preprocessor/PpContext.h
	src/libraries/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp
	src/libraries/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp
	src/libraries/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h
	src/libraries/glslang/glslang/MachineIndependent/attribute.cpp
	src/libraries/glslang/glslang/MachineIndependent/attribute.h
	src/libraries/glslang/glslang/MachineIndependent/Constant.cpp
	src/libraries/glslang/glslang/MachineIndependent/gl_types.h
	src/libraries/glslang/glslang/MachineIndependent/glslang_tab.cpp
	src/libraries/glslang/glslang/MachineIndependent/glslang_tab.cpp.h
	src/libraries/glslang/glslang/MachineIndependent/InfoSink.cpp
	src/libraries/glslang/glslang/MachineIndependent/Initialize.cpp
	src/libraries/glslang/glslang/MachineIndependent/Initialize.h
	src/libraries/glslang/glslang/MachineIndependent/Intermediate.cpp
	src/libraries/glslang/glslang/MachineIndependent/intermOut.cpp
	src/libraries/glslang/glslang/MachineIndependent/IntermTraverse.cpp
	src/libraries/glslang/glslang/MachineIndependent/iomapper.cpp
	src/libraries/glslang/glslang/MachineIndependent/iomapper.h
	src/libraries/glslang/glslang/MachineIndependent/limits.cpp
	src/libraries/glslang/glslang/MachineIndependent/linkValidate.cpp
	src/libraries/glslang/glslang/MachineIndependent/LiveTraverser.h
	src/libraries/glslang/glslang/MachineIndependent/localintermediate.h
	src/libraries/glslang/glslang/MachineIndependent/parseConst.cpp
	src/libraries/glslang/glslang/MachineIndependent/ParseContextBase.cpp
	src/libraries/glslang/glslang/MachineIndependent/ParseHelper.cpp
	src/libraries/glslang/glslang/MachineIndependent/ParseHelper.h
	src/libraries/glslang/glslang/MachineIndependent/parseVersions.h
	src/libraries/glslang/glslang/MachineIndependent/pch.h
	src/libraries/glslang/glslang/MachineIndependent/PoolAlloc.cpp
	src/libraries/glslang/glslang/MachineIndependent/propagateNoContraction.cpp
	src/libraries/glslang/glslang/MachineIndependent/propagateNoContraction.h
	src/libraries/glslang/glslang/MachineIndependent/reflection.cpp
	src/libraries/glslang/glslang/MachineIndependent/reflection.h
	src/libraries/glslang/glslang/MachineIndependent/RemoveTree.cpp
	src/libraries/glslang/glslang/MachineIndependent/RemoveTree.h
	src/libraries/glslang/glslang/MachineIndependent/Scan.cpp
	src/libraries/glslang/glslang/MachineIndependent/Scan.h
	src/libraries/glslang/glslang/MachineIndependent/ScanContext.h
	src/libraries/glslang/glslang/MachineIndependent/ShaderLang.cpp
	src/libraries/glslang/glslang/MachineIndependent/span.h
	src/libraries/glslang/glslang/MachineIndependent/SpirvIntrinsics.cpp
	src/libraries/glslang/glslang/MachineIndependent/SymbolTable.cpp
	src/libraries/glslang/glslang/MachineIndependent/SymbolTable.h
	src/libraries/glslang/glslang/MachineIndependent/Versions.cpp
	src/libraries/glslang/glslang/MachineIndependent/Versions.h
	src/libraries/glslang/glslang/OSDependent/osinclude.h
	src/libraries/glslang/glslang/Public/ResourceLimits.h
	src/libraries/glslang/glslang/Public/ShaderLang.h
	src/libraries/glslang/glslang/ResourceLimits/ResourceLimits.cpp
	src/libraries/glslang/SPIRV/bitutils.h
	src/libraries/glslang/SPIRV/disassemble.cpp
	src/libraries/glslang/SPIRV/disassemble.h
	src/libraries/glslang/SPIRV/doc.cpp
	src/libraries/glslang/SPIRV/doc.h
	src/libraries/glslang/SPIRV/GLSL.ext.AMD.h
	src/libraries/glslang/SPIRV/GLSL.ext.ARM.h
	src/libraries/glslang/SPIRV/GLSL.ext.EXT.h
	src/libraries/glslang/SPIRV/GLSL.ext.KHR.h
	src/libraries/glslang/SPIRV/GLSL.ext.NV.h
	src/libraries/glslang/SPIRV/GLSL.ext.QCOM.h
	src/libraries/glslang/SPIRV/GLSL.std.450.h
	src/libraries/glslang/SPIRV/GlslangToSpv.cpp
	src/libraries/glslang/SPIRV/GlslangToSpv.h
	src/libraries/glslang/SPIRV/hex_float.h
	src/libraries/glslang/SPIRV/InReadableOrder.cpp
	src/libraries/glslang/SPIRV/Logger.cpp
	src/libraries/glslang/SPIRV/Logger.h
	src/libraries/glslang/SPIRV/NonSemanticDebugPrintf.h
	src/libraries/glslang/SPIRV/NonSemanticShaderDebugInfo100.h
	src/libraries/glslang/SPIRV/spirv.hpp11
	src/libraries/glslang/SPIRV/SpvBuilder.cpp
	src/libraries/glslang/SPIRV/SpvBuilder.h
	src/libraries/glslang/SPIRV/spvIR.h
	src/libraries/glslang/SPIRV/spvUtil.h
	src/libraries/glslang/SPIRV/SpvPostProcess.cpp
	src/libraries/glslang/SPIRV/SPVRemapper.cpp
	src/libraries/glslang/SPIRV/SPVRemapper.h
	src/libraries/glslang/SPIRV/SpvTools.cpp
	src/libraries/glslang/SPIRV/SpvTools.h
)

if(MSVC OR MINGW)
	target_sources(love_3p_glslang PRIVATE
		src/libraries/glslang/glslang/OSDependent/Windows/ossource.cpp
	)
else()
	target_sources(love_3p_glslang PRIVATE
		src/libraries/glslang/glslang/OSDependent/Unix/ossource.cpp
	)
endif()

#
# LodePNG
#

add_library(love_3p_lodepng
	src/libraries/lodepng/lodepng.cpp
	src/libraries/lodepng/lodepng.h
)

#
# luasocket
#

if(MINGW)
	set(WIN32_LIB_EXT .a)
else()
	set(WIN32_LIB_EXT .lib)
endif()

add_library(love_3p_luasocket
	src/libraries/luasocket/luasocket.cpp
	src/libraries/luasocket/luasocket.h
	src/libraries/luasocket/libluasocket/auxiliar.c
	src/libraries/luasocket/libluasocket/auxiliar.h
	src/libraries/luasocket/libluasocket/buffer.c
	src/libraries/luasocket/libluasocket/buffer.h
	src/libraries/luasocket/libluasocket/compat.c
	src/libraries/luasocket/libluasocket/compat.h
	src/libraries/luasocket/libluasocket/except.c
	src/libraries/luasocket/libluasocket/except.h
	src/libraries/luasocket/libluasocket/ftp.lua.h
	src/libraries/luasocket/libluasocket/headers.lua.h
	src/libraries/luasocket/libluasocket/http.lua.h
	src/libraries/luasocket/libluasocket/inet.c
	src/libraries/luasocket/libluasocket/inet.h
	src/libraries/luasocket/libluasocket/io.c
	src/libraries/luasocket/libluasocket/io.h
	src/libraries/luasocket/libluasocket/ltn12.lua.h
	src/libraries/luasocket/libluasocket/luasocket.c
	src/libraries/luasocket/libluasocket/luasocket.h
	src/libraries/luasocket/libluasocket/mbox.lua.h
	src/libraries/luasocket/libluasocket/mime.c
	src/libraries/luasocket/libluasocket/mime.h
	src/libraries/luasocket/libluasocket/mime.lua.h
	src/libraries/luasocket/libluasocket/options.c
	src/libraries/luasocket/libluasocket/options.h
	src/libraries/luasocket/libluasocket/pierror.h
	src/libraries/luasocket/libluasocket/select.c
	src/libraries/luasocket/libluasocket/select.h
	src/libraries/luasocket/libluasocket/smtp.lua.h
	src/libraries/luasocket/libluasocket/socket.h
	src/libraries/luasocket/libluasocket/socket.lua.h
	src/libraries/luasocket/libluasocket/tcp.c
	src/libraries/luasocket/libluasocket/tcp.h
	src/libraries/luasocket/libluasocket/timeout.c
	src/libraries/luasocket/libluasocket/timeout.h
	src/libraries/luasocket/libluasocket/tp.lua.h
	src/libraries/luasocket/libluasocket/udp.c
	src/libraries/luasocket/libluasocket/udp.h
	src/libraries/luasocket/libluasocket/url.lua.h
	src/libraries/luasocket/libluasocket/unix.c
	src/libraries/luasocket/libluasocket/unix.h
	src/libraries/luasocket/libluasocket/unixdgram.c
	src/libraries/luasocket/libluasocket/unixdgram.h
	src/libraries/luasocket/libluasocket/unixstream.c
	src/libraries/luasocket/libluasocket/unixstream.h
)
target_link_libraries(love_3p_luasocket lovedep::Lua)
love_disable_warnings(love_3p_luasocket)

if(MSVC OR MINGW)
	target_sources(love_3p_luasocket PRIVATE
		src/libraries/luasocket/libluasocket/wsocket.c
		src/libraries/luasocket/libluasocket/wsocket.h
	)

	target_link_libraries(love_3p_luasocket
		ws2_32${WIN32_LIB_EXT}
	)
else()
	target_sources(love_3p_luasocket PRIVATE
		src/libraries/luasocket/libluasocket/serial.c
		src/libraries/luasocket/libluasocket/usocket.c
		src/libraries/luasocket/libluasocket/usocket.h
	)
endif()

#
# APIs from Lua 5.3
#

add_library(love_3p_lua53
	src/libraries/lua53/lprefix.h
	src/libraries/lua53/lstrlib.c
	src/libraries/lua53/lstrlib.h
	src/libraries/lua53/lutf8lib.c
	src/libraries/lua53/lutf8lib.h
)
target_link_libraries(love_3p_lua53 lovedep::Lua)

#
# Lua HTTPS
#

add_library(love_3p_luahttps
	# These are platform-dependent but have ifdef guards to make sure they only
	# compile on supported platforms.
	src/libraries/luahttps/src/android/AndroidClient.cpp
	src/libraries/luahttps/src/android/AndroidClient.h
	src/libraries/luahttps/src/common/config.h
	src/libraries/luahttps/src/common/Connection.h
	src/libraries/luahttps/src/common/ConnectionClient.h
	src/libraries/luahttps/src/common/HTTPRequest.cpp
	src/libraries/luahttps/src/common/HTTPRequest.h
	src/libraries/luahttps/src/common/HTTPS.cpp
	src/libraries/luahttps/src/common/HTTPS.h
	src/libraries/luahttps/src/common/HTTPSClient.cpp
	src/libraries/luahttps/src/common/HTTPSClient.h
	src/libraries/luahttps/src/common/LibraryLoader.h
	src/libraries/luahttps/src/common/PlaintextConnection.cpp
	src/libraries/luahttps/src/common/PlaintextConnection.h
	src/libraries/luahttps/src/generic/CurlClient.cpp
	src/libraries/luahttps/src/generic/CurlClient.h
	src/libraries/luahttps/src/generic/LinktimeLibraryLoader.cpp
	src/libraries/luahttps/src/generic/OpenSSLConnection.cpp
	src/libraries/luahttps/src/generic/OpenSSLConnection.h
	src/libraries/luahttps/src/generic/UnixLibraryLoader.cpp
	src/libraries/luahttps/src/lua/main.cpp
	src/libraries/luahttps/src/windows/SChannelConnection.cpp
	src/libraries/luahttps/src/windows/SChannelConnection.h
	src/libraries/luahttps/src/windows/WindowsLibraryLoader.cpp
	src/libraries/luahttps/src/windows/WinINetClient.cpp
	src/libraries/luahttps/src/windows/WinINetClient.h
)
target_link_libraries(love_3p_luahttps lovedep::Lua)

if (APPLE)
	target_sources(love_3p_luahttps PRIVATE
		src/libraries/luahttps/src/apple/NSURLClient.mm
		src/libraries/luahttps/src/apple/NSURLClient.h
	)
	target_compile_options(love_3p_luahttps PRIVATE -fobjc-arc)
endif()

if(MSVC)
	target_link_libraries(love_3p_luahttps
		ws2_32
		secur32
	)

	if(NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
		target_link_libraries(love_3p_luahttps
			wininet
		)
	endif()
endif()

#
# lz4
#

add_library(love_3p_lz4
	src/libraries/lz4/lz4.c
	src/libraries/lz4/lz4.h
	src/libraries/lz4/lz4hc.c
	src/libraries/lz4/lz4hc.h
	src/libraries/lz4/lz4opt.h
)

#
# noise1234
#

add_library(love_3p_noise1234
	src/libraries/noise1234/noise1234.cpp
	src/libraries/noise1234/noise1234.h
	src/libraries/noise1234/simplexnoise1234.cpp
	src/libraries/noise1234/simplexnoise1234.h
)

#
# physfs
#

add_library(love_3p_physfs
	src/libraries/physfs/physfs_archiver_7z.c
	src/libraries/physfs/physfs_archiver_dir.c
	src/libraries/physfs/physfs_archiver_grp.c
	src/libraries/physfs/physfs_archiver_hog.c
	src/libraries/physfs/physfs_archiver_iso9660.c
	src/libraries/physfs/physfs_archiver_mvl.c
	src/libraries/physfs/physfs_archiver_qpak.c
	src/libraries/physfs/physfs_archiver_slb.c
	src/libraries/physfs/physfs_archiver_unpacked.c
	src/libraries/physfs/physfs_archiver_vdf.c
	src/libraries/physfs/physfs_archiver_wad.c
	src/libraries/physfs/physfs_archiver_zip.c
	src/libraries/physfs/physfs_byteorder.c
	src/libraries/physfs/physfs_casefolding.h
	src/libraries/physfs/physfs_internal.h
	src/libraries/physfs/physfs_lzmasdk.h
	src/libraries/physfs/physfs_miniz.h
	src/libraries/physfs/physfs_platform_android.c
	src/libraries/physfs/physfs_platform_haiku.cpp
	src/libraries/physfs/physfs_platform_os2.c
	src/libraries/physfs/physfs_platform_posix.c
	src/libraries/physfs/physfs_platform_qnx.c
	src/libraries/physfs/physfs_platform_unix.c
	src/libraries/physfs/physfs_platform_windows.c
	src/libraries/physfs/physfs_platform_winrt.cpp
	src/libraries/physfs/physfs_platforms.h
	src/libraries/physfs/physfs_unicode.c
	src/libraries/physfs/physfs.c
	src/libraries/physfs/physfs.h
)
love_disable_warnings(love_3p_physfs)

if(APPLE)
	target_sources(love_3p_physfs PRIVATE
		src/libraries/physfs/physfs_platform_apple.m
	)
	target_link_libraries(love_3p_physfs INTERFACE
		"-framework IOKit"
	)
endif()

#
# spirv_cross
#

add_library(love_3p_spirv_cross
	src/libraries/spirv_cross/GLSL.std.450.h
	src/libraries/spirv_cross/spirv_cfg.cpp
	src/libraries/spirv_cross/spirv_cfg.hpp
	src/libraries/spirv_cross/spirv_common.hpp
	src/libraries/spirv_cross/spirv_cpp.cpp
	src/libraries/spirv_cross/spirv_cpp.hpp
	src/libraries/spirv_cross/spirv_cross_containers.hpp
	src/libraries/spirv_cross/spirv_cross_error_handling.hpp
	src/libraries/spirv_cross/spirv_cross_parsed_ir.cpp
	src/libraries/spirv_cross/spirv_cross_parsed_ir.hpp
	src/libraries/spirv_cross/spirv_cross_util.cpp
	src/libraries/spirv_cross/spirv_cross_util.hpp
	src/libraries/spirv_cross/spirv_cross.cpp
	src/libraries/spirv_cross/spirv_cross.hpp
	src/libraries/spirv_cross/spirv_glsl.cpp
	src/libraries/spirv_cross/spirv_glsl.hpp
	src/libraries/spirv_cross/spirv_hlsl.cpp
	src/libraries/spirv_cross/spirv_hlsl.hpp
	src/libraries/spirv_cross/spirv_msl.cpp
	src/libraries/spirv_cross/spirv_msl.hpp
	src/libraries/spirv_cross/spirv_parser.cpp
	src/libraries/spirv_cross/spirv_parser.hpp
	src/libraries/spirv_cross/spirv_reflect.cpp
	src/libraries/spirv_cross/spirv_reflect.hpp
	src/libraries/spirv_cross/spirv.hpp
)

#
# stb_image
#

# stb_image has no implementation files of its own.
#add_library(love_3p_stb
#	src/libraries/stb/stb_image.h
#)

#
# tiny exr
#

# tinyexr has no implementation files of its own.
#add_library(love_3p_tinyexr
#	src/libraries/tinyexr/tinyexr.h
#)

#
# utf8
#

# This library is all headers ... so there is no need to
# add_library() here.
#add_library(love_3p_utf8
#	src/libraries/utf8/utf8.h
#	src/libraries/utf8/utf8/checked.h
#	src/libraries/utf8/utf8/core.h
#	src/libraries/utf8/utf8/unchecked.h
#)

#
# vma
#

# vulkan memory allocatory has no implementation files of its own.
#add_library(love_3p_vma
#	src/libraries/vma/vk_mem_alloc.h
#)

#
# volk
#

# since we don't want to use the system vulkan header files we need to 
# compile this library in the löve source code using VOLK_IMPLEMENTATION.
#add_library(love_3p_volk 
#	src/libraries/volk/volk.h
#	src/libraries/volk/volk.c)

#
# vulkan headers
#

# vulkan headers has no implementation files of its own.
#add_library(love_3p_vulkan_headers
#	src/libraries/vulkanheaders/vk_icd.h
#	src/libraries/vulkanheaders/vk_layer.h
#	src/libraries/vulkanheaders/vk_platform.h
#	src/libraries/vulkanheaders/vk_sdk-platform.h
#	src/libraries/vulkanheaders/vulkan_android.h
#	src/libraries/vulkanheaders/vulkan_beta.h
#	src/libraries/vulkanheaders/vulkan_core.h
#	src/libraries/vulkanheaders/vulkan_directfb.h
#	src/libraries/vulkanheaders/vulkan_enums.hpp
#	src/libraries/vulkanheaders/vulkan_format_traits.hpp
#	src/libraries/vulkanheaders/vulkan_fuchsia.h
#	src/libraries/vulkanheaders/vulkan_funcs.h
#	src/libraries/vulkanheaders/vulkan_ggp.h
#	src/libraries/vulkanheaders/vulkan_handles.h
#	src/libraries/vulkanheaders/vulkan_hash.hpp
#	src/libraries/vulkanheaders/vulkan_ios.h
#	src/libraries/vulkanheaders/vulkan_macos.h
#	src/libraries/vulkanheaders/vulkan_metal.h
#	src/libraries/vulkanheaders/vulkan_raii.hpp
#	src/libraries/vulkanheaders/vulkan_screen.h
#	src/libraries/vulkanheaders/vulkan_static_assertions.h
#	src/libraries/vulkanheaders/vulkan_structs.hpp
#	src/libraries/vulkanheaders/vulkan_to_string.h
#	src/libraries/vulkanheaders/vulkan_vi.h
#	src/libraries/vulkanheaders/vulkan_wayland.h
#	src/libraries/vulkanheaders/vulkan_win32.h
#	src/libraries/vulkanheaders/vulkan_xcb.h
#	src/libraries/vulkanheaders/vulkan_xlib_xrandr.h
#	src/libraries/vulkanheaders/vulkan_xlib.h
#	src/libraries/vulkanheaders/vulkan.h
#	src/libraries/vulkanheaders/vulkan.hpp
#)

#
# Wuff
#

add_library(love_3p_wuff
	src/libraries/Wuff/wuff.c
	src/libraries/Wuff/wuff.h
	src/libraries/Wuff/wuff_config.h
	src/libraries/Wuff/wuff_convert.c
	src/libraries/Wuff/wuff_convert.h
	src/libraries/Wuff/wuff_internal.c
	src/libraries/Wuff/wuff_internal.h
	src/libraries/Wuff/wuff_memory.c
)

#
# xxHash
#

add_library(love_3p_xxhash
	src/libraries/xxHash/xxhash.c
	src/libraries/xxHash/xxhash.h
)

#
# liblove
#
include_directories(
	BEFORE
	src
	src/libraries
	src/libraries/box2D
	src/modules
)

if(MINGW)
	# UTF-16 flags passed to windres. windres invokes gcc as preprocessor
	# -> gcc outputs utf8, so windres must read-in codepage 65001 (utf8)
	set(CMAKE_RC_FLAGS ${CMAKE_RC_FLAGS} "-c 65001 --preprocessor-arg=-finput-charset=UTF-16LE")
endif()

add_library(liblove SHARED
	src/modules/love/love.cpp
	src/modules/love/love.h
	# These are here so they show up in Visual Studio:
	src/modules/love/arg.lua
	src/modules/love/boot.lua
	src/modules/love/callbacks.lua
	src/modules/love/jitsetup.lua
	src/scripts/nogame.lua
)
set_target_properties(liblove PROPERTIES
	C_VISIBILITY_PRESET hidden
	CXX_VISIBILITY_PRESET hidden
	VISIBILITY_INLINES_HIDDEN ON
	LIBRARY_OUTPUT_NAME "${LOVE_LIB_NAME}")
set(LIBLOVE_DEPENDENCIES
	love_common
	love_audio
	love_data
	love_event
	love_filesystem
	love_font
	love_graphics
	love_image
	love_joystick
	love_keyboard
	love_math
	love_mouse
	love_physics
	love_sensor
	love_sound
	love_system
	love_thread
	love_timer
	love_touch
	love_video
	love_window
)
set(LIBLOVE_LIBRARIES
	love_3p_box2d
	love_3p_ddsparse
	love_3p_enet
	love_3p_glad
	love_3p_glslang
	love_3p_lodepng
	love_3p_luasocket
	love_3p_lua53
	love_3p_luahttps
	love_3p_lz4
	love_3p_noise1234
	love_3p_physfs
	love_3p_spirv_cross
	love_3p_wuff
	love_3p_xxhash
)
target_link_libraries(liblove ${LIBLOVE_DEPENDENCIES} ${LIBLOVE_LIBRARIES})

if(LOVE_EXTRA_DEPENDECIES)
	add_dependencies(liblove ${LOVE_EXTRA_DEPENDECIES})
endif()

#
# Group projects in Visual Studio
#

love_group_projects(NAME "liblove" NESTED TARGETS ${LIBLOVE_DEPENDENCIES})
love_group_projects(NAME "liblove/libraries" NESTED TARGETS ${LIBLOVE_LIBRARIES})
love_group_projects(NAME "liblove" TARGETS liblove ${LOVE_EXTRA_DEPENDECIES})

love_group_projects(NAME "lovedep" TARGETS lovedep::SDL lovedep::Freetype lovedep::Harfbuzz lovedep::OpenAL lovedep::Modplug lovedep::Theora lovedep::Vorbis lovedep::Ogg lovedep::Zlib lovedep::Lua)
love_group_projects(NAME "lovedep" TARGETS lua51 alcommon al-excommon harfbuzz-subset zlib)


if(MSVC)
	set_target_properties(liblove PROPERTIES RELEASE_OUTPUT_NAME "love" PDB_NAME "liblove" IMPORT_PREFIX "lib")
	set_target_properties(liblove PROPERTIES DEBUG_OUTPUT_NAME "love" PDB_NAME "liblove" IMPORT_PREFIX "lib")
endif()

if(MSVC OR MINGW)
	target_link_libraries(liblove
		ws2_32${WIN32_LIB_EXT}
		winmm${WIN32_LIB_EXT}
		dwmapi${WIN32_LIB_EXT}
	)

	target_sources(liblove PUBLIC
		extra/windows/love.rc
		extra/windows/love.ico
	)
endif()

#
# love (executable)
#
if(ANDROID)
	add_library(love SHARED) # On Android, the LOVE main entrypoint needs to be compiled as shared library
	target_link_libraries(liblove android)
else()
	add_executable(love WIN32)
endif()

target_sources(love PRIVATE src/love.cpp)
target_link_libraries(love liblove)
set_target_properties(love PROPERTIES
	C_VISIBILITY_PRESET hidden
	CXX_VISIBILITY_PRESET hidden
	VISIBILITY_INLINES_HIDDEN ON
	OUTPUT_NAME ${LOVE_EXE_NAME})

if(MSVC OR MINGW)
	add_executable(lovec src/love.cpp)
	target_link_libraries(lovec liblove)
	set_target_properties(lovec PROPERTIES
		OUTPUT_NAME ${LOVE_CONSOLE_EXE_NAME})
endif()

function(post_step_move_dll ARG_POST_TARGET ARG_TARGET_OR_FILE)
	if(TARGET ${ARG_TARGET_OR_FILE})
		add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
			COMMAND ${CMAKE_COMMAND} -E copy
			$<TARGET_FILE:${ARG_TARGET_OR_FILE}>
			${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/$<TARGET_FILE_NAME:${ARG_TARGET_OR_FILE}>)
	else()
		get_filename_component(TEMP_FILENAME ${ARG_TARGET_OR_FILE} NAME)
		add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
			COMMAND ${CMAKE_COMMAND} -E copy
			${ARG_TARGET_OR_FILE}
			${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${TEMP_FILENAME})
	endif()
endfunction()

# Add post build steps to move the DLLs next to the binary. Otherwise
# running/debugging the binary will not work from inside VS.
if(LOVE_MOVE_DLLS)
	foreach(DLL ${LOVE_MOVE_DLLS})
		post_step_move_dll(love ${DLL})
	endforeach()
endif()

if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
	###################################
	# CPack
	###################################
	install(TARGETS love lovec liblove RUNTIME DESTINATION .)
	install(PROGRAMS $<TARGET_FILE:${MEGA_SDL3}> DESTINATION .)

	# Our install script (and NSIS) doesn't fully support Windows ARM64 yet.
	if(MEGA_ARM64)
		set(CPACK_GENERATOR ZIP)
		set(CPACK_SYSTEM_NAME woa64)
	else()
		set(CPACK_GENERATOR ZIP NSIS)
	endif()

	# Extra DLLs.
	if(LOVE_EXTRA_DLLS)
		foreach(DLL ${LOVE_EXTRA_DLLS})
			get_filename_component(DLL_NAME ${DLL} NAME)
			message(STATUS "Extra DLL: ${DLL_NAME}")
		endforeach()
		install(FILES ${LOVE_EXTRA_DLLS} DESTINATION .)
	endif()

	# Dynamic runtime libs.
	if(LOVE_MSVC_DLLS)
		foreach(DLL ${LOVE_MSVC_DLLS})
			get_filename_component(DLL_NAME ${DLL} NAME)
			message(STATUS "Runtime DLL: ${DLL_NAME}")
		endforeach()
		install(FILES ${LOVE_MSVC_DLLS} DESTINATION .)
	endif()

	# Copy a text file from CMAKE_CURRENT_SOURCE_DIR to CMAKE_CURRENT_BINARY_DIR.
	# On Windows, this function will convert line endings to CR,LF.
	function(copy_text_file ARG_FILE_IN ARG_FILE_OUT)
		file(READ ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_FILE_IN} TMP_TXT_CONTENTS)
		file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${ARG_FILE_OUT} ${TMP_TXT_CONTENTS})
	endfunction()

	# Text files.
	copy_text_file(readme.md readme.txt)
	copy_text_file(license.txt license.txt)
	copy_text_file(changes.txt changes.txt)

	install(FILES
			${CMAKE_CURRENT_BINARY_DIR}/changes.txt
			${CMAKE_CURRENT_BINARY_DIR}/license.txt
			${CMAKE_CURRENT_BINARY_DIR}/readme.txt
			DESTINATION .)

	# Icons
	install(FILES
			${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis/love.ico
			${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis/game.ico
			DESTINATION .)

	set(CPACK_PACKAGE_NAME "love")
	set(CPACK_PACKAGE_VENDOR "love2d.org")
	set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LOVE -- It's awesome")
	set(CPACK_PACKAGE_VERSION "${LOVE_VERSION_STR}")
	set(CPACK_PACKAGE_VERSION_MAJOR "${LOVE_VERSION_MAJOR}")
	set(CPACK_PACKAGE_VERSION_MINOR "${LOVE_VERSION_MINOR}")
	set(CPACK_PACKAGE_VERSION_PATCH "${LOVE_VERSION_REV}")
	set(CPACK_PACKAGE_INSTALL_DIRECTORY "LOVE")
	set(CPACK_PACKAGE_EXECUTABLES "${LOVE_EXE_NAME};LOVE")
	set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/readme.md")
	set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/license.txt")

	set(CPACK_NSIS_EXECUTABLES_DIRECTORY .)
	set(CPACK_NSIS_PACKAGE_NAME "LOVE")
	set(CPACK_NSIS_DISPLAY_NAME "LOVE ${LOVE_VERSION_STR}")
	set(CPACK_NSIS_MODIFY_PATH ON)

	if(LOVE_X64)
		set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
	else()
		set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
	endif()

	set(CPACK_NSIS_MENU_LINKS "http://love2d.org/wiki" "Documentation")

	# Some bug somewhere in NSIS requires "\\\\" somewhere in the path,
	# according to The Internet. (And sure enough, it does not work
	# without it).
	set(NSIS_LEFT_BMP "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\left.bmp")
	set(NSIS_TOP_BMP "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\top.bmp")
	set(NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\love.ico")
	set(NSIS_MUI_UNICON "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\love.ico")

	set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "
		!define MUI_WELCOMEPAGE_TITLE \\\"LOVE ${LOVE_VERSION_STR} Setup\\\"
		!define MUI_WELCOMEFINISHPAGE_BITMAP \\\"${NSIS_LEFT_BMP}\\\"
		!define MUI_HEADERIMAGE_BITMAP \\\"${NSIS_TOP_BMP}\\\"
		!define MUI_ICON \\\"${NSIS_MUI_ICON}\\\"
		!define MUI_UNICON \\\"${NSIS_MUI_UNICON}\\\"
	")

	set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
		WriteRegStr HKCR \\\".love\\\" \\\"\\\" \\\"LOVE\\\"
		WriteRegStr HKCR \\\"LOVE\\\" \\\"\\\" \\\"LOVE Game File\\\"
		WriteRegStr HKCR \\\"LOVE\\\\DefaultIcon\\\" \\\"\\\" \\\"$INSTDIR\\\\game.ico\\\"
		WriteRegStr HKCR \\\"LOVE\\\\shell\\\" \\\"\\\" \\\"open\\\"
		WriteRegStr HKCR \\\"LOVE\\\\shell\\\\open\\\" \\\"\\\" \\\"Open in LOVE\\\"
		WriteRegStr HKCR \\\"LOVE\\\\shell\\\\open\\\\command\\\" \\\"\\\" \\\"$INSTDIR\\\\love.exe $\\\\\\\"%1$\\\\\\\"\\\"
		System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v  (0x08000000, 0, 0, 0)'
	")

	set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
		DeleteRegKey HKCR \\\"LOVE\\\"
		DeleteRegKey HKCR \\\".love\\\"
		System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v  (0x08000000, 0, 0, 0)'
	")

	include(CPack)
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
	include(GNUInstallDirs)

	string(TIMESTAMP LOVE_CONFIGURE_TIMESTAMP "%a, %d %b %Y %H:%M:%S +0000" UTC)

	file(COPY platform/unix/debian/ DESTINATION debian PATTERN "*.in" EXCLUDE)
	configure_file(platform/unix/debian/control.in debian/control @ONLY)
	configure_file(platform/unix/debian/changelog.in debian/changelog @ONLY)
	configure_file(platform/unix/debian/rules.in debian/rules @ONLY)

	configure_file(platform/unix/love.desktop.in love.desktop @ONLY)

	install(TARGETS love liblove)
	install(FILES platform/unix/love.6
			DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
			RENAME love.1)
	install(FILES ${CMAKE_CURRENT_BINARY_DIR}/love.desktop
			DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
	install(FILES platform/unix/love.xml
			DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mime/packages)
	install(FILES platform/unix/love.svg
			DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pixmaps)
	install(FILES platform/unix/application-x-love-game.svg
			DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/mimetypes)
endif()


================================================
FILE: changes.txt
================================================
LOVE 12.0 [N/A]
---------------

Released: N/A

* Added support for launching a specific .lua file as the main file.
* Added basic usage instructions printed to the console when '--help' is used as a command-line parameter, and when the no-game screen is run.
* Added love.parsedGameArguments and love.rawGameArguments tables, in the main thread.
* Added love.markDeprecated.
* Added HTTPS Lua module.
* Added love.event.restart(optionalvalue). A new love.restart field will contain the value after restarting.
* Added love.system.getPreferredLocales.
* Added love.localechanged callback.
* Added love.audiodisconnected callback.
* Added love.filesystem.mountFullPath and love.filesystem.unmountFullPath, including opt-in mount-for-write support.
* Added love.filesystem.mountCommonPath, unmountCommonPath, and getFullCommonPath.
* Added 'readonly' field to love.filesystem.getInfo's returned table.
* Added love.filesystem.openFile (replaces love.filesystem.newFile).
* Added an optional load mode parameter to love.filesystem.load whetever to only allow binary chunks, text chunks, or both.
* Added love.math.perlinNoise and love.math.simplexNoise (replaces love.math.noise).
* Added SoundData:copyFrom.
* Added SoundData:slice.
* Added optional stream type parameter to love.audio.newSource streaming sources ("file" or "memory"). It defaults to "file".
* Added love.audio.getPlaybackDevice, love.audio.getPlaybackDevices, and love.audio.setPlaybackDevice.
* Added love.keyboard.isModifierActive.
* Added Joystick:setPlayerIndex and Joystick:getPlayerIndex.
* Added Joystick:getJoystickType.
* Added Joystick:getGamepadType.
* Added Joystick:hasSensor.
* Added Joystick:isSensorEnabled and Joystick:setSensorEnabled.
* Added Joystick:getSensorData.
* Added Joystick:getPowerInfo which exposes infomation about batteries in a controller are and if they're charging.
* Added Joystick:getConnectionState which indicates if a joystick is connected wired or wireless.
* Added new Gamepad API buttons: "misc1", "paddle1", "paddle2", "paddle3", "paddle4". and "touchpad".
* Added World:getFixturesInArea().
* Added support for saving .exr image files via ImageData:encode.
* Added a Metal backend to love.graphics, available on macOS 10.15+ and iOS 13+.
* Added a Vulkan backend to love.graphics, available on Windows, Linux, and Android 7+.
* Added '--renderers a,b,c' and '--excluderenderers a,b,c' command line arguments.
* Added t.renderers and t.excluderenderers love.conf options.
* Added t.highdpi startup flag in love.conf, replacing t.window.highdpi and the highdpi flag of love.window.setMode.
* Added support for highdpi mode in Windows.
* Added per-shader opt in support for the GLSL 4.30 (desktop) and GLSL ES 3.20 (mobile) shading languages, via #pragma language glsl4.
* Added compile options table parameter to love.graphics.newShader. Allows setting #define values via newShader.
* Added love.graphics.newTexture. newImage and newCanvas still exist as convenience constructor functions.
* Added optional 'mipmapcount' field to the settings table in newTexture/newImage/newCanvas.
* Added optional 'computewrite' boolean field to the settings table in newTexture/newImage/newCanvas.
* Added love.graphics.getTextureFormats, which replaces getImageFormats and getCanvasFormats.
* Added Texture:isCanvas and Texture:isComputeWritable.
* Added Texture:isFormatLinear, Texture:getMSAA, Texture:generateMipmaps, Texture:replacePixels, and Texture:renderTo (moved from old Canvas and Image subclasses).
* Added integer pixel formats for Textures and ImageData.
* Added Graphics Buffer objects, including vertex, index, texel, shader storage, and indirect draw/dispatch argument buffers.
* Added love.graphics.copyBuffer, copyBufferToTexture, and copyTextureToBuffer.
* Added APIs for interacting with the Buffer objects owned by Meshes.
* Added Mesh:getAttachedAttributes.
* Added an optional start array index parameter to Mesh:attachAttribute.
* Added integer buffer data formats.
* Added love.graphics.readbackTexture and love.graphics.readbackTextureAsync (replaces Texture:newImageData).
* Added love.graphics.readbackBuffer and love.graphics.readbackBufferAsync.
* Added 'readback' buffer data usage enum, useful for advanced memory optimization when using love.graphics.readbackBuffer.
* Added new lower level 'vertexmain' and 'pixelmain' shader entry points.
* Added Compute Shader support via love.graphics.newComputeShader and a new 'computemain' shader entry point.
* Added love.graphics.dispatchThreadgroups and love.graphics.dispatchIndirect for running compute shaders.
* Added Shader:hasStage.
* Added love.graphics.drawFromShader.
* Added love.graphics.drawFromShaderIndirect.
* Added love.graphics.drawIndirect.
* Added love.graphics.getQuadIndexBuffer.
* Added variants of love.graphics.applyTransform and replaceTransform which accept x,y,angle,sx,sy,ox,oy parameters.
* Added APIs to override the default orthographic projection: love.graphics.setOrthoProjection, setPerspectiveProjection, and resetProjection.
* Added ability to set point size within a vertex shader by setting the 'love_PointSize' variable.
* Added love.graphics.setBlendState, which gives lower level control over blend operations than setBlendMode.
* Added high level love.graphics.setStencilMode and getStencilMode functions. Replaces love.graphics.stencil and setStencilTest.
* Added lower level love.graphics.setStencilState and getStencilState functions.
* Added a variant of love.graphics.setColorMask which accepts a single boolean.
* Added new 'clampone' wrap mode.
* Added 'clampone', 'texelbuffer', 'indexbuffer32bit', 'mipmaprange', and 'indirectdraw' graphics feature enums.
* Added 'copybuffer', 'copybuffertotexture', 'copytexturetobuffer', and 'copyrendertargettobuffer' graphics feature enums.
* Added initial support for right-to-left (RTL) text when using TrueType and OpenType fonts.
* Added a variant of Font:getWidth which takes a codepoint number argument.
* Added love.graphics.newTextBatch (renamed from love.graphics.newText).
* Added love.sensor module.
* Added love.sensorupdated callback.
* Added love.joysticksensorupdated callback.
* Added variant for enet peer:send and host:broadcast which accepts a pointer (light userdata) and a size.
* Added love.system.getMemorySize.

* Changed the default font from Vera size 12 to Noto Sans size 13.
* Changed TrueType and OpenType font handling to have improved kerning and character combining support.
* Changed the Texture class and implementation to no longer have separate Canvas and Image subclasses.
* Changed Images to no longer hold onto a CPU copy of their pixel data after creation.
* Changed love.graphics.newImage to error instead of loading a placeholder texture, when the image dimensions are too large for the system.
* Changed love.graphics.newImage to allow creating a mipmapped texture with less than the full mipmap range, instead of erroring.
* Changed love.graphics.newMesh to no longer default to the "fan" Mesh draw mode.
* Changed the behaviour of Meshes to no longer allow a vertex map or index buffer when the "fan" mesh draw mode is used.
* Changed love.window.setMode to no longer clear the contents of Canvases or otherwise recreate OpenGL resources.
* Changed love.graphics.points to require 'love_PointSize' to be set in the vertex shader, if a custom shader is used.
* Changed love.graphics.setCanvas to always clear auto-generated temporary depth and stencil buffers when they're used.
* Changed shader code parsing to ignore shader entry point functions inside comments.
* Changed audio file decoding to choose the most appropriate decoder based on file contents instead of the file extension.
* Changed Videos to stream audio from the file instead of loading all the video file into memory for use with audio decoding.
* Changed love.filesystem.exists to no longer be deprecated.
* Changed RevoluteJoint:getMotorTorque and WheelJoint:getMotorTorque to take 'dt' as a parameter instead of 'inverse_dt'.
* Changed love.math.perlinNoise and simplexNoise to use higher precision numbers for its internal calculations.
* Changed t.accelerometerjoystick startup flag in love.conf to unset by default.
* Changed love.data.hash to take in a container type.

* Renamed 'display' field to 'displayindex' in love.window.setMode/updateMode/getMode and love.conf.
* Renamed love.graphics Text objects to TextBatch.

* Updated Box2D from 2.3 to 2.4.1.
* Updated LuaSocket from 3.0-rc1 to 3.1.0.

* Deprecated usage of slashes instead of dots for module separators in require.
* Deprecated love.filesystem.newFile (replaced by openFile).
* Deprecated love.math.noise (replaced by perlinNoise and simplexNoise).
* Deprecated love.graphics.setNewFont (use love.graphics.newFont and love.graphics.setFont instead).
* Deprecated love.graphics.newText (renamed to love.graphics.newTextBatch).
* Deprecated love.graphics.getImageFormats and love.graphics.getCanvasFormats (replaced by getTextureFormats).
* Deprecated love.graphics.stencil (replaced by love.graphics.setStencilMode or love.graphics.setStencilState).
* Deprecated love.graphics.setStencilTest and love.graphics.getStencilTest (replaced by love.graphics.setStencilMode or setStencilState).
* Deprecated t.window.highdpi in love.conf and the highdpi flag of love.window.setMode (replaced by t.highdpi in love.conf).
* Deprecated t.accelerometerjoystick in love.conf (replaced by love.sensor module).
* Deprecated the variants of Mesh:attachAttribute and SpriteBatch:attachAttribute which accept a Mesh (replaced by variants which accept a Buffer).
* Deprecated Texture:newImageData (replaced by love.graphics.readbackTexture).
* Deprecated love.data.hash (replaced by function variant, which takes container type).

* Removed the variant of SpriteBatch:setColor() which turns off all previously set colors.
* Removed the no-argument variant of love.graphics.setColorMask.
* Removed functions deprecated in LOVE 11:
	* Removed love.audio.getSourceCount (renamed to love.audio.getActiveSourceCount).
	* Removed Source:getChannels (renamed to Source:getChannelCount).
	* Removed Decoder:getChannels (renamed to Decoder:getChannelCount).
	* Removed love.filesystem.isDirectory (replaced by love.filesystem.getInfo).
	* Removed love.filesystem.isFile (replaced by love.filesystem.getInfo).
	* Removed love.filesystem.isSymlink (replaced by love.filesystem.getInfo).
	* Removed love.filesystem.getLastModified (replaced by love.filesystem.getInfo).
	* Removed love.filesystem.getSize (replaced by love.filesystem.getInfo).
	* Removed ParticleSystem:setAreaSpread and ParticleSystem:getAreaSpread (renamed to ParticleSystem:setEmissionArea and getEmissionArea).
	* Removed love.math.compress and love.math.decompress (replaced by love.data.compress and love.data.decompress).
	* Removed World:getBodyList, World:getJointList, and World:getContactList (renamed to World:getBodies, World:getJoints, and World:getContacts).
	* Removed Body:getFixtureList, Body:getJointList, and Body:getContactList (renamed to Body:getFixtures, Body:getJoints, and Body:getContacts).
	* Removed PrismaticJoint:hasLimitsEnabled (renamed to PrismaticJoint:areLimitsEnabled).
	* Removed RevoluteJoint:hasLimitsEnabled (renamed to RevoluteJoint:areLimitsEnabled).

* Fixed BezierCurve:render adding collinear points in some situations.
* Fixed sound Decoders to cause a Lua error instead of hard-crashing when memory for the decoding buffer can't be allocated.
* Fixed enum misspelling for thousandsseparator from thsousandsseparator for both keyboard and scancode enums.

LOVE 11.5 [Mysterious Mysteries]
--------------------------------

Released: 2023-12-03

* Added "LÖVE Loader" launcher on Android for easier loading of .love files.

* Changed iOS game selector to alphabetically sort the list of .love files.
* Changed JIT compilation on macOS arm64 (Apple Silicon) to be off by default, since performance and available JIT memory isn't reliable.

* Fixed inconsistent and buggy behaviour of 'pairs' by updating LuaJIT.
* Fixed "unexpected alignment" errors when running love on some 32 bit Linux systems.
* Fixed running fused games on Windows when the executable has been code-signed.
* Fixed undefined behaviour in love.data.hash's implementation.
* Fixed writing files when a symlink exists in the save directory's path.
* Fixed love.threaderror not being called if the error message is an empty string.
* Fixed a race condition when a Thread is destroyed immediately after Thread:start.
* Fixed unexpectedly slow first frames on macOS.
* Fixed love.joystick.setGamepadMapping when replacing an existing mapping.
* Fixed love.joystick.getGamepadMappingString.
* Fixed duplicate platform fields in love.joystick.saveGamepadMappings.
* Fixed DistanceJoint type information.
* Fixed time drift in Source:tell after a Source loops.
* Fixed audio not always pausing when the app is minimized on Android.
* Fixed RecordingDevice:start to return false instead of hard-crashing on iOS.
* Fixed identical frames in Ogg Theora videos being skipped.
* Fixed love.font.newBMFontRasterizer's single file parameter variant.
* Fixed the original window size not always being restored when exiting fullscreen on Linux.
* Fixed some cases of framerate hitches in Windows when vsync is enabled in windowed mode.
* Fixed colors appearing over-saturated on P3 displays in macOS.
* Fixed textures looking washed out when gamma-correct rendering is used on some Android devices.
* Fixed images with mipmaps when ANGLE is used with an AMD GPU.
* Fixed line rendering when duplicate points are used in the line.
* Fixed line rendering with miter and bevel line join modes when antiparallel lines are formed.
* Fixed a crash when calling Text:add with an empty string parameter.

LOVE 11.4 [Mysterious Mysteries]
--------------------------------

Released: 2022-01-02

* Added native arm64 support on macOS.
* Added a variant of love.filesystem.newFileData which accepts a Data object.
* Added Body:getLocalPoints.
* Added Font:getKerning.
* Added support for r16, rg16, and rgba16 pixel formats in Canvases.
* Added Shader:send(name, matrixlayout, data, ...) variant, whose argument order is more consistent than Shader:send(name, data, matrixlayout, ...).

* Changed all builds and platforms where LOVE provides LuaJIT to use LuaJIT 2.1 instead of 2.0.
* Changed love.timer.getTime to start at 0 when the module is first loaded.
* Changed certain out-of-Lua-memory situations to show a message box instead of instantly crashing.
* Changed the naming scheme of LOVE's embedded Lua files for improved integration with Lua chunkname APIs.

* Fixed build-time compatibility with Lua 5.4.
* Fixed code compatibility with math.mod and string.gfind when LuaJIT 2.1 is used.
* Fixed errors on some systems related to > 53 bit pointer addresses, when recent versions of LuaJIT 2.1 are used.
* Fixed the default error handler showing a blank screen on some mobile devices.
* Fixed drag-and-drop to open a love game on macOS causing love.event.quit("restart") to fail.
* Fixed fused macOS apps opening other love games when drag-and-drop is used (if the fused app hasn't already removed .love files from recognized document types).
* Fixed File:isEOF when called on a dropped file.
* Fixed support for > 2GB dropped files on desktops.
* Fixed ByteData and DataView missing Data:clone implementations.
* Fixed love.physics meter scale value persisting after love.event.quit("restart").
* Fixed audio to resume properly after interruption on iOS.
* Fixed love.graphics.newVideo to error instead of crash when an invalid video file is given.
* Fixed initial window creation to set the window's title during creation instead of after.
* Fixed the window's screen position when exiting fullscreen via love.window.setFullscreen.
* Fixed love.displayrotated being given a boolean instead of an enum string.
* Fixed memory corruption and a crash when drawing smooth lines.
* Fixed a crash in Canvas:newImageData when the pixel format's pixel byte size multiplied by its width isn't a multiple of 4.
* Fixed love.graphics.newVolumeImage when explicit mipmaps are provided.
* Fixed freezes and crashes in automatic batching when an AMD GPU is used.
* Fixed love.graphics.print and Image:replacePixels on more AMD/ATI GPUs.
* Fixed Font:setFallbacks to account for different DPI scales in each fallback font.
* Fixed Font:getWrap to not remove trailing newlines.
* Fixed Text:getWidth when the Text's string only contains spaces.
* Fixed a crash with some Intel graphics drivers on Linux.
* Fixed a hang with some Intel graphics drivers on Windows, by preventing gamma correct rendering on affected systems.
* Fixed a crash with some Intel graphics drivers on Windows when mipmapped Canvases are used.
* Fixed texture memory reported by love.graphics.getStats when a volume or array Canvas is created.
* Fixed DXT1 textures which use 1 bit alpha-cutout.
* Fixed rare issues where textures were not sent to shaders correctly.
* Fixed Shader:send(name, data, matrixlayout, ...).
* Fixed quad offsets in ParticleSystems when ParticleSystem:setOffset is not used.
* Fixed a performance issue with setting a small subrange of data in non-stream Meshes and SpriteBatches.
* Fixed rounded rectangles breaking if the rx or ry parameters are negative.
* Fixed rounded rectangle automatic points calculation when rx or ry are more than half the rectangle's size.
* Fixed source code compilation on Xcode 12+.
* Fixed source code compilation on Linux systems that don't provide posix_spawn APIs.

LOVE 11.3 [Mysterious Mysteries]
--------------------------------

Released: 2019-10-27

* Added support for FLAC audio files.
* Added support for microphone recording on Android.
* Added t.audio.mic (false by default). On Android, setting it to true requests microphone recording permission from the user.
* Added Decoder:clone.
* Added Data:getFFIPointer.
* Added Joystick:getDeviceInfo.
* Added Joystick:getGamepadMappingString and love.joystick.getGamepadMappingString(guid).
* Added love.math.colorToBytes and love.math.colorFromBytes.
* Added 'usedpiscale' boolean (true by default) to love.window.setMode and love.conf. Disables automatic DPI scaling when false.
* Added love.window.getDisplayOrientation and a love.displayrotated callback.
* Added love.window.get/setVSync, to allow setting vsync without recreating the window.
* Added love.window.getSafeArea.
* Added an optional vertex count parameter to Mesh:setVertices.
* Added support for rgba4, rgb5a1, rgb565, rgb10a2, rg11b10f, r8, rg8, r16, rg16, r16f, rg16f, r32f, and rg32f formats in ImageData and Images.
* Added support for loading .dds files that contain uncompressed pixel data.

* Changed audio file type detection, so it probes all supported backends for unrecognized extensions.

* Fixed "bad lightuserdata" errors when running love on some arm64 devices.
* Fixed boot.lua's line numbers in stack traces to match its source code.
* Fixed the deprecation system not fully restarting when love.event.quit("restart") is used.
* Fixed love.isVersionCompatible.
* Fixed named Channels persisting across love.event.quit("restart") occurrences.
* Fixed race conditions when different love.physics Worlds are used in different threads.
* Fixed World:getJoints to return the fully resolved type of the Joint, instead of the base type.
* Fixed love.timer.sleep(0) to return control to the OS scheduler instead of being a no-op.
* Fixed love.math.randomNormal incorrectly using cached state after love.math.setRandomSeed or setRandomState.
* Fixed love.data.hash returning an incorrect hash for certain input sizes.
* Fixed love.data.newByteData to cause a Lua error instead of crashing when invalid arguments are used.
* Fixed the Data-returning variant of love.filesystem.read and File:read to return the number of bytes that were read.
* Fixed love.filesystem's require loaders to error instead of crashing when no argument is given.
* Fixed love.filesystem.mount(Data).
* Fixed a memory leak when loading files in some situations.
* Fixed t.audio.mixwithsystem.
* Fixed audio clicks immediately after playing a Source on iOS.
* Fixed Source:play + Source:stop + Source:play looping the first few ms of sound for streaming Sources on iOS.
* Fixed Source:play + Source:seek looping the first few ms of sound for streaming Sources on iOS.
* Fixed occasional pops in streaming sources on iOS.
* Fixed love.audio.play(sources) to use previously set playback positions on stopped Sources.
* Fixed Source:setEffect(name, true) and Source:getEffect(name) when the effect has no associated Filter.
* Fixed love.audio.newSource(filename, "queue") to cause a Lua error.
* Fixed Source:setPitch to error if the given pitch is <= 0, NaN, or infinity.
* Fixed video seeking and pausing in various scenarios.
* Fixed an audio Source memory leak when a Video gets garbage collected after playing it.
* Fixed video playback support on some Adreno-based Android devices.
* Fixed black fringes around text in some situations.
* Fixed extreme flickering when text moves along non-integer coordinates.
* Fixed the first character in a string sometimes not being processed during text vertex generation.
* Fixed Text:set(" ") not clearing any previously set text in a Text object.
* Fixed love.graphics.getTextureTypes to return a table with boolean values in its fields instead of number values.
* Fixed lines not rendering properly if a single line has more than 65,000 vertices.
* Fixed a pixel shader performance regression on some graphics drivers when OpenGL 3 or OpenGL ES 3 is used.
* Fixed text not showing up on Radeon HD 3000-series graphics cards on Windows.
* Fixed non-integer DPI scale values being truncated to integers in love.graphics.newCanvas.
* Fixed creating depth canvases on Windows systems when using an Intel HD 3000 GPU.
* Fixed automatic batching performance to be more consistent on all operating systems.
* Fixed gammaToLinearPrecise in shaders not being as precise as it should be.
* Fixed ImageData:paste and ImageData:setPixel to have more consistent clamping and rounding of color values when different formats are used.

LOVE 11.2 [Mysterious Mysteries]
--------------------------------

Released: 2018-11-25

* Added Source:setAirAbsorption and Source:getAirAbsorption.
* Added Body:setTransform and Body:getTransform.

* Improved performance of love.graphics.draw slightly on iOS and Android.

* Fixed filesystem initialization on Windows 10 update 1809.
* Fixed compatibility with Lua 5.2 and 5.3.
* Fixed the explicit format + Data argument variant of love.data.decompress.
* Fixed love.joystick.setGamepadMapping not being able to change existing mappings.
* Fixed a crash on quit on Linux if a custom cursor is active when quitting.
* Fixed a crash in the Data variant of Shader:send when it's called after love.window.setMode.
* Fixed a love.graphics.setCanvas error message to be less confusing.

LOVE 11.1 [Mysterious Mysteries]
--------------------------------

Released: 2018-04-15

* Fixed love.graphics.setCanvas failing randomly.
* Fixed love.graphics.clear(colortable) when no Canvas is active.
* Fixed stencil and depth support on older phones.
* Fixed love.event.quit causing crashes and other unexpected behaviour if a Canvas is active.
* Fixed Fixture:getShape crashing when returning a ChainShape.
* Fixed love.joystick.loadJoystickMappings outputting a deprecation warning about love.filesystem.isFile.
* Fixed Source:queue to show the correct argument name in the error message when an invalid data parameter is given.
* Fixed t.console=true causing an error on Windows if lovec.exe is used.

LOVE 11.0 [Mysterious Mysteries]
--------------------------------

Released: 2018-04-01

  * Added Object:release.
  * Added Data:clone.
  * Added queueable audio sources.
  * Added audio input support.
  * Added Source filters: low gain, high gain and band pass.
  * Added audio effect APIs (reverb, echo, etc.)
  * Added variants of SoundData:getSample/setSample which take a channel parameter.
  * Added variants of all table-with-fields-returning get* functions, the new variants take an existing table to fill in.
  * Added a variant to World:update, which accepts the number of iterations to run. The defaults are now 8 and 3.
  * Added Body:isTouching.
  * Added RopeJoint:setMaxLength.
  * Added a click count argument to love.mousepressed and love.mousereleased.
  * Added variants of love.filesystem.mount which accept a Data or FileData object containing zipped data.
  * Added love.filesystem.get/setCRequirePath, and use that to find c libraries for require.
  * Added variants of File:read and love.filesystem.read which take an enum to determine whether they return a FileData or a string.
  * Added love.data module. It includes hex/base64 encoding functions, MD5 and SHA hashing, string packing, compression APIs, and more.
  * Added Channel:hasRead, which checks if a message has been read. Takes an id, which Channel:push will now return.
  * Added variants of Channel:demand and Channel:supply which take a timeout argument.
  * Added Transform objects to love.math.
  * Added support for different ImageData formats, including RGBA8 (the default), RGBA16, RGBA16F, and RGBA32F.
  * Added the ability to load Radiance HDR, OpenEXR, and 16 bit PNG images.
  * Added love.graphics.getImageFormats (replaces love.graphics.getCompressedImageFormats).
  * Added the ability to specify a per-object pixel density scale factor when creating Images, Canvases, Fonts, and Videos. Affects drawing.
  * Added Texture:getPixelWidth/Height and love.graphics.getPixelWidth/Height.
  * Added Texture:getPixelDensity, love.graphics.getPixelDensity, and Font:getPixelDensity.
  * Added Texture:getMipmapCount, getFormat, getLayerCount, getDepth, and getTextureType.
  * Added Array, Cubemap, and Volume texture types and corresponding Image and Canvas APIs.
  * Added love.graphics.getTextureTypes, returns a table with fields indicating support for each texture type.
  * Added mipmapping support to Canvases, including both auto-generated mipmaps and manually rendering to a specific mipmap level.
  * Added 'stencil8', 'depth24stencil8', 'depth32fstencil8', 'depth16', 'depth24', and 'depth32f' pixel formats for Canvases.
  * Added variant of love.graphics.newCanvas which accepts a table of settings.
  * Added optional 'readable' boolean field to the table passed into love.graphics.newCanvas.
  * Added optional 'depthstencil' field to the table passed into love.graphics.setCanvas, for using a depth/stencil Canvas.
  * Added optional 'depth' and 'stencil' boolean fields to the table passed into setCanvas, for enabling depth and stencil buffers if 'depthstencil' isn't used.
  * Added shadow sampler support for Canvases.
  * Added love.graphics.setDepthMode for using the depth buffer for depth testing/writes. Depth values of rendered objects can only be set via shaders.
  * Added love.graphics.setMeshCullMode, for culling back- or front-facing triangles when drawing a Mesh.
  * Added love.graphics.setFrontFaceWinding.
  * Added variant of love.graphics.getCanvasFormats which takes a 'readable' boolean.
  * Added love.graphics.drawLayer and SpriteBatch:add/setLayer for easily drawing layers of Array Textures.
  * Added variants of love.graphics.print and printf which take a Font argument.
  * Added variants of love.graphics.clear to control how the active depth and stencil buffers are cleared.
  * Added love.graphics.applyTransform and love.graphics.replaceTransform.
  * Added love.graphics.transformPoint and love.graphics.inverseTransformPoint.
  * Added love.graphics.getStackDepth.
  * Added love.graphics.flushBatch for manually flushing automatically batched draws.
  * Added SpriteBatch:setDrawRange.
  * Added per-shader opt in support for the GLSL 3.30 and GLSL ES 3.00 shading languages.
  * Added 'void effect()' pixel shader entry point.
  * Added love.graphics.validateShader.
  * Added Shader:hasUniform.
  * Added support for non-square shader uniform matrices on desktop platforms and on mobile GLSL 3.
  * Added Shader:send(matrixname, is_column_major, matrix, ...) which specifies how to interpret the matrix table arguments.
  * Added Shader:send variants which accept a Data object.
  * Added 'borderellipse' and 'borderrectangle' ParticleSystem distributions.
  * Added variant of ParticleSystem:setEmissionArea which accepts an area angle and a flag for whether particle directions are relative to the center of the area.
  * Added ParticleSystem:set/getAreaSpreadAngle and set/getAreaSpreadIsRelativeDirection.
  * Added love.graphics.captureScreenshot (replaces love.graphics.newScreenshot).
  * Added 'glsl3', 'instancing', 'fullnpot','pixelshaderhighp', and 'shaderderivatives' graphics features.
  * Added 'anisotropy' graphics limit.
  * Added Mesh instancing support via love.graphics.drawInstanced and Mesh:attachAttribute.
  * Added a Mesh:attachAttribute variant that takes a different target attribute name.
  * Added Mesh:detachAttribute.
  * Added a variant of Mesh:setVertexMap which accepts a Data object.
  * Added love.window.updateMode.
  * Added love.window.isMinimized.
  * Added love.window.restore.
  * Added the ability to prevent love from creating a stencil buffer for the window.
  * Added cycle detection to Variant's table serialization, cycles now cause an error, rather than a stack overflow.
  * Added love.graphics.newShader File and FileData variants.
  * Added a default love.threaderror callback, which raises the error in the main thread.
  * Added checks for invalid constants passed to love.keyboard.isDown/isScancodeDown.
  * Added deprecation warnings, on by default for non-fused games.
  * Added love.filesystem.getInfo.
  * Added 'drawcallsbatched' to love.graphics.getStats.
  * Added support for header-less DEFLATE to love.data.compress/decompress.

  * Deprecated love.filesystem.exists / isFile / isDirectory / isSymlink / getLastModified / getSize (use getInfo instead).
  * Deprecated love.math.compress / decompress (use love.data.compress / decompress instead).

  * - All renamed APIs are formally deprecated rather than completely removed.
  * Renamed love.window.getPixelScale to love.window.getDPIScale.
  * Renamed love.mouse.hasCursor to love.mouse.isCursorSupported.
  * Renamed ParticleSystem:setAreaSpread to ParticleSystem:setEmissionArea.
  * Renamed love.errhand to love.errorhandler.
  * Renamed Source/SoundData/Decoder:getChannels to getChannelCount.
  * Renamed PrismaticJoint/RevoluteJoint:hasLimitsEnabled to areLimitsEnabled.
  * Renamed love.audio.getSourceCount to love.audio.getActiveSourceCount.
  * Renamed all get[Object]List functions to get[Object]s.

  * Removed the default source type for love.audio.newSource.
  * Removed variant of love.filesystem.newFileData which takes base64 data, use love.data.decode instead.
  * Removed the no-argument variant of Text:set, use Text:clear instead.
  * Removed love.graphics.getCompressedImageFormats, use love.graphics.getImageFormats instead.
  * Removed the 'void effects(...)' pixel shader entry point. Use the new 'void effect()' instead.
  * Removed Shader:getExternVariable, use Shader:hasUniform instead.
  * Removed love.graphics.newScreenshot, use love.graphics.captureScreenshot instead.
  * Removed deprecated enet function host:socket_get_address.
  * Removed functions deprecated in LÖVE 0.10.2:
    * Removed Shader:sendInt, Shader:sendBoolean, Shader:sentFloat, Shader:sendMatrix, and Shader:sendTexture (use Shader:send instead).
    * Removed love.window.isCreated (use love.window.isOpen instead).

  * Improved performance when drawing textures, shapes, lines, and points by automatically batching their draw calls together when possible.
  * Improved performance of Shader:send when the Shader is not active.
  * Improved performance of love.math.randomNormal when LuaJIT's JIT compiler is enabled.
  * Improved performance of love.filesystem.lines and File:lines, especially when reading from a file inside a zip/.love.

  * Changed all color values to be in the range 0-1, rather than 0-255.
  * Changed high-dpi functionality to require much less code (often none at all) for graphics to appear at the correct sizes and positions.
  * Changed love.graphics.print and friends to ignore carriage returns.
  * Changed the 'multiply' blend mode to error if not used with the 'premultiplied' blend alpha mode, since the formula only works with that anyway.
  * Changed some love.graphics, love.window, and love.event APIs to cause an error if a Canvas is active.
  * Changed stenciling functionality with a Canvas active to require stencil=true (or a custom stencil-formatted Canvas) to be set in setCanvas.
  * Changed Mesh:setDrawRange to take 'start' and 'count' parameters instead of 'min' and 'max'.
  * Changed the 'vsync' field of love.window.setMode and t.window in love.conf. It's now an integer with 0 disabling vsync.
  * Changed the audio playback APIs drastically.
  * Changed enet to no longer set the 'enet' global, again matching luasocket.
  * Changed Source seeking behaviour, all kinds of Sources now behave similarly when seeking past the boundaries.
  * Changed love.timer.step, it now returns dt.
  * Changed love.run and love.errhand to return a function for their main loop, which gets called until love quits.

  * Updated and improved command line argument handling.
  * Updated the boot sequence to show an error instead of the no-game screen, if a nonexistant folder is passed in as the source game directory.
  * Updated 'love.exe --version' on Windows to print to the parent console.
  * Updated Android print rerouting and JIT compilation disabling to apply inside threads.
  * Updated invalid enum value error messages to show a list of the valid enum values.
  * Updated Source:seek to work if the Source isn't playing.
  * Updated love.event.poll to stop allocating memory unnecessarily.
  * Updated love.math.random to have improved numeric distribution.
  * Updated love.graphics to support Core Profile OpenGL 3.3+ when available.
  * Updated shaders to always expose derivative functions (dFdx, dFdy, fwidth) when available in OpenGL ES.
  * Updated shaders to allow using VERTEX and PIXEL in shader code.
  * Updated love.graphics.circle/ellipse/arc/rectangle to take transformation scale into account when determining the number of segments to use.
  * Updated Font glyph generation to improve antialiasing.
  * Updated Canvas:newImageData to return an ImageData with a format that matches the Canvas' as closely as possible.
  * Updated love.graphics.newImage to treat file names ending with "@2x", "@3x", etc. as a pixel density scale factor if none is explicitly supplied.
  * Updated the error message when bad values are given to love.graphics.line.
  * Updated the maximum love.graphics transformation/state stack depth from 64 to 128.
  * Updated the default error handler to allow copying the error to the clipboard when the user decides to do so.
  * Updated love.filesystem.setRequirePath to support multiple template '?' characters in each path.
  * Updated luasocket to version 3.0rc1.
  * Updated love.joystick.loadGamepadMappings so it doesn't error when given an empty string.
  * Updated love.joystick.setGamepadMapping to use the controller's name for the new mapping when possible.

  * Fixed error in default error handler when the error message contains non UTF-8 bytes.
  * Fixed a memory leak when sending love objects to threads which never load that object's module.
  * Fixed a memory leak in enet when peer:send fails.
  * Fixed os.execute always returning -1 in Linux.
  * Fixed the default reference angle for WeldJoint, PrismaticJoint, and RevoluteJoint.
  * Fixed Fixture:getShape to reuse the existing internal Fixture-owned shape.
  * Fixed MouseJoint:setFrequency to error instead of crashing if a frequency of 0 is set.
  * Fixed love.system.set/getClipboardText to error instead of crashing, when a window hasn't been created.
  * Fixed Joystick:getGamepadMapping to work with xinput controllers.
  * Fixed love.joystick.setGamepadMapping's replacement code.
  * Fixed baseline calculation when rendering text.
  * Fixed VaryingTexCoords and love_ScreenSize in shaders to be 'highp' in OpenGL ES, when supported.
  * Fixed ParticleSystem:setParticleLifetime to error if a negative value is given.
  * Fixed Shader:send and Shader:sendColor ignoring the last argument for an array.
  * Fixed a crash when love.graphics.pop is called after a love.window.setMode while the transformation stack was not empty.
  * Fixed love.window.isMaximized.
  * Fixed video playback to work with a wider range of Ogg Theora files.
  * Fixed video seeking to be faster.
  * Fixed BezierCurves to error instead of hanging in some situations.
  * Fixed compilation of luasocket with newer luajit 2.1.0 beta versions.

LOVE 0.10.2 [Super Toast]
-------------------------

Released: 2016-10-31

  * Added lovec.exe in Windows. It is the same as love.exe but built with the Console subsystem, so it always uses or provides a console.
  * Added the ability to restart the game via love.event.quit("restart").
  * Added support for passing a table to love.mouse.isDown, love.keyboard.isDown, love.keyboard.isScancodeDown, Joystick:isDown, and Joystick:isGamepadDown.
  * Added love.window.isMaximized.
  * Added 'shaderswitches' field to the table returned by love.graphics.getStats.
  * Added Quad:getTextureDimensions.
  * Added 'ellipse' area distribution to ParticleSystems.
  * Added support for BC4-7 compressed texture formats in KTX files.
  * Added PrismaticJoint:getAxis and WheelJoint:getAxis.
  * Added 2-point version of love.physics.newRevoluteJoint.
  * Added table variants of Fixture:setCategory and Fixture:setMask.
  * Added getNextVertex and getPreviousVertex to ChainShape and EdgeShape.
  * Added optional reference angle arguments to RevoluteJoint, PrismaticJoint, and WeldJoint constructors.
  * Added RevoluteJoint:getReferenceAngle, PrismaticJoint:getReferenceAngle, and WeldJoint:getReferenceAngle.

  * Deprecated undocumented Shader:sendTexture, Shader:sendMatrix, Shader:sendInt, and Shader:sendFloat functions.

  * Fixed love on iOS 6.
  * Fixed os.execute always returning -1 on Linux.
  * Fixed the love.lowmemory callback to call collectgarbage() after the callback has fired, instead of before.
  * Fixed love.math.noise(nil) to error instead of returning nil.
  * Fixed an occasional crash when a Thread ends.
  * Fixed a hang at the end of video playback with some video files.
  * Fixed the video decoding thread to not do any work when there are no videos to decode.
  * Fixed love.graphics.newVideo(file) to no longer error if love.audio is disabled.
  * Fixed a rare bug in Source:play for streaming Sources if the associated OpenAL source object was previously used for a static Source.
  * Fixed corrupted Font glyphs in rare cases.
  * Fixed stencils inside Canvases on some OpenGL ES 2 devices.
  * Fixed an OpenGL error in OpenGL ES 3 when multiple render targets are used.
  * Fixed love.window.setMode crashing when called with a Canvas active.
  * Fixed love.window.maximize to update the reported window dimensions immediately.
  * Fixed gamma correction of ImageFonts and BMFonts with colored images.
  * Fixed the default shader improperly applying gamma correction to per-vertex colors when gamma correction is requested but not supported on OpenGL ES.
  * Fixed text coloring breaking because of an empty string.
  * Fixed large burst of particles when dramatically increasing the emission rate of a ParticleSystem.
  * Fixed SpriteBatch:setBufferSize to keep old sprite data if it can fit.
  * Fixed MouseJoint:getBodies unconditionally erroring.
  * Fixed memory leak in Text:set.
  * Fixed incorrect kerning caused by using kerning information for the wrong character in some fonts.
  * Fixed ImageData:setPixel/getPixel/mapPixel and SoundData:setSample/getSample to properly handle non-integer coordinates.

  * Improved performance of Channel methods by roughly 2x in many cases.
  * Improved performance of Shader:send when small numbers of arguments are given.

  * Updated love.filesystem.mount to accept a DroppedFile as the first parameter.
  * Updated Shader:send to do type and argument checking based on the specified uniform variable's information instead of the arguments to the function.
  * Updated Shader:send to accept a flat table for matrix uniforms.


LOVE 0.10.1 [Super Toast]
-------------------------

Released: 2016-02-14

  * Added a new love.conf flag t.externalstorage, which determines whether files are saved in internal or external storage on Android devices.
  * Added a new variant of love.graphics.arc which can draw different types of arcs ("pie", "open", or "closed").
  * Added "lighten" and "darken" BlendModes. They can only be used with the "premultiplied" BlendAlphaMode.
  * Added the "lighten" GraphicsFeature constant.
  * Added the ability to avoid clearing specific Canvases when calling love.graphics.clear, if multiple Canvases are active at once via love.graphics.setCanvas.
  * Added Text:getDimensions.
  * Added optional "collideconnected" argument to love.physics.newMotorJoint.

  * Fixed a Lua error in the no-game screen if the window's height is too small.
  * Fixed the default error handler to reset the mouse Cursor.
  * Fixed love.filesystem functions crashing when called if liblove is used directly without calling love.filesystem.init.
  * Fixed audio on Android to pause when the app is inactive, and resume when the app becomes active again.
  * Fixed the Video decoding thread hanging after Video:seek or when a Video finishes.
  * Fixed Video:isPlaying to always return false after it finishes playing.
  * Fixed RandomGenerator:random crashing if a nil 'self' is used.
  * Fixed loading BMFont files which have characters with 0 width or height (a space character, for example).
  * Fixed love.graphics.newFont causing crashes if FileData is passed in.
  * Fixed love.graphics.clear(colortable) causing crashes on OpenGL ES 2 systems when a Canvas is active.
  * Fixed a driver bug on some Android devices which caused all objects to show up as black.
  * Fixed a driver bug on Windows with AMD graphics cards where love.graphics.clear would not always work.
  * Fixed Shader:sendColor incorrectly converting alpha values from sRGB to linear RGB when gamma-correct rendering is enabled.
  * Fixed love.graphics.newMesh(vertices) double-converting colors from sRGB to linear RGB when gamma-correct rendering is enabled.
  * Fixed love.graphics.new* crashing when there is no graphics context/window.

  * Updated the Windows executable to prefer the high-powered AMD graphics card on systems which have switchable Intel+AMD GPUs.
  * Updated love.touch.getTouches to return the list of IDs in the relative order that the touches initially happened, instead of being in a random order.
  * Updated the error messages caused by invalid or bad arguments to ImageData and SoundData methods to be more descriptive.


LOVE 0.10.0 [Super Toast]
-------------------------

Released: 2015-12-22

  * Added an iOS port.
  * Added an Android port.
  * Added the flag t.accelerometerjoystick to love.conf. Disables accelerometer-as-joystick functionality on mobile devices when false.
  * Added the flag t.gammacorrect to love.conf (replaces t.window.srgb.) Enabling it globally enables gamma-correct rendering, when supported.
  * Added video playback support for Ogg Theora videos, via love.graphics.newVideo and Video objects.
  * Added love.video module. It is not used for displaying videos on-screen, only decoding them.
  * Added love.touch module. Note that it has important differences from the touch implementation in the LÖVE 0.9 Android and iOS ports.
  * Added love.touchpressed, love.touchreleased, and love.touchmoved.
  * Added love.system.vibrate.
  * Added love.filesystem.setRequirePath and love.filesystem.getRequirePath.
  * Added an optional program exit argument to love.event.quit.
  * Added love.filedropped and love.directorydropped event callback functions.
  * Added love.lowmemory event callback function, called when the app is running out of memory on mobile operating systems.
  * Added love.textedited event callback function, called when the user is compositing text (e.g. via an IME.)
  * Added love.wheelmoved event callback function (replaces "wu" and "wd" constants for love.mousepressed.)
  * Added love.mouse.hasCursor.
  * Added a boolean argument to love.mousepressed and love.mousereleased indicating whether the button event originated from a touch press.
  * Added optional x/y/width/height arguments to love.keyboard.setTextInput. They tell the system where text will show up so on-screen keyboards can avoid that area.
  * Added Source:getType (replaces Source:isStatic.)
  * Added Source:getDuration and Decoder:getDuration.
  * Added an optional string argument containing raw pixel byte data to the width/height variant of love.image.newImageData.
  * Added love.graphics.ellipse.
  * Added rounded-rectangle support to love.graphics.rectangle.
  * Added love.graphics.points (replaces love.graphics.point.)
  * Added love.graphics.intersectScissor.
  * Added an optional argument to love.graphics.setBlendMode which indicates whether to treat the colors of drawn objects as having pre-multiplied alpha.
  * Added love.graphics.getSupported (replaces love.graphics.isSupported.)
  * Added love.graphics.getSystemLimits (replaces love.graphics.getSystemLimit.)
  * Added love.graphics.stencil and love.graphics.set/getStencilTest (replaces love.graphics.setStencil.)
  * Added love.graphics.isActive.
  * Added color arguments to love.graphics.clear. It no longer always uses the background color value.
  * Added love.graphics.discard.
  * Added love.graphics.isGammaCorrect.
  * Added the "clampzero" WrapMode.
  * Added the ability to specify custom mipmaps when creating an image, via love.graphics.newImage(filename, {mipmaps={mip1, mip2, ...}})
  * Added optional x/y/width/height arguments to Image:refresh and Canvas:newImageData.
  * Added Image:getFlags.
  * Added one- and two-channel Canvas formats: r8, rg8, r16f, rg16f, r32f, and rg32f.
  * Added support for different formats in each Canvas when using multi-canvas rendering. Added the "multicanvasformats" Graphics Feature constant.
  * Added support for OpenGL ES 2 and 3.
  * Added support for loading ETC, EAC, PVRTC, and ASTC compressed textures on systems that support them.
  * Added custom vertex attribute support for Meshes via new variants of love.graphics.newMesh.
  * Added Mesh:setVertexAttribute and Mesh:getVertexAttribute.
  * Added Mesh:getVertexFormat.
  * Added Mesh:flush.
  * Added an optional 'startvertex' argument to Mesh:setVertices.
  * Added the ability for love.graphics.newMesh and Mesh:setVertices to accept a Data object.
  * Added Mesh:setAttributeEnabled and Mesh:isAttributeEnabled.
  * Added Mesh:attachAttribute.
  * Added SpriteBatch:attachAttribute.
  * Added Shader:sendColor.
  * Added new shader functions: gammaCorrectColor, gammaToLinear, and linearToGamma. The functions also have 'precise' and 'fast' variants.
  * Added Text objects and love.graphics.newText.
  * Added per-character color support to love.graphics.print/printf and to Text objects.
  * Added BMFont bitmap font file support to love.graphics.newFont and love.font.
  * Added kerning support for TrueType/OpenType and BMFont Fonts.
  * Added an optional font hinting argument to love.graphics.newFont when loading TrueType fonts.
  * Added an optional spacing argument to love.graphics.newImageFont, which applies additional spacing to all rendered glyphs.
  * Added Font:setFallbacks.
  * Added love.window.maximize.
  * Added love.window.close.
  * Added love.window.requestAttention.
  * Added love.window.setDisplaySleepEnabled and love.window.isDisplaySleepEnabled.
  * Added BezierCurve:renderSegment and BezierCurve:removeControlPoint.
  * Added BezierCurve:getSegment.
  * Added love.math.compress and love.math.decompress.
  * Added Channel:performAtomic.

  * Changed love.mousepressed, love.mousereleased, and love.mouse.isDown to use button numbers instead of named button constants.
  * Changed love.keypressed to be love.keypressed(key, scancode, isrepeat).
  * Changed love.keyreleased to be love.keyreleased(key, scancode).
  * Changed Font:getWrap's second return value to be a table containing the text split into lines.
  * Changed love.graphics.newImage's optional second argument to be a table of flags (flags are "mipmaps" and "linear".)
  * Changed the arguments for the standard variants of love.graphics.newMesh to newMesh(vertices [, drawmode, usage]) and newMesh(vertexcount [, drawmode, usage]).
  * Changed ImageData:encode to return a FileData object. ImageData:encode's first parameter is now the format to encode to, and the second parameter is an optional filename to write to.

  * Renamed the "normal" Fullscreen Type to "exclusive".
  * Renamed the DistanceModel constants "inverse clamped", "linear clamped", and "exponent clamped" to "inverseclamped", "linearclamped", and "exponentclamped".
  * Renamed the "additive", "subtractive", and "multiplicative" BlendModes to "add", "subtract", and "multiply".
  * Renamed the KeyConstant and Scancode representing the spacebar from " " to "space".
  * Renamed File:eof to File:isEOF.
  * Renamed Canvas:getImageData to Canvas:newImageData.
  * Renamed love.image's CompressedData type to CompressedImageData.

  * Removed callback variant of love.filesystem.getDirectoryItems.
  * Removed the "wu" and "wd" constants for love.mousepressed (replaced by love.wheelmoved.)
  * Removed the named mouse button constants (replaced by button numbers.)
  * Removed Source:isStatic (replaced by Source:getType.)
  * Removed image loading support for all (non-compressed texture) file formats except for PNG, JPEG, TGA, and BMP.
  * Removed JPEG encoding support from ImageData:encode.
  * Removed love.graphics.point (replaced by love.graphics.points.)
  * Removed love.graphics.setPointStyle and love.graphics.getPointStyle.
  * Removed love.graphics.isSupported (replaced by love.graphics.getSupported.)
  * Removed love.graphics.getSystemLimit (replaced by love.graphics.getSystemLimits.)
  * Removed love.graphics.setStencil (replaced by love.graphics.stencil and love.graphics.setStencilTest.)
  * Removed the "canvas", "shader", "npot", "subtractive", and "mipmap" Graphics Feature constants (the features always have guaranteed support now.)
  * Removed the "multicanvas" Graphics Feature constant (use love.graphics.getSystemLimits instead.)
  * Removed the "srgb" Graphics Feature constant (use love.graphics.isGammaCorrect() or love.graphics.getCanvasFormats().srgb instead.)
  * Removed the "srgb" flag in love.window.setMode and in the t.window table in love.conf (Replaced by t.gammacorrect.)
  * Removed the "premultiplied" blend mode (love.graphics.setBlendMode("alpha", "premultiplied") now does the same thing.)
  * Removed Canvas:getPixel (use Canvas:newImageData instead.)
  * Removed Canvas:clear (use love.graphics.clear instead.)
  * Removed Mesh:getVertices.
  * Removed Mesh:setVertexColors and Mesh:hasVertexColors (use Mesh:setAttributeEnabled("VertexColor", enable) instead.)
  * Removed functions deprecated in LOVE 0.9.1 and 0.9.2:
    * Removed love.graphics.getMaxImageSize and love.graphics.getMaxPointSize (replaced by love.graphics.getSystemLimits.)
    * Removed Mesh:set/getImage, SpriteBatch:set/getImage, and ParticleSystem:set/getImage (replaced by set/getTexture.)
    * Removed SpriteBatch:bind/unbind.
    * Removed Canvas:getFSAA and the "fsaa" flag in love.conf and love.window.setMode (replaced by Canvas:getMSAA and "msaa".)
    * Removed the "dxt" and "bc5" Graphics Feature constant (replaced by love.graphics.getCompressedImageFormats.)
    * Removed the "hdrcanvas" Graphics Feature constant (replaced by love.graphics.getCanvasFormats.)
    * Removed love.window.getWidth/getHeight/getDimensions (use love.graphics.getWidth/getHeight/getDimensions or love.window.getMode instead.)

  * Fixed utf8.char.
  * Fixed detection of fused love games.
  * Fixed World:getCallbacks and World:getContactFilter when used in coroutines.
  * Fixed crashes when objects which store Lua callback functions are garbage collected after being used in coroutines.
  * Fixed memory leaks in love.physics if World:destroy is never called. When a World is GCed it now destroys all objects it owns.
  * Fixed love.keyboard.getKeyFromScancode crashing when an invalid scancode is given.
  * Fixed decoding of 8-bit WAV files.
  * Fixed a crash issue when rewinding streaming ogg Sources, when certain versions of libvorbis are used.
  * Fixed love.audio.stop() not rewinding streaming Sources.
  * Fixed the stencil buffer in Canvases when an unsupported MSAA value is used to create the Canvas.
  * Fixed Canvas:renderTo to restore the previous Canvas if an error occurs in the passed function.
  * Fixed love.graphics.draw(canvas) to cause an error if that Canvas is the active one.
  * Fixed Mesh:getVertexMap to return nil rather than an empty table, if no vertex map has been set.
  * Fixed love.graphics.getColorMask.
  * Fixed the default offset for particles when ParticleSystem:setQuads or ParticleSystem:setTexture is used.
  * Fixed love.graphics.shear resetting all love.graphics transformations.
  * Fixed the "add" and "subtract" blend modes to no longer modify the alpha of the Canvas / screen.

  * Improved the performance of World:rayCast and World:queryBoundingBox.
  * Improved the performance of love.graphics.line and other line drawing functions, when the "smooth" LineStyle is used.
  * Improved the performance of Shader:send when matrices are used.
  * Improved the performance of ImageData and SoundData methods when LuaJIT's JIT compiler is enabled, by using efficient FFI code.
  * Improved the performance of love.math.noise, love.math.gammaToLinear, love.math.linearToGamma, love.math.random, and RandomGenerator:random when LuaJIT's JIT compiler is enabled.

  * Updated the compatibility warning notice to use a message box and to show the version specified in love.conf.
  * Updated the compatibility warning notice to display before main.lua is loaded.
  * Updated the __tostring metamethod of love objects to output the pointer value, similar to tostring(table).
  * Updated World:setCallbacks, World:setContactFilter, World:queryBoundingBox, and World:rayCast to have improved argument type checking.
  * Updated threads to load love.filesystem automatically.
  * Updated love.filesystem to enable symlinks by default.
  * Updated love.math.setRandomSeed and RandomGenerator:setSeed to produce better results for the first few random() calls.
  * Updated love.math.random and RandomGenerator:random to produce slightly better results in general.
  * Updated Source methods that deal with spatial audio to error rather than failing silently if the Source isn't mono.
  * Updated the 3D and 4D variants of love.math.noise to use Perlin noise rather than Simplex noise, to avoid patent issues.
  * Updated ImageFonts to no longer treat separator pixels as spacing.
  * Updated the default font to use less memory.
  * Updated the behavior of text wrapping with love.graphics.printf and Font:getWrap to work better.
  * Updated love.graphics.print and love.graphics.printf to no longer automatically round the x and y position arguments.
  * Updated some error messages for love.graphics.newImage to be more descriptive.
  * Updated love.graphics color functions to automatically apply love.math.gammaToLinear to color values when gamma-correct rendering is enabled.
  * Updated the 'normal' Canvas format to internally use 'srgb' rather than 'rgba8' when gamma-correct rendering is enabled.
  * Updated love.graphics.setColor to affect all drawn objects, including ParticleSystems, SpriteBatches, and Meshes.
  * Updated the default fullscreen type to be "desktop" rather than "exclusive".
  * Updated the minimum runtime system requirements of LOVE to require OpenGL 2.1 or OpenGL ES 2 support.
  * Updated the pixel shader effect function so screen_coords.y is 0 at the top of the screen instead of the bottom.
  * Updated Images to require setting the mipmaps flag to true on creation in order to use mipmaps.
  * Updated Images to allow mipmaps for non-power-of-two sizes.

LOVE 0.9.2 [Baby Inspector]
---------------------------

  Released: 2015-02-14

  * Added Lua 5.3's UTF-8 module (via utf8 = require("utf8")).
  * Added Shader:getExternVariable.
  * Added several new canvas texture formats.
  * Added love.graphics.getCanvasFormats.
  * Added love.graphics.getCompressedImageFormats.
  * Added ParticleSystem:setQuads.
  * Added ParticleSystem:setLinearDamping.
  * Added SpriteBatch:flush.
  * Added love.graphics.getStats.
  * Added "mirroredrepeat" wrap mode.
  * Added love.audio.setDopplerScale and love.audio.getDopplerScale.
  * Added optional duration argument to Joystick:setVibration.
  * Added love.joystick.loadGamepadMappings and love.joystick.saveGamepadMappings.
  * Added Joint:setUserData and Joint:getUserData.
  * Added Joint:getBodies.
  * Added GearJoint:getJoints.
  * Added Contact:getFixtures and Body:getContactList.
  * Added Body:getWorld.
  * Added Body:getJointList.
  * Added Body/Contact/Fixture/Joint/World:isDestroyed.
  * Added love.mousemoved event callback.
  * Added love.mouse.setRelativeMode and love.mouse.getRelativeMode.
  * Added Scancode enums, love.keyboard.getKeyFromScancode, and love.keyboard.getScancodeFromKey.
  * Added love.window.getDisplayName.
  * Added love.window.minimize.
  * Added love.window.showMessageBox.
  * Added 'refreshrate' field to the table returned by love.window.getMode.
  * Added love.window.toPixels and love.window.fromPixels.
  * Added love.window.setPosition and love.window.getPosition, and 'x' and 'y' fields to love.window.setMode and t.window in love.conf.
  * Added love.filesystem.isSymlink, love.filesystem.setSymlinksEnabled, and love.filesystem.areSymlinksEnabled.
  * Added love.filesystem.getRealDirectory.

  * Deprecated SpriteBatch:bind and SpriteBatch:unbind.
  * Deprecated all uses of the name 'FSAA' in favor of 'MSAA'.
  * Deprecated the 'hdrcanvas' graphics feature enum in favor of getCanvasFormats.
  * Deprecated the 'dxt' and 'bc5' graphics feature enums in favor of getCompressedImageFormats.

  * Fixed crashes when love objects are used in multiple threads.
  * Fixed love.filesystem.setIdentity breaking in some situations when called multiple times.
  * Fixed the default love.filesystem identity when in Fused mode in Windows.
  * Fixed love.system.openURL sometimes blocking indefinitely on Linux.
  * Fixed love.joystick.setGamepadMapping.
  * Fixed the order of vertices in ChainShapes.
  * Fixed love.mouse.getPosition returning outdated values if love.mouse.setPosition is used in the same frame.
  * Fixed love.graphics.newFont to error when given an invalid size argument.
  * Fixed the filename and backtrace given when love.graphics.print errors.
  * Fixed a small memory leak if love.graphics.newCanvas errors.
  * Fixed shader:getWarnings returning unnecessary information.
  * Fixed some cases of noncompliant shader code not properly erroring on some nvidia drivers.
  * Fixed a potential crash when Shader objects are garbage collected.
  * Fixed a potential small memory leak triggered when love.graphics.newShader errors.
  * Fixed love.graphics.newMesh(vertexcount, ...) causing the Mesh to do instanced rendering.
  * Fixed Mesh:getVertexMap.
  * Fixed Image:refresh generating mipmaps multiple times if mipmap filtering is enabled.
  * Fixed Image:setMipmapFilter to not keep bad state around if it errors.
  * Fixed Mesh:setDrawRange when the Mesh has a vertex map set.
  * Fixed internal detection of the 'position' and 'effect' shader functions.
  * Fixed Texture memory leak when Meshes are garbage collected.
  * Fixed the default line join mode to be 'miter' instead of an undefined value.
  * Fixed the default error handler text size when highdpi mode is enabled on a Retina monitor.
  * Fixed the default error handler background color when sRGB mode is enabled for the window.
  * Fixed love.window.setMode to fall back to the largest available mode if a width or height greater than the largest supported is specified and fullscreen is used.
  * Fixed the state of wireframe mode when love.window.setMode is called.
  * Fixed Canvas:getPixel to error if the coordinates are not within the Canvas' size.
  * Fixed detection of compressed textures to work regardless of the file's extension.

  * Renamed all cases of FSAA to MSAA. The FSAA names still exist for backward-compatibility.

  * Updated the Windows executable to automatically prefer the higher performance GPU on nvidia Optimus systems.
  * Updated the --console command-line argument in Windows to open the console before conf.lua is loaded.
  * Updated t.console and the --console command-line argument in Windows to use the existing Console window, if love was launched from one.
  * Updated the love executable to verify that the love library's version matches.
  * Updated the Lua wrapper code for modules to avoid crashes when the module's instance is created, deleted, and recreated.
  * Updated internal code for handling garbage collection of love objects to be more efficient.
  * Updated love's initialization code to trigger a Lua error if love.conf has an error in it.
  * Updated the paths returned by love.filesystem.getSaveDirectory and friends to strip double-slashes from the string.
  * Updated the error message when love.filesystem.write or File:open fails because the directory doesn't exist.
  * Updated the error message when love.math.setRandomseed(0) is attempted.
  * Updated the error message when invalid UTF-8 strings are used in love functions that expect UTF-8.
  * Updated love.physics.newPolygonShape and love.physics.newChainShape to accept a table of vertices.
  * Updated love.physics.newChainShape to error if the number of arguments is invalid.
  * Updated love.thread.newThread to accept a literal string of code directly.
  * Updated love-created threads to use names visible in external debuggers.
  * Updated SpriteBatch:unbind to use less VRAM if the SpriteBatch has the static usage hint.
  * Updated love.graphics.newImage, love.image.newImageData, etc. to leave less Lua-owned memory around.
  * Updated love.graphics.push to accept different stack types to push. Current types are "transform" and "all".
  * Updated love shaders to accept GLSL ES precision qualifiers on variables, although they do nothing.
  * Updated the error message for love.graphics.newShader to be less cryptic if an invalid filename is given.
  * Updated compressed texture loading code to allow BC6 and BC7 compressed textures (if the graphics driver supports them.)

LOVE 0.9.1 [Baby Inspector]
---------------------------

  Released: 2014-04-01

  * Added Source:clone.
  * Added blend mode "screen".
  * Added ParticleSystem:clone.
  * Added ParticleSystem:moveTo, has smoother emitter movement compared to setPosition.
  * Added ParticleSystem:setRelativeRotation.
  * Added love.graphics.setWireframe for debugging.
  * Added Mesh:setDrawRange and Mesh:getDrawRange.
  * Added CircleShape:getPoint and CircleShape:setPoint.
  * Added Mesh/SpriteBatch/ParticleSystem:setTexture, accepts Canvases and Images.
  * Added high-dpi window support for Retina displays in OS X, via the 'highdpi' window flag.
  * Added love.window.getPixelScale.
  * Added love.graphics.getSystemLimit.
  * Added antialiasing support to Canvases.
  * Added Canvas:getFSAA.
  * Added 'love_ScreenSize' built-in variable in shaders.
  * Added love.getVersion.
  * Added support for gamma-correct rendering.
  * Added love.graphics.isSupported("srgb").
  * Added love.math.gammaToLinear and love.math.linearToGamma.
  * Added RandomGenerator:getState and RandomGenerator:setState.
  * Added Body:setUserData and Body:getUserData.
  * Added some missing obscure key constants.
  * Added optional callback function argument to love.filesystem.getDirectoryItems.
  * Added love.system.openURL.

  * Deprecated Mesh/SpriteBatch/ParticleSystem:setImage.
  * Deprecated love.graphics.getMaxImageSize and love.graphics.getMaxPointSize.

  * Fixed love.graphics.scale with negative values causing incorrect line widths.
  * Fixed Joystick:isDown using 0-based button index arguments.
  * Fixed Source:setPitch to error when infinity or NaN is given.
  * Fixed love.graphics.setCanvas() to restore the proper viewport and scissor rectangles.
  * Fixed TrueType font glyphs which request a monochrome bitmap pixel mode.
  * Fixed love.graphics.reset causing crashes when called in between love.graphics.push/pop.
  * Fixed tab characters ("\t") to display properly with love.graphics.print.
  * Fixed love.graphics.isCreated to return false when love.window.setMode fails completely.
  * Fixed love.window.setMode to not destroy OpenGL resources before checking whether a fullsceren size is supported.
  * Fixed World:getBodyList and World:getJointList causing hard crashes.
  * Fixed loading BC4 compressed textures.
  * Fixed SoundData objects being initialized with garbage values.
  * Fixed 8-bit SoundData samples when used in love.audio Sources.

  * Updated the error text for love.filesystem’s module searchers when require fails.
  * Updated the love.filesystem module searchers to be tried after package.preload instead of before.
  * Updated love.graphics.newParticleSystem, newSpriteBatch, and newMesh to accept Canvases.
  * Updated Canvas drawing code, texture coordinates are no longer flipped vertically.
  * Updated Canvas:renderTo to work properly if a Canvas is currently active.
  * Updated ParticleSystem:setEmissionRate to accept non-integer numbers.
  * Updated Source:play to return a boolean indicating success.
  * Updated t.console in conf.lua to create the console before modules are loaded in Windows.
  * Updated Mesh vertex maps (index buffers) to use less space in VRAM.
  * Updated love.graphics.newMesh and Mesh:setVertices to default the UV parameters to 0,0.
  * Updated Fixture:set/getUserData to work in Coroutines.
  * Updated fullscreen-desktop and resizable window modes in OS X to use Mac OS 10.7's fullscreen Spaces.
  * Updated love.filesystem's C library loader to look in paths added via love.filesystem.mount, in Fused mode.
  * Updated the default love.run code to make initial love.math.random calls more random.

LOVE 0.9.0 [Baby Inspector]
---------------------------

  Released: 2013-12-13

  * Added better multiplayer networking support via ENet.
  * Added --fused command line argument, to simulate fusing.
  * Added liblove.
  * Added the ability to have exit values.
  * Added exit value of 1 in case of error by default.
  * Added basic support for the file:// uri scheme.
  * Added love.filesystem.isFused.
  * Added love.filesystem.getIdentity.
  * Added love.filesystem.append.
  * Added love.filesystem.getSize.
  * Added love.filesystem.mount and love.filesystem.unmount.
  * Added optional file search order parameter to love.filesystem.setIdentity.
  * Added File:isOpen and File:getMode.
  * Added Fie:setBuffer, File:getBuffer, and File:flush.
  * Added textinput event for unicode text input.
  * Added love.keyboard.setTextInput and love.keyboard.hasTextInput.
  * Added previously internal Rasterizer and GlyphData object methods.
  * Added support for UTF-8 ImageFonts.
  * Added Font:getAscent/getDescent/getBaseline.
  * Added Font:setFilter/getFilter.
  * Added Font:hasGlyphs.
  * Added angle, scale, and shear parameters to love.graphics.printf.
  * Added HDR canvas support.
  * Added mipmapping support (has isSupported test).
  * Added vertex shader support.
  * Added boolean support to Shader:send.
  * Added Canvas:getPixel.
  * Added blend mode "replace".
  * Added line join modes.
  * Added Mesh objects, allowing for arbitrary textured polygons.
  * Added multiple render target support to love.graphics.setCanvas.
  * Added love.graphics.setColorMask.
  * Added love.graphics.origin.
  * Added love.graphics.getRendererInfo.
  * Added love.graphics.getMaxImageSize.
  * Added SpriteBatch:getCount and SpriteBatch:getBufferSize.
  * Added SpriteBatch:getColor.
  * Added ParticleSystem:emit.
  * Added ParticleSystem:setInsertMode and ParticleSystem:getInsertMode.
  * Added many ParticleSystem getter methods.
  * Added DXT compressed texture support via love.image.newCompressedData.
  * Added love.image.isCompressed and Image:isCompressed.
  * Added Image/Canvas/ImageData:getDimensions.
  * Added anisotropic filtering support for Images, Canvases, and Fonts.
  * Added Image:refresh.
  * Added Image:getData.
  * Added SoundData:getDuration and SoundData:getSampleCount.
  * Added Source:isPlaying.
  * Added Source:setRelative and Source:isRelative.
  * Added Source:setCone and Source:getCone.
  * Added Source:getChannels.
  * Added new Channels API for love.thread.
  * Added limited table support to Channel:push.
  * Added Thread:getError.
  * Added Thread:isRunning.
  * Added threaderror event.
  * Added love.math module.
  * Added a platform-independent (good) random implementation to love.math.
  * Added RandomGenerator objects.
  * Added BezierCurve objects.
  * Added love.math.triangulate and love.math.isConvex.
  * Added love.math.noise.
  * Added love.timer.getAverageDelta.
  * Added Data:getString.
  * Added Contact:getChildren.
  * Added love.system module.
  * Added love.system.getClipboardText and love.system.setClipboardText.
  * Added love.system.getOS and love.system.getProcessorCount.
  * Added love.window module.
  * Added love.window.isVisible.
  * Added flags to love.window.setMode.
  * Added monitor choosing support to love.window.setMode.
  * Added support for resizable, borderless, and non-centered windows.
  * Added support for "fullscreen-desktop" mode.
  * Added window resize and visible events.
  * Added love.window.getDimensions.
  * Added love.window.getIcon.
  * Added t.window.icon to love.conf.
  * Added love.mousefocus and love.window.hasMouseFocus.
  * Added custom hardware cursors via love.mouse.newCursor.
  * Added love.mouse.setX/setY.
  * Added Joystick objects.
  * Added love.joystick.getJoystick.
  * Added joystick connect and disconnect events.
  * Added joystickaxis and joystickhat events.
  * Added unified Gamepad API for joysticks which have a similar layout to the Xbox controller.
  * Added joystick vibration support, works with most common gamepads.
  * OPTIONAL: Added support for Game Music Emu.

  * Fixed fused mode in OS X.
  * Fixed printing to the console in Windows before love.load is called.
  * Fixed the default love.run to not include the time taken by love.load in the first frame's dt.
  * Fixed the error screen not always appearing until the next input event.
  * Fixed love.event.clear.
  * Fixed love.mouse.setPosition when called in love.load.
  * Fixed scaling in several love.physics functions.
  * Fixed Box2D exception in World:update.
  * Fixed many uncaught Box2D / love.physics exceptions for Bodies and Joints.
  * Fixed ChainShape:getPoints running out of Lua stack space and crashing.
  * Fixed File:read reading past end of file.
  * Fixed love.filesystem.setIdentity not removing read access from old directories.
  * Fixed possible memory leak in utf-8 decoder.
  * Fixed spacing for the last character in an ImageFont.
  * Fixed line wrapping in love.graphics.printf.
  * Fixed love.graphics.printf to error if the wrap limit is negative.
  * Fixed love.graphics.print truncating strings with embedded zeros.
  * Fixed crashes with font drawing on some ATI cards.
  * Fixed artifacts when drawing lines at huge scale.
  * Fixed Fonts and Canvases ignoring default image filter.
  * Fixed scissor boxes when a canvas is set after love.graphics.setScissor is called.
  * Fixed love.graphics.getLineWidth returning incorrect values.
  * Fixed love.graphics.getColor on some Windows systems.
  * Fixed alpha blend mode.
  * Fixed multiplicative blend mode.
  * Fixed love.graphics.getPointStyle.
  * Fixed line numbers in shader errors.
  * Fixed Shader:send with Images and Canvases failing sometimes.
  * Fixed Shader:send to keep a reference to sent Images and Canvases.
  * Fixed crash when binding SpriteBatches multiple times.
  * Fixed SpriteBatches with more than 16,384 sprites.
  * Fixed particle draw order for ParticleSystems.
  * Fixed ParticleSystem:setSizes resetting the size variation.
  * Fixed the graphics viewport not matching the window size when using an unsupported fullscreen mode.
  * Fixed getMode and friends returning wrong values when using desktop size.
  * Fixed keyrepeat settings being lost after (indirect) setMode.
  * Fixed the icon being reset after setMode.
  * Fixed memory leak in the mp3 decoder.
  * Fixed sound issues with some versions of OpenAL soft, by enabling direct channels.
  * Fixed 'random' hangs in audio.
  * Fixed love.sound.newDecoder not accepting FileData.
  * Fixed case (in)sensitivity of sound file extension parsing.
  * Fixed looping support in tracker music formats.
  * Fixed skipping/looping issues when playing streaming audio Sources.
  * Fixed race condition in Source:play.
  * Fixed WAVE sound playback.

  * Moved love's startup to modules/love.
  * Moved window-related functions from love.graphics to love.window.

  * Renamed love's boot script to 'love.boot', which can be required.
  * Renamed love.filesystem.mkdir to love.filesystem.createDirectory.
  * Renamed love.filesystem.enumerate to love.filesystem.getDirectoryItems.
  * Renamed World:setAllowSleeping to World:setSleepingAllowed.
  * Renamed ChainShape:setPrevVertex to ChainShape:setPreviousVertex.
  * Renamed Joint:enableMotor to Joint:setMotorEnabled.
  * Renamed Joint:enableLimit and Joint:isLimitEnabled to Joint:setLimitsEnabled and Joint:hasLimitsEnabled.
  * Renamed t.screen to t.window in love.conf.
  * Renamed love.graphics.setCaption to love.window.setTitle.
  * Renamed PixelEffect to Shader (but now with vertex shaders).
  * Renamed love.graphics.setDefaultImageFilter to love.graphics.setDefaultFilter.
  * Renamed ParticleSystem:setSprite to ParticleSystem:setImage.
  * Renamed ParticleSystem:setGravity to ParticleSystem:setLinearAcceleration.
  * Renamed ParticleSystem:setLifetime/setParticleLife to setEmitter/ParticleLifetime.
  * Renamed ParticleSystem:count and all getNum* functions to get*Count.
  * Renamed Source:setDistance to Source:setAttenuationDistances.
  * Renamed SoundData:getBits and Decoder:getBits to SoundData:getBitDepth and Decoder:getBitDepth.
  * Renamed love.mouse.setGrab to love.mouse.setGrabbed.

  * Removed release mode.
  * Removed love.keyboard.getKeyRepeat (see love.keyboard.hasKeyRepeat).
  * Removed the unicode argument from love.keypressed (see love.textinput).
  * Removed love.graphics.drawTest.
  * Removed love.graphics.quad/triangle.
  * Removed love.graphics.setColorMode.
  * Removed love.graphics.newStencil.
  * Removed love.graphics.setLine/setPoint.
  * Removed love.graphics.drawq (functionality is merged into love.graphics.draw).
  * Removed SpriteBatch:addq/setq (functionality is merged into SpriteBatch:add/set).
  * Removed Quad:flip.
  * Removed ParticleSystem:isFull/isEmpty.
  * Removed ParticleSystem:getX/getY.
  * Removed love.graphics.checkMode.
  * Removed love.joystick.open and friends.
  * Removed love.joystick module functions which operated on individual joysticks (see Joystick objects).
  * Removed joystick ball support.
  * Removed thread names.
  * Removed old thread messaging API (see Channels).
  * Removed love.timer.getMicroTime.

  * Updated functions which return love objects to re-use the Lua-side object instead of always recreating it.
  * Updated the windows console, it now tries to re-use an active one first.
  * Updated error handling, error handlers now get resolved when the error occurs.
  * Updated order of sleep/present in love.run (now draws, *then* sleeps).
  * Updated love.filesystem to try to create the appdata directory if it doesn't exist yet.
  * Updated the default filesystem identity to omit file extension.
  * Updated love.filesystem.newFile to optionally open the file.
  * Updated most love.filesystem functions to return nil, error on internal failure.
  * Updated love.keyboard.setKeyRepeat to take a boolean argument instead of numbers.
  * Updated love.keypressed's second argument to be a boolean indicating key repeat.
  * Updated keyboard key constants for some more modern keyboard keys.
  * Updated window code to use adaptive vsync when available, if vsync is enabled.
  * updated love.graphics.print's x and y arguments to default to 0.
  * Updated the setFilter and setWrap methods, the second argument is now optional.
  * Updated Font and ParticleSystem rendering code, now more performant.
  * Updated SpriteBatch code, now more performant when adding/setting and (un)binding.
  * Updated Canvas code to support more systems.
  * Updated Canvas:getImageData and love.graphics.newScreenshot to be more efficient.
  * Updated love.graphics.newScreenshot to create a fully opaque image by default.
  * Updated error messages when sending bad values to Shaders.
  * Updated love.graphics.newParticleSystem to have a default buffer size of 1000.
  * Updated ImageData:setPixel to accept a table and default to 255 alpha.
  * Updated ImageData:mapPixel, is now more efficient and accepts optional x,y,w,h arguments.
  * Updated love.image memory handling, improves errors and thread-safety.
  * Updated all love object constructors to optionally accept FileData if they accept a filename.
  * Updated allocation for SoundData, it's more efficient and less wasteful.
  * Updated SoundData:set/getSample to error for invalid samples.
  * Updated Source:set* functions to default z to 0.
  * Updated Source:seek to error for negative offsets.
  * Updated Thread:start to accept arguments which get passed to the thread.
  * Updated love.timer.getFPS to be microsecond-accurate.
  * Updated love.timer.getTime to be microsecond-accurate and monotonic.
  * Updated Box2D to version 2.3.0.

LOVE 0.8.0 [Rubber Piggy]
-------------------------

  Released: 2012-04-02

  * Added release error screen.
  * Added alpha to love.graphics.setBackgroundColor.
  * Added Canvas:clear(r, g, b, a).
  * Added Canvas support to love.graphics.drawq.
  * Added Canvas:getWidth and Canvas:getHeight.
  * Added love.graphics.arc.
  * Added seek and tell to Source objects.
  * Added color interpolation to ParticleSystem.
  * Added automatic PO2 padding for systems not supporting the OpenGL extension.
  * Added UTF-8 support for fonts.
  * Added Box2D error handling for some commonly failing functions.
  * Added ability for fused release games to have their write dir in appdata.
  * Added shear transformation to drawing functions.
  * Added origin to font printing.
  * Added love.graphics.getMode.
  * Added per-sprite colors on SpriteBatches.
  * Added PixelEffects.
  * Added love.graphics.isSupported.
  * Added love.graphics.getCanvas.
  * Added love.event.quit.
  * Added stencil masks.
  * Added alternative SpriteBatch provider, it should work everywhere now.
  * Added a loader for binary modules.
  * Added Thread:getKeys.
  * Added option of fractions for Quads.
  * Added PNG, JPEG and GIF support to ImageData:encode.
  * Added 64-bit support for Mac OS X.
  * Added premultiplied blending mode.
  * Added functions to set/get default image filter modes.
  * Added SpriteBatch:set.
  * Added new events system, with support for custom events and long event names.
  * Added sound attenuation by distance.
  * Added SpriteBatch:getImage.
  * Added combine color mode.
  * Added automatic random seeding to love.run.
  * Added support for the subtract BlendMode on older graphics cards.
  * Added love._os field, which contains the OS the game is running on.

  * Fixed wrapping for single words.
  * Fixed tracebacks not showing filenames.
  * Fixed love.graphics.push/pop capable of causing overflows/underflows.
  * Fixed setScissor on Canvases.
  * Fixed several issues with audio, e.g. clicks and pops in mp3s.
  * Fixed crashes when bodies were destroyed during collisions.
  * Fixed bound SpriteBatches corrupting when drawing.
  * Fixed thread-safety issues with ImageData.
  * Fixed memory leaks in audio sources.
  * Fixed thread's set (previously send) accidentally changing the type.
  * Fixed SoundData allocating the wrong number of samples.
  * Fixed SpriteBatch support on Intel cards.
  * Fixed love.filesystem.lines() leaking.
  * Fixed most leaking on unclosed File objects.
  * Fixed crashes when operating on non-existent files.
  * Fixed a bug where empty files on windows would never reach eof.
  * Fixed crash when SoundData runs out of memory.
  * Fixed ordering of loaders, love should have priority over lua.
  * Fixed several miscellaneous memory leaks.
  * Fixed a few cases where strings with \0 in them would not be stored correctly.
  * Fixed love's startup time being in the first dt.
  * Fixed internal string conversions, they are faster now.
  * Fixed (bad) performance of ImageData:paste.
  * Fixed love.graphics.toggleFullscreen not maintaining graphics state.

  * Renamed SpriteBatch's lock/unlock to bind/unbind.
  * Renamed Framebuffer to Canvas.
  * Renamed love.thread.send/receive to set/get.
  * Renamed love.graphics.setRenderTarget to setCanvas.

  * Removed canvas auto-clearing.
  * Removed EncodedImageData.
  * Removed old syntax for require (with extension).
  * Removed love.graphics.setFont([file], [size]).
  * Removed Thread:kill.

  * Updated love.joystick to be 1-indexed.
  * Updated Sources to update more cleanly and control more intuitively.
  * Updated font engine.
  * Updated line drawing to a custom system.
  * Updated love.timer.sleep to use seconds, like the rest of love.
  * Updated love.timer to be more accurate.
  * Updated love.graphics.circle to have max(10, r) as default for segments.
  * Updated ImageData:encode to write to files directly.
  * Updated version compatibility system to actually do something.
  * Updated love.run's order, events are checked just before update.
  * Updated Box2D to version 2.2.1.

LOVE 0.7.2 [Game Slave]
-----------------------

  Released: 2011-05-04

  * Added Framebuffer:get/setWrap.
  * Added love.event.clear.
  * Added support for any number of arguments to love.keyboard.isDown, love.mouse.isDown and love.joystick.isDown.
  * Added SpriteBatch:setImage().

  * Fixed fused games not working.
  * Fixed ParticleSystem:setSize ignoring the variation argument.
  * Fixed some file-opening exceptions not being caught.
  * Fixed files loaded by libmodplug being too loud.
  * Fixed paths with periods in them not working.
  * Fixed love.graphics.getBlendMode not detecting subtractive and multiplicative blend modes.
  * Fixed crash when there was no memory available for newImageData(w, h).

  * Updated PhysicsFS version to 2.0.2 on Windows
  * Updated OpenAL Soft version to 1.13 on Windows
  * Updated libmodplug version to 0.8.8.1 on Windows
  * Updated FreeType version to 2.4.4 on Windows
  * Updated libmpg123 version to 1.13.2 on Windows
  * Windows binary no longer depends on VC2005 runtime.
  * Windows binary no longer depends on SSE2 support.

LOVE 0.7.1 [Game Slave]
-----------------------

  Released: 2011-02-14

  * Added source:isPaused()
  * Added error when initial window can't be created.
  * Added framebuffer filter modes.
  * Added love.filesystem.getLastModified.
  * Added filter modes for ImageFonts.
  * Added dead key support by using "unknown" key with correct unicode value.
  * Added 0 width and height in love.conf. (for current desktop resolution)
  * Added alpha support when encoding TGA images.

  * Fixed a lot of bugs regarding zero characters in threads.
  * Fixed handling of a directory named "love" in current directory.
  * Fixed a few unhandled errors in setScissor.
  * Fixed a bug where old physics callbacks were never dereferenced.
  * Fixed loss of mouse visibility settings on setMode.
  * Fixed creation of a framebuffer unbinding current framebuffer.
  * Fixed several race conditions in love.thread.
  * Fixed 'love .', so it won't use lovedir/. as save dir.
  * Fixed setLineHeight.
  * Fixed extended ascii and ImageFonts.
  * Fixed printf's line wrapping.
  * Fixed crash when playing sounds.
  * Fixed playback of mp3s with arbitrary sample rates.
  * Fixed handling of negative indices in love.joystick.
  * Fixed toggleFullscreen.
  * Fixed unexpected behaviour with hash tables to love.graphics.line.
  * Fixed mouse coordinates being capped after setMode.
  * Fixed setFont's error handling on a non-existant file.
  * Fixed issue where Windows builds would hard crash on Lua errors

  * Removed custom sample rates for Decoders.

LOVE 0.7.0 [Game Slave]
-----------------------

  Released: 2010-12-05

  * Added love.thread.
  * Added love.font.
  * Added love.graphics.Framebuffer.
  * Added Source:play, Source:pause, etc.
  * Added Source:isStatic().
  * Added get/setPosition, get/setVelocity, and get/setDirection to Source.
  * Added get/setGroupIndex to CircleShape and PolygonShape.
  * Added Font:getWrap.
  * Added identity field to love.conf.
  * Added love.quit callback.
  * Added love.focus callback.
  * Added extra meter parameter to love.physics.newWorld.
  * Added love.graphics.setIcon.
  * Added way to make the window desktop resolution.
  * Added subtractive and multiplicative blend modes.
  * Added body:getAllowSleeping.
  * Added shape:getBody.
  * Added love.filesystem.FileData for public usage.
  * Added base64 support for love.filesystem.FileData.
  * Added table support for love.graphics.setColor and love.graphics.setBackgroundColor.
  * Added love.graphics.hasFocus().
  * Added ?/init.lua to the loader.

  * Fixed the debug module not being an upvalue of the error handlers. (you can now override debug)
  * Fixed some cases when love.audio.pause and friends, were acting on everything, not just the passed Source.
  * Fixed setFixedRotation enabling other flags.
  * Fixed a bug in the loader (for require).
  * Fixed ParticleSystem::setSprite not retaining the new image.
  * Fixed setMode removing images settings (wrapping, filters).
  * Fixed shape:getBody, it's now exposed for LÖVE usage.
  * Fixed DistanceJoint:getType() returning "circle" - it now returns "distance".
  * Fixed SpriteBatches being unaffected by setColor
  * Fixed the audio bug.
  * Fixed invalid FSAA values crashing LÖVE.
  * Fixed a bunch of compiler warnings.
  * Fixed OS X not properly using UTIs for .love files.
  * Fixed the modplug decoder not properly handeling files that fail to load.
  * Fixed a memory leak in setFont.
  * Fixed bug where errors in threads wouldn't get picked up by demand.
  * Fixed part of the bug with newlines when scaling text (rotating still messes up the lines).
  * Fixed the bug where newImageFont would try to created ImageData out of ImageData.
  * Fixed error handler not resetting the blend mode.

  * Changed fonts, they're now po2 safe.
  * Changed the traceback in the error screen.
  * Changed font origin to top-left.
  * Changed linux save dir location to obey to Freedesktop.org's XDG specs. (~/.local/share/love by default.)

  * Removed font functions from love.graphics.
  * Removed love.physics.newWorld(w, h). Use love.physics.newWorld(x1, y1, x2, y2) instead.

LOVE 0.6.2 [Jiggly Juice]
-------------------------

  Released: 2010-03-06

  * Fixed a bug causing ImageFonts to cut off some pixels.
  * Fixed a bug where filled rectangles were too small.
  * Fixed a bug in Image:setFilter where it would switch the parameters.
  * Fixed a bug in ImageRasterizer where it wasn't using the data.
  * Image filter and wrap modes now use string constants as well.
  * Fixed double-transform bug in SpriteBatch.
  * Errors are reported on stdout again.
  * Another fix for the icons on ubuntu.

LOVE 0.6.1 [Jiggly Juice]
-------------------------

  Released: 2010-02-07

  * Added Shape:setGroupIndex and getGroupIndex.
  * Added Body:setFixedRotation and Body:getFixedRotation.
  * Added Body:setInertia.
  * Added CircleShape:getLocalCenter and CircleShape:getWorldCenter.
  * Added icons and file associations for the debs.
  * Added the demos folder to the Mac OS X DMG.
  * It's now possible to run a .love from Resources in Mac OS X, thanks to Steve Johnson.
  * Fixed a bug with multiple Sources on the same Music.
  * Fixed a bug so the mouse doesn't get crippled when the keyboard is disabled.
  * Fixed a bug where love.graphics.rectangle drew a too large rectangle.
  * Fixed a bug where memory wouldn't be released correctly.
  * Fixed epic physics typo (getRestituion->getRestitution).
  * Fixed crash on opening non-existent image.
  * The error screen redraws when an event occurs.
  * The default love.run() now gracefully handles disabled modules.
  * The debian packages should now successfully include icons, file associations, etc, and should give the correct architecture.
  * Added support for drawing polylines to love.graphics.line - the syntax is the same as love.graphics.polygon.
  * Removed Music and Sound. There are now only sources.
  * Improved the stability of love.audio/love.sound.

LOVE 0.6.0 [Jiggly Juice]
-------------------------

  Released: 2009-12-24

  * Lost track of 0.6.0 changes a long while ago. Don't trust the list below.

  * Added love.graphics.print()/printf().
  * Added unicode-translated parameter to love.keypressed().
  * Added love.event.
  * Added love.filesystem.setIdentity().
  * Added OpenAL dependency.

  * Fixed love.fileystem problems with internal \0 in strings.
  * Fixed love.filesystem.mkdir/remove not working when write directory not set.
  * Fixed position of Window.

  * Changed parameter order of draws().
  * Changed origin for images to top-left.
  * Changed love.filesystem.open to accept mode (removed from love.filesystem.newFile).
  * Changed love.filesystem.read() which now returns two parameters (data, length).
  * Changed love.filesystem.write() which now takes up to four parameters (file, data, length, mode).
  * Changed default color mode to "modulate".
  * Changed name of love.color_normal to "replace".
  * Changed name of love.blend_normal to "alpha".
  * Changed the conf file format.

  * Removed Color object.
  * Removed Animation.
  * Removed several constants.
  * Removed love.graphics.draw() for strings.
  * Removed love.system.
  * Removed SWIG.
  * Removed boost.
  * Removed SDL_mixer.


LOVE 0.5.0 [Salted Nuts]
------------------------

  Released: 2009-01-02

  * Added love.joystick.
  * Added network support via LuaSocket.
  * Added support for loading of appended .love-file.

  * Added love.filesystem.lines().
  * Added a loader function to enable use of normal require().
  * Added love.filesystem.load().
  * Added love.filesystem.getSaveDirectory()
  * Added love.filesystem.getWorkingDirectory()

  * Added optional explicit destruction of Box2D objects.
  * Added shape:testSegment().
  * Added love.graphics.screenshot() (.bmp only).
  * Added default size (12) to font-related functions.
  * Added love.graphics.setFont( filename, size )
  * Added love.graphics.setLineStippe and related functions.
  * Added love.graphics.setPointSize and related functions.

  * Changed love.filesystem.read() to accept file name.
  * Changed love.filesystem.write() to accept file name.
  * Changed love.graphics.triangle() to accept CCW and CW ordering.

  * Fixed love.graphics.read adding bogus characters at the end of string.
  * Fixed epic swigfusion bug.
  * Fixed love.graphics.getFont so it returns nil if no font is present.
  * Fixed bug where love.graphics.getBlendMode() always returns blend_normal.
  * Fixed bug which caused error screen to be scissored (when enabled).
  * Fixed Body:setAngle to accept degrees like everything else.

  * Cleaned up love::File and love_physfs.
  * Cleaned up love::Reference so it stores its reference in _G.

LOVE 0.4.0 [Taco Beam]
----------------------

  Released: 2008-08-29

  * Added love.physics. (YES!)
  * Added love.audio.setMode().
  * Added love.audio.setChannels().
  * Added love.graphics.polygon().
  * Added love.graphics.setScissor() and love.graphics.getScissor() to handle scissoring the graphical area.
  * Fixed missing constants related to image optimization.
  * Fixed memory leak related to love::File (thanks amnesiasoft!).


LOVE 0.3.2 [Lemony Fresh]
-------------------------

  Released: 2008-07-04

  * Added love.graphics.rectangle()
  * Added love.graphics.setLineWidth()
  * Added love.graphics.setLineStyle()
  * Added love.graphics.getLineWidth()
  * Added love.graphics.getLineStyle()
  * Added love.mouse.getPosition()
  * Added love.audio_loop
  * Added love.timer.getTime()
  * Changed love.graphics.quad() to accept CCW and CW ordering.
  * Fixed default color mode bug.
  * Fixed line width being applied unnecessarily.
  * Fixed line width bug related to fullscreen toggle.
  * Fixed music not looping.

LOVE 0.3.1 [Space Meat]
-----------------------

  Released: 2008-06-21

  * Fixed segfault related to graphics.
  * Fixed wait-forever bug related to audio.
  * Fixed error reporting not working across modules.
  * Fixed bug where games with a trailing "/" would not start.
  * Fixed bug which caused love.timer.sleep to delay for (way) too long.

LOVE 0.3.0 [Mutant Vermin]
--------------------------

  Released: 2008-06-17

  * Added ParticleSystem.
  * Added visual error reporting.
  * Added love.system for game control needs.
  * Added input grabbing.
  * Added functions in love.graphics for display management.
  * Added love.graphics.point().
  * Added functions in love.graphics for getting current color, font, etc.
  * Added love.filesystem.enumerate() for getting folder contents.
  * Added functions for setting the window caption.
  * Added version checking. An error occurs if the game is incompatible.
  * Fixed print() :)
  * Removed all keyboard shortcuts.
  * Save folders are now created only if required.
  * On Windows, the new save location is %APPDATA%\LOVE\game

LOVE 0.2.1 [Impending Doom]
---------------------------

  Released: 2008-03-29

  * Added many functions in love.filesystem.
  * Added a dedicated save-folder for each game.
  * Added timer.sleep.
  * Added line heights to font objects.
  * Added love.graphics.getWidth/getHeight.
  * Added scaling and rotation for text.
  * Added variable spacing to ImageFont.
  * Added support for variable line quality when drawing primitives.
  * Added several functions for drawing sections of images. (love.graphics.draws)
  * Added image optimization function and padding function.
  * Added love.graphics.getWidth/Height.

  * Split devices up into actual SWIG-modules. This means that:
    - Functions are used like this: love.graphics.draw, not love.graphics:draw
    - love.objects is no more. Objects are created by an appropriate device.
  * How you draw primitives has been altered.
  * draw(string, x, y, wrap, align) has become drawf(string, x, y, wrap, align)

  * Changed getFps to getFPS.
  * Escape is no more ... enter: Alt+F4.
  * love.filesystem.include has been renamed to love.filesystem.require.
  * ImageFonts now consider the spacing as well as the glyph size.
  * Fixed a massive ImageFont bug which resulted in float-positioning failure.
  * Fixed a bug when loading fonts where the specified size doesn't represent the true size of the font.

  * Updated DevIL to version 1.6.8-rc2 (Windows)
  * Updated FreeType to freetype-2.3.5-1 (Windows)
  * Updated Lua to 5.1.3 (Windows)
  * Updated SDL to 1.2.13 (Windows)
  * Removed boost::filesystem.

LOVE 0.2.0 [Mini-Moose]
-----------------------

  Released: 2008-02-06

  * Added ImageFont
  * Added Animation
  * Added text formatting functions
  * Added setCenter for Image and Animation.
  * Added methods for rendering of scaled/rotated sprites.
  * Added the drawing of basic shapes.
  * Added default font and embedded resources.
  * Added Ctrl+R for reload.
  * Added blending and color modes.
  * Fixed memory usage of Graphics.
  * Fixed a bug where the set text color would change the color of any images rendered.
  * Fixed CWD bug.
  * Fixed titlebar. Game title is now displayed.


LOVE 0.1.1 [Santa-Power]
------------------------

	Initial release!
  Released: 2008-01-13

 * Image loading and rendering.
 * Sound loading and playing.
 * Font loading and rendering.
 * Lua-scriptable games.
 * Config files.
 * Stuff is loadable from archive files.
 * Keyboard, mouse, display, timer, etc. (Basic devices).


================================================
FILE: extra/cmake/FindHarfbuzz.cmake
================================================
# Sets the following variables:
#
#  HARFBUZZ_FOUND
#  HARFBUZZ_INCLUDE_DIR
#  HARFBUZZ_LIBRARY

set(HARFBUZZ_SEARCH_PATHS
	/usr/local
	/usr
	)

find_path(HARFBUZZ_INCLUDE_DIR
	NAMES hb.h
	PATH_SUFFIXES include include/harfbuzz
	PATHS ${HARFBUZZ_SEARCH_PATHS})

find_library(HARFBUZZ_LIBRARY
	NAMES harfbuzz
	PATH_SUFFIXES lib
	PATHS ${HARFBUZZ_SEARCH_PATHS})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Harfbuzz DEFAULT_MSG HARFBUZZ_LIBRARY HARFBUZZ_INCLUDE_DIR)

mark_as_advanced(HARFBUZZ_INCLUDE_DIR HARFBUZZ_LIBRARY)


================================================
FILE: extra/cmake/FindLuaJIT.cmake
================================================
# Sets the following variables:
#
# LUAJIT_FOUND
# LUAJIT_INCLUDE_DIR
# LUAJIT_LIBRARY

set(LUAJIT_SEARCH_PATHS
	/usr/local
	/usr
	)

find_path(LUAJIT_INCLUDE_DIR
	NAMES luajit.h
	PATH_SUFFIXES include include/luajit-2.0 include/luajit-2.1
	PATHS ${LUAJIT_SEARCH_PATHS})

find_library(LUAJIT_LIBRARY
	NAMES luajit-5.1
	PATH_SUFFIXES lib
	PATHS ${LUAJIT_SEARCH_PATHS})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LuaJIT DEFAULT_MSG LUAJIT_LIBRARY LUAJIT_INCLUDE_DIR)

mark_as_advanced(LUAJIT_INCLUDE_DIR LUAJIT_LIBRARY)


================================================
FILE: extra/cmake/FindModPlug.cmake
================================================
# Sets the following variables:
#
# MODPLUG_FOUND
# MODPLUG_INCLUDE_DIR
# MODPLUG_LIBRARY

set(MODPLUG_SEARCH_PATHS
	/usr/local
	/usr
	)

find_path(MODPLUG_INCLUDE_DIR
	NAMES libmodplug/modplug.h
	PATH_SUFFIXES include
	PATHS ${MODPLUG_SEARCH_PATHS})

find_library(MODPLUG_LIBRARY
	NAMES modplug
	PATH_SUFFIXES lib
	PATHS ${MODPLUG_SEARCH_PATHS})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ModPlug DEFAULT_MSG MODPLUG_LIBRARY MODPLUG_INCLUDE_DIR)

mark_as_advanced(MODPLUG_INCLUDE_DIR MODPLUG_LIBRARY)


================================================
FILE: extra/cmake/FindOgg.cmake
================================================
# Sets the following variables:
#
# OGG_FOUND
# OGG_INCLUDE_DIR
# OGG_LIBRARY

set(OGG_SEARCH_PATHS
	/usr/local
	/usr
	)

find_path(OGG_INCLUDE_DIR
	NAMES ogg/ogg.h
	PATH_SUFFIXES include
	PATHS ${OGG_SEARCH_PATHS})

find_library(OGG_LIBRARY
	NAMES ogg
	PATH_SUFFIXES lib
	PATHS ${OGG_SEARCH_PATHS})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Ogg DEFAULT_MSG OGG_LIBRARY OGG_INCLUDE_DIR)

mark_as_advanced(OGG_INCLUDE_DIR OGG_LIBRARY)


================================================
FILE: extra/cmake/FindSDL2.cmake
================================================
# Sets the following variables:
#
#  SDL2_FOUND
#  SDL2_INCLUDE_DIR
#  SDL2_LIBRARY

set(SDL2_SEARCH_PATHS
	/usr/local
	/usr
	)

find_path(SDL2_INCLUDE_DIR
	NAMES SDL.h
	PATH_SUFFIXES include include/SDL2
	PATHS ${SDL2_SEARCH_PATHS})

find_library(SDL2_LIBRARY
	NAMES SDL2
	PATH_SUFFIXES lib
	PATHS ${SDL2_SEARCH_PATHS})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SDL2 DEFAULT_MSG SDL2_LIBRARY SDL2_INCLUDE_DIR)

mark_as_advanced(SDL2_INCLUDE_DIR SDL2_LIBRARY)


================================================
FILE: extra/cmake/FindTheora.cmake
================================================
# Sets the following variables:
#
# THEORA_FOUND
# THEORA_INCLUDE_DIR
# THEORA_LIBRARY
# THEORADEC_LIBRARY

set(THEORA_SEARCH_PATHS
	/usr/local
	/usr
	)

find_path(THEORA_INCLUDE_DIR
	NAMES theora/codec.h
	PATH_SUFFIXES include
	PATHS ${THEORA_SEARCH_PATHS})

find_library(THEORA_LIBRARY
	NAMES theora
	PATH_SUFFIXES lib
	PATHS ${THEORA_SEARCH_PATHS})

find_library(THEORADEC_LIBRARY
	NAMES theoradec
	PATH_SUFFIXES lib
	PATHS ${THEORA_SEARCH_PATHS})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Theora DEFAULT_MSG THEORA_LIBRARY THEORA_INCLUDE_DIR)

mark_as_advanced(THEORA_INCLUDE_DIR THEORA_LIBRARY)


================================================
FILE: extra/cmake/FindVorbis.cmake
================================================
# Sets the following variables:
#
# VORBIS_FOUND
# VORBIS_INCLUDE_DIR
# VORBIS_LIBRARY
# VORBISFILE_LIBRARY

set(VORBIS_SEARCH_PATHS
	/usr/local
	/usr
	)

find_path(VORBIS_INCLUDE_DIR vorbis/vorbisfile.h
	PATH_SUFFIXES include
	PATHS ${VORBIS_SEARCH_PATHS})

find_library(VORBIS_LIBRARY
	NAMES vorbis
	PATH_SUFFIXES lib
	PATHS ${VORBIS_SEARCH_PATHS})

find_library(VORBISFILE_LIBRARY
	NAMES vorbisfile
	PATH_SUFFIXES lib
	PATHS ${VORBIS_SEARCH_PATHS})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Vorbis DEFAULT_MSG VORBIS_LIBRARY VORBISFILE_LIBRARY VORBIS_INCLUDE_DIR)

mark_as_advanced(VORBIS_INCLUDE_DIR VORBIS_LIBRARY VORBISFILE_LIBRARY)


================================================
FILE: extra/cmake/LoveMacros.cmake
================================================

# Group all related stuff in folders in Visual Studio

function(love_group_projects)
	set(options NESTED)
	set(oneValueArgs NAME)
	set(multiValueArgs TARGETS)
	cmake_parse_arguments(LOVE_GROUP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

	foreach(TARGET_NAME ${LOVE_GROUP_TARGETS})
		if (TARGET ${TARGET_NAME})
			get_target_property(TARGET_TYPE ${TARGET_NAME} TYPE)
			# If this is an interface target, walk the children
			if (${TARGET_TYPE} STREQUAL "INTERFACE_LIBRARY")
				get_target_property(TARGET_LIBS ${TARGET_NAME} INTERFACE_LINK_LIBRARIES)
				foreach(TARGET_LIB ${TARGET_LIBS})
					# Is this a target? (Could also be a .lib file)
					if (TARGET ${TARGET_LIB})
						# Resolve aliased target
						get_target_property(ORIGINAL_TARGET ${TARGET_LIB} ALIASED_TARGET)
						if (ORIGINAL_TARGET)
							set(TARGET_LIB ${ORIGINAL_TARGET})
						endif()

						# Do we want to nest per-project?
						if (LOVE_GROUP_NESTED)
							set_target_properties(${TARGET_LIB} PROPERTIES FOLDER "${LOVE_GROUP_NAME}/${TARGET_NAME}")
						else()
							set_target_properties(${TARGET_LIB} PROPERTIES FOLDER "${LOVE_GROUP_NAME}")
						endif()
					endif()
				endforeach()
			else()
				# This is no interface library, so group it under the root 'NAME' node
				set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "${LOVE_GROUP_NAME}")
			endif()
		endif()
	endforeach()
endfunction()


================================================
FILE: extra/cmake/NSIS.template.in
================================================
; CMake - Cross Platform Makefile Generator
; Copyright 2000-2024 Kitware, Inc. and Contributors
; All rights reserved.
; 
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions
; are met:
; 
; * Redistributions of source code must retain the above copyright
;   notice, this list of conditions and the following disclaimer.
; 
; * Redistributions in binary form must reproduce the above copyright
;   notice, this list of conditions and the following disclaimer in the
;   documentation and/or other
Download .txt
gitextract_aaj4kzw1/

├── .gitattributes
├── .github/
│   └── workflows/
│       └── main.yml
├── .gitignore
├── CMakeLists.txt
├── changes.txt
├── extra/
│   ├── cmake/
│   │   ├── FindHarfbuzz.cmake
│   │   ├── FindLuaJIT.cmake
│   │   ├── FindModPlug.cmake
│   │   ├── FindOgg.cmake
│   │   ├── FindSDL2.cmake
│   │   ├── FindTheora.cmake
│   │   ├── FindVorbis.cmake
│   │   ├── LoveMacros.cmake
│   │   └── NSIS.template.in
│   ├── resources/
│   │   ├── NotoSans-Regular.ttf.gzip
│   │   └── b64.lua
│   └── windows/
│       └── love.rc
├── license.txt
├── platform/
│   ├── unix/
│   │   ├── debian/
│   │   │   ├── changelog.in
│   │   │   ├── compat
│   │   │   ├── control.in
│   │   │   ├── copyright
│   │   │   ├── docs
│   │   │   ├── liblove-unstable0.docs
│   │   │   ├── liblove-unstable0.install
│   │   │   ├── liblove0.docs
│   │   │   ├── liblove0.install
│   │   │   ├── love-unstable.install
│   │   │   ├── love-unstable.manpages
│   │   │   ├── love.install
│   │   │   ├── love.manpages
│   │   │   ├── rules.in
│   │   │   └── source/
│   │   │       └── format
│   │   ├── love.6
│   │   ├── love.desktop.in
│   │   └── love.xml
│   └── xcode/
│       ├── Images.xcassets/
│       │   ├── Contents.json
│       │   ├── OS X AppIcon.appiconset/
│       │   │   └── Contents.json
│       │   └── iOS AppIcon.appiconset/
│       │       └── Contents.json
│       ├── ios/
│       │   ├── Launch Screen.xib
│       │   ├── love-ios.plist
│       │   └── lovedocument.icns
│       ├── liblove.xcodeproj/
│       │   ├── project.pbxproj
│       │   └── project.xcworkspace/
│       │       └── contents.xcworkspacedata
│       ├── love.entitlements
│       ├── love.xcodeproj/
│       │   ├── TemplateIcon.icns
│       │   ├── default.pbxuser
│       │   ├── project.pbxproj
│       │   └── project.xcworkspace/
│       │       ├── contents.xcworkspacedata
│       │       └── xcshareddata/
│       │           ├── IDEWorkspaceChecks.plist
│       │           └── WorkspaceSettings.xcsettings
│       └── macosx/
│           ├── liblove-macosx.plist
│           ├── love-macosx.plist
│           └── macos-copy-app.plist
├── readme-iOS.rtf
├── readme.md
├── src/
│   ├── .editorconfig
│   ├── common/
│   │   ├── Color.h
│   │   ├── Data.cpp
│   │   ├── Data.h
│   │   ├── EnumMap.h
│   │   ├── Exception.cpp
│   │   ├── Exception.h
│   │   ├── Matrix.cpp
│   │   ├── Matrix.h
│   │   ├── Module.cpp
│   │   ├── Module.h
│   │   ├── Object.cpp
│   │   ├── Object.h
│   │   ├── Optional.h
│   │   ├── Range.h
│   │   ├── Reference.cpp
│   │   ├── Reference.h
│   │   ├── Stream.cpp
│   │   ├── Stream.h
│   │   ├── StringMap.cpp
│   │   ├── StringMap.h
│   │   ├── Variant.cpp
│   │   ├── Variant.h
│   │   ├── Vector.cpp
│   │   ├── Vector.h
│   │   ├── android.cpp
│   │   ├── android.h
│   │   ├── apple.h
│   │   ├── apple.mm
│   │   ├── b64.cpp
│   │   ├── b64.h
│   │   ├── config.h
│   │   ├── delay.cpp
│   │   ├── delay.h
│   │   ├── deprecation.cpp
│   │   ├── deprecation.h
│   │   ├── floattypes.cpp
│   │   ├── floattypes.h
│   │   ├── int.h
│   │   ├── ios.h
│   │   ├── ios.mm
│   │   ├── macos.h
│   │   ├── macos.mm
│   │   ├── math.h
│   │   ├── memory.cpp
│   │   ├── memory.h
│   │   ├── pixelformat.cpp
│   │   ├── pixelformat.h
│   │   ├── runtime.cpp
│   │   ├── runtime.h
│   │   ├── types.cpp
│   │   ├── types.h
│   │   ├── utf8.cpp
│   │   ├── utf8.h
│   │   └── version.h
│   ├── libraries/
│   │   ├── .editorconfig
│   │   ├── Wuff/
│   │   │   ├── wuff.c
│   │   │   ├── wuff.h
│   │   │   ├── wuff_config.h
│   │   │   ├── wuff_convert.c
│   │   │   ├── wuff_convert.h
│   │   │   ├── wuff_internal.c
│   │   │   ├── wuff_internal.h
│   │   │   └── wuff_memory.c
│   │   ├── box2d/
│   │   │   ├── Box2D.h
│   │   │   ├── README.MODIFIED
│   │   │   ├── b2_api.h
│   │   │   ├── b2_block_allocator.h
│   │   │   ├── b2_body.h
│   │   │   ├── b2_broad_phase.h
│   │   │   ├── b2_chain_shape.h
│   │   │   ├── b2_circle_shape.h
│   │   │   ├── b2_collision.h
│   │   │   ├── b2_common.h
│   │   │   ├── b2_contact.h
│   │   │   ├── b2_contact_manager.h
│   │   │   ├── b2_distance.h
│   │   │   ├── b2_distance_joint.h
│   │   │   ├── b2_draw.h
│   │   │   ├── b2_dynamic_tree.h
│   │   │   ├── b2_edge_shape.h
│   │   │   ├── b2_fixture.h
│   │   │   ├── b2_friction_joint.h
│   │   │   ├── b2_gear_joint.h
│   │   │   ├── b2_growable_stack.h
│   │   │   ├── b2_joint.h
│   │   │   ├── b2_math.h
│   │   │   ├── b2_motor_joint.h
│   │   │   ├── b2_mouse_joint.h
│   │   │   ├── b2_polygon_shape.h
│   │   │   ├── b2_prismatic_joint.h
│   │   │   ├── b2_pulley_joint.h
│   │   │   ├── b2_revolute_joint.h
│   │   │   ├── b2_rope.h
│   │   │   ├── b2_settings.h
│   │   │   ├── b2_shape.h
│   │   │   ├── b2_stack_allocator.h
│   │   │   ├── b2_time_of_impact.h
│   │   │   ├── b2_time_step.h
│   │   │   ├── b2_timer.h
│   │   │   ├── b2_types.h
│   │   │   ├── b2_weld_joint.h
│   │   │   ├── b2_wheel_joint.h
│   │   │   ├── b2_world.h
│   │   │   ├── b2_world_callbacks.h
│   │   │   ├── collision/
│   │   │   │   ├── b2_broad_phase.cpp
│   │   │   │   ├── b2_chain_shape.cpp
│   │   │   │   ├── b2_circle_shape.cpp
│   │   │   │   ├── b2_collide_circle.cpp
│   │   │   │   ├── b2_collide_edge.cpp
│   │   │   │   ├── b2_collide_polygon.cpp
│   │   │   │   ├── b2_collision.cpp
│   │   │   │   ├── b2_distance.cpp
│   │   │   │   ├── b2_dynamic_tree.cpp
│   │   │   │   ├── b2_edge_shape.cpp
│   │   │   │   ├── b2_polygon_shape.cpp
│   │   │   │   └── b2_time_of_impact.cpp
│   │   │   ├── common/
│   │   │   │   ├── b2_block_allocator.cpp
│   │   │   │   ├── b2_draw.cpp
│   │   │   │   ├── b2_math.cpp
│   │   │   │   ├── b2_settings.cpp
│   │   │   │   ├── b2_stack_allocator.cpp
│   │   │   │   └── b2_timer.cpp
│   │   │   ├── dynamics/
│   │   │   │   ├── b2_body.cpp
│   │   │   │   ├── b2_chain_circle_contact.cpp
│   │   │   │   ├── b2_chain_circle_contact.h
│   │   │   │   ├── b2_chain_polygon_contact.cpp
│   │   │   │   ├── b2_chain_polygon_contact.h
│   │   │   │   ├── b2_circle_contact.cpp
│   │   │   │   ├── b2_circle_contact.h
│   │   │   │   ├── b2_contact.cpp
│   │   │   │   ├── b2_contact_manager.cpp
│   │   │   │   ├── b2_contact_solver.cpp
│   │   │   │   ├── b2_contact_solver.h
│   │   │   │   ├── b2_distance_joint.cpp
│   │   │   │   ├── b2_edge_circle_contact.cpp
│   │   │   │   ├── b2_edge_circle_contact.h
│   │   │   │   ├── b2_edge_polygon_contact.cpp
│   │   │   │   ├── b2_edge_polygon_contact.h
│   │   │   │   ├── b2_fixture.cpp
│   │   │   │   ├── b2_friction_joint.cpp
│   │   │   │   ├── b2_gear_joint.cpp
│   │   │   │   ├── b2_island.cpp
│   │   │   │   ├── b2_island.h
│   │   │   │   ├── b2_joint.cpp
│   │   │   │   ├── b2_motor_joint.cpp
│   │   │   │   ├── b2_mouse_joint.cpp
│   │   │   │   ├── b2_polygon_circle_contact.cpp
│   │   │   │   ├── b2_polygon_circle_contact.h
│   │   │   │   ├── b2_polygon_contact.cpp
│   │   │   │   ├── b2_polygon_contact.h
│   │   │   │   ├── b2_prismatic_joint.cpp
│   │   │   │   ├── b2_pulley_joint.cpp
│   │   │   │   ├── b2_revolute_joint.cpp
│   │   │   │   ├── b2_weld_joint.cpp
│   │   │   │   ├── b2_wheel_joint.cpp
│   │   │   │   ├── b2_world.cpp
│   │   │   │   └── b2_world_callbacks.cpp
│   │   │   └── rope/
│   │   │       └── b2_rope.cpp
│   │   ├── ddsparse/
│   │   │   ├── ddsinfo.h
│   │   │   ├── ddsparse.cpp
│   │   │   └── ddsparse.h
│   │   ├── dr/
│   │   │   ├── dr_flac.h
│   │   │   └── dr_mp3.h
│   │   ├── enet/
│   │   │   ├── enet.cpp
│   │   │   ├── libenet/
│   │   │   │   ├── ChangeLog
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README
│   │   │   │   ├── callbacks.c
│   │   │   │   ├── compress.c
│   │   │   │   ├── host.c
│   │   │   │   ├── include/
│   │   │   │   │   └── enet/
│   │   │   │   │       ├── callbacks.h
│   │   │   │   │       ├── enet.h
│   │   │   │   │       ├── list.h
│   │   │   │   │       ├── protocol.h
│   │   │   │   │       ├── time.h
│   │   │   │   │       ├── types.h
│   │   │   │   │       ├── unix.h
│   │   │   │   │       ├── utility.h
│   │   │   │   │       └── win32.h
│   │   │   │   ├── list.c
│   │   │   │   ├── packet.c
│   │   │   │   ├── peer.c
│   │   │   │   ├── protocol.c
│   │   │   │   ├── unix.c
│   │   │   │   └── win32.c
│   │   │   └── lua-enet.h
│   │   ├── glad/
│   │   │   ├── glad.cpp
│   │   │   ├── glad.hpp
│   │   │   └── gladfuncs.hpp
│   │   ├── glslang/
│   │   │   ├── SPIRV/
│   │   │   │   ├── GLSL.ext.AMD.h
│   │   │   │   ├── GLSL.ext.ARM.h
│   │   │   │   ├── GLSL.ext.EXT.h
│   │   │   │   ├── GLSL.ext.KHR.h
│   │   │   │   ├── GLSL.ext.NV.h
│   │   │   │   ├── GLSL.ext.QCOM.h
│   │   │   │   ├── GLSL.std.450.h
│   │   │   │   ├── GlslangToSpv.cpp
│   │   │   │   ├── GlslangToSpv.h
│   │   │   │   ├── InReadableOrder.cpp
│   │   │   │   ├── Logger.cpp
│   │   │   │   ├── Logger.h
│   │   │   │   ├── NonSemanticDebugPrintf.h
│   │   │   │   ├── NonSemanticShaderDebugInfo100.h
│   │   │   │   ├── SPVRemapper.cpp
│   │   │   │   ├── SPVRemapper.h
│   │   │   │   ├── SpvBuilder.cpp
│   │   │   │   ├── SpvBuilder.h
│   │   │   │   ├── SpvPostProcess.cpp
│   │   │   │   ├── SpvTools.cpp
│   │   │   │   ├── SpvTools.h
│   │   │   │   ├── bitutils.h
│   │   │   │   ├── disassemble.cpp
│   │   │   │   ├── disassemble.h
│   │   │   │   ├── doc.cpp
│   │   │   │   ├── doc.h
│   │   │   │   ├── hex_float.h
│   │   │   │   ├── spirv.hpp11
│   │   │   │   ├── spvIR.h
│   │   │   │   └── spvUtil.h
│   │   │   └── glslang/
│   │   │       ├── ExtensionHeaders/
│   │   │       │   └── GL_EXT_shader_realtime_clock.glsl
│   │   │       ├── GenericCodeGen/
│   │   │       │   ├── CodeGen.cpp
│   │   │       │   └── Link.cpp
│   │   │       ├── Include/
│   │   │       │   ├── BaseTypes.h
│   │   │       │   ├── Common.h
│   │   │       │   ├── ConstantUnion.h
│   │   │       │   ├── InfoSink.h
│   │   │       │   ├── InitializeGlobals.h
│   │   │       │   ├── PoolAlloc.h
│   │   │       │   ├── ResourceLimits.h
│   │   │       │   ├── ShHandle.h
│   │   │       │   ├── SpirvIntrinsics.h
│   │   │       │   ├── Types.h
│   │   │       │   ├── arrays.h
│   │   │       │   ├── intermediate.h
│   │   │       │   └── visibility.h
│   │   │       ├── MachineIndependent/
│   │   │       │   ├── Constant.cpp
│   │   │       │   ├── InfoSink.cpp
│   │   │       │   ├── Initialize.cpp
│   │   │       │   ├── Initialize.h
│   │   │       │   ├── IntermTraverse.cpp
│   │   │       │   ├── Intermediate.cpp
│   │   │       │   ├── LiveTraverser.h
│   │   │       │   ├── ParseContextBase.cpp
│   │   │       │   ├── ParseHelper.cpp
│   │   │       │   ├── ParseHelper.h
│   │   │       │   ├── PoolAlloc.cpp
│   │   │       │   ├── RemoveTree.cpp
│   │   │       │   ├── RemoveTree.h
│   │   │       │   ├── Scan.cpp
│   │   │       │   ├── Scan.h
│   │   │       │   ├── ScanContext.h
│   │   │       │   ├── ShaderLang.cpp
│   │   │       │   ├── SpirvIntrinsics.cpp
│   │   │       │   ├── SymbolTable.cpp
│   │   │       │   ├── SymbolTable.h
│   │   │       │   ├── Versions.cpp
│   │   │       │   ├── Versions.h
│   │   │       │   ├── attribute.cpp
│   │   │       │   ├── attribute.h
│   │   │       │   ├── gl_types.h
│   │   │       │   ├── glslang_tab.cpp
│   │   │       │   ├── glslang_tab.cpp.h
│   │   │       │   ├── intermOut.cpp
│   │   │       │   ├── iomapper.cpp
│   │   │       │   ├── iomapper.h
│   │   │       │   ├── limits.cpp
│   │   │       │   ├── linkValidate.cpp
│   │   │       │   ├── localintermediate.h
│   │   │       │   ├── parseConst.cpp
│   │   │       │   ├── parseVersions.h
│   │   │       │   ├── pch.h
│   │   │       │   ├── preprocessor/
│   │   │       │   │   ├── Pp.cpp
│   │   │       │   │   ├── PpAtom.cpp
│   │   │       │   │   ├── PpContext.cpp
│   │   │       │   │   ├── PpContext.h
│   │   │       │   │   ├── PpScanner.cpp
│   │   │       │   │   ├── PpTokens.cpp
│   │   │       │   │   └── PpTokens.h
│   │   │       │   ├── propagateNoContraction.cpp
│   │   │       │   ├── propagateNoContraction.h
│   │   │       │   ├── reflection.cpp
│   │   │       │   ├── reflection.h
│   │   │       │   └── span.h
│   │   │       ├── OSDependent/
│   │   │       │   ├── Unix/
│   │   │       │   │   └── ossource.cpp
│   │   │       │   ├── Web/
│   │   │       │   │   ├── glslang.after.js
│   │   │       │   │   ├── glslang.js.cpp
│   │   │       │   │   └── glslang.pre.js
│   │   │       │   ├── Windows/
│   │   │       │   │   └── ossource.cpp
│   │   │       │   └── osinclude.h
│   │   │       ├── Public/
│   │   │       │   ├── ResourceLimits.h
│   │   │       │   └── ShaderLang.h
│   │   │       ├── ResourceLimits/
│   │   │       │   └── ResourceLimits.cpp
│   │   │       └── build_info.h
│   │   ├── lodepng/
│   │   │   ├── lodepng.cpp
│   │   │   └── lodepng.h
│   │   ├── lua53/
│   │   │   ├── lprefix.h
│   │   │   ├── lstrlib.c
│   │   │   ├── lstrlib.h
│   │   │   ├── lutf8lib.c
│   │   │   └── lutf8lib.h
│   │   ├── luahttps/
│   │   │   ├── Android.mk
│   │   │   ├── java.txt
│   │   │   ├── license.txt
│   │   │   └── src/
│   │   │       ├── android/
│   │   │       │   ├── AndroidClient.cpp
│   │   │       │   ├── AndroidClient.h
│   │   │       │   └── java/
│   │   │       │       └── org/
│   │   │       │           └── love2d/
│   │   │       │               └── luahttps/
│   │   │       │                   └── LuaHTTPS.java
│   │   │       ├── apple/
│   │   │       │   ├── NSURLClient.h
│   │   │       │   └── NSURLClient.mm
│   │   │       ├── common/
│   │   │       │   ├── Connection.h
│   │   │       │   ├── ConnectionClient.h
│   │   │       │   ├── HTTPRequest.cpp
│   │   │       │   ├── HTTPRequest.h
│   │   │       │   ├── HTTPS.cpp
│   │   │       │   ├── HTTPS.h
│   │   │       │   ├── HTTPSClient.cpp
│   │   │       │   ├── HTTPSClient.h
│   │   │       │   ├── LibraryLoader.h
│   │   │       │   ├── PlaintextConnection.cpp
│   │   │       │   ├── PlaintextConnection.h
│   │   │       │   └── config.h
│   │   │       ├── generic/
│   │   │       │   ├── CurlClient.cpp
│   │   │       │   ├── CurlClient.h
│   │   │       │   ├── LinktimeLibraryLoader.cpp
│   │   │       │   ├── OpenSSLConnection.cpp
│   │   │       │   ├── OpenSSLConnection.h
│   │   │       │   └── UnixLibraryLoader.cpp
│   │   │       ├── lua/
│   │   │       │   └── main.cpp
│   │   │       └── windows/
│   │   │           ├── SChannelConnection.cpp
│   │   │           ├── SChannelConnection.h
│   │   │           ├── WinINetClient.cpp
│   │   │           ├── WinINetClient.h
│   │   │           └── WindowsLibraryLoader.cpp
│   │   ├── luasocket/
│   │   │   ├── libluasocket/
│   │   │   │   ├── auxiliar.c
│   │   │   │   ├── auxiliar.h
│   │   │   │   ├── buffer.c
│   │   │   │   ├── buffer.h
│   │   │   │   ├── compat.c
│   │   │   │   ├── compat.h
│   │   │   │   ├── except.c
│   │   │   │   ├── except.h
│   │   │   │   ├── ftp.lua
│   │   │   │   ├── ftp.lua.h
│   │   │   │   ├── headers.lua
│   │   │   │   ├── headers.lua.h
│   │   │   │   ├── http.lua
│   │   │   │   ├── http.lua.h
│   │   │   │   ├── inet.c
│   │   │   │   ├── inet.h
│   │   │   │   ├── io.c
│   │   │   │   ├── io.h
│   │   │   │   ├── ltn12.lua
│   │   │   │   ├── ltn12.lua.h
│   │   │   │   ├── luasocket.c
│   │   │   │   ├── luasocket.h
│   │   │   │   ├── makefile
│   │   │   │   ├── mbox.lua
│   │   │   │   ├── mbox.lua.h
│   │   │   │   ├── mime.c
│   │   │   │   ├── mime.h
│   │   │   │   ├── mime.lua
│   │   │   │   ├── mime.lua.h
│   │   │   │   ├── options.c
│   │   │   │   ├── options.h
│   │   │   │   ├── pierror.h
│   │   │   │   ├── select.c
│   │   │   │   ├── select.h
│   │   │   │   ├── serial.c
│   │   │   │   ├── smtp.lua
│   │   │   │   ├── smtp.lua.h
│   │   │   │   ├── socket.h
│   │   │   │   ├── socket.lua
│   │   │   │   ├── socket.lua.h
│   │   │   │   ├── tcp.c
│   │   │   │   ├── tcp.h
│   │   │   │   ├── timeout.c
│   │   │   │   ├── timeout.h
│   │   │   │   ├── tp.lua
│   │   │   │   ├── tp.lua.h
│   │   │   │   ├── udp.c
│   │   │   │   ├── udp.h
│   │   │   │   ├── unix.c
│   │   │   │   ├── unix.h
│   │   │   │   ├── unixdgram.c
│   │   │   │   ├── unixdgram.h
│   │   │   │   ├── unixstream.c
│   │   │   │   ├── unixstream.h
│   │   │   │   ├── url.lua
│   │   │   │   ├── url.lua.h
│   │   │   │   ├── usocket.c
│   │   │   │   ├── usocket.h
│   │   │   │   ├── wsocket.c
│   │   │   │   └── wsocket.h
│   │   │   ├── luasocket.cpp
│   │   │   └── luasocket.h
│   │   ├── lz4/
│   │   │   ├── lz4.c
│   │   │   ├── lz4.h
│   │   │   ├── lz4hc.c
│   │   │   ├── lz4hc.h
│   │   │   └── lz4opt.h
│   │   ├── noise1234/
│   │   │   ├── noise1234.cpp
│   │   │   ├── noise1234.h
│   │   │   ├── simplexnoise1234.cpp
│   │   │   └── simplexnoise1234.h
│   │   ├── physfs/
│   │   │   ├── physfs.c
│   │   │   ├── physfs.h
│   │   │   ├── physfs_archiver_7z.c
│   │   │   ├── physfs_archiver_dir.c
│   │   │   ├── physfs_archiver_grp.c
│   │   │   ├── physfs_archiver_hog.c
│   │   │   ├── physfs_archiver_iso9660.c
│   │   │   ├── physfs_archiver_mvl.c
│   │   │   ├── physfs_archiver_qpak.c
│   │   │   ├── physfs_archiver_slb.c
│   │   │   ├── physfs_archiver_unpacked.c
│   │   │   ├── physfs_archiver_vdf.c
│   │   │   ├── physfs_archiver_wad.c
│   │   │   ├── physfs_archiver_zip.c
│   │   │   ├── physfs_byteorder.c
│   │   │   ├── physfs_casefolding.h
│   │   │   ├── physfs_internal.h
│   │   │   ├── physfs_lzmasdk.h
│   │   │   ├── physfs_miniz.h
│   │   │   ├── physfs_platform_android.c
│   │   │   ├── physfs_platform_apple.m
│   │   │   ├── physfs_platform_haiku.cpp
│   │   │   ├── physfs_platform_os2.c
│   │   │   ├── physfs_platform_posix.c
│   │   │   ├── physfs_platform_qnx.c
│   │   │   ├── physfs_platform_unix.c
│   │   │   ├── physfs_platform_windows.c
│   │   │   ├── physfs_platform_winrt.cpp
│   │   │   ├── physfs_platforms.h
│   │   │   └── physfs_unicode.c
│   │   ├── spirv_cross/
│   │   │   ├── GLSL.std.450.h
│   │   │   ├── include/
│   │   │   │   └── spirv_cross/
│   │   │   │       ├── barrier.hpp
│   │   │   │       ├── external_interface.h
│   │   │   │       ├── image.hpp
│   │   │   │       ├── internal_interface.hpp
│   │   │   │       ├── sampler.hpp
│   │   │   │       └── thread_group.hpp
│   │   │   ├── spirv.hpp
│   │   │   ├── spirv_cfg.cpp
│   │   │   ├── spirv_cfg.hpp
│   │   │   ├── spirv_common.hpp
│   │   │   ├── spirv_cpp.cpp
│   │   │   ├── spirv_cpp.hpp
│   │   │   ├── spirv_cross.cpp
│   │   │   ├── spirv_cross.hpp
│   │   │   ├── spirv_cross_containers.hpp
│   │   │   ├── spirv_cross_error_handling.hpp
│   │   │   ├── spirv_cross_parsed_ir.cpp
│   │   │   ├── spirv_cross_parsed_ir.hpp
│   │   │   ├── spirv_cross_util.cpp
│   │   │   ├── spirv_cross_util.hpp
│   │   │   ├── spirv_glsl.cpp
│   │   │   ├── spirv_glsl.hpp
│   │   │   ├── spirv_hlsl.cpp
│   │   │   ├── spirv_hlsl.hpp
│   │   │   ├── spirv_msl.cpp
│   │   │   ├── spirv_msl.hpp
│   │   │   ├── spirv_parser.cpp
│   │   │   ├── spirv_parser.hpp
│   │   │   ├── spirv_reflect.cpp
│   │   │   └── spirv_reflect.hpp
│   │   ├── stb/
│   │   │   └── stb_image.h
│   │   ├── tinyexr/
│   │   │   └── tinyexr.h
│   │   ├── utf8/
│   │   │   ├── utf8/
│   │   │   │   ├── checked.h
│   │   │   │   ├── core.h
│   │   │   │   └── unchecked.h
│   │   │   └── utf8.h
│   │   ├── vk_video/
│   │   │   ├── vulkan_video_codec_av1std.h
│   │   │   ├── vulkan_video_codec_av1std_decode.h
│   │   │   ├── vulkan_video_codec_av1std_encode.h
│   │   │   ├── vulkan_video_codec_h264std.h
│   │   │   ├── vulkan_video_codec_h264std_decode.h
│   │   │   ├── vulkan_video_codec_h264std_encode.h
│   │   │   ├── vulkan_video_codec_h265std.h
│   │   │   ├── vulkan_video_codec_h265std_decode.h
│   │   │   ├── vulkan_video_codec_h265std_encode.h
│   │   │   └── vulkan_video_codecs_common.h
│   │   ├── vma/
│   │   │   └── vk_mem_alloc.h
│   │   ├── volk/
│   │   │   ├── volk.c
│   │   │   └── volk.h
│   │   ├── vulkanheaders/
│   │   │   ├── vk_icd.h
│   │   │   ├── vk_layer.h
│   │   │   ├── vk_platform.h
│   │   │   ├── vulkan.h
│   │   │   ├── vulkan.hpp
│   │   │   ├── vulkan_android.h
│   │   │   ├── vulkan_beta.h
│   │   │   ├── vulkan_core.h
│   │   │   ├── vulkan_directfb.h
│   │   │   ├── vulkan_enums.hpp
│   │   │   ├── vulkan_extension_inspection.hpp
│   │   │   ├── vulkan_format_traits.hpp
│   │   │   ├── vulkan_fuchsia.h
│   │   │   ├── vulkan_funcs.hpp
│   │   │   ├── vulkan_ggp.h
│   │   │   ├── vulkan_handles.hpp
│   │   │   ├── vulkan_hash.hpp
│   │   │   ├── vulkan_hpp_macros.hpp
│   │   │   ├── vulkan_ios.h
│   │   │   ├── vulkan_macos.h
│   │   │   ├── vulkan_metal.h
│   │   │   ├── vulkan_raii.hpp
│   │   │   ├── vulkan_screen.h
│   │   │   ├── vulkan_shared.hpp
│   │   │   ├── vulkan_static_assertions.hpp
│   │   │   ├── vulkan_structs.hpp
│   │   │   ├── vulkan_to_string.hpp
│   │   │   ├── vulkan_vi.h
│   │   │   ├── vulkan_video.hpp
│   │   │   ├── vulkan_wayland.h
│   │   │   ├── vulkan_win32.h
│   │   │   ├── vulkan_xcb.h
│   │   │   ├── vulkan_xlib.h
│   │   │   └── vulkan_xlib_xrandr.h
│   │   └── xxHash/
│   │       ├── xxhash.c
│   │       └── xxhash.h
│   ├── love.cpp
│   ├── modules/
│   │   ├── audio/
│   │   │   ├── Audio.cpp
│   │   │   ├── Audio.h
│   │   │   ├── Effect.cpp
│   │   │   ├── Effect.h
│   │   │   ├── Filter.cpp
│   │   │   ├── Filter.h
│   │   │   ├── RecordingDevice.cpp
│   │   │   ├── RecordingDevice.h
│   │   │   ├── Source.cpp
│   │   │   ├── Source.h
│   │   │   ├── null/
│   │   │   │   ├── Audio.cpp
│   │   │   │   ├── Audio.h
│   │   │   │   ├── RecordingDevice.cpp
│   │   │   │   ├── RecordingDevice.h
│   │   │   │   ├── Source.cpp
│   │   │   │   └── Source.h
│   │   │   ├── openal/
│   │   │   │   ├── Audio.cpp
│   │   │   │   ├── Audio.h
│   │   │   │   ├── Effect.cpp
│   │   │   │   ├── Effect.h
│   │   │   │   ├── Filter.cpp
│   │   │   │   ├── Filter.h
│   │   │   │   ├── Pool.cpp
│   │   │   │   ├── Pool.h
│   │   │   │   ├── RecordingDevice.cpp
│   │   │   │   ├── RecordingDevice.h
│   │   │   │   ├── Source.cpp
│   │   │   │   └── Source.h
│   │   │   ├── wrap_Audio.cpp
│   │   │   ├── wrap_Audio.h
│   │   │   ├── wrap_RecordingDevice.cpp
│   │   │   ├── wrap_RecordingDevice.h
│   │   │   ├── wrap_Source.cpp
│   │   │   └── wrap_Source.h
│   │   ├── data/
│   │   │   ├── ByteData.cpp
│   │   │   ├── ByteData.h
│   │   │   ├── CompressedData.cpp
│   │   │   ├── CompressedData.h
│   │   │   ├── Compressor.cpp
│   │   │   ├── Compressor.h
│   │   │   ├── DataModule.cpp
│   │   │   ├── DataModule.h
│   │   │   ├── DataStream.cpp
│   │   │   ├── DataStream.h
│   │   │   ├── DataView.cpp
│   │   │   ├── DataView.h
│   │   │   ├── HashFunction.cpp
│   │   │   ├── HashFunction.h
│   │   │   ├── wrap_ByteData.cpp
│   │   │   ├── wrap_ByteData.h
│   │   │   ├── wrap_CompressedData.cpp
│   │   │   ├── wrap_CompressedData.h
│   │   │   ├── wrap_Data.cpp
│   │   │   ├── wrap_Data.h
│   │   │   ├── wrap_Data.lua
│   │   │   ├── wrap_DataModule.cpp
│   │   │   ├── wrap_DataModule.h
│   │   │   ├── wrap_DataView.cpp
│   │   │   └── wrap_DataView.h
│   │   ├── event/
│   │   │   ├── Event.cpp
│   │   │   ├── Event.h
│   │   │   ├── sdl/
│   │   │   │   ├── Event.cpp
│   │   │   │   └── Event.h
│   │   │   ├── wrap_Event.cpp
│   │   │   ├── wrap_Event.h
│   │   │   └── wrap_Event.lua
│   │   ├── filesystem/
│   │   │   ├── File.cpp
│   │   │   ├── File.h
│   │   │   ├── FileData.cpp
│   │   │   ├── FileData.h
│   │   │   ├── Filesystem.cpp
│   │   │   ├── Filesystem.h
│   │   │   ├── NativeFile.cpp
│   │   │   ├── NativeFile.h
│   │   │   ├── physfs/
│   │   │   │   ├── File.cpp
│   │   │   │   ├── File.h
│   │   │   │   ├── Filesystem.cpp
│   │   │   │   ├── Filesystem.h
│   │   │   │   ├── PhysfsIo.cpp
│   │   │   │   └── PhysfsIo.h
│   │   │   ├── wrap_File.cpp
│   │   │   ├── wrap_File.h
│   │   │   ├── wrap_FileData.cpp
│   │   │   ├── wrap_FileData.h
│   │   │   ├── wrap_Filesystem.cpp
│   │   │   ├── wrap_Filesystem.h
│   │   │   ├── wrap_NativeFile.cpp
│   │   │   └── wrap_NativeFile.h
│   │   ├── font/
│   │   │   ├── BMFontRasterizer.cpp
│   │   │   ├── BMFontRasterizer.h
│   │   │   ├── Font.cpp
│   │   │   ├── Font.h
│   │   │   ├── GenericShaper.cpp
│   │   │   ├── GenericShaper.h
│   │   │   ├── GlyphData.cpp
│   │   │   ├── GlyphData.h
│   │   │   ├── ImageRasterizer.cpp
│   │   │   ├── ImageRasterizer.h
│   │   │   ├── NotoSans-Regular.ttf.gzip.h
│   │   │   ├── Rasterizer.cpp
│   │   │   ├── Rasterizer.h
│   │   │   ├── TextShaper.cpp
│   │   │   ├── TextShaper.h
│   │   │   ├── TrueTypeRasterizer.cpp
│   │   │   ├── TrueTypeRasterizer.h
│   │   │   ├── freetype/
│   │   │   │   ├── Font.cpp
│   │   │   │   ├── Font.h
│   │   │   │   ├── HarfbuzzShaper.cpp
│   │   │   │   ├── HarfbuzzShaper.h
│   │   │   │   ├── TrueTypeRasterizer.cpp
│   │   │   │   └── TrueTypeRasterizer.h
│   │   │   ├── wrap_Font.cpp
│   │   │   ├── wrap_Font.h
│   │   │   ├── wrap_GlyphData.cpp
│   │   │   ├── wrap_GlyphData.h
│   │   │   ├── wrap_Rasterizer.cpp
│   │   │   └── wrap_Rasterizer.h
│   │   ├── graphics/
│   │   │   ├── Buffer.cpp
│   │   │   ├── Buffer.h
│   │   │   ├── Deprecations.cpp
│   │   │   ├── Deprecations.h
│   │   │   ├── Drawable.cpp
│   │   │   ├── Drawable.h
│   │   │   ├── Font.cpp
│   │   │   ├── Font.h
│   │   │   ├── Graphics.cpp
│   │   │   ├── Graphics.h
│   │   │   ├── GraphicsReadback.cpp
│   │   │   ├── GraphicsReadback.h
│   │   │   ├── Mesh.cpp
│   │   │   ├── Mesh.h
│   │   │   ├── ParticleSystem.cpp
│   │   │   ├── ParticleSystem.h
│   │   │   ├── Polyline.cpp
│   │   │   ├── Polyline.h
│   │   │   ├── Quad.cpp
│   │   │   ├── Quad.h
│   │   │   ├── Resource.h
│   │   │   ├── Shader.cpp
│   │   │   ├── Shader.h
│   │   │   ├── ShaderStage.cpp
│   │   │   ├── ShaderStage.h
│   │   │   ├── SpriteBatch.cpp
│   │   │   ├── SpriteBatch.h
│   │   │   ├── StreamBuffer.cpp
│   │   │   ├── StreamBuffer.h
│   │   │   ├── TextBatch.cpp
│   │   │   ├── TextBatch.h
│   │   │   ├── Texture.cpp
│   │   │   ├── Texture.h
│   │   │   ├── Video.cpp
│   │   │   ├── Video.h
│   │   │   ├── Volatile.cpp
│   │   │   ├── Volatile.h
│   │   │   ├── metal/
│   │   │   │   ├── Buffer.h
│   │   │   │   ├── Buffer.mm
│   │   │   │   ├── Graphics.h
│   │   │   │   ├── Graphics.mm
│   │   │   │   ├── GraphicsReadback.h
│   │   │   │   ├── GraphicsReadback.mm
│   │   │   │   ├── Metal.h
│   │   │   │   ├── Metal.mm
│   │   │   │   ├── Shader.h
│   │   │   │   ├── Shader.mm
│   │   │   │   ├── ShaderStage.h
│   │   │   │   ├── ShaderStage.mm
│   │   │   │   ├── StreamBuffer.h
│   │   │   │   ├── StreamBuffer.mm
│   │   │   │   ├── Texture.h
│   │   │   │   └── Texture.mm
│   │   │   ├── opengl/
│   │   │   │   ├── Buffer.cpp
│   │   │   │   ├── Buffer.h
│   │   │   │   ├── FenceSync.cpp
│   │   │   │   ├── FenceSync.h
│   │   │   │   ├── Graphics.cpp
│   │   │   │   ├── Graphics.h
│   │   │   │   ├── GraphicsReadback.cpp
│   │   │   │   ├── GraphicsReadback.h
│   │   │   │   ├── OpenGL.cpp
│   │   │   │   ├── OpenGL.h
│   │   │   │   ├── Shader.cpp
│   │   │   │   ├── Shader.h
│   │   │   │   ├── ShaderStage.cpp
│   │   │   │   ├── ShaderStage.h
│   │   │   │   ├── StreamBuffer.cpp
│   │   │   │   ├── StreamBuffer.h
│   │   │   │   ├── Texture.cpp
│   │   │   │   └── Texture.h
│   │   │   ├── renderstate.cpp
│   │   │   ├── renderstate.h
│   │   │   ├── vertex.cpp
│   │   │   ├── vertex.h
│   │   │   ├── vulkan/
│   │   │   │   ├── Buffer.cpp
│   │   │   │   ├── Buffer.h
│   │   │   │   ├── Graphics.cpp
│   │   │   │   ├── Graphics.h
│   │   │   │   ├── GraphicsReadback.cpp
│   │   │   │   ├── GraphicsReadback.h
│   │   │   │   ├── Shader.cpp
│   │   │   │   ├── Shader.h
│   │   │   │   ├── ShaderStage.cpp
│   │   │   │   ├── ShaderStage.h
│   │   │   │   ├── StreamBuffer.cpp
│   │   │   │   ├── StreamBuffer.h
│   │   │   │   ├── Texture.cpp
│   │   │   │   ├── Texture.h
│   │   │   │   ├── Vulkan.cpp
│   │   │   │   ├── Vulkan.h
│   │   │   │   └── VulkanWrapper.h
│   │   │   ├── wrap_Buffer.cpp
│   │   │   ├── wrap_Buffer.h
│   │   │   ├── wrap_Font.cpp
│   │   │   ├── wrap_Font.h
│   │   │   ├── wrap_Graphics.cpp
│   │   │   ├── wrap_Graphics.h
│   │   │   ├── wrap_Graphics.lua
│   │   │   ├── wrap_GraphicsReadback.cpp
│   │   │   ├── wrap_GraphicsReadback.h
│   │   │   ├── wrap_Mesh.cpp
│   │   │   ├── wrap_Mesh.h
│   │   │   ├── wrap_ParticleSystem.cpp
│   │   │   ├── wrap_ParticleSystem.h
│   │   │   ├── wrap_Quad.cpp
│   │   │   ├── wrap_Quad.h
│   │   │   ├── wrap_Shader.cpp
│   │   │   ├── wrap_Shader.h
│   │   │   ├── wrap_SpriteBatch.cpp
│   │   │   ├── wrap_SpriteBatch.h
│   │   │   ├── wrap_TextBatch.cpp
│   │   │   ├── wrap_TextBatch.h
│   │   │   ├── wrap_Texture.cpp
│   │   │   ├── wrap_Texture.h
│   │   │   ├── wrap_Video.cpp
│   │   │   ├── wrap_Video.h
│   │   │   └── wrap_Video.lua
│   │   ├── image/
│   │   │   ├── CompressedImageData.cpp
│   │   │   ├── CompressedImageData.h
│   │   │   ├── CompressedSlice.cpp
│   │   │   ├── CompressedSlice.h
│   │   │   ├── FormatHandler.cpp
│   │   │   ├── FormatHandler.h
│   │   │   ├── Image.cpp
│   │   │   ├── Image.h
│   │   │   ├── ImageData.cpp
│   │   │   ├── ImageData.h
│   │   │   ├── ImageDataBase.cpp
│   │   │   ├── ImageDataBase.h
│   │   │   ├── magpie/
│   │   │   │   ├── ASTCHandler.cpp
│   │   │   │   ├── ASTCHandler.h
│   │   │   │   ├── EXRHandler.cpp
│   │   │   │   ├── EXRHandler.h
│   │   │   │   ├── KTXHandler.cpp
│   │   │   │   ├── KTXHandler.h
│   │   │   │   ├── PKMHandler.cpp
│   │   │   │   ├── PKMHandler.h
│   │   │   │   ├── PNGHandler.cpp
│   │   │   │   ├── PNGHandler.h
│   │   │   │   ├── PVRHandler.cpp
│   │   │   │   ├── PVRHandler.h
│   │   │   │   ├── STBHandler.cpp
│   │   │   │   ├── STBHandler.h
│   │   │   │   ├── ddsHandler.cpp
│   │   │   │   └── ddsHandler.h
│   │   │   ├── wrap_CompressedImageData.cpp
│   │   │   ├── wrap_CompressedImageData.h
│   │   │   ├── wrap_Image.cpp
│   │   │   ├── wrap_Image.h
│   │   │   ├── wrap_ImageData.cpp
│   │   │   ├── wrap_ImageData.h
│   │   │   └── wrap_ImageData.lua
│   │   ├── joystick/
│   │   │   ├── Joystick.cpp
│   │   │   ├── Joystick.h
│   │   │   ├── JoystickModule.h
│   │   │   ├── sdl/
│   │   │   │   ├── Joystick.cpp
│   │   │   │   ├── Joystick.h
│   │   │   │   ├── JoystickModule.cpp
│   │   │   │   └── JoystickModule.h
│   │   │   ├── wrap_Joystick.cpp
│   │   │   ├── wrap_Joystick.h
│   │   │   ├── wrap_JoystickModule.cpp
│   │   │   └── wrap_JoystickModule.h
│   │   ├── keyboard/
│   │   │   ├── Keyboard.cpp
│   │   │   ├── Keyboard.h
│   │   │   ├── sdl/
│   │   │   │   ├── Keyboard.cpp
│   │   │   │   └── Keyboard.h
│   │   │   ├── wrap_Keyboard.cpp
│   │   │   └── wrap_Keyboard.h
│   │   ├── love/
│   │   │   ├── arg.lua
│   │   │   ├── boot.lua
│   │   │   ├── callbacks.lua
│   │   │   ├── jitsetup.lua
│   │   │   ├── love.cpp
│   │   │   └── love.h
│   │   ├── math/
│   │   │   ├── BezierCurve.cpp
│   │   │   ├── BezierCurve.h
│   │   │   ├── MathModule.cpp
│   │   │   ├── MathModule.h
│   │   │   ├── RandomGenerator.cpp
│   │   │   ├── RandomGenerator.h
│   │   │   ├── Transform.cpp
│   │   │   ├── Transform.h
│   │   │   ├── wrap_BezierCurve.cpp
│   │   │   ├── wrap_BezierCurve.h
│   │   │   ├── wrap_Math.cpp
│   │   │   ├── wrap_Math.h
│   │   │   ├── wrap_Math.lua
│   │   │   ├── wrap_RandomGenerator.cpp
│   │   │   ├── wrap_RandomGenerator.h
│   │   │   ├── wrap_RandomGenerator.lua
│   │   │   ├── wrap_Transform.cpp
│   │   │   └── wrap_Transform.h
│   │   ├── mouse/
│   │   │   ├── Cursor.cpp
│   │   │   ├── Cursor.h
│   │   │   ├── Mouse.h
│   │   │   ├── sdl/
│   │   │   │   ├── Cursor.cpp
│   │   │   │   ├── Cursor.h
│   │   │   │   ├── Mouse.cpp
│   │   │   │   └── Mouse.h
│   │   │   ├── wrap_Cursor.cpp
│   │   │   ├── wrap_Cursor.h
│   │   │   ├── wrap_Mouse.cpp
│   │   │   └── wrap_Mouse.h
│   │   ├── physics/
│   │   │   ├── Body.cpp
│   │   │   ├── Body.h
│   │   │   ├── Joint.cpp
│   │   │   ├── Joint.h
│   │   │   ├── Shape.cpp
│   │   │   ├── Shape.h
│   │   │   └── box2d/
│   │   │       ├── Body.cpp
│   │   │       ├── Body.h
│   │   │       ├── ChainShape.cpp
│   │   │       ├── ChainShape.h
│   │   │       ├── CircleShape.cpp
│   │   │       ├── CircleShape.h
│   │   │       ├── Contact.cpp
│   │   │       ├── Contact.h
│   │   │       ├── DistanceJoint.cpp
│   │   │       ├── DistanceJoint.h
│   │   │       ├── EdgeShape.cpp
│   │   │       ├── EdgeShape.h
│   │   │       ├── FrictionJoint.cpp
│   │   │       ├── FrictionJoint.h
│   │   │       ├── GearJoint.cpp
│   │   │       ├── GearJoint.h
│   │   │       ├── Joint.cpp
│   │   │       ├── Joint.h
│   │   │       ├── MotorJoint.cpp
│   │   │       ├── MotorJoint.h
│   │   │       ├── MouseJoint.cpp
│   │   │       ├── MouseJoint.h
│   │   │       ├── Physics.cpp
│   │   │       ├── Physics.h
│   │   │       ├── PolygonShape.cpp
│   │   │       ├── PolygonShape.h
│   │   │       ├── PrismaticJoint.cpp
│   │   │       ├── PrismaticJoint.h
│   │   │       ├── PulleyJoint.cpp
│   │   │       ├── PulleyJoint.h
│   │   │       ├── RevoluteJoint.cpp
│   │   │       ├── RevoluteJoint.h
│   │   │       ├── RopeJoint.cpp
│   │   │       ├── RopeJoint.h
│   │   │       ├── Shape.cpp
│   │   │       ├── Shape.h
│   │   │       ├── WeldJoint.cpp
│   │   │       ├── WeldJoint.h
│   │   │       ├── WheelJoint.cpp
│   │   │       ├── WheelJoint.h
│   │   │       ├── World.cpp
│   │   │       ├── World.h
│   │   │       ├── wrap_Body.cpp
│   │   │       ├── wrap_Body.h
│   │   │       ├── wrap_ChainShape.cpp
│   │   │       ├── wrap_ChainShape.h
│   │   │       ├── wrap_CircleShape.cpp
│   │   │       ├── wrap_CircleShape.h
│   │   │       ├── wrap_Contact.cpp
│   │   │       ├── wrap_Contact.h
│   │   │       ├── wrap_DistanceJoint.cpp
│   │   │       ├── wrap_DistanceJoint.h
│   │   │       ├── wrap_EdgeShape.cpp
│   │   │       ├── wrap_EdgeShape.h
│   │   │       ├── wrap_FrictionJoint.cpp
│   │   │       ├── wrap_FrictionJoint.h
│   │   │       ├── wrap_GearJoint.cpp
│   │   │       ├── wrap_GearJoint.h
│   │   │       ├── wrap_Joint.cpp
│   │   │       ├── wrap_Joint.h
│   │   │       ├── wrap_MotorJoint.cpp
│   │   │       ├── wrap_MotorJoint.h
│   │   │       ├── wrap_MouseJoint.cpp
│   │   │       ├── wrap_MouseJoint.h
│   │   │       ├── wrap_Physics.cpp
│   │   │       ├── wrap_Physics.h
│   │   │       ├── wrap_PolygonShape.cpp
│   │   │       ├── wrap_PolygonShape.h
│   │   │       ├── wrap_PrismaticJoint.cpp
│   │   │       ├── wrap_PrismaticJoint.h
│   │   │       ├── wrap_PulleyJoint.cpp
│   │   │       ├── wrap_PulleyJoint.h
│   │   │       ├── wrap_RevoluteJoint.cpp
│   │   │       ├── wrap_RevoluteJoint.h
│   │   │       ├── wrap_RopeJoint.cpp
│   │   │       ├── wrap_RopeJoint.h
│   │   │       ├── wrap_Shape.cpp
│   │   │       ├── wrap_Shape.h
│   │   │       ├── wrap_WeldJoint.cpp
│   │   │       ├── wrap_WeldJoint.h
│   │   │       ├── wrap_WheelJoint.cpp
│   │   │       ├── wrap_WheelJoint.h
│   │   │       ├── wrap_World.cpp
│   │   │       └── wrap_World.h
│   │   ├── sensor/
│   │   │   ├── Sensor.cpp
│   │   │   ├── Sensor.h
│   │   │   ├── sdl/
│   │   │   │   ├── Sensor.cpp
│   │   │   │   └── Sensor.h
│   │   │   ├── wrap_Sensor.cpp
│   │   │   └── wrap_Sensor.h
│   │   ├── sound/
│   │   │   ├── Decoder.cpp
│   │   │   ├── Decoder.h
│   │   │   ├── Sound.cpp
│   │   │   ├── Sound.h
│   │   │   ├── SoundData.cpp
│   │   │   ├── SoundData.h
│   │   │   ├── lullaby/
│   │   │   │   ├── CoreAudioDecoder.cpp
│   │   │   │   ├── CoreAudioDecoder.h
│   │   │   │   ├── FLACDecoder.cpp
│   │   │   │   ├── FLACDecoder.h
│   │   │   │   ├── MP3Decoder.cpp
│   │   │   │   ├── MP3Decoder.h
│   │   │   │   ├── ModPlugDecoder.cpp
│   │   │   │   ├── ModPlugDecoder.h
│   │   │   │   ├── Sound.cpp
│   │   │   │   ├── Sound.h
│   │   │   │   ├── VorbisDecoder.cpp
│   │   │   │   ├── VorbisDecoder.h
│   │   │   │   ├── WaveDecoder.cpp
│   │   │   │   └── WaveDecoder.h
│   │   │   ├── wrap_Decoder.cpp
│   │   │   ├── wrap_Decoder.h
│   │   │   ├── wrap_Sound.cpp
│   │   │   ├── wrap_Sound.h
│   │   │   ├── wrap_SoundData.cpp
│   │   │   ├── wrap_SoundData.h
│   │   │   └── wrap_SoundData.lua
│   │   ├── system/
│   │   │   ├── System.cpp
│   │   │   ├── System.h
│   │   │   ├── sdl/
│   │   │   │   ├── System.cpp
│   │   │   │   └── System.h
│   │   │   ├── wrap_System.cpp
│   │   │   └── wrap_System.h
│   │   ├── thread/
│   │   │   ├── Channel.cpp
│   │   │   ├── Channel.h
│   │   │   ├── LuaThread.cpp
│   │   │   ├── LuaThread.h
│   │   │   ├── Thread.h
│   │   │   ├── ThreadModule.cpp
│   │   │   ├── ThreadModule.h
│   │   │   ├── sdl/
│   │   │   │   ├── Thread.cpp
│   │   │   │   ├── Thread.h
│   │   │   │   ├── threads.cpp
│   │   │   │   └── threads.h
│   │   │   ├── threads.cpp
│   │   │   ├── threads.h
│   │   │   ├── wrap_Channel.cpp
│   │   │   ├── wrap_Channel.h
│   │   │   ├── wrap_LuaThread.cpp
│   │   │   ├── wrap_LuaThread.h
│   │   │   ├── wrap_ThreadModule.cpp
│   │   │   └── wrap_ThreadModule.h
│   │   ├── timer/
│   │   │   ├── Timer.cpp
│   │   │   ├── Timer.h
│   │   │   ├── wrap_Timer.cpp
│   │   │   └── wrap_Timer.h
│   │   ├── touch/
│   │   │   ├── Touch.cpp
│   │   │   ├── Touch.h
│   │   │   ├── sdl/
│   │   │   │   ├── Touch.cpp
│   │   │   │   └── Touch.h
│   │   │   ├── wrap_Touch.cpp
│   │   │   └── wrap_Touch.h
│   │   ├── video/
│   │   │   ├── Video.h
│   │   │   ├── VideoStream.cpp
│   │   │   ├── VideoStream.h
│   │   │   ├── theora/
│   │   │   │   ├── OggDemuxer.cpp
│   │   │   │   ├── OggDemuxer.h
│   │   │   │   ├── TheoraVideoStream.cpp
│   │   │   │   ├── TheoraVideoStream.h
│   │   │   │   ├── Video.cpp
│   │   │   │   └── Video.h
│   │   │   ├── wrap_Video.cpp
│   │   │   ├── wrap_Video.h
│   │   │   ├── wrap_VideoStream.cpp
│   │   │   └── wrap_VideoStream.h
│   │   └── window/
│   │       ├── Window.cpp
│   │       ├── Window.h
│   │       ├── sdl/
│   │       │   ├── Window.cpp
│   │       │   └── Window.h
│   │       ├── wrap_Window.cpp
│   │       └── wrap_Window.h
│   └── scripts/
│       ├── auto.lua
│       ├── nogame.lua
│       └── nogame.lua.h
└── testing/
    ├── classes/
    │   ├── TestMethod.lua
    │   ├── TestModule.lua
    │   └── TestSuite.lua
    ├── conf.lua
    ├── examples/
    │   ├── lovetest_runAllTests.html
    │   ├── lovetest_runAllTests.md
    │   └── lovetest_runAllTests.xml
    ├── main.lua
    ├── output/
    │   ├── actual/
    │   │   └── notes.txt
    │   ├── difference/
    │   │   └── notes.txt
    │   ├── expected/
    │   │   └── notes.txt
    │   └── notes.txt
    ├── readme.md
    ├── resources/
    │   ├── alsoft.conf
    │   ├── click.ogg
    │   ├── clickmono.ogg
    │   ├── love.dxt1
    │   ├── mappings.txt
    │   ├── pop.ogg
    │   ├── sample.ogv
    │   ├── test.txt
    │   ├── tone.ogg
    │   └── vk_layer_settings.txt
    ├── tests/
    │   ├── audio.lua
    │   ├── data.lua
    │   ├── event.lua
    │   ├── filesystem.lua
    │   ├── font.lua
    │   ├── graphics.lua
    │   ├── image.lua
    │   ├── joystick.lua
    │   ├── keyboard.lua
    │   ├── love.lua
    │   ├── math.lua
    │   ├── mouse.lua
    │   ├── physics.lua
    │   ├── sensor.lua
    │   ├── sound.lua
    │   ├── system.lua
    │   ├── thread.lua
    │   ├── timer.lua
    │   ├── touch.lua
    │   ├── video.lua
    │   └── window.lua
    └── todo.md
Download .txt
Showing preview only (3,583K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (29837 symbols across 922 files)

FILE: src/common/Color.h
  function namespace (line 24) | namespace love
  type Color32 (line 138) | typedef ColorT<unsigned char> Color32;
  type ColorT (line 139) | typedef ColorT<float> Colorf;
  type ColorT (line 140) | typedef ColorT<double> ColorD;
  function Color32 (line 142) | inline Color32 toColor32(Colorf cf)
  function Colorf (line 150) | inline Colorf toColorf(Color32 c)

FILE: src/common/Data.cpp
  type love (line 25) | namespace love
    function createMutex (line 35) | static void createMutex(love::thread::Mutex **mutexAddress)

FILE: src/common/Data.h
  function namespace (line 31) | namespace love

FILE: src/common/EnumMap.h
  function namespace (line 26) | namespace love

FILE: src/common/Exception.cpp
  type love (line 26) | namespace love

FILE: src/common/Exception.h
  function namespace (line 30) | namespace love

FILE: src/common/Matrix.cpp
  type love (line 36) | namespace love
    function Matrix4 (line 167) | Matrix4 Matrix4::operator * (const Matrix4 &m) const
    function Vector4 (line 192) | Vector4 Matrix4::getRow(int r) const
    function Vector4 (line 205) | Vector4 Matrix4::getColumn(int c) const
    function Matrix4 (line 318) | Matrix4 Matrix4::inverse() const
    function Matrix4 (line 444) | Matrix4 Matrix4::ortho(float left, float right, float bottom, float to...
    function Matrix4 (line 459) | Matrix4 Matrix4::perspective(float verticalfov, float aspect, float ne...
    function Matrix3 (line 521) | Matrix3 Matrix3::operator * (const love::Matrix3 &m) const
    function Matrix3 (line 551) | Matrix3 Matrix3::transposedInverse() const

FILE: src/common/Matrix.h
  function class (line 36) | class Matrix4

FILE: src/common/Module.cpp
  function ModuleRegistry (line 40) | ModuleRegistry &registryInstance()
  function freeEmptyRegistry (line 48) | void freeEmptyRegistry()
  type love (line 59) | namespace love
    function Module (line 133) | Module *Module::getInstance(const std::string &name)

FILE: src/common/Module.h
  function namespace (line 28) | namespace love

FILE: src/common/Object.cpp
  type love (line 24) | namespace love

FILE: src/common/Object.h
  function namespace (line 27) | namespace love

FILE: src/common/Optional.h
  function namespace (line 23) | namespace love

FILE: src/common/Range.h
  function namespace (line 27) | namespace love

FILE: src/common/Reference.cpp
  type love (line 24) | namespace love

FILE: src/common/Reference.h
  type lua_State (line 24) | struct lua_State
  function namespace (line 26) | namespace love

FILE: src/common/Stream.cpp
  type love (line 27) | namespace love
    function Data (line 32) | Data *Stream::read(int64 size)

FILE: src/common/Stream.h
  function namespace (line 29) | namespace love

FILE: src/common/StringMap.cpp
  class std::vector<std::string> (line 24) | class std::vector<std::string>

FILE: src/common/StringMap.h
  function namespace (line 32) | namespace love

FILE: src/common/Variant.cpp
  type love (line 26) | namespace love
    function Variant (line 121) | Variant &Variant::operator = (const Variant &v)

FILE: src/common/Variant.h
  function namespace (line 32) | namespace love

FILE: src/common/Vector.cpp
  type love (line 23) | namespace love

FILE: src/common/android.cpp
  type love (line 43) | namespace love
    type android (line 45) | namespace android
      function setImmersive (line 48) | void setImmersive(bool immersive_active)
      function getImmersive (line 61) | bool getImmersive()
      function getScreenScale (line 76) | double getScreenScale()
      function getSafeArea (line 96) | bool getSafeArea(int &top, int &left, int &bottom, int &right)
      function vibrate (line 121) | void vibrate(double seconds)
      function freeGameArchiveMemory (line 137) | void freeGameArchiveMemory(void *ptr)
      function directoryExists (line 143) | bool directoryExists(const char *path)
      function mkdir (line 157) | bool mkdir(const char *path)
      function chmod (line 170) | bool chmod(const char *path, int mode)
      function tryCreateDirectory (line 183) | inline bool tryCreateDirectory(const char *path)
      function createStorageDirectories (line 194) | bool createStorageDirectories()
      function fixupPermissionSingleFile (line 214) | void fixupPermissionSingleFile(const std::string &savedir, const std...
      function fixupExternalStoragePermission (line 221) | void fixupExternalStoragePermission(const std::string &savedir, cons...
      function hasBackgroundMusic (line 253) | bool hasBackgroundMusic()
      function hasRecordingPermission (line 269) | bool hasRecordingPermission()
      function requestRecordingPermission (line 290) | void requestRecordingPermission()
      function showRecordingPermissionMissingDialog (line 306) | void showRecordingPermissionMissingDialog()
      class AssetManagerObject (line 323) | class AssetManagerObject
        method AssetManagerObject (line 326) | AssetManagerObject()
        method jobject (line 341) | static jobject getLocalAssetManager(JNIEnv *env) {
      function jobject (line 365) | static jobject getJavaAssetManager()
      function AAssetManager (line 371) | static AAssetManager *getAssetManager()
      type aasset (line 377) | namespace aasset
        type AssetInfo (line 380) | struct AssetInfo: public love::filesystem::physfs::PhysfsIo<AssetI...
          method AssetInfo (line 389) | static AssetInfo *fromAAsset(AAssetManager *assetManager, const ...
          method read (line 394) | int64_t read(void* buf, uint64_t len) const
          method write (line 402) | int64_t write(const void* buf, uint64_t len) const
          method seek (line 411) | int64_t seek(uint64_t offset) const
          method tell (line 419) | int64_t tell() const
          method length (line 427) | int64_t length() const
          method flush (line 432) | int flush() const
          method AssetInfo (line 439) | AssetInfo(const AssetInfo &other)
          method AssetInfo (line 462) | AssetInfo(AAssetManager *assetManager, const char *filename, AAs...
        function PHYSFS_EnumerateCallbackResult (line 513) | PHYSFS_EnumerateCallbackResult enumerate(
        function PHYSFS_Io (line 578) | PHYSFS_Io *openRead(void *opaque, const char *name)
        function PHYSFS_Io (line 593) | PHYSFS_Io *openWriteAppend(void *opaque, const char *name)
        function removeMkdir (line 603) | int removeMkdir(void *opaque, const char *name)
        function stat (line 613) | int stat(void *opaque, const char *name, PHYSFS_Stat *out)
        function closeArchive (line 636) | void closeArchive(void *opaque)
        function PHYSFS_sint64 (line 663) | static PHYSFS_sint64 dummyReturn0(PHYSFS_Io *io)
        function PHYSFS_Io (line 690) | static PHYSFS_Io *getDummyIO(PHYSFS_Io *io)
      type SDLIO (line 697) | struct SDLIO: public love::filesystem::physfs::PhysfsIo<SDLIO>
        method SDLIO (line 701) | SDLIO(const std::string &filename)
        method SDLIO (line 710) | SDLIO(const SDLIO &other)
        method read (line 719) | int64_t read(void* buf, uint64_t len) const
        method write (line 725) | int64_t write(const void* buf, uint64_t len) const
        method seek (line 731) | int seek(uint64_t offset) const
        method tell (line 739) | int64_t tell() const
        method length (line 746) | int64_t length() const
        method flush (line 753) | int flush() const
      function initializeVirtualArchive (line 772) | bool initializeVirtualArchive()
      function deinitializeVirtualArchive (line 789) | void deinitializeVirtualArchive()
      function checkFusedGame (line 798) | bool checkFusedGame(void **physfsIO_Out)

FILE: src/common/android.h
  function namespace (line 30) | namespace love

FILE: src/common/apple.h
  function namespace (line 29) | namespace love

FILE: src/common/b64.cpp
  type love (line 27) | namespace love
    function b64_encode_block (line 39) | static void b64_encode_block(char in[3], char out[4], int len)
    function b64_decode_block (line 114) | static void b64_decode_block(char in[4], char out[3])

FILE: src/common/b64.h
  function namespace (line 28) | namespace love

FILE: src/common/delay.cpp
  type love (line 25) | namespace love
    function sleep (line 28) | void sleep(double ms)

FILE: src/common/delay.h
  function namespace (line 24) | namespace love

FILE: src/common/deprecation.cpp
  function initDeprecation (line 40) | void initDeprecation()
  function deinitDeprecation (line 55) | void deinitDeprecation()
  function printDeprecationNotice (line 69) | static void printDeprecationNotice(const DeprecationInfo &info)
  function setDeprecationOutputEnabled (line 75) | void setDeprecationOutputEnabled(bool enable)
  function isDeprecationOutputEnabled (line 94) | bool isDeprecationOutputEnabled()
  function getDeprecationNotice (line 99) | std::string getDeprecationNotice(const DeprecationInfo &info, bool usewh...

FILE: src/common/deprecation.h
  function namespace (line 29) | namespace love

FILE: src/common/floattypes.cpp
  type love (line 26) | namespace love
    function uint32 (line 43) | static uint32 convertMantissa(uint32 i)
    function float16Init (line 60) | void float16Init()
    function uint32 (line 143) | static inline uint32 asuint32(float f)
    function asfloat32 (line 150) | static inline float asfloat32(uint32 u)
    function float16to32 (line 157) | float float16to32(float16 f)
    function float16 (line 162) | float16 float32to16(float f)
    function float11to32 (line 170) | float float11to32(float11 f)
    function float11 (line 184) | float11 float32to11(float f)
    function float10to32 (line 212) | float float10to32(float10 f)
    function float10 (line 226) | float10 float32to10(float f)

FILE: src/common/floattypes.h
  function namespace (line 25) | namespace love

FILE: src/common/int.h
  function namespace (line 36) | namespace love

FILE: src/common/ios.h
  type SDL_Window (line 32) | struct SDL_Window
  function namespace (line 34) | namespace love

FILE: src/common/macos.h
  type SDL_Window (line 29) | typedef struct SDL_Window SDL_Window;
  function namespace (line 31) | namespace love

FILE: src/common/math.h
  function namespace (line 61) | namespace love

FILE: src/common/memory.cpp
  type love (line 34) | namespace love
    function alignedMalloc (line 37) | bool alignedMalloc(void **mem, size_t size, size_t alignment)
    function alignedFree (line 47) | void alignedFree(void *mem)
    function getPageSize (line 56) | size_t getPageSize()
    function alignUp (line 74) | size_t alignUp(size_t size, size_t alignment)

FILE: src/common/memory.h
  function namespace (line 25) | namespace love

FILE: src/common/pixelformat.cpp
  type love (line 24) | namespace love
    function getConstant (line 280) | bool getConstant(const char *in, PixelFormat &out)
    function getConstant (line 285) | bool getConstant(PixelFormat in, const char *&out)
    function PixelFormatInfo (line 290) | const PixelFormatInfo &getPixelFormatInfo(PixelFormat format)
    function isPixelFormatCompressed (line 302) | bool isPixelFormatCompressed(PixelFormat format)
    function isPixelFormatColor (line 307) | bool isPixelFormatColor(PixelFormat format)
    function isPixelFormatDepthStencil (line 312) | bool isPixelFormatDepthStencil(PixelFormat format)
    function isPixelFormatDepth (line 318) | bool isPixelFormatDepth(PixelFormat format)
    function isPixelFormatStencil (line 323) | bool isPixelFormatStencil(PixelFormat format)
    function isPixelFormatSRGB (line 328) | bool isPixelFormatSRGB(PixelFormat format)
    function isPixelFormatInteger (line 333) | bool isPixelFormatInteger(PixelFormat format)
    function PixelFormat (line 339) | PixelFormat getSRGBPixelFormat(PixelFormat format)
    function PixelFormat (line 375) | PixelFormat getLinearPixelFormat(PixelFormat format)
    function getPixelFormatBlockSize (line 410) | size_t getPixelFormatBlockSize(PixelFormat format)
    function getPixelFormatUncompressedRowSize (line 415) | size_t getPixelFormatUncompressedRowSize(PixelFormat format, int width)
    function getPixelFormatCompressedBlockRowSize (line 422) | size_t getPixelFormatCompressedBlockRowSize(PixelFormat format, int wi...
    function getPixelFormatCompressedBlockRowCount (line 429) | size_t getPixelFormatCompressedBlockRowCount(PixelFormat format, int h...
    function getPixelFormatSliceSize (line 436) | size_t getPixelFormatSliceSize(PixelFormat format, int width, int height)
    function getPixelFormatColorComponents (line 444) | int getPixelFormatColorComponents(PixelFormat format)

FILE: src/common/pixelformat.h
  function namespace (line 25) | namespace love

FILE: src/common/runtime.cpp
  type love (line 39) | namespace love
    function w__gc (line 46) | static int w__gc(lua_State *L)
    function w__tostring (line 57) | static int w__tostring(lua_State *L)
    function w__type (line 65) | static int w__type(lua_State *L)
    function w__typeOf (line 71) | static int w__typeOf(lua_State *L)
    function w__eq (line 82) | static int w__eq(lua_State *L)
    function luax_isfulllightuserdatasupported (line 92) | static bool luax_isfulllightuserdatasupported(lua_State *L)
    function ObjectKey (line 129) | static ObjectKey luax_computeloveobjectkey(lua_State *L, love::Object ...
    function luax_pushloveobjectkey (line 157) | static void luax_pushloveobjectkey(lua_State *L, ObjectKey key)
    function w__release (line 170) | static int w__release(lua_State *L)
    function Reference (line 199) | Reference *luax_refif(lua_State *L, int type)
    function luax_printstack (line 212) | void luax_printstack(lua_State *L)
    function luax_traceback (line 218) | int luax_traceback(lua_State *L)
    function luax_isarrayoftables (line 243) | bool luax_isarrayoftables(lua_State *L, int idx)
    function luax_toboolean (line 254) | bool luax_toboolean(lua_State *L, int idx)
    function luax_checkboolean (line 259) | bool luax_checkboolean(lua_State *L, int idx)
    function luax_pushboolean (line 265) | void luax_pushboolean(lua_State *L, bool b)
    function luax_optboolean (line 270) | bool luax_optboolean(lua_State *L, int idx, bool b)
    function luax_tostring (line 277) | std::string luax_tostring(lua_State *L, int idx)
    function luax_checkstring (line 284) | std::string luax_checkstring(lua_State *L, int idx)
    function luax_pushstring (line 291) | void luax_pushstring(lua_State *L, const std::string &str)
    function luax_pushpointerasstring (line 296) | void luax_pushpointerasstring(lua_State *L, const void *pointer)
    function luax_boolflag (line 303) | bool luax_boolflag(lua_State *L, int table_index, const char *key, boo...
    function luax_intflag (line 317) | int luax_intflag(lua_State *L, int table_index, const char *key, int d...
    function luax_numberflag (line 331) | double luax_numberflag(lua_State *L, int table_index, const char *key,...
    function luax_checkboolflag (line 345) | bool luax_checkboolflag(lua_State *L, int table_index, const char *key)
    function luax_checkintflag (line 362) | int luax_checkintflag(lua_State *L, int table_index, const char *key)
    function luax_assert_argc (line 379) | int luax_assert_argc(lua_State *L, int min)
    function luax_assert_argc (line 387) | int luax_assert_argc(lua_State *L, int min, int max)
    function luax_assert_function (line 395) | int luax_assert_function(lua_State *L, int idx)
    function luax_assert_nilerror (line 402) | int luax_assert_nilerror(lua_State *L, int idx)
    function luax_setfuncs (line 414) | void luax_setfuncs(lua_State *L, const luaL_Reg *l)
    function luax_require (line 426) | int luax_require(lua_State *L, const char *name)
    function luax_register_module (line 434) | int luax_register_module(lua_State *L, const WrappedModule &m)
    function luax_preload (line 479) | int luax_preload(lua_State *L, lua_CFunction f, const char *name)
    function luax_register_type (line 489) | int luax_register_type(lua_State *L, love::Type *type, ...)
    function luax_gettypemetatable (line 564) | void luax_gettypemetatable(lua_State *L, const love::Type &type)
    function luax_table_insert (line 570) | int luax_table_insert(lua_State *L, int tindex, int vindex, int pos)
    function luax_register_searcher (line 597) | int luax_register_searcher(lua_State *L, lua_CFunction f, int pos)
    function luax_rawnewtype (line 623) | void luax_rawnewtype(lua_State *L, love::Type &type, love::Object *obj...
    function luax_pushtype (line 650) | void luax_pushtype(lua_State *L, love::Type &type, love::Object *object)
    function luax_istype (line 694) | bool luax_istype(lua_State *L, int idx, love::Type &type)
    function Proxy (line 707) | static Proxy *tryextractproxy(lua_State *L, int idx)
    function Variant (line 722) | Variant luax_checkvariant(lua_State *L, int n, bool allowuserdata, std...
    function luax_pushvariant (line 814) | void luax_pushvariant(lua_State *L, const Variant &v)
    function luax_getfunction (line 861) | int luax_getfunction(lua_State *L, const char *mod, const char *fn)
    function luax_convobj (line 875) | int luax_convobj(lua_State *L, int idx, const char *mod, const char *fn)
    function luax_convobj (line 891) | int luax_convobj(lua_State *L, const int idxs[], int n, const char *mo...
    function luax_convobj (line 906) | int luax_convobj(lua_State *L, const std::vector<int>& idxs, const cha...
    function luax_pconvobj (line 912) | int luax_pconvobj(lua_State *L, int idx, const char *mod, const char *fn)
    function luax_pconvobj (line 923) | int luax_pconvobj(lua_State *L, const int idxs[], int n, const char *m...
    function luax_pconvobj (line 936) | int luax_pconvobj(lua_State *L, const std::vector<int>& idxs, const ch...
    function luax_insist (line 942) | int luax_insist(lua_State *L, int idx, const char *k)
    function luax_insistglobal (line 962) | int luax_insistglobal(lua_State *L, const char *k)
    function luax_c_insistglobal (line 977) | int luax_c_insistglobal(lua_State *L, const char *k)
    function luax_insistlove (line 982) | int luax_insistlove(lua_State *L, const char *k)
    function luax_getlove (line 994) | int luax_getlove(lua_State *L, const char *k)
    function luax_insistregistry (line 1007) | int luax_insistregistry(lua_State *L, Registry r)
    function luax_getregistry (line 1020) | int luax_getregistry(lua_State *L, Registry r)
    function lua_State (line 1036) | lua_State *luax_insistpinnedthread(lua_State *L)
    function lua_State (line 1059) | lua_State *luax_getpinnedthread(lua_State *L)
    function luax_markdeprecated (line 1067) | void luax_markdeprecated(lua_State *L, int level, const char *name, AP...
    function luax_markdeprecated (line 1072) | void luax_markdeprecated(lua_State *L, int level, const char *name, AP...
    function luax_typerror (line 1086) | int luax_typerror(lua_State *L, int narg, const char *tname)
    function luax_enumerror (line 1113) | int luax_enumerror(lua_State *L, const char *enumName, const char *value)
    function luax_enumerror (line 1118) | int luax_enumerror(lua_State *L, const char *enumName, const std::vect...
    function luax_objlen (line 1132) | size_t luax_objlen(lua_State *L, int ndx)
    function luax_register (line 1141) | void luax_register(lua_State *L, const char *name, const luaL_Reg *l)
    function luax_runwrapper (line 1154) | void luax_runwrapper(lua_State *L, const char *filedata, size_t datale...
    function Type (line 1177) | Type *luax_type(lua_State *L, int idx)
    function luax_resume (line 1182) | int luax_resume(lua_State *L, int nargs, int* nres)

FILE: src/common/runtime.h
  function namespace (line 44) | namespace love

FILE: src/common/types.cpp
  type love (line 26) | namespace love
    function uint32 (line 60) | uint32 Type::getId()
    function Type (line 72) | Type *Type::byName(const char *name)

FILE: src/common/types.h
  function namespace (line 29) | namespace love

FILE: src/common/utf8.cpp
  type love (line 25) | namespace love
    function to_utf8 (line 28) | std::string to_utf8(LPCWSTR wstr)
    function to_widestr (line 48) | std::wstring to_widestr(const std::string &str)
    function replace_char (line 69) | void replace_char(std::string &str, char find, char replace)

FILE: src/common/utf8.h
  function namespace (line 30) | namespace love

FILE: src/common/version.h
  function namespace (line 24) | namespace love

FILE: src/libraries/Wuff/wuff.c
  function wuff_sint32 (line 8) | wuff_sint32 wuff_open(struct wuff_handle ** handle_pointer, struct wuff_...
  function wuff_sint32 (line 37) | wuff_sint32 wuff_close(struct wuff_handle * handle)
  function wuff_sint32 (line 50) | wuff_sint32 wuff_seek(struct wuff_handle * handle, wuff_uint64 offset)
  function wuff_sint32 (line 74) | wuff_sint32 wuff_tell(struct wuff_handle * handle, wuff_uint64 * offset)
  function wuff_sint32 (line 84) | wuff_sint32 wuff_stream_info(struct wuff_handle * handle, struct wuff_in...
  function wuff_sint32 (line 99) | wuff_sint32 wuff_format(struct wuff_handle * handle, wuff_uint16 format)
  function wuff_sint32 (line 118) | wuff_sint32 wuff_read(struct wuff_handle * handle, wuff_uint8 * out_buff...
  function wuff_version (line 194) | void wuff_version(struct wuff_version * version)

FILE: src/libraries/Wuff/wuff.h
  type wuff_uint8 (line 38) | typedef uint8_t             wuff_uint8;
  type wuff_sint8 (line 39) | typedef int8_t              wuff_sint8;
  type wuff_uint16 (line 40) | typedef uint16_t            wuff_uint16;
  type wuff_sint16 (line 41) | typedef int16_t             wuff_sint16;
  type wuff_uint32 (line 42) | typedef uint32_t            wuff_uint32;
  type wuff_sint32 (line 43) | typedef int32_t             wuff_sint32;
  type wuff_uint64 (line 45) | typedef uint32_t            wuff_uint64;
  type wuff_sint64 (line 46) | typedef int32_t             wuff_sint64;
  type wuff_uint64 (line 48) | typedef uint64_t            wuff_uint64;
  type wuff_sint64 (line 49) | typedef int64_t             wuff_sint64;
  type wuff_uint8 (line 52) | typedef unsigned __int8     wuff_uint8;
  type wuff_sint8 (line 53) | typedef signed __int8       wuff_sint8;
  type wuff_uint16 (line 54) | typedef unsigned __int16    wuff_uint16;
  type wuff_sint16 (line 55) | typedef signed __int16      wuff_sint16;
  type wuff_uint32 (line 56) | typedef unsigned __int32    wuff_uint32;
  type wuff_sint32 (line 57) | typedef signed __int32      wuff_sint32;
  type wuff_uint64 (line 58) | typedef unsigned __int64    wuff_uint64;
  type wuff_sint64 (line 59) | typedef signed __int64      wuff_sint64;
  type wuff_uint8 (line 61) | typedef unsigned char       wuff_uint8;
  type wuff_sint8 (line 62) | typedef signed char         wuff_sint8;
  type wuff_uint16 (line 63) | typedef unsigned short      wuff_uint16;
  type wuff_sint16 (line 64) | typedef signed short        wuff_sint16;
  type wuff_uint32 (line 65) | typedef unsigned int        wuff_uint32;
  type wuff_sint32 (line 66) | typedef signed int          wuff_sint32;
  type wuff_uint64 (line 68) | typedef unsigned long       wuff_uint64;
  type wuff_sint64 (line 69) | typedef signed long         wuff_sint64;
  type wuff_uint64 (line 71) | typedef unsigned long long  wuff_uint64;
  type wuff_sint64 (line 72) | typedef signed long long    wuff_sint64;
  type wuff_handle (line 80) | struct wuff_handle
  type wuff_callback (line 90) | struct wuff_callback
  type wuff_info (line 129) | struct wuff_info
  type wuff_version (line 143) | struct wuff_version
  type wuff_handle (line 162) | struct wuff_handle
  type wuff_callback (line 162) | struct wuff_callback
  type wuff_handle (line 170) | struct wuff_handle
  type wuff_handle (line 179) | struct wuff_handle
  type wuff_info (line 179) | struct wuff_info
  type wuff_handle (line 189) | struct wuff_handle
  type wuff_handle (line 201) | struct wuff_handle
  type wuff_handle (line 211) | struct wuff_handle
  type wuff_handle (line 220) | struct wuff_handle
  type wuff_version (line 230) | struct wuff_version

FILE: src/libraries/Wuff/wuff_convert.c
  function WUFF_CONV_FUNC (line 11) | WUFF_CONV_FUNC(wuff_int8_to_int8)
  function WUFF_CONV_FUNC (line 17) | WUFF_CONV_FUNC(wuff_int8_to_int16)
  function WUFF_CONV_FUNC (line 43) | WUFF_CONV_FUNC(wuff_int8_to_int24)
  function WUFF_CONV_FUNC (line 69) | WUFF_CONV_FUNC(wuff_int8_to_int32)
  function WUFF_CONV_FUNC (line 95) | WUFF_CONV_FUNC(wuff_int8_to_float32)
  function WUFF_CONV_FUNC (line 121) | WUFF_CONV_FUNC(wuff_int8_to_float64)
  function WUFF_CONV_FUNC (line 151) | WUFF_CONV_FUNC(wuff_int16_to_int8)
  function WUFF_CONV_FUNC (line 164) | WUFF_CONV_FUNC(wuff_int16_to_int16)
  function WUFF_CONV_FUNC (line 169) | WUFF_CONV_FUNC(wuff_int16_to_int24)
  function WUFF_CONV_FUNC (line 199) | WUFF_CONV_FUNC(wuff_int16_to_int32)
  function WUFF_CONV_FUNC (line 229) | WUFF_CONV_FUNC(wuff_int16_to_float32)
  function WUFF_CONV_FUNC (line 259) | WUFF_CONV_FUNC(wuff_int16_to_float64)
  function WUFF_CONV_FUNC (line 293) | WUFF_CONV_FUNC(wuff_int24_to_int8)
  function WUFF_CONV_FUNC (line 306) | WUFF_CONV_FUNC(wuff_int24_to_int16)
  function WUFF_CONV_FUNC (line 328) | WUFF_CONV_FUNC(wuff_int24_to_int24)
  function WUFF_CONV_FUNC (line 333) | WUFF_CONV_FUNC(wuff_int24_to_int32)
  function WUFF_CONV_FUNC (line 359) | WUFF_CONV_FUNC(wuff_int24_to_float32)
  function WUFF_CONV_FUNC (line 389) | WUFF_CONV_FUNC(wuff_int24_to_float64)
  function WUFF_CONV_FUNC (line 423) | WUFF_CONV_FUNC(wuff_int32_to_int8)
  function WUFF_CONV_FUNC (line 436) | WUFF_CONV_FUNC(wuff_int32_to_int16)
  function WUFF_CONV_FUNC (line 458) | WUFF_CONV_FUNC(wuff_int32_to_int24)
  function WUFF_CONV_FUNC (line 480) | WUFF_CONV_FUNC(wuff_int32_to_int32)
  function WUFF_CONV_FUNC (line 485) | WUFF_CONV_FUNC(wuff_int32_to_float32)
  function WUFF_CONV_FUNC (line 515) | WUFF_CONV_FUNC(wuff_int32_to_float64)
  function WUFF_CONV_FUNC (line 549) | WUFF_CONV_FUNC(wuff_float32_to_int8)
  function WUFF_CONV_FUNC (line 562) | WUFF_CONV_FUNC(wuff_float32_to_int16)
  function WUFF_CONV_FUNC (line 592) | WUFF_CONV_FUNC(wuff_float32_to_int24)
  function WUFF_CONV_FUNC (line 622) | WUFF_CONV_FUNC(wuff_float32_to_int32)
  function WUFF_CONV_FUNC (line 652) | WUFF_CONV_FUNC(wuff_float32_to_float32)
  function WUFF_CONV_FUNC (line 657) | WUFF_CONV_FUNC(wuff_float32_to_float64)
  function WUFF_CONV_FUNC (line 691) | WUFF_CONV_FUNC(wuff_float64_to_int8)
  function WUFF_CONV_FUNC (line 704) | WUFF_CONV_FUNC(wuff_float64_to_int16)
  function WUFF_CONV_FUNC (line 734) | WUFF_CONV_FUNC(wuff_float64_to_int24)
  function WUFF_CONV_FUNC (line 764) | WUFF_CONV_FUNC(wuff_float64_to_int32)
  function WUFF_CONV_FUNC (line 794) | WUFF_CONV_FUNC(wuff_float64_to_float32)
  function WUFF_CONV_FUNC (line 824) | WUFF_CONV_FUNC(wuff_float64_to_float64)

FILE: src/libraries/Wuff/wuff_internal.c
  function wuff_sint32 (line 10) | wuff_sint32 wuff_setup(struct wuff_handle * handle)
  function wuff_sint32 (line 31) | wuff_sint32 wuff_cleanup(struct wuff_handle * handle)
  function wuff_sint32 (line 43) | wuff_sint32 wuff_set_output_format(struct wuff_handle * handle, wuff_uin...
  function wuff_sint32 (line 212) | wuff_sint32 wuff_check_bits(wuff_uint16 bits, wuff_uint16 * format)
  function wuff_calculate_samples (line 256) | size_t wuff_calculate_samples(size_t target_size, wuff_uint8 sample_size...
  function wuff_sint32 (line 279) | wuff_sint32 wuff_init_stream(struct wuff_handle * handle)
  function wuff_sint32 (line 372) | wuff_sint32 wuff_search_chunk(struct wuff_handle * handle, struct wuff_c...
  function wuff_sint32 (line 415) | wuff_sint32 wuff_buffer_alloc(struct wuff_handle * handle)
  function wuff_sint32 (line 440) | wuff_sint32 wuff_buffer_clear(struct wuff_handle * handle)
  function wuff_sint32 (line 461) | wuff_sint32 wuff_buffer_fill(struct wuff_handle * handle)
  function wuff_sint32 (line 493) | wuff_sint32 wuff_buffer_release(struct wuff_handle * handle, size_t samp...
  function wuff_sint32 (line 512) | wuff_sint32 wuff_buffer_request(struct wuff_handle * handle, wuff_uint8 ...

FILE: src/libraries/Wuff/wuff_internal.h
  function WUFF_INLINE (line 23) | static WUFF_INLINE wuff_uint32 wuff_get_uint32(wuff_uint8 * data)
  function WUFF_INLINE (line 28) | static WUFF_INLINE wuff_uint16 wuff_get_uint16(wuff_uint8 * data)
  type wuff_chunk_header (line 33) | struct wuff_chunk_header
  function WUFF_INLINE (line 39) | static WUFF_INLINE wuff_uint32 wuff_get_chunk_id(const char txt[5])
  function WUFF_INLINE (line 52) | static WUFF_INLINE void wuff_copy_chunk_header_data(struct wuff_chunk_he...
  type wuff_stream_header (line 63) | struct wuff_stream_header
  type wuff_stream_data (line 76) | struct wuff_stream_data
  type wuff_buffer (line 82) | struct wuff_buffer
  type wuff_output (line 91) | struct wuff_output
  type wuff_stream (line 100) | struct wuff_stream
  type wuff_handle (line 112) | struct wuff_handle
  type wuff_handle (line 124) | struct wuff_handle
  type wuff_handle (line 127) | struct wuff_handle
  type wuff_handle (line 131) | struct wuff_handle
  type wuff_handle (line 138) | struct wuff_handle
  type wuff_chunk_header (line 138) | struct wuff_chunk_header
  type wuff_handle (line 141) | struct wuff_handle
  type wuff_handle (line 155) | struct wuff_handle
  type wuff_handle (line 158) | struct wuff_handle
  type wuff_handle (line 161) | struct wuff_handle
  type wuff_handle (line 165) | struct wuff_handle
  type wuff_handle (line 168) | struct wuff_handle

FILE: src/libraries/Wuff/wuff_memory.c
  function wuff_free (line 13) | void wuff_free(void * mem)

FILE: src/libraries/box2d/b2_block_allocator.h
  type b2Block (line 31) | struct b2Block
  type b2Chunk (line 32) | struct b2Chunk
  function class (line 37) | class B2_API b2BlockAllocator

FILE: src/libraries/box2d/b2_body.h
  type b2FixtureDef (line 35) | struct b2FixtureDef
  type b2JointEdge (line 36) | struct b2JointEdge
  type b2ContactEdge (line 37) | struct b2ContactEdge
  type b2BodyType (line 43) | enum b2BodyType
  function b2BodyDef (line 52) | struct B2_API b2BodyDef
  function class (line 128) | class B2_API b2Body
  function SetAwake (line 638) | inline void b2Body::SetAwake(bool flag)
  function SetSleepingAllowed (line 676) | inline void b2Body::SetSleepingAllowed(bool flag)
  function b2Fixture (line 694) | inline b2Fixture* b2Body::GetFixtureList()
  function b2Fixture (line 699) | inline const b2Fixture* b2Body::GetFixtureList() const
  function b2JointEdge (line 704) | inline b2JointEdge* b2Body::GetJointList()
  function b2JointEdge (line 709) | inline const b2JointEdge* b2Body::GetJointList() const
  function b2ContactEdge (line 714) | inline b2ContactEdge* b2Body::GetContactList()
  function b2ContactEdge (line 719) | inline const b2ContactEdge* b2Body::GetContactList() const
  function b2Body (line 724) | inline b2Body* b2Body::GetNext()
  function b2Body (line 729) | inline const b2Body* b2Body::GetNext() const
  function b2BodyUserData (line 734) | inline b2BodyUserData& b2Body::GetUserData()
  function ApplyForce (line 739) | inline void b2Body::ApplyForce(const b2Vec2& force, const b2Vec2& point,...
  function ApplyForceToCenter (line 759) | inline void b2Body::ApplyForceToCenter(const b2Vec2& force, bool wake)
  function ApplyTorque (line 778) | inline void b2Body::ApplyTorque(float torque, bool wake)
  function ApplyLinearImpulse (line 797) | inline void b2Body::ApplyLinearImpulse(const b2Vec2& impulse, const b2Ve...
  function ApplyLinearImpulseToCenter (line 817) | inline void b2Body::ApplyLinearImpulseToCenter(const b2Vec2& impulse, bo...
  function ApplyAngularImpulse (line 836) | inline void b2Body::ApplyAngularImpulse(float impulse, bool wake)
  function SynchronizeTransform (line 855) | inline void b2Body::SynchronizeTransform()
  function Advance (line 861) | inline void b2Body::Advance(float alpha)
  function b2World (line 871) | inline b2World* b2Body::GetWorld()
  function b2World (line 876) | inline const b2World* b2Body::GetWorld() const

FILE: src/libraries/box2d/b2_broad_phase.h
  function b2Pair (line 31) | struct B2_API b2Pair
  function int32 (line 98) | int32 GetTreeHeight() const;
  function TestOverlap (line 140) | inline bool b2BroadPhase::TestOverlap(int32 proxyIdA, int32 proxyIdB) const
  function b2AABB (line 147) | inline const b2AABB& b2BroadPhase::GetFatAABB(int32 proxyId) const
  function Query (line 222) | void b2BroadPhase::Query(T* callback, const b2AABB& aabb) const
  function RayCast (line 228) | void b2BroadPhase::RayCast(T* callback, const b2RayCastInput& input) const
  function ShiftOrigin (line 233) | inline void b2BroadPhase::ShiftOrigin(const b2Vec2& newOrigin)

FILE: src/libraries/box2d/b2_chain_shape.h
  function int32 (line 64) | int32 GetChildCount() const override;

FILE: src/libraries/box2d/b2_circle_shape.h
  function int32 (line 39) | int32 GetChildCount() const override;

FILE: src/libraries/box2d/b2_collision.h
  function b2ContactFeature (line 44) | struct B2_API b2ContactFeature
  function b2ContactID (line 59) | union B2_API b2ContactID
  function b2ManifoldPoint (line 75) | struct B2_API b2ManifoldPoint
  function b2Manifold (line 99) | struct B2_API b2Manifold
  function b2WorldManifold (line 116) | struct B2_API b2WorldManifold
  type b2PointState (line 132) | enum b2PointState
  function b2ClipVertex (line 146) | struct B2_API b2ClipVertex
  function b2RayCastInput (line 153) | struct B2_API b2RayCastInput
  function b2RayCastOutput (line 161) | struct B2_API b2RayCastOutput
  function b2AABB (line 168) | struct B2_API b2AABB
  function IsValid (line 260) | inline bool b2AABB::IsValid() const

FILE: src/libraries/box2d/b2_common.h
  type b2Version (line 129) | struct b2Version

FILE: src/libraries/box2d/b2_contact.h
  function b2MixFriction (line 42) | inline float b2MixFriction(float friction1, float friction2)
  function b2MixRestitution (line 49) | inline float b2MixRestitution(float restitution1, float restitution2)
  function b2MixRestitutionThreshold (line 55) | inline float b2MixRestitutionThreshold(float threshold1, float threshold2)
  type b2Contact (line 60) | typedef b2Contact* b2ContactCreateFcn(	b2Fixture* fixtureA, int32 indexA,
  function b2ContactRegister (line 65) | struct B2_API b2ContactRegister
  function b2ContactEdge (line 77) | struct B2_API b2ContactEdge
  function class (line 88) | class B2_API b2Contact
  function b2Manifold (line 244) | inline b2Manifold* b2Contact::GetManifold()
  function b2Manifold (line 249) | inline const b2Manifold* b2Contact::GetManifold() const
  function GetWorldManifold (line 254) | inline void b2Contact::GetWorldManifold(b2WorldManifold* worldManifold) ...
  function SetEnabled (line 264) | inline void b2Contact::SetEnabled(bool flag)
  function b2Contact (line 286) | inline b2Contact* b2Contact::GetNext()
  function b2Contact (line 291) | inline const b2Contact* b2Contact::GetNext() const
  function b2Fixture (line 296) | inline b2Fixture* b2Contact::GetFixtureA()
  function b2Fixture (line 301) | inline const b2Fixture* b2Contact::GetFixtureA() const
  function b2Fixture (line 306) | inline b2Fixture* b2Contact::GetFixtureB()
  function b2Fixture (line 316) | inline const b2Fixture* b2Contact::GetFixtureB() const
  function FlagForFiltering (line 326) | inline void b2Contact::FlagForFiltering()
  function SetFriction (line 331) | inline void b2Contact::SetFriction(float friction)
  function ResetFriction (line 341) | inline void b2Contact::ResetFriction()
  function SetRestitution (line 346) | inline void b2Contact::SetRestitution(float restitution)
  function ResetRestitution (line 356) | inline void b2Contact::ResetRestitution()
  function SetRestitutionThreshold (line 361) | inline void b2Contact::SetRestitutionThreshold(float threshold)
  function ResetRestitutionThreshold (line 371) | inline void b2Contact::ResetRestitutionThreshold()
  function SetTangentSpeed (line 376) | inline void b2Contact::SetTangentSpeed(float speed)

FILE: src/libraries/box2d/b2_contact_manager.h
  function class (line 35) | class B2_API b2ContactManager

FILE: src/libraries/box2d/b2_distance.h
  type B2_API (line 33) | struct B2_API
  function b2Vec2 (line 49) | const b2Vec2& GetSupportVertex(const b2Vec2& d) const;
  function b2DistanceInput (line 76) | struct B2_API b2DistanceInput
  function b2DistanceOutput (line 86) | struct B2_API b2DistanceOutput
  function b2ShapeCastInput (line 102) | struct B2_API b2ShapeCastInput
  function b2ShapeCastOutput (line 112) | struct B2_API b2ShapeCastOutput
  function b2Vec2 (line 131) | inline const b2Vec2& b2DistanceProxy::GetVertex(int32 index) const
  function int32 (line 137) | inline int32 b2DistanceProxy::GetSupport(const b2Vec2& d) const
  function b2Vec2 (line 154) | inline const b2Vec2& b2DistanceProxy::GetSupportVertex(const b2Vec2& d) ...

FILE: src/libraries/box2d/b2_distance_joint.h
  function b2DistanceJointDef (line 33) | struct B2_API b2DistanceJointDef : public b2JointDef
  function b2Vec2 (line 81) | b2Vec2 GetAnchorB() const override;
  function GetCurrentLength (line 119) | float GetCurrentLength() const;
  function SetDamping (line 126) | void SetDamping(float damping) { m_damping = damping; }

FILE: src/libraries/box2d/b2_draw.h
  function b2Color (line 30) | struct B2_API b2Color
  function class (line 48) | class B2_API b2Draw

FILE: src/libraries/box2d/b2_dynamic_tree.h
  function b2TreeNode (line 33) | struct B2_API b2TreeNode
  function Validate (line 115) | void Validate() const;
  function WasMoved (line 169) | inline bool b2DynamicTree::WasMoved(int32 proxyId) const
  function ClearMoved (line 175) | inline void b2DynamicTree::ClearMoved(int32 proxyId)
  function b2AABB (line 181) | inline const b2AABB& b2DynamicTree::GetFatAABB(int32 proxyId) const
  function Query (line 188) | void b2DynamicTree::Query(T* callback, const b2AABB& aabb) const
  function RayCast (line 223) | void b2DynamicTree::RayCast(T* callback, const b2RayCastInput& input) const

FILE: src/libraries/box2d/b2_edge_shape.h
  function int32 (line 50) | int32 GetChildCount() const override;

FILE: src/libraries/box2d/b2_fixture.h
  function b2Filter (line 37) | struct B2_API b2Filter
  function b2FixtureDef (line 61) | struct B2_API b2FixtureDef
  function b2FixtureProxy (line 103) | struct B2_API b2FixtureProxy
  function IsSensor (line 134) | bool IsSensor() const;
  function b2Shape (line 258) | inline b2Shape* b2Fixture::GetShape()
  function b2Shape (line 263) | inline const b2Shape* b2Fixture::GetShape() const
  function b2FixtureUserData (line 278) | inline b2FixtureUserData& b2Fixture::GetUserData()
  function b2Body (line 283) | inline b2Body* b2Fixture::GetBody()
  function b2Body (line 288) | inline const b2Body* b2Fixture::GetBody() const
  function b2Fixture (line 293) | inline b2Fixture* b2Fixture::GetNext()
  function b2Fixture (line 298) | inline const b2Fixture* b2Fixture::GetNext() const
  function SetDensity (line 303) | inline void b2Fixture::SetDensity(float density)
  function SetFriction (line 319) | inline void b2Fixture::SetFriction(float friction)
  function SetRestitution (line 329) | inline void b2Fixture::SetRestitution(float restitution)
  function SetRestitutionThreshold (line 339) | inline void b2Fixture::SetRestitutionThreshold(float threshold)
  function TestPoint (line 344) | inline bool b2Fixture::TestPoint(const b2Vec2& p) const
  function RayCast (line 349) | inline bool b2Fixture::RayCast(b2RayCastOutput* output, const b2RayCastI...
  function GetMassData (line 354) | inline void b2Fixture::GetMassData(b2MassData* massData) const
  function b2AABB (line 359) | inline const b2AABB& b2Fixture::GetAABB(int32 childIndex) const

FILE: src/libraries/box2d/b2_friction_joint.h
  function b2FrictionJointDef (line 30) | struct B2_API b2FrictionJointDef : public b2JointDef

FILE: src/libraries/box2d/b2_gear_joint.h
  function b2GearJointDef (line 31) | struct B2_API b2GearJointDef : public b2JointDef
  function b2Vec2 (line 65) | b2Vec2 GetAnchorB() const override;
  function b2Joint (line 74) | b2Joint* GetJoint2() { return m_joint2; }

FILE: src/libraries/box2d/b2_growable_stack.h
  function Push (line 53) | void Push(const T& element)
  function T (line 71) | T Pop()
  function int32 (line 78) | int32 GetCount()

FILE: src/libraries/box2d/b2_joint.h
  type b2SolverData (line 32) | struct b2SolverData
  type b2JointType (line 35) | enum b2JointType
  function b2Jacobian (line 51) | struct B2_API b2Jacobian
  function b2JointEdge (line 63) | struct B2_API b2JointEdge
  function b2JointDef (line 72) | struct B2_API b2JointDef
  function class (line 110) | class B2_API b2Joint
  function b2Body (line 198) | inline b2Body* b2Joint::GetBodyA()
  function b2Body (line 203) | inline b2Body* b2Joint::GetBodyB()
  function b2Joint (line 208) | inline b2Joint* b2Joint::GetNext()
  function b2Joint (line 213) | inline const b2Joint* b2Joint::GetNext() const
  function b2JointUserData (line 218) | inline b2JointUserData& b2Joint::GetUserData()

FILE: src/libraries/box2d/b2_math.h
  function b2IsValid (line 33) | inline bool b2IsValid(float x)
  function b2Vec2 (line 42) | struct B2_API b2Vec2
  function Normalize (line 103) | float Normalize()
  function b2Vec3 (line 133) | struct B2_API b2Vec3
  function Set (line 145) | void Set(float x_, float y_, float z_) { x = x_; y = y_; z = z_; }
  type B2_API (line 172) | struct B2_API
  function SetIdentity (line 199) | void SetIdentity()
  function SetZero (line 206) | void SetZero()
  function b2Mat22 (line 212) | b2Mat22 GetInverse() const
  function b2Vec2 (line 228) | b2Vec2 Solve(const b2Vec2& b) const
  function b2Mat33 (line 246) | struct B2_API b2Mat33
  function b2Rot (line 288) | struct B2_API b2Rot
  function b2Transform (line 339) | struct B2_API b2Transform
  function b2Sweep (line 369) | struct B2_API b2Sweep
  function b2Dot (line 396) | inline float b2Dot(const b2Vec2& a, const b2Vec2& b)
  function b2Cross (line 402) | inline float b2Cross(const b2Vec2& a, const b2Vec2& b)
  function b2Vec2 (line 409) | inline b2Vec2 b2Cross(const b2Vec2& a, float s)
  function b2Vec2 (line 416) | inline b2Vec2 b2Cross(float s, const b2Vec2& a)
  function b2Vec2 (line 423) | inline b2Vec2 b2Mul(const b2Mat22& A, const b2Vec2& v)
  function b2Vec2 (line 430) | inline b2Vec2 b2MulT(const b2Mat22& A, const b2Vec2& v)
  function b2Vec2 (line 436) | inline b2Vec2 operator + (const b2Vec2& a, const b2Vec2& b)
  function b2Vec2 (line 442) | inline b2Vec2 operator - (const b2Vec2& a, const b2Vec2& b)
  function b2Vec2 (line 447) | inline b2Vec2 operator * (float s, const b2Vec2& a)
  function operator (line 452) | inline bool operator == (const b2Vec2& a, const b2Vec2& b)
  function operator (line 457) | inline bool operator != (const b2Vec2& a, const b2Vec2& b)
  function b2Distance (line 462) | inline float b2Distance(const b2Vec2& a, const b2Vec2& b)
  function b2DistanceSquared (line 468) | inline float b2DistanceSquared(const b2Vec2& a, const b2Vec2& b)
  function b2Vec3 (line 474) | inline b2Vec3 operator * (float s, const b2Vec3& a)
  function b2Vec3 (line 480) | inline b2Vec3 operator + (const b2Vec3& a, const b2Vec3& b)
  function b2Vec3 (line 486) | inline b2Vec3 operator - (const b2Vec3& a, const b2Vec3& b)
  function b2Dot (line 492) | inline float b2Dot(const b2Vec3& a, const b2Vec3& b)
  function b2Vec3 (line 498) | inline b2Vec3 b2Cross(const b2Vec3& a, const b2Vec3& b)
  function b2Mat22 (line 503) | inline b2Mat22 operator + (const b2Mat22& A, const b2Mat22& B)
  function b2Mat22 (line 509) | inline b2Mat22 b2Mul(const b2Mat22& A, const b2Mat22& B)
  function b2Mat22 (line 515) | inline b2Mat22 b2MulT(const b2Mat22& A, const b2Mat22& B)
  function b2Vec3 (line 523) | inline b2Vec3 b2Mul(const b2Mat33& A, const b2Vec3& v)
  function b2Vec2 (line 529) | inline b2Vec2 b2Mul22(const b2Mat33& A, const b2Vec2& v)
  function b2Rot (line 535) | inline b2Rot b2Mul(const b2Rot& q, const b2Rot& r)
  function b2Rot (line 548) | inline b2Rot b2MulT(const b2Rot& q, const b2Rot& r)
  function b2Vec2 (line 561) | inline b2Vec2 b2Mul(const b2Rot& q, const b2Vec2& v)
  function b2Vec2 (line 567) | inline b2Vec2 b2MulT(const b2Rot& q, const b2Vec2& v)
  function b2Vec2 (line 572) | inline b2Vec2 b2Mul(const b2Transform& T, const b2Vec2& v)
  function b2Vec2 (line 580) | inline b2Vec2 b2MulT(const b2Transform& T, const b2Vec2& v)
  function b2Transform (line 592) | inline b2Transform b2Mul(const b2Transform& A, const b2Transform& B)
  function b2Transform (line 602) | inline b2Transform b2MulT(const b2Transform& A, const b2Transform& B)
  function T (line 611) | T b2Abs(T a)
  function b2Vec2 (line 616) | inline b2Vec2 b2Abs(const b2Vec2& a)
  function b2Mat22 (line 621) | inline b2Mat22 b2Abs(const b2Mat22& A)
  function T (line 627) | T b2Min(T a, T b)
  function b2Vec2 (line 632) | inline b2Vec2 b2Min(const b2Vec2& a, const b2Vec2& b)
  function T (line 638) | T b2Max(T a, T b)
  function b2Vec2 (line 643) | inline b2Vec2 b2Max(const b2Vec2& a, const b2Vec2& b)
  function T (line 649) | T b2Clamp(T a, T low, T high)
  function b2Vec2 (line 654) | inline b2Vec2 b2Clamp(const b2Vec2& a, const b2Vec2& low, const b2Vec2& ...
  function uint32 (line 671) | inline uint32 b2NextPowerOfTwo(uint32 x)
  function b2IsPowerOfTwo (line 681) | inline bool b2IsPowerOfTwo(uint32 x)
  function GetTransform (line 688) | inline void b2Sweep::GetTransform(b2Transform* xf, float beta) const
  function Advance (line 698) | inline void b2Sweep::Advance(float alpha)
  function Normalize (line 708) | inline void b2Sweep::Normalize()

FILE: src/libraries/box2d/b2_motor_joint.h
  function b2MotorJointDef (line 30) | struct B2_API b2MotorJointDef : public b2JointDef

FILE: src/libraries/box2d/b2_mouse_joint.h
  function b2MouseJointDef (line 31) | struct B2_API b2MouseJointDef : public b2JointDef
  function b2Vec2 (line 73) | b2Vec2 GetAnchorB() const override;
  function SetDamping (line 94) | void SetDamping(float damping) { m_damping = damping; }
  function Dump (line 98) | void Dump() override { b2Log("Mouse joint dumping is not supported.\n"); }

FILE: src/libraries/box2d/b2_polygon_shape.h
  function int32 (line 41) | int32 GetChildCount() const override;

FILE: src/libraries/box2d/b2_prismatic_joint.h
  function b2PrismaticJointDef (line 35) | struct B2_API b2PrismaticJointDef : public b2JointDef
  function b2Vec2 (line 95) | b2Vec2 GetAnchorB() const override;
  function GetJointTranslation (line 113) | float GetJointTranslation() const;

FILE: src/libraries/box2d/b2_pulley_joint.h
  function b2PulleyJointDef (line 33) | struct B2_API b2PulleyJointDef : public b2JointDef

FILE: src/libraries/box2d/b2_revolute_joint.h
  function b2RevoluteJointDef (line 39) | struct B2_API b2RevoluteJointDef : public b2JointDef
  function b2Vec2 (line 98) | b2Vec2 GetAnchorB() const override;
  function GetJointAngle (line 110) | float GetJointAngle() const;

FILE: src/libraries/box2d/b2_rope.h
  type b2RopeStretch (line 30) | struct b2RopeStretch
  type b2RopeBend (line 31) | struct b2RopeBend
  type b2StretchingModel (line 33) | enum b2StretchingModel
  type b2BendingModel (line 39) | enum b2BendingModel
  function b2RopeTuning (line 50) | struct B2_API b2RopeTuning
  function b2RopeDef (line 81) | struct B2_API b2RopeDef
  function class (line 101) | class B2_API b2Rope

FILE: src/libraries/box2d/b2_settings.h
  function b2BodyUserData (line 58) | struct B2_API b2BodyUserData
  function b2FixtureUserData (line 70) | struct B2_API b2FixtureUserData
  function b2JointUserData (line 82) | struct B2_API b2JointUserData
  function b2Free (line 106) | inline void b2Free(void* mem)
  function b2Log (line 115) | inline void b2Log(const char* string, ...)

FILE: src/libraries/box2d/b2_shape.h
  function b2MassData (line 33) | struct B2_API b2MassData
  type Type (line 52) | enum Type
  function Type (line 68) | Type GetType() const;

FILE: src/libraries/box2d/b2_stack_allocator.h
  function b2StackEntry (line 32) | struct B2_API b2StackEntry
  function class (line 42) | class B2_API b2StackAllocator

FILE: src/libraries/box2d/b2_time_of_impact.h
  function b2TOIInput (line 31) | struct B2_API b2TOIInput
  function b2TOIOutput (line 41) | struct B2_API b2TOIOutput

FILE: src/libraries/box2d/b2_time_step.h
  function b2Profile (line 29) | struct B2_API b2Profile
  function b2TimeStep (line 42) | struct B2_API b2TimeStep
  function b2Position (line 53) | struct B2_API b2Position
  function b2Velocity (line 60) | struct B2_API b2Velocity
  function b2SolverData (line 67) | struct B2_API b2SolverData

FILE: src/libraries/box2d/b2_timer.h
  function class (line 31) | class B2_API b2Timer

FILE: src/libraries/box2d/b2_types.h
  type int8 (line 26) | typedef signed char	int8;
  type int16 (line 27) | typedef signed short int16;
  type int32 (line 28) | typedef signed int int32;
  type uint8 (line 29) | typedef unsigned char uint8;
  type uint16 (line 30) | typedef unsigned short uint16;
  type uint32 (line 31) | typedef unsigned int uint32;

FILE: src/libraries/box2d/b2_weld_joint.h
  function b2WeldJointDef (line 32) | struct B2_API b2WeldJointDef : public b2JointDef
  function b2Vec2 (line 73) | b2Vec2 GetAnchorB() const override;
  function SetStiffness (line 88) | void SetStiffness(float hz) { m_stiffness = hz; }
  function SetDamping (line 92) | void SetDamping(float damping) { m_damping = damping; }

FILE: src/libraries/box2d/b2_wheel_joint.h
  function b2WheelJointDef (line 35) | struct B2_API b2WheelJointDef : public b2JointDef
  function b2Vec2 (line 99) | b2Vec2 GetAnchorB() const override;

FILE: src/libraries/box2d/b2_world.h
  type b2AABB (line 34) | struct b2AABB
  type b2BodyDef (line 35) | struct b2BodyDef
  type b2Color (line 36) | struct b2Color
  type b2JointDef (line 37) | struct b2JointDef
  function SetWarmStarting (line 154) | void SetWarmStarting(bool flag) { m_warmStarting = flag; }
  function SetContinuousPhysics (line 158) | void SetContinuousPhysics(bool flag) { m_continuousPhysics = flag; }
  function SetSubStepping (line 162) | void SetSubStepping(bool flag) { m_subStepping = flag; }
  function int32 (line 166) | int32 GetProxyCount() const;
  function b2Body (line 269) | inline const b2Body* b2World::GetBodyList() const
  function b2Joint (line 274) | inline b2Joint* b2World::GetJointList()
  function b2Joint (line 279) | inline const b2Joint* b2World::GetJointList() const
  function b2Contact (line 284) | inline b2Contact* b2World::GetContactList()
  function b2Contact (line 289) | inline const b2Contact* b2World::GetContactList() const
  function SetGravity (line 309) | inline void b2World::SetGravity(const b2Vec2& gravity)
  function SetAutoClearForces (line 324) | inline void b2World::SetAutoClearForces(bool flag)

FILE: src/libraries/box2d/b2_world_callbacks.h
  type b2Vec2 (line 29) | struct b2Vec2
  type b2Transform (line 30) | struct b2Transform
  type b2ContactResult (line 35) | struct b2ContactResult
  type b2Manifold (line 36) | struct b2Manifold
  function class (line 41) | class B2_API b2DestructionListener
  function class (line 57) | class B2_API b2ContactFilter
  function b2ContactImpulse (line 70) | struct B2_API b2ContactImpulse
  function class (line 86) | class B2_API b2ContactListener
  function class (line 128) | class B2_API b2QueryCallback
  function class (line 140) | class B2_API b2RayCastCallback

FILE: src/libraries/box2d/collision/b2_broad_phase.cpp
  function int32 (line 45) | int32 b2BroadPhase::CreateProxy(const b2AABB& aabb, void* userData)

FILE: src/libraries/box2d/collision/b2_chain_shape.cpp
  function b2Shape (line 86) | b2Shape* b2ChainShape::Clone(b2BlockAllocator* allocator) const
  function int32 (line 94) | int32 b2ChainShape::GetChildCount() const

FILE: src/libraries/box2d/collision/b2_circle_shape.cpp
  function b2Shape (line 28) | b2Shape* b2CircleShape::Clone(b2BlockAllocator* allocator) const
  function int32 (line 36) | int32 b2CircleShape::GetChildCount() const

FILE: src/libraries/box2d/collision/b2_collide_circle.cpp
  function b2CollideCircles (line 27) | void b2CollideCircles(
  function b2CollidePolygonAndCircle (line 55) | void b2CollidePolygonAndCircle(

FILE: src/libraries/box2d/collision/b2_collide_edge.cpp
  function b2CollideEdgeAndCircle (line 31) | void b2CollideEdgeAndCircle(b2Manifold* manifold,
  type b2EPAxis (line 168) | struct b2EPAxis
    type Type (line 170) | enum Type
  type b2TempPolygon (line 184) | struct b2TempPolygon
  type b2ReferenceFace (line 192) | struct b2ReferenceFace
  function b2EPAxis (line 205) | static b2EPAxis b2ComputeEdgeSeparation(const b2TempPolygon& polygonB, c...
    type Type (line 170) | enum Type
  function b2EPAxis (line 241) | static b2EPAxis b2ComputePolygonSeparation(const b2TempPolygon& polygonB...
    type Type (line 170) | enum Type
  function b2CollideEdgeAndPolygon (line 269) | void b2CollideEdgeAndPolygon(b2Manifold* manifold,

FILE: src/libraries/box2d/collision/b2_collide_polygon.cpp
  function b2FindMaxSeparation (line 27) | static float b2FindMaxSeparation(int32* edgeIndex,
  function b2FindIncidentEdge (line 68) | static void b2FindIncidentEdge(b2ClipVertex c[2],
  function b2CollidePolygons (line 120) | void b2CollidePolygons(b2Manifold* manifold,

FILE: src/libraries/box2d/collision/b2_collision.cpp
  function b2GetPointStates (line 92) | void b2GetPointStates(b2PointState state1[b2_maxManifoldPoints], b2Point...
  function int32 (line 205) | int32 b2ClipSegmentToLine(b2ClipVertex vOut[2], const b2ClipVertex vIn[2],
  function b2TestOverlap (line 239) | bool b2TestOverlap(	const b2Shape* shapeA, int32 indexA,

FILE: src/libraries/box2d/collision/b2_distance.cpp
  type b2SimplexVertex (line 96) | struct b2SimplexVertex
  type b2Simplex (line 106) | struct b2Simplex
    method ReadCache (line 108) | void ReadCache(	const b2SimplexCache* cache,
    method WriteCache (line 159) | void WriteCache(b2SimplexCache* cache) const
    method b2Vec2 (line 171) | b2Vec2 GetSearchDirection() const
    method b2Vec2 (line 200) | b2Vec2 GetClosestPoint() const
    method GetWitnessPoints (line 223) | void GetWitnessPoints(b2Vec2* pA, b2Vec2* pB) const
    method GetMetric (line 252) | float GetMetric() const
  function b2Distance (line 454) | void b2Distance(b2DistanceOutput* output,
  function b2ShapeCast (line 603) | bool b2ShapeCast(b2ShapeCastOutput * output, const b2ShapeCastInput * in...

FILE: src/libraries/box2d/collision/b2_dynamic_tree.cpp
  function int32 (line 54) | int32 b2DynamicTree::AllocateNode()
  function int32 (line 107) | int32 b2DynamicTree::CreateProxy(const b2AABB& aabb, void* userData)
  function int32 (line 398) | int32 b2DynamicTree::Balance(int32 iA)
  function int32 (line 541) | int32 b2DynamicTree::GetHeight() const
  function int32 (line 579) | int32 b2DynamicTree::ComputeHeight(int32 nodeId) const
  function int32 (line 594) | int32 b2DynamicTree::ComputeHeight() const
  function int32 (line 695) | int32 b2DynamicTree::GetMaxBalance() const

FILE: src/libraries/box2d/collision/b2_edge_shape.cpp
  function b2Shape (line 43) | b2Shape* b2EdgeShape::Clone(b2BlockAllocator* allocator) const
  function int32 (line 51) | int32 b2EdgeShape::GetChildCount() const

FILE: src/libraries/box2d/collision/b2_polygon_shape.cpp
  function b2Shape (line 28) | b2Shape* b2PolygonShape::Clone(b2BlockAllocator* allocator) const
  function int32 (line 75) | int32 b2PolygonShape::GetChildCount() const
  function b2Vec2 (line 80) | static b2Vec2 ComputeCentroid(const b2Vec2* vs, int32 count)

FILE: src/libraries/box2d/collision/b2_time_of_impact.cpp
  type b2SeparationFunction (line 37) | struct b2SeparationFunction
    type Type (line 39) | enum Type
    method Initialize (line 48) | float Initialize(const b2SimplexCache* cache,
    method FindMinSeparation (line 129) | float FindMinSeparation(int32* indexA, int32* indexB, float t) const
    method Evaluate (line 198) | float Evaluate(int32 indexA, int32 indexB, float t) const
  function b2TimeOfImpact (line 258) | void b2TimeOfImpact(b2TOIOutput* output, const b2TOIInput* input)

FILE: src/libraries/box2d/common/b2_block_allocator.cpp
  type b2SizeMap (line 52) | struct b2SizeMap
    method b2SizeMap (line 54) | b2SizeMap()
  type b2Chunk (line 78) | struct b2Chunk
  type b2Block (line 84) | struct b2Block

FILE: src/libraries/box2d/common/b2_draw.cpp
  function uint32 (line 34) | uint32 b2Draw::GetFlags() const

FILE: src/libraries/box2d/common/b2_math.cpp
  function b2Vec3 (line 29) | b2Vec3 b2Mat33::Solve33(const b2Vec3& b) const
  function b2Vec2 (line 45) | b2Vec2 b2Mat33::Solve22(const b2Vec2& b) const

FILE: src/libraries/box2d/common/b2_settings.cpp
  function b2Free_Default (line 40) | void b2Free_Default(void* mem)
  function b2Log_Default (line 46) | void b2Log_Default(const char* string, va_list args)
  function loveAssert (line 51) | void loveAssert(bool test, const char* teststr)
  function b2OpenDump (line 59) | void b2OpenDump(const char* fileName)
  function b2Dump (line 65) | void b2Dump(const char* string, ...)
  function b2CloseDump (line 78) | void b2CloseDump()

FILE: src/libraries/box2d/common/b2_stack_allocator.cpp
  function int32 (line 84) | int32 b2StackAllocator::GetMaxAllocation() const

FILE: src/libraries/box2d/dynamics/b2_body.cpp
  function b2Fixture (line 165) | b2Fixture* b2Body::CreateFixture(const b2FixtureDef* def)
  function b2Fixture (line 204) | b2Fixture* b2Body::CreateFixture(const b2Shape* shape, float density)

FILE: src/libraries/box2d/dynamics/b2_chain_circle_contact.cpp
  function b2Contact (line 31) | b2Contact* b2ChainAndCircleContact::Create(b2Fixture* fixtureA, int32 in...

FILE: src/libraries/box2d/dynamics/b2_chain_circle_contact.h
  function class (line 30) | class b2ChainAndCircleContact : public b2Contact

FILE: src/libraries/box2d/dynamics/b2_chain_polygon_contact.cpp
  function b2Contact (line 31) | b2Contact* b2ChainAndPolygonContact::Create(b2Fixture* fixtureA, int32 i...

FILE: src/libraries/box2d/dynamics/b2_chain_polygon_contact.h
  function class (line 30) | class b2ChainAndPolygonContact : public b2Contact

FILE: src/libraries/box2d/dynamics/b2_circle_contact.cpp
  function b2Contact (line 32) | b2Contact* b2CircleContact::Create(b2Fixture* fixtureA, int32, b2Fixture...

FILE: src/libraries/box2d/dynamics/b2_circle_contact.h
  function class (line 30) | class b2CircleContact : public b2Contact

FILE: src/libraries/box2d/dynamics/b2_contact.cpp
  function b2Contact (line 73) | b2Contact* b2Contact::Create(b2Fixture* fixtureA, int32 indexA, b2Fixtur...

FILE: src/libraries/box2d/dynamics/b2_contact_solver.cpp
  type b2ContactPositionConstraint (line 36) | struct b2ContactPositionConstraint
  type b2PositionSolverManifold (line 624) | struct b2PositionSolverManifold
    method Initialize (line 626) | void Initialize(b2ContactPositionConstraint* pc, const b2Transform& xf...

FILE: src/libraries/box2d/dynamics/b2_contact_solver.h
  type b2ContactPositionConstraint (line 33) | struct b2ContactPositionConstraint
  type b2VelocityConstraintPoint (line 35) | struct b2VelocityConstraintPoint
  type b2ContactVelocityConstraint (line 46) | struct b2ContactVelocityConstraint
  type b2ContactSolverDef (line 64) | struct b2ContactSolverDef
  function class (line 74) | class b2ContactSolver

FILE: src/libraries/box2d/dynamics/b2_distance_joint.cpp
  function b2Vec2 (line 316) | b2Vec2 b2DistanceJoint::GetAnchorA() const
  function b2Vec2 (line 321) | b2Vec2 b2DistanceJoint::GetAnchorB() const
  function b2Vec2 (line 326) | b2Vec2 b2DistanceJoint::GetReactionForce(float inv_dt) const

FILE: src/libraries/box2d/dynamics/b2_edge_circle_contact.cpp
  function b2Contact (line 30) | b2Contact* b2EdgeAndCircleContact::Create(b2Fixture* fixtureA, int32, b2...

FILE: src/libraries/box2d/dynamics/b2_edge_circle_contact.h
  function class (line 30) | class b2EdgeAndCircleContact : public b2Contact

FILE: src/libraries/box2d/dynamics/b2_edge_polygon_contact.cpp
  function b2Contact (line 30) | b2Contact* b2EdgeAndPolygonContact::Create(b2Fixture* fixtureA, int32, b...

FILE: src/libraries/box2d/dynamics/b2_edge_polygon_contact.h
  function class (line 30) | class b2EdgeAndPolygonContact : public b2Contact

FILE: src/libraries/box2d/dynamics/b2_friction_joint.cpp
  function b2Vec2 (line 199) | b2Vec2 b2FrictionJoint::GetAnchorA() const
  function b2Vec2 (line 204) | b2Vec2 b2FrictionJoint::GetAnchorB() const
  function b2Vec2 (line 209) | b2Vec2 b2FrictionJoint::GetReactionForce(float inv_dt) const

FILE: src/libraries/box2d/dynamics/b2_gear_joint.cpp
  function b2Vec2 (line 380) | b2Vec2 b2GearJoint::GetAnchorA() const
  function b2Vec2 (line 385) | b2Vec2 b2GearJoint::GetAnchorB() const
  function b2Vec2 (line 390) | b2Vec2 b2GearJoint::GetReactionForce(float inv_dt) const

FILE: src/libraries/box2d/dynamics/b2_island.h
  type b2ContactVelocityConstraint (line 34) | struct b2ContactVelocityConstraint
  type b2Profile (line 35) | struct b2Profile
  function class (line 38) | class b2Island

FILE: src/libraries/box2d/dynamics/b2_joint.cpp
  function b2LinearStiffness (line 40) | void b2LinearStiffness(float& stiffness, float& damping,
  function b2AngularStiffness (line 65) | void b2AngularStiffness(float& stiffness, float& damping,
  function b2Joint (line 90) | b2Joint* b2Joint::Create(const b2JointDef* def, b2BlockAllocator* alloca...

FILE: src/libraries/box2d/dynamics/b2_motor_joint.cpp
  function b2Vec2 (line 213) | b2Vec2 b2MotorJoint::GetAnchorA() const
  function b2Vec2 (line 218) | b2Vec2 b2MotorJoint::GetAnchorB() const
  function b2Vec2 (line 223) | b2Vec2 b2MotorJoint::GetReactionForce(float inv_dt) const
  function b2Vec2 (line 276) | const b2Vec2& b2MotorJoint::GetLinearOffset() const

FILE: src/libraries/box2d/dynamics/b2_mouse_joint.cpp
  function b2Vec2 (line 58) | const b2Vec2& b2MouseJoint::GetTarget() const
  function b2Vec2 (line 169) | b2Vec2 b2MouseJoint::GetAnchorA() const
  function b2Vec2 (line 174) | b2Vec2 b2MouseJoint::GetAnchorB() const
  function b2Vec2 (line 179) | b2Vec2 b2MouseJoint::GetReactionForce(float inv_dt) const

FILE: src/libraries/box2d/dynamics/b2_polygon_circle_contact.cpp
  function b2Contact (line 30) | b2Contact* b2PolygonAndCircleContact::Create(b2Fixture* fixtureA, int32,...

FILE: src/libraries/box2d/dynamics/b2_polygon_circle_contact.h
  function class (line 30) | class b2PolygonAndCircleContact : public b2Contact

FILE: src/libraries/box2d/dynamics/b2_polygon_contact.cpp
  function b2Contact (line 33) | b2Contact* b2PolygonContact::Create(b2Fixture* fixtureA, int32, b2Fixtur...

FILE: src/libraries/box2d/dynamics/b2_polygon_contact.h
  function class (line 30) | class b2PolygonContact : public b2Contact

FILE: src/libraries/box2d/dynamics/b2_prismatic_joint.cpp
  function b2Vec2 (line 453) | b2Vec2 b2PrismaticJoint::GetAnchorA() const
  function b2Vec2 (line 458) | b2Vec2 b2PrismaticJoint::GetAnchorB() const
  function b2Vec2 (line 463) | b2Vec2 b2PrismaticJoint::GetReactionForce(float inv_dt) const

FILE: src/libraries/box2d/dynamics/b2_pulley_joint.cpp
  function b2Vec2 (line 266) | b2Vec2 b2PulleyJoint::GetAnchorA() const
  function b2Vec2 (line 271) | b2Vec2 b2PulleyJoint::GetAnchorB() const
  function b2Vec2 (line 276) | b2Vec2 b2PulleyJoint::GetReactionForce(float inv_dt) const
  function b2Vec2 (line 288) | b2Vec2 b2PulleyJoint::GetGroundAnchorA() const
  function b2Vec2 (line 293) | b2Vec2 b2PulleyJoint::GetGroundAnchorB() const

FILE: src/libraries/box2d/dynamics/b2_revolute_joint.cpp
  function b2Vec2 (line 323) | b2Vec2 b2RevoluteJoint::GetAnchorA() const
  function b2Vec2 (line 328) | b2Vec2 b2RevoluteJoint::GetAnchorB() const
  function b2Vec2 (line 333) | b2Vec2 b2RevoluteJoint::GetReactionForce(float inv_dt) const

FILE: src/libraries/box2d/dynamics/b2_weld_joint.cpp
  function b2Vec2 (line 308) | b2Vec2 b2WeldJoint::GetAnchorA() const
  function b2Vec2 (line 313) | b2Vec2 b2WeldJoint::GetAnchorB() const
  function b2Vec2 (line 318) | b2Vec2 b2WeldJoint::GetReactionForce(float inv_dt) const

FILE: src/libraries/box2d/dynamics/b2_wheel_joint.cpp
  function b2Vec2 (line 446) | b2Vec2 b2WheelJoint::GetAnchorA() const
  function b2Vec2 (line 451) | b2Vec2 b2WheelJoint::GetAnchorB() const
  function b2Vec2 (line 456) | b2Vec2 b2WheelJoint::GetReactionForce(float inv_dt) const

FILE: src/libraries/box2d/dynamics/b2_world.cpp
  function b2Body (line 115) | b2Body* b2World::CreateBody(const b2BodyDef* def)
  function b2Joint (line 220) | b2Joint* b2World::CreateJoint(const b2JointDef* def)
  type b2WorldQueryWrapper (line 982) | struct b2WorldQueryWrapper
    method QueryCallback (line 984) | bool QueryCallback(int32 proxyId)
  type b2WorldRayCastWrapper (line 1002) | struct b2WorldRayCastWrapper
    method RayCastCallback (line 1004) | float RayCastCallback(const b2RayCastInput& input, int32 proxyId)
  function int32 (line 1217) | int32 b2World::GetProxyCount() const
  function int32 (line 1222) | int32 b2World::GetTreeHeight() const
  function int32 (line 1227) | int32 b2World::GetTreeBalance() const

FILE: src/libraries/box2d/rope/b2_rope.cpp
  type b2RopeStretch (line 28) | struct b2RopeStretch
  type b2RopeBend (line 38) | struct b2RopeBend

FILE: src/libraries/ddsparse/ddsinfo.h
  function namespace (line 32) | namespace dds

FILE: src/libraries/ddsparse/ddsparse.cpp
  type dds (line 28) | namespace dds
    function DXGIFormat (line 40) | static DXGIFormat getDXGIFormat(const DDSPixelFormat& ddpf)
    function getBitsPerPixel (line 222) | static size_t getBitsPerPixel(DXGIFormat fmt)
    function isBlockCompressed (line 348) | static bool isBlockCompressed(DXGIFormat fmt)
    function isDDS (line 379) | bool isDDS(const void *data, size_t dataSize)
    function DXGIFormat (line 413) | DXGIFormat getDDSPixelFormat(const void *data, size_t dataSize)
    function isCompressedDDS (line 434) | bool isCompressedDDS(const void *data, size_t dataSize)
    function Parser (line 457) | Parser &Parser::operator = (const Parser &other)
    function DXGIFormat (line 469) | DXGIFormat Parser::getFormat() const
    function Image (line 474) | const Image *Parser::getImageData(size_t miplevel) const

FILE: src/libraries/ddsparse/ddsparse.h
  function namespace (line 33) | namespace dds

FILE: src/libraries/dr/dr_flac.h
  type drflac_int8 (line 241) | typedef   signed char           drflac_int8;
  type drflac_uint8 (line 242) | typedef unsigned char           drflac_uint8;
  type drflac_int16 (line 243) | typedef   signed short          drflac_int16;
  type drflac_uint16 (line 244) | typedef unsigned short          drflac_uint16;
  type drflac_int32 (line 245) | typedef   signed int            drflac_int32;
  type drflac_uint32 (line 246) | typedef unsigned int            drflac_uint32;
  type drflac_int64 (line 248) | typedef   signed __int64    drflac_int64;
  type drflac_uint64 (line 249) | typedef unsigned __int64    drflac_uint64;
  type drflac_int64 (line 258) | typedef   signed long long  drflac_int64;
  type drflac_uint64 (line 259) | typedef unsigned long long  drflac_uint64;
  type drflac_uint64 (line 265) | typedef drflac_uint64       drflac_uintptr;
  type drflac_uint32 (line 267) | typedef drflac_uint32       drflac_uintptr;
  type drflac_uint8 (line 269) | typedef drflac_uint8            drflac_bool8;
  type drflac_uint32 (line 270) | typedef drflac_uint32           drflac_bool32;
  type drflac_uint64 (line 335) | typedef drflac_uint64 drflac_cache_t;
  type drflac_uint32 (line 337) | typedef drflac_uint32 drflac_cache_t;
  type drflac_container (line 373) | typedef enum
  type drflac_seek_origin (line 380) | typedef enum
  type drflac_seekpoint (line 388) | typedef struct
  type drflac_streaminfo (line 396) | typedef struct
  type drflac_metadata (line 409) | typedef struct
  type drflac_bool32 (line 541) | typedef drflac_bool32 (* drflac_seek_proc)(void* pUserData, int offset, ...
  type drflac_allocation_callbacks (line 564) | typedef struct
  type drflac__memory_stream (line 573) | typedef struct
  type drflac_bs (line 581) | typedef struct
  type drflac_subframe (line 625) | typedef struct
  type drflac_frame_header (line 640) | typedef struct
  type drflac_frame (line 673) | typedef struct
  type drflac (line 688) | typedef struct
  type drflac_vorbis_comment_iterator (line 1257) | typedef struct
  type drflac_cuesheet_track_iterator (line 1277) | typedef struct
  type drflac_cuesheet_track_index (line 1285) | typedef struct
  type drflac_cuesheet_track (line 1293) | typedef struct
  function drflac__cpuid (line 1450) | static void drflac__cpuid(int info[4], int fid)
  function drflac__cpuid (line 1459) | static void drflac__cpuid(int info[4], int fid)
  function drflac_has_sse2 (line 1489) | drflac_has_sse2(void)
  function drflac_has_sse41 (line 1514) | drflac_has_sse41(void)
  type drflac_int32 (line 1626) | typedef drflac_int32 drflac_result;
  function DRFLAC_API (line 1700) | DRFLAC_API void drflac_version(drflac_uint32* pMajor, drflac_uint32* pMi...
  function DRFLAC_API (line 1715) | DRFLAC_API const char* drflac_version_string(void)
  function DRFLAC_NO_THREAD_SANITIZE (line 1746) | DRFLAC_NO_THREAD_SANITIZE static void drflac__init_cpu_caps(void)
  function drflac__has_neon (line 1771) | drflac__has_neon(void)
  function DRFLAC_NO_THREAD_SANITIZE (line 1789) | DRFLAC_NO_THREAD_SANITIZE static void drflac__init_cpu_caps(void)
  function drflac__is_little_endian (line 1801) | drflac__is_little_endian(void)
  function DRFLAC_INLINE (line 1813) | static DRFLAC_INLINE drflac_uint16 drflac__swap_endian_uint16(drflac_uin...
  function DRFLAC_INLINE (line 1864) | static DRFLAC_INLINE drflac_uint64 drflac__swap_endian_uint64(drflac_uin...
  function DRFLAC_INLINE (line 1890) | static DRFLAC_INLINE drflac_uint16 drflac__be2host_16(drflac_uint16 n)
  function DRFLAC_INLINE (line 1899) | static DRFLAC_INLINE drflac_uint32 drflac__be2host_32(drflac_uint32 n)
  function DRFLAC_INLINE (line 1908) | static DRFLAC_INLINE drflac_uint32 drflac__be2host_32_ptr_unaligned(cons...
  function DRFLAC_INLINE (line 1914) | static DRFLAC_INLINE drflac_uint64 drflac__be2host_64(drflac_uint64 n)
  function DRFLAC_INLINE (line 1924) | static DRFLAC_INLINE drflac_uint32 drflac__le2host_32(drflac_uint32 n)
  function DRFLAC_INLINE (line 1933) | static DRFLAC_INLINE drflac_uint32 drflac__le2host_32_ptr_unaligned(cons...
  function DRFLAC_INLINE (line 1940) | static DRFLAC_INLINE drflac_uint32 drflac__unsynchsafe_32(drflac_uint32 n)
  function DRFLAC_INLINE (line 2008) | static DRFLAC_INLINE drflac_uint8 drflac_crc8_byte(drflac_uint8 crc, drf...
  function DRFLAC_INLINE (line 2013) | static DRFLAC_INLINE drflac_uint8 drflac_crc8(drflac_uint8 crc, drflac_u...
  function DRFLAC_INLINE (line 2060) | static DRFLAC_INLINE drflac_uint16 drflac_crc16_byte(drflac_uint16 crc, ...
  function DRFLAC_INLINE (line 2065) | static DRFLAC_INLINE drflac_uint16 drflac_crc16_cache(drflac_uint16 crc,...
  function DRFLAC_INLINE (line 2081) | static DRFLAC_INLINE drflac_uint16 drflac_crc16_bytes(drflac_uint16 crc,...
  function DRFLAC_INLINE (line 2101) | static DRFLAC_INLINE drflac_uint16 drflac_crc16__32bit(drflac_uint16 crc...
  function DRFLAC_INLINE (line 2150) | static DRFLAC_INLINE drflac_uint16 drflac_crc16__64bit(drflac_uint16 crc...
  function DRFLAC_INLINE (line 2189) | static DRFLAC_INLINE drflac_uint16 drflac_crc16(drflac_uint16 crc, drfla...
  function DRFLAC_INLINE (line 2229) | static DRFLAC_INLINE void drflac__reset_crc16(drflac_bs* bs)
  function DRFLAC_INLINE (line 2235) | static DRFLAC_INLINE void drflac__update_crc16(drflac_bs* bs)
  function DRFLAC_INLINE (line 2245) | static DRFLAC_INLINE drflac_uint16 drflac__flush_crc16(drflac_bs* bs)
  function DRFLAC_INLINE (line 2271) | static DRFLAC_INLINE drflac_bool32 drflac__reload_l1_cache_from_l2(drfla...
  function drflac_bool32 (line 2330) | static drflac_bool32 drflac__reload_cache(drflac_bs* bs)
  function drflac__reset_cache (line 2375) | static void drflac__reset_cache(drflac_bs* bs)
  function DRFLAC_INLINE (line 2390) | static DRFLAC_INLINE drflac_bool32 drflac__read_uint32(drflac_bs* bs, un...
  function drflac_bool32 (line 2452) | static drflac_bool32 drflac__read_int32(drflac_bs* bs, unsigned int bitC...
  function drflac_bool32 (line 2477) | static drflac_bool32 drflac__read_uint64(drflac_bs* bs, unsigned int bit...
  function drflac_bool32 (line 2500) | static drflac_bool32 drflac__read_int64(drflac_bs* bs, unsigned int bitC...
  function drflac_bool32 (line 2519) | static drflac_bool32 drflac__read_uint16(drflac_bs* bs, unsigned int bit...
  function drflac_bool32 (line 2537) | static drflac_bool32 drflac__read_int16(drflac_bs* bs, unsigned int bitC...
  function drflac_bool32 (line 2555) | static drflac_bool32 drflac__read_uint8(drflac_bs* bs, unsigned int bitC...
  function drflac_bool32 (line 2572) | static drflac_bool32 drflac__read_int8(drflac_bs* bs, unsigned int bitCo...
  function drflac_bool32 (line 2590) | static drflac_bool32 drflac__seek_bits(drflac_bs* bs, size_t bitsToSeek)
  function drflac_bool32 (line 2646) | static drflac_bool32 drflac__find_and_seek_to_next_sync_code(drflac_bs* bs)
  function DRFLAC_INLINE (line 2700) | static DRFLAC_INLINE drflac_uint32 drflac__clz_software(drflac_cache_t x)
  function drflac__is_lzcnt_supported (line 2734) | drflac__is_lzcnt_supported(void)
  function DRFLAC_INLINE (line 2829) | static DRFLAC_INLINE drflac_uint32 drflac__clz_msvc(drflac_cache_t x)
  function DRFLAC_INLINE (line 2856) | static DRFLAC_INLINE drflac_uint32 drflac__clz(drflac_cache_t x)
  function DRFLAC_INLINE (line 2875) | static DRFLAC_INLINE drflac_bool32 drflac__seek_past_next_set_bit(drflac...
  function drflac_bool32 (line 2914) | static drflac_bool32 drflac__seek_to_byte(drflac_bs* bs, drflac_uint64 o...
  function drflac_result (line 2955) | static drflac_result drflac__read_utf8_coded_number(drflac_bs* bs, drfla...
  function DRFLAC_INLINE (line 3019) | static DRFLAC_INLINE drflac_uint32 drflac__ilog2_u32(drflac_uint32 x)
  function DRFLAC_INLINE (line 3032) | static DRFLAC_INLINE drflac_bool32 drflac__use_64_bit_prediction(drflac_...
  function DRFLAC_INLINE (line 3046) | __attribute__((no_sanitize("signed-integer-overflow")))
  function DRFLAC_INLINE (line 3096) | static DRFLAC_INLINE drflac_int32 drflac__calculate_prediction_64(drflac...
  function drflac_bool32 (line 3283) | static drflac_bool32 drflac__decode_samples_with_residual__rice__referen...
  function drflac_bool32 (line 3334) | static drflac_bool32 drflac__read_rice_parts__reference(drflac_bs* bs, d...
  function DRFLAC_INLINE (line 3367) | static DRFLAC_INLINE drflac_bool32 drflac__read_rice_parts(drflac_bs* bs...
  function DRFLAC_INLINE (line 3441) | static DRFLAC_INLINE drflac_bool32 drflac__read_rice_parts_x1(drflac_bs*...
  function DRFLAC_INLINE (line 3566) | static DRFLAC_INLINE drflac_bool32 drflac__seek_rice_parts(drflac_bs* bs...
  function drflac_bool32 (line 3673) | static drflac_bool32 drflac__decode_samples_with_residual__rice__scalar_...
  function drflac_bool32 (line 3711) | static drflac_bool32 drflac__decode_samples_with_residual__rice__scalar(...
  function DRFLAC_INLINE (line 3832) | static DRFLAC_INLINE __m128i drflac__mm_packs_interleaved_epi32(__m128i ...
  function DRFLAC_INLINE (line 3851) | static DRFLAC_INLINE __m128i drflac__mm_not_si128(__m128i a)
  function DRFLAC_INLINE (line 3856) | static DRFLAC_INLINE __m128i drflac__mm_hadd_epi32(__m128i x)
  function DRFLAC_INLINE (line 3863) | static DRFLAC_INLINE __m128i drflac__mm_hadd_epi64(__m128i x)
  function DRFLAC_INLINE (line 3868) | static DRFLAC_INLINE __m128i drflac__mm_srai_epi64(__m128i x, int count)
  function drflac_bool32 (line 3882) | static drflac_bool32 drflac__decode_samples_with_residual__rice__sse41_3...
  function drflac_bool32 (line 4087) | static drflac_bool32 drflac__decode_samples_with_residual__rice__sse41_6...
  function drflac_bool32 (line 4277) | static drflac_bool32 drflac__decode_samples_with_residual__rice__sse41(d...
  function DRFLAC_INLINE (line 4296) | static DRFLAC_INLINE void drflac__vst2q_s32(drflac_int32* p, int32x4x2_t x)
  function DRFLAC_INLINE (line 4302) | static DRFLAC_INLINE void drflac__vst2q_u32(drflac_uint32* p, uint32x4x2...
  function DRFLAC_INLINE (line 4308) | static DRFLAC_INLINE void drflac__vst2q_f32(float* p, float32x4x2_t x)
  function DRFLAC_INLINE (line 4314) | static DRFLAC_INLINE void drflac__vst2q_s16(drflac_int16* p, int16x4x2_t x)
  function DRFLAC_INLINE (line 4319) | static DRFLAC_INLINE void drflac__vst2q_u16(drflac_uint16* p, uint16x4x2...
  function DRFLAC_INLINE (line 4324) | static DRFLAC_INLINE int32x4_t drflac__vdupq_n_s32x4(drflac_int32 x3, dr...
  function DRFLAC_INLINE (line 4334) | static DRFLAC_INLINE int32x4_t drflac__valignrq_s32_1(int32x4_t a, int32...
  function DRFLAC_INLINE (line 4349) | static DRFLAC_INLINE uint32x4_t drflac__valignrq_u32_1(uint32x4_t a, uin...
  function DRFLAC_INLINE (line 4364) | static DRFLAC_INLINE int32x2_t drflac__vhaddq_s32(int32x4_t x)
  function DRFLAC_INLINE (line 4380) | static DRFLAC_INLINE int64x1_t drflac__vhaddq_s64(int64x2_t x)
  function DRFLAC_INLINE (line 4385) | static DRFLAC_INLINE int32x4_t drflac__vrevq_s32(int32x4_t x)
  function DRFLAC_INLINE (line 4398) | static DRFLAC_INLINE int32x4_t drflac__vnotq_s32(int32x4_t x)
  function DRFLAC_INLINE (line 4403) | static DRFLAC_INLINE uint32x4_t drflac__vnotq_u32(uint32x4_t x)
  function drflac_bool32 (line 4408) | static drflac_bool32 drflac__decode_samples_with_residual__rice__neon_32...
  function drflac_bool32 (line 4597) | static drflac_bool32 drflac__decode_samples_with_residual__rice__neon_64...
  function drflac_bool32 (line 4775) | static drflac_bool32 drflac__decode_samples_with_residual__rice__neon(dr...
  function drflac_bool32 (line 4793) | static drflac_bool32 drflac__decode_samples_with_residual__rice(drflac_b...
  function drflac_bool32 (line 4815) | static drflac_bool32 drflac__read_and_seek_residual__rice(drflac_bs* bs,...
  function drflac_bool32 (line 4831) | __attribute__((no_sanitize("signed-integer-overflow")))
  function drflac_bool32 (line 4866) | static drflac_bool32 drflac__decode_samples_with_residual(drflac_bs* bs,...
  function drflac_bool32 (line 4961) | static drflac_bool32 drflac__read_and_seek_residual(drflac_bs* bs, drfla...
  function drflac_bool32 (line 5045) | static drflac_bool32 drflac__decode_samples__constant(drflac_bs* bs, drf...
  function drflac_bool32 (line 5066) | static drflac_bool32 drflac__decode_samples__verbatim(drflac_bs* bs, drf...
  function drflac_bool32 (line 5082) | static drflac_bool32 drflac__decode_samples__fixed(drflac_bs* bs, drflac...
  function drflac_bool32 (line 5111) | static drflac_bool32 drflac__decode_samples__lpc(drflac_bs* bs, drflac_u...
  function drflac_bool32 (line 5167) | static drflac_bool32 drflac__read_next_flac_frame_header(drflac_bs* bs, ...
  function drflac_bool32 (line 5346) | static drflac_bool32 drflac__read_subframe_header(drflac_bs* bs, drflac_...
  function drflac_bool32 (line 5398) | static drflac_bool32 drflac__decode_subframe(drflac_bs* bs, drflac_frame...
  function drflac_bool32 (line 5460) | static drflac_bool32 drflac__seek_subframe(drflac_bs* bs, drflac_frame* ...
  function DRFLAC_INLINE (line 5553) | static DRFLAC_INLINE drflac_uint8 drflac__get_channel_count_from_channel...
  function drflac_result (line 5561) | static drflac_result drflac__decode_flac_frame(drflac* pFlac)
  function drflac_result (line 5617) | static drflac_result drflac__seek_flac_frame(drflac* pFlac)
  function drflac_bool32 (line 5655) | static drflac_bool32 drflac__read_and_decode_next_flac_frame(drflac* pFlac)
  function drflac__get_pcm_frame_range_of_current_flac_frame (line 5679) | static void drflac__get_pcm_frame_range_of_current_flac_frame(drflac* pF...
  function drflac_bool32 (line 5704) | static drflac_bool32 drflac__seek_to_first_frame(drflac* pFlac)
  function DRFLAC_INLINE (line 5718) | static DRFLAC_INLINE drflac_result drflac__seek_to_next_flac_frame(drfla...
  function drflac_uint64 (line 5726) | static drflac_uint64 drflac__seek_forward_by_pcm_frames(drflac* pFlac, d...
  function drflac_bool32 (line 5752) | static drflac_bool32 drflac__seek_to_pcm_frame__brute_force(drflac* pFla...
  function drflac_bool32 (line 5871) | static drflac_bool32 drflac__seek_to_approximate_flac_frame_to_byte(drfl...
  function drflac_bool32 (line 5940) | static drflac_bool32 drflac__decode_flac_frame_and_seek_forward_by_pcm_f...
  function drflac_bool32 (line 5956) | static drflac_bool32 drflac__seek_to_pcm_frame__binary_search_internal(d...
  function drflac_bool32 (line 6053) | static drflac_bool32 drflac__seek_to_pcm_frame__binary_search(drflac* pF...
  function drflac_bool32 (line 6080) | static drflac_bool32 drflac__seek_to_pcm_frame__seek_table(drflac* pFlac...
  type drflac_ogg_page_header (line 6261) | typedef struct
  type drflac_init_info (line 6275) | typedef struct
  function DRFLAC_INLINE (line 6301) | static DRFLAC_INLINE void drflac__decode_block_header(drflac_uint32 bloc...
  function DRFLAC_INLINE (line 6309) | static DRFLAC_INLINE drflac_bool32 drflac__read_and_decode_block_header(...
  function drflac_bool32 (line 6322) | static drflac_bool32 drflac__read_streaminfo(drflac_read_proc onRead, vo...
  function drflac__free_default (line 6379) | static void drflac__free_default(void* p, void* pUserData)
  function drflac__free_from_callbacks (line 6434) | static void drflac__free_from_callbacks(void* p, const drflac_allocation...
  function drflac_bool32 (line 6446) | static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc o...
  function drflac_bool32 (line 6807) | static drflac_bool32 drflac__init_private__native(drflac_init_info* pIni...
  type drflac_ogg_crc_mismatch_recovery (line 6881) | typedef enum
  function DRFLAC_INLINE (line 6956) | static DRFLAC_INLINE drflac_uint32 drflac_crc32_byte(drflac_uint32 crc32...
  function DRFLAC_INLINE (line 6967) | static DRFLAC_INLINE drflac_uint32 drflac_crc32_uint32(drflac_uint32 crc...
  function DRFLAC_INLINE (line 6976) | static DRFLAC_INLINE drflac_uint32 drflac_crc32_uint64(drflac_uint32 crc...
  function DRFLAC_INLINE (line 6984) | static DRFLAC_INLINE drflac_uint32 drflac_crc32_buffer(drflac_uint32 crc...
  function DRFLAC_INLINE (line 6995) | static DRFLAC_INLINE drflac_bool32 drflac_ogg__is_capture_pattern(drflac...
  function DRFLAC_INLINE (line 7000) | static DRFLAC_INLINE drflac_uint32 drflac_ogg__get_page_header_size(drfl...
  function DRFLAC_INLINE (line 7005) | static DRFLAC_INLINE drflac_uint32 drflac_ogg__get_page_body_size(drflac...
  function drflac_result (line 7017) | static drflac_result drflac_ogg__read_page_header_after_capture_pattern(...
  function drflac_result (line 7070) | static drflac_result drflac_ogg__read_page_header(drflac_read_proc onRea...
  type drflac_oggbs (line 7119) | typedef struct
  function drflac_oggbs__read_physical (line 7134) | static size_t drflac_oggbs__read_physical(drflac_oggbs* oggbs, void* buf...
  function drflac_bool32 (line 7142) | static drflac_bool32 drflac_oggbs__seek_physical(drflac_oggbs* oggbs, dr...
  function drflac_bool32 (line 7178) | static drflac_bool32 drflac_oggbs__goto_next_page(drflac_oggbs* oggbs, d...
  function drflac_uint8 (line 7241) | static drflac_uint8 drflac_oggbs__get_current_segment_index(drflac_oggbs...
  function drflac_bool32 (line 7260) | static drflac_bool32 drflac_oggbs__seek_to_next_packet(drflac_oggbs* oggbs)
  function drflac_bool32 (line 7310) | static drflac_bool32 drflac_oggbs__seek_to_next_frame(drflac_oggbs* oggbs)
  function drflac__on_read_ogg (line 7319) | static size_t drflac__on_read_ogg(void* pUserData, void* bufferOut, size...
  function drflac_bool32 (line 7356) | static drflac_bool32 drflac__on_seek_ogg(void* pUserData, int offset, dr...
  function drflac_bool32 (line 7407) | static drflac_bool32 drflac_ogg__seek_to_pcm_frame(drflac* pFlac, drflac...
  function drflac_bool32 (line 7564) | static drflac_bool32 drflac__init_private__ogg(drflac_init_info* pInit, ...
  function drflac_bool32 (line 7722) | static drflac_bool32 drflac__init_private(drflac_init_info* pInit, drfla...
  function drflac__init_from_info (line 7807) | static void drflac__init_from_info(drflac* pFlac, const drflac_init_info...
  function drflac (line 7825) | static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead...
  function drflac_result (line 8042) | static drflac_result drflac_result_from_errno(int e)
  function drflac_result (line 8444) | static drflac_result drflac_fopen(FILE** ppFile, const char* pFilePath, ...
  function drflac_result (line 8504) | static drflac_result drflac_wfopen(FILE** ppFile, const wchar_t* pFilePa...
  function drflac__on_read_stdio (line 8586) | static size_t drflac__on_read_stdio(void* pUserData, void* bufferOut, si...
  function drflac_bool32 (line 8591) | static drflac_bool32 drflac__on_seek_stdio(void* pUserData, int offset, ...
  function DRFLAC_API (line 8599) | DRFLAC_API drflac* drflac_open_file(const char* pFileName, const drflac_...
  function DRFLAC_API (line 8617) | DRFLAC_API drflac* drflac_open_file_w(const wchar_t* pFileName, const dr...
  function DRFLAC_API (line 8635) | DRFLAC_API drflac* drflac_open_file_with_metadata(const char* pFileName,...
  function DRFLAC_API (line 8653) | DRFLAC_API drflac* drflac_open_file_with_metadata_w(const wchar_t* pFile...
  function drflac__on_read_memory (line 8672) | static size_t drflac__on_read_memory(void* pUserData, void* bufferOut, s...
  function drflac_bool32 (line 8693) | static drflac_bool32 drflac__on_seek_memory(void* pUserData, int offset,...
  function DRFLAC_API (line 8721) | DRFLAC_API drflac* drflac_open_memory(const void* pData, size_t dataSize...
  function DRFLAC_API (line 8752) | DRFLAC_API drflac* drflac_open_memory_with_metadata(const void* pData, s...
  function DRFLAC_API (line 8785) | DRFLAC_API drflac* drflac_open(drflac_read_proc onRead, drflac_seek_proc...
  function DRFLAC_API (line 8789) | DRFLAC_API drflac* drflac_open_relaxed(drflac_read_proc onRead, drflac_s...
  function DRFLAC_API (line 8794) | DRFLAC_API drflac* drflac_open_with_metadata(drflac_read_proc onRead, dr...
  function DRFLAC_API (line 8798) | DRFLAC_API drflac* drflac_open_with_metadata_relaxed(drflac_read_proc on...
  function DRFLAC_API (line 8803) | DRFLAC_API void drflac_close(drflac* pFlac)
  function DRFLAC_INLINE (line 8836) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_left_side__...
  function DRFLAC_INLINE (line 8850) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_left_side__...
  function DRFLAC_INLINE (line 8896) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_left_side__...
  function DRFLAC_INLINE (line 8928) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_left_side__...
  function DRFLAC_INLINE (line 8967) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_left_side(d...
  function DRFLAC_INLINE (line 8990) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_right_side_...
  function DRFLAC_INLINE (line 9004) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_right_side_...
  function DRFLAC_INLINE (line 9050) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_right_side_...
  function DRFLAC_INLINE (line 9082) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_right_side_...
  function DRFLAC_INLINE (line 9121) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_right_side(...
  function DRFLAC_INLINE (line 9144) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_mid_side__r...
  function DRFLAC_INLINE (line 9158) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_mid_side__s...
  function DRFLAC_INLINE (line 9271) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_mid_side__s...
  function DRFLAC_INLINE (line 9343) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_mid_side__n...
  function DRFLAC_INLINE (line 9423) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_mid_side(dr...
  function DRFLAC_INLINE (line 9446) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_independent...
  function DRFLAC_INLINE (line 9455) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_independent...
  function DRFLAC_INLINE (line 9492) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_independent...
  function DRFLAC_INLINE (line 9517) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_independent...
  function DRFLAC_INLINE (line 9546) | static DRFLAC_INLINE void drflac_read_pcm_frames_s32__decode_independent...
  function DRFLAC_API (line 9568) | DRFLAC_API drflac_uint64 drflac_read_pcm_frames_s32(drflac* pFlac, drfla...
  function DRFLAC_INLINE (line 9651) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_left_side__...
  function DRFLAC_INLINE (line 9668) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_left_side__...
  function DRFLAC_INLINE (line 9727) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_left_side__...
  function DRFLAC_INLINE (line 9764) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_left_side__...
  function DRFLAC_INLINE (line 9809) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_left_side(d...
  function DRFLAC_INLINE (line 9832) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_right_side_...
  function DRFLAC_INLINE (line 9849) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_right_side_...
  function DRFLAC_INLINE (line 9908) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_right_side_...
  function DRFLAC_INLINE (line 9945) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_right_side_...
  function DRFLAC_INLINE (line 9990) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_right_side(...
  function DRFLAC_INLINE (line 10013) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_mid_side__r...
  function DRFLAC_INLINE (line 10027) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_mid_side__s...
  function DRFLAC_INLINE (line 10160) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_mid_side__s...
  function DRFLAC_INLINE (line 10236) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_mid_side__n...
  function DRFLAC_INLINE (line 10320) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_mid_side(dr...
  function DRFLAC_INLINE (line 10343) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_independent...
  function DRFLAC_INLINE (line 10352) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_independent...
  function DRFLAC_INLINE (line 10399) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_independent...
  function DRFLAC_INLINE (line 10427) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_independent...
  function DRFLAC_INLINE (line 10459) | static DRFLAC_INLINE void drflac_read_pcm_frames_s16__decode_independent...
  function DRFLAC_API (line 10480) | DRFLAC_API drflac_uint64 drflac_read_pcm_frames_s16(drflac* pFlac, drfla...
  function DRFLAC_INLINE (line 10564) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_left_side__...
  function DRFLAC_INLINE (line 10578) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_left_side__...
  function DRFLAC_INLINE (line 10626) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_left_side__...
  function DRFLAC_INLINE (line 10663) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_left_side__...
  function DRFLAC_INLINE (line 10708) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_left_side(d...
  function DRFLAC_INLINE (line 10731) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_right_side_...
  function DRFLAC_INLINE (line 10745) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_right_side_...
  function DRFLAC_INLINE (line 10792) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_right_side_...
  function DRFLAC_INLINE (line 10829) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_right_side_...
  function DRFLAC_INLINE (line 10874) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_right_side(...
  function DRFLAC_INLINE (line 10897) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_mid_side__r...
  function DRFLAC_INLINE (line 10911) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_mid_side__s...
  function DRFLAC_INLINE (line 11025) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_mid_side__s...
  function DRFLAC_INLINE (line 11112) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_mid_side__n...
  function DRFLAC_INLINE (line 11200) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_mid_side(dr...
  function DRFLAC_INLINE (line 11222) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_independent...
  function DRFLAC_INLINE (line 11231) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_independent...
  function DRFLAC_INLINE (line 11269) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_independent...
  function DRFLAC_INLINE (line 11305) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_independent...
  function DRFLAC_INLINE (line 11341) | static DRFLAC_INLINE void drflac_read_pcm_frames_f32__decode_independent...
  function DRFLAC_API (line 11362) | DRFLAC_API drflac_uint64 drflac_read_pcm_frames_f32(drflac* pFlac, drfla...
  function DRFLAC_API (line 11445) | DRFLAC_API drflac_bool32 drflac_seek_to_pcm_frame(drflac* pFlac, drflac_...
  function drflac_int32 (line 11630) | drflac_int32* drflac_open_and_read_pcm_frames_s32(drflac_read_proc onRea...
  function DRFLAC_API (line 11652) | DRFLAC_API drflac_int16* drflac_open_and_read_pcm_frames_s16(drflac_read...
  function DRFLAC_API (line 11674) | DRFLAC_API float* drflac_open_and_read_pcm_frames_f32(drflac_read_proc o...
  function DRFLAC_API (line 11697) | DRFLAC_API drflac_int32* drflac_open_file_and_read_pcm_frames_s32(const ...
  function DRFLAC_API (line 11719) | DRFLAC_API drflac_int16* drflac_open_file_and_read_pcm_frames_s16(const ...
  function DRFLAC_API (line 11741) | DRFLAC_API float* drflac_open_file_and_read_pcm_frames_f32(const char* f...
  function DRFLAC_API (line 11764) | DRFLAC_API drflac_int32* drflac_open_memory_and_read_pcm_frames_s32(cons...
  function DRFLAC_API (line 11786) | DRFLAC_API drflac_int16* drflac_open_memory_and_read_pcm_frames_s16(cons...
  function DRFLAC_API (line 11808) | DRFLAC_API float* drflac_open_memory_and_read_pcm_frames_f32(const void*...
  function DRFLAC_API (line 11831) | DRFLAC_API void drflac_free(void* p, const drflac_allocation_callbacks* ...
  function DRFLAC_API (line 11843) | DRFLAC_API void drflac_init_vorbis_comment_iterator(drflac_vorbis_commen...
  function DRFLAC_API (line 11853) | DRFLAC_API const char* drflac_next_vorbis_comment(drflac_vorbis_comment_...
  function DRFLAC_API (line 11884) | DRFLAC_API void drflac_init_cuesheet_track_iterator(drflac_cuesheet_trac...
  function DRFLAC_API (line 11894) | DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_trac...

FILE: src/libraries/dr/dr_mp3.h
  type drmp3_int8 (line 104) | typedef   signed char           drmp3_int8;
  type drmp3_uint8 (line 105) | typedef unsigned char           drmp3_uint8;
  type drmp3_int16 (line 106) | typedef   signed short          drmp3_int16;
  type drmp3_uint16 (line 107) | typedef unsigned short          drmp3_uint16;
  type drmp3_int32 (line 108) | typedef   signed int            drmp3_int32;
  type drmp3_uint32 (line 109) | typedef unsigned int            drmp3_uint32;
  type drmp3_int64 (line 111) | typedef   signed __int64    drmp3_int64;
  type drmp3_uint64 (line 112) | typedef unsigned __int64    drmp3_uint64;
  type drmp3_int64 (line 121) | typedef   signed long long  drmp3_int64;
  type drmp3_uint64 (line 122) | typedef unsigned long long  drmp3_uint64;
  type drmp3_uint64 (line 128) | typedef drmp3_uint64        drmp3_uintptr;
  type drmp3_uint32 (line 130) | typedef drmp3_uint32        drmp3_uintptr;
  type drmp3_uint8 (line 132) | typedef drmp3_uint8             drmp3_bool8;
  type drmp3_uint32 (line 133) | typedef drmp3_uint32            drmp3_bool32;
  type drmp3_int32 (line 167) | typedef drmp3_int32 drmp3_result;
  type drmp3dec_frame_info (line 263) | typedef struct
  type drmp3dec (line 268) | typedef struct
  type drmp3_seek_origin (line 290) | typedef enum
  type drmp3_seek_point (line 296) | typedef struct
  type drmp3_bool32 (line 330) | typedef drmp3_bool32 (* drmp3_seek_proc)(void* pUserData, int offset, dr...
  type drmp3_allocation_callbacks (line 332) | typedef struct
  type drmp3_config (line 340) | typedef struct
  type drmp3 (line 346) | typedef struct
  function DRMP3_API (line 531) | DRMP3_API void drmp3_version(drmp3_uint32* pMajor, drmp3_uint32* pMinor,...
  function DRMP3_API (line 546) | DRMP3_API const char* drmp3_version_string(void)
  type __m128 (line 620) | typedef __m128 drmp3_f4;
  function drmp3_have_simd (line 648) | static int drmp3_have_simd(void)
  type float32x4_t (line 688) | typedef float32x4_t drmp3_f4;
  function drmp3_have_simd (line 689) | static int drmp3_have_simd(void)
  function drmp3_int32 (line 709) | static __inline__ __attribute__((always_inline)) drmp3_int32 drmp3_clip_...
  type drmp3_bs (line 745) | typedef struct
  type drmp3_L12_scale_info (line 751) | typedef struct
  type drmp3_L12_subband_alloc (line 757) | typedef struct
  type drmp3_L3_gr_info (line 762) | typedef struct
  type drmp3dec_scratch (line 771) | typedef struct
  function drmp3_bs_init (line 780) | static void drmp3_bs_init(drmp3_bs *bs, const drmp3_uint8 *data, int bytes)
  function drmp3_uint32 (line 787) | static drmp3_uint32 drmp3_bs_get_bits(drmp3_bs *bs, int n)
  function drmp3_hdr_valid (line 803) | static int drmp3_hdr_valid(const drmp3_uint8 *h)
  function drmp3_hdr_compare (line 812) | static int drmp3_hdr_compare(const drmp3_uint8 *h1, const drmp3_uint8 *h2)
  function drmp3_hdr_bitrate_kbps (line 820) | static unsigned drmp3_hdr_bitrate_kbps(const drmp3_uint8 *h)
  function drmp3_hdr_sample_rate_hz (line 829) | static unsigned drmp3_hdr_sample_rate_hz(const drmp3_uint8 *h)
  function drmp3_hdr_frame_samples (line 835) | static unsigned drmp3_hdr_frame_samples(const drmp3_uint8 *h)
  function drmp3_hdr_frame_bytes (line 840) | static int drmp3_hdr_frame_bytes(const drmp3_uint8 *h, int free_format_s...
  function drmp3_hdr_padding (line 850) | static int drmp3_hdr_padding(const drmp3_uint8 *h)
  function drmp3_L12_subband_alloc (line 856) | static const drmp3_L12_subband_alloc *drmp3_L12_subband_alloc_table(cons...
  function drmp3_L12_read_scalefactors (line 901) | static void drmp3_L12_read_scalefactors(drmp3_bs *bs, drmp3_uint8 *pba, ...
  function drmp3_L12_read_scale_info (line 925) | static void drmp3_L12_read_scale_info(const drmp3_uint8 *hdr, drmp3_bs *...
  function drmp3_L12_dequantize_granule (line 973) | static int drmp3_L12_dequantize_granule(float *grbuf, drmp3_bs *bs, drmp...
  function drmp3_L12_apply_scf_384 (line 1008) | static void drmp3_L12_apply_scf_384(drmp3_L12_scale_info *sci, const flo...
  function drmp3_L3_read_side_info (line 1023) | static int drmp3_L3_read_side_info(drmp3_bs *bs, drmp3_L3_gr_info *gr, c...
  function drmp3_L3_read_scalefactors (line 1148) | static void drmp3_L3_read_scalefactors(drmp3_uint8 *scf, drmp3_uint8 *is...
  function drmp3_L3_ldexp_q2 (line 1181) | static float drmp3_L3_ldexp_q2(float y, int exp_q2)
  function drmp3_L3_decode_scalefactors (line 1193) | static void drmp3_L3_decode_scalefactors(const drmp3_uint8 *hdr, drmp3_u...
  function drmp3_L3_pow_43 (line 1260) | static float drmp3_L3_pow_43(int x)
  function drmp3_L3_huffman (line 1281) | static void drmp3_L3_huffman(float *dst, drmp3_bs *bs, const drmp3_L3_gr...
  function drmp3_L3_midside_stereo (line 1418) | static void drmp3_L3_midside_stereo(float *left, int n)
  function drmp3_L3_intensity_stereo_band (line 1450) | static void drmp3_L3_intensity_stereo_band(float *left, int n, float kl,...
  function drmp3_L3_stereo_top_band (line 1460) | static void drmp3_L3_stereo_top_band(const float *right, const drmp3_uin...
  function drmp3_L3_stereo_process (line 1480) | static void drmp3_L3_stereo_process(float *left, const drmp3_uint8 *ist_...
  function drmp3_L3_intensity_stereo (line 1514) | static void drmp3_L3_intensity_stereo(float *left, drmp3_uint8 *ist_pos,...
  function drmp3_L3_reorder (line 1534) | static void drmp3_L3_reorder(float *grbuf, float *scratch, const drmp3_u...
  function drmp3_L3_antialias (line 1551) | static void drmp3_L3_antialias(float *grbuf, int nbands)
  function drmp3_L3_dct3_9 (line 1586) | static void drmp3_L3_dct3_9(float *y)
  function drmp3_L3_imdct36 (line 1626) | static void drmp3_L3_imdct36(float *grbuf, float *overlap, const float *...
  function drmp3_L3_idct3 (line 1683) | static void drmp3_L3_idct3(float x0, float x1, float x2, float *dst)
  function drmp3_L3_imdct12 (line 1692) | static void drmp3_L3_imdct12(float *x, float *dst, float *overlap)
  function drmp3_L3_imdct_short (line 1712) | static void drmp3_L3_imdct_short(float *grbuf, float *overlap, int nbands)
  function drmp3_L3_change_sign (line 1725) | static void drmp3_L3_change_sign(float *grbuf)
  function drmp3_L3_imdct_gr (line 1733) | static void drmp3_L3_imdct_gr(float *grbuf, float *overlap, unsigned blo...
  function drmp3_L3_save_reservoir (line 1751) | static void drmp3_L3_save_reservoir(drmp3dec *h, drmp3dec_scratch *s)
  function drmp3_L3_restore_reservoir (line 1767) | static int drmp3_L3_restore_reservoir(drmp3dec *h, drmp3_bs *bs, drmp3de...
  function drmp3_L3_decode (line 1777) | static void drmp3_L3_decode(drmp3dec *h, drmp3dec_scratch *s, drmp3_L3_g...
  function drmp3d_DCT_II (line 1813) | static void drmp3d_DCT_II(float *grbuf, int n)
  type drmp3_int16 (line 1969) | typedef drmp3_int16 drmp3d_sample_t;
  function drmp3_int16 (line 1971) | static drmp3_int16 drmp3d_scale_pcm(float sample)
  type drmp3d_sample_t (line 1987) | typedef float drmp3d_sample_t;
  function drmp3d_scale_pcm (line 1989) | static float drmp3d_scale_pcm(float sample)
  function drmp3d_synth_pair (line 1995) | static void drmp3d_synth_pair(drmp3d_sample_t *pcm, int nch, const float...
  function drmp3d_synth (line 2020) | static void drmp3d_synth(float *xl, drmp3d_sample_t *dstl, int nch, floa...
  function drmp3d_synth_granule (line 2175) | static void drmp3d_synth_granule(float *qmf_state, float *grbuf, int nba...
  function drmp3d_match_frame (line 2203) | static int drmp3d_match_frame(const drmp3_uint8 *hdr, int mp3_bytes, int...
  function drmp3d_find_frame (line 2217) | static int drmp3d_find_frame(const drmp3_uint8 *mp3, int mp3_bytes, int ...
  function DRMP3_API (line 2255) | DRMP3_API void drmp3dec_init(drmp3dec *dec)
  function DRMP3_API (line 2260) | DRMP3_API int drmp3dec_decode_frame(drmp3dec *dec, const drmp3_uint8 *mp...
  function DRMP3_API (line 2355) | DRMP3_API void drmp3dec_f32_to_s16(const float *in, drmp3_int16 *out, si...
  function DRMP3_INLINE (line 2450) | static DRMP3_INLINE float drmp3_mix_f32(float x, float y, float a)
  function DRMP3_INLINE (line 2454) | static DRMP3_INLINE float drmp3_mix_f32_fast(float x, float y, float a)
  function DRMP3_INLINE (line 2466) | static DRMP3_INLINE drmp3_uint32 drmp3_gcf_u32(drmp3_uint32 a, drmp3_uin...
  function drmp3__free_default (line 2494) | static void drmp3__free_default(void* p, void* pUserData)
  function drmp3__free_from_callbacks (line 2549) | static void drmp3__free_from_callbacks(void* p, const drmp3_allocation_c...
  function drmp3_allocation_callbacks (line 2561) | static drmp3_allocation_callbacks drmp3_copy_allocation_callbacks_or_def...
  function drmp3__on_read (line 2579) | static size_t drmp3__on_read(drmp3* pMP3, void* pBufferOut, size_t bytes...
  function drmp3_bool32 (line 2586) | static drmp3_bool32 drmp3__on_seek(drmp3* pMP3, int offset, drmp3_seek_o...
  function drmp3_bool32 (line 2603) | static drmp3_bool32 drmp3__on_seek_64(drmp3* pMP3, drmp3_uint64 offset, ...
  function drmp3_uint32 (line 2634) | static drmp3_uint32 drmp3_decode_next_frame_ex__callbacks(drmp3* pMP3, d...
  function drmp3_uint32 (line 2747) | static drmp3_uint32 drmp3_decode_next_frame_ex__memory(drmp3* pMP3, drmp...
  function drmp3_uint32 (line 2783) | static drmp3_uint32 drmp3_decode_next_frame_ex(drmp3* pMP3, drmp3d_sampl...
  function drmp3_uint32 (line 2792) | static drmp3_uint32 drmp3_decode_next_frame(drmp3* pMP3)
  function drmp3_uint32 (line 2799) | static drmp3_uint32 drmp3_seek_next_frame(drmp3* pMP3)
  function drmp3_bool32 (line 2819) | static drmp3_bool32 drmp3_init_internal(drmp3* pMP3, drmp3_read_proc onR...
  function DRMP3_API (line 2848) | DRMP3_API drmp3_bool32 drmp3_init(drmp3* pMP3, drmp3_read_proc onRead, d...
  function drmp3__on_read_memory (line 2859) | static size_t drmp3__on_read_memory(void* pUserData, void* pBufferOut, s...
  function drmp3_bool32 (line 2880) | static drmp3_bool32 drmp3__on_seek_memory(void* pUserData, int byteOffse...
  function DRMP3_API (line 2910) | DRMP3_API drmp3_bool32 drmp3_init_memory(drmp3* pMP3, const void* pData,...
  function drmp3_result (line 2936) | static drmp3_result drmp3_result_from_errno(int e)
  function drmp3_result (line 3338) | static drmp3_result drmp3_fopen(FILE** ppFile, const char* pFilePath, co...
  function drmp3_result (line 3398) | static drmp3_result drmp3_wfopen(FILE** ppFile, const wchar_t* pFilePath...
  function drmp3__on_read_stdio (line 3496) | static size_t drmp3__on_read_stdio(void* pUserData, void* pBufferOut, si...
  function drmp3_bool32 (line 3501) | static drmp3_bool32 drmp3__on_seek_stdio(void* pUserData, int offset, dr...
  function DRMP3_API (line 3506) | DRMP3_API drmp3_bool32 drmp3_init_file(drmp3* pMP3, const char* pFilePat...
  function DRMP3_API (line 3524) | DRMP3_API drmp3_bool32 drmp3_init_file_w(drmp3* pMP3, const wchar_t* pFi...
  function DRMP3_API (line 3543) | DRMP3_API void drmp3_uninit(drmp3* pMP3)
  function drmp3_f32_to_s16 (line 3563) | static void drmp3_f32_to_s16(drmp3_int16* dst, const float* src, drmp3_u...
  function drmp3_s16_to_f32 (line 3608) | static void drmp3_s16_to_f32(float* dst, const drmp3_int16* src, drmp3_u...
  function drmp3_uint64 (line 3620) | static drmp3_uint64 drmp3_read_pcm_frames_raw(drmp3* pMP3, drmp3_uint64 ...
  function DRMP3_API (line 3668) | DRMP3_API drmp3_uint64 drmp3_read_pcm_frames_f32(drmp3* pMP3, drmp3_uint...
  function DRMP3_API (line 3705) | DRMP3_API drmp3_uint64 drmp3_read_pcm_frames_s16(drmp3* pMP3, drmp3_uint...
  function drmp3_reset (line 3742) | static void drmp3_reset(drmp3* pMP3)
  function drmp3_bool32 (line 3754) | static drmp3_bool32 drmp3_seek_to_start_of_stream(drmp3* pMP3)
  function drmp3_bool32 (line 3770) | static drmp3_bool32 drmp3_seek_forward_by_pcm_frames__brute_force(drmp3*...
  function drmp3_bool32 (line 3791) | static drmp3_bool32 drmp3_seek_to_pcm_frame__brute_force(drmp3* pMP3, dr...
  function drmp3_bool32 (line 3814) | static drmp3_bool32 drmp3_find_closest_seek_point(drmp3* pMP3, drmp3_uin...
  function drmp3_bool32 (line 3838) | static drmp3_bool32 drmp3_seek_to_pcm_frame__seek_table(drmp3* pMP3, drm...
  function DRMP3_API (line 3896) | DRMP3_API drmp3_bool32 drmp3_seek_to_pcm_frame(drmp3* pMP3, drmp3_uint64...
  function DRMP3_API (line 3914) | DRMP3_API drmp3_bool32 drmp3_get_mp3_and_pcm_frame_count(drmp3* pMP3, dr...
  function DRMP3_API (line 3975) | DRMP3_API drmp3_uint64 drmp3_get_pcm_frame_count(drmp3* pMP3)
  function DRMP3_API (line 3985) | DRMP3_API drmp3_uint64 drmp3_get_mp3_frame_count(drmp3* pMP3)
  function drmp3__accumulate_running_pcm_frame_count (line 3995) | static void drmp3__accumulate_running_pcm_frame_count(drmp3* pMP3, drmp3...
  type drmp3__seeking_mp3_frame_info (line 4010) | typedef struct
  function DRMP3_API (line 4016) | DRMP3_API drmp3_bool32 drmp3_calculate_seek_points(drmp3* pMP3, drmp3_ui...
  function DRMP3_API (line 4156) | DRMP3_API drmp3_bool32 drmp3_bind_seek_table(drmp3* pMP3, drmp3_uint32 s...
  function drmp3_int16 (line 4243) | static drmp3_int16* drmp3__full_read_and_close_s16(drmp3* pMP3, drmp3_co...
  function DRMP3_API (line 4311) | DRMP3_API float* drmp3_open_and_read_pcm_frames_f32(drmp3_read_proc onRe...
  function DRMP3_API (line 4321) | DRMP3_API drmp3_int16* drmp3_open_and_read_pcm_frames_s16(drmp3_read_pro...
  function DRMP3_API (line 4332) | DRMP3_API float* drmp3_open_memory_and_read_pcm_frames_f32(const void* p...
  function DRMP3_API (line 4342) | DRMP3_API drmp3_int16* drmp3_open_memory_and_read_pcm_frames_s16(const v...
  function DRMP3_API (line 4354) | DRMP3_API float* drmp3_open_file_and_read_pcm_frames_f32(const char* fil...
  function DRMP3_API (line 4364) | DRMP3_API drmp3_int16* drmp3_open_file_and_read_pcm_frames_s16(const cha...
  function DRMP3_API (line 4375) | DRMP3_API void* drmp3_malloc(size_t sz, const drmp3_allocation_callbacks...
  function DRMP3_API (line 4384) | DRMP3_API void drmp3_free(void* p, const drmp3_allocation_callbacks* pAl...

FILE: src/libraries/enet/enet.cpp
  function parse_address (line 57) | static void parse_address(lua_State *l, const char *addr_str, ENetAddres...
  function find_peer_index (line 102) | static size_t find_peer_index(lua_State *l, ENetHost *enet_host, ENetPee...
  function supports_full_lightuserdata (line 114) | static bool supports_full_lightuserdata(lua_State *L)
  function compute_peer_key (line 141) | static uintptr_t compute_peer_key(lua_State *L, ENetPeer *peer)
  function push_peer_key (line 166) | static void push_peer_key(lua_State *L, uintptr_t key)
  function push_peer (line 182) | static void push_peer(lua_State *l, ENetPeer *peer) {
  function push_event (line 206) | static void push_event(lua_State *l, ENetEvent *event) {
  function ENetPacket (line 250) | static ENetPacket *read_packet(lua_State *l, int idx, enet_uint8 *channe...
  function host_create (line 302) | static int host_create(lua_State *l) {
  function linked_version (line 345) | static int linked_version(lua_State *l) {
  function host_service (line 362) | static int host_service(lua_State *l) {
  function host_check_events (line 384) | static int host_check_events(lua_State *l) {
  function host_compress_with_range_coder (line 402) | static int host_compress_with_range_coder(lua_State *l) {
  function host_connect (line 425) | static int host_connect(lua_State *l) {
  function host_flush (line 457) | static int host_flush(lua_State *l) {
  function host_broadcast (line 466) | static int host_broadcast(lua_State *l) {
  function host_channel_limit (line 479) | static int host_channel_limit(lua_State *l) {
  function host_bandwidth_limit (line 489) | static int host_bandwidth_limit(lua_State *l) {
  function host_get_socket_address (line 500) | static int host_get_socket_address(lua_State *l) {
  function host_total_sent_data (line 516) | static int host_total_sent_data(lua_State *l) {
  function host_total_received_data (line 527) | static int host_total_received_data(lua_State *l) {
  function host_service_time (line 537) | static int host_service_time(lua_State *l) {
  function host_peer_count (line 548) | static int host_peer_count(lua_State *l) {
  function host_get_peer (line 559) | static int host_get_peer(lua_State *l) {
  function host_gc (line 577) | static int host_gc(lua_State *l) {
  function peer_tostring (line 588) | static int peer_tostring(lua_State *l) {
  function peer_ping (line 600) | static int peer_ping(lua_State *l) {
  function peer_throttle_configure (line 606) | static int peer_throttle_configure(lua_State *l) {
  function peer_round_trip_time (line 617) | static int peer_round_trip_time(lua_State *l) {
  function peer_last_round_trip_time (line 630) | static int peer_last_round_trip_time(lua_State *l) {
  function peer_ping_interval (line 642) | static int peer_ping_interval(lua_State *l) {
  function peer_timeout (line 655) | static int peer_timeout(lua_State *l) {
  function peer_disconnect (line 680) | static int peer_disconnect(lua_State *l) {
  function peer_disconnect_now (line 688) | static int peer_disconnect_now(lua_State *l) {
  function peer_disconnect_later (line 696) | static int peer_disconnect_later(lua_State *l) {
  function peer_index (line 704) | static int peer_index(lua_State *l) {
  function peer_state (line 713) | static int peer_state(lua_State *l) {
  function peer_connect_id (line 754) | static int peer_connect_id(lua_State *l) {
  function peer_reset (line 763) | static int peer_reset(lua_State *l) {
  function peer_receive (line 769) | static int peer_receive(lua_State *l) {
  function peer_send (line 797) | static int peer_send(lua_State *l) {
  type luaL_Reg (line 814) | struct luaL_Reg
  type luaL_Reg (line 820) | struct luaL_Reg
  type luaL_Reg (line 844) | struct luaL_Reg
  function luaopen_enet (line 869) | int luaopen_enet(lua_State *l) {

FILE: src/libraries/enet/libenet/callbacks.c
  function enet_initialize_with_callbacks (line 10) | int
  function ENetVersion (line 31) | ENetVersion
  function enet_free (line 48) | void

FILE: src/libraries/enet/libenet/compress.c
  type ENetSymbol (line 9) | typedef struct _ENetSymbol
  type ENetRangeCoder (line 42) | typedef struct _ENetRangeCoder
  function enet_range_coder_destroy (line 58) | void
  function enet_uint16 (line 90) | static enet_uint16
  function enet_range_coder_compress (line 246) | size_t
  type ENetExclude (line 441) | typedef struct _ENetExclude
  function enet_range_coder_decompress (line 498) | size_t
  function enet_host_compress_with_range_coder (line 637) | int

FILE: src/libraries/enet/libenet/host.c
  function ENetHost (line 28) | ENetHost *
  function enet_host_destroy (line 140) | void
  function ENetPeer (line 173) | ENetPeer *
  function enet_host_broadcast (line 260) | void
  function enet_host_compress (line 283) | void
  function enet_host_channel_limit (line 299) | void
  function enet_host_bandwidth_limit (line 319) | void
  function enet_host_bandwidth_throttle (line 327) | void

FILE: src/libraries/enet/libenet/include/enet/callbacks.h
  type ENetCallbacks (line 10) | typedef struct _ENetCallbacks

FILE: src/libraries/enet/libenet/include/enet/enet.h
  type enet_uint32 (line 35) | typedef enet_uint32 ENetVersion;
  type _ENetHost (line 37) | struct _ENetHost
  type _ENetEvent (line 38) | struct _ENetEvent
  type _ENetPacket (line 39) | struct _ENetPacket
  type ENetSocketType (line 41) | typedef enum _ENetSocketType
  type ENetSocketWait (line 47) | typedef enum _ENetSocketWait
  type ENetSocketOption (line 55) | typedef enum _ENetSocketOption
  type ENetSocketShutdown (line 68) | typedef enum _ENetSocketShutdown
  type ENetAddress (line 89) | typedef struct _ENetAddress
  type ENetPacketFlag (line 104) | typedef enum _ENetPacketFlag
  type _ENetPacket (line 123) | struct _ENetPacket
  type ENetPacket (line 148) | typedef struct _ENetPacket
  type ENetAcknowledgement (line 158) | typedef struct _ENetAcknowledgement
  type ENetOutgoingCommand (line 165) | typedef struct _ENetOutgoingCommand
  type ENetIncomingCommand (line 180) | typedef struct _ENetIncomingCommand
  type ENetPeerState (line 192) | typedef enum _ENetPeerState
  type ENetChannel (line 241) | typedef struct _ENetChannel
  type ENetPeer (line 258) | typedef struct _ENetPeer
  type ENetCompressor (line 324) | typedef struct _ENetCompressor
  type _ENetHost (line 340) | struct _ENetHost
  type _ENetEvent (line 340) | struct _ENetEvent
  type ENetHost (line 358) | typedef struct _ENetHost
  type ENetEventType (line 401) | typedef enum _ENetEventType
  type ENetEvent (line 434) | typedef struct _ENetEvent

FILE: src/libraries/enet/libenet/include/enet/list.h
  type ENetListNode (line 10) | typedef struct _ENetListNode
  type ENetListNode (line 16) | typedef ENetListNode * ENetListIterator;
  type ENetList (line 18) | typedef struct _ENetList

FILE: src/libraries/enet/libenet/include/enet/protocol.h
  type ENetProtocolCommand (line 23) | typedef enum _ENetProtocolCommand
  type ENetProtocolFlag (line 43) | typedef enum _ENetProtocolFlag
  type ENET_PACKED (line 65) | typedef struct _ENetProtocolHeader
  type ENET_PACKED (line 71) | typedef struct _ENetProtocolCommandHeader
  type ENET_PACKED (line 78) | typedef struct _ENetProtocolAcknowledge
  type ENET_PACKED (line 85) | typedef struct _ENetProtocolConnect
  type ENET_PACKED (line 103) | typedef struct _ENetProtocolVerifyConnect
  type ENET_PACKED (line 120) | typedef struct _ENetProtocolBandwidthLimit
  type ENET_PACKED (line 127) | typedef struct _ENetProtocolThrottleConfigure
  type ENET_PACKED (line 135) | typedef struct _ENetProtocolDisconnect
  type ENET_PACKED (line 141) | typedef struct _ENetProtocolPing
  type ENET_PACKED (line 146) | typedef struct _ENetProtocolSendReliable
  type ENET_PACKED (line 152) | typedef struct _ENetProtocolSendUnreliable
  type ENET_PACKED (line 159) | typedef struct _ENetProtocolSendUnsequenced
  type ENET_PACKED (line 166) | typedef struct _ENetProtocolSendFragment
  type ENET_PACKED (line 177) | typedef union _ENetProtocol

FILE: src/libraries/enet/libenet/include/enet/types.h
  type enet_uint8 (line 8) | typedef unsigned char enet_uint8;
  type enet_uint16 (line 9) | typedef unsigned short enet_uint16;
  type enet_uint32 (line 10) | typedef unsigned int enet_uint32;

FILE: src/libraries/enet/libenet/include/enet/unix.h
  type ENetSocket (line 19) | typedef int ENetSocket;
  type ENetBuffer (line 29) | typedef struct
  type fd_set (line 39) | typedef fd_set ENetSocketSet;

FILE: src/libraries/enet/libenet/include/enet/win32.h
  type SOCKET (line 20) | typedef SOCKET ENetSocket;
  type ENetBuffer (line 30) | typedef struct
  type fd_set (line 48) | typedef fd_set ENetSocketSet;

FILE: src/libraries/enet/libenet/list.c
  function enet_list_clear (line 13) | void
  function ENetListIterator (line 20) | ENetListIterator
  function ENetListIterator (line 43) | ENetListIterator
  function enet_list_size (line 61) | size_t

FILE: src/libraries/enet/libenet/packet.c
  function ENetPacket (line 19) | ENetPacket *
  function enet_packet_destroy (line 56) | void
  function enet_packet_resize (line 76) | int
  function enet_uint32 (line 104) | static enet_uint32
  function initialize_crc32 (line 118) | static void
  function enet_uint32 (line 142) | enet_uint32

FILE: src/libraries/enet/libenet/peer.c
  function enet_peer_throttle_configure (line 42) | void
  function enet_peer_throttle (line 61) | int
  function enet_peer_send (line 99) | int
  function ENetPacket (line 221) | ENetPacket *
  function enet_peer_reset_outgoing_commands (line 249) | static void
  function enet_peer_remove_incoming_commands (line 270) | static void
  function enet_peer_reset_incoming_commands (line 298) | static void
  function enet_peer_reset_queues (line 304) | void
  function enet_peer_on_connect (line 342) | void
  function enet_peer_on_disconnect (line 354) | void
  function enet_peer_reset (line 371) | void
  function enet_peer_ping (line 434) | void
  function enet_peer_ping_interval (line 457) | void
  function enet_peer_timeout (line 480) | void
  function enet_peer_disconnect_now (line 495) | void
  function enet_peer_disconnect (line 526) | void
  function enet_peer_disconnect_later (line 569) | void
  function ENetAcknowledgement (line 584) | ENetAcknowledgement *
  function enet_peer_setup_outgoing_command (line 616) | void
  function ENetOutgoingCommand (line 682) | ENetOutgoingCommand *
  function enet_peer_dispatch_incoming_unreliable_commands (line 701) | void
  function enet_peer_dispatch_incoming_reliable_commands (line 784) | void
  function ENetIncomingCommand (line 823) | ENetIncomingCommand *

FILE: src/libraries/enet/libenet/protocol.c
  function enet_protocol_command_size (line 29) | size_t
  function enet_protocol_change_state (line 35) | static void
  function enet_protocol_dispatch_state (line 46) | static void
  function enet_protocol_dispatch_incoming_commands (line 59) | static int
  function enet_protocol_notify_connect (line 119) | static void
  function enet_protocol_notify_disconnect (line 136) | static void
  function enet_protocol_remove_sent_unreliable_commands (line 161) | static void
  function ENetProtocolCommand (line 188) | static ENetProtocolCommand
  function ENetPeer (line 274) | static ENetPeer *
  function enet_protocol_handle_send_reliable (line 424) | static int
  function enet_protocol_handle_send_unsequenced (line 446) | static int
  function enet_protocol_handle_send_unreliable (line 492) | static int
  function enet_protocol_handle_send_fragment (line 514) | static int
  function enet_protocol_handle_send_unreliable_fragment (line 623) | static int
  function enet_protocol_handle_ping (line 741) | static int
  function enet_protocol_handle_bandwidth_limit (line 750) | static int
  function enet_protocol_handle_throttle_configure (line 784) | static int
  function enet_protocol_handle_disconnect (line 797) | static int
  function enet_protocol_handle_acknowledge (line 826) | static int
  function enet_protocol_handle_verify_connect (line 915) | static int
  function enet_protocol_handle_incoming_commands (line 977) | static int
  function enet_protocol_receive_incoming_commands (line 1195) | static int
  function enet_protocol_send_acknowledgements (line 1259) | static void
  function enet_protocol_send_unreliable_outgoing_commands (line 1312) | static void
  function enet_protocol_check_timeouts (line 1413) | static int
  function enet_protocol_send_reliable_outgoing_commands (line 1466) | static int
  function enet_protocol_send_outgoing_commands (line 1590) | static int
  function enet_host_flush (line 1745) | void
  function enet_host_check_events (line 1762) | int
  function enet_host_service (line 1787) | int

FILE: src/libraries/enet/libenet/unix.c
  type socklen_t (line 59) | typedef int socklen_t;
  function enet_initialize (line 68) | int
  function enet_deinitialize (line 74) | void
  function enet_uint32 (line 79) | enet_uint32
  function enet_uint32 (line 85) | enet_uint32
  function enet_time_set (line 95) | void
  function enet_address_set_host (line 105) | int
  function enet_address_get_host_ip (line 167) | int
  function enet_address_get_host (line 187) | int
  function enet_socket_bind (line 243) | int
  function enet_socket_get_address (line 268) | int
  function enet_socket_listen (line 283) | int
  function ENetSocket (line 289) | ENetSocket
  function enet_socket_set_option (line 295) | int
  function enet_socket_get_option (line 353) | int
  function enet_socket_connect (line 371) | int
  function ENetSocket (line 390) | ENetSocket
  function enet_socket_shutdown (line 413) | int
  function enet_socket_destroy (line 419) | void
  function enet_socket_send (line 426) | int
  function enet_socket_receive (line 466) | int
  function enet_socketset_select (line 511) | int
  function enet_socket_wait (line 522) | int

FILE: src/libraries/enet/libenet/win32.c
  function enet_initialize (line 14) | int
  function enet_deinitialize (line 36) | void
  function enet_uint32 (line 44) | enet_uint32
  function enet_uint32 (line 50) | enet_uint32
  function enet_time_set (line 56) | void
  function enet_address_set_host (line 62) | int
  function enet_address_get_host_ip (line 83) | int
  function enet_address_get_host (line 99) | int
  function enet_socket_bind (line 121) | int
  function enet_socket_get_address (line 146) | int
  function enet_socket_listen (line 161) | int
  function ENetSocket (line 167) | ENetSocket
  function enet_socket_set_option (line 173) | int
  function enet_socket_get_option (line 220) | int
  function enet_socket_connect (line 237) | int
  function ENetSocket (line 256) | ENetSocket
  function enet_socket_shutdown (line 279) | int
  function enet_socket_destroy (line 285) | void
  function enet_socket_send (line 292) | int
  function enet_socket_receive (line 329) | int
  function enet_socketset_select (line 372) | int
  function enet_socket_wait (line 383) | int

FILE: src/libraries/glad/glad.cpp
  type glad (line 14) | namespace glad {
    function gladLoadGL (line 16) | bool gladLoadGL(void) {
    function has_ext (line 33) | static bool has_ext(const char *ext) {
    function load_GL_VERSION_1_0 (line 2210) | static void load_GL_VERSION_1_0(LOADER load) {
    function load_GL_VERSION_1_1 (line 2521) | static void load_GL_VERSION_1_1(LOADER load) {
    function load_GL_VERSION_1_2 (line 2556) | static void load_GL_VERSION_1_2(LOADER load) {
    function load_GL_VERSION_1_3 (line 2565) | static void load_GL_VERSION_1_3(LOADER load) {
    function load_GL_VERSION_1_4 (line 2616) | static void load_GL_VERSION_1_4(LOADER load) {
    function load_GL_VERSION_1_5 (line 2668) | static void load_GL_VERSION_1_5(LOADER load) {
    function load_GL_VERSION_2_0 (line 2692) | static void load_GL_VERSION_2_0(LOADER load) {
    function load_GL_VERSION_2_1 (line 2790) | static void load_GL_VERSION_2_1(LOADER load) {
    function load_GL_VERSION_3_0 (line 2801) | static void load_GL_VERSION_3_0(LOADER load) {
    function load_GL_VERSION_3_1 (line 2890) | static void load_GL_VERSION_3_1(LOADER load) {
    function load_GL_VERSION_3_2 (line 2910) | static void load_GL_VERSION_3_2(LOADER load) {
    function load_GL_VERSION_3_3 (line 2934) | static void load_GL_VERSION_3_3(LOADER load) {
    function load_GL_VERSION_4_0 (line 2997) | static void load_GL_VERSION_4_0(LOADER load) {
    function load_GL_VERSION_4_1 (line 3048) | static void load_GL_VERSION_4_1(LOADER load) {
    function load_GL_VERSION_4_2 (line 3141) | static void load_GL_VERSION_4_2(LOADER load) {
    function load_GL_VERSION_4_3 (line 3158) | static void load_GL_VERSION_4_3(LOADER load) {
    function load_GL_VERSION_4_4 (line 3208) | static void load_GL_VERSION_4_4(LOADER load) {
    function load_GL_VERSION_4_5 (line 3222) | static void load_GL_VERSION_4_5(LOADER load) {
    function load_GL_ES_VERSION_2_0 (line 3349) | static void load_GL_ES_VERSION_2_0(LOADER load) {
    function load_GL_ES_VERSION_3_0 (line 3496) | static void load_GL_ES_VERSION_3_0(LOADER load) {
    function load_GL_ES_VERSION_3_1 (line 3605) | static void load_GL_ES_VERSION_3_1(LOADER load) {
    function load_GL_ES_VERSION_3_2 (line 3678) | static void load_GL_ES_VERSION_3_2(LOADER load) {
    function load_GL_KHR_blend_equation_advanced (line 3727) | static void load_GL_KHR_blend_equation_advanced(LOADER load) {
    function load_GL_KHR_debug (line 3735) | static void load_GL_KHR_debug(LOADER load) {
    function load_GL_KHR_robustness (line 3764) | static void load_GL_KHR_robustness(LOADER load) {
    function load_GL_ARB_base_instance (line 3783) | static void load_GL_ARB_base_instance(LOADER load) {
    function load_GL_ARB_bindless_texture (line 3791) | static void load_GL_ARB_bindless_texture(LOADER load) {
    function load_GL_ARB_blend_func_extended (line 3812) | static void load_GL_ARB_blend_func_extended(LOADER load) {
    function load_GL_ARB_buffer_storage (line 3819) | static void load_GL_ARB_buffer_storage(LOADER load) {
    function load_GL_ARB_cl_event (line 3825) | static void load_GL_ARB_cl_event(LOADER load) {
    function load_GL_ARB_clear_buffer_object (line 3831) | static void load_GL_ARB_clear_buffer_object(LOADER load) {
    function load_GL_ARB_clear_texture (line 3838) | static void load_GL_ARB_clear_texture(LOADER load) {
    function load_GL_ARB_clip_control (line 3845) | static void load_GL_ARB_clip_control(LOADER load) {
    function load_GL_ARB_color_buffer_float (line 3851) | static void load_GL_ARB_color_buffer_float(LOADER load) {
    function load_GL_ARB_compute_shader (line 3859) | static void load_GL_ARB_compute_shader(LOADER load) {
    function load_GL_ARB_compute_variable_group_size (line 3866) | static void load_GL_ARB_compute_variable_group_size(LOADER load) {
    function load_GL_ARB_copy_buffer (line 3874) | static void load_GL_ARB_copy_buffer(LOADER load) {
    function load_GL_ARB_copy_image (line 3880) | static void load_GL_ARB_copy_image(LOADER load) {
    function load_GL_ARB_debug_output (line 3887) | static void load_GL_ARB_debug_output(LOADER load) {
    function load_GL_ARB_direct_state_access (line 3899) | static void load_GL_ARB_direct_state_access(LOADER load) {
    function load_GL_ARB_draw_buffers_blend (line 4001) | static void load_GL_ARB_draw_buffers_blend(LOADER load) {
    function load_GL_ARB_draw_elements_base_vertex (line 4010) | static void load_GL_ARB_draw_elements_base_vertex(LOADER load) {
    function load_GL_ARB_draw_indirect (line 4019) | static void load_GL_ARB_draw_indirect(LOADER load) {
    function load_GL_ARB_draw_instanced (line 4026) | static void load_GL_ARB_draw_instanced(LOADER load) {
    function load_GL_ARB_ES2_compatibility (line 4034) | static void load_GL_ARB_ES2_compatibility(LOADER load) {
    function load_GL_ARB_ES3_1_compatibility (line 4044) | static void load_GL_ARB_ES3_1_compatibility(LOADER load) {
    function load_GL_ARB_ES3_2_compatibility (line 4050) | static void load_GL_ARB_ES3_2_compatibility(LOADER load) {
    function load_GL_ARB_framebuffer_no_attachments (line 4062) | static void load_GL_ARB_framebuffer_no_attachments(LOADER load) {
    function load_GL_ARB_framebuffer_object (line 4069) | static void load_GL_ARB_framebuffer_object(LOADER load) {
    function load_GL_ARB_geometry_shader4 (line 4095) | static void load_GL_ARB_geometry_shader4(LOADER load) {
    function load_GL_ARB_get_program_binary (line 4104) | static void load_GL_ARB_get_program_binary(LOADER load) {
    function load_GL_ARB_get_texture_sub_image (line 4112) | static void load_GL_ARB_get_texture_sub_image(LOADER load) {
    function load_GL_ARB_gpu_shader_fp64 (line 4120) | static void load_GL_ARB_gpu_shader_fp64(LOADER load) {
    function load_GL_ARB_gpu_shader_int64 (line 4143) | static void load_GL_ARB_gpu_shader_int64(LOADER load) {
    function load_GL_ARB_indirect_parameters (line 4186) | static void load_GL_ARB_indirect_parameters(LOADER load) {
    function load_GL_ARB_instanced_arrays (line 4193) | static void load_GL_ARB_instanced_arrays(LOADER load) {
    function load_GL_ARB_internalformat_query (line 4199) | static void load_GL_ARB_internalformat_query(LOADER load) {
    function load_GL_ARB_internalformat_query2 (line 4205) | static void load_GL_ARB_internalformat_query2(LOADER load) {
    function load_GL_ARB_invalidate_subdata (line 4211) | static void load_GL_ARB_invalidate_subdata(LOADER load) {
    function load_GL_ARB_map_buffer_range (line 4223) | static void load_GL_ARB_map_buffer_range(LOADER load) {
    function load_GL_ARB_multi_bind (line 4230) | static void load_GL_ARB_multi_bind(LOADER load) {
    function load_GL_ARB_multi_draw_indirect (line 4241) | static void load_GL_ARB_multi_draw_indirect(LOADER load) {
    function load_GL_ARB_parallel_shader_compile (line 4249) | static void load_GL_ARB_parallel_shader_compile(LOADER load) {
    function load_GL_ARB_program_interface_query (line 4258) | static void load_GL_ARB_program_interface_query(LOADER load) {
    function load_GL_ARB_provoking_vertex (line 4269) | static void load_GL_ARB_provoking_vertex(LOADER load) {
    function load_GL_ARB_robustness (line 4277) | static void load_GL_ARB_robustness(LOADER load) {
    function load_GL_ARB_sample_locations (line 4303) | static void load_GL_ARB_sample_locations(LOADER load) {
    function load_GL_ARB_sample_shading (line 4311) | static void load_GL_ARB_sample_shading(LOADER load) {
    function load_GL_ARB_sampler_objects (line 4317) | static void load_GL_ARB_sampler_objects(LOADER load) {
    function load_GL_ARB_separate_shader_objects (line 4338) | static void load_GL_ARB_separate_shader_objects(LOADER load) {
    function load_GL_ARB_shader_atomic_counters (line 4404) | static void load_GL_ARB_shader_atomic_counters(LOADER load) {
    function load_GL_ARB_shader_image_load_store (line 4415) | static void load_GL_ARB_shader_image_load_store(LOADER load) {
    function load_GL_ARB_shader_storage_buffer_object (line 4425) | static void load_GL_ARB_shader_storage_buffer_object(LOADER load) {
    function load_GL_ARB_shader_subroutine (line 4431) | static void load_GL_ARB_shader_subroutine(LOADER load) {
    function load_GL_ARB_shading_language_include (line 4448) | static void load_GL_ARB_shading_language_include(LOADER load) {
    function load_GL_ARB_sparse_buffer (line 4460) | static void load_GL_ARB_sparse_buffer(LOADER load) {
    function load_GL_ARB_sparse_texture (line 4468) | static void load_GL_ARB_sparse_texture(LOADER load) {
    function load_GL_ARB_sync (line 4477) | static void load_GL_ARB_sync(LOADER load) {
    function load_GL_ARB_tessellation_shader (line 4489) | static void load_GL_ARB_tessellation_shader(LOADER load) {
    function load_GL_ARB_texture_barrier (line 4496) | static void load_GL_ARB_texture_barrier(LOADER load) {
    function load_GL_ARB_texture_buffer_object (line 4502) | static void load_GL_ARB_texture_buffer_object(LOADER load) {
    function load_GL_ARB_texture_buffer_range (line 4509) | static void load_GL_ARB_texture_buffer_range(LOADER load) {
    function load_GL_ARB_texture_multisample (line 4522) | static void load_GL_ARB_texture_multisample(LOADER load) {
    function load_GL_ARB_texture_storage (line 4537) | static void load_GL_ARB_texture_storage(LOADER load) {
    function load_GL_ARB_texture_storage_multisample (line 4545) | static void load_GL_ARB_texture_storage_multisample(LOADER load) {
    function load_GL_ARB_texture_view (line 4553) | static void load_GL_ARB_texture_view(LOADER load) {
    function load_GL_ARB_timer_query (line 4559) | static void load_GL_ARB_timer_query(LOADER load) {
    function load_GL_ARB_transform_feedback2 (line 4567) | static void load_GL_ARB_transform_feedback2(LOADER load) {
    function load_GL_ARB_transform_feedback3 (line 4579) | static void load_GL_ARB_transform_feedback3(LOADER load) {
    function load_GL_ARB_transform_feedback_instanced (line 4588) | static void load_GL_ARB_transform_feedback_instanced(LOADER load) {
    function load_GL_ARB_uniform_buffer_object (line 4596) | static void load_GL_ARB_uniform_buffer_object(LOADER load) {
    function load_GL_ARB_vertex_array_object (line 4612) | static void load_GL_ARB_vertex_array_object(LOADER load) {
    function load_GL_ARB_vertex_attrib_64bit (line 4621) | static void load_GL_ARB_vertex_attrib_64bit(LOADER load) {
    function load_GL_ARB_vertex_attrib_binding (line 4636) | static void load_GL_ARB_vertex_attrib_binding(LOADER load) {
    function load_GL_ARB_vertex_type_2_10_10_10_rev (line 4648) | static void load_GL_ARB_vertex_type_2_10_10_10_rev(LOADER load) {
    function load_GL_ARB_viewport_array (line 4691) | static void load_GL_ARB_viewport_array(LOADER load) {
    function load_GL_EXT_base_instance (line 4706) | static void load_GL_EXT_base_instance(LOADER load) {
    function load_GL_EXT_bindable_uniform (line 4715) | static void load_GL_EXT_bindable_uniform(LOADER load) {
    function load_GL_EXT_blend_func_extended (line 4723) | static void load_GL_EXT_blend_func_extended(LOADER load) {
    function load_GL_EXT_blend_minmax (line 4732) | static void load_GL_EXT_blend_minmax(LOADER load) {
    function load_GL_EXT_buffer_storage (line 4738) | static void load_GL_EXT_buffer_storage(LOADER load) {
    function load_GL_EXT_copy_image (line 4746) | static void load_GL_EXT_copy_image(LOADER load) {
    function load_GL_EXT_debug_label (line 4752) | static void load_GL_EXT_debug_label(LOADER load) {
    function load_GL_EXT_debug_marker (line 4759) | static void load_GL_EXT_debug_marker(LOADER load) {
    function load_GL_EXT_direct_state_access (line 4767) | static void load_GL_EXT_direct_state_access(LOADER load) {
    function load_GL_EXT_discard_framebuffer (line 5027) | static void load_GL_EXT_discard_framebuffer(LOADER load) {
    function load_GL_EXT_disjoint_timer_query (line 5033) | static void load_GL_EXT_disjoint_timer_query(LOADER load) {
    function load_GL_EXT_draw_buffers (line 5049) | static void load_GL_EXT_draw_buffers(LOADER load) {
    function load_GL_EXT_draw_buffers2 (line 5055) | static void load_GL_EXT_draw_buffers2(LOADER load) {
    function load_GL_EXT_draw_buffers_indexed (line 5066) | static void load_GL_EXT_draw_buffers_indexed(LOADER load) {
    function load_GL_EXT_draw_elements_base_vertex (line 5079) | static void load_GL_EXT_draw_elements_base_vertex(LOADER load) {
    function load_GL_EXT_draw_instanced (line 5088) | static void load_GL_EXT_draw_instanced(LOADER load) {
    function load_GL_EXT_framebuffer_blit (line 5096) | static void load_GL_EXT_framebuffer_blit(LOADER load) {
    function load_GL_EXT_framebuffer_multisample (line 5102) | static void load_GL_EXT_framebuffer_multisample(LOADER load) {
    function load_GL_EXT_framebuffer_object (line 5109) | static void load_GL_EXT_framebuffer_object(LOADER load) {
    function load_GL_EXT_geometry_shader (line 5133) | static void load_GL_EXT_geometry_shader(LOADER load) {
    function load_GL_EXT_geometry_shader4 (line 5139) | static void load_GL_EXT_geometry_shader4(LOADER load) {
    function load_GL_EXT_gpu_program_parameters (line 5145) | static void load_GL_EXT_gpu_program_parameters(LOADER load) {
    function load_GL_EXT_gpu_shader4 (line 5152) | static void load_GL_EXT_gpu_shader4(LOADER load) {
    function load_GL_EXT_instanced_arrays (line 5169) | static void load_GL_EXT_instanced_arrays(LOADER load) {
    function load_GL_EXT_map_buffer_range (line 5177) | static void load_GL_EXT_map_buffer_range(LOADER load) {
    function load_GL_EXT_multi_draw_indirect (line 5184) | static void load_GL_EXT_multi_draw_indirect(LOADER load) {
    function load_GL_EXT_multisampled_render_to_texture (line 5192) | static void load_GL_EXT_multisampled_render_to_texture(LOADER load) {
    function load_GL_EXT_multiview_draw_buffers (line 5199) | static void load_GL_EXT_multiview_draw_buffers(LOADER load) {
    function load_GL_EXT_occlusion_query_boolean (line 5207) | static void load_GL_EXT_occlusion_query_boolean(LOADER load) {
    function load_GL_EXT_polygon_offset_clamp (line 5222) | static void load_GL_EXT_polygon_offset_clamp(LOADER load) {
    function load_GL_EXT_primitive_bounding_box (line 5229) | static void load_GL_EXT_primitive_bounding_box(LOADER load) {
    function load_GL_EXT_provoking_vertex (line 5235) | static void load_GL_EXT_provoking_vertex(LOADER load) {
    function load_GL_EXT_raster_multisample (line 5242) | static void load_GL_EXT_raster_multisample(LOADER load) {
    function load_GL_EXT_robustness (line 5250) | static void load_GL_EXT_robustness(LOADER load) {
    function load_GL_EXT_separate_shader_objects (line 5259) | static void load_GL_EXT_separate_shader_objects(LOADER load) {
    function load_GL_EXT_shader_image_load_store (line 5314) | static void load_GL_EXT_shader_image_load_store(LOADER load) {
    function load_GL_EXT_sparse_texture (line 5327) | static void load_GL_EXT_sparse_texture(LOADER load) {
    function load_GL_EXT_stencil_clear_tag (line 5336) | static void load_GL_EXT_stencil_clear_tag(LOADER load) {
    function load_GL_EXT_tessellation_shader (line 5343) | static void load_GL_EXT_tessellation_shader(LOADER load) {
    function load_GL_EXT_texture_array (line 5349) | static void load_GL_EXT_texture_array(LOADER load) {
    function load_GL_EXT_texture_border_clamp (line 5355) | static void load_GL_EXT_texture_border_clamp(LOADER load) {
    function load_GL_EXT_texture_buffer (line 5368) | static void load_GL_EXT_texture_buffer(LOADER load) {
    function load_GL_EXT_texture_buffer_object (line 5375) | static void load_GL_EXT_texture_buffer_object(LOADER load) {
    function load_GL_EXT_texture_filter_minmax (line 5388) | static void load_GL_EXT_texture_filter_minmax(LOADER load) {
    function load_GL_EXT_texture_integer (line 5395) | static void load_GL_EXT_texture_integer(LOADER load) {
    function load_GL_EXT_texture_storage (line 5414) | static void load_GL_EXT_texture_storage(LOADER load) {
    function load_GL_EXT_texture_view (line 5427) | static void load_GL_EXT_texture_view(LOADER load) {
    function load_GL_EXT_timer_query (line 5433) | static void load_GL_EXT_timer_query(LOADER load) {
    function load_GL_EXT_transform_feedback (line 5440) | static void load_GL_EXT_transform_feedback(LOADER load) {
    function load_GL_EXT_vertex_attrib_64bit (line 5454) | static void load_GL_EXT_vertex_attrib_64bit(LOADER load) {
    function load_GL_EXT_x11_sync_object (line 5469) | static void load_GL_EXT_x11_sync_object(LOADER load) {
    function load_GL_OES_copy_image (line 5478) | static void load_GL_OES_copy_image(LOADER load) {
    function load_GL_OES_draw_buffers_indexed (line 5487) | static void load_GL_OES_draw_buffers_indexed(LOADER load) {
    function load_GL_OES_draw_elements_base_vertex (line 5500) | static void load_GL_OES_draw_elements_base_vertex(LOADER load) {
    function load_GL_OES_EGL_image (line 5509) | static void load_GL_OES_EGL_image(LOADER load) {
    function load_GL_OES_geometry_shader (line 5522) | static void load_GL_OES_geometry_shader(LOADER load) {
    function load_GL_OES_get_program_binary (line 5528) | static void load_GL_OES_get_program_binary(LOADER load) {
    function load_GL_OES_mapbuffer (line 5536) | static void load_GL_OES_mapbuffer(LOADER load) {
    function load_GL_OES_primitive_bounding_box (line 5545) | static void load_GL_OES_primitive_bounding_box(LOADER load) {
    function load_GL_OES_sample_shading (line 5553) | static void load_GL_OES_sample_shading(LOADER load) {
    function load_GL_OES_tessellation_shader (line 5568) | static void load_GL_OES_tessellation_shader(LOADER load) {
    function load_GL_OES_texture_3D (line 5574) | static void load_GL_OES_texture_3D(LOADER load) {
    function load_GL_OES_texture_border_clamp (line 5585) | static void load_GL_OES_texture_border_clamp(LOADER load) {
    function load_GL_OES_texture_buffer (line 5598) | static void load_GL_OES_texture_buffer(LOADER load) {
    function load_GL_OES_texture_storage_multisample_2d_array (line 5613) | static void load_GL_OES_texture_storage_multisample_2d_array(LOADER lo...
    function load_GL_OES_texture_view (line 5619) | static void load_GL_OES_texture_view(LOADER load) {
    function load_GL_OES_vertex_array_object (line 5625) | static void load_GL_OES_vertex_array_object(LOADER load) {
    function load_GL_AMD_debug_output (line 5640) | static void load_GL_AMD_debug_output(LOADER load) {
    function load_GL_AMD_draw_buffers_blend (line 5650) | static void load_GL_AMD_draw_buffers_blend(LOADER load) {
    function load_GL_AMD_gpu_shader_int64 (line 5660) | static void load_GL_AMD_gpu_shader_int64(LOADER load) {
    function load_GL_AMD_interleaved_elements (line 5699) | static void load_GL_AMD_interleaved_elements(LOADER load) {
    function load_GL_AMD_multi_draw_indirect (line 5705) | static void load_GL_AMD_multi_draw_indirect(LOADER load) {
    function load_GL_AMD_name_gen_delete (line 5712) | static void load_GL_AMD_name_gen_delete(LOADER load) {
    function load_GL_AMD_occlusion_query_event (line 5720) | static void load_GL_AMD_occlusion_query_event(LOADER load) {
    function load_GL_AMD_performance_monitor (line 5726) | static void load_GL_AMD_performance_monitor(LOADER load) {
    function load_GL_AMD_sample_positions (line 5745) | static void load_GL_AMD_sample_positions(LOADER load) {
    function load_GL_AMD_sparse_texture (line 5755) | static void load_GL_AMD_sparse_texture(LOADER load) {
    function load_GL_AMD_stencil_operation_extended (line 5762) | static void load_GL_AMD_stencil_operation_extended(LOADER load) {
    function load_GL_AMD_vertex_shader_tessellator (line 5772) | static void load_GL_AMD_vertex_shader_tessellator(LOADER load) {
    function load_GL_ANGLE_framebuffer_blit (line 5782) | static void load_GL_ANGLE_framebuffer_blit(LOADER load) {
    function load_GL_ANGLE_framebuffer_multisample (line 5788) | static void load_GL_ANGLE_framebuffer_multisample(LOADER load) {
    function load_GL_ANGLE_instanced_arrays (line 5794) | static void load_GL_ANGLE_instanced_arrays(LOADER load) {
    function load_GL_ANGLE_translated_shader_source (line 5807) | static void load_GL_ANGLE_translated_shader_source(LOADER load) {
    function load_GL_APPLE_copy_texture_levels (line 5817) | static void load_GL_APPLE_copy_texture_levels(LOADER load) {
    function load_GL_APPLE_element_array (line 5823) | static void load_GL_APPLE_element_array(LOADER load) {
    function load_GL_APPLE_fence (line 5833) | static void load_GL_APPLE_fence(LOADER load) {
    function load_GL_APPLE_flush_buffer_range (line 5847) | static void load_GL_APPLE_flush_buffer_range(LOADER load) {
    function load_GL_APPLE_framebuffer_multisample (line 5854) | static void load_GL_APPLE_framebuffer_multisample(LOADER load) {
    function load_GL_APPLE_object_purgeable (line 5861) | static void load_GL_APPLE_object_purgeable(LOADER load) {
    function load_GL_APPLE_sync (line 5871) | static void load_GL_APPLE_sync(LOADER load) {
    function load_GL_APPLE_texture_range (line 5886) | static void load_GL_APPLE_texture_range(LOADER load) {
    function load_GL_APPLE_vertex_array_object (line 5893) | static void load_GL_APPLE_vertex_array_object(LOADER load) {
    function load_GL_APPLE_vertex_array_range (line 5902) | static void load_GL_APPLE_vertex_array_range(LOADER load) {
    function load_GL_APPLE_vertex_program_evaluators (line 5910) | static void load_GL_APPLE_vertex_program_evaluators(LOADER load) {
    function load_GL_GREMEDY_frame_terminator (line 5933) | static void load_GL_GREMEDY_frame_terminator(LOADER load) {
    function load_GL_GREMEDY_string_marker (line 5939) | static void load_GL_GREMEDY_string_marker(LOADER load) {
    function load_GL_IMG_multisampled_render_to_texture (line 5945) | static void load_GL_IMG_multisampled_render_to_texture(LOADER load) {
    function load_GL_INGR_blend_func_separate (line 5958) | static void load_GL_INGR_blend_func_separate(LOADER load) {
    function load_GL_INTEL_framebuffer_CMAA (line 5965) | static void load_GL_INTEL_framebuffer_CMAA(LOADER load) {
    function load_GL_INTEL_map_texture (line 5971) | static void load_GL_INTEL_map_texture(LOADER load) {
    function load_GL_INTEL_performance_query (line 5979) | static void load_GL_INTEL_performance_query(LOADER load) {
    function load_GL_NV_bindless_multi_draw_indirect (line 5997) | static void load_GL_NV_bindless_multi_draw_indirect(LOADER load) {
    function load_GL_NV_bindless_multi_draw_indirect_count (line 6004) | static void load_GL_NV_bindless_multi_draw_indirect_count(LOADER load) {
    function load_GL_NV_bindless_texture (line 6011) | static void load_GL_NV_bindless_texture(LOADER load) {
    function load_GL_NV_blend_equation_advanced (line 6029) | static void load_GL_NV_blend_equation_advanced(LOADER load) {
    function load_GL_NV_command_list (line 6037) | static void load_GL_NV_command_list(LOADER load) {
    function load_GL_NV_conditional_render (line 6060) | static void load_GL_NV_conditional_render(LOADER load) {
    function load_GL_NV_conservative_raster (line 6067) | static void load_GL_NV_conservative_raster(LOADER load) {
    function load_GL_NV_conservative_raster_dilate (line 6073) | static void load_GL_NV_conservative_raster_dilate(LOADER load) {
    function load_GL_NV_copy_buffer (line 6079) | static void load_GL_NV_copy_buffer(LOADER load) {
    function load_GL_NV_copy_image (line 6085) | static void load_GL_NV_copy_image(LOADER load) {
    function load_GL_NV_coverage_sample (line 6091) | static void load_GL_NV_coverage_sample(LOADER load) {
    function load_GL_NV_depth_buffer_float (line 6099) | static void load_GL_NV_depth_buffer_float(LOADER load) {
    function load_GL_NV_draw_buffers (line 6109) | static void load_GL_NV_draw_buffers(LOADER load) {
    function load_GL_NV_draw_instanced (line 6115) | static void load_GL_NV_draw_instanced(LOADER load) {
    function load_GL_NV_draw_texture (line 6122) | static void load_GL_NV_draw_texture(LOADER load) {
    function load_GL_NV_explicit_multisample (line 6129) | static void load_GL_NV_explicit_multisample(LOADER load) {
    function load_GL_NV_fence (line 6138) | static void load_GL_NV_fence(LOADER load) {
    function load_GL_NV_fragment_coverage_to_color (line 6152) | static void load_GL_NV_fragment_coverage_to_color(LOADER load) {
    function load_GL_NV_framebuffer_blit (line 6160) | static void load_GL_NV_framebuffer_blit(LOADER load) {
    function load_GL_NV_framebuffer_mixed_samples (line 6166) | static void load_GL_NV_framebuffer_mixed_samples(LOADER load) {
    function load_GL_NV_framebuffer_multisample (line 6175) | static void load_GL_NV_framebuffer_multisample(LOADER load) {
    function load_GL_NV_framebuffer_multisample_coverage (line 6181) | static void load_GL_NV_framebuffer_multisample_coverage(LOADER load) {
    function load_GL_NV_geometry_program4 (line 6188) | static void load_GL_NV_geometry_program4(LOADER load) {
    function load_GL_NV_gpu_program4 (line 6199) | static void load_GL_NV_gpu_program4(LOADER load) {
    function load_GL_NV_gpu_program5 (line 6220) | static void load_GL_NV_gpu_program5(LOADER load) {
    function load_GL_NV_gpu_shader5 (line 6228) | static void load_GL_NV_gpu_shader5(LOADER load) {
    function load_GL_NV_half_float (line 6266) | static void load_GL_NV_half_float(LOADER load) {
    function load_GL_NV_instanced_arrays (line 6318) | static void load_GL_NV_instanced_arrays(LOADER load) {
    function load_GL_NV_internalformat_sample_query (line 6324) | static void load_GL_NV_internalformat_sample_query(LOADER load) {
    function load_GL_NV_non_square_matrices (line 6331) | static void load_GL_NV_non_square_matrices(LOADER load) {
    function load_GL_NV_occlusion_query (line 6342) | static void load_GL_NV_occlusion_query(LOADER load) {
    function load_GL_NV_parameter_buffer_object (line 6354) | static void load_GL_NV_parameter_buffer_object(LOADER load) {
    function load_GL_NV_path_rendering (line 6363) | static void load_GL_NV_path_rendering(LOADER load) {
    function load_GL_NV_polygon_mode (line 6433) | static void load_GL_NV_polygon_mode(LOADER load) {
    function load_GL_NV_present_video (line 6439) | static void load_GL_NV_present_video(LOADER load) {
    function load_GL_NV_primitive_restart (line 6450) | static void load_GL_NV_primitive_restart(LOADER load) {
    function load_GL_NV_read_buffer (line 6457) | static void load_GL_NV_read_buffer(LOADER load) {
    function load_GL_NV_sample_locations (line 6467) | static void load_GL_NV_sample_locations(LOADER load) {
    function load_GL_NV_shader_buffer_load (line 6480) | static void load_GL_NV_shader_buffer_load(LOADER load) {
    function load_GL_NV_texture_barrier (line 6508) | static void load_GL_NV_texture_barrier(LOADER load) {
    function load_GL_NV_texture_multisample (line 6516) | static void load_GL_NV_texture_multisample(LOADER load) {
    function load_GL_NV_transform_feedback (line 6528) | static void load_GL_NV_transform_feedback(LOADER load) {
    function load_GL_NV_transform_feedback2 (line 6545) | static void load_GL_NV_transform_feedback2(LOADER load) {
    function load_GL_NV_vdpau_interop (line 6558) | static void load_GL_NV_vdpau_interop(LOADER load) {
    function load_GL_NV_vertex_attrib_integer_64bit (line 6573) | static void load_GL_NV_vertex_attrib_integer_64bit(LOADER load) {
    function load_GL_NV_vertex_buffer_unified_memory (line 6597) | static void load_GL_NV_vertex_buffer_unified_memory(LOADER load) {
    function load_GL_NV_vertex_program4 (line 6614) | static void load_GL_NV_vertex_program4(LOADER load) {
    function load_GL_NV_video_capture (line 6642) | static void load_GL_NV_video_capture(LOADER load) {
    function load_GL_NV_viewport_array (line 6659) | static void load_GL_NV_viewport_array(LOADER load) {
    function load_GL_NVX_conditional_render (line 6677) | static void load_GL_NVX_conditional_render(LOADER load) {
    function load_GL_OVR_multiview (line 6685) | static void load_GL_OVR_multiview(LOADER load) {
    function load_GL_OVR_multiview_multisampled_render_to_texture (line 6692) | static void load_GL_OVR_multiview_multisampled_render_to_texture(LOADE...
    function load_GL_QCOM_alpha_test (line 6698) | static void load_GL_QCOM_alpha_test(LOADER load) {
    function load_GL_QCOM_driver_control (line 6705) | static void load_GL_QCOM_driver_control(LOADER load) {
    function load_GL_QCOM_extended_get (line 6714) | static void load_GL_QCOM_extended_get(LOADER load) {
    function load_GL_QCOM_extended_get2 (line 6727) | static void load_GL_QCOM_extended_get2(LOADER load) {
    function load_GL_QCOM_tiled_rendering (line 6737) | static void load_GL_QCOM_tiled_rendering(LOADER load) {
    function find_extensions (line 6745) | static void find_extensions(void) {
    function find_core (line 7239) | static void find_core(void) {
    function gladLoadGLLoader (line 7271) | bool gladLoadGLLoader(LOADER load) {

FILE: src/libraries/glad/glad.hpp
  type glad (line 103) | namespace glad {
    type __GLsync (line 145) | struct __GLsync
    type _cl_context (line 146) | struct _cl_context
    type _cl_event (line 147) | struct _cl_event
    type _cl_context (line 4346) | struct _cl_context
    type _cl_event (line 4346) | struct _cl_event

FILE: src/libraries/glad/gladfuncs.hpp
  type glad (line 31) | namespace glad {
    function glCullFace (line 35) | inline void glCullFace(GLenum mode) { fp_glCullFace(mode); }
    function glFrontFace (line 36) | inline void glFrontFace(GLenum mode) { fp_glFrontFace(mode); }
    function glHint (line 37) | inline void glHint(GLenum target, GLenum mode) { fp_glHint(target, mod...
    function glLineWidth (line 38) | inline void glLineWidth(GLfloat width) { fp_glLineWidth(width); }
    function glPointSize (line 39) | inline void glPointSize(GLfloat size) { fp_glPointSize(size); }
    function glPolygonMode (line 40) | inline void glPolygonMode(GLenum face, GLenum mode) { fp_glPolygonMode...
    function glScissor (line 41) | inline void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)...
    function glTexParameterf (line 42) | inline void glTexParameterf(GLenum target, GLenum pname, GLfloat param...
    function glTexParameterfv (line 43) | inline void glTexParameterfv(GLenum target, GLenum pname, const GLfloa...
    function glTexParameteri (line 44) | inline void glTexParameteri(GLenum target, GLenum pname, GLint param) ...
    function glTexParameteriv (line 45) | inline void glTexParameteriv(GLenum target, GLenum pname, const GLint*...
    function glTexImage1D (line 46) | inline void glTexImage1D(GLenum target, GLint level, GLint internalfor...
    function glTexImage2D (line 47) | inline void glTexImage2D(GLenum target, GLint level, GLint internalfor...
    function glDrawBuffer (line 48) | inline void glDrawBuffer(GLenum buf) { fp_glDrawBuffer(buf); }
    function glClear (line 49) | inline void glClear(GLbitfield mask) { fp_glClear(mask); }
    function glClearColor (line 50) | inline void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLf...
    function glClearStencil (line 51) | inline void glClearStencil(GLint s) { fp_glClearStencil(s); }
    function glClearDepth (line 52) | inline void glClearDepth(GLdouble depth) { fp_glClearDepth(depth); }
    function glStencilMask (line 53) | inline void glStencilMask(GLuint mask) { fp_glStencilMask(mask); }
    function glColorMask (line 54) | inline void glColorMask(GLboolean red, GLboolean green, GLboolean blue...
    function glDepthMask (line 55) | inline void glDepthMask(GLboolean flag) { fp_glDepthMask(flag); }
    function glDisable (line 56) | inline void glDisable(GLenum cap) { fp_glDisable(cap); }
    function glEnable (line 57) | inline void glEnable(GLenum cap) { fp_glEnable(cap); }
    function glFinish (line 58) | inline void glFinish() { fp_glFinish(); }
    function glFlush (line 59) | inline void glFlush() { fp_glFlush(); }
    function glBlendFunc (line 60) | inline void glBlendFunc(GLenum sfactor, GLenum dfactor) { fp_glBlendFu...
    function glLogicOp (line 61) | inline void glLogicOp(GLenum opcode) { fp_glLogicOp(opcode); }
    function glStencilFunc (line 62) | inline void glStencilFunc(GLenum func, GLint ref, GLuint mask) { fp_gl...
    function glStencilOp (line 63) | inline void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) { fp_...
    function glDepthFunc (line 64) | inline void glDepthFunc(GLenum func) { fp_glDepthFunc(func); }
    function glPixelStoref (line 65) | inline void glPixelStoref(GLenum pname, GLfloat param) { fp_glPixelSto...
    function glPixelStorei (line 66) | inline void glPixelStorei(GLenum pname, GLint param) { fp_glPixelStore...
    function glReadBuffer (line 67) | inline void glReadBuffer(GLenum src) { fp_glReadBuffer(src); }
    function glReadPixels (line 68) | inline void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei heig...
    function glGetBooleanv (line 69) | inline void glGetBooleanv(GLenum pname, GLboolean* data) { fp_glGetBoo...
    function glGetDoublev (line 70) | inline void glGetDoublev(GLenum pname, GLdouble* data) { fp_glGetDoubl...
    function GLenum (line 71) | inline GLenum glGetError() { return fp_glGetError(); }
    function glGetFloatv (line 72) | inline void glGetFloatv(GLenum pname, GLfloat* data) { fp_glGetFloatv(...
    function glGetIntegerv (line 73) | inline void glGetIntegerv(GLenum pname, GLint* data) { fp_glGetInteger...
    function GLubyte (line 74) | inline const GLubyte* glGetString(GLenum name) { return fp_glGetString...
    function glGetTexImage (line 75) | inline void glGetTexImage(GLenum target, GLint level, GLenum format, G...
    function glGetTexParameterfv (line 76) | inline void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* ...
    function glGetTexParameteriv (line 77) | inline void glGetTexParameteriv(GLenum target, GLenum pname, GLint* pa...
    function glGetTexLevelParameterfv (line 78) | inline void glGetTexLevelParameterfv(GLenum target, GLint level, GLenu...
    function glGetTexLevelParameteriv (line 79) | inline void glGetTexLevelParameteriv(GLenum target, GLint level, GLenu...
    function GLboolean (line 80) | inline GLboolean glIsEnabled(GLenum cap) { return fp_glIsEnabled(cap); }
    function glDepthRange (line 81) | inline void glDepthRange(GLdouble near, GLdouble far) { fp_glDepthRang...
    function glViewport (line 82) | inline void glViewport(GLint x, GLint y, GLsizei width, GLsizei height...
    function glNewList (line 83) | inline void glNewList(GLuint list, GLenum mode) { fp_glNewList(list, m...
    function glEndList (line 84) | inline void glEndList() { fp_glEndList(); }
    function glCallList (line 85) | inline void glCallList(GLuint list) { fp_glCallList(list); }
    function glCallLists (line 86) | inline void glCallLists(GLsizei n, GLenum type, const void* lists) { f...
    function glDeleteLists (line 87) | inline void glDeleteLists(GLuint list, GLsizei range) { fp_glDeleteLis...
    function GLuint (line 88) | inline GLuint glGenLists(GLsizei range) { return fp_glGenLists(range); }
    function glListBase (line 89) | inline void glListBase(GLuint base) { fp_glListBase(base); }
    function glBegin (line 90) | inline void glBegin(GLenum mode) { fp_glBegin(mode); }
    function glBitmap (line 91) | inline void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLf...
    function glColor3b (line 92) | inline void glColor3b(GLbyte red, GLbyte green, GLbyte blue) { fp_glCo...
    function glColor3bv (line 93) | inline void glColor3bv(const GLbyte* v) { fp_glColor3bv(v); }
    function glColor3d (line 94) | inline void glColor3d(GLdouble red, GLdouble green, GLdouble blue) { f...
    function glColor3dv (line 95) | inline void glColor3dv(const GLdouble* v) { fp_glColor3dv(v); }
    function glColor3f (line 96) | inline void glColor3f(GLfloat red, GLfloat green, GLfloat blue) { fp_g...
    function glColor3fv (line 97) | inline void glColor3fv(const GLfloat* v) { fp_glColor3fv(v); }
    function glColor3i (line 98) | inline void glColor3i(GLint red, GLint green, GLint blue) { fp_glColor...
    function glColor3iv (line 99) | inline void glColor3iv(const GLint* v) { fp_glColor3iv(v); }
    function glColor3s (line 100) | inline void glColor3s(GLshort red, GLshort green, GLshort blue) { fp_g...
    function glColor3sv (line 101) | inline void glColor3sv(const GLshort* v) { fp_glColor3sv(v); }
    function glColor3ub (line 102) | inline void glColor3ub(GLubyte red, GLubyte green, GLubyte blue) { fp_...
    function glColor3ubv (line 103) | inline void glColor3ubv(const GLubyte* v) { fp_glColor3ubv(v); }
    function glColor3ui (line 104) | inline void glColor3ui(GLuint red, GLuint green, GLuint blue) { fp_glC...
    function glColor3uiv (line 105) | inline void glColor3uiv(const GLuint* v) { fp_glColor3uiv(v); }
    function glColor3us (line 106) | inline void glColor3us(GLushort red, GLushort green, GLushort blue) { ...
    function glColor3usv (line 107) | inline void glColor3usv(const GLushort* v) { fp_glColor3usv(v); }
    function glColor4b (line 108) | inline void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte al...
    function glColor4bv (line 109) | inline void glColor4bv(const GLbyte* v) { fp_glColor4bv(v); }
    function glColor4d (line 110) | inline void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLd...
    function glColor4dv (line 111) | inline void glColor4dv(const GLdouble* v) { fp_glColor4dv(v); }
    function glColor4f (line 112) | inline void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloa...
    function glColor4fv (line 113) | inline void glColor4fv(const GLfloat* v) { fp_glColor4fv(v); }
    function glColor4i (line 114) | inline void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)...
    function glColor4iv (line 115) | inline void glColor4iv(const GLint* v) { fp_glColor4iv(v); }
    function glColor4s (line 116) | inline void glColor4s(GLshort red, GLshort green, GLshort blue, GLshor...
    function glColor4sv (line 117) | inline void glColor4sv(const GLshort* v) { fp_glColor4sv(v); }
    function glColor4ub (line 118) | inline void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLuby...
    function glColor4ubv (line 119) | inline void glColor4ubv(const GLubyte* v) { fp_glColor4ubv(v); }
    function glColor4ui (line 120) | inline void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint a...
    function glColor4uiv (line 121) | inline void glColor4uiv(const GLuint* v) { fp_glColor4uiv(v); }
    function glColor4us (line 122) | inline void glColor4us(GLushort red, GLushort green, GLushort blue, GL...
    function glColor4usv (line 123) | inline void glColor4usv(const GLushort* v) { fp_glColor4usv(v); }
    function glEdgeFlag (line 124) | inline void glEdgeFlag(GLboolean flag) { fp_glEdgeFlag(flag); }
    function glEdgeFlagv (line 125) | inline void glEdgeFlagv(const GLboolean* flag) { fp_glEdgeFlagv(flag); }
    function glEnd (line 126) | inline void glEnd() { fp_glEnd(); }
    function glIndexd (line 127) | inline void glIndexd(GLdouble c) { fp_glIndexd(c); }
    function glIndexdv (line 128) | inline void glIndexdv(const GLdouble* c) { fp_glIndexdv(c); }
    function glIndexf (line 129) | inline void glIndexf(GLfloat c) { fp_glIndexf(c); }
    function glIndexfv (line 130) | inline void glIndexfv(const GLfloat* c) { fp_glIndexfv(c); }
    function glIndexi (line 131) | inline void glIndexi(GLint c) { fp_glIndexi(c); }
    function glIndexiv (line 132) | inline void glIndexiv(const GLint* c) { fp_glIndexiv(c); }
    function glIndexs (line 133) | inline void glIndexs(GLshort c) { fp_glIndexs(c); }
    function glIndexsv (line 134) | inline void glIndexsv(const GLshort* c) { fp_glIndexsv(c); }
    function glNormal3b (line 135) | inline void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz) { fp_glNormal3...
    function glNormal3bv (line 136) | inline void glNormal3bv(const GLbyte* v) { fp_glNormal3bv(v); }
    function glNormal3d (line 137) | inline void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz) { fp_glN...
    function glNormal3dv (line 138) | inline void glNormal3dv(const GLdouble* v) { fp_glNormal3dv(v); }
    function glNormal3f (line 139) | inline void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz) { fp_glNorm...
    function glNormal3fv (line 140) | inline void glNormal3fv(const GLfloat* v) { fp_glNormal3fv(v); }
    function glNormal3i (line 141) | inline void glNormal3i(GLint nx, GLint ny, GLint nz) { fp_glNormal3i(n...
    function glNormal3iv (line 142) | inline void glNormal3iv(const GLint* v) { fp_glNormal3iv(v); }
    function glNormal3s (line 143) | inline void glNormal3s(GLshort nx, GLshort ny, GLshort nz) { fp_glNorm...
    function glNormal3sv (line 144) | inline void glNormal3sv(const GLshort* v) { fp_glNormal3sv(v); }
    function glRasterPos2d (line 145) | inline void glRasterPos2d(GLdouble x, GLdouble y) { fp_glRasterPos2d(x...
    function glRasterPos2dv (line 146) | inline void glRasterPos2dv(const GLdouble* v) { fp_glRasterPos2dv(v); }
    function glRasterPos2f (line 147) | inline void glRasterPos2f(GLfloat x, GLfloat y) { fp_glRasterPos2f(x, ...
    function glRasterPos2fv (line 148) | inline void glRasterPos2fv(const GLfloat* v) { fp_glRasterPos2fv(v); }
    function glRasterPos2i (line 149) | inline void glRasterPos2i(GLint x, GLint y) { fp_glRasterPos2i(x, y); }
    function glRasterPos2iv (line 150) | inline void glRasterPos2iv(const GLint* v) { fp_glRasterPos2iv(v); }
    function glRasterPos2s (line 151) | inline void glRasterPos2s(GLshort x, GLshort y) { fp_glRasterPos2s(x, ...
    function glRasterPos2sv (line 152) | inline void glRasterPos2sv(const GLshort* v) { fp_glRasterPos2sv(v); }
    function glRasterPos3d (line 153) | inline void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z) { fp_glR...
    function glRasterPos3dv (line 154) | inline void glRasterPos3dv(const GLdouble* v) { fp_glRasterPos3dv(v); }
    function glRasterPos3f (line 155) | inline void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z) { fp_glRast...
    function glRasterPos3fv (line 156) | inline void glRasterPos3fv(const GLfloat* v) { fp_glRasterPos3fv(v); }
    function glRasterPos3i (line 157) | inline void glRasterPos3i(GLint x, GLint y, GLint z) { fp_glRasterPos3...
    function glRasterPos3iv (line 158) | inline void glRasterPos3iv(const GLint* v) { fp_glRasterPos3iv(v); }
    function glRasterPos3s (line 159) | inline void glRasterPos3s(GLshort x, GLshort y, GLshort z) { fp_glRast...
    function glRasterPos3sv (line 160) | inline void glRasterPos3sv(const GLshort* v) { fp_glRasterPos3sv(v); }
    function glRasterPos4d (line 161) | inline void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble...
    function glRasterPos4dv (line 162) | inline void glRasterPos4dv(const GLdouble* v) { fp_glRasterPos4dv(v); }
    function glRasterPos4f (line 163) | inline void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) ...
    function glRasterPos4fv (line 164) | inline void glRasterPos4fv(const GLfloat* v) { fp_glRasterPos4fv(v); }
    function glRasterPos4i (line 165) | inline void glRasterPos4i(GLint x, GLint y, GLint z, GLint w) { fp_glR...
    function glRasterPos4iv (line 166) | inline void glRasterPos4iv(const GLint* v) { fp_glRasterPos4iv(v); }
    function glRasterPos4s (line 167) | inline void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w) ...
    function glRasterPos4sv (line 168) | inline void glRasterPos4sv(const GLshort* v) { fp_glRasterPos4sv(v); }
    function glRectd (line 169) | inline void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2...
    function glRectdv (line 170) | inline void glRectdv(const GLdouble* v1, const GLdouble* v2) { fp_glRe...
    function glRectf (line 171) | inline void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) { ...
    function glRectfv (line 172) | inline void glRectfv(const GLfloat* v1, const GLfloat* v2) { fp_glRect...
    function glRecti (line 173) | inline void glRecti(GLint x1, GLint y1, GLint x2, GLint y2) { fp_glRec...
    function glRectiv (line 174) | inline void glRectiv(const GLint* v1, const GLint* v2) { fp_glRectiv(v...
    function glRects (line 175) | inline void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2) { ...
    function glRectsv (line 176) | inline void glRectsv(const GLshort* v1, const GLshort* v2) { fp_glRect...
    function glTexCoord1d (line 177) | inline void glTexCoord1d(GLdouble s) { fp_glTexCoord1d(s); }
    function glTexCoord1dv (line 178) | inline void glTexCoord1dv(const GLdouble* v) { fp_glTexCoord1dv(v); }
    function glTexCoord1f (line 179) | inline void glTexCoord1f(GLfloat s) { fp_glTexCoord1f(s); }
    function glTexCoord1fv (line 180) | inline void glTexCoord1fv(const GLfloat* v) { fp_glTexCoord1fv(v); }
    function glTexCoord1i (line 181) | inline void glTexCoord1i(GLint s) { fp_glTexCoord1i(s); }
    function glTexCoord1iv (line 182) | inline void glTexCoord1iv(const GLint* v) { fp_glTexCoord1iv(v); }
    function glTexCoord1s (line 183) | inline void glTexCoord1s(GLshort s) { fp_glTexCoord1s(s); }
    function glTexCoord1sv (line 184) | inline void glTexCoord1sv(const GLshort* v) { fp_glTexCoord1sv(v); }
    function glTexCoord2d (line 185) | inline void glTexCoord2d(GLdouble s, GLdouble t) { fp_glTexCoord2d(s, ...
    function glTexCoord2dv (line 186) | inline void glTexCoord2dv(const GLdouble* v) { fp_glTexCoord2dv(v); }
    function glTexCoord2f (line 187) | inline void glTexCoord2f(GLfloat s, GLfloat t) { fp_glTexCoord2f(s, t); }
    function glTexCoord2fv (line 188) | inline void glTexCoord2fv(const GLfloat* v) { fp_glTexCoord2fv(v); }
    function glTexCoord2i (line 189) | inline void glTexCoord2i(GLint s, GLint t) { fp_glTexCoord2i(s, t); }
    function glTexCoord2iv (line 190) | inline void glTexCoord2iv(const GLint* v) { fp_glTexCoord2iv(v); }
    function glTexCoord2s (line 191) | inline void glTexCoord2s(GLshort s, GLshort t) { fp_glTexCoord2s(s, t); }
    function glTexCoord2sv (line 192) | inline void glTexCoord2sv(const GLshort* v) { fp_glTexCoord2sv(v); }
    function glTexCoord3d (line 193) | inline void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r) { fp_glTe...
    function glTexCoord3dv (line 194) | inline void glTexCoord3dv(const GLdouble* v) { fp_glTexCoord3dv(v); }
    function glTexCoord3f (line 195) | inline void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r) { fp_glTexCo...
    function glTexCoord3fv (line 196) | inline void glTexCoord3fv(const GLfloat* v) { fp_glTexCoord3fv(v); }
    function glTexCoord3i (line 197) | inline void glTexCoord3i(GLint s, GLint t, GLint r) { fp_glTexCoord3i(...
    function glTexCoord3iv (line 198) | inline void glTexCoord3iv(const GLint* v) { fp_glTexCoord3iv(v); }
    function glTexCoord3s (line 199) | inline void glTexCoord3s(GLshort s, GLshort t, GLshort r) { fp_glTexCo...
    function glTexCoord3sv (line 200) | inline void glTexCoord3sv(const GLshort* v) { fp_glTexCoord3sv(v); }
    function glTexCoord4d (line 201) | inline void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble ...
    function glTexCoord4dv (line 202) | inline void glTexCoord4dv(const GLdouble* v) { fp_glTexCoord4dv(v); }
    function glTexCoord4f (line 203) | inline void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q) {...
    function glTexCoord4fv (line 204) | inline void glTexCoord4fv(const GLfloat* v) { fp_glTexCoord4fv(v); }
    function glTexCoord4i (line 205) | inline void glTexCoord4i(GLint s, GLint t, GLint r, GLint q) { fp_glTe...
    function glTexCoord4iv (line 206) | inline void glTexCoord4iv(const GLint* v) { fp_glTexCoord4iv(v); }
    function glTexCoord4s (line 207) | inline void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q) {...
    function glTexCoord4sv (line 208) | inline void glTexCoord4sv(const GLshort* v) { fp_glTexCoord4sv(v); }
    function glVertex2d (line 209) | inline void glVertex2d(GLdouble x, GLdouble y) { fp_glVertex2d(x, y); }
    function glVertex2dv (line 210) | inline void glVertex2dv(const GLdouble* v) { fp_glVertex2dv(v); }
    function glVertex2f (line 211) | inline void glVertex2f(GLfloat x, GLfloat y) { fp_glVertex2f(x, y); }
    function glVertex2fv (line 212) | inline void glVertex2fv(const GLfloat* v) { fp_glVertex2fv(v); }
    function glVertex2i (line 213) | inline void glVertex2i(GLint x, GLint y) { fp_glVertex2i(x, y); }
    function glVertex2iv (line 214) | inline void glVertex2iv(const GLint* v) { fp_glVertex2iv(v); }
    function glVertex2s (line 215) | inline void glVertex2s(GLshort x, GLshort y) { fp_glVertex2s(x, y); }
    function glVertex2sv (line 216) | inline void glVertex2sv(const GLshort* v) { fp_glVertex2sv(v); }
    function glVertex3d (line 217) | inline void glVertex3d(GLdouble x, GLdouble y, GLdouble z) { fp_glVert...
    function glVertex3dv (line 218) | inline void glVertex3dv(const GLdouble* v) { fp_glVertex3dv(v); }
    function glVertex3f (line 219) | inline void glVertex3f(GLfloat x, GLfloat y, GLfloat z) { fp_glVertex3...
    function glVertex3fv (line 220) | inline void glVertex3fv(const GLfloat* v) { fp_glVertex3fv(v); }
    function glVertex3i (line 221) | inline void glVertex3i(GLint x, GLint y, GLint z) { fp_glVertex3i(x, y...
    function glVertex3iv (line 222) | inline void glVertex3iv(const GLint* v) { fp_glVertex3iv(v); }
    function glVertex3s (line 223) | inline void glVertex3s(GLshort x, GLshort y, GLshort z) { fp_glVertex3...
    function glVertex3sv (line 224) | inline void glVertex3sv(const GLshort* v) { fp_glVertex3sv(v); }
    function glVertex4d (line 225) | inline void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)...
    function glVertex4dv (line 226) | inline void glVertex4dv(const GLdouble* v) { fp_glVertex4dv(v); }
    function glVertex4f (line 227) | inline void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { f...
    function glVertex4fv (line 228) | inline void glVertex4fv(const GLfloat* v) { fp_glVertex4fv(v); }
    function glVertex4i (line 229) | inline void glVertex4i(GLint x, GLint y, GLint z, GLint w) { fp_glVert...
    function glVertex4iv (line 230) | inline void glVertex4iv(const GLint* v) { fp_glVertex4iv(v); }
    function glVertex4s (line 231) | inline void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w) { f...
    function glVertex4sv (line 232) | inline void glVertex4sv(const GLshort* v) { fp_glVertex4sv(v); }
    function glClipPlane (line 233) | inline void glClipPlane(GLenum plane, const GLdouble* equation) { fp_g...
    function glColorMaterial (line 234) | inline void glColorMaterial(GLenum face, GLenum mode) { fp_glColorMate...
    function glFogf (line 235) | inline void glFogf(GLenum pname, GLfloat param) { fp_glFogf(pname, par...
    function glFogfv (line 236) | inline void glFogfv(GLenum pname, const GLfloat* params) { fp_glFogfv(...
    function glFogi (line 237) | inline void glFogi(GLenum pname, GLint param) { fp_glFogi(pname, param...
    function glFogiv (line 238) | inline void glFogiv(GLenum pname, const GLint* params) { fp_glFogiv(pn...
    function glLightf (line 239) | inline void glLightf(GLenum light, GLenum pname, GLfloat param) { fp_g...
    function glLightfv (line 240) | inline void glLightfv(GLenum light, GLenum pname, const GLfloat* param...
    function glLighti (line 241) | inline void glLighti(GLenum light, GLenum pname, GLint param) { fp_glL...
    function glLightiv (line 242) | inline void glLightiv(GLenum light, GLenum pname, const GLint* params)...
    function glLightModelf (line 243) | inline void glLightModelf(GLenum pname, GLfloat param) { fp_glLightMod...
    function glLightModelfv (line 244) | inline void glLightModelfv(GLenum pname, const GLfloat* params) { fp_g...
    function glLightModeli (line 245) | inline void glLightModeli(GLenum pname, GLint param) { fp_glLightModel...
    function glLightModeliv (line 246) | inline void glLightModeliv(GLenum pname, const GLint* params) { fp_glL...
    function glLineStipple (line 247) | inline void glLineStipple(GLint factor, GLushort pattern) { fp_glLineS...
    function glMaterialf (line 248) | inline void glMaterialf(GLenum face, GLenum pname, GLfloat param) { fp...
    function glMaterialfv (line 249) | inline void glMaterialfv(GLenum face, GLenum pname, const GLfloat* par...
    function glMateriali (line 250) | inline void glMateriali(GLenum face, GLenum pname, GLint param) { fp_g...
    function glMaterialiv (line 251) | inline void glMaterialiv(GLenum face, GLenum pname, const GLint* param...
    function glPolygonStipple (line 252) | inline void glPolygonStipple(const GLubyte* mask) { fp_glPolygonStippl...
    function glShadeModel (line 253) | inline void glShadeModel(GLenum mode) { fp_glShadeModel(mode); }
    function glTexEnvf (line 254) | inline void glTexEnvf(GLenum target, GLenum pname, GLfloat param) { fp...
    function glTexEnvfv (line 255) | inline void glTexEnvfv(GLenum target, GLenum pname, const GLfloat* par...
    function glTexEnvi (line 256) | inline void glTexEnvi(GLenum target, GLenum pname, GLint param) { fp_g...
    function glTexEnviv (line 257) | inline void glTexEnviv(GLenum target, GLenum pname, const GLint* param...
    function glTexGend (line 258) | inline void glTexGend(GLenum coord, GLenum pname, GLdouble param) { fp...
    function glTexGendv (line 259) | inline void glTexGendv(GLenum coord, GLenum pname, const GLdouble* par...
    function glTexGenf (line 260) | inline void glTexGenf(GLenum coord, GLenum pname, GLfloat param) { fp_...
    function glTexGenfv (line 261) | inline void glTexGenfv(GLenum coord, GLenum pname, const GLfloat* para...
    function glTexGeni (line 262) | inline void glTexGeni(GLenum coord, GLenum pname, GLint param) { fp_gl...
    function glTexGeniv (line 263) | inline void glTexGeniv(GLenum coord, GLenum pname, const GLint* params...
    function glFeedbackBuffer (line 264) | inline void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat* buffe...
    function glSelectBuffer (line 265) | inline void glSelectBuffer(GLsizei size, GLuint* buffer) { fp_glSelect...
    function GLint (line 266) | inline GLint glRenderMode(GLenum mode) { return fp_glRenderMode(mode); }
    function glInitNames (line 267) | inline void glInitNames() { fp_glInitNames(); }
    function glLoadName (line 268) | inline void glLoadName(GLuint name) { fp_glLoadName(name); }
    function glPassThrough (line 269) | inline void glPassThrough(GLfloat token) { fp_glPassThrough(token); }
    function glPopName (line 270) | inline void glPopName() { fp_glPopName(); }
    function glPushName (line 271) | inline void glPushName(GLuint name) { fp_glPushName(name); }
    function glClearAccum (line 272) | inline void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLf...
    function glClearIndex (line 273) | inline void glClearIndex(GLfloat c) { fp_glClearIndex(c); }
    function glIndexMask (line 274) | inline void glIndexMask(GLuint mask) { fp_glIndexMask(mask); }
    function glAccum (line 275) | inline void glAccum(GLenum op, GLfloat value) { fp_glAccum(op, value); }
    function glPopAttrib (line 276) | inline void glPopAttrib() { fp_glPopAttrib(); }
    function glPushAttrib (line 277) | inline void glPushAttrib(GLbitfield mask) { fp_glPushAttrib(mask); }
    function glMap1d (line 278) | inline void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint str...
    function glMap1f (line 279) | inline void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint strid...
    function glMap2d (line 280) | inline void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ust...
    function glMap2f (line 281) | inline void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustri...
    function glMapGrid1d (line 282) | inline void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2) { fp_glMap...
    function glMapGrid1f (line 283) | inline void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2) { fp_glMapGr...
    function glMapGrid2d (line 284) | inline void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, ...
    function glMapGrid2f (line 285) | inline void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GL...
    function glEvalCoord1d (line 286) | inline void glEvalCoord1d(GLdouble u) { fp_glEvalCoord1d(u); }
    function glEvalCoord1dv (line 287) | inline void glEvalCoord1dv(const GLdouble* u) { fp_glEvalCoord1dv(u); }
    function glEvalCoord1f (line 288) | inline void glEvalCoord1f(GLfloat u) { fp_glEvalCoord1f(u); }
    function glEvalCoord1fv (line 289) | inline void glEvalCoord1fv(const GLfloat* u) { fp_glEvalCoord1fv(u); }
    function glEvalCoord2d (line 290) | inline void glEvalCoord2d(GLdouble u, GLdouble v) { fp_glEvalCoord2d(u...
    function glEvalCoord2dv (line 291) | inline void glEvalCoord2dv(const GLdouble* u) { fp_glEvalCoord2dv(u); }
    function glEvalCoord2f (line 292) | inline void glEvalCoord2f(GLfloat u, GLfloat v) { fp_glEvalCoord2f(u, ...
    function glEvalCoord2fv (line 293) | inline void glEvalCoord2fv(const GLfloat* u) { fp_glEvalCoord2fv(u); }
    function glEvalMesh1 (line 294) | inline void glEvalMesh1(GLenum mode, GLint i1, GLint i2) { fp_glEvalMe...
    function glEvalPoint1 (line 295) | inline void glEvalPoint1(GLint i) { fp_glEvalPoint1(i); }
    function glEvalMesh2 (line 296) | inline void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLi...
    function glEvalPoint2 (line 297) | inline void glEvalPoint2(GLint i, GLint j) { fp_glEvalPoint2(i, j); }
    function glAlphaFunc (line 298) | inline void glAlphaFunc(GLenum func, GLfloat ref) { fp_glAlphaFunc(fun...
    function glPixelZoom (line 299) | inline void glPixelZoom(GLfloat xfactor, GLfloat yfactor) { fp_glPixel...
    function glPixelTransferf (line 300) | inline void glPixelTransferf(GLenum pname, GLfloat param) { fp_glPixel...
    function glPixelTransferi (line 301) | inline void glPixelTransferi(GLenum pname, GLint param) { fp_glPixelTr...
    function glPixelMapfv (line 302) | inline void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat* v...
    function glPixelMapuiv (line 303) | inline void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint* v...
    function glPixelMapusv (line 304) | inline void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort*...
    function glCopyPixels (line 305) | inline void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei heig...
    function glDrawPixels (line 306) | inline void glDrawPixels(GLsizei width, GLsizei height, GLenum format,...
    function glGetClipPlane (line 307) | inline void glGetClipPlane(GLenum plane, GLdouble* equation) { fp_glGe...
    function glGetLightfv (line 308) | inline void glGetLightfv(GLenum light, GLenum pname, GLfloat* params) ...
    function glGetLightiv (line 309) | inline void glGetLightiv(GLenum light, GLenum pname, GLint* params) { ...
    function glGetMapdv (line 310) | inline void glGetMapdv(GLenum target, GLenum query, GLdouble* v) { fp_...
    function glGetMapfv (line 311) | inline void glGetMapfv(GLenum target, GLenum query, GLfloat* v) { fp_g...
    function glGetMapiv (line 312) | inline void glGetMapiv(GLenum target, GLenum query, GLint* v) { fp_glG...
    function glGetMaterialfv (line 313) | inline void glGetMaterialfv(GLenum face, GLenum pname, GLfloat* params...
    function glGetMaterialiv (line 314) | inline void glGetMaterialiv(GLenum face, GLenum pname, GLint* params) ...
    function glGetPixelMapfv (line 315) | inline void glGetPixelMapfv(GLenum map, GLfloat* values) { fp_glGetPix...
    function glGetPixelMapuiv (line 316) | inline void glGetPixelMapuiv(GLenum map, GLuint* values) { fp_glGetPix...
    function glGetPixelMapusv (line 317) | inline void glGetPixelMapusv(GLenum map, GLushort* values) { fp_glGetP...
    function glGetPolygonStipple (line 318) | inline void glGetPolygonStipple(GLubyte* mask) { fp_glGetPolygonStippl...
    function glGetTexEnvfv (line 319) | inline void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat* params...
    function glGetTexEnviv (line 320) | inline void glGetTexEnviv(GLenum target, GLenum pname, GLint* params) ...
    function glGetTexGendv (line 321) | inline void glGetTexGendv(GLenum coord, GLenum pname, GLdouble* params...
    function glGetTexGenfv (line 322) | inline void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat* params)...
    function glGetTexGeniv (line 323) | inline void glGetTexGeniv(GLenum coord, GLenum pname, GLint* params) {...
    function GLboolean (line 324) | inline GLboolean glIsList(GLuint list) { return fp_glIsList(list); }
    function glFrustum (line 325) | inline void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, ...
    function glLoadIdentity (line 326) | inline void glLoadIdentity() { fp_glLoadIdentity(); }
    function glLoadMatrixf (line 327) | inline void glLoadMatrixf(const GLfloat* m) { fp_glLoadMatrixf(m); }
    function glLoadMatrixd (line 328) | inline void glLoadMatrixd(const GLdouble* m) { fp_glLoadMatrixd(m); }
    function glMatrixMode (line 329) | inline void glMatrixMode(GLenum mode) { fp_glMatrixMode(mode); }
    function glMultMatrixf (line 330) | inline void glMultMatrixf(const GLfloat* m) { fp_glMultMatrixf(m); }
    function glMultMatrixd (line 331) | inline void glMultMatrixd(const GLdouble* m) { fp_glMultMatrixd(m); }
    function glOrtho (line 332) | inline void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GL...
    function glPopMatrix (line 333) | inline void glPopMatrix() { fp_glPopMatrix(); }
    function glPushMatrix (line 334) | inline void glPushMatrix() { fp_glPushMatrix(); }
    function glRotated (line 335) | inline void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble...
    function glRotatef (line 336) | inline void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) ...
    function glScaled (line 337) | inline void glScaled(GLdouble x, GLdouble y, GLdouble z) { fp_glScaled...
    function glScalef (line 338) | inline void glScalef(GLfloat x, GLfloat y, GLfloat z) { fp_glScalef(x,...
    function glTranslated (line 339) | inline void glTranslated(GLdouble x, GLdouble y, GLdouble z) { fp_glTr...
    function glTranslatef (line 340) | inline void glTranslatef(GLfloat x, GLfloat y, GLfloat z) { fp_glTrans...
    function glDrawArrays (line 343) | inline void glDrawArrays(GLenum mode, GLint first, GLsizei count) { fp...
    function glDrawElements (line 344) | inline void glDrawElements(GLenum mode, GLsizei count, GLenum type, co...
    function glGetPointerv (line 345) | inline void glGetPointerv(GLenum pname, void** params) { fp_glGetPoint...
    function glPolygonOffset (line 346) | inline void glPolygonOffset(GLfloat factor, GLfloat units) { fp_glPoly...
    function glCopyTexImage1D (line 347) | inline void glCopyTexImage1D(GLenum target, GLint level, GLenum intern...
    function glCopyTexImage2D (line 348) | inline void glCopyTexImage2D(GLenum target, GLint level, GLenum intern...
    function glCopyTexSubImage1D (line 349) | inline void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoff...
    function glCopyTexSubImage2D (line 350) | inline void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoff...
    function glTexSubImage1D (line 351) | inline void glTexSubImage1D(GLenum target, GLint level, GLint xoffset,...
    function glTexSubImage2D (line 352) | inline void glTexSubImage2D(GLenum target, GLint level, GLint xoffset,...
    function glBindTexture (line 353) | inline void glBindTexture(GLenum target, GLuint texture) { fp_glBindTe...
    function glDeleteTextures (line 354) | inline void glDeleteTextures(GLsizei n, const GLuint* textures) { fp_g...
    function glGenTextures (line 355) | inline void glGenTextures(GLsizei n, GLuint* textures) { fp_glGenTextu...
    function GLboolean (line 356) | inline GLboolean glIsTexture(GLuint texture) { return fp_glIsTexture(t...
    function glArrayElement (line 357) | inline void glArrayElement(GLint i) { fp_glArrayElement(i); }
    function glColorPointer (line 358) | inline void glColorPointer(GLint size, GLenum type, GLsizei stride, co...
    function glDisableClientState (line 359) | inline void glDisableClientState(GLenum array) { fp_glDisableClientSta...
    function glEdgeFlagPointer (line 360) | inline void glEdgeFlagPointer(GLsizei stride, const void* pointer) { f...
    function glEnableClientState (line 361) | inline void glEnableClientState(GLenum array) { fp_glEnableClientState...
    function glIndexPointer (line 362) | inline void glIndexPointer(GLenum type, GLsizei stride, const void* po...
    function glInterleavedArrays (line 363) | inline void glInterleavedArrays(GLenum format, GLsizei stride, const v...
    function glNormalPointer (line 364) | inline void glNormalPointer(GLenum type, GLsizei stride, const void* p...
    function glTexCoordPointer (line 365) | inline void glTexCoordPointer(GLint size, GLenum type, GLsizei stride,...
    function glVertexPointer (line 366) | inline void glVertexPointer(GLint size, GLenum type, GLsizei stride, c...
    function GLboolean (line 367) | inline GLboolean glAreTexturesResident(GLsizei n, const GLuint* textur...
    function glPrioritizeTextures (line 368) | inline void glPrioritizeTextures(GLsizei n, const GLuint* textures, co...
    function glIndexub (line 369) | inline void glIndexub(GLubyte c) { fp_glIndexub(c); }
    function glIndexubv (line 370) | inline void glIndexubv(const GLubyte* c) { fp_glIndexubv(c); }
    function glPopClientAttrib (line 371) | inline void glPopClientAttrib() { fp_glPopClientAttrib(); }
    function glPushClientAttrib (line 372) | inline void glPushClientAttrib(GLbitfield mask) { fp_glPushClientAttri...
    function glDrawRangeElements (line 375) | inline void glDrawRangeElements(GLenum mode, GLuint start, GLuint end,...
    function glTexImage3D (line 376) | inline void glTexImage3D(GLenum target, GLint level, GLint internalfor...
    function glTexSubImage3D (line 377) | inline void glTexSubImage3D(GLenum target, GLint level, GLint xoffset,...
    function glCopyTexSubImage3D (line 378) | inline void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoff...
    function glActiveTexture (line 381) | inline void glActiveTexture(GLenum texture) { fp_glActiveTexture(textu...
    function glSampleCoverage (line 382) | inline void glSampleCoverage(GLfloat value, GLboolean invert) { fp_glS...
    function glCompressedTexImage3D (line 383) | inline void glCompressedTexImage3D(GLenum target, GLint level, GLenum ...
    function glCompressedTexImage2D (line 384) | inline void glCompressedTexImage2D(GLenum target, GLint level, GLenum ...
    function glCompressedTexImage1D (line 385) | inline void glCompressedTexImage1D(GLenum target, GLint level, GLenum ...
    function glCompressedTexSubImage3D (line 386) | inline void glCompressedTexSubImage3D(GLenum target, GLint level, GLin...
    function glCompressedTexSubImage2D (line 387) | inline void glCompressedTexSubImage2D(GLenum target, GLint level, GLin...
    function glCompressedTexSubImage1D (line 388) | inline void glCompressedTexSubImage1D(GLenum target, GLint level, GLin...
    function glGetCompressedTexImage (line 389) | inline void glGetCompressedTexImage(GLenum target, GLint level, void* ...
    function glClientActiveTexture (line 390) | inline void glClientActiveTexture(GLenum texture) { fp_glClientActiveT...
    function glMultiTexCoord1d (line 391) | inline void glMultiTexCoord1d(GLenum target, GLdouble s) { fp_glMultiT...
    function glMultiTexCoord1dv (line 392) | inline void glMultiTexCoord1dv(GLenum target, const GLdouble* v) { fp_...
    function glMultiTexCoord1f (line 393) | inline void glMultiTexCoord1f(GLenum target, GLfloat s) { fp_glMultiTe...
    function glMultiTexCoord1fv (line 394) | inline void glMultiTexCoord1fv(GLenum target, const GLfloat* v) { fp_g...
    function glMultiTexCoord1i (line 395) | inline void glMultiTexCoord1i(GLenum target, GLint s) { fp_glMultiTexC...
    function glMultiTexCoord1iv (line 396) | inline void glMultiTexCoord1iv(GLenum target, const GLint* v) { fp_glM...
    function glMultiTexCoord1s (line 397) | inline void glMultiTexCoord1s(GLenum target, GLshort s) { fp_glMultiTe...
    function glMultiTexCoord1sv (line 398) | inline void glMultiTexCoord1sv(GLenum target, const GLshort* v) { fp_g...
    function glMultiTexCoord2d (line 399) | inline void glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t) {...
    function glMultiTexCoord2dv (line 400) | inline void glMultiTexCoord2dv(GLenum target, const GLdouble* v) { fp_...
    function glMultiTexCoord2f (line 401) | inline void glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t) { f...
    function glMultiTexCoord2fv (line 402) | inline void glMultiTexCoord2fv(GLenum target, const GLfloat* v) { fp_g...
    function glMultiTexCoord2i (line 403) | inline void glMultiTexCoord2i(GLenum target, GLint s, GLint t) { fp_gl...
    function glMultiTexCoord2iv (line 404) | inline void glMultiTexCoord2iv(GLenum target, const GLint* v) { fp_glM...
    function glMultiTexCoord2s (line 405) | inline void glMultiTexCoord2s(GLenum target, GLshort s, GLshort t) { f...
    function glMultiTexCoord2sv (line 406) | inline void glMultiTexCoord2sv(GLenum target, const GLshort* v) { fp_g...
    function glMultiTexCoord3d (line 407) | inline void glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, G...
    function glMultiTexCoord3dv (line 408) | inline void glMultiTexCoord3dv(GLenum target, const GLdouble* v) { fp_...
    function glMultiTexCoord3f (line 409) | inline void glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLf...
    function glMultiTexCoord3fv (line 410) | inline void glMultiTexCoord3fv(GLenum target, const GLfloat* v) { fp_g...
    function glMultiTexCoord3i (line 411) | inline void glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r...
    function glMultiTexCoord3iv (line 412) | inline void glMultiTexCoord3iv(GLenum target, const GLint* v) { fp_glM...
    function glMultiTexCoord3s (line 413) | inline void glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLs...
    function glMultiTexCoord3sv (line 414) | inline void glMultiTexCoord3sv(GLenum target, const GLshort* v) { fp_g...
    function glMultiTexCoord4d (line 415) | inline void glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, G...
    function glMultiTexCoord4dv (line 416) | inline void glMultiTexCoord4dv(GLenum target, const GLdouble* v) { fp_...
    function glMultiTexCoord4f (line 417) | inline void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLf...
    function glMultiTexCoord4fv (line 418) | inline void glMultiTexCoord4fv(GLenum target, const GLfloat* v) { fp_g...
    function glMultiTexCoord4i (line 419) | inline void glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r...
    function glMultiTexCoord4iv (line 420) | inline void glMultiTexCoord4iv(GLenum target, const GLint* v) { fp_glM...
    function glMultiTexCoord4s (line 421) | inline void glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLs...
    function glMultiTexCoord4sv (line 422) | inline void glMultiTexCoord4sv(GLenum target, const GLshort* v) { fp_g...
    function glLoadTransposeMatrixf (line 423) | inline void glLoadTransposeMatrixf(const GLfloat* m) { fp_glLoadTransp...
    function glLoadTransposeMatrixd (line 424) | inline void glLoadTransposeMatrixd(const GLdouble* m) { fp_glLoadTrans...
    function glMultTransposeMatrixf (line 425) | inline void glMultTransposeMatrixf(const GLfloat* m) { fp_glMultTransp...
    function glMultTransposeMatrixd (line 426) | inline void glMultTransposeMatrixd(const GLdouble* m) { fp_glMultTrans...
    function glBlendFuncSeparate (line 429) | inline void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, ...
    function glMultiDrawArrays (line 430) | inline void glMultiDrawArrays(GLenum mode, const GLint* first, const G...
    function glMultiDrawElements (line 431) | inline void glMultiDrawElements(GLenum mode, const GLsizei* count, GLe...
    function glPointParameterf (line 432) | inline void glPointParameterf(GLenum pname, GLfloat param) { fp_glPoin...
    function glPointParameterfv (line 433) | inline void glPointParameterfv(GLenum pname, const GLfloat* params) { ...
    function glPointParameteri (line 434) | inline void glPointParameteri(GLenum pname, GLint param) { fp_glPointP...
    function glPointParameteriv (line 435) | inline void glPointParameteriv(GLenum pname, const GLint* params) { fp...
    function glFogCoordf (line 436) | inline void glFogCoordf(GLfloat coord) { fp_glFogCoordf(coord); }
    function glFogCoordfv (line 437) | inline void glFogCoordfv(const GLfloat* coord) { fp_glFogCoordfv(coord...
    function glFogCoordd (line 438) | inline void glFogCoordd(GLdouble coord) { fp_glFogCoordd(coord); }
    function glFogCoorddv (line 439) | inline void glFogCoorddv(const GLdouble* coord) { fp_glFogCoorddv(coor...
    function glFogCoordPointer (line 440) | inline void glFogCoordPointer(GLenum type, GLsizei stride, const void*...
    function glSecondaryColor3b (line 441) | inline void glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue) ...
    function glSecondaryColor3bv (line 442) | inline void glSecondaryColor3bv(const GLbyte* v) { fp_glSecondaryColor...
    function glSecondaryColor3d (line 443) | inline void glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble ...
    function glSecondaryColor3dv (line 444) | inline void glSecondaryColor3dv(const GLdouble* v) { fp_glSecondaryCol...
    function glSecondaryColor3f (line 445) | inline void glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blu...
    function glSecondaryColor3fv (line 446) | inline void glSecondaryColor3fv(const GLfloat* v) { fp_glSecondaryColo...
    function glSecondaryColor3i (line 447) | inline void glSecondaryColor3i(GLint red, GLint green, GLint blue) { f...
    function glSecondaryColor3iv (line 448) | inline void glSecondaryColor3iv(const GLint* v) { fp_glSecondaryColor3...
    function glSecondaryColor3s (line 449) | inline void glSecondaryColor3s(GLshort red, GLshort green, GLshort blu...
    function glSecondaryColor3sv (line 450) | inline void glSecondaryColor3sv(const GLshort* v) { fp_glSecondaryColo...
    function glSecondaryColor3ub (line 451) | inline void glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte bl...
    function glSecondaryColor3ubv (line 452) | inline void glSecondaryColor3ubv(const GLubyte* v) { fp_glSecondaryCol...
    function glSecondaryColor3ui (line 453) | inline void glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue)...
    function glSecondaryColor3uiv (line 454) | inline void glSecondaryColor3uiv(const GLuint* v) { fp_glSecondaryColo...
    function glSecondaryColor3us (line 455) | inline void glSecondaryColor3us(GLushort red, GLushort green, GLushort...
    function glSecondaryColor3usv (line 456) | inline void glSecondaryColor3usv(const GLushort* v) { fp_glSecondaryCo...
    function glSecondaryColorPointer (line 457) | inline void glSecondaryColorPointer(GLint size, GLenum type, GLsizei s...
    function glWindowPos2d (line 458) | inline void glWindowPos2d(GLdouble x, GLdouble y) { fp_glWindowPos2d(x...
    function glWindowPos2dv (line 459) | inline void glWindowPos2dv(const GLdou
Copy disabled (too large) Download .json
Condensed preview — 1124 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (40,526K chars).
[
  {
    "path": ".gitattributes",
    "chars": 80,
    "preview": ".git* export-ignore\n.hg* export-ignore\n*.c diff=cpp\n*.cpp diff=cpp\n*.h diff=cpp\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 25464,
    "preview": "name: continuous-integration\non: [push, pull_request]\n\njobs:\n  Linux:\n    runs-on: ${{ matrix.runner }}\n    strategy:\n  "
  },
  {
    "path": ".gitignore",
    "chars": 1200,
    "preview": "# automake products\n/config.h\n/config.h.in\n/config.log\n/config.status\n/configure\n/configure-modules-post.ac\n/configure-m"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 68545,
    "preview": "#\r\n# Copyright (c) 2006-2026 LOVE Development Team\r\n#\r\n# This software is provided 'as-is', without any express or impli"
  },
  {
    "path": "changes.txt",
    "chars": 97012,
    "preview": "LOVE 12.0 [N/A]\n---------------\n\nReleased: N/A\n\n* Added support for launching a specific .lua file as the main file.\n* A"
  },
  {
    "path": "extra/cmake/FindHarfbuzz.cmake",
    "chars": 551,
    "preview": "# Sets the following variables:\n#\n#  HARFBUZZ_FOUND\n#  HARFBUZZ_INCLUDE_DIR\n#  HARFBUZZ_LIBRARY\n\nset(HARFBUZZ_SEARCH_PAT"
  },
  {
    "path": "extra/cmake/FindLuaJIT.cmake",
    "chars": 549,
    "preview": "# Sets the following variables:\n#\n# LUAJIT_FOUND\n# LUAJIT_INCLUDE_DIR\n# LUAJIT_LIBRARY\n\nset(LUAJIT_SEARCH_PATHS\n\t/usr/lo"
  },
  {
    "path": "extra/cmake/FindModPlug.cmake",
    "chars": 533,
    "preview": "# Sets the following variables:\n#\n# MODPLUG_FOUND\n# MODPLUG_INCLUDE_DIR\n# MODPLUG_LIBRARY\n\nset(MODPLUG_SEARCH_PATHS\n\t/us"
  },
  {
    "path": "extra/cmake/FindOgg.cmake",
    "chars": 466,
    "preview": "# Sets the following variables:\n#\n# OGG_FOUND\n# OGG_INCLUDE_DIR\n# OGG_LIBRARY\n\nset(OGG_SEARCH_PATHS\n\t/usr/local\n\t/usr\n\t)"
  },
  {
    "path": "extra/cmake/FindSDL2.cmake",
    "chars": 492,
    "preview": "# Sets the following variables:\n#\n#  SDL2_FOUND\n#  SDL2_INCLUDE_DIR\n#  SDL2_LIBRARY\n\nset(SDL2_SEARCH_PATHS\n\t/usr/local\n\t"
  },
  {
    "path": "extra/cmake/FindTheora.cmake",
    "chars": 632,
    "preview": "# Sets the following variables:\n#\n# THEORA_FOUND\n# THEORA_INCLUDE_DIR\n# THEORA_LIBRARY\n# THEORADEC_LIBRARY\n\nset(THEORA_S"
  },
  {
    "path": "extra/cmake/FindVorbis.cmake",
    "chars": 671,
    "preview": "# Sets the following variables:\n#\n# VORBIS_FOUND\n# VORBIS_INCLUDE_DIR\n# VORBIS_LIBRARY\n# VORBISFILE_LIBRARY\n\nset(VORBIS_"
  },
  {
    "path": "extra/cmake/LoveMacros.cmake",
    "chars": 1400,
    "preview": "\n# Group all related stuff in folders in Visual Studio\n\nfunction(love_group_projects)\n\tset(options NESTED)\n\tset(oneValue"
  },
  {
    "path": "extra/cmake/NSIS.template.in",
    "chars": 35660,
    "preview": "; CMake - Cross Platform Makefile Generator\n; Copyright 2000-2024 Kitware, Inc. and Contributors\n; All rights reserved."
  },
  {
    "path": "extra/resources/b64.lua",
    "chars": 239,
    "preview": "function b64(name)\n\tlocal i = io.popen(\"base64 \" .. name)\n\tlocal encoded = i:read(\"*a\")\n\ti:close()\n\n\tlocal output = (\"lo"
  },
  {
    "path": "license.txt",
    "chars": 74438,
    "preview": "Licensing information\r\n=====================\r\n\r\nThis distribution contains code from the following projects (full licens"
  },
  {
    "path": "platform/unix/debian/changelog.in",
    "chars": 163,
    "preview": "@LOVE_EXE_NAME@ (@LOVE_VERSION_STR@ppa1) focal; urgency=medium\n\n  * Upstream testing release\n\n -- Bart van Strien <bart."
  },
  {
    "path": "platform/unix/debian/compat",
    "chars": 2,
    "preview": "9\n"
  },
  {
    "path": "platform/unix/debian/control.in",
    "chars": 1412,
    "preview": "Source: @LOVE_EXE_NAME@\nSection: games\nPriority: extra\nMaintainer: Bart van Strien <bart.bes@gmail.com>\nBuild-Depends: d"
  },
  {
    "path": "platform/unix/debian/copyright",
    "chars": 1105,
    "preview": "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\r\nUpstream-Name: LÖVE\r\nUpstream-Contact: Bart v"
  },
  {
    "path": "platform/unix/debian/docs",
    "chars": 24,
    "preview": "changes.txt\nlicense.txt\n"
  },
  {
    "path": "platform/unix/debian/liblove-unstable0.docs",
    "chars": 10,
    "preview": "readme.md\n"
  },
  {
    "path": "platform/unix/debian/liblove-unstable0.install",
    "chars": 32,
    "preview": "usr/lib/*/liblove-unstable-*.so\n"
  },
  {
    "path": "platform/unix/debian/liblove0.docs",
    "chars": 10,
    "preview": "readme.md\n"
  },
  {
    "path": "platform/unix/debian/liblove0.install",
    "chars": 23,
    "preview": "usr/lib/*/liblove-*.so\n"
  },
  {
    "path": "platform/unix/debian/love-unstable.install",
    "chars": 22,
    "preview": "usr/bin/love-unstable\n"
  },
  {
    "path": "platform/unix/debian/love-unstable.manpages",
    "chars": 30,
    "preview": "platform/unix/love-unstable.6\n"
  },
  {
    "path": "platform/unix/debian/love.install",
    "chars": 80,
    "preview": "usr/bin\nusr/share/applications\nusr/share/mime\nusr/share/pixmaps\nusr/share/icons\n"
  },
  {
    "path": "platform/unix/debian/love.manpages",
    "chars": 21,
    "preview": "platform/unix/love.6\n"
  },
  {
    "path": "platform/unix/debian/rules.in",
    "chars": 467,
    "preview": "#!/usr/bin/make -f\n\n%:\n\tdh $@ --parallel\n\noverride_dh_auto_clean:\n\tdh_auto_clean\n\trm -f platform/unix/love-unstable.6\n\no"
  },
  {
    "path": "platform/unix/debian/source/format",
    "chars": 13,
    "preview": "3.0 (native)\n"
  },
  {
    "path": "platform/unix/love.6",
    "chars": 1838,
    "preview": ".\\\" (c) 2008-2011 Miriam Ruiz <little_miry@yahoo.es>\n.\\\" (c) 2013-2018 Bart van Strien <bart.bes@gmail.com>\n.\\\"\n.\\\" This"
  },
  {
    "path": "platform/unix/love.desktop.in",
    "chars": 237,
    "preview": "[Desktop Entry]\nName=LÖVE\nComment=The unquestionably awesome 2D game engine\nMimeType=application/x-love-game;\nExec=@CMAK"
  },
  {
    "path": "platform/unix/love.xml",
    "chars": 241,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">\n\t<mime-"
  },
  {
    "path": "platform/xcode/Images.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "platform/xcode/Images.xcassets/OS X AppIcon.appiconset/Contents.json",
    "chars": 1201,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"16x16\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"16.png\",\n      \"scale\" : \"1x\"\n"
  },
  {
    "path": "platform/xcode/Images.xcassets/iOS AppIcon.appiconset/Contents.json",
    "chars": 2140,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "platform/xcode/ios/Launch Screen.xib",
    "chars": 1244,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" versi"
  },
  {
    "path": "platform/xcode/ios/love-ios.plist",
    "chars": 2883,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "platform/xcode/liblove.xcodeproj/project.pbxproj",
    "chars": 529678,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 52;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "platform/xcode/liblove.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 152,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:liblove.xcodepr"
  },
  {
    "path": "platform/xcode/love.entitlements",
    "chars": 446,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "platform/xcode/love.xcodeproj/default.pbxuser",
    "chars": 29814,
    "preview": "// !$*UTF8*$!\n{\n\t29B97313FDCFA39411CA2CEA /* Project object */ = {\n\t\tactiveArchitecturePreference = ppc;\n\t\tactiveBuildCo"
  },
  {
    "path": "platform/xcode/love.xcodeproj/project.pbxproj",
    "chars": 45928,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 52;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "platform/xcode/love.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 149,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:love.xcodeproj\""
  },
  {
    "path": "platform/xcode/love.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "platform/xcode/love.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "chars": 181,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "platform/xcode/macosx/liblove-macosx.plist",
    "chars": 776,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "platform/xcode/macosx/love-macosx.plist",
    "chars": 2912,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "platform/xcode/macosx/macos-copy-app.plist",
    "chars": 242,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "readme-iOS.rtf",
    "chars": 7068,
    "preview": "{\\rtf1\\ansi\\ansicpg1252\\cocoartf2818\n\\cocoatextscaling0\\cocoaplatform0{\\fonttbl\\f0\\fswiss\\fcharset0 Helvetica-Bold;\\f1\\f"
  },
  {
    "path": "readme.md",
    "chars": 5187,
    "preview": "LÖVE is an *awesome* framework you can use to make 2D games in Lua. It's free, open-source, and works on Windows, macOS,"
  },
  {
    "path": "src/.editorconfig",
    "chars": 856,
    "preview": "# Loosely based on https://love2d.org/wiki/Code_Style and other existing code.\n# Ref: https://learn.microsoft.com/en-us/"
  },
  {
    "path": "src/common/Color.h",
    "chars": 3312,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Data.cpp",
    "chars": 1306,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Data.h",
    "chars": 1895,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/EnumMap.h",
    "chars": 2084,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Exception.cpp",
    "chars": 2006,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Exception.h",
    "chars": 1769,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Matrix.cpp",
    "chars": 15577,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Matrix.h",
    "chars": 10856,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Module.cpp",
    "chars": 3294,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Module.h",
    "chars": 2709,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Object.cpp",
    "chars": 1557,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Object.h",
    "chars": 3498,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Optional.h",
    "chars": 1522,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Range.h",
    "chars": 2231,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Reference.cpp",
    "chars": 2115,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Reference.h",
    "chars": 2117,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Stream.cpp",
    "chars": 2102,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Stream.h",
    "chars": 2753,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/StringMap.cpp",
    "chars": 1007,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/StringMap.h",
    "chars": 4987,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Variant.cpp",
    "chars": 3186,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Variant.h",
    "chars": 2587,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Vector.cpp",
    "chars": 993,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/Vector.h",
    "chars": 9423,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/android.cpp",
    "chars": 21033,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/android.h",
    "chars": 3053,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/apple.h",
    "chars": 1389,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/apple.mm",
    "chars": 2069,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/b64.cpp",
    "chars": 3947,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/b64.h",
    "chars": 1859,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/config.h",
    "chars": 4801,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/delay.cpp",
    "chars": 1201,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/delay.h",
    "chars": 1041,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/deprecation.cpp",
    "chars": 5317,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/deprecation.h",
    "chars": 2080,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/floattypes.cpp",
    "chars": 6537,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/floattypes.h",
    "chars": 1261,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/int.h",
    "chars": 2179,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/ios.h",
    "chars": 2020,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/ios.mm",
    "chars": 13275,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/macos.h",
    "chars": 1987,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/macos.mm",
    "chars": 3484,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/math.h",
    "chars": 2606,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/memory.cpp",
    "chars": 1866,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/memory.h",
    "chars": 1199,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/pixelformat.cpp",
    "chars": 24180,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/pixelformat.h",
    "chars": 7365,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/runtime.cpp",
    "chars": 29164,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/runtime.h",
    "chars": 22162,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/types.cpp",
    "chars": 1808,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/types.h",
    "chars": 1696,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/utf8.cpp",
    "chars": 2050,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/utf8.h",
    "chars": 1681,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/common/version.h",
    "chars": 1354,
    "preview": "/**\n * Copyright (c) 2006-2026 LOVE Development Team\n *\n * This software is provided 'as-is', without any express or imp"
  },
  {
    "path": "src/libraries/.editorconfig",
    "chars": 72,
    "preview": "# Don't enforce any styles here, it's all third party code.\nroot = true\n"
  },
  {
    "path": "src/libraries/Wuff/wuff.c",
    "chars": 5402,
    "preview": "#include <string.h>\n\n#include \"wuff_config.h\"\n#include \"wuff.h\"\n#include \"wuff_internal.h\"\n\n\nwuff_sint32 wuff_open(struc"
  },
  {
    "path": "src/libraries/Wuff/wuff.h",
    "chars": 9018,
    "preview": "/*\n *\tWuff - A very basic WAVE reader\n */\n\n#ifndef WUFF_H\n#define WUFF_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n#defi"
  },
  {
    "path": "src/libraries/Wuff/wuff_config.h",
    "chars": 952,
    "preview": "#ifndef WUFF_CONFIG_H\n#define WUFF_CONFIG_H\n\n/* Defines that the internal code is being built. */\n/* The wuff.h header u"
  },
  {
    "path": "src/libraries/Wuff/wuff_convert.c",
    "chars": 13899,
    "preview": "#include <string.h>\n\n#include \"wuff_config.h\"\n#include \"wuff.h\"\n#include \"wuff_convert.h\"\n\n/*\n * int8 functions.\n */\n\nWU"
  },
  {
    "path": "src/libraries/Wuff/wuff_convert.h",
    "chars": 1610,
    "preview": "#ifndef WUFF_CONVERT_H\n#define WUFF_CONVERT_H\n\n#define WUFF_CONV_FUNC(name) WUFF_INTERN_API void name(wuff_uint8 * dst, "
  },
  {
    "path": "src/libraries/Wuff/wuff_internal.c",
    "chars": 15018,
    "preview": "#include <stdlib.h>\n#include <string.h>\n\n#include \"wuff_config.h\"\n#include \"wuff.h\"\n#include \"wuff_internal.h\"\n#include "
  },
  {
    "path": "src/libraries/Wuff/wuff_internal.h",
    "chars": 5080,
    "preview": "#ifndef WUFF_INTERNAL_H\n#define WUFF_INTERNAL_H\n\n#define WUFF_BUFFER_MIN_SIZE\t\t4096\n#define WUFF_BUFFER_MAX_SIZE\t\t209715"
  },
  {
    "path": "src/libraries/Wuff/wuff_memory.c",
    "chars": 285,
    "preview": "#include <stdlib.h>\n\n#include \"wuff_config.h\"\n\n/* Default memory allocators. */\n/* They can be overridden with custom fu"
  },
  {
    "path": "src/libraries/box2d/Box2D.h",
    "chars": 1923,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/README.MODIFIED",
    "chars": 103,
    "preview": "PLEASE NOTE, this version of Box2D is NOT original, it has been MODIFIED by the LÖVE Development Team.\n"
  },
  {
    "path": "src/libraries/box2d/b2_api.h",
    "chars": 1727,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_block_allocator.h",
    "chars": 1944,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_body.h",
    "chars": 23406,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_broad_phase.h",
    "chars": 6646,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_chain_shape.h",
    "chars": 3545,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_circle_shape.h",
    "chars": 2217,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_collision.h",
    "chars": 9398,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_common.h",
    "chars": 5101,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_contact.h",
    "chars": 10454,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_contact_manager.h",
    "chars": 1758,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_distance.h",
    "chars": 4843,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_distance_joint.h",
    "chars": 5215,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_draw.h",
    "chars": 3213,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_dynamic_tree.h",
    "chars": 8192,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_edge_shape.h",
    "chars": 3073,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_fixture.h",
    "chars": 10015,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_friction_joint.h",
    "chars": 3561,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_gear_joint.h",
    "chars": 3785,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_growable_stack.h",
    "chars": 2154,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_joint.h",
    "chars": 6093,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_math.h",
    "chars": 16502,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_motor_joint.h",
    "chars": 3948,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_mouse_joint.h",
    "chars": 4011,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_polygon_shape.h",
    "chars": 3579,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_prismatic_joint.h",
    "chars": 6206,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_pulley_joint.h",
    "chars": 4709,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_revolute_joint.h",
    "chars": 6392,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_rope.h",
    "chars": 3259,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_settings.h",
    "chars": 3242,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_shape.h",
    "chars": 3829,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_stack_allocator.h",
    "chars": 1915,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_time_of_impact.h",
    "chars": 2096,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_time_step.h",
    "chars": 1973,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_timer.h",
    "chars": 1701,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_types.h",
    "chars": 1335,
    "preview": "// MIT License\n\n// Copyright (c) 2020 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_weld_joint.h",
    "chars": 4104,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_wheel_joint.h",
    "chars": 6754,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_world.h",
    "chars": 10826,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/b2_world_callbacks.h",
    "chars": 6168,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_broad_phase.cpp",
    "chars": 3515,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_chain_shape.cpp",
    "chars": 4727,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_circle_shape.cpp",
    "chars": 3291,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_collide_circle.cpp",
    "chars": 4500,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_collide_edge.cpp",
    "chars": 12223,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_collide_polygon.cpp",
    "chars": 6731,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_collision.cpp",
    "chars": 6621,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_distance.cpp",
    "chars": 16654,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_dynamic_tree.cpp",
    "chars": 17791,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_edge_shape.cpp",
    "chars": 3848,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_polygon_shape.cpp",
    "chars": 10560,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/collision/b2_time_of_impact.cpp",
    "chars": 11801,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/common/b2_block_allocator.cpp",
    "chars": 5320,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/common/b2_draw.cpp",
    "chars": 1440,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/common/b2_math.cpp",
    "chars": 2918,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/common/b2_settings.cpp",
    "chars": 2139,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/common/b2_stack_allocator.cpp",
    "chars": 2262,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/common/b2_timer.cpp",
    "chars": 2964,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_body.cpp",
    "chars": 12417,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_chain_circle_contact.cpp",
    "chars": 2433,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_chain_circle_contact.h",
    "chars": 1752,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_chain_polygon_contact.cpp",
    "chars": 2448,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_chain_polygon_contact.h",
    "chars": 1757,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_circle_contact.cpp",
    "chars": 2225,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_circle_contact.h",
    "chars": 1680,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_contact.cpp",
    "chars": 7507,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_contact_manager.cpp",
    "chars": 7116,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_contact_solver.cpp",
    "chars": 23070,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_contact_solver.h",
    "chars": 2615,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_distance_joint.cpp",
    "chars": 11203,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_edge_circle_contact.cpp",
    "chars": 2207,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_edge_circle_contact.h",
    "chars": 1719,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_edge_polygon_contact.cpp",
    "chars": 2221,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_edge_polygon_contact.h",
    "chars": 1724,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_fixture.cpp",
    "chars": 8250,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_friction_joint.cpp",
    "chars": 7030,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_gear_joint.cpp",
    "chars": 11867,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_island.cpp",
    "chars": 16687,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_island.h",
    "chars": 2645,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_joint.cpp",
    "chars": 7091,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_motor_joint.cpp",
    "chars": 8243,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_mouse_joint.cpp",
    "chars": 4903,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "src/libraries/box2d/dynamics/b2_polygon_circle_contact.cpp",
    "chars": 2249,
    "preview": "// MIT License\n\n// Copyright (c) 2019 Erin Catto\n\n// Permission is hereby granted, free of charge, to any person obtaini"
  }
]

// ... and 924 more files (download for full content)

About this extraction

This page contains the full source code of the love2d/love GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1124 files (37.3 MB), approximately 9.8M tokens, and a symbol index with 29837 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!