diff --git a/jni/love/CMakeLists.txt b/jni/love/CMakeLists.txt old mode 100644 new mode 100755 index ea8ea07f..38d2e718 --- a/jni/love/CMakeLists.txt +++ b/jni/love/CMakeLists.txt @@ -23,20 +23,23 @@ if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR}) message(FATAL_ERROR "Prevented in-tree build.") endif() -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.1) project(love) -if(NOT MEGA) - message(FATAL_ERROR " -It is currently only possible to build with megasource on Windows. -Please see http://bitbucket.org/rude/megasource -") -endif() - set(LOVE_EXE_NAME love) set(LOVE_LIB_NAME liblove) +set(CMAKE_MODULE_PATH "${love_SOURCE_DIR}/extra/cmake" ${CMAKE_MODULE_PATH}) +# Needed for shared libs on Linux. (-fPIC). +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) + +set (CMAKE_CXX_STANDARD 11) + +if(MSVC) + set(LOVE_CONSOLE_EXE_NAME lovec) +endif() + if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(LOVE_X64 TRUE) set(LOVE_TARGET_PLATFORM x64) @@ -49,6 +52,9 @@ option(LOVE_JIT "Use LuaJIT" TRUE) option(LOVE_MPG123 "Use mpg123" TRUE) if(LOVE_JIT) + if(APPLE) + message(FATAL_ERROR "JIT not supported yet on Mac. Please use -DLOVE_JIT=0.") + endif() message(STATUS "LuaJIT: Enabled") else() message(STATUS "LuaJIT: Disabled") @@ -62,17 +68,186 @@ message(STATUS "Target platform: ${LOVE_TARGET_PLATFORM}") find_package(OpenGL) -if(${LOVE_JIT}) - set(MEGA_LUA ${MEGA_LUAJIT_LIB}) - set(MEGA_EXTRA_INCLUDE ${MEGA_LUAJIT_INCLUDE}) - set(MEGA_EXTRA_DLLS ${MEGA_LUAJIT_DLL}) - set(MEGA_EXTRA_DEPENDECIES luajit) +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}) + + # LOVE_INCLUDE_DIRS contains the search directories for #include. It's mostly + # not needed for MEGA builds, since almost all the libraries (except LuaJIT) + # are CMake targets, causing include paths to be added automatically. + set(LOVE_INCLUDE_DIRS) + + if(APPLE) + # Some files do #include , but building with megasource + # requires #include . + add_definitions(-DLOVE_MACOSX_SDL_DIRECT_INCLUDE) + endif () + + # SDL2 links with some DirectX libraries, and we apparently also + # pull those libraries in for linkage because we link with SDL2. + set(LOVE_LINK_DIRS ${SDL_LINK_DIR}) + + set(LOVE_LINK_LIBRARIES + ${OPENGL_gl_LIBRARY} + ${MEGA_FREETYPE} + ${MEGA_LIBOGG} + ${MEGA_LIBVORBISFILE} + ${MEGA_LIBVORBIS} + ${MEGA_LIBTHEORA} + ${MEGA_MODPLUG} + ${MEGA_OPENAL} + ${MEGA_PHYSFS} + ${MEGA_SDL2MAIN} + ${MEGA_SDL2} + ${MEGA_ZLIB} + ) + + # 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_SDL2} + ${MEGA_OPENAL} + ) + + if(LOVE_MPG123) + set(LOVE_LINK_LIBRARIES + ${LOVE_LINK_LIBRARIES} + ${MEGA_MPEG123} + ) + set(LOVE_MOVE_DLLS + ${LOVE_MOVE_DLLS} + ${MEGA_MPEG123} + ) + endif() + + if(LOVE_JIT) + set(LOVE_LUA_LIBRARY ${MEGA_LUAJIT_LIB}) + # 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. + set(LOVE_EXTRA_DLLS ${MEGA_LUAJIT_DLL}) + set(LOVE_EXTRA_DEPENDECIES luajit) + + set(LOVE_INCLUDE_DIRS + ${LOVE_INCLUDE_DIRS} + ${MEGA_LUAJIT_INCLUDE} + ) + set(LOVE_LINK_LIBRARIES + ${LOVE_LINK_LIBRARIES} + ${LOVE_LUA_LIBRARY} + ) + set(LOVE_MOVE_DLLS + ${LOVE_MOVE_DLLS} + ${MEGA_LUAJIT_DLL} + ) + else() + set(LOVE_LUA_LIBRARY ${MEGA_LUA51}) + + set(LOVE_LINK_LIBRARIES + ${LOVE_LINK_LIBRARIES} + ${LOVE_LUA_LIBRARY} + ) + set(LOVE_MOVE_DLLS + ${LOVE_MOVE_DLLS} + ${LOVE_LUA_LIBRARY} + ) + # MEGA_LUA51 is a CMake target, so includes are handled + # automatically. + endif() else() - set(MEGA_LUA ${MEGA_LUA51}) - # MEGA_LUA51 is a CMake target, so includes are handled - # automatically. + if(MSVC) + message(FATAL_ERROR " +It is currently only possible to build with megasource on Windows. +Please see http://bitbucket.org/rude/megasource +") + endif() + + find_package(Freetype REQUIRED) + find_package(ModPlug REQUIRED) + find_package(OpenAL REQUIRED) + find_package(OpenGL REQUIRED) + find_package(PhysFS REQUIRED) + find_package(SDL2 REQUIRED) + find_package(Theora REQUIRED) + find_package(Vorbis REQUIRED) + + # required for enet + add_definitions(-D HAS_SOCKLEN_T) + + set(LOVE_INCLUDE_DIRS + ${SDL2_INCLUDE_DIR} + ${PHYSFS_INCLUDE_DIR} + ${FREETYPE_INCLUDE_DIRS} + ${VORBIS_INCLUDE_DIR} + ) + + set(LOVE_LINK_LIBRARIES + ${OPENGL_gl_LIBRARY} + ${SDL2_LIBRARY} + ${FREETYPE_LIBRARY} + ${OPENAL_LIBRARY} + ${MODPLUG_LIBRARY} + ${PHYSFS_LIBRARY} + ${THEORA_LIBRARY} + ${THEORADEC_LIBRARY} + ${VORBISFILE_LIBRARY} + ${LOVE_LUA_LIBRARY} + ) + + if(LOVE_MPG123) + find_package(MPG123 REQUIRED) + set(LOVE_LINK_LIBRARIES + ${LOVE_LINK_LIBRARIES} + ${MPG123_LIBRARY} + ) + endif() + + if(LOVE_JIT) + find_package(LuaJIT REQUIRED) + set(LOVE_LUA_LIBRARY ${LUAJIT_LIBRARY}) + set(LOVE_LUA_INCLUDE_DIR ${LUAJIT_INCLUDE_DIR}) + else() + find_package(Lua51 REQUIRED) + set(LOVE_LUA_LIBRARY ${LUA_LIBRARY}) + set(LOVE_LUA_INCLUDE_DIR ${LUA_INCLUDE_DIR}) + endif() + + set(LOVE_INCLUDE_DIRS + ${LOVE_INCLUDE_DIRS} + ${LOVE_LUA_INCLUDE_DIR} + ) + set(LOVE_LINK_LIBRARIES + ${LOVE_LINK_LIBRARIES} + ${LOVE_LUA_LIBRARY} + ) + 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) + get_target_property(OLD_FLAGS ${ARG_TARGET} COMPILE_FLAGS) + set(NEW_FLAGS ${DISABLE_WARNING_FLAG}) + if(OLD_FLAGS) + set(NEW_FLAGS "${OLD_FLAGS} ${NEW_FLAGS}") + endif() + set_target_properties(${ARG_TARGET} PROPERTIES COMPILE_FLAGS ${NEW_FLAGS}) +endfunction() + # # common # @@ -115,6 +290,12 @@ set(LOVE_SRC_COMMON src/common/wrap_Data.h ) +if (APPLE) + set(LOVE_SRC_COMMON ${LOVE_SRC_COMMON} + src/common/macosx.mm + ) +endif() + source_group("common" FILES ${LOVE_SRC_COMMON}) # @@ -1024,7 +1205,7 @@ set(LOVE_SRC_3P_ENET ) add_library(love_3p_enet ${LOVE_SRC_3P_ENET}) -target_link_libraries(love_3p_enet ${MEGA_LUA}) +target_link_libraries(love_3p_enet ${LOVE_LUA_LIBRARY}) target_include_directories(love_3p_enet PUBLIC src/libraries/enet/libenet/include) # @@ -1102,6 +1283,12 @@ if(MSVC) src/libraries/luasocket/libluasocket/wsocket.c src/libraries/luasocket/libluasocket/wsocket.h ) +else() + set(LOVE_SRC_3P_LUASOCKET_LIBLUASOCKET + ${LOVE_SRC_3P_LUASOCKET_LIBLUASOCKET} + src/libraries/luasocket/libluasocket/usocket.c + src/libraries/luasocket/libluasocket/usocket.h + ) endif() set(LOVE_SRC_3P_LUASOCKET @@ -1110,7 +1297,7 @@ set(LOVE_SRC_3P_LUASOCKET ) add_library(love_3p_luasocket ${LOVE_SRC_3P_LUASOCKET}) -target_link_libraries(love_3p_luasocket ${MEGA_LUA}) +target_link_libraries(love_3p_luasocket ${LOVE_LUA_LIBRARY}) # # Lua 5.3's UTF-8 library @@ -1123,7 +1310,7 @@ set(LOVE_SRC_3P_LUAUTF8 ) add_library(love_3p_luautf8 ${LOVE_SRC_3P_LUAUTF8}) -target_link_libraries(love_3p_luautf8 ${MEGA_LUA}) +target_link_libraries(love_3p_luautf8 ${LOVE_LUA_LIBRARY}) # # lz4 @@ -1211,7 +1398,7 @@ set(LOVE_3P love_3p_wuff ) -disable_warnings(love_3p_box2d love_3p_enet love_3p_luasocket) +love_disable_warnings(love_3p_box2d love_3p_enet love_3p_luasocket) # # liblove @@ -1244,40 +1431,10 @@ include_directories( src src/libraries src/modules - ${MEGA_EXTRA_INCLUDE} + ${LOVE_INCLUDE_DIRS} ) -# SDL2 links with some DirectX libraries, and we apparently also -# pull those libraries in for linkage because we link with SDL2. -link_directories(${SDL_LINK_DIR}) - -set(LOVE_MEGA_3P - ${MEGA_FREETYPE} - ${MEGA_LIBOGG} - ${MEGA_LIBVORBISFILE} - ${MEGA_LIBVORBIS} - ${MEGA_LIBTHEORA} - ${MEGA_LUA} - ${MEGA_MODPLUG} - ${MEGA_OPENAL} - ${MEGA_PHYSFS} - ${MEGA_SDL2MAIN} - ${MEGA_SDL2} - ${MEGA_ZLIB} -) - -if(LOVE_MPG123) - set(LOVE_MEGA_3P - ${LOVE_MEGA_3P} - ${MEGA_MPEG123} - ) -endif() - - -set(LOVE_LINK_LIBRARIES - ${OPENGL_gl_LIBRARY} - ${LOVE_MEGA_3P} -) +link_directories(${LOVE_LINK_DIRS}) set(LOVE_RC) @@ -1294,10 +1451,10 @@ if(MSVC) endif() add_library(${LOVE_LIB_NAME} SHARED ${LOVE_LIB_SRC} ${LOVE_RC}) -target_link_libraries(liblove ${LOVE_LINK_LIBRARIES} ${LOVE_3P}) +target_link_libraries(${LOVE_LIB_NAME} ${LOVE_LINK_LIBRARIES} ${LOVE_3P}) -if(MEGA_EXTRA_DEPENDECIES) - add_dependencies(${LOVE_LIB_NAME} ${MEGA_EXTRA_DEPENDECIES}) +if(LOVE_EXTRA_DEPENDECIES) + add_dependencies(${LOVE_LIB_NAME} ${LOVE_EXTRA_DEPENDECIES}) endif() if(MSVC) @@ -1309,21 +1466,38 @@ endif() # love (executable) # add_executable(${LOVE_EXE_NAME} WIN32 src/love.cpp ${LOVE_RC}) -target_link_libraries(love liblove) +target_link_libraries(${LOVE_EXE_NAME} ${LOVE_LIB_NAME}) + +if(MSVC) + add_executable(${LOVE_CONSOLE_EXE_NAME} src/love.cpp ${LOVE_RC}) + target_link_libraries(${LOVE_CONSOLE_EXE_NAME} ${LOVE_LIB_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 + $ + ${CMAKE_CURRENT_BINARY_DIR}/$/$) + 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}/$/${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_MPG123) - add_move_dll(love ${MEGA_MPEG123}) +if(LOVE_MOVE_DLLS) + foreach(DLL ${LOVE_MOVE_DLLS}) + post_step_move_dll(love ${DLL}) + endforeach() endif() -add_move_dll(love ${MEGA_SDL2}) -add_move_dll(love ${MEGA_OPENAL}) - -if(LOVE_JIT) - add_move_file(love ${MEGA_LUAJIT_DLL}) -else() - add_move_dll(love ${MEGA_LUA51}) +if (NOT MSVC) + return() endif() ################################### @@ -1351,24 +1525,24 @@ message(STATUS "Version: ${LOVE_VERSION_STR}") ################################### # CPack ################################### -install(TARGETS love ${LOVE_LIB_NAME} RUNTIME DESTINATION .) +install(TARGETS ${LOVE_EXE_NAME} ${LOVE_CONSOLE_EXE_NAME} ${LOVE_LIB_NAME} RUNTIME DESTINATION .) # Extra DLLs. -if(MEGA_EXTRA_DLLS) - foreach(DLL ${MEGA_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 ${MEGA_EXTRA_DLLS} DESTINATION .) + install(FILES ${LOVE_EXTRA_DLLS} DESTINATION .) endif() # Dynamic runtime libs. -if(MEGA_MSVC_DLLS) - foreach(DLL ${MEGA_MSVC_DLLS}) +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 ${MEGA_MSVC_DLLS} DESTINATION .) + install(FILES ${LOVE_MSVC_DLLS} DESTINATION .) endif() # Copy a text file from CMAKE_CURRENT_SOURCE_DIR to CMAKE_CURRENT_BINARY_DIR. @@ -1404,12 +1578,12 @@ 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;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_PACKAGE_NAME "LÖVE") set(CPACK_NSIS_DISPLAY_NAME "LOVE ${LOVE_VERSION_STR}") set(CPACK_NSIS_MODIFY_PATH OFF) @@ -1430,7 +1604,7 @@ 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_WELCOMEPAGE_TITLE \\\"LÖVE ${LOVE_VERSION_STR} Setup\\\" !define MUI_WELCOMEFINISHPAGE_BITMAP \\\"${NSIS_LEFT_BMP}\\\" !define MUI_HEADERIMAGE_BITMAP \\\"${NSIS_TOP_BMP}\\\" !define MUI_ICON \\\"${NSIS_MUI_ICON}\\\" diff --git a/jni/love/bitbucket-pipelines.yml b/jni/love/bitbucket-pipelines.yml new file mode 100644 index 00000000..bb506983 --- /dev/null +++ b/jni/love/bitbucket-pipelines.yml @@ -0,0 +1,7 @@ +image: mfcula/love-cmake:v1 +pipelines: + default: + - step: + script: + - cmake -G"Ninja" -H. -Bout + - ninja -C out \ No newline at end of file diff --git a/jni/love/changes.txt b/jni/love/changes.txt index d686553d..66a501d4 100644 --- a/jni/love/changes.txt +++ b/jni/love/changes.txt @@ -1,3 +1,57 @@ +LOVE 0.10.2 [Super Toast] +------------------------- + +Released: N/A + + * 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] ------------------------- diff --git a/jni/love/extra/appveyor/appveyor.yml b/jni/love/extra/appveyor/appveyor.yml new file mode 100644 index 00000000..e827408f --- /dev/null +++ b/jni/love/extra/appveyor/appveyor.yml @@ -0,0 +1,42 @@ +version: 0.10.2.{build} + +image: Visual Studio 2013 + +shallow_clone: true + +init: +# Make VS 2013 command line tools available +- call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" %platform% + +install: +# We need to install NSIS to create the packaged installer executable. +- choco install nsis-unicode -y + +# Move all woking directory items except `appveyor.yml` to `love` subdirectory. +- md love +- for /D %%i in (*) do @if "%%i" NEQ "love" @move %%i love\%%i +- for %%i in (*) do @if "%%i" NEQ "appveyor.yml" @move %%i love\%%i +# clone megasource and move into top directory. +- hg clone https://bitbucket.org/rude/megasource megasource +- cd megasource +- for /D %%i in (*) do @move %%i ..\%%i +- for %%i in (*) do @move %%i ..\%%i +- cd .. +# move love source to megasource's libs\love. +- move love libs\love + +before_build: +- cmake -G "Visual Studio 12" -H. -Bbuild + +build_script: +- cmake --build build --target PACKAGE --config Release + +after_build: + +before_test: + +test_script: + +artifacts: +- path: build\*.zip +- path: build\*.exe diff --git a/jni/love/extra/cmake/FindLuaJIT.cmake b/jni/love/extra/cmake/FindLuaJIT.cmake new file mode 100644 index 00000000..a4841019 --- /dev/null +++ b/jni/love/extra/cmake/FindLuaJIT.cmake @@ -0,0 +1,25 @@ +# 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 + 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) diff --git a/jni/love/extra/cmake/FindMPG123.cmake b/jni/love/extra/cmake/FindMPG123.cmake new file mode 100644 index 00000000..6cda993b --- /dev/null +++ b/jni/love/extra/cmake/FindMPG123.cmake @@ -0,0 +1,25 @@ +# Sets the following variables: +# +# MPG123_FOUND +# MPG123_INCLUDE_DIR +# MPG123_LIBRARY + +set(MPG123_SEARCH_PATHS + /usr/local + /usr + ) + +find_path(MPG123_INCLUDE_DIR + NAMES mpg123.h + PATH_SUFFIXES include + PATHS ${MPG123_SEARCH_PATHS}) + +find_library(MPG123_LIBRARY + NAMES mpg123 + PATH_SUFFIXES lib + PATHS ${MPG123_SEARCH_PATHS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MPG123 DEFAULT_MSG MPG123_LIBRARY MPG123_INCLUDE_DIR) + +mark_as_advanced(MPG123_INCLUDE_DIR MPG123_LIBRARY) diff --git a/jni/love/extra/cmake/FindModPlug.cmake b/jni/love/extra/cmake/FindModPlug.cmake new file mode 100644 index 00000000..16641d3b --- /dev/null +++ b/jni/love/extra/cmake/FindModPlug.cmake @@ -0,0 +1,25 @@ +# 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) diff --git a/jni/love/extra/cmake/FindSDL2.cmake b/jni/love/extra/cmake/FindSDL2.cmake new file mode 100644 index 00000000..81de07ff --- /dev/null +++ b/jni/love/extra/cmake/FindSDL2.cmake @@ -0,0 +1,25 @@ +# 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) diff --git a/jni/love/extra/cmake/FindTheora.cmake b/jni/love/extra/cmake/FindTheora.cmake new file mode 100644 index 00000000..4a3804a5 --- /dev/null +++ b/jni/love/extra/cmake/FindTheora.cmake @@ -0,0 +1,31 @@ +# 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) diff --git a/jni/love/extra/cmake/FindVorbis.cmake b/jni/love/extra/cmake/FindVorbis.cmake new file mode 100644 index 00000000..6a263a4c --- /dev/null +++ b/jni/love/extra/cmake/FindVorbis.cmake @@ -0,0 +1,30 @@ +# 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) diff --git a/jni/love/extra/nsis/game.ico b/jni/love/extra/nsis/game.ico index 3a010343..ecc5c0d3 100644 Binary files a/jni/love/extra/nsis/game.ico and b/jni/love/extra/nsis/game.ico differ diff --git a/jni/love/extra/nsis/left.bmp b/jni/love/extra/nsis/left.bmp index 227e6a05..91d5e3a3 100644 Binary files a/jni/love/extra/nsis/left.bmp and b/jni/love/extra/nsis/left.bmp differ diff --git a/jni/love/extra/nsis/love.ico b/jni/love/extra/nsis/love.ico index 73403aed..b703c98b 100644 Binary files a/jni/love/extra/nsis/love.ico and b/jni/love/extra/nsis/love.ico differ diff --git a/jni/love/extra/nsis/top.bmp b/jni/love/extra/nsis/top.bmp index 99d179ae..bec3e05f 100644 Binary files a/jni/love/extra/nsis/top.bmp and b/jni/love/extra/nsis/top.bmp differ diff --git a/jni/love/extra/windows/love.ico b/jni/love/extra/windows/love.ico index 73403aed..b703c98b 100644 Binary files a/jni/love/extra/windows/love.ico and b/jni/love/extra/windows/love.ico differ diff --git a/jni/love/extra/windows/love.rc b/jni/love/extra/windows/love.rc index 8493de94..72ed2661 100644 Binary files a/jni/love/extra/windows/love.rc and b/jni/love/extra/windows/love.rc differ diff --git a/jni/love/platform/unix/Makefile.am b/jni/love/platform/unix/Makefile.am index 5bde8860..f54a08e9 100644 --- a/jni/love/platform/unix/Makefile.am +++ b/jni/love/platform/unix/Makefile.am @@ -2,7 +2,7 @@ ACLOCAL_AMFLAGS = -I platform/unix/m4 SUBDIRS = src EXTRA_DIST = changes.txt license.txt readme.md \ platform/unix/love.desktop.in -dist_man1_MANS = platform/unix/love.1 +dist_man1_MANS = platform/unix/love.6 applicationsdir=$(datarootdir)/applications mimeinfodir=$(datarootdir)/mime/packages diff --git a/jni/love/platform/unix/application-x-love-game.svg b/jni/love/platform/unix/application-x-love-game.svg index 19c62362..a01da96f 100644 --- a/jni/love/platform/unix/application-x-love-game.svg +++ b/jni/love/platform/unix/application-x-love-game.svg @@ -1,1024 +1,793 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/jni/love/platform/unix/configure.ac b/jni/love/platform/unix/configure.ac index 1253119a..ddfa8345 100644 --- a/jni/love/platform/unix/configure.ac +++ b/jni/love/platform/unix/configure.ac @@ -7,34 +7,26 @@ AM_INIT_AUTOMAKE([foreign -Wall foreign tar-ustar silent-rules]) AM_SILENT_RULES AC_PREFIX_DEFAULT([/usr]) m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) -AC_PROG_LIBTOOL +LT_INIT([disable-static]) AC_PROG_CC AC_PROG_CXX AC_PROG_SED AC_PROG_MKDIR_P AC_PROG_OBJCXX +PKG_PROG_PKG_CONFIG AC_C_BIGENDIAN AC_LANG([C++]) -includes= +dnl Workaround for old aclocal versions +m4_include([platform/unix/cpp11.m4]) -AC_DEFUN([ACLOVE_CXX_FLAG_TEST], # WARNING: NOT REENTRANT - [aclove_cxx_flag_test_save_cflags="$CXXFLAGS" - CXXFLAGS="$1" - AC_MSG_CHECKING([whether $CXX supports flag $1]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], - [AC_MSG_RESULT([yes])]; $2, - [AC_MSG_RESULT([no]); $3]) - CXXFLAGS="$aclove_cxx_flag_test_save_cflags"]) +includes= AC_DEFUN([LOVE_MSG_ERROR], [AC_MSG_ERROR([LÖVE needs "$1"[,] please install "$1" with development files and try again])]) -# C++11 support -cxx11name="no" -ACLOVE_CXX_FLAG_TEST([-std=c++0x], cxx11name="c++0x", []) -ACLOVE_CXX_FLAG_TEST([-std=c++11], cxx11name="c++11", []) -AS_VAR_IF([cxx11name], [no], AC_MSG_ERROR([LÖVE needs a C++ compiler with C++11 support]), CXXFLAGS="$CXXFLAGS -std=$cxx11name") +# C++11 support in cpp11.m4 +ACLOVE_CPP11_TEST # Allow people on OSX to use autotools, they need their platform files AC_ARG_ENABLE([osx], @@ -44,6 +36,12 @@ AS_VAR_IF([enable_osx], [no], [], #else AC_SUBST([LDFLAGS], ["${LDFLAGS} -framework CoreFoundation -framework Cocoa"]) AC_SUBST([CPPFLAGS], ["${CPPFLAGS} -I../platform/macosx"])) +# stb_image sse2 override (https://github.com/nothings/stb/issues/280) +AC_ARG_ENABLE([stbi-sse2-override], + AC_HELP_STRING([--enable-stbi-sse2-override], [Force stb_image SSE2 support]), [], [enable_stbi_sse2_override=no]) +AS_VAR_IF([enable_stbi_sse2_override], [no], [], #else + AC_SUBST([CPPFLAGS], ["${CPPFLAGS} -DLOVE_STBI_SSE2_OVERRIDE"])) + # --with-lua and --with-luaversion AC_ARG_WITH([lua], [AS_HELP_STRING([--with-lua], [Select the lua implementation])], [], [with_lua=luajit]) @@ -52,31 +50,32 @@ AC_ARG_WITH([luaversion], [AS_HELP_STRING([--with-luaversion], [Select the lua v # pkg-config libraries AM_PATH_SDL2([], [], [LOVE_MSG_ERROR([SDL 2])]) +with_clean_luaversion=`printf ${with_luaversion} | sed 's/\.//g'` PKG_CHECK_MODULES([lua], [${with_lua}${with_luaversion}], [lua_found=yes], - [PKG_CHECK_MODULES([lua], [${with_lua}], [lua_found=yes], [lua_found=no])]) + [PKG_CHECK_MODULES([lua], [${with_lua}${with_clean_luaversion}], [lua_found=yes], + [PKG_CHECK_MODULES([lua], [${with_lua}], [lua_found=yes], [lua_found=no])])]) PKG_CHECK_MODULES([freetype2], [freetype2], [], [LOVE_MSG_ERROR([FreeType2])]) PKG_CHECK_MODULES([openal], [openal], [], [LOVE_MSG_ERROR([OpenAL])]) -PKG_CHECK_MODULES([devil], [IL], [], [LOVE_MSG_ERROR([DevIL])]) PKG_CHECK_MODULES([libmodplug], [libmodplug], [], [LOVE_MSG_ERROR([libmodplug])]) PKG_CHECK_MODULES([vorbisfile], [vorbisfile], [], [LOVE_MSG_ERROR([libvorbis and libvorbisfile])]) +PKG_CHECK_MODULES([zlib], [zlib], [], [LOVE_MSG_ERROR([zlib])]) +PKG_CHECK_MODULES([theora], [theoradec], [], [LOVE_MSG_ERROR([libtheora])]) # Other libraries AC_SEARCH_LIBS([sqrt], [m], [], [LOVE_MSG_ERROR([the C math library])]) AC_SEARCH_LIBS([PHYSFS_init], [physfs], [], [LOVE_MSG_ERROR([PhysicsFS])]) -AC_SEARCH_LIBS([glViewport], [GLESv2], [], [LOVE_MSG_ERROR([OpenGL])]) # Lua, treated seperately because of --with-lua -AS_VAR_IF([with_luaversion], [5.2], [luatest=lua_version], [luatest=lua_pcall]) # use lua_version for 5.2 AS_VAR_IF([lua_found], [yes], #if [ luaheaders_found=yes - AC_MSG_CHECKING([for library containing ${luatest}]) + AC_MSG_CHECKING([for library containing lua_call]) AC_MSG_RESULT([${lua_LIBS}])], #else [ - AC_MSG_WARN([Could not find pkg-config definition for ${with_lua}${with_luaversion} or ${with_lua}, falling back to manual detection]) - AC_SEARCH_LIBS([$luatest], ["${with_lua}${with_luaversion}" "${with_lua}"], [], + AC_MSG_WARN([Could not find pkg-config definition for ${with_lua}${with_luaversion} or ${with_lua}${with_clean_luaversion}${with_lua}, falling back to manual detection]) + AC_SEARCH_LIBS([lua_call], ["${with_lua}${with_luaversion}" "${with_lua}"], [], [LOVE_MSG_ERROR([$with_lua])]) luaheaders_found=no AC_CHECK_HEADER(["${with_lua}${with_luaversion}/lua.h"], [luaheaders_found=yes includes="$includes -I/usr/include/${with_lua}${with_luaversion}"], []) diff --git a/jni/love/platform/unix/cpp11.m4 b/jni/love/platform/unix/cpp11.m4 new file mode 100644 index 00000000..924c9689 --- /dev/null +++ b/jni/love/platform/unix/cpp11.m4 @@ -0,0 +1,69 @@ +AC_DEFUN([ACLOVE_CXX_FLAG_TEST], [ dnl WARNING: NOT REENTRANT + aclove_cxx_flag_test_save_cflags="$CXXFLAGS" + CXXFLAGS="$1" + AC_MSG_CHECKING([whether $CXX supports flag $1]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])]; $2, + [AC_MSG_RESULT([no]); $3]) + CXXFLAGS="$aclove_cxx_flag_test_save_cflags" +]) + +AC_DEFUN([ACLOVE_GET_GCC_VERSION], [ + aclove_gcc_version_found="yes" + AC_COMPUTE_INT(aclove_gcc_version_major, __GNUC__,, aclove_gcc_version_found="no") + AC_COMPUTE_INT(aclove_gcc_version_minor, __GNUC_MINOR__,, aclove_gcc_version_found="no") + AC_COMPUTE_INT(aclove_gcc_version_patch, __GNUC_PATCHLEVEL__,, aclove_gcc_version_found="no") +]) + +AC_DEFUN([ACLOVE_GET_CLANG_VERSION], [ + aclove_clang_version_found="yes" + AC_COMPUTE_INT(aclove_clang_version_major, __clang_major__,, aclove_clang_version_found="no") + AC_COMPUTE_INT(aclove_clang_version_minor, __clang_minor__,, aclove_clang_version_found="no") + AC_COMPUTE_INT(aclove_clang_version_patch, __clang_patchlevel__,, aclove_clang_version_found="no") +]) + +AC_DEFUN([ACLOVE_CPP11_TEST_FLAG], [ + aclove_cpp11_test_cxx11name="no" + ACLOVE_CXX_FLAG_TEST([-std=c++0x], aclove_cpp11_test_cxx11name="c++0x", []) + ACLOVE_CXX_FLAG_TEST([-std=c++11], aclove_cpp11_test_cxx11name="c++11", []) + AS_VAR_IF([aclove_cpp11_test_cxx11name], [no], + [AC_MSG_ERROR([LÖVE needs a C++ compiler with C++11 support])], + [CXXFLAGS="$CXXFLAGS -std=$aclove_cpp11_test_cxx11name"]) +]) + +AC_DEFUN([ACLOVE_CPP11_CHECK_VERSION], [ dnl compiler, targetmajor, targetminor, on-failure + aclove_cpp11_check_version_status="no" + AC_MSG_CHECKING([whether $1 version is at least $2.$3]) + AS_IF([test "$aclove_[]$1[]_version_major" -gt $2], aclove_cpp11_check_version_status="yes") + AS_IF([test "$aclove_[]$1[]_version_major" -eq $2 && test "$aclove_[]$1[]_version_minor" -ge $3], aclove_cpp11_check_version_status="yes") + AC_MSG_RESULT([$aclove_cpp11_check_version_status]) + AS_VAR_IF([aclove_cpp11_check_version_status], [no], + [$4]) +]) + +AC_DEFUN([ACLOVE_CPP11_TEST_VERSION_GCC], [ + ACLOVE_CPP11_CHECK_VERSION([gcc], 4, 7, + [AC_MSG_ERROR([LÖVE needs a GCC version of at least 4.7])]) +]) + +AC_DEFUN([ACLOVE_CPP11_TEST_VERSION_CLANG], [ + ACLOVE_CPP11_CHECK_VERSION([clang], 3, 1, + [AC_MSG_ERROR([LÖVE needs a clang version of at least 3.1])]) +]) + +AC_DEFUN([ACLOVE_CPP11_TEST], [ + ACLOVE_CPP11_TEST_FLAG + + ACLOVE_GET_GCC_VERSION + ACLOVE_GET_CLANG_VERSION + + # Since clang also sets gcc headers, check clang after + aclove_cpp11_test_compiler="unknown" + AS_VAR_IF([aclove_gcc_version_found], [yes], aclove_cpp11_test_compiler="gcc") + AS_VAR_IF([aclove_clang_version_found], [yes], aclove_cpp11_test_compiler="clang") + + AS_CASE([$aclove_cpp11_test_compiler], + [gcc], [ACLOVE_CPP11_TEST_VERSION_GCC], + [clang], [ACLOVE_CPP11_TEST_VERSION_CLANG], + [AC_MSG_WARN([Could not determine compiler version])]) +]) diff --git a/jni/love/platform/unix/debian/changelog.in b/jni/love/platform/unix/debian/changelog.in index 4901a576..420417a2 100644 --- a/jni/love/platform/unix/debian/changelog.in +++ b/jni/love/platform/unix/debian/changelog.in @@ -1,4 +1,4 @@ -love@LOVE_SUFFIX@ (0.9.0~ppatest5) precise; urgency=medium +love@LOVE_SUFFIX@ (0.10.0~pre2657ppa2) trusty; urgency=medium * Upstream testing release diff --git a/jni/love/platform/unix/debian/control.in b/jni/love/platform/unix/debian/control.in index 52a48b5e..5ac5178c 100644 --- a/jni/love/platform/unix/debian/control.in +++ b/jni/love/platform/unix/debian/control.in @@ -3,57 +3,48 @@ Section: games Priority: extra Maintainer: Bart van Strien Build-Depends: debhelper (>= 9), - autotools-dev, + dh-autoreconf, pkg-config, - libdevil-dev, + libtool, + g++ (>= 4.7.0), libfreetype6-dev, + luajit, libluajit-5.1-dev, - libphysfs-dev, - libsdl2-dev (>= 2.0.0), - libopenal-dev, - libogg-dev, - libvorbis-dev, - libflac-dev, - libflac++-dev, libmodplug-dev, libmpg123-dev, - libmng-dev -Standards-Version: 3.9.3 + libopenal-dev, + libphysfs-dev, + libsdl2-dev (>= 2.0.1), + libogg-dev, + libvorbis-dev, + libtheora-dev, + zlib1g-dev +Standards-Version: 3.9.5 Homepage: http://love2d.org -Package: liblove@LOVE_SUFFIX@ +Package: liblove@LOVE_SUFFIX@0 +Section: libs Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} Depends: ${misc:Depends}, - ${shlibs:Depends}, - libdevil1c2, - libmng1, - libfreetype6, - libgl1-mesa-glx, - libluajit-5.1-2, - libphysfs-1.0-0, - libsdl2-2.0-0 (>= 2.0.0), - libopenal1, - libogg0, - libvorbis0a, - libvorbisfile3, - libmodplug1, - libmpg123-0 -Description: LOVE is a free 2D game engine which enables easy game creation in Lua. + ${shlibs:Depends} +Description: 2D game engine - runtime + LOVE is a free 2D game engine which enables easy game creation in Lua. Package: love@LOVE_SUFFIX@ Architecture: any -Multi-Arch: same Depends: ${misc:Depends}, - liblove@LOVE_SUFFIX@ (= ${binary:Version}) -Description: LOVE is a free 2D game engine which enables easy game creation in Lua. + ${shlibs:Depends} +Description: 2D game engine + LOVE is a free 2D game engine which enables easy game creation in Lua. -Package: love@LOVE_SUFFIX@-dbg +Package: liblove@LOVE_SUFFIX@-dbg Priority: extra Section: debug Architecture: any Multi-Arch: same Depends: ${misc:Depends}, - love@LOVE_SUFFIX@ (= ${binary:Version}), -Description: LOVE is a free 2D game engine which enables easy game creation in Lua. + liblove@LOVE_SUFFIX@0 (= ${binary:Version}) +Description: 2D game engine - debug symbols + LOVE is a free 2D game engine which enables easy game creation in Lua. diff --git a/jni/love/platform/unix/debian/copyright b/jni/love/platform/unix/debian/copyright index 96a64fe6..6683e79c 100644 --- a/jni/love/platform/unix/debian/copyright +++ b/jni/love/platform/unix/debian/copyright @@ -1,20 +1,27 @@ -Copyright (c) 2006-2013 LOVE Development Team +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: LÖVE +Upstream-Contact: Bart van Strien +Source: http://www.love2d.org/ -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. +Files: * +Copyright: 2006-2015 LOVE Development Team +License: zlib + 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. -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. diff --git a/jni/love/platform/unix/debian/liblove-unstable0.docs b/jni/love/platform/unix/debian/liblove-unstable0.docs new file mode 100644 index 00000000..cdb5f04f --- /dev/null +++ b/jni/love/platform/unix/debian/liblove-unstable0.docs @@ -0,0 +1 @@ +readme.md diff --git a/jni/love/platform/unix/debian/liblove-unstable0.install b/jni/love/platform/unix/debian/liblove-unstable0.install new file mode 100644 index 00000000..10a01ed0 --- /dev/null +++ b/jni/love/platform/unix/debian/liblove-unstable0.install @@ -0,0 +1 @@ +usr/lib/*/liblove-unstable.so.* diff --git a/jni/love/platform/unix/debian/liblove0.docs b/jni/love/platform/unix/debian/liblove0.docs new file mode 100644 index 00000000..cdb5f04f --- /dev/null +++ b/jni/love/platform/unix/debian/liblove0.docs @@ -0,0 +1 @@ +readme.md diff --git a/jni/love/platform/unix/debian/liblove0.install b/jni/love/platform/unix/debian/liblove0.install new file mode 100644 index 00000000..93beb289 --- /dev/null +++ b/jni/love/platform/unix/debian/liblove0.install @@ -0,0 +1 @@ +usr/lib/*/liblove.so.* diff --git a/jni/love/platform/unix/debian/love-unstable.manpages b/jni/love/platform/unix/debian/love-unstable.manpages new file mode 100644 index 00000000..31aab155 --- /dev/null +++ b/jni/love/platform/unix/debian/love-unstable.manpages @@ -0,0 +1 @@ +platform/unix/love-unstable.6 diff --git a/jni/love/platform/unix/debian/love.install b/jni/love/platform/unix/debian/love.install index ac4c7a44..97b36762 100644 --- a/jni/love/platform/unix/debian/love.install +++ b/jni/love/platform/unix/debian/love.install @@ -1,6 +1,5 @@ -usr/bin/love -usr/share/man/man1/love.1 -usr/share/pixmaps/love.svg -usr/share/mime/packages/love.xml -usr/share/icons/hicolor/scalable/mimetypes/application-x-love-game.svg -usr/share/applications/love.desktop +usr/bin +usr/share/applications +usr/share/mime +usr/share/pixmaps +usr/share/icons diff --git a/jni/love/platform/unix/debian/love.manpages b/jni/love/platform/unix/debian/love.manpages index a510eb2e..09688d49 100644 --- a/jni/love/platform/unix/debian/love.manpages +++ b/jni/love/platform/unix/debian/love.manpages @@ -1 +1 @@ -platform/unix/love.1 +platform/unix/love.6 diff --git a/jni/love/platform/unix/debian/rules.in b/jni/love/platform/unix/debian/rules.in index 9ed42c92..f55809f6 100755 --- a/jni/love/platform/unix/debian/rules.in +++ b/jni/love/platform/unix/debian/rules.in @@ -1,16 +1,31 @@ #!/usr/bin/make -f -DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU) -DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +commonflags = -Wall -Wno-maybe-uninitialized -Wno-strict-aliasing +CFLAGS += $(commonflags) +CXXFLAGS += $(commonflags) + + +%: + dh $@ --parallel --with autoreconf + +override_dh_auto_clean: + dh_auto_clean + rm -f platform/unix/love-unstable.6 override_dh_auto_configure: dh_auto_configure -- --with-lua=luajit -override_dh_link: - dh_link -plove@LOVE_SUFFIX@-dev usr/lib/$(DEB_HOST_MULTIARCH)/liblove@LOVE_SUFFIX@.so.0.0.0 usr/lib/$(DEB_HOST_MULTIARCH)/liblove@LOVE_SUFFIX@.so +override_dh_installdocs: + dh_installdocs --link-doc=liblove@LOVE_SUFFIX@0 + +override_dh_installchangelogs: + dh_installchangelogs changes.txt + +override_dh_installman: + cp -f platform/unix/love.6 platform/unix/love-unstable.6 + dh_installman override_dh_strip: - dh_strip --dbg-package=love@LOVE_SUFFIX@-dbg + dh_strip -pliblove@LOVE_SUFFIX@0 --dbg-package=liblove@LOVE_SUFFIX@-dbg + dh_strip --remaining-packages -%: - dh $@ --parallel diff --git a/jni/love/platform/unix/genmodules b/jni/love/platform/unix/genmodules index c825cd70..ccfb69b3 100644 --- a/jni/love/platform/unix/genmodules +++ b/jni/love/platform/unix/genmodules @@ -113,8 +113,8 @@ inc_libraries="$inc_current/libraries" cat > src/Makefile.am << EOF AM_CPPFLAGS = -I$inc_current -I$inc_modules -I$inc_libraries -I$inc_libraries/enet/libenet/include \$(LOVE_INCLUDES) \$(FILE_OFFSET)\ \$(SDL_CFLAGS) \$(lua_CFLAGS) \$(freetype2_CFLAGS)\ - \$(openal_CFLAGS) \$(devil_CFLAGS) \$(libmodplug_CFLAGS)\ - \$(vorbisfile_CFLAGS) + \$(openal_CFLAGS) \$(zlib_CFLAGS) \$(libmodplug_CFLAGS)\ + \$(vorbisfile_CFLAGS) \$(theora_CFLAGS) AUTOMAKE_OPTIONS = subdir-objects SUBDIRS = SUFFIXES = .lua .lua.h @@ -129,8 +129,7 @@ love${love_amsuffix}_SOURCES = love.cpp if LOVE_TARGET_OSX love${love_amsuffix}_LIBTOOLFLAGS = --tag=OBJCXX love${love_amsuffix}_SOURCES += \\ - ../platform/macosx/OSX.h \\ - ../platform/macosx/OSX.mm + ./common/macosx.mm else love${love_amsuffix}_LIBTOOLFLAGS = --tag=CXX endif @@ -146,8 +145,8 @@ lib_LTLIBRARIES = liblove${love_suffix}.la liblove${love_amsuffix}_la_LDFLAGS = -module -export-dynamic \$(LDFLAGS) liblove${love_amsuffix}_la_LIBADD = \ \$(SDL_LIBS) \$(freetype2_LIBS) \$(lua_LIBS)\ - \$(openal_LIBS) \$(devil_LIBS) \$(libmodplug_LIBS)\ - \$(vorbisfile_LIBS) + \$(openal_LIBS) \$(zlib_LIBS) \$(libmodplug_LIBS)\ + \$(vorbisfile_LIBS) \$(theora_LIBS) EOF genmodules >> src/Makefile.am diff --git a/jni/love/platform/unix/love.6 b/jni/love/platform/unix/love.6 new file mode 100644 index 00000000..3cbfd4e1 --- /dev/null +++ b/jni/love/platform/unix/love.6 @@ -0,0 +1,33 @@ +.\" (c) 2008-2011 Miriam Ruiz +.\" (c) 2013 Bart van Strien +.\" +.\" This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damagesarising 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. +.Dd December 23, 2015 +.Dt LOVE 6 +.Os LÖVE 0.10.0 +.Sh NAME +.Nm love +.Nd 2D game development framework +.Sh SYNOPSIS +.Nm love +.Op Fl Fl fused +.Ar game Ns .love +.Pp +.Nm love +.Fl Fl version +.Sh DESCRIPTION +LÖVE was created to be a user-friendly engine in which simple (or complicated) games could be made without having extensive knowledge of system or graphics functions and without having to dedicate time towards developing the same engine features time and time again. +.Pp +Developed with cross-platform implementation in mind, it utilizes the latest open source libraries to deliver a similar game experience, independent of operating system. +By relying on the Lua scripting language for game-specific programming, it allows even the novice game creator to quickly and efficiently develop an idea into a fully working game. +.Sh SEE ALSO +You can find more information at +.Lk http://love2d.org/ diff --git a/jni/love/platform/unix/love.svg b/jni/love/platform/unix/love.svg index 03267f0b..552ad178 100644 --- a/jni/love/platform/unix/love.svg +++ b/jni/love/platform/unix/love.svg @@ -1,1030 +1,962 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + width="141.73px" height="141.73px" viewBox="0 0 141.73 141.73" enable-background="new 0 0 141.73 141.73" xml:space="preserve"> - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + diff --git a/jni/love/platform/xcode/Images.xcassets/Contents.json b/jni/love/platform/xcode/Images.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/jni/love/platform/xcode/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_128x128.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_128x128.png new file mode 100644 index 00000000..6aaf64d0 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_128x128.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_128x128@2x.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_128x128@2x.png new file mode 100644 index 00000000..bfbccd33 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_128x128@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_16x16.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_16x16.png new file mode 100644 index 00000000..81b7da9f Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_16x16.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_16x16@2x.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_16x16@2x.png new file mode 100644 index 00000000..e28e79f8 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_16x16@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_256x256.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_256x256.png new file mode 100644 index 00000000..bfbccd33 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_256x256.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_256x256@2x.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_256x256@2x.png new file mode 100644 index 00000000..28054d71 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_256x256@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_32x32.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_32x32.png new file mode 100644 index 00000000..e28e79f8 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_32x32.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_32x32@2x.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_32x32@2x.png new file mode 100644 index 00000000..75847d1e Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_32x32@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_512x512.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_512x512.png new file mode 100644 index 00000000..28054d71 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_512x512.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_512x512@2x.png b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_512x512@2x.png new file mode 100644 index 00000000..08683780 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/GameIcon.iconset/icon_512x512@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/1024.png b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/1024.png new file mode 100644 index 00000000..6c52a9de Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/1024.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/128.png b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/128.png new file mode 100644 index 00000000..82c74bcd Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/128.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/16.png b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/16.png new file mode 100644 index 00000000..1b310d3f Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/16.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/256.png b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/256.png new file mode 100644 index 00000000..cd021215 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/256.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/32.png b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/32.png new file mode 100644 index 00000000..5c0890d2 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/32.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/512.png b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/512.png new file mode 100644 index 00000000..17915d68 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/512.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/64.png b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/64.png new file mode 100644 index 00000000..be300b35 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/64.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/Contents.json b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..79b9cdda --- /dev/null +++ b/jni/love/platform/xcode/Images.xcassets/OS X AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/Contents.json b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..f1a9e097 --- /dev/null +++ b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/Contents.json @@ -0,0 +1,128 @@ +{ + "images" : [ + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29pt@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29pt@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29pt@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40pt@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40pt@3x.png", + "scale" : "3x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "icon-57pt@1x.png", + "scale" : "1x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "icon-57pt@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60pt@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60pt@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29pt@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29pt@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40pt@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40pt@2x.png", + "scale" : "2x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "icon-50pt@1x.png", + "scale" : "1x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "icon-50pt@2x.png", + "scale" : "2x" + }, + { + "size" : "72x72", + "idiom" : "ipad", + "filename" : "icon-72pt@1x.png", + "scale" : "1x" + }, + { + "size" : "72x72", + "idiom" : "ipad", + "filename" : "icon-72pt@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76pt@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76pt@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-83.5pt@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@1x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@1x.png new file mode 100644 index 00000000..8b548ef9 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@1x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@2x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@2x.png new file mode 100644 index 00000000..1fcc4be3 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@3x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@3x.png new file mode 100644 index 00000000..d7a8b600 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-29pt@3x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@1x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@1x.png new file mode 100644 index 00000000..aa936450 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@1x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@2x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@2x.png new file mode 100644 index 00000000..6705cbfa Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@3x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@3x.png new file mode 100644 index 00000000..54ca124f Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-40pt@3x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-50pt@1x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-50pt@1x.png new file mode 100644 index 00000000..8b9b1118 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-50pt@1x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-50pt@2x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-50pt@2x.png new file mode 100644 index 00000000..9806b708 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-50pt@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-57pt@1x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-57pt@1x.png new file mode 100644 index 00000000..02d7cc98 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-57pt@1x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-57pt@2x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-57pt@2x.png new file mode 100644 index 00000000..68f89850 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-57pt@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-60pt@2x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-60pt@2x.png new file mode 100644 index 00000000..54ca124f Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-60pt@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-60pt@3x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-60pt@3x.png new file mode 100644 index 00000000..c93997c0 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-60pt@3x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-72pt@1x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-72pt@1x.png new file mode 100644 index 00000000..a47c6d10 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-72pt@1x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-72pt@2x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-72pt@2x.png new file mode 100644 index 00000000..0850319f Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-72pt@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-76pt@1x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-76pt@1x.png new file mode 100644 index 00000000..f90a1360 Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-76pt@1x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-76pt@2x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-76pt@2x.png new file mode 100644 index 00000000..c2cba8cc Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-76pt@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-83.5pt@2x.png b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-83.5pt@2x.png new file mode 100644 index 00000000..ac90e1bb Binary files /dev/null and b/jni/love/platform/xcode/Images.xcassets/iOS AppIcon.appiconset/icon-83.5pt@2x.png differ diff --git a/jni/love/platform/xcode/Images.xcassets/iOS LaunchImage.launchimage/Contents.json b/jni/love/platform/xcode/Images.xcassets/iOS LaunchImage.launchimage/Contents.json new file mode 100644 index 00000000..3dd8aa5b --- /dev/null +++ b/jni/love/platform/xcode/Images.xcassets/iOS LaunchImage.launchimage/Contents.json @@ -0,0 +1,142 @@ +{ + "images" : [ + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "8.0", + "subtype" : "736h", + "scale" : "3x" + }, + { + "orientation" : "landscape", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "8.0", + "subtype" : "736h", + "scale" : "3x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "8.0", + "subtype" : "667h", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "subtype" : "retina4", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "subtype" : "retina4", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/jni/love/platform/xcode/ios/Launch Screen.xib b/jni/love/platform/xcode/ios/Launch Screen.xib new file mode 100644 index 00000000..45fffdbd --- /dev/null +++ b/jni/love/platform/xcode/ios/Launch Screen.xib @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/jni/love/platform/xcode/ios/love-ios.plist b/jni/love/platform/xcode/ios/love-ios.plist new file mode 100644 index 00000000..1fc317e5 --- /dev/null +++ b/jni/love/platform/xcode/ios/love-ios.plist @@ -0,0 +1,102 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleDocumentTypes + + + CFBundleTypeIconFiles + + LoveDocument.icns + + CFBundleTypeName + LÖVE Project + CFBundleTypeRole + Viewer + LSHandlerRank + Owner + LSItemContentTypes + + org.love2d.love-game + + + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIcons + + CFBundleIcons~ipad + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.10.2 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIFileSharingEnabled + + UILaunchStoryboardName + Launch Screen + UIRequiredDeviceCapabilities + + opengles-2 + + UIStatusBarStyle + UIStatusBarStyleLightContent + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UTExportedTypeDeclarations + + + UTTypeConformsTo + + com.pkware.zip-archive + + UTTypeDescription + LÖVE Project + UTTypeIdentifier + org.love2d.love-game + UTTypeSize320IconFile + LoveDocument + UTTypeSize64IconFile + LoveDocument + UTTypeTagSpecification + + com.apple.ostype + LOVE + public.filename-extension + + love + + public.mime-type + application/x-love-game + + + + + diff --git a/jni/love/platform/xcode/ios/lovedocument.icns b/jni/love/platform/xcode/ios/lovedocument.icns new file mode 100644 index 00000000..1dede26b Binary files /dev/null and b/jni/love/platform/xcode/ios/lovedocument.icns differ diff --git a/jni/love/platform/xcode/ios/luajit-iOS.sh b/jni/love/platform/xcode/ios/luajit-iOS.sh new file mode 100755 index 00000000..f20d67a2 --- /dev/null +++ b/jni/love/platform/xcode/ios/luajit-iOS.sh @@ -0,0 +1,52 @@ +mkdir -p include/luajit +mkdir -p libraries/luajit + +git clone https://github.com/LuaJIT/LuaJIT.git luajit-git +cd luajit-git +git pull +git checkout v2.1 + +# iOS device binaries + +ISDKP=$(xcrun --sdk iphoneos --show-sdk-path) +ICC=$(xcrun --sdk iphoneos --find clang) + +ISDKF="-arch armv7 -isysroot $ISDKP -mios-version-min=6.0" +make clean +make -j8 HOST_CC="clang -m32 -arch i386" CROSS="$(dirname $ICC)/" TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS +cp src/libluajit.a ../libraries/luajit/libluajit_arm7.a + +ISDKF="-arch arm64 -isysroot $ISDKP -mios-version-min=6.0" +make clean +make -j8 CROSS="$(dirname $ICC)/" TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS +cp src/libluajit.a ../libraries/luajit/libluajit_arm64.a + + +# iOS simulator binaries + +ISDKP=$(xcrun --sdk iphonesimulator --show-sdk-path) +ICC=$(xcrun --sdk iphonesimulator --find clang) + +ISDKF="-arch i386 -isysroot $ISDKP -mios-simulator-version-min=6.0" +make clean +make -j8 HOST_CC="clang -m32 -arch i386" CROSS="$(dirname $ICC)/" TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS +cp src/libluajit.a ../libraries/luajit/libluajit_x86.a + +ISDKF="-arch x86_64 -isysroot $ISDKP -mios-simulator-version-min=6.0" +make clean +make -j8 CROSS="$(dirname $ICC)/" TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS +cp src/libluajit.a ../libraries/luajit/libluajit_x86_64.a + + +# copy includes +cp src/lua.hpp ../include/luajit + +cp src/lauxlib.h ../include/luajit +cp src/lua.h ../include/luajit +cp src/luaconf.h ../include/luajit +cp src/lualib.h ../include/luajit +cp src/luajit.h ../include/luajit + +# combine lib +cd ../libraries/luajit +lipo -create -output libluajit.a libluajit_arm7.a libluajit_arm64.a libluajit_x86.a libluajit_x86_64.a diff --git a/jni/love/platform/xcode/liblove.xcodeproj/project.pbxproj b/jni/love/platform/xcode/liblove.xcodeproj/project.pbxproj new file mode 100644 index 00000000..d21bd683 --- /dev/null +++ b/jni/love/platform/xcode/liblove.xcodeproj/project.pbxproj @@ -0,0 +1,4325 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + FA0B791B1A958E3B000E1D17 /* b64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78F71A958E3B000E1D17 /* b64.cpp */; }; + FA0B791C1A958E3B000E1D17 /* b64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78F71A958E3B000E1D17 /* b64.cpp */; }; + FA0B791D1A958E3B000E1D17 /* b64.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78F81A958E3B000E1D17 /* b64.h */; }; + FA0B791E1A958E3B000E1D17 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78F91A958E3B000E1D17 /* config.h */; }; + FA0B791F1A958E3B000E1D17 /* Data.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78FA1A958E3B000E1D17 /* Data.h */; }; + FA0B79201A958E3B000E1D17 /* delay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78FB1A958E3B000E1D17 /* delay.cpp */; }; + FA0B79211A958E3B000E1D17 /* delay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78FB1A958E3B000E1D17 /* delay.cpp */; }; + FA0B79221A958E3B000E1D17 /* delay.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78FC1A958E3B000E1D17 /* delay.h */; }; + FA0B79231A958E3B000E1D17 /* EnumMap.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78FD1A958E3B000E1D17 /* EnumMap.h */; }; + FA0B79241A958E3B000E1D17 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78FE1A958E3B000E1D17 /* Exception.cpp */; }; + FA0B79251A958E3B000E1D17 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78FE1A958E3B000E1D17 /* Exception.cpp */; }; + FA0B79261A958E3B000E1D17 /* Exception.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78FF1A958E3B000E1D17 /* Exception.h */; }; + FA0B79271A958E3B000E1D17 /* int.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79001A958E3B000E1D17 /* int.h */; }; + FA0B79281A958E3B000E1D17 /* math.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79011A958E3B000E1D17 /* math.h */; }; + FA0B79291A958E3B000E1D17 /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79021A958E3B000E1D17 /* Matrix.cpp */; }; + FA0B792A1A958E3B000E1D17 /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79021A958E3B000E1D17 /* Matrix.cpp */; }; + FA0B792B1A958E3B000E1D17 /* Matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79031A958E3B000E1D17 /* Matrix.h */; }; + FA0B792C1A958E3B000E1D17 /* Memoizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79041A958E3B000E1D17 /* Memoizer.cpp */; }; + FA0B792D1A958E3B000E1D17 /* Memoizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79041A958E3B000E1D17 /* Memoizer.cpp */; }; + FA0B792E1A958E3B000E1D17 /* Memoizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79051A958E3B000E1D17 /* Memoizer.h */; }; + FA0B792F1A958E3B000E1D17 /* Module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79061A958E3B000E1D17 /* Module.cpp */; }; + FA0B79301A958E3B000E1D17 /* Module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79061A958E3B000E1D17 /* Module.cpp */; }; + FA0B79311A958E3B000E1D17 /* Module.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79071A958E3B000E1D17 /* Module.h */; }; + FA0B79321A958E3B000E1D17 /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79081A958E3B000E1D17 /* Object.cpp */; }; + FA0B79331A958E3B000E1D17 /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79081A958E3B000E1D17 /* Object.cpp */; }; + FA0B79341A958E3B000E1D17 /* Object.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79091A958E3B000E1D17 /* Object.h */; }; + FA0B79351A958E3B000E1D17 /* macosx.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B790A1A958E3B000E1D17 /* macosx.h */; }; + FA0B79361A958E3B000E1D17 /* macosx.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790B1A958E3B000E1D17 /* macosx.mm */; }; + FA0B79371A958E3B000E1D17 /* macosx.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790B1A958E3B000E1D17 /* macosx.mm */; }; + FA0B79381A958E3B000E1D17 /* Reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790C1A958E3B000E1D17 /* Reference.cpp */; }; + FA0B79391A958E3B000E1D17 /* Reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790C1A958E3B000E1D17 /* Reference.cpp */; }; + FA0B793A1A958E3B000E1D17 /* Reference.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B790D1A958E3B000E1D17 /* Reference.h */; }; + FA0B793B1A958E3B000E1D17 /* runtime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790E1A958E3B000E1D17 /* runtime.cpp */; }; + FA0B793C1A958E3B000E1D17 /* runtime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790E1A958E3B000E1D17 /* runtime.cpp */; }; + FA0B793D1A958E3B000E1D17 /* runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B790F1A958E3B000E1D17 /* runtime.h */; }; + FA0B793E1A958E3B000E1D17 /* StringMap.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79101A958E3B000E1D17 /* StringMap.h */; }; + FA0B793F1A958E3B000E1D17 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79111A958E3B000E1D17 /* types.h */; }; + FA0B79401A958E3B000E1D17 /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79121A958E3B000E1D17 /* utf8.cpp */; }; + FA0B79411A958E3B000E1D17 /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79121A958E3B000E1D17 /* utf8.cpp */; }; + FA0B79421A958E3B000E1D17 /* utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79131A958E3B000E1D17 /* utf8.h */; }; + FA0B79431A958E3B000E1D17 /* Variant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79141A958E3B000E1D17 /* Variant.cpp */; }; + FA0B79441A958E3B000E1D17 /* Variant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79141A958E3B000E1D17 /* Variant.cpp */; }; + FA0B79451A958E3B000E1D17 /* Variant.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79151A958E3B000E1D17 /* Variant.h */; }; + FA0B79461A958E3B000E1D17 /* Vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79161A958E3B000E1D17 /* Vector.cpp */; }; + FA0B79471A958E3B000E1D17 /* Vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79161A958E3B000E1D17 /* Vector.cpp */; }; + FA0B79481A958E3B000E1D17 /* Vector.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79171A958E3B000E1D17 /* Vector.h */; }; + FA0B79491A958E3B000E1D17 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79181A958E3B000E1D17 /* version.h */; }; + FA0B794A1A958E3B000E1D17 /* wrap_Data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79191A958E3B000E1D17 /* wrap_Data.cpp */; }; + FA0B794B1A958E3B000E1D17 /* wrap_Data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79191A958E3B000E1D17 /* wrap_Data.cpp */; }; + FA0B794C1A958E3B000E1D17 /* wrap_Data.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B791A1A958E3B000E1D17 /* wrap_Data.h */; }; + FA0B7A281A958EA3000E1D17 /* Box2D.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B794F1A958EA3000E1D17 /* Box2D.h */; }; + FA0B7A291A958EA3000E1D17 /* b2BroadPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79511A958EA3000E1D17 /* b2BroadPhase.cpp */; }; + FA0B7A2A1A958EA3000E1D17 /* b2BroadPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79511A958EA3000E1D17 /* b2BroadPhase.cpp */; }; + FA0B7A2B1A958EA3000E1D17 /* b2BroadPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79521A958EA3000E1D17 /* b2BroadPhase.h */; }; + FA0B7A2C1A958EA3000E1D17 /* b2CollideCircle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79531A958EA3000E1D17 /* b2CollideCircle.cpp */; }; + FA0B7A2D1A958EA3000E1D17 /* b2CollideCircle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79531A958EA3000E1D17 /* b2CollideCircle.cpp */; }; + FA0B7A2E1A958EA3000E1D17 /* b2CollideEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79541A958EA3000E1D17 /* b2CollideEdge.cpp */; }; + FA0B7A2F1A958EA3000E1D17 /* b2CollideEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79541A958EA3000E1D17 /* b2CollideEdge.cpp */; }; + FA0B7A301A958EA3000E1D17 /* b2CollidePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79551A958EA3000E1D17 /* b2CollidePolygon.cpp */; }; + FA0B7A311A958EA3000E1D17 /* b2CollidePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79551A958EA3000E1D17 /* b2CollidePolygon.cpp */; }; + FA0B7A321A958EA3000E1D17 /* b2Collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79561A958EA3000E1D17 /* b2Collision.cpp */; }; + FA0B7A331A958EA3000E1D17 /* b2Collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79561A958EA3000E1D17 /* b2Collision.cpp */; }; + FA0B7A341A958EA3000E1D17 /* b2Collision.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79571A958EA3000E1D17 /* b2Collision.h */; }; + FA0B7A351A958EA3000E1D17 /* b2Distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79581A958EA3000E1D17 /* b2Distance.cpp */; }; + FA0B7A361A958EA3000E1D17 /* b2Distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79581A958EA3000E1D17 /* b2Distance.cpp */; }; + FA0B7A371A958EA3000E1D17 /* b2Distance.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79591A958EA3000E1D17 /* b2Distance.h */; }; + FA0B7A381A958EA3000E1D17 /* b2DynamicTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795A1A958EA3000E1D17 /* b2DynamicTree.cpp */; }; + FA0B7A391A958EA3000E1D17 /* b2DynamicTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795A1A958EA3000E1D17 /* b2DynamicTree.cpp */; }; + FA0B7A3A1A958EA3000E1D17 /* b2DynamicTree.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B795B1A958EA3000E1D17 /* b2DynamicTree.h */; }; + FA0B7A3B1A958EA3000E1D17 /* b2TimeOfImpact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795C1A958EA3000E1D17 /* b2TimeOfImpact.cpp */; }; + FA0B7A3C1A958EA3000E1D17 /* b2TimeOfImpact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795C1A958EA3000E1D17 /* b2TimeOfImpact.cpp */; }; + FA0B7A3D1A958EA3000E1D17 /* b2TimeOfImpact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B795D1A958EA3000E1D17 /* b2TimeOfImpact.h */; }; + FA0B7A3E1A958EA3000E1D17 /* b2ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795F1A958EA3000E1D17 /* b2ChainShape.cpp */; }; + FA0B7A3F1A958EA3000E1D17 /* b2ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795F1A958EA3000E1D17 /* b2ChainShape.cpp */; }; + FA0B7A401A958EA3000E1D17 /* b2ChainShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79601A958EA3000E1D17 /* b2ChainShape.h */; }; + FA0B7A411A958EA3000E1D17 /* b2CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79611A958EA3000E1D17 /* b2CircleShape.cpp */; }; + FA0B7A421A958EA3000E1D17 /* b2CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79611A958EA3000E1D17 /* b2CircleShape.cpp */; }; + FA0B7A431A958EA3000E1D17 /* b2CircleShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79621A958EA3000E1D17 /* b2CircleShape.h */; }; + FA0B7A441A958EA3000E1D17 /* b2EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79631A958EA3000E1D17 /* b2EdgeShape.cpp */; }; + FA0B7A451A958EA3000E1D17 /* b2EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79631A958EA3000E1D17 /* b2EdgeShape.cpp */; }; + FA0B7A461A958EA3000E1D17 /* b2EdgeShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79641A958EA3000E1D17 /* b2EdgeShape.h */; }; + FA0B7A471A958EA3000E1D17 /* b2PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79651A958EA3000E1D17 /* b2PolygonShape.cpp */; }; + FA0B7A481A958EA3000E1D17 /* b2PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79651A958EA3000E1D17 /* b2PolygonShape.cpp */; }; + FA0B7A491A958EA3000E1D17 /* b2PolygonShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79661A958EA3000E1D17 /* b2PolygonShape.h */; }; + FA0B7A4A1A958EA3000E1D17 /* b2Shape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79671A958EA3000E1D17 /* b2Shape.h */; }; + FA0B7A4B1A958EA3000E1D17 /* b2BlockAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79691A958EA3000E1D17 /* b2BlockAllocator.cpp */; }; + FA0B7A4C1A958EA3000E1D17 /* b2BlockAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79691A958EA3000E1D17 /* b2BlockAllocator.cpp */; }; + FA0B7A4D1A958EA3000E1D17 /* b2BlockAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B796A1A958EA3000E1D17 /* b2BlockAllocator.h */; }; + FA0B7A4E1A958EA3000E1D17 /* b2Draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B796B1A958EA3000E1D17 /* b2Draw.cpp */; }; + FA0B7A4F1A958EA3000E1D17 /* b2Draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B796B1A958EA3000E1D17 /* b2Draw.cpp */; }; + FA0B7A501A958EA3000E1D17 /* b2Draw.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B796C1A958EA3000E1D17 /* b2Draw.h */; }; + FA0B7A511A958EA3000E1D17 /* b2GrowableStack.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B796D1A958EA3000E1D17 /* b2GrowableStack.h */; }; + FA0B7A521A958EA3000E1D17 /* b2Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B796E1A958EA3000E1D17 /* b2Math.cpp */; }; + FA0B7A531A958EA3000E1D17 /* b2Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B796E1A958EA3000E1D17 /* b2Math.cpp */; }; + FA0B7A541A958EA3000E1D17 /* b2Math.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B796F1A958EA3000E1D17 /* b2Math.h */; }; + FA0B7A551A958EA3000E1D17 /* b2Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79701A958EA3000E1D17 /* b2Settings.cpp */; }; + FA0B7A561A958EA3000E1D17 /* b2Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79701A958EA3000E1D17 /* b2Settings.cpp */; }; + FA0B7A571A958EA3000E1D17 /* b2Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79711A958EA3000E1D17 /* b2Settings.h */; }; + FA0B7A581A958EA3000E1D17 /* b2StackAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79721A958EA3000E1D17 /* b2StackAllocator.cpp */; }; + FA0B7A591A958EA3000E1D17 /* b2StackAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79721A958EA3000E1D17 /* b2StackAllocator.cpp */; }; + FA0B7A5A1A958EA3000E1D17 /* b2StackAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79731A958EA3000E1D17 /* b2StackAllocator.h */; }; + FA0B7A5B1A958EA3000E1D17 /* b2Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79741A958EA3000E1D17 /* b2Timer.cpp */; }; + FA0B7A5C1A958EA3000E1D17 /* b2Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79741A958EA3000E1D17 /* b2Timer.cpp */; }; + FA0B7A5D1A958EA3000E1D17 /* b2Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79751A958EA3000E1D17 /* b2Timer.h */; }; + FA0B7A5E1A958EA3000E1D17 /* b2Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79771A958EA3000E1D17 /* b2Body.cpp */; }; + FA0B7A5F1A958EA3000E1D17 /* b2Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79771A958EA3000E1D17 /* b2Body.cpp */; }; + FA0B7A601A958EA3000E1D17 /* b2Body.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79781A958EA3000E1D17 /* b2Body.h */; }; + FA0B7A611A958EA3000E1D17 /* b2ContactManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79791A958EA3000E1D17 /* b2ContactManager.cpp */; }; + FA0B7A621A958EA3000E1D17 /* b2ContactManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79791A958EA3000E1D17 /* b2ContactManager.cpp */; }; + FA0B7A631A958EA3000E1D17 /* b2ContactManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B797A1A958EA3000E1D17 /* b2ContactManager.h */; }; + FA0B7A641A958EA3000E1D17 /* b2Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B797B1A958EA3000E1D17 /* b2Fixture.cpp */; }; + FA0B7A651A958EA3000E1D17 /* b2Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B797B1A958EA3000E1D17 /* b2Fixture.cpp */; }; + FA0B7A661A958EA3000E1D17 /* b2Fixture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B797C1A958EA3000E1D17 /* b2Fixture.h */; }; + FA0B7A671A958EA3000E1D17 /* b2Island.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B797D1A958EA3000E1D17 /* b2Island.cpp */; }; + FA0B7A681A958EA3000E1D17 /* b2Island.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B797D1A958EA3000E1D17 /* b2Island.cpp */; }; + FA0B7A691A958EA3000E1D17 /* b2Island.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B797E1A958EA3000E1D17 /* b2Island.h */; }; + FA0B7A6A1A958EA3000E1D17 /* b2TimeStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B797F1A958EA3000E1D17 /* b2TimeStep.h */; }; + FA0B7A6B1A958EA3000E1D17 /* b2World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79801A958EA3000E1D17 /* b2World.cpp */; }; + FA0B7A6C1A958EA3000E1D17 /* b2World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79801A958EA3000E1D17 /* b2World.cpp */; }; + FA0B7A6D1A958EA3000E1D17 /* b2World.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79811A958EA3000E1D17 /* b2World.h */; }; + FA0B7A6E1A958EA3000E1D17 /* b2WorldCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79821A958EA3000E1D17 /* b2WorldCallbacks.cpp */; }; + FA0B7A6F1A958EA3000E1D17 /* b2WorldCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79821A958EA3000E1D17 /* b2WorldCallbacks.cpp */; }; + FA0B7A701A958EA3000E1D17 /* b2WorldCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79831A958EA3000E1D17 /* b2WorldCallbacks.h */; }; + FA0B7A711A958EA3000E1D17 /* b2ChainAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79851A958EA3000E1D17 /* b2ChainAndCircleContact.cpp */; }; + FA0B7A721A958EA3000E1D17 /* b2ChainAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79851A958EA3000E1D17 /* b2ChainAndCircleContact.cpp */; }; + FA0B7A731A958EA3000E1D17 /* b2ChainAndCircleContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79861A958EA3000E1D17 /* b2ChainAndCircleContact.h */; }; + FA0B7A741A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79871A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp */; }; + FA0B7A751A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79871A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp */; }; + FA0B7A761A958EA3000E1D17 /* b2ChainAndPolygonContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79881A958EA3000E1D17 /* b2ChainAndPolygonContact.h */; }; + FA0B7A771A958EA3000E1D17 /* b2CircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79891A958EA3000E1D17 /* b2CircleContact.cpp */; }; + FA0B7A781A958EA3000E1D17 /* b2CircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79891A958EA3000E1D17 /* b2CircleContact.cpp */; }; + FA0B7A791A958EA3000E1D17 /* b2CircleContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B798A1A958EA3000E1D17 /* b2CircleContact.h */; }; + FA0B7A7A1A958EA3000E1D17 /* b2Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798B1A958EA3000E1D17 /* b2Contact.cpp */; }; + FA0B7A7B1A958EA3000E1D17 /* b2Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798B1A958EA3000E1D17 /* b2Contact.cpp */; }; + FA0B7A7C1A958EA3000E1D17 /* b2Contact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B798C1A958EA3000E1D17 /* b2Contact.h */; }; + FA0B7A7D1A958EA3000E1D17 /* b2ContactSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798D1A958EA3000E1D17 /* b2ContactSolver.cpp */; }; + FA0B7A7E1A958EA3000E1D17 /* b2ContactSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798D1A958EA3000E1D17 /* b2ContactSolver.cpp */; }; + FA0B7A7F1A958EA3000E1D17 /* b2ContactSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B798E1A958EA3000E1D17 /* b2ContactSolver.h */; }; + FA0B7A801A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798F1A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp */; }; + FA0B7A811A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798F1A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp */; }; + FA0B7A821A958EA3000E1D17 /* b2EdgeAndCircleContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79901A958EA3000E1D17 /* b2EdgeAndCircleContact.h */; }; + FA0B7A831A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79911A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp */; }; + FA0B7A841A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79911A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp */; }; + FA0B7A851A958EA3000E1D17 /* b2EdgeAndPolygonContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79921A958EA3000E1D17 /* b2EdgeAndPolygonContact.h */; }; + FA0B7A861A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79931A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp */; }; + FA0B7A871A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79931A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp */; }; + FA0B7A881A958EA3000E1D17 /* b2PolygonAndCircleContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79941A958EA3000E1D17 /* b2PolygonAndCircleContact.h */; }; + FA0B7A891A958EA3000E1D17 /* b2PolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79951A958EA3000E1D17 /* b2PolygonContact.cpp */; }; + FA0B7A8A1A958EA3000E1D17 /* b2PolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79951A958EA3000E1D17 /* b2PolygonContact.cpp */; }; + FA0B7A8B1A958EA3000E1D17 /* b2PolygonContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79961A958EA3000E1D17 /* b2PolygonContact.h */; }; + FA0B7A8C1A958EA3000E1D17 /* b2DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79981A958EA3000E1D17 /* b2DistanceJoint.cpp */; }; + FA0B7A8D1A958EA3000E1D17 /* b2DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79981A958EA3000E1D17 /* b2DistanceJoint.cpp */; }; + FA0B7A8E1A958EA3000E1D17 /* b2DistanceJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79991A958EA3000E1D17 /* b2DistanceJoint.h */; }; + FA0B7A8F1A958EA3000E1D17 /* b2FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799A1A958EA3000E1D17 /* b2FrictionJoint.cpp */; }; + FA0B7A901A958EA3000E1D17 /* b2FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799A1A958EA3000E1D17 /* b2FrictionJoint.cpp */; }; + FA0B7A911A958EA3000E1D17 /* b2FrictionJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B799B1A958EA3000E1D17 /* b2FrictionJoint.h */; }; + FA0B7A921A958EA3000E1D17 /* b2GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799C1A958EA3000E1D17 /* b2GearJoint.cpp */; }; + FA0B7A931A958EA3000E1D17 /* b2GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799C1A958EA3000E1D17 /* b2GearJoint.cpp */; }; + FA0B7A941A958EA3000E1D17 /* b2GearJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B799D1A958EA3000E1D17 /* b2GearJoint.h */; }; + FA0B7A951A958EA3000E1D17 /* b2Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799E1A958EA3000E1D17 /* b2Joint.cpp */; }; + FA0B7A961A958EA3000E1D17 /* b2Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799E1A958EA3000E1D17 /* b2Joint.cpp */; }; + FA0B7A971A958EA3000E1D17 /* b2Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B799F1A958EA3000E1D17 /* b2Joint.h */; }; + FA0B7A981A958EA3000E1D17 /* b2MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A01A958EA3000E1D17 /* b2MotorJoint.cpp */; }; + FA0B7A991A958EA3000E1D17 /* b2MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A01A958EA3000E1D17 /* b2MotorJoint.cpp */; }; + FA0B7A9A1A958EA3000E1D17 /* b2MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A11A958EA3000E1D17 /* b2MotorJoint.h */; }; + FA0B7A9B1A958EA3000E1D17 /* b2MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A21A958EA3000E1D17 /* b2MouseJoint.cpp */; }; + FA0B7A9C1A958EA3000E1D17 /* b2MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A21A958EA3000E1D17 /* b2MouseJoint.cpp */; }; + FA0B7A9D1A958EA3000E1D17 /* b2MouseJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A31A958EA3000E1D17 /* b2MouseJoint.h */; }; + FA0B7A9E1A958EA3000E1D17 /* b2PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A41A958EA3000E1D17 /* b2PrismaticJoint.cpp */; }; + FA0B7A9F1A958EA3000E1D17 /* b2PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A41A958EA3000E1D17 /* b2PrismaticJoint.cpp */; }; + FA0B7AA01A958EA3000E1D17 /* b2PrismaticJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A51A958EA3000E1D17 /* b2PrismaticJoint.h */; }; + FA0B7AA11A958EA3000E1D17 /* b2PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A61A958EA3000E1D17 /* b2PulleyJoint.cpp */; }; + FA0B7AA21A958EA3000E1D17 /* b2PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A61A958EA3000E1D17 /* b2PulleyJoint.cpp */; }; + FA0B7AA31A958EA3000E1D17 /* b2PulleyJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A71A958EA3000E1D17 /* b2PulleyJoint.h */; }; + FA0B7AA41A958EA3000E1D17 /* b2RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A81A958EA3000E1D17 /* b2RevoluteJoint.cpp */; }; + FA0B7AA51A958EA3000E1D17 /* b2RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A81A958EA3000E1D17 /* b2RevoluteJoint.cpp */; }; + FA0B7AA61A958EA3000E1D17 /* b2RevoluteJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A91A958EA3000E1D17 /* b2RevoluteJoint.h */; }; + FA0B7AA71A958EA3000E1D17 /* b2RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AA1A958EA3000E1D17 /* b2RopeJoint.cpp */; }; + FA0B7AA81A958EA3000E1D17 /* b2RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AA1A958EA3000E1D17 /* b2RopeJoint.cpp */; }; + FA0B7AA91A958EA3000E1D17 /* b2RopeJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79AB1A958EA3000E1D17 /* b2RopeJoint.h */; }; + FA0B7AAA1A958EA3000E1D17 /* b2WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AC1A958EA3000E1D17 /* b2WeldJoint.cpp */; }; + FA0B7AAB1A958EA3000E1D17 /* b2WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AC1A958EA3000E1D17 /* b2WeldJoint.cpp */; }; + FA0B7AAC1A958EA3000E1D17 /* b2WeldJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79AD1A958EA3000E1D17 /* b2WeldJoint.h */; }; + FA0B7AAD1A958EA3000E1D17 /* b2WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AE1A958EA3000E1D17 /* b2WheelJoint.cpp */; }; + FA0B7AAE1A958EA3000E1D17 /* b2WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AE1A958EA3000E1D17 /* b2WheelJoint.cpp */; }; + FA0B7AAF1A958EA3000E1D17 /* b2WheelJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79AF1A958EA3000E1D17 /* b2WheelJoint.h */; }; + FA0B7AB11A958EA3000E1D17 /* b2Rope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B21A958EA3000E1D17 /* b2Rope.cpp */; }; + FA0B7AB21A958EA3000E1D17 /* b2Rope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B21A958EA3000E1D17 /* b2Rope.cpp */; }; + FA0B7AB31A958EA3000E1D17 /* b2Rope.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79B31A958EA3000E1D17 /* b2Rope.h */; }; + FA0B7AB41A958EA3000E1D17 /* ddsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79B51A958EA3000E1D17 /* ddsinfo.h */; }; + FA0B7AB51A958EA3000E1D17 /* ddsparse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B61A958EA3000E1D17 /* ddsparse.cpp */; }; + FA0B7AB61A958EA3000E1D17 /* ddsparse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B61A958EA3000E1D17 /* ddsparse.cpp */; }; + FA0B7AB71A958EA3000E1D17 /* ddsparse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79B71A958EA3000E1D17 /* ddsparse.h */; }; + FA0B7AB81A958EA3000E1D17 /* enet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B91A958EA3000E1D17 /* enet.cpp */; }; + FA0B7AB91A958EA3000E1D17 /* enet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B91A958EA3000E1D17 /* enet.cpp */; }; + FA0B7ABA1A958EA3000E1D17 /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BB1A958EA3000E1D17 /* callbacks.c */; }; + FA0B7ABB1A958EA3000E1D17 /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BB1A958EA3000E1D17 /* callbacks.c */; }; + FA0B7ABD1A958EA3000E1D17 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BD1A958EA3000E1D17 /* compress.c */; }; + FA0B7ABE1A958EA3000E1D17 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BD1A958EA3000E1D17 /* compress.c */; }; + FA0B7ABF1A958EA3000E1D17 /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BE1A958EA3000E1D17 /* host.c */; }; + FA0B7AC01A958EA3000E1D17 /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BE1A958EA3000E1D17 /* host.c */; }; + FA0B7AC11A958EA3000E1D17 /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C11A958EA3000E1D17 /* callbacks.h */; }; + FA0B7AC21A958EA3000E1D17 /* enet.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C21A958EA3000E1D17 /* enet.h */; }; + FA0B7AC31A958EA3000E1D17 /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C31A958EA3000E1D17 /* list.h */; }; + FA0B7AC41A958EA3000E1D17 /* protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C41A958EA3000E1D17 /* protocol.h */; }; + FA0B7AC51A958EA3000E1D17 /* time.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C51A958EA3000E1D17 /* time.h */; }; + FA0B7AC61A958EA3000E1D17 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C61A958EA3000E1D17 /* types.h */; }; + FA0B7AC71A958EA3000E1D17 /* unix.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C71A958EA3000E1D17 /* unix.h */; }; + FA0B7AC81A958EA3000E1D17 /* utility.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C81A958EA3000E1D17 /* utility.h */; }; + FA0B7AC91A958EA3000E1D17 /* win32.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C91A958EA3000E1D17 /* win32.h */; }; + FA0B7ACB1A958EA3000E1D17 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CB1A958EA3000E1D17 /* list.c */; }; + FA0B7ACC1A958EA3000E1D17 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CB1A958EA3000E1D17 /* list.c */; }; + FA0B7ACD1A958EA3000E1D17 /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CC1A958EA3000E1D17 /* packet.c */; }; + FA0B7ACE1A958EA3000E1D17 /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CC1A958EA3000E1D17 /* packet.c */; }; + FA0B7ACF1A958EA3000E1D17 /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CD1A958EA3000E1D17 /* peer.c */; }; + FA0B7AD01A958EA3000E1D17 /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CD1A958EA3000E1D17 /* peer.c */; }; + FA0B7AD11A958EA3000E1D17 /* protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CE1A958EA3000E1D17 /* protocol.c */; }; + FA0B7AD21A958EA3000E1D17 /* protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CE1A958EA3000E1D17 /* protocol.c */; }; + FA0B7AD41A958EA3000E1D17 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D01A958EA3000E1D17 /* unix.c */; }; + FA0B7AD51A958EA3000E1D17 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D01A958EA3000E1D17 /* unix.c */; }; + FA0B7AD61A958EA3000E1D17 /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D11A958EA3000E1D17 /* win32.c */; }; + FA0B7AD71A958EA3000E1D17 /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D11A958EA3000E1D17 /* win32.c */; }; + FA0B7AD81A958EA3000E1D17 /* lua-enet.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79D21A958EA3000E1D17 /* lua-enet.h */; }; + FA0B7AD91A958EA3000E1D17 /* glad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D41A958EA3000E1D17 /* glad.cpp */; }; + FA0B7ADA1A958EA3000E1D17 /* glad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D41A958EA3000E1D17 /* glad.cpp */; }; + FA0B7ADC1A958EA3000E1D17 /* glad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79D61A958EA3000E1D17 /* glad.hpp */; }; + FA0B7ADD1A958EA3000E1D17 /* gladfuncs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79D71A958EA3000E1D17 /* gladfuncs.hpp */; }; + FA0B7ADE1A958EA3000E1D17 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D91A958EA3000E1D17 /* lodepng.cpp */; }; + FA0B7ADF1A958EA3000E1D17 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D91A958EA3000E1D17 /* lodepng.cpp */; }; + FA0B7AE01A958EA3000E1D17 /* lodepng.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79DA1A958EA3000E1D17 /* lodepng.h */; }; + FA0B7AE11A958EA3000E1D17 /* auxiliar.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79DD1A958EA3000E1D17 /* auxiliar.c */; }; + FA0B7AE21A958EA3000E1D17 /* auxiliar.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79DD1A958EA3000E1D17 /* auxiliar.c */; }; + FA0B7AE41A958EA3000E1D17 /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79DF1A958EA3000E1D17 /* buffer.c */; }; + FA0B7AE51A958EA3000E1D17 /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79DF1A958EA3000E1D17 /* buffer.c */; }; + FA0B7AE71A958EA3000E1D17 /* except.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E11A958EA3000E1D17 /* except.c */; }; + FA0B7AE81A958EA3000E1D17 /* except.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E11A958EA3000E1D17 /* except.c */; }; + FA0B7AEE1A958EA3000E1D17 /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E71A958EA3000E1D17 /* inet.c */; }; + FA0B7AEF1A958EA3000E1D17 /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E71A958EA3000E1D17 /* inet.c */; }; + FA0B7AF11A958EA3000E1D17 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E91A958EA3000E1D17 /* io.c */; }; + FA0B7AF21A958EA3000E1D17 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E91A958EA3000E1D17 /* io.c */; }; + FA0B7AF71A958EA3000E1D17 /* luasocket.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79EE1A958EA3000E1D17 /* luasocket.c */; }; + FA0B7AF81A958EA3000E1D17 /* luasocket.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79EE1A958EA3000E1D17 /* luasocket.c */; }; + FA0B7AFA1A958EA3000E1D17 /* mime.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F01A958EA3000E1D17 /* mime.c */; }; + FA0B7AFB1A958EA3000E1D17 /* mime.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F01A958EA3000E1D17 /* mime.c */; }; + FA0B7AFF1A958EA3000E1D17 /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F41A958EA3000E1D17 /* options.c */; }; + FA0B7B001A958EA3000E1D17 /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F41A958EA3000E1D17 /* options.c */; }; + FA0B7B031A958EA3000E1D17 /* select.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F71A958EA3000E1D17 /* select.c */; }; + FA0B7B041A958EA3000E1D17 /* select.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F71A958EA3000E1D17 /* select.c */; }; + FA0B7B0B1A958EA3000E1D17 /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79FE1A958EA3000E1D17 /* tcp.c */; }; + FA0B7B0C1A958EA3000E1D17 /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79FE1A958EA3000E1D17 /* tcp.c */; }; + FA0B7B0E1A958EA3000E1D17 /* timeout.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A001A958EA3000E1D17 /* timeout.c */; }; + FA0B7B0F1A958EA3000E1D17 /* timeout.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A001A958EA3000E1D17 /* timeout.c */; }; + FA0B7B131A958EA3000E1D17 /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A041A958EA3000E1D17 /* udp.c */; }; + FA0B7B141A958EA3000E1D17 /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A041A958EA3000E1D17 /* udp.c */; }; + FA0B7B161A958EA3000E1D17 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A061A958EA3000E1D17 /* unix.c */; }; + FA0B7B171A958EA3000E1D17 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A061A958EA3000E1D17 /* unix.c */; }; + FA0B7B1B1A958EA3000E1D17 /* usocket.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A0A1A958EA3000E1D17 /* usocket.c */; }; + FA0B7B1C1A958EA3000E1D17 /* usocket.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A0A1A958EA3000E1D17 /* usocket.c */; }; + FA0B7B211A958EA3000E1D17 /* luasocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A0E1A958EA3000E1D17 /* luasocket.cpp */; }; + FA0B7B221A958EA3000E1D17 /* luasocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A0E1A958EA3000E1D17 /* luasocket.cpp */; }; + FA0B7B231A958EA3000E1D17 /* luasocket.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A0F1A958EA3000E1D17 /* luasocket.h */; }; + FA0B7B241A958EA3000E1D17 /* lprefix.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A111A958EA3000E1D17 /* lprefix.h */; }; + FA0B7B251A958EA3000E1D17 /* lutf8lib.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A121A958EA3000E1D17 /* lutf8lib.c */; }; + FA0B7B261A958EA3000E1D17 /* lutf8lib.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A121A958EA3000E1D17 /* lutf8lib.c */; }; + FA0B7B271A958EA3000E1D17 /* lutf8lib.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A131A958EA3000E1D17 /* lutf8lib.h */; }; + FA0B7B281A958EA3000E1D17 /* simplexnoise1234.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A151A958EA3000E1D17 /* simplexnoise1234.cpp */; }; + FA0B7B291A958EA3000E1D17 /* simplexnoise1234.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A151A958EA3000E1D17 /* simplexnoise1234.cpp */; }; + FA0B7B2A1A958EA3000E1D17 /* simplexnoise1234.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A161A958EA3000E1D17 /* simplexnoise1234.h */; }; + FA0B7B2B1A958EA3000E1D17 /* stb_image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A181A958EA3000E1D17 /* stb_image.h */; }; + FA0B7B2C1A958EA3000E1D17 /* checked.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A1B1A958EA3000E1D17 /* checked.h */; }; + FA0B7B2D1A958EA3000E1D17 /* core.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A1C1A958EA3000E1D17 /* core.h */; }; + FA0B7B2E1A958EA3000E1D17 /* unchecked.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A1D1A958EA3000E1D17 /* unchecked.h */; }; + FA0B7B2F1A958EA3000E1D17 /* utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A1E1A958EA3000E1D17 /* utf8.h */; }; + FA0B7B301A958EA3000E1D17 /* wuff.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A201A958EA3000E1D17 /* wuff.c */; }; + FA0B7B311A958EA3000E1D17 /* wuff.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A201A958EA3000E1D17 /* wuff.c */; }; + FA0B7B321A958EA3000E1D17 /* wuff.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A211A958EA3000E1D17 /* wuff.h */; }; + FA0B7B331A958EA3000E1D17 /* wuff_config.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A221A958EA3000E1D17 /* wuff_config.h */; }; + FA0B7B341A958EA3000E1D17 /* wuff_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A231A958EA3000E1D17 /* wuff_convert.c */; }; + FA0B7B351A958EA3000E1D17 /* wuff_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A231A958EA3000E1D17 /* wuff_convert.c */; }; + FA0B7B361A958EA3000E1D17 /* wuff_convert.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A241A958EA3000E1D17 /* wuff_convert.h */; }; + FA0B7B371A958EA3000E1D17 /* wuff_internal.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A251A958EA3000E1D17 /* wuff_internal.c */; }; + FA0B7B381A958EA3000E1D17 /* wuff_internal.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A251A958EA3000E1D17 /* wuff_internal.c */; }; + FA0B7B391A958EA3000E1D17 /* wuff_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A261A958EA3000E1D17 /* wuff_internal.h */; }; + FA0B7B3A1A958EA3000E1D17 /* wuff_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A271A958EA3000E1D17 /* wuff_memory.c */; }; + FA0B7B3B1A958EA3000E1D17 /* wuff_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A271A958EA3000E1D17 /* wuff_memory.c */; }; + FA0B7CCD1A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B3E1A95902C000E1D17 /* Audio.cpp */; }; + FA0B7CCE1A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B3E1A95902C000E1D17 /* Audio.cpp */; }; + FA0B7CCF1A95902C000E1D17 /* Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B3F1A95902C000E1D17 /* Audio.h */; }; + FA0B7CD01A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B411A95902C000E1D17 /* Audio.cpp */; }; + FA0B7CD11A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B411A95902C000E1D17 /* Audio.cpp */; }; + FA0B7CD21A95902C000E1D17 /* Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B421A95902C000E1D17 /* Audio.h */; }; + FA0B7CD31A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B431A95902C000E1D17 /* Source.cpp */; }; + FA0B7CD41A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B431A95902C000E1D17 /* Source.cpp */; }; + FA0B7CD51A95902C000E1D17 /* Source.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B441A95902C000E1D17 /* Source.h */; }; + FA0B7CD61A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B461A95902C000E1D17 /* Audio.cpp */; }; + FA0B7CD71A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B461A95902C000E1D17 /* Audio.cpp */; }; + FA0B7CD81A95902C000E1D17 /* Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B471A95902C000E1D17 /* Audio.h */; }; + FA0B7CD91A95902C000E1D17 /* Pool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B481A95902C000E1D17 /* Pool.cpp */; }; + FA0B7CDA1A95902C000E1D17 /* Pool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B481A95902C000E1D17 /* Pool.cpp */; }; + FA0B7CDB1A95902C000E1D17 /* Pool.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B491A95902C000E1D17 /* Pool.h */; }; + FA0B7CDC1A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4A1A95902C000E1D17 /* Source.cpp */; }; + FA0B7CDD1A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4A1A95902C000E1D17 /* Source.cpp */; }; + FA0B7CDE1A95902C000E1D17 /* Source.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B4B1A95902C000E1D17 /* Source.h */; }; + FA0B7CDF1A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4C1A95902C000E1D17 /* Source.cpp */; }; + FA0B7CE01A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4C1A95902C000E1D17 /* Source.cpp */; }; + FA0B7CE11A95902C000E1D17 /* Source.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B4D1A95902C000E1D17 /* Source.h */; }; + FA0B7CE21A95902C000E1D17 /* wrap_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4E1A95902C000E1D17 /* wrap_Audio.cpp */; }; + FA0B7CE31A95902C000E1D17 /* wrap_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4E1A95902C000E1D17 /* wrap_Audio.cpp */; }; + FA0B7CE41A95902C000E1D17 /* wrap_Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B4F1A95902C000E1D17 /* wrap_Audio.h */; }; + FA0B7CE51A95902C000E1D17 /* wrap_Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B501A95902C000E1D17 /* wrap_Source.cpp */; }; + FA0B7CE61A95902C000E1D17 /* wrap_Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B501A95902C000E1D17 /* wrap_Source.cpp */; }; + FA0B7CE71A95902C000E1D17 /* wrap_Source.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B511A95902C000E1D17 /* wrap_Source.h */; }; + FA0B7CE81A95902C000E1D17 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B531A95902C000E1D17 /* Event.cpp */; }; + FA0B7CE91A95902C000E1D17 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B531A95902C000E1D17 /* Event.cpp */; }; + FA0B7CEA1A95902C000E1D17 /* Event.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B541A95902C000E1D17 /* Event.h */; }; + FA0B7CEB1A95902C000E1D17 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B561A95902C000E1D17 /* Event.cpp */; }; + FA0B7CEC1A95902C000E1D17 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B561A95902C000E1D17 /* Event.cpp */; }; + FA0B7CED1A95902C000E1D17 /* Event.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B571A95902C000E1D17 /* Event.h */; }; + FA0B7CF11A95902C000E1D17 /* DroppedFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5B1A95902C000E1D17 /* DroppedFile.cpp */; }; + FA0B7CF21A95902C000E1D17 /* DroppedFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5B1A95902C000E1D17 /* DroppedFile.cpp */; }; + FA0B7CF31A95902C000E1D17 /* DroppedFile.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B5C1A95902C000E1D17 /* DroppedFile.h */; }; + FA0B7CF41A95902C000E1D17 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5D1A95902C000E1D17 /* File.cpp */; }; + FA0B7CF51A95902C000E1D17 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5D1A95902C000E1D17 /* File.cpp */; }; + FA0B7CF61A95902C000E1D17 /* File.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B5E1A95902C000E1D17 /* File.h */; }; + FA0B7CF71A95902C000E1D17 /* FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5F1A95902C000E1D17 /* FileData.cpp */; }; + FA0B7CF81A95902C000E1D17 /* FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5F1A95902C000E1D17 /* FileData.cpp */; }; + FA0B7CF91A95902C000E1D17 /* FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B601A95902C000E1D17 /* FileData.h */; }; + FA0B7CFA1A95902C000E1D17 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B611A95902C000E1D17 /* Filesystem.cpp */; }; + FA0B7CFB1A95902C000E1D17 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B611A95902C000E1D17 /* Filesystem.cpp */; }; + FA0B7CFC1A95902C000E1D17 /* Filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B621A95902C000E1D17 /* Filesystem.h */; }; + FA0B7CFD1A95902C000E1D17 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B641A95902C000E1D17 /* File.cpp */; }; + FA0B7CFE1A95902C000E1D17 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B641A95902C000E1D17 /* File.cpp */; }; + FA0B7CFF1A95902C000E1D17 /* File.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B651A95902C000E1D17 /* File.h */; }; + FA0B7D001A95902C000E1D17 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B661A95902C000E1D17 /* Filesystem.cpp */; }; + FA0B7D011A95902C000E1D17 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B661A95902C000E1D17 /* Filesystem.cpp */; }; + FA0B7D021A95902C000E1D17 /* Filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B671A95902C000E1D17 /* Filesystem.h */; }; + FA0B7D031A95902C000E1D17 /* wrap_DroppedFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B681A95902C000E1D17 /* wrap_DroppedFile.cpp */; }; + FA0B7D041A95902C000E1D17 /* wrap_DroppedFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B681A95902C000E1D17 /* wrap_DroppedFile.cpp */; }; + FA0B7D051A95902C000E1D17 /* wrap_DroppedFile.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B691A95902C000E1D17 /* wrap_DroppedFile.h */; }; + FA0B7D061A95902C000E1D17 /* wrap_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6A1A95902C000E1D17 /* wrap_File.cpp */; }; + FA0B7D071A95902C000E1D17 /* wrap_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6A1A95902C000E1D17 /* wrap_File.cpp */; }; + FA0B7D081A95902C000E1D17 /* wrap_File.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B6B1A95902C000E1D17 /* wrap_File.h */; }; + FA0B7D091A95902C000E1D17 /* wrap_FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6C1A95902C000E1D17 /* wrap_FileData.cpp */; }; + FA0B7D0A1A95902C000E1D17 /* wrap_FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6C1A95902C000E1D17 /* wrap_FileData.cpp */; }; + FA0B7D0B1A95902C000E1D17 /* wrap_FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B6D1A95902C000E1D17 /* wrap_FileData.h */; }; + FA0B7D0C1A95902C000E1D17 /* wrap_Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6E1A95902C000E1D17 /* wrap_Filesystem.cpp */; }; + FA0B7D0D1A95902C000E1D17 /* wrap_Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6E1A95902C000E1D17 /* wrap_Filesystem.cpp */; }; + FA0B7D0E1A95902C000E1D17 /* wrap_Filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B6F1A95902C000E1D17 /* wrap_Filesystem.h */; }; + FA0B7D0F1A95902C000E1D17 /* BMFontRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B711A95902C000E1D17 /* BMFontRasterizer.cpp */; }; + FA0B7D101A95902C000E1D17 /* BMFontRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B711A95902C000E1D17 /* BMFontRasterizer.cpp */; }; + FA0B7D111A95902C000E1D17 /* BMFontRasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B721A95902C000E1D17 /* BMFontRasterizer.h */; }; + FA0B7D121A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B731A95902C000E1D17 /* Font.cpp */; }; + FA0B7D131A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B731A95902C000E1D17 /* Font.cpp */; }; + FA0B7D141A95902C000E1D17 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B741A95902C000E1D17 /* Font.h */; }; + FA0B7D151A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B761A95902C000E1D17 /* Font.cpp */; }; + FA0B7D161A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B761A95902C000E1D17 /* Font.cpp */; }; + FA0B7D171A95902C000E1D17 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B771A95902C000E1D17 /* Font.h */; }; + FA0B7D181A95902C000E1D17 /* TrueTypeRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B781A95902C000E1D17 /* TrueTypeRasterizer.cpp */; }; + FA0B7D191A95902C000E1D17 /* TrueTypeRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B781A95902C000E1D17 /* TrueTypeRasterizer.cpp */; }; + FA0B7D1A1A95902C000E1D17 /* TrueTypeRasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B791A95902C000E1D17 /* TrueTypeRasterizer.h */; }; + FA0B7D1B1A95902C000E1D17 /* GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7A1A95902C000E1D17 /* GlyphData.cpp */; }; + FA0B7D1C1A95902C000E1D17 /* GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7A1A95902C000E1D17 /* GlyphData.cpp */; }; + FA0B7D1D1A95902C000E1D17 /* GlyphData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B7B1A95902C000E1D17 /* GlyphData.h */; }; + FA0B7D1E1A95902C000E1D17 /* ImageRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7C1A95902C000E1D17 /* ImageRasterizer.cpp */; }; + FA0B7D1F1A95902C000E1D17 /* ImageRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7C1A95902C000E1D17 /* ImageRasterizer.cpp */; }; + FA0B7D201A95902C000E1D17 /* ImageRasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B7D1A95902C000E1D17 /* ImageRasterizer.h */; }; + FA0B7D211A95902C000E1D17 /* Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7E1A95902C000E1D17 /* Rasterizer.cpp */; }; + FA0B7D221A95902C000E1D17 /* Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7E1A95902C000E1D17 /* Rasterizer.cpp */; }; + FA0B7D231A95902C000E1D17 /* Rasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B7F1A95902C000E1D17 /* Rasterizer.h */; }; + FA0B7D241A95902C000E1D17 /* Vera.ttf.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B801A95902C000E1D17 /* Vera.ttf.h */; }; + FA0B7D251A95902C000E1D17 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B811A95902C000E1D17 /* wrap_Font.cpp */; }; + FA0B7D261A95902C000E1D17 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B811A95902C000E1D17 /* wrap_Font.cpp */; }; + FA0B7D271A95902C000E1D17 /* wrap_Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B821A95902C000E1D17 /* wrap_Font.h */; }; + FA0B7D281A95902C000E1D17 /* wrap_GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B831A95902C000E1D17 /* wrap_GlyphData.cpp */; }; + FA0B7D291A95902C000E1D17 /* wrap_GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B831A95902C000E1D17 /* wrap_GlyphData.cpp */; }; + FA0B7D2A1A95902C000E1D17 /* wrap_GlyphData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B841A95902C000E1D17 /* wrap_GlyphData.h */; }; + FA0B7D2B1A95902C000E1D17 /* wrap_Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B851A95902C000E1D17 /* wrap_Rasterizer.cpp */; }; + FA0B7D2C1A95902C000E1D17 /* wrap_Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B851A95902C000E1D17 /* wrap_Rasterizer.cpp */; }; + FA0B7D2D1A95902C000E1D17 /* wrap_Rasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B861A95902C000E1D17 /* wrap_Rasterizer.h */; }; + FA0B7D2E1A95902C000E1D17 /* Color.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B881A95902C000E1D17 /* Color.h */; }; + FA0B7D2F1A95902C000E1D17 /* Drawable.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B891A95902C000E1D17 /* Drawable.h */; }; + FA0B7D301A95902C000E1D17 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8A1A95902C000E1D17 /* Graphics.cpp */; }; + FA0B7D311A95902C000E1D17 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8A1A95902C000E1D17 /* Graphics.cpp */; }; + FA0B7D321A95902C000E1D17 /* Graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B8B1A95902C000E1D17 /* Graphics.h */; }; + FA0B7D331A95902C000E1D17 /* Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8D1A95902C000E1D17 /* Canvas.cpp */; }; + FA0B7D341A95902C000E1D17 /* Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8D1A95902C000E1D17 /* Canvas.cpp */; }; + FA0B7D351A95902C000E1D17 /* Canvas.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B8E1A95902C000E1D17 /* Canvas.h */; }; + FA0B7D361A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8F1A95902C000E1D17 /* Font.cpp */; }; + FA0B7D371A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8F1A95902C000E1D17 /* Font.cpp */; }; + FA0B7D381A95902C000E1D17 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B901A95902C000E1D17 /* Font.h */; }; + FA0B7D391A95902C000E1D17 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B911A95902C000E1D17 /* Graphics.cpp */; }; + FA0B7D3A1A95902C000E1D17 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B911A95902C000E1D17 /* Graphics.cpp */; }; + FA0B7D3B1A95902C000E1D17 /* Graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B921A95902C000E1D17 /* Graphics.h */; }; + FA0B7D3C1A95902C000E1D17 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B931A95902C000E1D17 /* Image.cpp */; }; + FA0B7D3D1A95902C000E1D17 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B931A95902C000E1D17 /* Image.cpp */; }; + FA0B7D3E1A95902C000E1D17 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B941A95902C000E1D17 /* Image.h */; }; + FA0B7D3F1A95902C000E1D17 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B951A95902C000E1D17 /* Mesh.cpp */; }; + FA0B7D401A95902C000E1D17 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B951A95902C000E1D17 /* Mesh.cpp */; }; + FA0B7D411A95902C000E1D17 /* Mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B961A95902C000E1D17 /* Mesh.h */; }; + FA0B7D421A95902C000E1D17 /* OpenGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B971A95902C000E1D17 /* OpenGL.cpp */; }; + FA0B7D431A95902C000E1D17 /* OpenGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B971A95902C000E1D17 /* OpenGL.cpp */; }; + FA0B7D441A95902C000E1D17 /* OpenGL.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B981A95902C000E1D17 /* OpenGL.h */; }; + FA0B7D451A95902C000E1D17 /* ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B991A95902C000E1D17 /* ParticleSystem.cpp */; }; + FA0B7D461A95902C000E1D17 /* ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B991A95902C000E1D17 /* ParticleSystem.cpp */; }; + FA0B7D471A95902C000E1D17 /* ParticleSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B9A1A95902C000E1D17 /* ParticleSystem.h */; }; + FA0B7D481A95902C000E1D17 /* Polyline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9B1A95902C000E1D17 /* Polyline.cpp */; }; + FA0B7D491A95902C000E1D17 /* Polyline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9B1A95902C000E1D17 /* Polyline.cpp */; }; + FA0B7D4A1A95902C000E1D17 /* Polyline.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B9C1A95902C000E1D17 /* Polyline.h */; }; + FA0B7D4B1A95902C000E1D17 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9D1A95902C000E1D17 /* Shader.cpp */; }; + FA0B7D4C1A95902C000E1D17 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9D1A95902C000E1D17 /* Shader.cpp */; }; + FA0B7D4D1A95902C000E1D17 /* Shader.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B9E1A95902C000E1D17 /* Shader.h */; }; + FA0B7D4E1A95902C000E1D17 /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9F1A95902C000E1D17 /* SpriteBatch.cpp */; }; + FA0B7D4F1A95902C000E1D17 /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9F1A95902C000E1D17 /* SpriteBatch.cpp */; }; + FA0B7D501A95902C000E1D17 /* SpriteBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA01A95902C000E1D17 /* SpriteBatch.h */; }; + FA0B7D511A95902C000E1D17 /* Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA11A95902C000E1D17 /* Text.cpp */; }; + FA0B7D521A95902C000E1D17 /* Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA11A95902C000E1D17 /* Text.cpp */; }; + FA0B7D531A95902C000E1D17 /* Text.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA21A95902C000E1D17 /* Text.h */; }; + FA0B7D551A95902C000E1D17 /* GLBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA41A95902C000E1D17 /* GLBuffer.cpp */; }; + FA0B7D561A95902C000E1D17 /* GLBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA41A95902C000E1D17 /* GLBuffer.cpp */; }; + FA0B7D571A95902C000E1D17 /* GLBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA51A95902C000E1D17 /* GLBuffer.h */; }; + FA0B7D581A95902C000E1D17 /* wrap_Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA61A95902C000E1D17 /* wrap_Canvas.cpp */; }; + FA0B7D591A95902C000E1D17 /* wrap_Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA61A95902C000E1D17 /* wrap_Canvas.cpp */; }; + FA0B7D5A1A95902C000E1D17 /* wrap_Canvas.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA71A95902C000E1D17 /* wrap_Canvas.h */; }; + FA0B7D5B1A95902C000E1D17 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA81A95902C000E1D17 /* wrap_Font.cpp */; }; + FA0B7D5C1A95902C000E1D17 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA81A95902C000E1D17 /* wrap_Font.cpp */; }; + FA0B7D5D1A95902C000E1D17 /* wrap_Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA91A95902C000E1D17 /* wrap_Font.h */; }; + FA0B7D5E1A95902C000E1D17 /* wrap_Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAA1A95902C000E1D17 /* wrap_Graphics.cpp */; }; + FA0B7D5F1A95902C000E1D17 /* wrap_Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAA1A95902C000E1D17 /* wrap_Graphics.cpp */; }; + FA0B7D601A95902C000E1D17 /* wrap_Graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BAB1A95902C000E1D17 /* wrap_Graphics.h */; }; + FA0B7D611A95902C000E1D17 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAC1A95902C000E1D17 /* wrap_Image.cpp */; }; + FA0B7D621A95902C000E1D17 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAC1A95902C000E1D17 /* wrap_Image.cpp */; }; + FA0B7D631A95902C000E1D17 /* wrap_Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BAD1A95902C000E1D17 /* wrap_Image.h */; }; + FA0B7D641A95902C000E1D17 /* wrap_Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAE1A95902C000E1D17 /* wrap_Mesh.cpp */; }; + FA0B7D651A95902C000E1D17 /* wrap_Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAE1A95902C000E1D17 /* wrap_Mesh.cpp */; }; + FA0B7D661A95902C000E1D17 /* wrap_Mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BAF1A95902C000E1D17 /* wrap_Mesh.h */; }; + FA0B7D671A95902C000E1D17 /* wrap_ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB01A95902C000E1D17 /* wrap_ParticleSystem.cpp */; }; + FA0B7D681A95902C000E1D17 /* wrap_ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB01A95902C000E1D17 /* wrap_ParticleSystem.cpp */; }; + FA0B7D691A95902C000E1D17 /* wrap_ParticleSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BB11A95902C000E1D17 /* wrap_ParticleSystem.h */; }; + FA0B7D6D1A95902C000E1D17 /* wrap_Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB41A95902C000E1D17 /* wrap_Shader.cpp */; }; + FA0B7D6E1A95902C000E1D17 /* wrap_Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB41A95902C000E1D17 /* wrap_Shader.cpp */; }; + FA0B7D6F1A95902C000E1D17 /* wrap_Shader.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BB51A95902C000E1D17 /* wrap_Shader.h */; }; + FA0B7D701A95902C000E1D17 /* wrap_SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB61A95902C000E1D17 /* wrap_SpriteBatch.cpp */; }; + FA0B7D711A95902C000E1D17 /* wrap_SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB61A95902C000E1D17 /* wrap_SpriteBatch.cpp */; }; + FA0B7D721A95902C000E1D17 /* wrap_SpriteBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BB71A95902C000E1D17 /* wrap_SpriteBatch.h */; }; + FA0B7D731A95902C000E1D17 /* wrap_Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB81A95902C000E1D17 /* wrap_Text.cpp */; }; + FA0B7D741A95902C000E1D17 /* wrap_Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB81A95902C000E1D17 /* wrap_Text.cpp */; }; + FA0B7D751A95902C000E1D17 /* wrap_Text.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BB91A95902C000E1D17 /* wrap_Text.h */; }; + FA0B7D791A95902C000E1D17 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BBC1A95902C000E1D17 /* Quad.cpp */; }; + FA0B7D7A1A95902C000E1D17 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BBC1A95902C000E1D17 /* Quad.cpp */; }; + FA0B7D7B1A95902C000E1D17 /* Quad.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BBD1A95902C000E1D17 /* Quad.h */; }; + FA0B7D7C1A95902C000E1D17 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BBE1A95902C000E1D17 /* Texture.cpp */; }; + FA0B7D7D1A95902C000E1D17 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BBE1A95902C000E1D17 /* Texture.cpp */; }; + FA0B7D7E1A95902C000E1D17 /* Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BBF1A95902C000E1D17 /* Texture.h */; }; + FA0B7D7F1A95902C000E1D17 /* Volatile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC01A95902C000E1D17 /* Volatile.cpp */; }; + FA0B7D801A95902C000E1D17 /* Volatile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC01A95902C000E1D17 /* Volatile.cpp */; }; + FA0B7D811A95902C000E1D17 /* Volatile.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BC11A95902C000E1D17 /* Volatile.h */; }; + FA0B7D821A95902C000E1D17 /* CompressedImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC31A95902C000E1D17 /* CompressedImageData.cpp */; }; + FA0B7D831A95902C000E1D17 /* CompressedImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC31A95902C000E1D17 /* CompressedImageData.cpp */; }; + FA0B7D841A95902C000E1D17 /* CompressedImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BC41A95902C000E1D17 /* CompressedImageData.h */; }; + FA0B7D851A95902C000E1D17 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BC51A95902C000E1D17 /* Image.h */; }; + FA0B7D861A95902C000E1D17 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC61A95902C000E1D17 /* ImageData.cpp */; }; + FA0B7D871A95902C000E1D17 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC61A95902C000E1D17 /* ImageData.cpp */; }; + FA0B7D881A95902C000E1D17 /* ImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BC71A95902C000E1D17 /* ImageData.h */; }; + FA0B7D891A95902C000E1D17 /* CompressedImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC91A95902C000E1D17 /* CompressedImageData.cpp */; }; + FA0B7D8A1A95902C000E1D17 /* CompressedImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC91A95902C000E1D17 /* CompressedImageData.cpp */; }; + FA0B7D8B1A95902C000E1D17 /* CompressedImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BCA1A95902C000E1D17 /* CompressedImageData.h */; }; + FA0B7D8C1A95902C000E1D17 /* CompressedFormatHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BCB1A95902C000E1D17 /* CompressedFormatHandler.h */; }; + FA0B7D8D1A95902C000E1D17 /* ddsHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BCC1A95902C000E1D17 /* ddsHandler.cpp */; }; + FA0B7D8E1A95902C000E1D17 /* ddsHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BCC1A95902C000E1D17 /* ddsHandler.cpp */; }; + FA0B7D8F1A95902C000E1D17 /* ddsHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BCD1A95902C000E1D17 /* ddsHandler.h */; }; + FA0B7D901A95902C000E1D17 /* FormatHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BCE1A95902C000E1D17 /* FormatHandler.cpp */; }; + FA0B7D911A95902C000E1D17 /* FormatHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BCE1A95902C000E1D17 /* FormatHandler.cpp */; }; + FA0B7D921A95902C000E1D17 /* FormatHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BCF1A95902C000E1D17 /* FormatHandler.h */; }; + FA0B7D931A95902C000E1D17 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD01A95902C000E1D17 /* Image.cpp */; }; + FA0B7D941A95902C000E1D17 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD01A95902C000E1D17 /* Image.cpp */; }; + FA0B7D951A95902C000E1D17 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BD11A95902C000E1D17 /* Image.h */; }; + FA0B7D961A95902C000E1D17 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD21A95902C000E1D17 /* ImageData.cpp */; }; + FA0B7D971A95902C000E1D17 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD21A95902C000E1D17 /* ImageData.cpp */; }; + FA0B7D981A95902C000E1D17 /* ImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BD31A95902C000E1D17 /* ImageData.h */; }; + FA0B7D9F1A95902C000E1D17 /* KTXHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD81A95902C000E1D17 /* KTXHandler.cpp */; }; + FA0B7DA01A95902C000E1D17 /* KTXHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD81A95902C000E1D17 /* KTXHandler.cpp */; }; + FA0B7DA11A95902C000E1D17 /* KTXHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BD91A95902C000E1D17 /* KTXHandler.h */; }; + FA0B7DA21A95902C000E1D17 /* PKMHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDA1A95902C000E1D17 /* PKMHandler.cpp */; }; + FA0B7DA31A95902C000E1D17 /* PKMHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDA1A95902C000E1D17 /* PKMHandler.cpp */; }; + FA0B7DA41A95902C000E1D17 /* PKMHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BDB1A95902C000E1D17 /* PKMHandler.h */; }; + FA0B7DA51A95902C000E1D17 /* PNGHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDC1A95902C000E1D17 /* PNGHandler.cpp */; }; + FA0B7DA61A95902C000E1D17 /* PNGHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDC1A95902C000E1D17 /* PNGHandler.cpp */; }; + FA0B7DA71A95902C000E1D17 /* PNGHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BDD1A95902C000E1D17 /* PNGHandler.h */; }; + FA0B7DA81A95902C000E1D17 /* PVRHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDE1A95902C000E1D17 /* PVRHandler.cpp */; }; + FA0B7DA91A95902C000E1D17 /* PVRHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDE1A95902C000E1D17 /* PVRHandler.cpp */; }; + FA0B7DAA1A95902C000E1D17 /* PVRHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BDF1A95902C000E1D17 /* PVRHandler.h */; }; + FA0B7DAB1A95902C000E1D17 /* STBHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE01A95902C000E1D17 /* STBHandler.cpp */; }; + FA0B7DAC1A95902C000E1D17 /* STBHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE01A95902C000E1D17 /* STBHandler.cpp */; }; + FA0B7DAD1A95902C000E1D17 /* STBHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BE11A95902C000E1D17 /* STBHandler.h */; }; + FA0B7DAE1A95902C000E1D17 /* wrap_CompressedImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE21A95902C000E1D17 /* wrap_CompressedImageData.cpp */; }; + FA0B7DAF1A95902C000E1D17 /* wrap_CompressedImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE21A95902C000E1D17 /* wrap_CompressedImageData.cpp */; }; + FA0B7DB01A95902C000E1D17 /* wrap_CompressedImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BE31A95902C000E1D17 /* wrap_CompressedImageData.h */; }; + FA0B7DB11A95902C000E1D17 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE41A95902C000E1D17 /* wrap_Image.cpp */; }; + FA0B7DB21A95902C000E1D17 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE41A95902C000E1D17 /* wrap_Image.cpp */; }; + FA0B7DB31A95902C000E1D17 /* wrap_Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BE51A95902C000E1D17 /* wrap_Image.h */; }; + FA0B7DB41A95902C000E1D17 /* wrap_ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE61A95902C000E1D17 /* wrap_ImageData.cpp */; }; + FA0B7DB51A95902C000E1D17 /* wrap_ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE61A95902C000E1D17 /* wrap_ImageData.cpp */; }; + FA0B7DB61A95902C000E1D17 /* wrap_ImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BE71A95902C000E1D17 /* wrap_ImageData.h */; }; + FA0B7DB71A95902C000E1D17 /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE91A95902C000E1D17 /* Joystick.cpp */; }; + FA0B7DB81A95902C000E1D17 /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE91A95902C000E1D17 /* Joystick.cpp */; }; + FA0B7DB91A95902C000E1D17 /* Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BEA1A95902C000E1D17 /* Joystick.h */; }; + FA0B7DBA1A95902C000E1D17 /* JoystickModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BEB1A95902C000E1D17 /* JoystickModule.h */; }; + FA0B7DBB1A95902C000E1D17 /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BED1A95902C000E1D17 /* Joystick.cpp */; }; + FA0B7DBC1A95902C000E1D17 /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BED1A95902C000E1D17 /* Joystick.cpp */; }; + FA0B7DBD1A95902C000E1D17 /* Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BEE1A95902C000E1D17 /* Joystick.h */; }; + FA0B7DBE1A95902C000E1D17 /* JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BEF1A95902C000E1D17 /* JoystickModule.cpp */; }; + FA0B7DBF1A95902C000E1D17 /* JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BEF1A95902C000E1D17 /* JoystickModule.cpp */; }; + FA0B7DC01A95902C000E1D17 /* JoystickModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BF01A95902C000E1D17 /* JoystickModule.h */; }; + FA0B7DC11A95902C000E1D17 /* wrap_Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF11A95902C000E1D17 /* wrap_Joystick.cpp */; }; + FA0B7DC21A95902C000E1D17 /* wrap_Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF11A95902C000E1D17 /* wrap_Joystick.cpp */; }; + FA0B7DC31A95902C000E1D17 /* wrap_Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BF21A95902C000E1D17 /* wrap_Joystick.h */; }; + FA0B7DC41A95902C000E1D17 /* wrap_JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF31A95902C000E1D17 /* wrap_JoystickModule.cpp */; }; + FA0B7DC51A95902C000E1D17 /* wrap_JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF31A95902C000E1D17 /* wrap_JoystickModule.cpp */; }; + FA0B7DC61A95902C000E1D17 /* wrap_JoystickModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BF41A95902C000E1D17 /* wrap_JoystickModule.h */; }; + FA0B7DC71A95902C000E1D17 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF61A95902C000E1D17 /* Keyboard.cpp */; }; + FA0B7DC81A95902C000E1D17 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF61A95902C000E1D17 /* Keyboard.cpp */; }; + FA0B7DC91A95902C000E1D17 /* Keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BF71A95902C000E1D17 /* Keyboard.h */; }; + FA0B7DCA1A95902C000E1D17 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF91A95902C000E1D17 /* Keyboard.cpp */; }; + FA0B7DCB1A95902C000E1D17 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF91A95902C000E1D17 /* Keyboard.cpp */; }; + FA0B7DCC1A95902C000E1D17 /* Keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BFA1A95902C000E1D17 /* Keyboard.h */; }; + FA0B7DCD1A95902C000E1D17 /* wrap_Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BFB1A95902C000E1D17 /* wrap_Keyboard.cpp */; }; + FA0B7DCE1A95902C000E1D17 /* wrap_Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BFB1A95902C000E1D17 /* wrap_Keyboard.cpp */; }; + FA0B7DCF1A95902C000E1D17 /* wrap_Keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BFC1A95902C000E1D17 /* wrap_Keyboard.h */; }; + FA0B7DD01A95902C000E1D17 /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BFE1A95902C000E1D17 /* love.cpp */; }; + FA0B7DD11A95902C000E1D17 /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BFE1A95902C000E1D17 /* love.cpp */; }; + FA0B7DD21A95902C000E1D17 /* love.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BFF1A95902C000E1D17 /* love.h */; }; + FA0B7DD31A95902C000E1D17 /* BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C011A95902C000E1D17 /* BezierCurve.cpp */; }; + FA0B7DD41A95902C000E1D17 /* BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C011A95902C000E1D17 /* BezierCurve.cpp */; }; + FA0B7DD51A95902C000E1D17 /* BezierCurve.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C021A95902C000E1D17 /* BezierCurve.h */; }; + FA0B7DD61A95902C000E1D17 /* MathModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C031A95902C000E1D17 /* MathModule.cpp */; }; + FA0B7DD71A95902C000E1D17 /* MathModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C031A95902C000E1D17 /* MathModule.cpp */; }; + FA0B7DD81A95902C000E1D17 /* MathModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C041A95902C000E1D17 /* MathModule.h */; }; + FA0B7DD91A95902C000E1D17 /* RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C051A95902C000E1D17 /* RandomGenerator.cpp */; }; + FA0B7DDA1A95902C000E1D17 /* RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C051A95902C000E1D17 /* RandomGenerator.cpp */; }; + FA0B7DDB1A95902C000E1D17 /* RandomGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C061A95902C000E1D17 /* RandomGenerator.h */; }; + FA0B7DDC1A95902C000E1D17 /* wrap_BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C071A95902C000E1D17 /* wrap_BezierCurve.cpp */; }; + FA0B7DDD1A95902C000E1D17 /* wrap_BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C071A95902C000E1D17 /* wrap_BezierCurve.cpp */; }; + FA0B7DDE1A95902C000E1D17 /* wrap_BezierCurve.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C081A95902C000E1D17 /* wrap_BezierCurve.h */; }; + FA0B7DDF1A95902C000E1D17 /* wrap_Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C091A95902C000E1D17 /* wrap_Math.cpp */; }; + FA0B7DE01A95902C000E1D17 /* wrap_Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C091A95902C000E1D17 /* wrap_Math.cpp */; }; + FA0B7DE11A95902C000E1D17 /* wrap_Math.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C0A1A95902C000E1D17 /* wrap_Math.h */; }; + FA0B7DE21A95902C000E1D17 /* wrap_RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C0B1A95902C000E1D17 /* wrap_RandomGenerator.cpp */; }; + FA0B7DE31A95902C000E1D17 /* wrap_RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C0B1A95902C000E1D17 /* wrap_RandomGenerator.cpp */; }; + FA0B7DE41A95902C000E1D17 /* wrap_RandomGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C0C1A95902C000E1D17 /* wrap_RandomGenerator.h */; }; + FA0B7DE51A95902C000E1D17 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C0E1A95902C000E1D17 /* Cursor.cpp */; }; + FA0B7DE61A95902C000E1D17 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C0E1A95902C000E1D17 /* Cursor.cpp */; }; + FA0B7DE71A95902C000E1D17 /* Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C0F1A95902C000E1D17 /* Cursor.h */; }; + FA0B7DEA1A95902C000E1D17 /* Mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C111A95902C000E1D17 /* Mouse.h */; }; + FA0B7DEB1A95902C000E1D17 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C131A95902C000E1D17 /* Cursor.cpp */; }; + FA0B7DEC1A95902C000E1D17 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C131A95902C000E1D17 /* Cursor.cpp */; }; + FA0B7DED1A95902C000E1D17 /* Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C141A95902C000E1D17 /* Cursor.h */; }; + FA0B7DEE1A95902C000E1D17 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C151A95902C000E1D17 /* Mouse.cpp */; }; + FA0B7DEF1A95902C000E1D17 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C151A95902C000E1D17 /* Mouse.cpp */; }; + FA0B7DF01A95902C000E1D17 /* Mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C161A95902C000E1D17 /* Mouse.h */; }; + FA0B7DF11A95902C000E1D17 /* wrap_Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C171A95902C000E1D17 /* wrap_Cursor.cpp */; }; + FA0B7DF21A95902C000E1D17 /* wrap_Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C171A95902C000E1D17 /* wrap_Cursor.cpp */; }; + FA0B7DF31A95902C000E1D17 /* wrap_Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C181A95902C000E1D17 /* wrap_Cursor.h */; }; + FA0B7DF41A95902C000E1D17 /* wrap_Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C191A95902C000E1D17 /* wrap_Mouse.cpp */; }; + FA0B7DF51A95902C000E1D17 /* wrap_Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C191A95902C000E1D17 /* wrap_Mouse.cpp */; }; + FA0B7DF61A95902C000E1D17 /* wrap_Mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C1A1A95902C000E1D17 /* wrap_Mouse.h */; }; + FA0B7DF71A95902C000E1D17 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C1C1A95902C000E1D17 /* Body.cpp */; }; + FA0B7DF81A95902C000E1D17 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C1C1A95902C000E1D17 /* Body.cpp */; }; + FA0B7DF91A95902C000E1D17 /* Body.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C1D1A95902C000E1D17 /* Body.h */; }; + FA0B7DFA1A95902C000E1D17 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C1F1A95902C000E1D17 /* Body.cpp */; }; + FA0B7DFB1A95902C000E1D17 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C1F1A95902C000E1D17 /* Body.cpp */; }; + FA0B7DFC1A95902C000E1D17 /* Body.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C201A95902C000E1D17 /* Body.h */; }; + FA0B7DFD1A95902C000E1D17 /* ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C211A95902C000E1D17 /* ChainShape.cpp */; }; + FA0B7DFE1A95902C000E1D17 /* ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C211A95902C000E1D17 /* ChainShape.cpp */; }; + FA0B7DFF1A95902C000E1D17 /* ChainShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C221A95902C000E1D17 /* ChainShape.h */; }; + FA0B7E001A95902C000E1D17 /* CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C231A95902C000E1D17 /* CircleShape.cpp */; }; + FA0B7E011A95902C000E1D17 /* CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C231A95902C000E1D17 /* CircleShape.cpp */; }; + FA0B7E021A95902C000E1D17 /* CircleShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C241A95902C000E1D17 /* CircleShape.h */; }; + FA0B7E031A95902C000E1D17 /* Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C251A95902C000E1D17 /* Contact.cpp */; }; + FA0B7E041A95902C000E1D17 /* Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C251A95902C000E1D17 /* Contact.cpp */; }; + FA0B7E051A95902C000E1D17 /* Contact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C261A95902C000E1D17 /* Contact.h */; }; + FA0B7E061A95902C000E1D17 /* DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C271A95902C000E1D17 /* DistanceJoint.cpp */; }; + FA0B7E071A95902C000E1D17 /* DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C271A95902C000E1D17 /* DistanceJoint.cpp */; }; + FA0B7E081A95902C000E1D17 /* DistanceJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C281A95902C000E1D17 /* DistanceJoint.h */; }; + FA0B7E091A95902C000E1D17 /* EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C291A95902C000E1D17 /* EdgeShape.cpp */; }; + FA0B7E0A1A95902C000E1D17 /* EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C291A95902C000E1D17 /* EdgeShape.cpp */; }; + FA0B7E0B1A95902C000E1D17 /* EdgeShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C2A1A95902C000E1D17 /* EdgeShape.h */; }; + FA0B7E0C1A95902C000E1D17 /* Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2B1A95902C000E1D17 /* Fixture.cpp */; }; + FA0B7E0D1A95902C000E1D17 /* Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2B1A95902C000E1D17 /* Fixture.cpp */; }; + FA0B7E0E1A95902C000E1D17 /* Fixture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C2C1A95902C000E1D17 /* Fixture.h */; }; + FA0B7E0F1A95902C000E1D17 /* FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2D1A95902C000E1D17 /* FrictionJoint.cpp */; }; + FA0B7E101A95902C000E1D17 /* FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2D1A95902C000E1D17 /* FrictionJoint.cpp */; }; + FA0B7E111A95902C000E1D17 /* FrictionJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C2E1A95902C000E1D17 /* FrictionJoint.h */; }; + FA0B7E121A95902C000E1D17 /* GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2F1A95902C000E1D17 /* GearJoint.cpp */; }; + FA0B7E131A95902C000E1D17 /* GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2F1A95902C000E1D17 /* GearJoint.cpp */; }; + FA0B7E141A95902C000E1D17 /* GearJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C301A95902C000E1D17 /* GearJoint.h */; }; + FA0B7E151A95902C000E1D17 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C311A95902C000E1D17 /* Joint.cpp */; }; + FA0B7E161A95902C000E1D17 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C311A95902C000E1D17 /* Joint.cpp */; }; + FA0B7E171A95902C000E1D17 /* Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C321A95902C000E1D17 /* Joint.h */; }; + FA0B7E181A95902C000E1D17 /* MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C331A95902C000E1D17 /* MotorJoint.cpp */; }; + FA0B7E191A95902C000E1D17 /* MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C331A95902C000E1D17 /* MotorJoint.cpp */; }; + FA0B7E1A1A95902C000E1D17 /* MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C341A95902C000E1D17 /* MotorJoint.h */; }; + FA0B7E1B1A95902C000E1D17 /* MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C351A95902C000E1D17 /* MouseJoint.cpp */; }; + FA0B7E1C1A95902C000E1D17 /* MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C351A95902C000E1D17 /* MouseJoint.cpp */; }; + FA0B7E1D1A95902C000E1D17 /* MouseJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C361A95902C000E1D17 /* MouseJoint.h */; }; + FA0B7E1E1A95902C000E1D17 /* Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C371A95902C000E1D17 /* Physics.cpp */; }; + FA0B7E1F1A95902C000E1D17 /* Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C371A95902C000E1D17 /* Physics.cpp */; }; + FA0B7E201A95902C000E1D17 /* Physics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C381A95902C000E1D17 /* Physics.h */; }; + FA0B7E211A95902C000E1D17 /* PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C391A95902C000E1D17 /* PolygonShape.cpp */; }; + FA0B7E221A95902C000E1D17 /* PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C391A95902C000E1D17 /* PolygonShape.cpp */; }; + FA0B7E231A95902C000E1D17 /* PolygonShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C3A1A95902C000E1D17 /* PolygonShape.h */; }; + FA0B7E241A95902C000E1D17 /* PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3B1A95902C000E1D17 /* PrismaticJoint.cpp */; }; + FA0B7E251A95902C000E1D17 /* PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3B1A95902C000E1D17 /* PrismaticJoint.cpp */; }; + FA0B7E261A95902C000E1D17 /* PrismaticJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C3C1A95902C000E1D17 /* PrismaticJoint.h */; }; + FA0B7E271A95902C000E1D17 /* PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3D1A95902C000E1D17 /* PulleyJoint.cpp */; }; + FA0B7E281A95902C000E1D17 /* PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3D1A95902C000E1D17 /* PulleyJoint.cpp */; }; + FA0B7E291A95902C000E1D17 /* PulleyJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C3E1A95902C000E1D17 /* PulleyJoint.h */; }; + FA0B7E2A1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3F1A95902C000E1D17 /* RevoluteJoint.cpp */; }; + FA0B7E2B1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3F1A95902C000E1D17 /* RevoluteJoint.cpp */; }; + FA0B7E2C1A95902C000E1D17 /* RevoluteJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C401A95902C000E1D17 /* RevoluteJoint.h */; }; + FA0B7E2D1A95902C000E1D17 /* RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C411A95902C000E1D17 /* RopeJoint.cpp */; }; + FA0B7E2E1A95902C000E1D17 /* RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C411A95902C000E1D17 /* RopeJoint.cpp */; }; + FA0B7E2F1A95902C000E1D17 /* RopeJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C421A95902C000E1D17 /* RopeJoint.h */; }; + FA0B7E301A95902C000E1D17 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C431A95902C000E1D17 /* Shape.cpp */; }; + FA0B7E311A95902C000E1D17 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C431A95902C000E1D17 /* Shape.cpp */; }; + FA0B7E321A95902C000E1D17 /* Shape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C441A95902C000E1D17 /* Shape.h */; }; + FA0B7E331A95902C000E1D17 /* WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C451A95902C000E1D17 /* WeldJoint.cpp */; }; + FA0B7E341A95902C000E1D17 /* WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C451A95902C000E1D17 /* WeldJoint.cpp */; }; + FA0B7E351A95902C000E1D17 /* WeldJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C461A95902C000E1D17 /* WeldJoint.h */; }; + FA0B7E361A95902C000E1D17 /* WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C471A95902C000E1D17 /* WheelJoint.cpp */; }; + FA0B7E371A95902C000E1D17 /* WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C471A95902C000E1D17 /* WheelJoint.cpp */; }; + FA0B7E381A95902C000E1D17 /* WheelJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C481A95902C000E1D17 /* WheelJoint.h */; }; + FA0B7E391A95902C000E1D17 /* World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C491A95902C000E1D17 /* World.cpp */; }; + FA0B7E3A1A95902C000E1D17 /* World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C491A95902C000E1D17 /* World.cpp */; }; + FA0B7E3B1A95902C000E1D17 /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C4A1A95902C000E1D17 /* World.h */; }; + FA0B7E3C1A95902C000E1D17 /* wrap_Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4B1A95902C000E1D17 /* wrap_Body.cpp */; }; + FA0B7E3D1A95902C000E1D17 /* wrap_Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4B1A95902C000E1D17 /* wrap_Body.cpp */; }; + FA0B7E3E1A95902C000E1D17 /* wrap_Body.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C4C1A95902C000E1D17 /* wrap_Body.h */; }; + FA0B7E3F1A95902C000E1D17 /* wrap_ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4D1A95902C000E1D17 /* wrap_ChainShape.cpp */; }; + FA0B7E401A95902C000E1D17 /* wrap_ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4D1A95902C000E1D17 /* wrap_ChainShape.cpp */; }; + FA0B7E411A95902C000E1D17 /* wrap_ChainShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C4E1A95902C000E1D17 /* wrap_ChainShape.h */; }; + FA0B7E421A95902C000E1D17 /* wrap_CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4F1A95902C000E1D17 /* wrap_CircleShape.cpp */; }; + FA0B7E431A95902C000E1D17 /* wrap_CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4F1A95902C000E1D17 /* wrap_CircleShape.cpp */; }; + FA0B7E441A95902C000E1D17 /* wrap_CircleShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C501A95902C000E1D17 /* wrap_CircleShape.h */; }; + FA0B7E451A95902C000E1D17 /* wrap_Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C511A95902C000E1D17 /* wrap_Contact.cpp */; }; + FA0B7E461A95902C000E1D17 /* wrap_Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C511A95902C000E1D17 /* wrap_Contact.cpp */; }; + FA0B7E471A95902C000E1D17 /* wrap_Contact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C521A95902C000E1D17 /* wrap_Contact.h */; }; + FA0B7E481A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C531A95902C000E1D17 /* wrap_DistanceJoint.cpp */; }; + FA0B7E491A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C531A95902C000E1D17 /* wrap_DistanceJoint.cpp */; }; + FA0B7E4A1A95902C000E1D17 /* wrap_DistanceJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C541A95902C000E1D17 /* wrap_DistanceJoint.h */; }; + FA0B7E4B1A95902C000E1D17 /* wrap_EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C551A95902C000E1D17 /* wrap_EdgeShape.cpp */; }; + FA0B7E4C1A95902C000E1D17 /* wrap_EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C551A95902C000E1D17 /* wrap_EdgeShape.cpp */; }; + FA0B7E4D1A95902C000E1D17 /* wrap_EdgeShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C561A95902C000E1D17 /* wrap_EdgeShape.h */; }; + FA0B7E4E1A95902C000E1D17 /* wrap_Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C571A95902C000E1D17 /* wrap_Fixture.cpp */; }; + FA0B7E4F1A95902C000E1D17 /* wrap_Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C571A95902C000E1D17 /* wrap_Fixture.cpp */; }; + FA0B7E501A95902C000E1D17 /* wrap_Fixture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C581A95902C000E1D17 /* wrap_Fixture.h */; }; + FA0B7E511A95902C000E1D17 /* wrap_FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C591A95902C000E1D17 /* wrap_FrictionJoint.cpp */; }; + FA0B7E521A95902C000E1D17 /* wrap_FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C591A95902C000E1D17 /* wrap_FrictionJoint.cpp */; }; + FA0B7E531A95902C000E1D17 /* wrap_FrictionJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C5A1A95902C000E1D17 /* wrap_FrictionJoint.h */; }; + FA0B7E541A95902C000E1D17 /* wrap_GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5B1A95902C000E1D17 /* wrap_GearJoint.cpp */; }; + FA0B7E551A95902C000E1D17 /* wrap_GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5B1A95902C000E1D17 /* wrap_GearJoint.cpp */; }; + FA0B7E561A95902C000E1D17 /* wrap_GearJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C5C1A95902C000E1D17 /* wrap_GearJoint.h */; }; + FA0B7E571A95902C000E1D17 /* wrap_Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5D1A95902C000E1D17 /* wrap_Joint.cpp */; }; + FA0B7E581A95902C000E1D17 /* wrap_Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5D1A95902C000E1D17 /* wrap_Joint.cpp */; }; + FA0B7E591A95902C000E1D17 /* wrap_Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C5E1A95902C000E1D17 /* wrap_Joint.h */; }; + FA0B7E5A1A95902C000E1D17 /* wrap_MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5F1A95902C000E1D17 /* wrap_MotorJoint.cpp */; }; + FA0B7E5B1A95902C000E1D17 /* wrap_MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5F1A95902C000E1D17 /* wrap_MotorJoint.cpp */; }; + FA0B7E5C1A95902C000E1D17 /* wrap_MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C601A95902C000E1D17 /* wrap_MotorJoint.h */; }; + FA0B7E5D1A95902C000E1D17 /* wrap_MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C611A95902C000E1D17 /* wrap_MouseJoint.cpp */; }; + FA0B7E5E1A95902C000E1D17 /* wrap_MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C611A95902C000E1D17 /* wrap_MouseJoint.cpp */; }; + FA0B7E5F1A95902C000E1D17 /* wrap_MouseJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C621A95902C000E1D17 /* wrap_MouseJoint.h */; }; + FA0B7E601A95902C000E1D17 /* wrap_Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C631A95902C000E1D17 /* wrap_Physics.cpp */; }; + FA0B7E611A95902C000E1D17 /* wrap_Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C631A95902C000E1D17 /* wrap_Physics.cpp */; }; + FA0B7E621A95902C000E1D17 /* wrap_Physics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C641A95902C000E1D17 /* wrap_Physics.h */; }; + FA0B7E631A95902C000E1D17 /* wrap_PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C651A95902C000E1D17 /* wrap_PolygonShape.cpp */; }; + FA0B7E641A95902C000E1D17 /* wrap_PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C651A95902C000E1D17 /* wrap_PolygonShape.cpp */; }; + FA0B7E651A95902C000E1D17 /* wrap_PolygonShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C661A95902C000E1D17 /* wrap_PolygonShape.h */; }; + FA0B7E661A95902C000E1D17 /* wrap_PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C671A95902C000E1D17 /* wrap_PrismaticJoint.cpp */; }; + FA0B7E671A95902C000E1D17 /* wrap_PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C671A95902C000E1D17 /* wrap_PrismaticJoint.cpp */; }; + FA0B7E681A95902C000E1D17 /* wrap_PrismaticJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C681A95902C000E1D17 /* wrap_PrismaticJoint.h */; }; + FA0B7E691A95902C000E1D17 /* wrap_PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C691A95902C000E1D17 /* wrap_PulleyJoint.cpp */; }; + FA0B7E6A1A95902C000E1D17 /* wrap_PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C691A95902C000E1D17 /* wrap_PulleyJoint.cpp */; }; + FA0B7E6B1A95902C000E1D17 /* wrap_PulleyJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C6A1A95902C000E1D17 /* wrap_PulleyJoint.h */; }; + FA0B7E6C1A95902C000E1D17 /* wrap_RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6B1A95902C000E1D17 /* wrap_RevoluteJoint.cpp */; }; + FA0B7E6D1A95902C000E1D17 /* wrap_RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6B1A95902C000E1D17 /* wrap_RevoluteJoint.cpp */; }; + FA0B7E6E1A95902C000E1D17 /* wrap_RevoluteJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C6C1A95902C000E1D17 /* wrap_RevoluteJoint.h */; }; + FA0B7E6F1A95902C000E1D17 /* wrap_RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6D1A95902C000E1D17 /* wrap_RopeJoint.cpp */; }; + FA0B7E701A95902C000E1D17 /* wrap_RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6D1A95902C000E1D17 /* wrap_RopeJoint.cpp */; }; + FA0B7E711A95902C000E1D17 /* wrap_RopeJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C6E1A95902C000E1D17 /* wrap_RopeJoint.h */; }; + FA0B7E721A95902C000E1D17 /* wrap_Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6F1A95902C000E1D17 /* wrap_Shape.cpp */; }; + FA0B7E731A95902C000E1D17 /* wrap_Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6F1A95902C000E1D17 /* wrap_Shape.cpp */; }; + FA0B7E741A95902C000E1D17 /* wrap_Shape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C701A95902C000E1D17 /* wrap_Shape.h */; }; + FA0B7E751A95902C000E1D17 /* wrap_WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C711A95902C000E1D17 /* wrap_WeldJoint.cpp */; }; + FA0B7E761A95902C000E1D17 /* wrap_WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C711A95902C000E1D17 /* wrap_WeldJoint.cpp */; }; + FA0B7E771A95902C000E1D17 /* wrap_WeldJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C721A95902C000E1D17 /* wrap_WeldJoint.h */; }; + FA0B7E781A95902C000E1D17 /* wrap_WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C731A95902C000E1D17 /* wrap_WheelJoint.cpp */; }; + FA0B7E791A95902C000E1D17 /* wrap_WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C731A95902C000E1D17 /* wrap_WheelJoint.cpp */; }; + FA0B7E7A1A95902C000E1D17 /* wrap_WheelJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C741A95902C000E1D17 /* wrap_WheelJoint.h */; }; + FA0B7E7B1A95902C000E1D17 /* wrap_World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C751A95902C000E1D17 /* wrap_World.cpp */; }; + FA0B7E7C1A95902C000E1D17 /* wrap_World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C751A95902C000E1D17 /* wrap_World.cpp */; }; + FA0B7E7D1A95902C000E1D17 /* wrap_World.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C761A95902C000E1D17 /* wrap_World.h */; }; + FA0B7E7E1A95902C000E1D17 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C771A95902C000E1D17 /* Joint.cpp */; }; + FA0B7E7F1A95902C000E1D17 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C771A95902C000E1D17 /* Joint.cpp */; }; + FA0B7E801A95902C000E1D17 /* Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C781A95902C000E1D17 /* Joint.h */; }; + FA0B7E811A95902C000E1D17 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C791A95902C000E1D17 /* Shape.cpp */; }; + FA0B7E821A95902C000E1D17 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C791A95902C000E1D17 /* Shape.cpp */; }; + FA0B7E831A95902C000E1D17 /* Shape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C7A1A95902C000E1D17 /* Shape.h */; }; + FA0B7E841A95902C000E1D17 /* Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C7C1A95902C000E1D17 /* Decoder.h */; }; + FA0B7E851A95902C000E1D17 /* CoreAudioDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C7E1A95902C000E1D17 /* CoreAudioDecoder.cpp */; }; + FA0B7E861A95902C000E1D17 /* CoreAudioDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C7E1A95902C000E1D17 /* CoreAudioDecoder.cpp */; }; + FA0B7E871A95902C000E1D17 /* CoreAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C7F1A95902C000E1D17 /* CoreAudioDecoder.h */; }; + FA0B7E881A95902C000E1D17 /* Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C801A95902C000E1D17 /* Decoder.cpp */; }; + FA0B7E891A95902C000E1D17 /* Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C801A95902C000E1D17 /* Decoder.cpp */; }; + FA0B7E8A1A95902C000E1D17 /* Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C811A95902C000E1D17 /* Decoder.h */; }; + FA0B7E8B1A95902C000E1D17 /* FLACDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C821A95902C000E1D17 /* FLACDecoder.cpp */; }; + FA0B7E8C1A95902C000E1D17 /* FLACDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C821A95902C000E1D17 /* FLACDecoder.cpp */; }; + FA0B7E8D1A95902C000E1D17 /* FLACDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C831A95902C000E1D17 /* FLACDecoder.h */; }; + FA0B7E8E1A95902C000E1D17 /* GmeDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C841A95902C000E1D17 /* GmeDecoder.cpp */; }; + FA0B7E8F1A95902C000E1D17 /* GmeDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C841A95902C000E1D17 /* GmeDecoder.cpp */; }; + FA0B7E901A95902C000E1D17 /* GmeDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C851A95902C000E1D17 /* GmeDecoder.h */; }; + FA0B7E911A95902C000E1D17 /* ModPlugDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C861A95902C000E1D17 /* ModPlugDecoder.cpp */; }; + FA0B7E921A95902C000E1D17 /* ModPlugDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C861A95902C000E1D17 /* ModPlugDecoder.cpp */; }; + FA0B7E931A95902C000E1D17 /* ModPlugDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C871A95902C000E1D17 /* ModPlugDecoder.h */; }; + FA0B7E941A95902C000E1D17 /* Mpg123Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C881A95902C000E1D17 /* Mpg123Decoder.cpp */; }; + FA0B7E961A95902C000E1D17 /* Mpg123Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C891A95902C000E1D17 /* Mpg123Decoder.h */; }; + FA0B7E971A95902C000E1D17 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8A1A95902C000E1D17 /* Sound.cpp */; }; + FA0B7E981A95902C000E1D17 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8A1A95902C000E1D17 /* Sound.cpp */; }; + FA0B7E991A95902C000E1D17 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C8B1A95902C000E1D17 /* Sound.h */; }; + FA0B7E9A1A95902C000E1D17 /* VorbisDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8C1A95902C000E1D17 /* VorbisDecoder.cpp */; }; + FA0B7E9B1A95902C000E1D17 /* VorbisDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8C1A95902C000E1D17 /* VorbisDecoder.cpp */; }; + FA0B7E9C1A95902C000E1D17 /* VorbisDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C8D1A95902C000E1D17 /* VorbisDecoder.h */; }; + FA0B7E9D1A95902C000E1D17 /* WaveDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8E1A95902C000E1D17 /* WaveDecoder.cpp */; }; + FA0B7E9E1A95902C000E1D17 /* WaveDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8E1A95902C000E1D17 /* WaveDecoder.cpp */; }; + FA0B7E9F1A95902C000E1D17 /* WaveDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C8F1A95902C000E1D17 /* WaveDecoder.h */; }; + FA0B7EA01A95902C000E1D17 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C901A95902C000E1D17 /* Sound.cpp */; }; + FA0B7EA11A95902C000E1D17 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C901A95902C000E1D17 /* Sound.cpp */; }; + FA0B7EA21A95902C000E1D17 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C911A95902C000E1D17 /* Sound.h */; }; + FA0B7EA31A95902C000E1D17 /* SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C921A95902C000E1D17 /* SoundData.cpp */; }; + FA0B7EA41A95902C000E1D17 /* SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C921A95902C000E1D17 /* SoundData.cpp */; }; + FA0B7EA51A95902C000E1D17 /* SoundData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C931A95902C000E1D17 /* SoundData.h */; }; + FA0B7EA61A95902C000E1D17 /* wrap_Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C941A95902C000E1D17 /* wrap_Decoder.cpp */; }; + FA0B7EA71A95902C000E1D17 /* wrap_Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C941A95902C000E1D17 /* wrap_Decoder.cpp */; }; + FA0B7EA81A95902C000E1D17 /* wrap_Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C951A95902C000E1D17 /* wrap_Decoder.h */; }; + FA0B7EA91A95902C000E1D17 /* wrap_Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C961A95902C000E1D17 /* wrap_Sound.cpp */; }; + FA0B7EAA1A95902C000E1D17 /* wrap_Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C961A95902C000E1D17 /* wrap_Sound.cpp */; }; + FA0B7EAB1A95902C000E1D17 /* wrap_Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C971A95902C000E1D17 /* wrap_Sound.h */; }; + FA0B7EAC1A95902C000E1D17 /* wrap_SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C981A95902C000E1D17 /* wrap_SoundData.cpp */; }; + FA0B7EAD1A95902C000E1D17 /* wrap_SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C981A95902C000E1D17 /* wrap_SoundData.cpp */; }; + FA0B7EAE1A95902C000E1D17 /* wrap_SoundData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C991A95902C000E1D17 /* wrap_SoundData.h */; }; + FA0B7EAF1A95902C000E1D17 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9C1A95902C000E1D17 /* System.cpp */; }; + FA0B7EB01A95902C000E1D17 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9C1A95902C000E1D17 /* System.cpp */; }; + FA0B7EB11A95902C000E1D17 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C9D1A95902C000E1D17 /* System.h */; }; + FA0B7EB21A95902C000E1D17 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9E1A95902C000E1D17 /* System.cpp */; }; + FA0B7EB31A95902C000E1D17 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9E1A95902C000E1D17 /* System.cpp */; }; + FA0B7EB41A95902C000E1D17 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C9F1A95902C000E1D17 /* System.h */; }; + FA0B7EB51A95902C000E1D17 /* wrap_System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA01A95902C000E1D17 /* wrap_System.cpp */; }; + FA0B7EB61A95902C000E1D17 /* wrap_System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA01A95902C000E1D17 /* wrap_System.cpp */; }; + FA0B7EB71A95902C000E1D17 /* wrap_System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CA11A95902C000E1D17 /* wrap_System.h */; }; + FA0B7EB81A95902C000E1D17 /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA31A95902C000E1D17 /* Channel.cpp */; }; + FA0B7EB91A95902C000E1D17 /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA31A95902C000E1D17 /* Channel.cpp */; }; + FA0B7EBA1A95902C000E1D17 /* Channel.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CA41A95902C000E1D17 /* Channel.h */; }; + FA0B7EBB1A95902C000E1D17 /* LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA51A95902C000E1D17 /* LuaThread.cpp */; }; + FA0B7EBC1A95902C000E1D17 /* LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA51A95902C000E1D17 /* LuaThread.cpp */; }; + FA0B7EBD1A95902C000E1D17 /* LuaThread.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CA61A95902C000E1D17 /* LuaThread.h */; }; + FA0B7EBE1A95902C000E1D17 /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA81A95902C000E1D17 /* Thread.cpp */; }; + FA0B7EBF1A95902C000E1D17 /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA81A95902C000E1D17 /* Thread.cpp */; }; + FA0B7EC01A95902C000E1D17 /* Thread.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CA91A95902C000E1D17 /* Thread.h */; }; + FA0B7EC11A95902C000E1D17 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAA1A95902C000E1D17 /* threads.cpp */; }; + FA0B7EC21A95902C000E1D17 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAA1A95902C000E1D17 /* threads.cpp */; }; + FA0B7EC31A95902C000E1D17 /* threads.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CAB1A95902C000E1D17 /* threads.h */; }; + FA0B7EC41A95902C000E1D17 /* Thread.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CAC1A95902C000E1D17 /* Thread.h */; }; + FA0B7EC51A95902C000E1D17 /* ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAD1A95902C000E1D17 /* ThreadModule.cpp */; }; + FA0B7EC61A95902C000E1D17 /* ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAD1A95902C000E1D17 /* ThreadModule.cpp */; }; + FA0B7EC71A95902C000E1D17 /* ThreadModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CAE1A95902C000E1D17 /* ThreadModule.h */; }; + FA0B7EC81A95902C000E1D17 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAF1A95902C000E1D17 /* threads.cpp */; }; + FA0B7EC91A95902C000E1D17 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAF1A95902C000E1D17 /* threads.cpp */; }; + FA0B7ECA1A95902C000E1D17 /* threads.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CB01A95902C000E1D17 /* threads.h */; }; + FA0B7ECB1A95902C000E1D17 /* wrap_Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB11A95902C000E1D17 /* wrap_Channel.cpp */; }; + FA0B7ECC1A95902C000E1D17 /* wrap_Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB11A95902C000E1D17 /* wrap_Channel.cpp */; }; + FA0B7ECD1A95902C000E1D17 /* wrap_Channel.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CB21A95902C000E1D17 /* wrap_Channel.h */; }; + FA0B7ECE1A95902C000E1D17 /* wrap_LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB31A95902C000E1D17 /* wrap_LuaThread.cpp */; }; + FA0B7ECF1A95902C000E1D17 /* wrap_LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB31A95902C000E1D17 /* wrap_LuaThread.cpp */; }; + FA0B7ED01A95902C000E1D17 /* wrap_LuaThread.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CB41A95902C000E1D17 /* wrap_LuaThread.h */; }; + FA0B7ED11A95902C000E1D17 /* wrap_ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB51A95902C000E1D17 /* wrap_ThreadModule.cpp */; }; + FA0B7ED21A95902C000E1D17 /* wrap_ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB51A95902C000E1D17 /* wrap_ThreadModule.cpp */; }; + FA0B7ED31A95902C000E1D17 /* wrap_ThreadModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CB61A95902C000E1D17 /* wrap_ThreadModule.h */; }; + FA0B7ED41A95902D000E1D17 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB91A95902C000E1D17 /* Timer.cpp */; }; + FA0B7ED51A95902D000E1D17 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB91A95902C000E1D17 /* Timer.cpp */; }; + FA0B7ED61A95902D000E1D17 /* Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CBA1A95902C000E1D17 /* Timer.h */; }; + FA0B7ED71A95902D000E1D17 /* Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CBB1A95902C000E1D17 /* Timer.h */; }; + FA0B7ED81A95902D000E1D17 /* wrap_Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CBC1A95902C000E1D17 /* wrap_Timer.cpp */; }; + FA0B7ED91A95902D000E1D17 /* wrap_Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CBC1A95902C000E1D17 /* wrap_Timer.cpp */; }; + FA0B7EDA1A95902D000E1D17 /* wrap_Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CBD1A95902C000E1D17 /* wrap_Timer.h */; }; + FA0B7EDB1A95902D000E1D17 /* Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC01A95902C000E1D17 /* Touch.cpp */; }; + FA0B7EDC1A95902D000E1D17 /* Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC01A95902C000E1D17 /* Touch.cpp */; }; + FA0B7EDD1A95902D000E1D17 /* Touch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CC11A95902C000E1D17 /* Touch.h */; }; + FA0B7EDE1A95902D000E1D17 /* Touch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CC21A95902C000E1D17 /* Touch.h */; }; + FA0B7EDF1A95902D000E1D17 /* wrap_Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC31A95902C000E1D17 /* wrap_Touch.cpp */; }; + FA0B7EE01A95902D000E1D17 /* wrap_Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC31A95902C000E1D17 /* wrap_Touch.cpp */; }; + FA0B7EE11A95902D000E1D17 /* wrap_Touch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CC41A95902C000E1D17 /* wrap_Touch.h */; }; + FA0B7EE21A95902D000E1D17 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC71A95902C000E1D17 /* Window.cpp */; }; + FA0B7EE31A95902D000E1D17 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC71A95902C000E1D17 /* Window.cpp */; }; + FA0B7EE41A95902D000E1D17 /* Window.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CC81A95902C000E1D17 /* Window.h */; }; + FA0B7EE51A95902D000E1D17 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC91A95902C000E1D17 /* Window.cpp */; }; + FA0B7EE61A95902D000E1D17 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC91A95902C000E1D17 /* Window.cpp */; }; + FA0B7EE71A95902D000E1D17 /* Window.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CCA1A95902C000E1D17 /* Window.h */; }; + FA0B7EE81A95902D000E1D17 /* wrap_Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CCB1A95902C000E1D17 /* wrap_Window.cpp */; }; + FA0B7EE91A95902D000E1D17 /* wrap_Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CCB1A95902C000E1D17 /* wrap_Window.cpp */; }; + FA0B7EEA1A95902D000E1D17 /* wrap_Window.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CCC1A95902C000E1D17 /* wrap_Window.h */; }; + FA0B7EF21A959D2C000E1D17 /* ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7EF11A959D2C000E1D17 /* ios.mm */; }; + FA19C4C51B4B0BD50059B0B3 /* wrap_Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA19C4C21B4B0BD50059B0B3 /* wrap_Video.cpp */; }; + FA19C4C61B4B0BD50059B0B3 /* wrap_Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA19C4C21B4B0BD50059B0B3 /* wrap_Video.cpp */; }; + FA19C4C71B4B0BD50059B0B3 /* wrap_Video.h in Headers */ = {isa = PBXBuildFile; fileRef = FA19C4C31B4B0BD50059B0B3 /* wrap_Video.h */; }; + FA27B39D1B498151008A9DCE /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B38A1B498151008A9DCE /* Video.cpp */; }; + FA27B39E1B498151008A9DCE /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B38A1B498151008A9DCE /* Video.cpp */; }; + FA27B39F1B498151008A9DCE /* Video.h in Headers */ = {isa = PBXBuildFile; fileRef = FA27B38B1B498151008A9DCE /* Video.h */; }; + FA27B3A01B498151008A9DCE /* VideoStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B38C1B498151008A9DCE /* VideoStream.cpp */; }; + FA27B3A11B498151008A9DCE /* VideoStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B38C1B498151008A9DCE /* VideoStream.cpp */; }; + FA27B3A21B498151008A9DCE /* VideoStream.h in Headers */ = {isa = PBXBuildFile; fileRef = FA27B38D1B498151008A9DCE /* VideoStream.h */; }; + FA27B3A91B498151008A9DCE /* Video.h in Headers */ = {isa = PBXBuildFile; fileRef = FA27B3931B498151008A9DCE /* Video.h */; }; + FA27B3AA1B498151008A9DCE /* VideoStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B3941B498151008A9DCE /* VideoStream.cpp */; }; + FA27B3AB1B498151008A9DCE /* VideoStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B3941B498151008A9DCE /* VideoStream.cpp */; }; + FA27B3AC1B498151008A9DCE /* VideoStream.h in Headers */ = {isa = PBXBuildFile; fileRef = FA27B3951B498151008A9DCE /* VideoStream.h */; }; + FA27B3B31B498151008A9DCE /* wrap_Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B39B1B498151008A9DCE /* wrap_Video.cpp */; }; + FA27B3B41B498151008A9DCE /* wrap_Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B39B1B498151008A9DCE /* wrap_Video.cpp */; }; + FA27B3B51B498151008A9DCE /* wrap_Video.h in Headers */ = {isa = PBXBuildFile; fileRef = FA27B39C1B498151008A9DCE /* wrap_Video.h */; }; + FA27B3C01B4985BF008A9DCE /* wrap_VideoStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B3B91B4985BF008A9DCE /* wrap_VideoStream.cpp */; }; + FA27B3C11B4985BF008A9DCE /* wrap_VideoStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B3B91B4985BF008A9DCE /* wrap_VideoStream.cpp */; }; + FA27B3C21B4985BF008A9DCE /* wrap_VideoStream.h in Headers */ = {isa = PBXBuildFile; fileRef = FA27B3BA1B4985BF008A9DCE /* wrap_VideoStream.h */; }; + FA27B3C51B4985D8008A9DCE /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B3C31B4985D8008A9DCE /* Video.cpp */; }; + FA27B3C61B4985D8008A9DCE /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA27B3C31B4985D8008A9DCE /* Video.cpp */; }; + FA27B3C71B4985D8008A9DCE /* Video.h in Headers */ = {isa = PBXBuildFile; fileRef = FA27B3C41B4985D8008A9DCE /* Video.h */; }; + FA27B3C91B498623008A9DCE /* Theora.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA27B3C81B498623008A9DCE /* Theora.framework */; }; + FA317EBA18F28B6D00B0BCD7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA317EB918F28B6D00B0BCD7 /* libz.dylib */; }; + FA41A3C81C0A1F950084430C /* ASTCHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA41A3C61C0A1F950084430C /* ASTCHandler.cpp */; }; + FA41A3C91C0A1F950084430C /* ASTCHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA41A3C61C0A1F950084430C /* ASTCHandler.cpp */; }; + FA41A3CA1C0A1F950084430C /* ASTCHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA41A3C71C0A1F950084430C /* ASTCHandler.h */; }; + FA4B66C91ABBCF1900558F15 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA4B66C81ABBCF1900558F15 /* Timer.cpp */; }; + FA4B66CA1ABBCF1900558F15 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA4B66C81ABBCF1900558F15 /* Timer.cpp */; }; + FA56D9BC1C208A0200D8D3C7 /* libmodplug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA56D9BA1C2089EE00D8D3C7 /* libmodplug.a */; }; + FA577AB016C7507900860150 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7916C71A1700860150 /* Cocoa.framework */; }; + FA577AC216C7512D00860150 /* FreeType.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A6716C719D900860150 /* FreeType.framework */; }; + FA577AC516C7513400860150 /* libmodplug.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A8216C71A5300860150 /* libmodplug.framework */; }; + FA577AC716C7513A00860150 /* mpg123.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A6F16C719F000860150 /* mpg123.framework */; }; + FA577AC816C7513C00860150 /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7116C719F400860150 /* Ogg.framework */; }; + FA577ACA16C7514100860150 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7C16C71A2600860150 /* OpenGL.framework */; }; + FA577ACB16C7514400860150 /* physfs.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7316C719F900860150 /* physfs.framework */; }; + FA577ACD16C7514C00860150 /* Vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7716C71A0800860150 /* Vorbis.framework */; }; + FA57FB981AE1993600F2AD6D /* noise1234.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA57FB961AE1993600F2AD6D /* noise1234.cpp */; }; + FA57FB991AE1993600F2AD6D /* noise1234.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA57FB961AE1993600F2AD6D /* noise1234.cpp */; }; + FA57FB9A1AE1993600F2AD6D /* noise1234.h in Headers */ = {isa = PBXBuildFile; fileRef = FA57FB971AE1993600F2AD6D /* noise1234.h */; }; + FA59A2D31C06481400328DBA /* ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE272501C05A15B00A67640 /* ParticleSystem.cpp */; }; + FA59A2D81C0649C200328DBA /* libtheora.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA59A2D61C0649BB00328DBA /* libtheora.a */; }; + FA5D24B01A96D2EC00C6FC8F /* libFreetype2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24A51A96D2EC00C6FC8F /* libFreetype2.a */; }; + FA5D24B31A96D2EC00C6FC8F /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24AB1A96D2EC00C6FC8F /* libogg.a */; }; + FA5D24B41A96D2EC00C6FC8F /* libphysfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24AD1A96D2EC00C6FC8F /* libphysfs.a */; }; + FA5D24B51A96D2EC00C6FC8F /* libvorbis.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24AF1A96D2EC00C6FC8F /* libvorbis.a */; }; + FA5D24CF1A96E68300C6FC8F /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24CD1A96E63D00C6FC8F /* libSDL2.a */; }; + FA620A321AA2F8DB005DB4C2 /* wrap_Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A2E1AA2F8DB005DB4C2 /* wrap_Quad.cpp */; }; + FA620A331AA2F8DB005DB4C2 /* wrap_Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A2E1AA2F8DB005DB4C2 /* wrap_Quad.cpp */; }; + FA620A341AA2F8DB005DB4C2 /* wrap_Quad.h in Headers */ = {isa = PBXBuildFile; fileRef = FA620A2F1AA2F8DB005DB4C2 /* wrap_Quad.h */; }; + FA620A351AA2F8DB005DB4C2 /* wrap_Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A301AA2F8DB005DB4C2 /* wrap_Texture.cpp */; }; + FA620A361AA2F8DB005DB4C2 /* wrap_Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A301AA2F8DB005DB4C2 /* wrap_Texture.cpp */; }; + FA620A371AA2F8DB005DB4C2 /* wrap_Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA620A311AA2F8DB005DB4C2 /* wrap_Texture.h */; }; + FA620A3A1AA305F6005DB4C2 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A391AA305F6005DB4C2 /* types.cpp */; }; + FA620A3B1AA305F6005DB4C2 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A391AA305F6005DB4C2 /* types.cpp */; }; + FA7550A81AEBE276003E311E /* libluajit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA7550A71AEBE276003E311E /* libluajit.a */; }; + FA8951A21AA2EDF300EC385A /* wrap_Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA8951A01AA2EDF300EC385A /* wrap_Event.cpp */; }; + FA8951A31AA2EDF300EC385A /* wrap_Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA8951A01AA2EDF300EC385A /* wrap_Event.cpp */; }; + FA8951A41AA2EDF300EC385A /* wrap_Event.h in Headers */ = {isa = PBXBuildFile; fileRef = FA8951A11AA2EDF300EC385A /* wrap_Event.h */; }; + FA9B4A0816E1578300074F42 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0716E1578300074F42 /* SDL2.framework */; }; + FAA3A9AE1B7D465A00CED060 /* android.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAA3A9AC1B7D465A00CED060 /* android.cpp */; }; + FAA3A9AF1B7D465A00CED060 /* android.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAA3A9AC1B7D465A00CED060 /* android.cpp */; }; + FAA3A9B01B7D465A00CED060 /* android.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA3A9AD1B7D465A00CED060 /* android.h */; }; + FAA627CE18E7E1560080752D /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA627CD18E7E1560080752D /* CoreServices.framework */; }; + FAAFF04416CB11C700CCDE45 /* OpenAL-Soft.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */; }; + FAB17BE01ABFAA2000F9BA27 /* Compressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BDE1ABFAA2000F9BA27 /* Compressor.cpp */; }; + FAB17BE11ABFAA2000F9BA27 /* Compressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BDE1ABFAA2000F9BA27 /* Compressor.cpp */; }; + FAB17BE21ABFAA2000F9BA27 /* Compressor.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB17BDF1ABFAA2000F9BA27 /* Compressor.h */; }; + FAB17BE61ABFAA9000F9BA27 /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BE41ABFAA9000F9BA27 /* lz4.c */; }; + FAB17BE71ABFAA9000F9BA27 /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BE41ABFAA9000F9BA27 /* lz4.c */; }; + FAB17BE81ABFAA9000F9BA27 /* lz4.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB17BE51ABFAA9000F9BA27 /* lz4.h */; }; + FAB17BEB1ABFAF1800F9BA27 /* CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BE91ABFAF1800F9BA27 /* CompressedData.cpp */; }; + FAB17BEC1ABFAF1800F9BA27 /* CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BE91ABFAF1800F9BA27 /* CompressedData.cpp */; }; + FAB17BED1ABFAF1800F9BA27 /* CompressedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB17BEA1ABFAF1800F9BA27 /* CompressedData.h */; }; + FAB17BF01ABFB37500F9BA27 /* wrap_CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BEE1ABFB37500F9BA27 /* wrap_CompressedData.cpp */; }; + FAB17BF11ABFB37500F9BA27 /* wrap_CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BEE1ABFB37500F9BA27 /* wrap_CompressedData.cpp */; }; + FAB17BF21ABFB37500F9BA27 /* wrap_CompressedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB17BEF1ABFB37500F9BA27 /* wrap_CompressedData.h */; }; + FAB17BF51ABFC4B100F9BA27 /* lz4hc.c in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BF31ABFC4B100F9BA27 /* lz4hc.c */; }; + FAB17BF61ABFC4B100F9BA27 /* lz4hc.c in Sources */ = {isa = PBXBuildFile; fileRef = FAB17BF31ABFC4B100F9BA27 /* lz4hc.c */; }; + FAB17BF71ABFC4B100F9BA27 /* lz4hc.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB17BF41ABFC4B100F9BA27 /* lz4hc.h */; }; + FAB2D5AA1AABDD8A008224A4 /* TrueTypeRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB2D5A81AABDD8A008224A4 /* TrueTypeRasterizer.cpp */; }; + FAB2D5AB1AABDD8A008224A4 /* TrueTypeRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB2D5A81AABDD8A008224A4 /* TrueTypeRasterizer.cpp */; }; + FAB2D5AC1AABDD8A008224A4 /* TrueTypeRasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB2D5A91AABDD8A008224A4 /* TrueTypeRasterizer.h */; }; + FAE272521C05A15B00A67640 /* ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE272501C05A15B00A67640 /* ParticleSystem.cpp */; }; + FAE272531C05A15B00A67640 /* ParticleSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE272511C05A15B00A67640 /* ParticleSystem.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + FA0B78DB1A958B90000E1D17 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 503971A86B7167A91B670FBA /* boot.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = boot.lua.h; sourceTree = ""; }; + FA08F5AE16C7525600F007B5 /* liblove-macosx.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "liblove-macosx.plist"; path = "macosx/liblove-macosx.plist"; sourceTree = ""; }; + FA0B78DD1A958B90000E1D17 /* liblove.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = liblove.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FA0B78F71A958E3B000E1D17 /* b64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b64.cpp; sourceTree = ""; }; + FA0B78F81A958E3B000E1D17 /* b64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b64.h; sourceTree = ""; }; + FA0B78F91A958E3B000E1D17 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + FA0B78FA1A958E3B000E1D17 /* Data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Data.h; sourceTree = ""; }; + FA0B78FB1A958E3B000E1D17 /* delay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = delay.cpp; sourceTree = ""; }; + FA0B78FC1A958E3B000E1D17 /* delay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = delay.h; sourceTree = ""; }; + FA0B78FD1A958E3B000E1D17 /* EnumMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumMap.h; sourceTree = ""; }; + FA0B78FE1A958E3B000E1D17 /* Exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Exception.cpp; sourceTree = ""; }; + FA0B78FF1A958E3B000E1D17 /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Exception.h; sourceTree = ""; }; + FA0B79001A958E3B000E1D17 /* int.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = int.h; sourceTree = ""; }; + FA0B79011A958E3B000E1D17 /* math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math.h; sourceTree = ""; }; + FA0B79021A958E3B000E1D17 /* Matrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Matrix.cpp; sourceTree = ""; }; + FA0B79031A958E3B000E1D17 /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Matrix.h; sourceTree = ""; }; + FA0B79041A958E3B000E1D17 /* Memoizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Memoizer.cpp; sourceTree = ""; }; + FA0B79051A958E3B000E1D17 /* Memoizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Memoizer.h; sourceTree = ""; }; + FA0B79061A958E3B000E1D17 /* Module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Module.cpp; sourceTree = ""; }; + FA0B79071A958E3B000E1D17 /* Module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Module.h; sourceTree = ""; }; + FA0B79081A958E3B000E1D17 /* Object.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Object.cpp; sourceTree = ""; }; + FA0B79091A958E3B000E1D17 /* Object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Object.h; sourceTree = ""; }; + FA0B790A1A958E3B000E1D17 /* macosx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macosx.h; sourceTree = ""; }; + FA0B790B1A958E3B000E1D17 /* macosx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = macosx.mm; sourceTree = ""; }; + FA0B790C1A958E3B000E1D17 /* Reference.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Reference.cpp; sourceTree = ""; }; + FA0B790D1A958E3B000E1D17 /* Reference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reference.h; sourceTree = ""; }; + FA0B790E1A958E3B000E1D17 /* runtime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = runtime.cpp; sourceTree = ""; }; + FA0B790F1A958E3B000E1D17 /* runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = runtime.h; sourceTree = ""; }; + FA0B79101A958E3B000E1D17 /* StringMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringMap.h; sourceTree = ""; }; + FA0B79111A958E3B000E1D17 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; + FA0B79121A958E3B000E1D17 /* utf8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = utf8.cpp; sourceTree = ""; }; + FA0B79131A958E3B000E1D17 /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = ""; }; + FA0B79141A958E3B000E1D17 /* Variant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Variant.cpp; sourceTree = ""; }; + FA0B79151A958E3B000E1D17 /* Variant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Variant.h; sourceTree = ""; }; + FA0B79161A958E3B000E1D17 /* Vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Vector.cpp; sourceTree = ""; }; + FA0B79171A958E3B000E1D17 /* Vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector.h; sourceTree = ""; }; + FA0B79181A958E3B000E1D17 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + FA0B79191A958E3B000E1D17 /* wrap_Data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Data.cpp; sourceTree = ""; }; + FA0B791A1A958E3B000E1D17 /* wrap_Data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Data.h; sourceTree = ""; }; + FA0B794F1A958EA3000E1D17 /* Box2D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Box2D.h; sourceTree = ""; }; + FA0B79511A958EA3000E1D17 /* b2BroadPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2BroadPhase.cpp; sourceTree = ""; }; + FA0B79521A958EA3000E1D17 /* b2BroadPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2BroadPhase.h; sourceTree = ""; }; + FA0B79531A958EA3000E1D17 /* b2CollideCircle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideCircle.cpp; sourceTree = ""; }; + FA0B79541A958EA3000E1D17 /* b2CollideEdge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideEdge.cpp; sourceTree = ""; }; + FA0B79551A958EA3000E1D17 /* b2CollidePolygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollidePolygon.cpp; sourceTree = ""; }; + FA0B79561A958EA3000E1D17 /* b2Collision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Collision.cpp; sourceTree = ""; }; + FA0B79571A958EA3000E1D17 /* b2Collision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Collision.h; sourceTree = ""; }; + FA0B79581A958EA3000E1D17 /* b2Distance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Distance.cpp; sourceTree = ""; }; + FA0B79591A958EA3000E1D17 /* b2Distance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Distance.h; sourceTree = ""; }; + FA0B795A1A958EA3000E1D17 /* b2DynamicTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2DynamicTree.cpp; sourceTree = ""; }; + FA0B795B1A958EA3000E1D17 /* b2DynamicTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2DynamicTree.h; sourceTree = ""; }; + FA0B795C1A958EA3000E1D17 /* b2TimeOfImpact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2TimeOfImpact.cpp; sourceTree = ""; }; + FA0B795D1A958EA3000E1D17 /* b2TimeOfImpact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2TimeOfImpact.h; sourceTree = ""; }; + FA0B795F1A958EA3000E1D17 /* b2ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainShape.cpp; sourceTree = ""; }; + FA0B79601A958EA3000E1D17 /* b2ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainShape.h; sourceTree = ""; }; + FA0B79611A958EA3000E1D17 /* b2CircleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleShape.cpp; sourceTree = ""; }; + FA0B79621A958EA3000E1D17 /* b2CircleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2CircleShape.h; sourceTree = ""; }; + FA0B79631A958EA3000E1D17 /* b2EdgeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeShape.cpp; sourceTree = ""; }; + FA0B79641A958EA3000E1D17 /* b2EdgeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeShape.h; sourceTree = ""; }; + FA0B79651A958EA3000E1D17 /* b2PolygonShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonShape.cpp; sourceTree = ""; }; + FA0B79661A958EA3000E1D17 /* b2PolygonShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonShape.h; sourceTree = ""; }; + FA0B79671A958EA3000E1D17 /* b2Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Shape.h; sourceTree = ""; }; + FA0B79691A958EA3000E1D17 /* b2BlockAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2BlockAllocator.cpp; sourceTree = ""; }; + FA0B796A1A958EA3000E1D17 /* b2BlockAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2BlockAllocator.h; sourceTree = ""; }; + FA0B796B1A958EA3000E1D17 /* b2Draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Draw.cpp; sourceTree = ""; }; + FA0B796C1A958EA3000E1D17 /* b2Draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Draw.h; sourceTree = ""; }; + FA0B796D1A958EA3000E1D17 /* b2GrowableStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2GrowableStack.h; sourceTree = ""; }; + FA0B796E1A958EA3000E1D17 /* b2Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Math.cpp; sourceTree = ""; }; + FA0B796F1A958EA3000E1D17 /* b2Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Math.h; sourceTree = ""; }; + FA0B79701A958EA3000E1D17 /* b2Settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Settings.cpp; sourceTree = ""; }; + FA0B79711A958EA3000E1D17 /* b2Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Settings.h; sourceTree = ""; }; + FA0B79721A958EA3000E1D17 /* b2StackAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2StackAllocator.cpp; sourceTree = ""; }; + FA0B79731A958EA3000E1D17 /* b2StackAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2StackAllocator.h; sourceTree = ""; }; + FA0B79741A958EA3000E1D17 /* b2Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Timer.cpp; sourceTree = ""; }; + FA0B79751A958EA3000E1D17 /* b2Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Timer.h; sourceTree = ""; }; + FA0B79771A958EA3000E1D17 /* b2Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Body.cpp; sourceTree = ""; }; + FA0B79781A958EA3000E1D17 /* b2Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Body.h; sourceTree = ""; }; + FA0B79791A958EA3000E1D17 /* b2ContactManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactManager.cpp; sourceTree = ""; }; + FA0B797A1A958EA3000E1D17 /* b2ContactManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ContactManager.h; sourceTree = ""; }; + FA0B797B1A958EA3000E1D17 /* b2Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Fixture.cpp; sourceTree = ""; }; + FA0B797C1A958EA3000E1D17 /* b2Fixture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Fixture.h; sourceTree = ""; }; + FA0B797D1A958EA3000E1D17 /* b2Island.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Island.cpp; sourceTree = ""; }; + FA0B797E1A958EA3000E1D17 /* b2Island.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Island.h; sourceTree = ""; }; + FA0B797F1A958EA3000E1D17 /* b2TimeStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2TimeStep.h; sourceTree = ""; }; + FA0B79801A958EA3000E1D17 /* b2World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2World.cpp; sourceTree = ""; }; + FA0B79811A958EA3000E1D17 /* b2World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2World.h; sourceTree = ""; }; + FA0B79821A958EA3000E1D17 /* b2WorldCallbacks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WorldCallbacks.cpp; sourceTree = ""; }; + FA0B79831A958EA3000E1D17 /* b2WorldCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WorldCallbacks.h; sourceTree = ""; }; + FA0B79851A958EA3000E1D17 /* b2ChainAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndCircleContact.cpp; sourceTree = ""; }; + FA0B79861A958EA3000E1D17 /* b2ChainAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainAndCircleContact.h; sourceTree = ""; }; + FA0B79871A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndPolygonContact.cpp; sourceTree = ""; }; + FA0B79881A958EA3000E1D17 /* b2ChainAndPolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainAndPolygonContact.h; sourceTree = ""; }; + FA0B79891A958EA3000E1D17 /* b2CircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleContact.cpp; sourceTree = ""; }; + FA0B798A1A958EA3000E1D17 /* b2CircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2CircleContact.h; sourceTree = ""; }; + FA0B798B1A958EA3000E1D17 /* b2Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Contact.cpp; sourceTree = ""; }; + FA0B798C1A958EA3000E1D17 /* b2Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Contact.h; sourceTree = ""; }; + FA0B798D1A958EA3000E1D17 /* b2ContactSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactSolver.cpp; sourceTree = ""; }; + FA0B798E1A958EA3000E1D17 /* b2ContactSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ContactSolver.h; sourceTree = ""; }; + FA0B798F1A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndCircleContact.cpp; sourceTree = ""; }; + FA0B79901A958EA3000E1D17 /* b2EdgeAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndCircleContact.h; sourceTree = ""; }; + FA0B79911A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndPolygonContact.cpp; sourceTree = ""; }; + FA0B79921A958EA3000E1D17 /* b2EdgeAndPolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndPolygonContact.h; sourceTree = ""; }; + FA0B79931A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonAndCircleContact.cpp; sourceTree = ""; }; + FA0B79941A958EA3000E1D17 /* b2PolygonAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonAndCircleContact.h; sourceTree = ""; }; + FA0B79951A958EA3000E1D17 /* b2PolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonContact.cpp; sourceTree = ""; }; + FA0B79961A958EA3000E1D17 /* b2PolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonContact.h; sourceTree = ""; }; + FA0B79981A958EA3000E1D17 /* b2DistanceJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2DistanceJoint.cpp; sourceTree = ""; }; + FA0B79991A958EA3000E1D17 /* b2DistanceJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2DistanceJoint.h; sourceTree = ""; }; + FA0B799A1A958EA3000E1D17 /* b2FrictionJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2FrictionJoint.cpp; sourceTree = ""; }; + FA0B799B1A958EA3000E1D17 /* b2FrictionJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2FrictionJoint.h; sourceTree = ""; }; + FA0B799C1A958EA3000E1D17 /* b2GearJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2GearJoint.cpp; sourceTree = ""; }; + FA0B799D1A958EA3000E1D17 /* b2GearJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2GearJoint.h; sourceTree = ""; }; + FA0B799E1A958EA3000E1D17 /* b2Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Joint.cpp; sourceTree = ""; }; + FA0B799F1A958EA3000E1D17 /* b2Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Joint.h; sourceTree = ""; }; + FA0B79A01A958EA3000E1D17 /* b2MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MotorJoint.cpp; sourceTree = ""; }; + FA0B79A11A958EA3000E1D17 /* b2MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MotorJoint.h; sourceTree = ""; }; + FA0B79A21A958EA3000E1D17 /* b2MouseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MouseJoint.cpp; sourceTree = ""; }; + FA0B79A31A958EA3000E1D17 /* b2MouseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MouseJoint.h; sourceTree = ""; }; + FA0B79A41A958EA3000E1D17 /* b2PrismaticJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PrismaticJoint.cpp; sourceTree = ""; }; + FA0B79A51A958EA3000E1D17 /* b2PrismaticJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PrismaticJoint.h; sourceTree = ""; }; + FA0B79A61A958EA3000E1D17 /* b2PulleyJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PulleyJoint.cpp; sourceTree = ""; }; + FA0B79A71A958EA3000E1D17 /* b2PulleyJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PulleyJoint.h; sourceTree = ""; }; + FA0B79A81A958EA3000E1D17 /* b2RevoluteJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2RevoluteJoint.cpp; sourceTree = ""; }; + FA0B79A91A958EA3000E1D17 /* b2RevoluteJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2RevoluteJoint.h; sourceTree = ""; }; + FA0B79AA1A958EA3000E1D17 /* b2RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2RopeJoint.cpp; sourceTree = ""; }; + FA0B79AB1A958EA3000E1D17 /* b2RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2RopeJoint.h; sourceTree = ""; }; + FA0B79AC1A958EA3000E1D17 /* b2WeldJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WeldJoint.cpp; sourceTree = ""; }; + FA0B79AD1A958EA3000E1D17 /* b2WeldJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WeldJoint.h; sourceTree = ""; }; + FA0B79AE1A958EA3000E1D17 /* b2WheelJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WheelJoint.cpp; sourceTree = ""; }; + FA0B79AF1A958EA3000E1D17 /* b2WheelJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WheelJoint.h; sourceTree = ""; }; + FA0B79B21A958EA3000E1D17 /* b2Rope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Rope.cpp; sourceTree = ""; }; + FA0B79B31A958EA3000E1D17 /* b2Rope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Rope.h; sourceTree = ""; }; + FA0B79B51A958EA3000E1D17 /* ddsinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsinfo.h; sourceTree = ""; }; + FA0B79B61A958EA3000E1D17 /* ddsparse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ddsparse.cpp; sourceTree = ""; }; + FA0B79B71A958EA3000E1D17 /* ddsparse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsparse.h; sourceTree = ""; }; + FA0B79B91A958EA3000E1D17 /* enet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enet.cpp; sourceTree = ""; }; + FA0B79BB1A958EA3000E1D17 /* callbacks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = callbacks.c; sourceTree = ""; }; + FA0B79BD1A958EA3000E1D17 /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = compress.c; sourceTree = ""; }; + FA0B79BE1A958EA3000E1D17 /* host.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = host.c; sourceTree = ""; }; + FA0B79C11A958EA3000E1D17 /* callbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; + FA0B79C21A958EA3000E1D17 /* enet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enet.h; sourceTree = ""; }; + FA0B79C31A958EA3000E1D17 /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; + FA0B79C41A958EA3000E1D17 /* protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = protocol.h; sourceTree = ""; }; + FA0B79C51A958EA3000E1D17 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = ""; }; + FA0B79C61A958EA3000E1D17 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; + FA0B79C71A958EA3000E1D17 /* unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unix.h; sourceTree = ""; }; + FA0B79C81A958EA3000E1D17 /* utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utility.h; sourceTree = ""; }; + FA0B79C91A958EA3000E1D17 /* win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = win32.h; sourceTree = ""; }; + FA0B79CB1A958EA3000E1D17 /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = ""; }; + FA0B79CC1A958EA3000E1D17 /* packet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = packet.c; sourceTree = ""; }; + FA0B79CD1A958EA3000E1D17 /* peer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = peer.c; sourceTree = ""; }; + FA0B79CE1A958EA3000E1D17 /* protocol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = protocol.c; sourceTree = ""; }; + FA0B79D01A958EA3000E1D17 /* unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unix.c; sourceTree = ""; }; + FA0B79D11A958EA3000E1D17 /* win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = win32.c; sourceTree = ""; }; + FA0B79D21A958EA3000E1D17 /* lua-enet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "lua-enet.h"; sourceTree = ""; }; + FA0B79D41A958EA3000E1D17 /* glad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glad.cpp; sourceTree = ""; }; + FA0B79D61A958EA3000E1D17 /* glad.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = glad.hpp; sourceTree = ""; }; + FA0B79D71A958EA3000E1D17 /* gladfuncs.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gladfuncs.hpp; sourceTree = ""; }; + FA0B79D91A958EA3000E1D17 /* lodepng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lodepng.cpp; sourceTree = ""; }; + FA0B79DA1A958EA3000E1D17 /* lodepng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lodepng.h; sourceTree = ""; }; + FA0B79DD1A958EA3000E1D17 /* auxiliar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = auxiliar.c; sourceTree = ""; }; + FA0B79DE1A958EA3000E1D17 /* auxiliar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auxiliar.h; sourceTree = ""; }; + FA0B79DF1A958EA3000E1D17 /* buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = buffer.c; sourceTree = ""; }; + FA0B79E01A958EA3000E1D17 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = ""; }; + FA0B79E11A958EA3000E1D17 /* except.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = except.c; sourceTree = ""; }; + FA0B79E21A958EA3000E1D17 /* except.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = except.h; sourceTree = ""; }; + FA0B79E31A958EA3000E1D17 /* ftp.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ftp.lua; sourceTree = ""; }; + FA0B79E41A958EA3000E1D17 /* ftp.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftp.lua.h; sourceTree = ""; }; + FA0B79E51A958EA3000E1D17 /* http.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = http.lua; sourceTree = ""; }; + FA0B79E61A958EA3000E1D17 /* http.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http.lua.h; sourceTree = ""; }; + FA0B79E71A958EA3000E1D17 /* inet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inet.c; sourceTree = ""; }; + FA0B79E81A958EA3000E1D17 /* inet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inet.h; sourceTree = ""; }; + FA0B79E91A958EA3000E1D17 /* io.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = io.c; sourceTree = ""; }; + FA0B79EA1A958EA3000E1D17 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = ""; }; + FA0B79EB1A958EA3000E1D17 /* ltn12.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ltn12.lua; sourceTree = ""; }; + FA0B79EC1A958EA3000E1D17 /* ltn12.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ltn12.lua.h; sourceTree = ""; }; + FA0B79ED1A958EA3000E1D17 /* lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua.h; sourceTree = ""; }; + FA0B79EE1A958EA3000E1D17 /* luasocket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = luasocket.c; sourceTree = ""; }; + FA0B79EF1A958EA3000E1D17 /* luasocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = luasocket.h; sourceTree = ""; }; + FA0B79F01A958EA3000E1D17 /* mime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mime.c; sourceTree = ""; }; + FA0B79F11A958EA3000E1D17 /* mime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mime.h; sourceTree = ""; }; + FA0B79F21A958EA3000E1D17 /* mime.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.lua; sourceTree = ""; }; + FA0B79F31A958EA3000E1D17 /* mime.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mime.lua.h; sourceTree = ""; }; + FA0B79F41A958EA3000E1D17 /* options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = options.c; sourceTree = ""; }; + FA0B79F51A958EA3000E1D17 /* options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = options.h; sourceTree = ""; }; + FA0B79F61A958EA3000E1D17 /* pre.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pre.lua; sourceTree = ""; }; + FA0B79F71A958EA3000E1D17 /* select.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = select.c; sourceTree = ""; }; + FA0B79F81A958EA3000E1D17 /* select.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = select.h; sourceTree = ""; }; + FA0B79F91A958EA3000E1D17 /* smtp.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = smtp.lua; sourceTree = ""; }; + FA0B79FA1A958EA3000E1D17 /* smtp.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smtp.lua.h; sourceTree = ""; }; + FA0B79FB1A958EA3000E1D17 /* socket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = socket.h; sourceTree = ""; }; + FA0B79FC1A958EA3000E1D17 /* socket.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = socket.lua; sourceTree = ""; }; + FA0B79FD1A958EA3000E1D17 /* socket.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = socket.lua.h; sourceTree = ""; }; + FA0B79FE1A958EA3000E1D17 /* tcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tcp.c; sourceTree = ""; }; + FA0B79FF1A958EA3000E1D17 /* tcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tcp.h; sourceTree = ""; }; + FA0B7A001A958EA3000E1D17 /* timeout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = timeout.c; sourceTree = ""; }; + FA0B7A011A958EA3000E1D17 /* timeout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timeout.h; sourceTree = ""; }; + FA0B7A021A958EA3000E1D17 /* tp.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tp.lua; sourceTree = ""; }; + FA0B7A031A958EA3000E1D17 /* tp.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tp.lua.h; sourceTree = ""; }; + FA0B7A041A958EA3000E1D17 /* udp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udp.c; sourceTree = ""; }; + FA0B7A051A958EA3000E1D17 /* udp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udp.h; sourceTree = ""; }; + FA0B7A061A958EA3000E1D17 /* unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unix.c; sourceTree = ""; }; + FA0B7A071A958EA3000E1D17 /* unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unix.h; sourceTree = ""; }; + FA0B7A081A958EA3000E1D17 /* url.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = url.lua; sourceTree = ""; }; + FA0B7A091A958EA3000E1D17 /* url.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = url.lua.h; sourceTree = ""; }; + FA0B7A0A1A958EA3000E1D17 /* usocket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = usocket.c; sourceTree = ""; }; + FA0B7A0B1A958EA3000E1D17 /* usocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = usocket.h; sourceTree = ""; }; + FA0B7A0E1A958EA3000E1D17 /* luasocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = luasocket.cpp; sourceTree = ""; }; + FA0B7A0F1A958EA3000E1D17 /* luasocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = luasocket.h; sourceTree = ""; }; + FA0B7A111A958EA3000E1D17 /* lprefix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lprefix.h; sourceTree = ""; }; + FA0B7A121A958EA3000E1D17 /* lutf8lib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lutf8lib.c; sourceTree = ""; }; + FA0B7A131A958EA3000E1D17 /* lutf8lib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lutf8lib.h; sourceTree = ""; }; + FA0B7A151A958EA3000E1D17 /* simplexnoise1234.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplexnoise1234.cpp; sourceTree = ""; }; + FA0B7A161A958EA3000E1D17 /* simplexnoise1234.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplexnoise1234.h; sourceTree = ""; }; + FA0B7A181A958EA3000E1D17 /* stb_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stb_image.h; sourceTree = ""; }; + FA0B7A1B1A958EA3000E1D17 /* checked.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = checked.h; sourceTree = ""; }; + FA0B7A1C1A958EA3000E1D17 /* core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = core.h; sourceTree = ""; }; + FA0B7A1D1A958EA3000E1D17 /* unchecked.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unchecked.h; sourceTree = ""; }; + FA0B7A1E1A958EA3000E1D17 /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = ""; }; + FA0B7A201A958EA3000E1D17 /* wuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff.c; sourceTree = ""; }; + FA0B7A211A958EA3000E1D17 /* wuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff.h; sourceTree = ""; }; + FA0B7A221A958EA3000E1D17 /* wuff_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_config.h; sourceTree = ""; }; + FA0B7A231A958EA3000E1D17 /* wuff_convert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_convert.c; sourceTree = ""; }; + FA0B7A241A958EA3000E1D17 /* wuff_convert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_convert.h; sourceTree = ""; }; + FA0B7A251A958EA3000E1D17 /* wuff_internal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_internal.c; sourceTree = ""; }; + FA0B7A261A958EA3000E1D17 /* wuff_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_internal.h; sourceTree = ""; }; + FA0B7A271A958EA3000E1D17 /* wuff_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_memory.c; sourceTree = ""; }; + FA0B7B3E1A95902C000E1D17 /* Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = ""; }; + FA0B7B3F1A95902C000E1D17 /* Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = ""; }; + FA0B7B411A95902C000E1D17 /* Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = ""; }; + FA0B7B421A95902C000E1D17 /* Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = ""; }; + FA0B7B431A95902C000E1D17 /* Source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = ""; }; + FA0B7B441A95902C000E1D17 /* Source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = ""; }; + FA0B7B461A95902C000E1D17 /* Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = ""; }; + FA0B7B471A95902C000E1D17 /* Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = ""; }; + FA0B7B481A95902C000E1D17 /* Pool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pool.cpp; sourceTree = ""; }; + FA0B7B491A95902C000E1D17 /* Pool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pool.h; sourceTree = ""; }; + FA0B7B4A1A95902C000E1D17 /* Source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = ""; }; + FA0B7B4B1A95902C000E1D17 /* Source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = ""; }; + FA0B7B4C1A95902C000E1D17 /* Source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = ""; }; + FA0B7B4D1A95902C000E1D17 /* Source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = ""; }; + FA0B7B4E1A95902C000E1D17 /* wrap_Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Audio.cpp; sourceTree = ""; }; + FA0B7B4F1A95902C000E1D17 /* wrap_Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Audio.h; sourceTree = ""; }; + FA0B7B501A95902C000E1D17 /* wrap_Source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Source.cpp; sourceTree = ""; }; + FA0B7B511A95902C000E1D17 /* wrap_Source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Source.h; sourceTree = ""; }; + FA0B7B531A95902C000E1D17 /* Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = ""; }; + FA0B7B541A95902C000E1D17 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = ""; }; + FA0B7B561A95902C000E1D17 /* Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = ""; }; + FA0B7B571A95902C000E1D17 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = ""; }; + FA0B7B5B1A95902C000E1D17 /* DroppedFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DroppedFile.cpp; sourceTree = ""; }; + FA0B7B5C1A95902C000E1D17 /* DroppedFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DroppedFile.h; sourceTree = ""; }; + FA0B7B5D1A95902C000E1D17 /* File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = File.cpp; sourceTree = ""; }; + FA0B7B5E1A95902C000E1D17 /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = File.h; sourceTree = ""; }; + FA0B7B5F1A95902C000E1D17 /* FileData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileData.cpp; sourceTree = ""; }; + FA0B7B601A95902C000E1D17 /* FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileData.h; sourceTree = ""; }; + FA0B7B611A95902C000E1D17 /* Filesystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Filesystem.cpp; sourceTree = ""; }; + FA0B7B621A95902C000E1D17 /* Filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Filesystem.h; sourceTree = ""; }; + FA0B7B641A95902C000E1D17 /* File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = File.cpp; sourceTree = ""; }; + FA0B7B651A95902C000E1D17 /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = File.h; sourceTree = ""; }; + FA0B7B661A95902C000E1D17 /* Filesystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Filesystem.cpp; sourceTree = ""; }; + FA0B7B671A95902C000E1D17 /* Filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Filesystem.h; sourceTree = ""; }; + FA0B7B681A95902C000E1D17 /* wrap_DroppedFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_DroppedFile.cpp; sourceTree = ""; }; + FA0B7B691A95902C000E1D17 /* wrap_DroppedFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_DroppedFile.h; sourceTree = ""; }; + FA0B7B6A1A95902C000E1D17 /* wrap_File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_File.cpp; sourceTree = ""; }; + FA0B7B6B1A95902C000E1D17 /* wrap_File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_File.h; sourceTree = ""; }; + FA0B7B6C1A95902C000E1D17 /* wrap_FileData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_FileData.cpp; sourceTree = ""; }; + FA0B7B6D1A95902C000E1D17 /* wrap_FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_FileData.h; sourceTree = ""; }; + FA0B7B6E1A95902C000E1D17 /* wrap_Filesystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Filesystem.cpp; sourceTree = ""; }; + FA0B7B6F1A95902C000E1D17 /* wrap_Filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Filesystem.h; sourceTree = ""; }; + FA0B7B711A95902C000E1D17 /* BMFontRasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BMFontRasterizer.cpp; sourceTree = ""; }; + FA0B7B721A95902C000E1D17 /* BMFontRasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BMFontRasterizer.h; sourceTree = ""; }; + FA0B7B731A95902C000E1D17 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = ""; }; + FA0B7B741A95902C000E1D17 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = ""; }; + FA0B7B761A95902C000E1D17 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = ""; }; + FA0B7B771A95902C000E1D17 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = ""; }; + FA0B7B781A95902C000E1D17 /* TrueTypeRasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrueTypeRasterizer.cpp; sourceTree = ""; }; + FA0B7B791A95902C000E1D17 /* TrueTypeRasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrueTypeRasterizer.h; sourceTree = ""; }; + FA0B7B7A1A95902C000E1D17 /* GlyphData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GlyphData.cpp; sourceTree = ""; }; + FA0B7B7B1A95902C000E1D17 /* GlyphData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlyphData.h; sourceTree = ""; }; + FA0B7B7C1A95902C000E1D17 /* ImageRasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageRasterizer.cpp; sourceTree = ""; }; + FA0B7B7D1A95902C000E1D17 /* ImageRasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageRasterizer.h; sourceTree = ""; }; + FA0B7B7E1A95902C000E1D17 /* Rasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Rasterizer.cpp; sourceTree = ""; }; + FA0B7B7F1A95902C000E1D17 /* Rasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Rasterizer.h; sourceTree = ""; }; + FA0B7B801A95902C000E1D17 /* Vera.ttf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vera.ttf.h; sourceTree = ""; }; + FA0B7B811A95902C000E1D17 /* wrap_Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Font.cpp; sourceTree = ""; }; + FA0B7B821A95902C000E1D17 /* wrap_Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Font.h; sourceTree = ""; }; + FA0B7B831A95902C000E1D17 /* wrap_GlyphData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_GlyphData.cpp; sourceTree = ""; }; + FA0B7B841A95902C000E1D17 /* wrap_GlyphData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_GlyphData.h; sourceTree = ""; }; + FA0B7B851A95902C000E1D17 /* wrap_Rasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Rasterizer.cpp; sourceTree = ""; }; + FA0B7B861A95902C000E1D17 /* wrap_Rasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Rasterizer.h; sourceTree = ""; }; + FA0B7B881A95902C000E1D17 /* Color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Color.h; sourceTree = ""; }; + FA0B7B891A95902C000E1D17 /* Drawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Drawable.h; sourceTree = ""; }; + FA0B7B8A1A95902C000E1D17 /* Graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Graphics.cpp; sourceTree = ""; }; + FA0B7B8B1A95902C000E1D17 /* Graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Graphics.h; sourceTree = ""; }; + FA0B7B8D1A95902C000E1D17 /* Canvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Canvas.cpp; sourceTree = ""; }; + FA0B7B8E1A95902C000E1D17 /* Canvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Canvas.h; sourceTree = ""; }; + FA0B7B8F1A95902C000E1D17 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = ""; }; + FA0B7B901A95902C000E1D17 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = ""; }; + FA0B7B911A95902C000E1D17 /* Graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Graphics.cpp; sourceTree = ""; }; + FA0B7B921A95902C000E1D17 /* Graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Graphics.h; sourceTree = ""; }; + FA0B7B931A95902C000E1D17 /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Image.cpp; sourceTree = ""; }; + FA0B7B941A95902C000E1D17 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = ""; }; + FA0B7B951A95902C000E1D17 /* Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mesh.cpp; sourceTree = ""; }; + FA0B7B961A95902C000E1D17 /* Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mesh.h; sourceTree = ""; }; + FA0B7B971A95902C000E1D17 /* OpenGL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGL.cpp; sourceTree = ""; }; + FA0B7B981A95902C000E1D17 /* OpenGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenGL.h; sourceTree = ""; }; + FA0B7B991A95902C000E1D17 /* ParticleSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleSystem.cpp; sourceTree = ""; }; + FA0B7B9A1A95902C000E1D17 /* ParticleSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParticleSystem.h; sourceTree = ""; }; + FA0B7B9B1A95902C000E1D17 /* Polyline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Polyline.cpp; sourceTree = ""; }; + FA0B7B9C1A95902C000E1D17 /* Polyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Polyline.h; sourceTree = ""; }; + FA0B7B9D1A95902C000E1D17 /* Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shader.cpp; sourceTree = ""; }; + FA0B7B9E1A95902C000E1D17 /* Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shader.h; sourceTree = ""; }; + FA0B7B9F1A95902C000E1D17 /* SpriteBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteBatch.cpp; sourceTree = ""; }; + FA0B7BA01A95902C000E1D17 /* SpriteBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatch.h; sourceTree = ""; }; + FA0B7BA11A95902C000E1D17 /* Text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Text.cpp; sourceTree = ""; }; + FA0B7BA21A95902C000E1D17 /* Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Text.h; sourceTree = ""; }; + FA0B7BA41A95902C000E1D17 /* GLBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLBuffer.cpp; sourceTree = ""; }; + FA0B7BA51A95902C000E1D17 /* GLBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLBuffer.h; sourceTree = ""; }; + FA0B7BA61A95902C000E1D17 /* wrap_Canvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Canvas.cpp; sourceTree = ""; }; + FA0B7BA71A95902C000E1D17 /* wrap_Canvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Canvas.h; sourceTree = ""; }; + FA0B7BA81A95902C000E1D17 /* wrap_Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Font.cpp; sourceTree = ""; }; + FA0B7BA91A95902C000E1D17 /* wrap_Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Font.h; sourceTree = ""; }; + FA0B7BAA1A95902C000E1D17 /* wrap_Graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Graphics.cpp; sourceTree = ""; }; + FA0B7BAB1A95902C000E1D17 /* wrap_Graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Graphics.h; sourceTree = ""; }; + FA0B7BAC1A95902C000E1D17 /* wrap_Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Image.cpp; sourceTree = ""; }; + FA0B7BAD1A95902C000E1D17 /* wrap_Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Image.h; sourceTree = ""; }; + FA0B7BAE1A95902C000E1D17 /* wrap_Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Mesh.cpp; sourceTree = ""; }; + FA0B7BAF1A95902C000E1D17 /* wrap_Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Mesh.h; sourceTree = ""; }; + FA0B7BB01A95902C000E1D17 /* wrap_ParticleSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ParticleSystem.cpp; sourceTree = ""; }; + FA0B7BB11A95902C000E1D17 /* wrap_ParticleSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ParticleSystem.h; sourceTree = ""; }; + FA0B7BB41A95902C000E1D17 /* wrap_Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Shader.cpp; sourceTree = ""; }; + FA0B7BB51A95902C000E1D17 /* wrap_Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Shader.h; sourceTree = ""; }; + FA0B7BB61A95902C000E1D17 /* wrap_SpriteBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_SpriteBatch.cpp; sourceTree = ""; }; + FA0B7BB71A95902C000E1D17 /* wrap_SpriteBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_SpriteBatch.h; sourceTree = ""; }; + FA0B7BB81A95902C000E1D17 /* wrap_Text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Text.cpp; sourceTree = ""; }; + FA0B7BB91A95902C000E1D17 /* wrap_Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Text.h; sourceTree = ""; }; + FA0B7BBC1A95902C000E1D17 /* Quad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Quad.cpp; sourceTree = ""; }; + FA0B7BBD1A95902C000E1D17 /* Quad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Quad.h; sourceTree = ""; }; + FA0B7BBE1A95902C000E1D17 /* Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Texture.cpp; sourceTree = ""; }; + FA0B7BBF1A95902C000E1D17 /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = ""; }; + FA0B7BC01A95902C000E1D17 /* Volatile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Volatile.cpp; sourceTree = ""; }; + FA0B7BC11A95902C000E1D17 /* Volatile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Volatile.h; sourceTree = ""; }; + FA0B7BC31A95902C000E1D17 /* CompressedImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompressedImageData.cpp; sourceTree = ""; }; + FA0B7BC41A95902C000E1D17 /* CompressedImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedImageData.h; sourceTree = ""; }; + FA0B7BC51A95902C000E1D17 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = ""; }; + FA0B7BC61A95902C000E1D17 /* ImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageData.cpp; sourceTree = ""; }; + FA0B7BC71A95902C000E1D17 /* ImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageData.h; sourceTree = ""; }; + FA0B7BC91A95902C000E1D17 /* CompressedImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompressedImageData.cpp; sourceTree = ""; }; + FA0B7BCA1A95902C000E1D17 /* CompressedImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedImageData.h; sourceTree = ""; }; + FA0B7BCB1A95902C000E1D17 /* CompressedFormatHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedFormatHandler.h; sourceTree = ""; }; + FA0B7BCC1A95902C000E1D17 /* ddsHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ddsHandler.cpp; sourceTree = ""; }; + FA0B7BCD1A95902C000E1D17 /* ddsHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsHandler.h; sourceTree = ""; }; + FA0B7BCE1A95902C000E1D17 /* FormatHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormatHandler.cpp; sourceTree = ""; }; + FA0B7BCF1A95902C000E1D17 /* FormatHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormatHandler.h; sourceTree = ""; }; + FA0B7BD01A95902C000E1D17 /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Image.cpp; sourceTree = ""; }; + FA0B7BD11A95902C000E1D17 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = ""; }; + FA0B7BD21A95902C000E1D17 /* ImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageData.cpp; sourceTree = ""; }; + FA0B7BD31A95902C000E1D17 /* ImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageData.h; sourceTree = ""; }; + FA0B7BD81A95902C000E1D17 /* KTXHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KTXHandler.cpp; sourceTree = ""; }; + FA0B7BD91A95902C000E1D17 /* KTXHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTXHandler.h; sourceTree = ""; }; + FA0B7BDA1A95902C000E1D17 /* PKMHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PKMHandler.cpp; sourceTree = ""; }; + FA0B7BDB1A95902C000E1D17 /* PKMHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PKMHandler.h; sourceTree = ""; }; + FA0B7BDC1A95902C000E1D17 /* PNGHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PNGHandler.cpp; sourceTree = ""; }; + FA0B7BDD1A95902C000E1D17 /* PNGHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNGHandler.h; sourceTree = ""; }; + FA0B7BDE1A95902C000E1D17 /* PVRHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PVRHandler.cpp; sourceTree = ""; }; + FA0B7BDF1A95902C000E1D17 /* PVRHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PVRHandler.h; sourceTree = ""; }; + FA0B7BE01A95902C000E1D17 /* STBHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = STBHandler.cpp; sourceTree = ""; }; + FA0B7BE11A95902C000E1D17 /* STBHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STBHandler.h; sourceTree = ""; }; + FA0B7BE21A95902C000E1D17 /* wrap_CompressedImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_CompressedImageData.cpp; sourceTree = ""; }; + FA0B7BE31A95902C000E1D17 /* wrap_CompressedImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_CompressedImageData.h; sourceTree = ""; }; + FA0B7BE41A95902C000E1D17 /* wrap_Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Image.cpp; sourceTree = ""; }; + FA0B7BE51A95902C000E1D17 /* wrap_Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Image.h; sourceTree = ""; }; + FA0B7BE61A95902C000E1D17 /* wrap_ImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ImageData.cpp; sourceTree = ""; }; + FA0B7BE71A95902C000E1D17 /* wrap_ImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ImageData.h; sourceTree = ""; }; + FA0B7BE91A95902C000E1D17 /* Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick.cpp; sourceTree = ""; }; + FA0B7BEA1A95902C000E1D17 /* Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick.h; sourceTree = ""; }; + FA0B7BEB1A95902C000E1D17 /* JoystickModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoystickModule.h; sourceTree = ""; }; + FA0B7BED1A95902C000E1D17 /* Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick.cpp; sourceTree = ""; }; + FA0B7BEE1A95902C000E1D17 /* Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick.h; sourceTree = ""; }; + FA0B7BEF1A95902C000E1D17 /* JoystickModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JoystickModule.cpp; sourceTree = ""; }; + FA0B7BF01A95902C000E1D17 /* JoystickModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoystickModule.h; sourceTree = ""; }; + FA0B7BF11A95902C000E1D17 /* wrap_Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Joystick.cpp; sourceTree = ""; }; + FA0B7BF21A95902C000E1D17 /* wrap_Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Joystick.h; sourceTree = ""; }; + FA0B7BF31A95902C000E1D17 /* wrap_JoystickModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_JoystickModule.cpp; sourceTree = ""; }; + FA0B7BF41A95902C000E1D17 /* wrap_JoystickModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_JoystickModule.h; sourceTree = ""; }; + FA0B7BF61A95902C000E1D17 /* Keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Keyboard.cpp; sourceTree = ""; }; + FA0B7BF71A95902C000E1D17 /* Keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Keyboard.h; sourceTree = ""; }; + FA0B7BF91A95902C000E1D17 /* Keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Keyboard.cpp; sourceTree = ""; }; + FA0B7BFA1A95902C000E1D17 /* Keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Keyboard.h; sourceTree = ""; }; + FA0B7BFB1A95902C000E1D17 /* wrap_Keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Keyboard.cpp; sourceTree = ""; }; + FA0B7BFC1A95902C000E1D17 /* wrap_Keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Keyboard.h; sourceTree = ""; }; + FA0B7BFE1A95902C000E1D17 /* love.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = love.cpp; sourceTree = ""; }; + FA0B7BFF1A95902C000E1D17 /* love.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = love.h; sourceTree = ""; }; + FA0B7C011A95902C000E1D17 /* BezierCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BezierCurve.cpp; sourceTree = ""; }; + FA0B7C021A95902C000E1D17 /* BezierCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BezierCurve.h; sourceTree = ""; }; + FA0B7C031A95902C000E1D17 /* MathModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathModule.cpp; sourceTree = ""; }; + FA0B7C041A95902C000E1D17 /* MathModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathModule.h; sourceTree = ""; }; + FA0B7C051A95902C000E1D17 /* RandomGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RandomGenerator.cpp; sourceTree = ""; }; + FA0B7C061A95902C000E1D17 /* RandomGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RandomGenerator.h; sourceTree = ""; }; + FA0B7C071A95902C000E1D17 /* wrap_BezierCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_BezierCurve.cpp; sourceTree = ""; }; + FA0B7C081A95902C000E1D17 /* wrap_BezierCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_BezierCurve.h; sourceTree = ""; }; + FA0B7C091A95902C000E1D17 /* wrap_Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Math.cpp; sourceTree = ""; }; + FA0B7C0A1A95902C000E1D17 /* wrap_Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Math.h; sourceTree = ""; }; + FA0B7C0B1A95902C000E1D17 /* wrap_RandomGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RandomGenerator.cpp; sourceTree = ""; }; + FA0B7C0C1A95902C000E1D17 /* wrap_RandomGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RandomGenerator.h; sourceTree = ""; }; + FA0B7C0E1A95902C000E1D17 /* Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cursor.cpp; sourceTree = ""; }; + FA0B7C0F1A95902C000E1D17 /* Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cursor.h; sourceTree = ""; }; + FA0B7C111A95902C000E1D17 /* Mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mouse.h; sourceTree = ""; }; + FA0B7C131A95902C000E1D17 /* Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cursor.cpp; sourceTree = ""; }; + FA0B7C141A95902C000E1D17 /* Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cursor.h; sourceTree = ""; }; + FA0B7C151A95902C000E1D17 /* Mouse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mouse.cpp; sourceTree = ""; }; + FA0B7C161A95902C000E1D17 /* Mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mouse.h; sourceTree = ""; }; + FA0B7C171A95902C000E1D17 /* wrap_Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Cursor.cpp; sourceTree = ""; }; + FA0B7C181A95902C000E1D17 /* wrap_Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Cursor.h; sourceTree = ""; }; + FA0B7C191A95902C000E1D17 /* wrap_Mouse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Mouse.cpp; sourceTree = ""; }; + FA0B7C1A1A95902C000E1D17 /* wrap_Mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Mouse.h; sourceTree = ""; }; + FA0B7C1C1A95902C000E1D17 /* Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Body.cpp; sourceTree = ""; }; + FA0B7C1D1A95902C000E1D17 /* Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Body.h; sourceTree = ""; }; + FA0B7C1F1A95902C000E1D17 /* Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Body.cpp; sourceTree = ""; }; + FA0B7C201A95902C000E1D17 /* Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Body.h; sourceTree = ""; }; + FA0B7C211A95902C000E1D17 /* ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChainShape.cpp; sourceTree = ""; }; + FA0B7C221A95902C000E1D17 /* ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChainShape.h; sourceTree = ""; }; + FA0B7C231A95902C000E1D17 /* CircleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleShape.cpp; sourceTree = ""; }; + FA0B7C241A95902C000E1D17 /* CircleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleShape.h; sourceTree = ""; }; + FA0B7C251A95902C000E1D17 /* Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Contact.cpp; sourceTree = ""; }; + FA0B7C261A95902C000E1D17 /* Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Contact.h; sourceTree = ""; }; + FA0B7C271A95902C000E1D17 /* DistanceJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DistanceJoint.cpp; sourceTree = ""; }; + FA0B7C281A95902C000E1D17 /* DistanceJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DistanceJoint.h; sourceTree = ""; }; + FA0B7C291A95902C000E1D17 /* EdgeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EdgeShape.cpp; sourceTree = ""; }; + FA0B7C2A1A95902C000E1D17 /* EdgeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EdgeShape.h; sourceTree = ""; }; + FA0B7C2B1A95902C000E1D17 /* Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Fixture.cpp; sourceTree = ""; }; + FA0B7C2C1A95902C000E1D17 /* Fixture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Fixture.h; sourceTree = ""; }; + FA0B7C2D1A95902C000E1D17 /* FrictionJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrictionJoint.cpp; sourceTree = ""; }; + FA0B7C2E1A95902C000E1D17 /* FrictionJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrictionJoint.h; sourceTree = ""; }; + FA0B7C2F1A95902C000E1D17 /* GearJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GearJoint.cpp; sourceTree = ""; }; + FA0B7C301A95902C000E1D17 /* GearJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GearJoint.h; sourceTree = ""; }; + FA0B7C311A95902C000E1D17 /* Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joint.cpp; sourceTree = ""; }; + FA0B7C321A95902C000E1D17 /* Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joint.h; sourceTree = ""; }; + FA0B7C331A95902C000E1D17 /* MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MotorJoint.cpp; sourceTree = ""; }; + FA0B7C341A95902C000E1D17 /* MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MotorJoint.h; sourceTree = ""; }; + FA0B7C351A95902C000E1D17 /* MouseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseJoint.cpp; sourceTree = ""; }; + FA0B7C361A95902C000E1D17 /* MouseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseJoint.h; sourceTree = ""; }; + FA0B7C371A95902C000E1D17 /* Physics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Physics.cpp; sourceTree = ""; }; + FA0B7C381A95902C000E1D17 /* Physics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Physics.h; sourceTree = ""; }; + FA0B7C391A95902C000E1D17 /* PolygonShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolygonShape.cpp; sourceTree = ""; }; + FA0B7C3A1A95902C000E1D17 /* PolygonShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolygonShape.h; sourceTree = ""; }; + FA0B7C3B1A95902C000E1D17 /* PrismaticJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrismaticJoint.cpp; sourceTree = ""; }; + FA0B7C3C1A95902C000E1D17 /* PrismaticJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrismaticJoint.h; sourceTree = ""; }; + FA0B7C3D1A95902C000E1D17 /* PulleyJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PulleyJoint.cpp; sourceTree = ""; }; + FA0B7C3E1A95902C000E1D17 /* PulleyJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PulleyJoint.h; sourceTree = ""; }; + FA0B7C3F1A95902C000E1D17 /* RevoluteJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RevoluteJoint.cpp; sourceTree = ""; }; + FA0B7C401A95902C000E1D17 /* RevoluteJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RevoluteJoint.h; sourceTree = ""; }; + FA0B7C411A95902C000E1D17 /* RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RopeJoint.cpp; sourceTree = ""; }; + FA0B7C421A95902C000E1D17 /* RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RopeJoint.h; sourceTree = ""; }; + FA0B7C431A95902C000E1D17 /* Shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shape.cpp; sourceTree = ""; }; + FA0B7C441A95902C000E1D17 /* Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shape.h; sourceTree = ""; }; + FA0B7C451A95902C000E1D17 /* WeldJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeldJoint.cpp; sourceTree = ""; }; + FA0B7C461A95902C000E1D17 /* WeldJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeldJoint.h; sourceTree = ""; }; + FA0B7C471A95902C000E1D17 /* WheelJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WheelJoint.cpp; sourceTree = ""; }; + FA0B7C481A95902C000E1D17 /* WheelJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WheelJoint.h; sourceTree = ""; }; + FA0B7C491A95902C000E1D17 /* World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = World.cpp; sourceTree = ""; }; + FA0B7C4A1A95902C000E1D17 /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = World.h; sourceTree = ""; }; + FA0B7C4B1A95902C000E1D17 /* wrap_Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Body.cpp; sourceTree = ""; }; + FA0B7C4C1A95902C000E1D17 /* wrap_Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Body.h; sourceTree = ""; }; + FA0B7C4D1A95902C000E1D17 /* wrap_ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ChainShape.cpp; sourceTree = ""; }; + FA0B7C4E1A95902C000E1D17 /* wrap_ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ChainShape.h; sourceTree = ""; }; + FA0B7C4F1A95902C000E1D17 /* wrap_CircleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_CircleShape.cpp; sourceTree = ""; }; + FA0B7C501A95902C000E1D17 /* wrap_CircleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_CircleShape.h; sourceTree = ""; }; + FA0B7C511A95902C000E1D17 /* wrap_Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Contact.cpp; sourceTree = ""; }; + FA0B7C521A95902C000E1D17 /* wrap_Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Contact.h; sourceTree = ""; }; + FA0B7C531A95902C000E1D17 /* wrap_DistanceJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_DistanceJoint.cpp; sourceTree = ""; }; + FA0B7C541A95902C000E1D17 /* wrap_DistanceJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_DistanceJoint.h; sourceTree = ""; }; + FA0B7C551A95902C000E1D17 /* wrap_EdgeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_EdgeShape.cpp; sourceTree = ""; }; + FA0B7C561A95902C000E1D17 /* wrap_EdgeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_EdgeShape.h; sourceTree = ""; }; + FA0B7C571A95902C000E1D17 /* wrap_Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Fixture.cpp; sourceTree = ""; }; + FA0B7C581A95902C000E1D17 /* wrap_Fixture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Fixture.h; sourceTree = ""; }; + FA0B7C591A95902C000E1D17 /* wrap_FrictionJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_FrictionJoint.cpp; sourceTree = ""; }; + FA0B7C5A1A95902C000E1D17 /* wrap_FrictionJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_FrictionJoint.h; sourceTree = ""; }; + FA0B7C5B1A95902C000E1D17 /* wrap_GearJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_GearJoint.cpp; sourceTree = ""; }; + FA0B7C5C1A95902C000E1D17 /* wrap_GearJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_GearJoint.h; sourceTree = ""; }; + FA0B7C5D1A95902C000E1D17 /* wrap_Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Joint.cpp; sourceTree = ""; }; + FA0B7C5E1A95902C000E1D17 /* wrap_Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Joint.h; sourceTree = ""; }; + FA0B7C5F1A95902C000E1D17 /* wrap_MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_MotorJoint.cpp; sourceTree = ""; }; + FA0B7C601A95902C000E1D17 /* wrap_MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_MotorJoint.h; sourceTree = ""; }; + FA0B7C611A95902C000E1D17 /* wrap_MouseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_MouseJoint.cpp; sourceTree = ""; }; + FA0B7C621A95902C000E1D17 /* wrap_MouseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_MouseJoint.h; sourceTree = ""; }; + FA0B7C631A95902C000E1D17 /* wrap_Physics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Physics.cpp; sourceTree = ""; }; + FA0B7C641A95902C000E1D17 /* wrap_Physics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Physics.h; sourceTree = ""; }; + FA0B7C651A95902C000E1D17 /* wrap_PolygonShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PolygonShape.cpp; sourceTree = ""; }; + FA0B7C661A95902C000E1D17 /* wrap_PolygonShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_PolygonShape.h; sourceTree = ""; }; + FA0B7C671A95902C000E1D17 /* wrap_PrismaticJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PrismaticJoint.cpp; sourceTree = ""; }; + FA0B7C681A95902C000E1D17 /* wrap_PrismaticJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_PrismaticJoint.h; sourceTree = ""; }; + FA0B7C691A95902C000E1D17 /* wrap_PulleyJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PulleyJoint.cpp; sourceTree = ""; }; + FA0B7C6A1A95902C000E1D17 /* wrap_PulleyJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_PulleyJoint.h; sourceTree = ""; }; + FA0B7C6B1A95902C000E1D17 /* wrap_RevoluteJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RevoluteJoint.cpp; sourceTree = ""; }; + FA0B7C6C1A95902C000E1D17 /* wrap_RevoluteJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RevoluteJoint.h; sourceTree = ""; }; + FA0B7C6D1A95902C000E1D17 /* wrap_RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RopeJoint.cpp; sourceTree = ""; }; + FA0B7C6E1A95902C000E1D17 /* wrap_RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RopeJoint.h; sourceTree = ""; }; + FA0B7C6F1A95902C000E1D17 /* wrap_Shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Shape.cpp; sourceTree = ""; }; + FA0B7C701A95902C000E1D17 /* wrap_Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Shape.h; sourceTree = ""; }; + FA0B7C711A95902C000E1D17 /* wrap_WeldJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_WeldJoint.cpp; sourceTree = ""; }; + FA0B7C721A95902C000E1D17 /* wrap_WeldJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_WeldJoint.h; sourceTree = ""; }; + FA0B7C731A95902C000E1D17 /* wrap_WheelJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_WheelJoint.cpp; sourceTree = ""; }; + FA0B7C741A95902C000E1D17 /* wrap_WheelJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_WheelJoint.h; sourceTree = ""; }; + FA0B7C751A95902C000E1D17 /* wrap_World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_World.cpp; sourceTree = ""; }; + FA0B7C761A95902C000E1D17 /* wrap_World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_World.h; sourceTree = ""; }; + FA0B7C771A95902C000E1D17 /* Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joint.cpp; sourceTree = ""; }; + FA0B7C781A95902C000E1D17 /* Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joint.h; sourceTree = ""; }; + FA0B7C791A95902C000E1D17 /* Shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shape.cpp; sourceTree = ""; }; + FA0B7C7A1A95902C000E1D17 /* Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shape.h; sourceTree = ""; }; + FA0B7C7C1A95902C000E1D17 /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = ""; }; + FA0B7C7E1A95902C000E1D17 /* CoreAudioDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CoreAudioDecoder.cpp; sourceTree = ""; }; + FA0B7C7F1A95902C000E1D17 /* CoreAudioDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreAudioDecoder.h; sourceTree = ""; }; + FA0B7C801A95902C000E1D17 /* Decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Decoder.cpp; sourceTree = ""; }; + FA0B7C811A95902C000E1D17 /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = ""; }; + FA0B7C821A95902C000E1D17 /* FLACDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FLACDecoder.cpp; sourceTree = ""; }; + FA0B7C831A95902C000E1D17 /* FLACDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLACDecoder.h; sourceTree = ""; }; + FA0B7C841A95902C000E1D17 /* GmeDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GmeDecoder.cpp; sourceTree = ""; }; + FA0B7C851A95902C000E1D17 /* GmeDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GmeDecoder.h; sourceTree = ""; }; + FA0B7C861A95902C000E1D17 /* ModPlugDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModPlugDecoder.cpp; sourceTree = ""; }; + FA0B7C871A95902C000E1D17 /* ModPlugDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModPlugDecoder.h; sourceTree = ""; }; + FA0B7C881A95902C000E1D17 /* Mpg123Decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mpg123Decoder.cpp; sourceTree = ""; }; + FA0B7C891A95902C000E1D17 /* Mpg123Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mpg123Decoder.h; sourceTree = ""; }; + FA0B7C8A1A95902C000E1D17 /* Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = ""; }; + FA0B7C8B1A95902C000E1D17 /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; }; + FA0B7C8C1A95902C000E1D17 /* VorbisDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VorbisDecoder.cpp; sourceTree = ""; }; + FA0B7C8D1A95902C000E1D17 /* VorbisDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VorbisDecoder.h; sourceTree = ""; }; + FA0B7C8E1A95902C000E1D17 /* WaveDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WaveDecoder.cpp; sourceTree = ""; }; + FA0B7C8F1A95902C000E1D17 /* WaveDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaveDecoder.h; sourceTree = ""; }; + FA0B7C901A95902C000E1D17 /* Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = ""; }; + FA0B7C911A95902C000E1D17 /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; }; + FA0B7C921A95902C000E1D17 /* SoundData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SoundData.cpp; sourceTree = ""; }; + FA0B7C931A95902C000E1D17 /* SoundData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundData.h; sourceTree = ""; }; + FA0B7C941A95902C000E1D17 /* wrap_Decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Decoder.cpp; sourceTree = ""; }; + FA0B7C951A95902C000E1D17 /* wrap_Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Decoder.h; sourceTree = ""; }; + FA0B7C961A95902C000E1D17 /* wrap_Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Sound.cpp; sourceTree = ""; }; + FA0B7C971A95902C000E1D17 /* wrap_Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Sound.h; sourceTree = ""; }; + FA0B7C981A95902C000E1D17 /* wrap_SoundData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_SoundData.cpp; sourceTree = ""; }; + FA0B7C991A95902C000E1D17 /* wrap_SoundData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_SoundData.h; sourceTree = ""; }; + FA0B7C9C1A95902C000E1D17 /* System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = System.cpp; sourceTree = ""; }; + FA0B7C9D1A95902C000E1D17 /* System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = ""; }; + FA0B7C9E1A95902C000E1D17 /* System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = System.cpp; sourceTree = ""; }; + FA0B7C9F1A95902C000E1D17 /* System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = ""; }; + FA0B7CA01A95902C000E1D17 /* wrap_System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_System.cpp; sourceTree = ""; }; + FA0B7CA11A95902C000E1D17 /* wrap_System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_System.h; sourceTree = ""; }; + FA0B7CA31A95902C000E1D17 /* Channel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Channel.cpp; sourceTree = ""; }; + FA0B7CA41A95902C000E1D17 /* Channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Channel.h; sourceTree = ""; }; + FA0B7CA51A95902C000E1D17 /* LuaThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LuaThread.cpp; sourceTree = ""; }; + FA0B7CA61A95902C000E1D17 /* LuaThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LuaThread.h; sourceTree = ""; }; + FA0B7CA81A95902C000E1D17 /* Thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Thread.cpp; sourceTree = ""; }; + FA0B7CA91A95902C000E1D17 /* Thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Thread.h; sourceTree = ""; }; + FA0B7CAA1A95902C000E1D17 /* threads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = threads.cpp; sourceTree = ""; }; + FA0B7CAB1A95902C000E1D17 /* threads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threads.h; sourceTree = ""; }; + FA0B7CAC1A95902C000E1D17 /* Thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Thread.h; sourceTree = ""; }; + FA0B7CAD1A95902C000E1D17 /* ThreadModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadModule.cpp; sourceTree = ""; }; + FA0B7CAE1A95902C000E1D17 /* ThreadModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadModule.h; sourceTree = ""; }; + FA0B7CAF1A95902C000E1D17 /* threads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = threads.cpp; sourceTree = ""; }; + FA0B7CB01A95902C000E1D17 /* threads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threads.h; sourceTree = ""; }; + FA0B7CB11A95902C000E1D17 /* wrap_Channel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Channel.cpp; sourceTree = ""; }; + FA0B7CB21A95902C000E1D17 /* wrap_Channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Channel.h; sourceTree = ""; }; + FA0B7CB31A95902C000E1D17 /* wrap_LuaThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_LuaThread.cpp; sourceTree = ""; }; + FA0B7CB41A95902C000E1D17 /* wrap_LuaThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_LuaThread.h; sourceTree = ""; }; + FA0B7CB51A95902C000E1D17 /* wrap_ThreadModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ThreadModule.cpp; sourceTree = ""; }; + FA0B7CB61A95902C000E1D17 /* wrap_ThreadModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ThreadModule.h; sourceTree = ""; }; + FA0B7CB91A95902C000E1D17 /* Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Timer.cpp; sourceTree = ""; }; + FA0B7CBA1A95902C000E1D17 /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = ""; }; + FA0B7CBB1A95902C000E1D17 /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = ""; }; + FA0B7CBC1A95902C000E1D17 /* wrap_Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Timer.cpp; sourceTree = ""; }; + FA0B7CBD1A95902C000E1D17 /* wrap_Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Timer.h; sourceTree = ""; }; + FA0B7CC01A95902C000E1D17 /* Touch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Touch.cpp; sourceTree = ""; }; + FA0B7CC11A95902C000E1D17 /* Touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Touch.h; sourceTree = ""; }; + FA0B7CC21A95902C000E1D17 /* Touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Touch.h; sourceTree = ""; }; + FA0B7CC31A95902C000E1D17 /* wrap_Touch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Touch.cpp; sourceTree = ""; }; + FA0B7CC41A95902C000E1D17 /* wrap_Touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Touch.h; sourceTree = ""; }; + FA0B7CC71A95902C000E1D17 /* Window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Window.cpp; sourceTree = ""; }; + FA0B7CC81A95902C000E1D17 /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = ""; }; + FA0B7CC91A95902C000E1D17 /* Window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Window.cpp; sourceTree = ""; }; + FA0B7CCA1A95902C000E1D17 /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = ""; }; + FA0B7CCB1A95902C000E1D17 /* wrap_Window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Window.cpp; sourceTree = ""; }; + FA0B7CCC1A95902C000E1D17 /* wrap_Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Window.h; sourceTree = ""; }; + FA0B7EF01A959D2C000E1D17 /* ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ios.h; sourceTree = ""; }; + FA0B7EF11A959D2C000E1D17 /* ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ios.mm; sourceTree = ""; }; + FA19C4C21B4B0BD50059B0B3 /* wrap_Video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Video.cpp; sourceTree = ""; }; + FA19C4C31B4B0BD50059B0B3 /* wrap_Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Video.h; sourceTree = ""; }; + FA19C4C41B4B0BD50059B0B3 /* wrap_Video.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wrap_Video.lua; sourceTree = ""; }; + FA27B38A1B498151008A9DCE /* Video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Video.cpp; sourceTree = ""; }; + FA27B38B1B498151008A9DCE /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = ""; }; + FA27B38C1B498151008A9DCE /* VideoStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoStream.cpp; sourceTree = ""; }; + FA27B38D1B498151008A9DCE /* VideoStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoStream.h; sourceTree = ""; }; + FA27B3931B498151008A9DCE /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = ""; }; + FA27B3941B498151008A9DCE /* VideoStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoStream.cpp; sourceTree = ""; }; + FA27B3951B498151008A9DCE /* VideoStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoStream.h; sourceTree = ""; }; + FA27B39B1B498151008A9DCE /* wrap_Video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Video.cpp; sourceTree = ""; }; + FA27B39C1B498151008A9DCE /* wrap_Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Video.h; sourceTree = ""; }; + FA27B3B91B4985BF008A9DCE /* wrap_VideoStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_VideoStream.cpp; sourceTree = ""; }; + FA27B3BA1B4985BF008A9DCE /* wrap_VideoStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_VideoStream.h; sourceTree = ""; }; + FA27B3C31B4985D8008A9DCE /* Video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Video.cpp; sourceTree = ""; }; + FA27B3C41B4985D8008A9DCE /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = ""; }; + FA27B3C81B498623008A9DCE /* Theora.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Theora.framework; path = /Library/Frameworks/Theora.framework; sourceTree = ""; }; + FA283EDC1B27CFAA00C70067 /* nogame.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = nogame.lua; sourceTree = ""; }; + FA283EDD1B27CFAA00C70067 /* nogame.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nogame.lua.h; sourceTree = ""; }; + FA2E9BFE1C19E00C0004A1EE /* wrap_RandomGenerator.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wrap_RandomGenerator.lua; sourceTree = ""; }; + FA317EB918F28B6D00B0BCD7 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; + FA41A3C61C0A1F950084430C /* ASTCHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ASTCHandler.cpp; sourceTree = ""; }; + FA41A3C71C0A1F950084430C /* ASTCHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASTCHandler.h; sourceTree = ""; }; + FA4B66C81ABBCF1900558F15 /* Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Timer.cpp; sourceTree = ""; }; + FA56D9BA1C2089EE00D8D3C7 /* libmodplug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libmodplug.a; sourceTree = ""; }; + FA577A6716C719D900860150 /* FreeType.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FreeType.framework; path = /Library/Frameworks/FreeType.framework; sourceTree = ""; }; + FA577A6D16C719EA00860150 /* Lua.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Lua.framework; path = /Library/Frameworks/Lua.framework; sourceTree = ""; }; + FA577A6F16C719F000860150 /* mpg123.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = mpg123.framework; path = /Library/Frameworks/mpg123.framework; sourceTree = ""; }; + FA577A7116C719F400860150 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = ""; }; + FA577A7316C719F900860150 /* physfs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = physfs.framework; path = /Library/Frameworks/physfs.framework; sourceTree = ""; }; + FA577A7716C71A0800860150 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = /Library/Frameworks/Vorbis.framework; sourceTree = ""; }; + FA577A7916C71A1700860150 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + FA577A7C16C71A2600860150 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + FA577A8216C71A5300860150 /* libmodplug.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libmodplug.framework; path = /Library/Frameworks/libmodplug.framework; sourceTree = ""; }; + FA577A8C16C71D3600860150 /* auto.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = auto.lua; sourceTree = ""; }; + FA577A8D16C71D3600860150 /* boot.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = boot.lua; sourceTree = ""; }; + FA577AAF16C7507900860150 /* love.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = love.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FA57FB961AE1993600F2AD6D /* noise1234.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = noise1234.cpp; sourceTree = ""; }; + FA57FB971AE1993600F2AD6D /* noise1234.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = noise1234.h; sourceTree = ""; }; + FA59A2D61C0649BB00328DBA /* libtheora.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtheora.a; sourceTree = ""; }; + FA5D24A51A96D2EC00C6FC8F /* libFreetype2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libFreetype2.a; sourceTree = ""; }; + FA5D24AB1A96D2EC00C6FC8F /* libogg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libogg.a; sourceTree = ""; }; + FA5D24AD1A96D2EC00C6FC8F /* libphysfs.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libphysfs.a; sourceTree = ""; }; + FA5D24AF1A96D2EC00C6FC8F /* libvorbis.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbis.a; sourceTree = ""; }; + FA5D24CD1A96E63D00C6FC8F /* libSDL2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSDL2.a; sourceTree = ""; }; + FA620A2E1AA2F8DB005DB4C2 /* wrap_Quad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Quad.cpp; sourceTree = ""; }; + FA620A2F1AA2F8DB005DB4C2 /* wrap_Quad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Quad.h; sourceTree = ""; }; + FA620A301AA2F8DB005DB4C2 /* wrap_Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Texture.cpp; sourceTree = ""; }; + FA620A311AA2F8DB005DB4C2 /* wrap_Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Texture.h; sourceTree = ""; }; + FA620A391AA305F6005DB4C2 /* types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types.cpp; sourceTree = ""; }; + FA6AE6041B3335EC00583D5C /* wrap_Graphics.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = wrap_Graphics.lua; sourceTree = ""; }; + FA7550A71AEBE276003E311E /* libluajit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libluajit.a; sourceTree = ""; }; + FA7DA04C1C16874A0056B200 /* wrap_Math.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wrap_Math.lua; sourceTree = ""; }; + FA8951A01AA2EDF300EC385A /* wrap_Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Event.cpp; sourceTree = ""; }; + FA8951A11AA2EDF300EC385A /* wrap_Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Event.h; sourceTree = ""; }; + FA9B4A0716E1578300074F42 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = ""; }; + FAA3A9AC1B7D465A00CED060 /* android.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = android.cpp; sourceTree = ""; }; + FAA3A9AD1B7D465A00CED060 /* android.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = android.h; sourceTree = ""; }; + FAA627CD18E7E1560080752D /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; + FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "OpenAL-Soft.framework"; path = "/Library/Frameworks/OpenAL-Soft.framework"; sourceTree = ""; }; + FAB17BDE1ABFAA2000F9BA27 /* Compressor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Compressor.cpp; sourceTree = ""; }; + FAB17BDF1ABFAA2000F9BA27 /* Compressor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Compressor.h; sourceTree = ""; }; + FAB17BE41ABFAA9000F9BA27 /* lz4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4.c; sourceTree = ""; }; + FAB17BE51ABFAA9000F9BA27 /* lz4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4.h; sourceTree = ""; }; + FAB17BE91ABFAF1800F9BA27 /* CompressedData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompressedData.cpp; sourceTree = ""; }; + FAB17BEA1ABFAF1800F9BA27 /* CompressedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedData.h; sourceTree = ""; }; + FAB17BEE1ABFB37500F9BA27 /* wrap_CompressedData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_CompressedData.cpp; sourceTree = ""; }; + FAB17BEF1ABFB37500F9BA27 /* wrap_CompressedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_CompressedData.h; sourceTree = ""; }; + FAB17BF31ABFC4B100F9BA27 /* lz4hc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4hc.c; sourceTree = ""; }; + FAB17BF41ABFC4B100F9BA27 /* lz4hc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4hc.h; sourceTree = ""; }; + FAB2D5A81AABDD8A008224A4 /* TrueTypeRasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrueTypeRasterizer.cpp; sourceTree = ""; }; + FAB2D5A91AABDD8A008224A4 /* TrueTypeRasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrueTypeRasterizer.h; sourceTree = ""; }; + FAC734C11B2E021A00AB460A /* wrap_SoundData.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = wrap_SoundData.lua; sourceTree = ""; }; + FAC734C21B2E628700AB460A /* wrap_ImageData.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = wrap_ImageData.lua; sourceTree = ""; }; + FAE272501C05A15B00A67640 /* ParticleSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleSystem.cpp; sourceTree = ""; }; + FAE272511C05A15B00A67640 /* ParticleSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParticleSystem.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + FA0B78DA1A958B90000E1D17 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FA5D24B51A96D2EC00C6FC8F /* libvorbis.a in Frameworks */, + FA5D24B31A96D2EC00C6FC8F /* libogg.a in Frameworks */, + FA59A2D81C0649C200328DBA /* libtheora.a in Frameworks */, + FA56D9BC1C208A0200D8D3C7 /* libmodplug.a in Frameworks */, + FA5D24B01A96D2EC00C6FC8F /* libFreetype2.a in Frameworks */, + FA5D24B41A96D2EC00C6FC8F /* libphysfs.a in Frameworks */, + FA7550A81AEBE276003E311E /* libluajit.a in Frameworks */, + FA5D24CF1A96E68300C6FC8F /* libSDL2.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA577AAB16C7507900860150 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FA27B3C91B498623008A9DCE /* Theora.framework in Frameworks */, + FA317EBA18F28B6D00B0BCD7 /* libz.dylib in Frameworks */, + FAA627CE18E7E1560080752D /* CoreServices.framework in Frameworks */, + FA9B4A0816E1578300074F42 /* SDL2.framework in Frameworks */, + FAAFF04416CB11C700CCDE45 /* OpenAL-Soft.framework in Frameworks */, + FA577AB016C7507900860150 /* Cocoa.framework in Frameworks */, + FA577AC216C7512D00860150 /* FreeType.framework in Frameworks */, + FA577AC516C7513400860150 /* libmodplug.framework in Frameworks */, + FA577AC716C7513A00860150 /* mpg123.framework in Frameworks */, + FA577AC816C7513C00860150 /* Ogg.framework in Frameworks */, + FA577ACA16C7514100860150 /* OpenGL.framework in Frameworks */, + FA577ACB16C7514400860150 /* physfs.framework in Frameworks */, + FA577ACD16C7514C00860150 /* Vorbis.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2F654C0235EB60C744A22507 /* Products */ = { + isa = PBXGroup; + children = ( + FA577AAF16C7507900860150 /* love.framework */, + FA0B78DD1A958B90000E1D17 /* liblove.a */, + ); + name = Products; + sourceTree = ""; + }; + 352E6C5F6F8A681766EB5299 /* scripts */ = { + isa = PBXGroup; + children = ( + FA577A8C16C71D3600860150 /* auto.lua */, + FA577A8D16C71D3600860150 /* boot.lua */, + 503971A86B7167A91B670FBA /* boot.lua.h */, + FA283EDC1B27CFAA00C70067 /* nogame.lua */, + FA283EDD1B27CFAA00C70067 /* nogame.lua.h */, + ); + name = scripts; + path = ../../src/scripts; + sourceTree = ""; + }; + 54067CFB7D564E5764FA17DC /* love */ = { + isa = PBXGroup; + children = ( + FA0B78F61A958E3B000E1D17 /* common */, + FA0B794D1A958EA3000E1D17 /* libraries */, + FA0B7B3C1A95902C000E1D17 /* modules */, + 352E6C5F6F8A681766EB5299 /* scripts */, + FA577A6616C7199700860150 /* Frameworks */, + FA5D24A11A96D24500C6FC8F /* Libraries */, + FA08F5AC16C751BA00F007B5 /* Resources */, + 2F654C0235EB60C744A22507 /* Products */, + ); + name = love; + sourceTree = ""; + usesTabs = 1; + }; + FA08F5AC16C751BA00F007B5 /* Resources */ = { + isa = PBXGroup; + children = ( + FA08F5AE16C7525600F007B5 /* liblove-macosx.plist */, + ); + name = Resources; + sourceTree = ""; + }; + FA0B78F61A958E3B000E1D17 /* common */ = { + isa = PBXGroup; + children = ( + FAA3A9AC1B7D465A00CED060 /* android.cpp */, + FAA3A9AD1B7D465A00CED060 /* android.h */, + FA0B78F71A958E3B000E1D17 /* b64.cpp */, + FA0B78F81A958E3B000E1D17 /* b64.h */, + FA0B78F91A958E3B000E1D17 /* config.h */, + FA0B78FA1A958E3B000E1D17 /* Data.h */, + FA0B78FB1A958E3B000E1D17 /* delay.cpp */, + FA0B78FC1A958E3B000E1D17 /* delay.h */, + FA0B78FD1A958E3B000E1D17 /* EnumMap.h */, + FA0B78FE1A958E3B000E1D17 /* Exception.cpp */, + FA0B78FF1A958E3B000E1D17 /* Exception.h */, + FA0B79001A958E3B000E1D17 /* int.h */, + FA0B7EF01A959D2C000E1D17 /* ios.h */, + FA0B7EF11A959D2C000E1D17 /* ios.mm */, + FA0B79011A958E3B000E1D17 /* math.h */, + FA0B79021A958E3B000E1D17 /* Matrix.cpp */, + FA0B79031A958E3B000E1D17 /* Matrix.h */, + FA0B79041A958E3B000E1D17 /* Memoizer.cpp */, + FA0B79051A958E3B000E1D17 /* Memoizer.h */, + FA0B79061A958E3B000E1D17 /* Module.cpp */, + FA0B79071A958E3B000E1D17 /* Module.h */, + FA0B79081A958E3B000E1D17 /* Object.cpp */, + FA0B79091A958E3B000E1D17 /* Object.h */, + FA0B790A1A958E3B000E1D17 /* macosx.h */, + FA0B790B1A958E3B000E1D17 /* macosx.mm */, + FA0B790C1A958E3B000E1D17 /* Reference.cpp */, + FA0B790D1A958E3B000E1D17 /* Reference.h */, + FA0B790E1A958E3B000E1D17 /* runtime.cpp */, + FA0B790F1A958E3B000E1D17 /* runtime.h */, + FA0B79101A958E3B000E1D17 /* StringMap.h */, + FA620A391AA305F6005DB4C2 /* types.cpp */, + FA0B79111A958E3B000E1D17 /* types.h */, + FA0B79121A958E3B000E1D17 /* utf8.cpp */, + FA0B79131A958E3B000E1D17 /* utf8.h */, + FA0B79141A958E3B000E1D17 /* Variant.cpp */, + FA0B79151A958E3B000E1D17 /* Variant.h */, + FA0B79161A958E3B000E1D17 /* Vector.cpp */, + FA0B79171A958E3B000E1D17 /* Vector.h */, + FA0B79181A958E3B000E1D17 /* version.h */, + FA0B79191A958E3B000E1D17 /* wrap_Data.cpp */, + FA0B791A1A958E3B000E1D17 /* wrap_Data.h */, + ); + name = common; + path = ../../src/common; + sourceTree = ""; + }; + FA0B794D1A958EA3000E1D17 /* libraries */ = { + isa = PBXGroup; + children = ( + FA0B794E1A958EA3000E1D17 /* Box2D */, + FA0B79B41A958EA3000E1D17 /* ddsparse */, + FA0B79B81A958EA3000E1D17 /* enet */, + FA0B79D31A958EA3000E1D17 /* glad */, + FA0B79D81A958EA3000E1D17 /* lodepng */, + FA0B79DB1A958EA3000E1D17 /* luasocket */, + FA0B7A101A958EA3000E1D17 /* luautf8 */, + FAB17BE31ABFAA9000F9BA27 /* lz4 */, + FA0B7A141A958EA3000E1D17 /* noise1234 */, + FA0B7A171A958EA3000E1D17 /* stb */, + FA0B7A191A958EA3000E1D17 /* utf8 */, + FA0B7A1F1A958EA3000E1D17 /* Wuff */, + ); + name = libraries; + path = ../../src/libraries; + sourceTree = ""; + }; + FA0B794E1A958EA3000E1D17 /* Box2D */ = { + isa = PBXGroup; + children = ( + FA0B794F1A958EA3000E1D17 /* Box2D.h */, + FA0B79501A958EA3000E1D17 /* Collision */, + FA0B79681A958EA3000E1D17 /* Common */, + FA0B79761A958EA3000E1D17 /* Dynamics */, + FA0B79B11A958EA3000E1D17 /* Rope */, + ); + path = Box2D; + sourceTree = ""; + }; + FA0B79501A958EA3000E1D17 /* Collision */ = { + isa = PBXGroup; + children = ( + FA0B79511A958EA3000E1D17 /* b2BroadPhase.cpp */, + FA0B79521A958EA3000E1D17 /* b2BroadPhase.h */, + FA0B79531A958EA3000E1D17 /* b2CollideCircle.cpp */, + FA0B79541A958EA3000E1D17 /* b2CollideEdge.cpp */, + FA0B79551A958EA3000E1D17 /* b2CollidePolygon.cpp */, + FA0B79561A958EA3000E1D17 /* b2Collision.cpp */, + FA0B79571A958EA3000E1D17 /* b2Collision.h */, + FA0B79581A958EA3000E1D17 /* b2Distance.cpp */, + FA0B79591A958EA3000E1D17 /* b2Distance.h */, + FA0B795A1A958EA3000E1D17 /* b2DynamicTree.cpp */, + FA0B795B1A958EA3000E1D17 /* b2DynamicTree.h */, + FA0B795C1A958EA3000E1D17 /* b2TimeOfImpact.cpp */, + FA0B795D1A958EA3000E1D17 /* b2TimeOfImpact.h */, + FA0B795E1A958EA3000E1D17 /* Shapes */, + ); + path = Collision; + sourceTree = ""; + }; + FA0B795E1A958EA3000E1D17 /* Shapes */ = { + isa = PBXGroup; + children = ( + FA0B795F1A958EA3000E1D17 /* b2ChainShape.cpp */, + FA0B79601A958EA3000E1D17 /* b2ChainShape.h */, + FA0B79611A958EA3000E1D17 /* b2CircleShape.cpp */, + FA0B79621A958EA3000E1D17 /* b2CircleShape.h */, + FA0B79631A958EA3000E1D17 /* b2EdgeShape.cpp */, + FA0B79641A958EA3000E1D17 /* b2EdgeShape.h */, + FA0B79651A958EA3000E1D17 /* b2PolygonShape.cpp */, + FA0B79661A958EA3000E1D17 /* b2PolygonShape.h */, + FA0B79671A958EA3000E1D17 /* b2Shape.h */, + ); + path = Shapes; + sourceTree = ""; + }; + FA0B79681A958EA3000E1D17 /* Common */ = { + isa = PBXGroup; + children = ( + FA0B79691A958EA3000E1D17 /* b2BlockAllocator.cpp */, + FA0B796A1A958EA3000E1D17 /* b2BlockAllocator.h */, + FA0B796B1A958EA3000E1D17 /* b2Draw.cpp */, + FA0B796C1A958EA3000E1D17 /* b2Draw.h */, + FA0B796D1A958EA3000E1D17 /* b2GrowableStack.h */, + FA0B796E1A958EA3000E1D17 /* b2Math.cpp */, + FA0B796F1A958EA3000E1D17 /* b2Math.h */, + FA0B79701A958EA3000E1D17 /* b2Settings.cpp */, + FA0B79711A958EA3000E1D17 /* b2Settings.h */, + FA0B79721A958EA3000E1D17 /* b2StackAllocator.cpp */, + FA0B79731A958EA3000E1D17 /* b2StackAllocator.h */, + FA0B79741A958EA3000E1D17 /* b2Timer.cpp */, + FA0B79751A958EA3000E1D17 /* b2Timer.h */, + ); + path = Common; + sourceTree = ""; + }; + FA0B79761A958EA3000E1D17 /* Dynamics */ = { + isa = PBXGroup; + children = ( + FA0B79771A958EA3000E1D17 /* b2Body.cpp */, + FA0B79781A958EA3000E1D17 /* b2Body.h */, + FA0B79791A958EA3000E1D17 /* b2ContactManager.cpp */, + FA0B797A1A958EA3000E1D17 /* b2ContactManager.h */, + FA0B797B1A958EA3000E1D17 /* b2Fixture.cpp */, + FA0B797C1A958EA3000E1D17 /* b2Fixture.h */, + FA0B797D1A958EA3000E1D17 /* b2Island.cpp */, + FA0B797E1A958EA3000E1D17 /* b2Island.h */, + FA0B797F1A958EA3000E1D17 /* b2TimeStep.h */, + FA0B79801A958EA3000E1D17 /* b2World.cpp */, + FA0B79811A958EA3000E1D17 /* b2World.h */, + FA0B79821A958EA3000E1D17 /* b2WorldCallbacks.cpp */, + FA0B79831A958EA3000E1D17 /* b2WorldCallbacks.h */, + FA0B79841A958EA3000E1D17 /* Contacts */, + FA0B79971A958EA3000E1D17 /* Joints */, + ); + path = Dynamics; + sourceTree = ""; + }; + FA0B79841A958EA3000E1D17 /* Contacts */ = { + isa = PBXGroup; + children = ( + FA0B79851A958EA3000E1D17 /* b2ChainAndCircleContact.cpp */, + FA0B79861A958EA3000E1D17 /* b2ChainAndCircleContact.h */, + FA0B79871A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp */, + FA0B79881A958EA3000E1D17 /* b2ChainAndPolygonContact.h */, + FA0B79891A958EA3000E1D17 /* b2CircleContact.cpp */, + FA0B798A1A958EA3000E1D17 /* b2CircleContact.h */, + FA0B798B1A958EA3000E1D17 /* b2Contact.cpp */, + FA0B798C1A958EA3000E1D17 /* b2Contact.h */, + FA0B798D1A958EA3000E1D17 /* b2ContactSolver.cpp */, + FA0B798E1A958EA3000E1D17 /* b2ContactSolver.h */, + FA0B798F1A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp */, + FA0B79901A958EA3000E1D17 /* b2EdgeAndCircleContact.h */, + FA0B79911A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp */, + FA0B79921A958EA3000E1D17 /* b2EdgeAndPolygonContact.h */, + FA0B79931A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp */, + FA0B79941A958EA3000E1D17 /* b2PolygonAndCircleContact.h */, + FA0B79951A958EA3000E1D17 /* b2PolygonContact.cpp */, + FA0B79961A958EA3000E1D17 /* b2PolygonContact.h */, + ); + path = Contacts; + sourceTree = ""; + }; + FA0B79971A958EA3000E1D17 /* Joints */ = { + isa = PBXGroup; + children = ( + FA0B79981A958EA3000E1D17 /* b2DistanceJoint.cpp */, + FA0B79991A958EA3000E1D17 /* b2DistanceJoint.h */, + FA0B799A1A958EA3000E1D17 /* b2FrictionJoint.cpp */, + FA0B799B1A958EA3000E1D17 /* b2FrictionJoint.h */, + FA0B799C1A958EA3000E1D17 /* b2GearJoint.cpp */, + FA0B799D1A958EA3000E1D17 /* b2GearJoint.h */, + FA0B799E1A958EA3000E1D17 /* b2Joint.cpp */, + FA0B799F1A958EA3000E1D17 /* b2Joint.h */, + FA0B79A01A958EA3000E1D17 /* b2MotorJoint.cpp */, + FA0B79A11A958EA3000E1D17 /* b2MotorJoint.h */, + FA0B79A21A958EA3000E1D17 /* b2MouseJoint.cpp */, + FA0B79A31A958EA3000E1D17 /* b2MouseJoint.h */, + FA0B79A41A958EA3000E1D17 /* b2PrismaticJoint.cpp */, + FA0B79A51A958EA3000E1D17 /* b2PrismaticJoint.h */, + FA0B79A61A958EA3000E1D17 /* b2PulleyJoint.cpp */, + FA0B79A71A958EA3000E1D17 /* b2PulleyJoint.h */, + FA0B79A81A958EA3000E1D17 /* b2RevoluteJoint.cpp */, + FA0B79A91A958EA3000E1D17 /* b2RevoluteJoint.h */, + FA0B79AA1A958EA3000E1D17 /* b2RopeJoint.cpp */, + FA0B79AB1A958EA3000E1D17 /* b2RopeJoint.h */, + FA0B79AC1A958EA3000E1D17 /* b2WeldJoint.cpp */, + FA0B79AD1A958EA3000E1D17 /* b2WeldJoint.h */, + FA0B79AE1A958EA3000E1D17 /* b2WheelJoint.cpp */, + FA0B79AF1A958EA3000E1D17 /* b2WheelJoint.h */, + ); + path = Joints; + sourceTree = ""; + }; + FA0B79B11A958EA3000E1D17 /* Rope */ = { + isa = PBXGroup; + children = ( + FA0B79B21A958EA3000E1D17 /* b2Rope.cpp */, + FA0B79B31A958EA3000E1D17 /* b2Rope.h */, + ); + path = Rope; + sourceTree = ""; + }; + FA0B79B41A958EA3000E1D17 /* ddsparse */ = { + isa = PBXGroup; + children = ( + FA0B79B51A958EA3000E1D17 /* ddsinfo.h */, + FA0B79B61A958EA3000E1D17 /* ddsparse.cpp */, + FA0B79B71A958EA3000E1D17 /* ddsparse.h */, + ); + path = ddsparse; + sourceTree = ""; + }; + FA0B79B81A958EA3000E1D17 /* enet */ = { + isa = PBXGroup; + children = ( + FA0B79B91A958EA3000E1D17 /* enet.cpp */, + FA0B79BA1A958EA3000E1D17 /* libenet */, + FA0B79D21A958EA3000E1D17 /* lua-enet.h */, + ); + path = enet; + sourceTree = ""; + }; + FA0B79BA1A958EA3000E1D17 /* libenet */ = { + isa = PBXGroup; + children = ( + FA0B79BB1A958EA3000E1D17 /* callbacks.c */, + FA0B79BD1A958EA3000E1D17 /* compress.c */, + FA0B79BE1A958EA3000E1D17 /* host.c */, + FA0B79BF1A958EA3000E1D17 /* include */, + FA0B79CB1A958EA3000E1D17 /* list.c */, + FA0B79CC1A958EA3000E1D17 /* packet.c */, + FA0B79CD1A958EA3000E1D17 /* peer.c */, + FA0B79CE1A958EA3000E1D17 /* protocol.c */, + FA0B79D01A958EA3000E1D17 /* unix.c */, + FA0B79D11A958EA3000E1D17 /* win32.c */, + ); + path = libenet; + sourceTree = ""; + }; + FA0B79BF1A958EA3000E1D17 /* include */ = { + isa = PBXGroup; + children = ( + FA0B79C01A958EA3000E1D17 /* enet */, + ); + path = include; + sourceTree = ""; + }; + FA0B79C01A958EA3000E1D17 /* enet */ = { + isa = PBXGroup; + children = ( + FA0B79C11A958EA3000E1D17 /* callbacks.h */, + FA0B79C21A958EA3000E1D17 /* enet.h */, + FA0B79C31A958EA3000E1D17 /* list.h */, + FA0B79C41A958EA3000E1D17 /* protocol.h */, + FA0B79C51A958EA3000E1D17 /* time.h */, + FA0B79C61A958EA3000E1D17 /* types.h */, + FA0B79C71A958EA3000E1D17 /* unix.h */, + FA0B79C81A958EA3000E1D17 /* utility.h */, + FA0B79C91A958EA3000E1D17 /* win32.h */, + ); + path = enet; + sourceTree = ""; + }; + FA0B79D31A958EA3000E1D17 /* glad */ = { + isa = PBXGroup; + children = ( + FA0B79D41A958EA3000E1D17 /* glad.cpp */, + FA0B79D61A958EA3000E1D17 /* glad.hpp */, + FA0B79D71A958EA3000E1D17 /* gladfuncs.hpp */, + ); + path = glad; + sourceTree = ""; + }; + FA0B79D81A958EA3000E1D17 /* lodepng */ = { + isa = PBXGroup; + children = ( + FA0B79D91A958EA3000E1D17 /* lodepng.cpp */, + FA0B79DA1A958EA3000E1D17 /* lodepng.h */, + ); + path = lodepng; + sourceTree = ""; + }; + FA0B79DB1A958EA3000E1D17 /* luasocket */ = { + isa = PBXGroup; + children = ( + FA0B79DC1A958EA3000E1D17 /* libluasocket */, + FA0B7A0E1A958EA3000E1D17 /* luasocket.cpp */, + FA0B7A0F1A958EA3000E1D17 /* luasocket.h */, + ); + path = luasocket; + sourceTree = ""; + }; + FA0B79DC1A958EA3000E1D17 /* libluasocket */ = { + isa = PBXGroup; + children = ( + FA0B79DD1A958EA3000E1D17 /* auxiliar.c */, + FA0B79DE1A958EA3000E1D17 /* auxiliar.h */, + FA0B79DF1A958EA3000E1D17 /* buffer.c */, + FA0B79E01A958EA3000E1D17 /* buffer.h */, + FA0B79E11A958EA3000E1D17 /* except.c */, + FA0B79E21A958EA3000E1D17 /* except.h */, + FA0B79E31A958EA3000E1D17 /* ftp.lua */, + FA0B79E41A958EA3000E1D17 /* ftp.lua.h */, + FA0B79E51A958EA3000E1D17 /* http.lua */, + FA0B79E61A958EA3000E1D17 /* http.lua.h */, + FA0B79E71A958EA3000E1D17 /* inet.c */, + FA0B79E81A958EA3000E1D17 /* inet.h */, + FA0B79E91A958EA3000E1D17 /* io.c */, + FA0B79EA1A958EA3000E1D17 /* io.h */, + FA0B79EB1A958EA3000E1D17 /* ltn12.lua */, + FA0B79EC1A958EA3000E1D17 /* ltn12.lua.h */, + FA0B79ED1A958EA3000E1D17 /* lua.h */, + FA0B79EE1A958EA3000E1D17 /* luasocket.c */, + FA0B79EF1A958EA3000E1D17 /* luasocket.h */, + FA0B79F01A958EA3000E1D17 /* mime.c */, + FA0B79F11A958EA3000E1D17 /* mime.h */, + FA0B79F21A958EA3000E1D17 /* mime.lua */, + FA0B79F31A958EA3000E1D17 /* mime.lua.h */, + FA0B79F41A958EA3000E1D17 /* options.c */, + FA0B79F51A958EA3000E1D17 /* options.h */, + FA0B79F61A958EA3000E1D17 /* pre.lua */, + FA0B79F71A958EA3000E1D17 /* select.c */, + FA0B79F81A958EA3000E1D17 /* select.h */, + FA0B79F91A958EA3000E1D17 /* smtp.lua */, + FA0B79FA1A958EA3000E1D17 /* smtp.lua.h */, + FA0B79FB1A958EA3000E1D17 /* socket.h */, + FA0B79FC1A958EA3000E1D17 /* socket.lua */, + FA0B79FD1A958EA3000E1D17 /* socket.lua.h */, + FA0B79FE1A958EA3000E1D17 /* tcp.c */, + FA0B79FF1A958EA3000E1D17 /* tcp.h */, + FA0B7A001A958EA3000E1D17 /* timeout.c */, + FA0B7A011A958EA3000E1D17 /* timeout.h */, + FA0B7A021A958EA3000E1D17 /* tp.lua */, + FA0B7A031A958EA3000E1D17 /* tp.lua.h */, + FA0B7A041A958EA3000E1D17 /* udp.c */, + FA0B7A051A958EA3000E1D17 /* udp.h */, + FA0B7A061A958EA3000E1D17 /* unix.c */, + FA0B7A071A958EA3000E1D17 /* unix.h */, + FA0B7A081A958EA3000E1D17 /* url.lua */, + FA0B7A091A958EA3000E1D17 /* url.lua.h */, + FA0B7A0A1A958EA3000E1D17 /* usocket.c */, + FA0B7A0B1A958EA3000E1D17 /* usocket.h */, + ); + path = libluasocket; + sourceTree = ""; + }; + FA0B7A101A958EA3000E1D17 /* luautf8 */ = { + isa = PBXGroup; + children = ( + FA0B7A111A958EA3000E1D17 /* lprefix.h */, + FA0B7A121A958EA3000E1D17 /* lutf8lib.c */, + FA0B7A131A958EA3000E1D17 /* lutf8lib.h */, + ); + path = luautf8; + sourceTree = ""; + }; + FA0B7A141A958EA3000E1D17 /* noise1234 */ = { + isa = PBXGroup; + children = ( + FA57FB961AE1993600F2AD6D /* noise1234.cpp */, + FA57FB971AE1993600F2AD6D /* noise1234.h */, + FA0B7A151A958EA3000E1D17 /* simplexnoise1234.cpp */, + FA0B7A161A958EA3000E1D17 /* simplexnoise1234.h */, + ); + path = noise1234; + sourceTree = ""; + }; + FA0B7A171A958EA3000E1D17 /* stb */ = { + isa = PBXGroup; + children = ( + FA0B7A181A958EA3000E1D17 /* stb_image.h */, + ); + path = stb; + sourceTree = ""; + }; + FA0B7A191A958EA3000E1D17 /* utf8 */ = { + isa = PBXGroup; + children = ( + FA0B7A1A1A958EA3000E1D17 /* utf8 */, + FA0B7A1E1A958EA3000E1D17 /* utf8.h */, + ); + path = utf8; + sourceTree = ""; + }; + FA0B7A1A1A958EA3000E1D17 /* utf8 */ = { + isa = PBXGroup; + children = ( + FA0B7A1B1A958EA3000E1D17 /* checked.h */, + FA0B7A1C1A958EA3000E1D17 /* core.h */, + FA0B7A1D1A958EA3000E1D17 /* unchecked.h */, + ); + path = utf8; + sourceTree = ""; + }; + FA0B7A1F1A958EA3000E1D17 /* Wuff */ = { + isa = PBXGroup; + children = ( + FA0B7A201A958EA3000E1D17 /* wuff.c */, + FA0B7A211A958EA3000E1D17 /* wuff.h */, + FA0B7A221A958EA3000E1D17 /* wuff_config.h */, + FA0B7A231A958EA3000E1D17 /* wuff_convert.c */, + FA0B7A241A958EA3000E1D17 /* wuff_convert.h */, + FA0B7A251A958EA3000E1D17 /* wuff_internal.c */, + FA0B7A261A958EA3000E1D17 /* wuff_internal.h */, + FA0B7A271A958EA3000E1D17 /* wuff_memory.c */, + ); + path = Wuff; + sourceTree = ""; + }; + FA0B7B3C1A95902C000E1D17 /* modules */ = { + isa = PBXGroup; + children = ( + FA0B7B3D1A95902C000E1D17 /* audio */, + FA0B7B521A95902C000E1D17 /* event */, + FA0B7B5A1A95902C000E1D17 /* filesystem */, + FA0B7B701A95902C000E1D17 /* font */, + FA0B7B871A95902C000E1D17 /* graphics */, + FA0B7BC21A95902C000E1D17 /* image */, + FA0B7BE81A95902C000E1D17 /* joystick */, + FA0B7BF51A95902C000E1D17 /* keyboard */, + FA0B7BFD1A95902C000E1D17 /* love */, + FA0B7C001A95902C000E1D17 /* math */, + FA0B7C0D1A95902C000E1D17 /* mouse */, + FA0B7C1B1A95902C000E1D17 /* physics */, + FA0B7C7B1A95902C000E1D17 /* sound */, + FA0B7C9A1A95902C000E1D17 /* system */, + FA0B7CA21A95902C000E1D17 /* thread */, + FA0B7CB71A95902C000E1D17 /* timer */, + FA0B7CBE1A95902C000E1D17 /* touch */, + FA27B3881B498151008A9DCE /* video */, + FA0B7CC51A95902C000E1D17 /* window */, + ); + name = modules; + path = ../../src/modules; + sourceTree = ""; + }; + FA0B7B3D1A95902C000E1D17 /* audio */ = { + isa = PBXGroup; + children = ( + FA0B7B3E1A95902C000E1D17 /* Audio.cpp */, + FA0B7B3F1A95902C000E1D17 /* Audio.h */, + FA0B7B401A95902C000E1D17 /* null */, + FA0B7B451A95902C000E1D17 /* openal */, + FA0B7B4C1A95902C000E1D17 /* Source.cpp */, + FA0B7B4D1A95902C000E1D17 /* Source.h */, + FA0B7B4E1A95902C000E1D17 /* wrap_Audio.cpp */, + FA0B7B4F1A95902C000E1D17 /* wrap_Audio.h */, + FA0B7B501A95902C000E1D17 /* wrap_Source.cpp */, + FA0B7B511A95902C000E1D17 /* wrap_Source.h */, + ); + path = audio; + sourceTree = ""; + }; + FA0B7B401A95902C000E1D17 /* null */ = { + isa = PBXGroup; + children = ( + FA0B7B411A95902C000E1D17 /* Audio.cpp */, + FA0B7B421A95902C000E1D17 /* Audio.h */, + FA0B7B431A95902C000E1D17 /* Source.cpp */, + FA0B7B441A95902C000E1D17 /* Source.h */, + ); + path = null; + sourceTree = ""; + }; + FA0B7B451A95902C000E1D17 /* openal */ = { + isa = PBXGroup; + children = ( + FA0B7B461A95902C000E1D17 /* Audio.cpp */, + FA0B7B471A95902C000E1D17 /* Audio.h */, + FA0B7B481A95902C000E1D17 /* Pool.cpp */, + FA0B7B491A95902C000E1D17 /* Pool.h */, + FA0B7B4A1A95902C000E1D17 /* Source.cpp */, + FA0B7B4B1A95902C000E1D17 /* Source.h */, + ); + path = openal; + sourceTree = ""; + }; + FA0B7B521A95902C000E1D17 /* event */ = { + isa = PBXGroup; + children = ( + FA0B7B531A95902C000E1D17 /* Event.cpp */, + FA0B7B541A95902C000E1D17 /* Event.h */, + FA0B7B551A95902C000E1D17 /* sdl */, + FA8951A01AA2EDF300EC385A /* wrap_Event.cpp */, + FA8951A11AA2EDF300EC385A /* wrap_Event.h */, + ); + path = event; + sourceTree = ""; + }; + FA0B7B551A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7B561A95902C000E1D17 /* Event.cpp */, + FA0B7B571A95902C000E1D17 /* Event.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7B5A1A95902C000E1D17 /* filesystem */ = { + isa = PBXGroup; + children = ( + FA0B7B5B1A95902C000E1D17 /* DroppedFile.cpp */, + FA0B7B5C1A95902C000E1D17 /* DroppedFile.h */, + FA0B7B5D1A95902C000E1D17 /* File.cpp */, + FA0B7B5E1A95902C000E1D17 /* File.h */, + FA0B7B5F1A95902C000E1D17 /* FileData.cpp */, + FA0B7B601A95902C000E1D17 /* FileData.h */, + FA0B7B611A95902C000E1D17 /* Filesystem.cpp */, + FA0B7B621A95902C000E1D17 /* Filesystem.h */, + FA0B7B631A95902C000E1D17 /* physfs */, + FA0B7B681A95902C000E1D17 /* wrap_DroppedFile.cpp */, + FA0B7B691A95902C000E1D17 /* wrap_DroppedFile.h */, + FA0B7B6A1A95902C000E1D17 /* wrap_File.cpp */, + FA0B7B6B1A95902C000E1D17 /* wrap_File.h */, + FA0B7B6C1A95902C000E1D17 /* wrap_FileData.cpp */, + FA0B7B6D1A95902C000E1D17 /* wrap_FileData.h */, + FA0B7B6E1A95902C000E1D17 /* wrap_Filesystem.cpp */, + FA0B7B6F1A95902C000E1D17 /* wrap_Filesystem.h */, + ); + path = filesystem; + sourceTree = ""; + }; + FA0B7B631A95902C000E1D17 /* physfs */ = { + isa = PBXGroup; + children = ( + FA0B7B641A95902C000E1D17 /* File.cpp */, + FA0B7B651A95902C000E1D17 /* File.h */, + FA0B7B661A95902C000E1D17 /* Filesystem.cpp */, + FA0B7B671A95902C000E1D17 /* Filesystem.h */, + ); + path = physfs; + sourceTree = ""; + }; + FA0B7B701A95902C000E1D17 /* font */ = { + isa = PBXGroup; + children = ( + FA0B7B711A95902C000E1D17 /* BMFontRasterizer.cpp */, + FA0B7B721A95902C000E1D17 /* BMFontRasterizer.h */, + FA0B7B731A95902C000E1D17 /* Font.cpp */, + FA0B7B741A95902C000E1D17 /* Font.h */, + FA0B7B751A95902C000E1D17 /* freetype */, + FA0B7B7A1A95902C000E1D17 /* GlyphData.cpp */, + FA0B7B7B1A95902C000E1D17 /* GlyphData.h */, + FA0B7B7C1A95902C000E1D17 /* ImageRasterizer.cpp */, + FA0B7B7D1A95902C000E1D17 /* ImageRasterizer.h */, + FA0B7B7E1A95902C000E1D17 /* Rasterizer.cpp */, + FA0B7B7F1A95902C000E1D17 /* Rasterizer.h */, + FAB2D5A81AABDD8A008224A4 /* TrueTypeRasterizer.cpp */, + FAB2D5A91AABDD8A008224A4 /* TrueTypeRasterizer.h */, + FA0B7B801A95902C000E1D17 /* Vera.ttf.h */, + FA0B7B811A95902C000E1D17 /* wrap_Font.cpp */, + FA0B7B821A95902C000E1D17 /* wrap_Font.h */, + FA0B7B831A95902C000E1D17 /* wrap_GlyphData.cpp */, + FA0B7B841A95902C000E1D17 /* wrap_GlyphData.h */, + FA0B7B851A95902C000E1D17 /* wrap_Rasterizer.cpp */, + FA0B7B861A95902C000E1D17 /* wrap_Rasterizer.h */, + ); + path = font; + sourceTree = ""; + }; + FA0B7B751A95902C000E1D17 /* freetype */ = { + isa = PBXGroup; + children = ( + FA0B7B761A95902C000E1D17 /* Font.cpp */, + FA0B7B771A95902C000E1D17 /* Font.h */, + FA0B7B781A95902C000E1D17 /* TrueTypeRasterizer.cpp */, + FA0B7B791A95902C000E1D17 /* TrueTypeRasterizer.h */, + ); + path = freetype; + sourceTree = ""; + }; + FA0B7B871A95902C000E1D17 /* graphics */ = { + isa = PBXGroup; + children = ( + FA0B7B881A95902C000E1D17 /* Color.h */, + FA0B7B891A95902C000E1D17 /* Drawable.h */, + FA0B7B8A1A95902C000E1D17 /* Graphics.cpp */, + FA0B7B8B1A95902C000E1D17 /* Graphics.h */, + FA0B7B8C1A95902C000E1D17 /* opengl */, + FAE272501C05A15B00A67640 /* ParticleSystem.cpp */, + FAE272511C05A15B00A67640 /* ParticleSystem.h */, + FA0B7BBC1A95902C000E1D17 /* Quad.cpp */, + FA0B7BBD1A95902C000E1D17 /* Quad.h */, + FA0B7BBE1A95902C000E1D17 /* Texture.cpp */, + FA0B7BBF1A95902C000E1D17 /* Texture.h */, + FA0B7BC01A95902C000E1D17 /* Volatile.cpp */, + FA0B7BC11A95902C000E1D17 /* Volatile.h */, + FA620A2E1AA2F8DB005DB4C2 /* wrap_Quad.cpp */, + FA620A2F1AA2F8DB005DB4C2 /* wrap_Quad.h */, + FA620A301AA2F8DB005DB4C2 /* wrap_Texture.cpp */, + FA620A311AA2F8DB005DB4C2 /* wrap_Texture.h */, + ); + path = graphics; + sourceTree = ""; + }; + FA0B7B8C1A95902C000E1D17 /* opengl */ = { + isa = PBXGroup; + children = ( + FA0B7B8D1A95902C000E1D17 /* Canvas.cpp */, + FA0B7B8E1A95902C000E1D17 /* Canvas.h */, + FA0B7B8F1A95902C000E1D17 /* Font.cpp */, + FA0B7B901A95902C000E1D17 /* Font.h */, + FA0B7BA41A95902C000E1D17 /* GLBuffer.cpp */, + FA0B7BA51A95902C000E1D17 /* GLBuffer.h */, + FA0B7B911A95902C000E1D17 /* Graphics.cpp */, + FA0B7B921A95902C000E1D17 /* Graphics.h */, + FA0B7B931A95902C000E1D17 /* Image.cpp */, + FA0B7B941A95902C000E1D17 /* Image.h */, + FA0B7B951A95902C000E1D17 /* Mesh.cpp */, + FA0B7B961A95902C000E1D17 /* Mesh.h */, + FA0B7B971A95902C000E1D17 /* OpenGL.cpp */, + FA0B7B981A95902C000E1D17 /* OpenGL.h */, + FA0B7B991A95902C000E1D17 /* ParticleSystem.cpp */, + FA0B7B9A1A95902C000E1D17 /* ParticleSystem.h */, + FA0B7B9B1A95902C000E1D17 /* Polyline.cpp */, + FA0B7B9C1A95902C000E1D17 /* Polyline.h */, + FA0B7B9D1A95902C000E1D17 /* Shader.cpp */, + FA0B7B9E1A95902C000E1D17 /* Shader.h */, + FA0B7B9F1A95902C000E1D17 /* SpriteBatch.cpp */, + FA0B7BA01A95902C000E1D17 /* SpriteBatch.h */, + FA0B7BA11A95902C000E1D17 /* Text.cpp */, + FA0B7BA21A95902C000E1D17 /* Text.h */, + FA27B3C31B4985D8008A9DCE /* Video.cpp */, + FA27B3C41B4985D8008A9DCE /* Video.h */, + FA0B7BA61A95902C000E1D17 /* wrap_Canvas.cpp */, + FA0B7BA71A95902C000E1D17 /* wrap_Canvas.h */, + FA0B7BA81A95902C000E1D17 /* wrap_Font.cpp */, + FA0B7BA91A95902C000E1D17 /* wrap_Font.h */, + FA0B7BAA1A95902C000E1D17 /* wrap_Graphics.cpp */, + FA0B7BAB1A95902C000E1D17 /* wrap_Graphics.h */, + FA6AE6041B3335EC00583D5C /* wrap_Graphics.lua */, + FA0B7BAC1A95902C000E1D17 /* wrap_Image.cpp */, + FA0B7BAD1A95902C000E1D17 /* wrap_Image.h */, + FA0B7BAE1A95902C000E1D17 /* wrap_Mesh.cpp */, + FA0B7BAF1A95902C000E1D17 /* wrap_Mesh.h */, + FA0B7BB01A95902C000E1D17 /* wrap_ParticleSystem.cpp */, + FA0B7BB11A95902C000E1D17 /* wrap_ParticleSystem.h */, + FA0B7BB41A95902C000E1D17 /* wrap_Shader.cpp */, + FA0B7BB51A95902C000E1D17 /* wrap_Shader.h */, + FA0B7BB61A95902C000E1D17 /* wrap_SpriteBatch.cpp */, + FA0B7BB71A95902C000E1D17 /* wrap_SpriteBatch.h */, + FA0B7BB81A95902C000E1D17 /* wrap_Text.cpp */, + FA0B7BB91A95902C000E1D17 /* wrap_Text.h */, + FA19C4C21B4B0BD50059B0B3 /* wrap_Video.cpp */, + FA19C4C31B4B0BD50059B0B3 /* wrap_Video.h */, + FA19C4C41B4B0BD50059B0B3 /* wrap_Video.lua */, + ); + path = opengl; + sourceTree = ""; + }; + FA0B7BC21A95902C000E1D17 /* image */ = { + isa = PBXGroup; + children = ( + FA0B7BC31A95902C000E1D17 /* CompressedImageData.cpp */, + FA0B7BC41A95902C000E1D17 /* CompressedImageData.h */, + FA0B7BC51A95902C000E1D17 /* Image.h */, + FA0B7BC61A95902C000E1D17 /* ImageData.cpp */, + FA0B7BC71A95902C000E1D17 /* ImageData.h */, + FA0B7BC81A95902C000E1D17 /* magpie */, + FA0B7BE21A95902C000E1D17 /* wrap_CompressedImageData.cpp */, + FA0B7BE31A95902C000E1D17 /* wrap_CompressedImageData.h */, + FA0B7BE41A95902C000E1D17 /* wrap_Image.cpp */, + FA0B7BE51A95902C000E1D17 /* wrap_Image.h */, + FA0B7BE61A95902C000E1D17 /* wrap_ImageData.cpp */, + FA0B7BE71A95902C000E1D17 /* wrap_ImageData.h */, + FAC734C21B2E628700AB460A /* wrap_ImageData.lua */, + ); + path = image; + sourceTree = ""; + }; + FA0B7BC81A95902C000E1D17 /* magpie */ = { + isa = PBXGroup; + children = ( + FA41A3C61C0A1F950084430C /* ASTCHandler.cpp */, + FA41A3C71C0A1F950084430C /* ASTCHandler.h */, + FA0B7BCB1A95902C000E1D17 /* CompressedFormatHandler.h */, + FA0B7BC91A95902C000E1D17 /* CompressedImageData.cpp */, + FA0B7BCA1A95902C000E1D17 /* CompressedImageData.h */, + FA0B7BCC1A95902C000E1D17 /* ddsHandler.cpp */, + FA0B7BCD1A95902C000E1D17 /* ddsHandler.h */, + FA0B7BCE1A95902C000E1D17 /* FormatHandler.cpp */, + FA0B7BCF1A95902C000E1D17 /* FormatHandler.h */, + FA0B7BD01A95902C000E1D17 /* Image.cpp */, + FA0B7BD11A95902C000E1D17 /* Image.h */, + FA0B7BD21A95902C000E1D17 /* ImageData.cpp */, + FA0B7BD31A95902C000E1D17 /* ImageData.h */, + FA0B7BD81A95902C000E1D17 /* KTXHandler.cpp */, + FA0B7BD91A95902C000E1D17 /* KTXHandler.h */, + FA0B7BDA1A95902C000E1D17 /* PKMHandler.cpp */, + FA0B7BDB1A95902C000E1D17 /* PKMHandler.h */, + FA0B7BDC1A95902C000E1D17 /* PNGHandler.cpp */, + FA0B7BDD1A95902C000E1D17 /* PNGHandler.h */, + FA0B7BDE1A95902C000E1D17 /* PVRHandler.cpp */, + FA0B7BDF1A95902C000E1D17 /* PVRHandler.h */, + FA0B7BE01A95902C000E1D17 /* STBHandler.cpp */, + FA0B7BE11A95902C000E1D17 /* STBHandler.h */, + ); + path = magpie; + sourceTree = ""; + }; + FA0B7BE81A95902C000E1D17 /* joystick */ = { + isa = PBXGroup; + children = ( + FA0B7BE91A95902C000E1D17 /* Joystick.cpp */, + FA0B7BEA1A95902C000E1D17 /* Joystick.h */, + FA0B7BEB1A95902C000E1D17 /* JoystickModule.h */, + FA0B7BEC1A95902C000E1D17 /* sdl */, + FA0B7BF11A95902C000E1D17 /* wrap_Joystick.cpp */, + FA0B7BF21A95902C000E1D17 /* wrap_Joystick.h */, + FA0B7BF31A95902C000E1D17 /* wrap_JoystickModule.cpp */, + FA0B7BF41A95902C000E1D17 /* wrap_JoystickModule.h */, + ); + path = joystick; + sourceTree = ""; + }; + FA0B7BEC1A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7BED1A95902C000E1D17 /* Joystick.cpp */, + FA0B7BEE1A95902C000E1D17 /* Joystick.h */, + FA0B7BEF1A95902C000E1D17 /* JoystickModule.cpp */, + FA0B7BF01A95902C000E1D17 /* JoystickModule.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7BF51A95902C000E1D17 /* keyboard */ = { + isa = PBXGroup; + children = ( + FA0B7BF61A95902C000E1D17 /* Keyboard.cpp */, + FA0B7BF71A95902C000E1D17 /* Keyboard.h */, + FA0B7BF81A95902C000E1D17 /* sdl */, + FA0B7BFB1A95902C000E1D17 /* wrap_Keyboard.cpp */, + FA0B7BFC1A95902C000E1D17 /* wrap_Keyboard.h */, + ); + path = keyboard; + sourceTree = ""; + }; + FA0B7BF81A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7BF91A95902C000E1D17 /* Keyboard.cpp */, + FA0B7BFA1A95902C000E1D17 /* Keyboard.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7BFD1A95902C000E1D17 /* love */ = { + isa = PBXGroup; + children = ( + FA0B7BFE1A95902C000E1D17 /* love.cpp */, + FA0B7BFF1A95902C000E1D17 /* love.h */, + ); + path = love; + sourceTree = ""; + }; + FA0B7C001A95902C000E1D17 /* math */ = { + isa = PBXGroup; + children = ( + FA0B7C011A95902C000E1D17 /* BezierCurve.cpp */, + FA0B7C021A95902C000E1D17 /* BezierCurve.h */, + FAB17BE91ABFAF1800F9BA27 /* CompressedData.cpp */, + FAB17BEA1ABFAF1800F9BA27 /* CompressedData.h */, + FAB17BDE1ABFAA2000F9BA27 /* Compressor.cpp */, + FAB17BDF1ABFAA2000F9BA27 /* Compressor.h */, + FA0B7C031A95902C000E1D17 /* MathModule.cpp */, + FA0B7C041A95902C000E1D17 /* MathModule.h */, + FA0B7C051A95902C000E1D17 /* RandomGenerator.cpp */, + FA0B7C061A95902C000E1D17 /* RandomGenerator.h */, + FA0B7C071A95902C000E1D17 /* wrap_BezierCurve.cpp */, + FA0B7C081A95902C000E1D17 /* wrap_BezierCurve.h */, + FAB17BEE1ABFB37500F9BA27 /* wrap_CompressedData.cpp */, + FAB17BEF1ABFB37500F9BA27 /* wrap_CompressedData.h */, + FA0B7C091A95902C000E1D17 /* wrap_Math.cpp */, + FA0B7C0A1A95902C000E1D17 /* wrap_Math.h */, + FA7DA04C1C16874A0056B200 /* wrap_Math.lua */, + FA0B7C0B1A95902C000E1D17 /* wrap_RandomGenerator.cpp */, + FA0B7C0C1A95902C000E1D17 /* wrap_RandomGenerator.h */, + FA2E9BFE1C19E00C0004A1EE /* wrap_RandomGenerator.lua */, + ); + path = math; + sourceTree = ""; + }; + FA0B7C0D1A95902C000E1D17 /* mouse */ = { + isa = PBXGroup; + children = ( + FA0B7C0E1A95902C000E1D17 /* Cursor.cpp */, + FA0B7C0F1A95902C000E1D17 /* Cursor.h */, + FA0B7C111A95902C000E1D17 /* Mouse.h */, + FA0B7C121A95902C000E1D17 /* sdl */, + FA0B7C171A95902C000E1D17 /* wrap_Cursor.cpp */, + FA0B7C181A95902C000E1D17 /* wrap_Cursor.h */, + FA0B7C191A95902C000E1D17 /* wrap_Mouse.cpp */, + FA0B7C1A1A95902C000E1D17 /* wrap_Mouse.h */, + ); + path = mouse; + sourceTree = ""; + }; + FA0B7C121A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7C131A95902C000E1D17 /* Cursor.cpp */, + FA0B7C141A95902C000E1D17 /* Cursor.h */, + FA0B7C151A95902C000E1D17 /* Mouse.cpp */, + FA0B7C161A95902C000E1D17 /* Mouse.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7C1B1A95902C000E1D17 /* physics */ = { + isa = PBXGroup; + children = ( + FA0B7C1C1A95902C000E1D17 /* Body.cpp */, + FA0B7C1D1A95902C000E1D17 /* Body.h */, + FA0B7C1E1A95902C000E1D17 /* box2d */, + FA0B7C771A95902C000E1D17 /* Joint.cpp */, + FA0B7C781A95902C000E1D17 /* Joint.h */, + FA0B7C791A95902C000E1D17 /* Shape.cpp */, + FA0B7C7A1A95902C000E1D17 /* Shape.h */, + ); + path = physics; + sourceTree = ""; + }; + FA0B7C1E1A95902C000E1D17 /* box2d */ = { + isa = PBXGroup; + children = ( + FA0B7C1F1A95902C000E1D17 /* Body.cpp */, + FA0B7C201A95902C000E1D17 /* Body.h */, + FA0B7C211A95902C000E1D17 /* ChainShape.cpp */, + FA0B7C221A95902C000E1D17 /* ChainShape.h */, + FA0B7C231A95902C000E1D17 /* CircleShape.cpp */, + FA0B7C241A95902C000E1D17 /* CircleShape.h */, + FA0B7C251A95902C000E1D17 /* Contact.cpp */, + FA0B7C261A95902C000E1D17 /* Contact.h */, + FA0B7C271A95902C000E1D17 /* DistanceJoint.cpp */, + FA0B7C281A95902C000E1D17 /* DistanceJoint.h */, + FA0B7C291A95902C000E1D17 /* EdgeShape.cpp */, + FA0B7C2A1A95902C000E1D17 /* EdgeShape.h */, + FA0B7C2B1A95902C000E1D17 /* Fixture.cpp */, + FA0B7C2C1A95902C000E1D17 /* Fixture.h */, + FA0B7C2D1A95902C000E1D17 /* FrictionJoint.cpp */, + FA0B7C2E1A95902C000E1D17 /* FrictionJoint.h */, + FA0B7C2F1A95902C000E1D17 /* GearJoint.cpp */, + FA0B7C301A95902C000E1D17 /* GearJoint.h */, + FA0B7C311A95902C000E1D17 /* Joint.cpp */, + FA0B7C321A95902C000E1D17 /* Joint.h */, + FA0B7C331A95902C000E1D17 /* MotorJoint.cpp */, + FA0B7C341A95902C000E1D17 /* MotorJoint.h */, + FA0B7C351A95902C000E1D17 /* MouseJoint.cpp */, + FA0B7C361A95902C000E1D17 /* MouseJoint.h */, + FA0B7C371A95902C000E1D17 /* Physics.cpp */, + FA0B7C381A95902C000E1D17 /* Physics.h */, + FA0B7C391A95902C000E1D17 /* PolygonShape.cpp */, + FA0B7C3A1A95902C000E1D17 /* PolygonShape.h */, + FA0B7C3B1A95902C000E1D17 /* PrismaticJoint.cpp */, + FA0B7C3C1A95902C000E1D17 /* PrismaticJoint.h */, + FA0B7C3D1A95902C000E1D17 /* PulleyJoint.cpp */, + FA0B7C3E1A95902C000E1D17 /* PulleyJoint.h */, + FA0B7C3F1A95902C000E1D17 /* RevoluteJoint.cpp */, + FA0B7C401A95902C000E1D17 /* RevoluteJoint.h */, + FA0B7C411A95902C000E1D17 /* RopeJoint.cpp */, + FA0B7C421A95902C000E1D17 /* RopeJoint.h */, + FA0B7C431A95902C000E1D17 /* Shape.cpp */, + FA0B7C441A95902C000E1D17 /* Shape.h */, + FA0B7C451A95902C000E1D17 /* WeldJoint.cpp */, + FA0B7C461A95902C000E1D17 /* WeldJoint.h */, + FA0B7C471A95902C000E1D17 /* WheelJoint.cpp */, + FA0B7C481A95902C000E1D17 /* WheelJoint.h */, + FA0B7C491A95902C000E1D17 /* World.cpp */, + FA0B7C4A1A95902C000E1D17 /* World.h */, + FA0B7C4B1A95902C000E1D17 /* wrap_Body.cpp */, + FA0B7C4C1A95902C000E1D17 /* wrap_Body.h */, + FA0B7C4D1A95902C000E1D17 /* wrap_ChainShape.cpp */, + FA0B7C4E1A95902C000E1D17 /* wrap_ChainShape.h */, + FA0B7C4F1A95902C000E1D17 /* wrap_CircleShape.cpp */, + FA0B7C501A95902C000E1D17 /* wrap_CircleShape.h */, + FA0B7C511A95902C000E1D17 /* wrap_Contact.cpp */, + FA0B7C521A95902C000E1D17 /* wrap_Contact.h */, + FA0B7C531A95902C000E1D17 /* wrap_DistanceJoint.cpp */, + FA0B7C541A95902C000E1D17 /* wrap_DistanceJoint.h */, + FA0B7C551A95902C000E1D17 /* wrap_EdgeShape.cpp */, + FA0B7C561A95902C000E1D17 /* wrap_EdgeShape.h */, + FA0B7C571A95902C000E1D17 /* wrap_Fixture.cpp */, + FA0B7C581A95902C000E1D17 /* wrap_Fixture.h */, + FA0B7C591A95902C000E1D17 /* wrap_FrictionJoint.cpp */, + FA0B7C5A1A95902C000E1D17 /* wrap_FrictionJoint.h */, + FA0B7C5B1A95902C000E1D17 /* wrap_GearJoint.cpp */, + FA0B7C5C1A95902C000E1D17 /* wrap_GearJoint.h */, + FA0B7C5D1A95902C000E1D17 /* wrap_Joint.cpp */, + FA0B7C5E1A95902C000E1D17 /* wrap_Joint.h */, + FA0B7C5F1A95902C000E1D17 /* wrap_MotorJoint.cpp */, + FA0B7C601A95902C000E1D17 /* wrap_MotorJoint.h */, + FA0B7C611A95902C000E1D17 /* wrap_MouseJoint.cpp */, + FA0B7C621A95902C000E1D17 /* wrap_MouseJoint.h */, + FA0B7C631A95902C000E1D17 /* wrap_Physics.cpp */, + FA0B7C641A95902C000E1D17 /* wrap_Physics.h */, + FA0B7C651A95902C000E1D17 /* wrap_PolygonShape.cpp */, + FA0B7C661A95902C000E1D17 /* wrap_PolygonShape.h */, + FA0B7C671A95902C000E1D17 /* wrap_PrismaticJoint.cpp */, + FA0B7C681A95902C000E1D17 /* wrap_PrismaticJoint.h */, + FA0B7C691A95902C000E1D17 /* wrap_PulleyJoint.cpp */, + FA0B7C6A1A95902C000E1D17 /* wrap_PulleyJoint.h */, + FA0B7C6B1A95902C000E1D17 /* wrap_RevoluteJoint.cpp */, + FA0B7C6C1A95902C000E1D17 /* wrap_RevoluteJoint.h */, + FA0B7C6D1A95902C000E1D17 /* wrap_RopeJoint.cpp */, + FA0B7C6E1A95902C000E1D17 /* wrap_RopeJoint.h */, + FA0B7C6F1A95902C000E1D17 /* wrap_Shape.cpp */, + FA0B7C701A95902C000E1D17 /* wrap_Shape.h */, + FA0B7C711A95902C000E1D17 /* wrap_WeldJoint.cpp */, + FA0B7C721A95902C000E1D17 /* wrap_WeldJoint.h */, + FA0B7C731A95902C000E1D17 /* wrap_WheelJoint.cpp */, + FA0B7C741A95902C000E1D17 /* wrap_WheelJoint.h */, + FA0B7C751A95902C000E1D17 /* wrap_World.cpp */, + FA0B7C761A95902C000E1D17 /* wrap_World.h */, + ); + path = box2d; + sourceTree = ""; + }; + FA0B7C7B1A95902C000E1D17 /* sound */ = { + isa = PBXGroup; + children = ( + FA0B7C7C1A95902C000E1D17 /* Decoder.h */, + FA0B7C7D1A95902C000E1D17 /* lullaby */, + FA0B7C901A95902C000E1D17 /* Sound.cpp */, + FA0B7C911A95902C000E1D17 /* Sound.h */, + FA0B7C921A95902C000E1D17 /* SoundData.cpp */, + FA0B7C931A95902C000E1D17 /* SoundData.h */, + FA0B7C941A95902C000E1D17 /* wrap_Decoder.cpp */, + FA0B7C951A95902C000E1D17 /* wrap_Decoder.h */, + FA0B7C961A95902C000E1D17 /* wrap_Sound.cpp */, + FA0B7C971A95902C000E1D17 /* wrap_Sound.h */, + FA0B7C981A95902C000E1D17 /* wrap_SoundData.cpp */, + FA0B7C991A95902C000E1D17 /* wrap_SoundData.h */, + FAC734C11B2E021A00AB460A /* wrap_SoundData.lua */, + ); + path = sound; + sourceTree = ""; + }; + FA0B7C7D1A95902C000E1D17 /* lullaby */ = { + isa = PBXGroup; + children = ( + FA0B7C7E1A95902C000E1D17 /* CoreAudioDecoder.cpp */, + FA0B7C7F1A95902C000E1D17 /* CoreAudioDecoder.h */, + FA0B7C801A95902C000E1D17 /* Decoder.cpp */, + FA0B7C811A95902C000E1D17 /* Decoder.h */, + FA0B7C821A95902C000E1D17 /* FLACDecoder.cpp */, + FA0B7C831A95902C000E1D17 /* FLACDecoder.h */, + FA0B7C841A95902C000E1D17 /* GmeDecoder.cpp */, + FA0B7C851A95902C000E1D17 /* GmeDecoder.h */, + FA0B7C861A95902C000E1D17 /* ModPlugDecoder.cpp */, + FA0B7C871A95902C000E1D17 /* ModPlugDecoder.h */, + FA0B7C881A95902C000E1D17 /* Mpg123Decoder.cpp */, + FA0B7C891A95902C000E1D17 /* Mpg123Decoder.h */, + FA0B7C8A1A95902C000E1D17 /* Sound.cpp */, + FA0B7C8B1A95902C000E1D17 /* Sound.h */, + FA0B7C8C1A95902C000E1D17 /* VorbisDecoder.cpp */, + FA0B7C8D1A95902C000E1D17 /* VorbisDecoder.h */, + FA0B7C8E1A95902C000E1D17 /* WaveDecoder.cpp */, + FA0B7C8F1A95902C000E1D17 /* WaveDecoder.h */, + ); + path = lullaby; + sourceTree = ""; + }; + FA0B7C9A1A95902C000E1D17 /* system */ = { + isa = PBXGroup; + children = ( + FA0B7C9B1A95902C000E1D17 /* sdl */, + FA0B7C9E1A95902C000E1D17 /* System.cpp */, + FA0B7C9F1A95902C000E1D17 /* System.h */, + FA0B7CA01A95902C000E1D17 /* wrap_System.cpp */, + FA0B7CA11A95902C000E1D17 /* wrap_System.h */, + ); + path = system; + sourceTree = ""; + }; + FA0B7C9B1A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7C9C1A95902C000E1D17 /* System.cpp */, + FA0B7C9D1A95902C000E1D17 /* System.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7CA21A95902C000E1D17 /* thread */ = { + isa = PBXGroup; + children = ( + FA0B7CA31A95902C000E1D17 /* Channel.cpp */, + FA0B7CA41A95902C000E1D17 /* Channel.h */, + FA0B7CA51A95902C000E1D17 /* LuaThread.cpp */, + FA0B7CA61A95902C000E1D17 /* LuaThread.h */, + FA0B7CA71A95902C000E1D17 /* sdl */, + FA0B7CAC1A95902C000E1D17 /* Thread.h */, + FA0B7CAD1A95902C000E1D17 /* ThreadModule.cpp */, + FA0B7CAE1A95902C000E1D17 /* ThreadModule.h */, + FA0B7CAF1A95902C000E1D17 /* threads.cpp */, + FA0B7CB01A95902C000E1D17 /* threads.h */, + FA0B7CB11A95902C000E1D17 /* wrap_Channel.cpp */, + FA0B7CB21A95902C000E1D17 /* wrap_Channel.h */, + FA0B7CB31A95902C000E1D17 /* wrap_LuaThread.cpp */, + FA0B7CB41A95902C000E1D17 /* wrap_LuaThread.h */, + FA0B7CB51A95902C000E1D17 /* wrap_ThreadModule.cpp */, + FA0B7CB61A95902C000E1D17 /* wrap_ThreadModule.h */, + ); + path = thread; + sourceTree = ""; + }; + FA0B7CA71A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7CA81A95902C000E1D17 /* Thread.cpp */, + FA0B7CA91A95902C000E1D17 /* Thread.h */, + FA0B7CAA1A95902C000E1D17 /* threads.cpp */, + FA0B7CAB1A95902C000E1D17 /* threads.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7CB71A95902C000E1D17 /* timer */ = { + isa = PBXGroup; + children = ( + FA0B7CB81A95902C000E1D17 /* sdl */, + FA4B66C81ABBCF1900558F15 /* Timer.cpp */, + FA0B7CBB1A95902C000E1D17 /* Timer.h */, + FA0B7CBC1A95902C000E1D17 /* wrap_Timer.cpp */, + FA0B7CBD1A95902C000E1D17 /* wrap_Timer.h */, + ); + path = timer; + sourceTree = ""; + }; + FA0B7CB81A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7CB91A95902C000E1D17 /* Timer.cpp */, + FA0B7CBA1A95902C000E1D17 /* Timer.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7CBE1A95902C000E1D17 /* touch */ = { + isa = PBXGroup; + children = ( + FA0B7CBF1A95902C000E1D17 /* sdl */, + FA0B7CC21A95902C000E1D17 /* Touch.h */, + FA0B7CC31A95902C000E1D17 /* wrap_Touch.cpp */, + FA0B7CC41A95902C000E1D17 /* wrap_Touch.h */, + ); + path = touch; + sourceTree = ""; + }; + FA0B7CBF1A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7CC01A95902C000E1D17 /* Touch.cpp */, + FA0B7CC11A95902C000E1D17 /* Touch.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7CC51A95902C000E1D17 /* window */ = { + isa = PBXGroup; + children = ( + FA0B7CC61A95902C000E1D17 /* sdl */, + FA0B7CC91A95902C000E1D17 /* Window.cpp */, + FA0B7CCA1A95902C000E1D17 /* Window.h */, + FA0B7CCB1A95902C000E1D17 /* wrap_Window.cpp */, + FA0B7CCC1A95902C000E1D17 /* wrap_Window.h */, + ); + path = window; + sourceTree = ""; + }; + FA0B7CC61A95902C000E1D17 /* sdl */ = { + isa = PBXGroup; + children = ( + FA0B7CC71A95902C000E1D17 /* Window.cpp */, + FA0B7CC81A95902C000E1D17 /* Window.h */, + ); + path = sdl; + sourceTree = ""; + }; + FA0B7EEB1A959125000E1D17 /* macosx */ = { + isa = PBXGroup; + children = ( + FA27B3C81B498623008A9DCE /* Theora.framework */, + FA577A7916C71A1700860150 /* Cocoa.framework */, + FAA627CD18E7E1560080752D /* CoreServices.framework */, + FA577A6716C719D900860150 /* FreeType.framework */, + FA577A8216C71A5300860150 /* libmodplug.framework */, + FA317EB918F28B6D00B0BCD7 /* libz.dylib */, + FA577A6D16C719EA00860150 /* Lua.framework */, + FA577A6F16C719F000860150 /* mpg123.framework */, + FA577A7116C719F400860150 /* Ogg.framework */, + FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */, + FA577A7C16C71A2600860150 /* OpenGL.framework */, + FA577A7316C719F900860150 /* physfs.framework */, + FA9B4A0716E1578300074F42 /* SDL2.framework */, + FA577A7716C71A0800860150 /* Vorbis.framework */, + ); + name = macosx; + sourceTree = ""; + }; + FA27B3881B498151008A9DCE /* video */ = { + isa = PBXGroup; + children = ( + FA27B3891B498151008A9DCE /* theora */, + FA27B3931B498151008A9DCE /* Video.h */, + FA27B3941B498151008A9DCE /* VideoStream.cpp */, + FA27B3951B498151008A9DCE /* VideoStream.h */, + FA27B39B1B498151008A9DCE /* wrap_Video.cpp */, + FA27B39C1B498151008A9DCE /* wrap_Video.h */, + FA27B3B91B4985BF008A9DCE /* wrap_VideoStream.cpp */, + FA27B3BA1B4985BF008A9DCE /* wrap_VideoStream.h */, + ); + path = video; + sourceTree = ""; + }; + FA27B3891B498151008A9DCE /* theora */ = { + isa = PBXGroup; + children = ( + FA27B38A1B498151008A9DCE /* Video.cpp */, + FA27B38B1B498151008A9DCE /* Video.h */, + FA27B38C1B498151008A9DCE /* VideoStream.cpp */, + FA27B38D1B498151008A9DCE /* VideoStream.h */, + ); + path = theora; + sourceTree = ""; + }; + FA56D9B91C2089CE00D8D3C7 /* modplug */ = { + isa = PBXGroup; + children = ( + FA56D9BA1C2089EE00D8D3C7 /* libmodplug.a */, + ); + name = modplug; + path = ios/libraries/modplug; + sourceTree = ""; + }; + FA577A6616C7199700860150 /* Frameworks */ = { + isa = PBXGroup; + children = ( + FA0B7EEB1A959125000E1D17 /* macosx */, + ); + name = Frameworks; + sourceTree = ""; + }; + FA59A2D51C0649BB00328DBA /* theora */ = { + isa = PBXGroup; + children = ( + FA59A2D61C0649BB00328DBA /* libtheora.a */, + ); + name = theora; + path = ios/libraries/theora; + sourceTree = ""; + }; + FA5D24A11A96D24500C6FC8F /* Libraries */ = { + isa = PBXGroup; + children = ( + FA5D24A31A96D2C300C6FC8F /* ios */, + ); + name = Libraries; + sourceTree = ""; + }; + FA5D24A31A96D2C300C6FC8F /* ios */ = { + isa = PBXGroup; + children = ( + FA5D24A41A96D2EC00C6FC8F /* freetype */, + FA7550A61AEBE250003E311E /* luajit */, + FA56D9B91C2089CE00D8D3C7 /* modplug */, + FA5D24AA1A96D2EC00C6FC8F /* ogg */, + FA5D24AC1A96D2EC00C6FC8F /* physfs */, + FA5D24CC1A96E63D00C6FC8F /* SDL2 */, + FA59A2D51C0649BB00328DBA /* theora */, + FA5D24AE1A96D2EC00C6FC8F /* vorbis */, + ); + name = ios; + sourceTree = ""; + }; + FA5D24A41A96D2EC00C6FC8F /* freetype */ = { + isa = PBXGroup; + children = ( + FA5D24A51A96D2EC00C6FC8F /* libFreetype2.a */, + ); + name = freetype; + path = ios/libraries/freetype; + sourceTree = ""; + }; + FA5D24AA1A96D2EC00C6FC8F /* ogg */ = { + isa = PBXGroup; + children = ( + FA5D24AB1A96D2EC00C6FC8F /* libogg.a */, + ); + name = ogg; + path = ios/libraries/ogg; + sourceTree = ""; + }; + FA5D24AC1A96D2EC00C6FC8F /* physfs */ = { + isa = PBXGroup; + children = ( + FA5D24AD1A96D2EC00C6FC8F /* libphysfs.a */, + ); + name = physfs; + path = ios/libraries/physfs; + sourceTree = ""; + }; + FA5D24AE1A96D2EC00C6FC8F /* vorbis */ = { + isa = PBXGroup; + children = ( + FA5D24AF1A96D2EC00C6FC8F /* libvorbis.a */, + ); + name = vorbis; + path = ios/libraries/vorbis; + sourceTree = ""; + }; + FA5D24CC1A96E63D00C6FC8F /* SDL2 */ = { + isa = PBXGroup; + children = ( + FA5D24CD1A96E63D00C6FC8F /* libSDL2.a */, + ); + name = SDL2; + path = ios/libraries/SDL2; + sourceTree = ""; + }; + FA7550A61AEBE250003E311E /* luajit */ = { + isa = PBXGroup; + children = ( + FA7550A71AEBE276003E311E /* libluajit.a */, + ); + name = luajit; + path = ios/libraries/luajit; + sourceTree = ""; + }; + FAB17BE31ABFAA9000F9BA27 /* lz4 */ = { + isa = PBXGroup; + children = ( + FAB17BE41ABFAA9000F9BA27 /* lz4.c */, + FAB17BE51ABFAA9000F9BA27 /* lz4.h */, + FAB17BF31ABFC4B100F9BA27 /* lz4hc.c */, + FAB17BF41ABFC4B100F9BA27 /* lz4hc.h */, + ); + path = lz4; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + FA577AAC16C7507900860150 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + FA0B7D7E1A95902C000E1D17 /* Texture.h in Headers */, + FA0B7E561A95902C000E1D17 /* wrap_GearJoint.h in Headers */, + FA0B7E1D1A95902C000E1D17 /* MouseJoint.h in Headers */, + FA0B7DC91A95902C000E1D17 /* Keyboard.h in Headers */, + FA0B7D4A1A95902C000E1D17 /* Polyline.h in Headers */, + FA0B7DB31A95902C000E1D17 /* wrap_Image.h in Headers */, + FA0B7D531A95902C000E1D17 /* Text.h in Headers */, + FA0B7D381A95902C000E1D17 /* Font.h in Headers */, + FA0B7EC31A95902C000E1D17 /* threads.h in Headers */, + FA0B7AC21A958EA3000E1D17 /* enet.h in Headers */, + FA0B7E201A95902C000E1D17 /* Physics.h in Headers */, + FA0B79221A958E3B000E1D17 /* delay.h in Headers */, + FA0B79481A958E3B000E1D17 /* Vector.h in Headers */, + FA0B7CCF1A95902C000E1D17 /* Audio.h in Headers */, + FA0B7EC01A95902C000E1D17 /* Thread.h in Headers */, + FA0B7E9C1A95902C000E1D17 /* VorbisDecoder.h in Headers */, + FA0B791D1A958E3B000E1D17 /* b64.h in Headers */, + FA0B7DC61A95902C000E1D17 /* wrap_JoystickModule.h in Headers */, + FA0B7D201A95902C000E1D17 /* ImageRasterizer.h in Headers */, + FA0B7D241A95902C000E1D17 /* Vera.ttf.h in Headers */, + FA0B7E5F1A95902C000E1D17 /* wrap_MouseJoint.h in Headers */, + FAB17BED1ABFAF1800F9BA27 /* CompressedData.h in Headers */, + FA0B7B361A958EA3000E1D17 /* wuff_convert.h in Headers */, + FA0B7D981A95902C000E1D17 /* ImageData.h in Headers */, + FA0B7CDE1A95902C000E1D17 /* Source.h in Headers */, + FA0B7E141A95902C000E1D17 /* GearJoint.h in Headers */, + FA0B7D051A95902C000E1D17 /* wrap_DroppedFile.h in Headers */, + FA0B7B271A958EA3000E1D17 /* lutf8lib.h in Headers */, + FA0B7E9F1A95902C000E1D17 /* WaveDecoder.h in Headers */, + FA0B7AC61A958EA3000E1D17 /* types.h in Headers */, + FA0B7D751A95902C000E1D17 /* wrap_Text.h in Headers */, + FA0B7DBD1A95902C000E1D17 /* Joystick.h in Headers */, + FA0B7E901A95902C000E1D17 /* GmeDecoder.h in Headers */, + FA0B7D0E1A95902C000E1D17 /* wrap_Filesystem.h in Headers */, + FA0B7EE41A95902D000E1D17 /* Window.h in Headers */, + FA0B7D721A95902C000E1D17 /* wrap_SpriteBatch.h in Headers */, + FA0B7CFC1A95902C000E1D17 /* Filesystem.h in Headers */, + FA0B7AD81A958EA3000E1D17 /* lua-enet.h in Headers */, + FA0B7A3A1A958EA3000E1D17 /* b2DynamicTree.h in Headers */, + FA0B7D351A95902C000E1D17 /* Canvas.h in Headers */, + FA0B7EBA1A95902C000E1D17 /* Channel.h in Headers */, + FA0B7D3E1A95902C000E1D17 /* Image.h in Headers */, + FA0B7ECA1A95902C000E1D17 /* threads.h in Headers */, + FA0B7ED61A95902D000E1D17 /* Timer.h in Headers */, + FA0B7DB01A95902C000E1D17 /* wrap_CompressedImageData.h in Headers */, + FA0B7AC11A958EA3000E1D17 /* callbacks.h in Headers */, + FA0B7D8F1A95902C000E1D17 /* ddsHandler.h in Headers */, + FAB2D5AC1AABDD8A008224A4 /* TrueTypeRasterizer.h in Headers */, + FA27B3C21B4985BF008A9DCE /* wrap_VideoStream.h in Headers */, + FA0B7AA31A958EA3000E1D17 /* b2PulleyJoint.h in Headers */, + FA0B7B2F1A958EA3000E1D17 /* utf8.h in Headers */, + FA19C4C71B4B0BD50059B0B3 /* wrap_Video.h in Headers */, + FA0B79231A958E3B000E1D17 /* EnumMap.h in Headers */, + FA0B7A371A958EA3000E1D17 /* b2Distance.h in Headers */, + FA0B7E681A95902C000E1D17 /* wrap_PrismaticJoint.h in Headers */, + FA0B7D571A95902C000E1D17 /* GLBuffer.h in Headers */, + FA27B3C71B4985D8008A9DCE /* Video.h in Headers */, + FA0B7ED71A95902D000E1D17 /* Timer.h in Headers */, + FA0B7AC31A958EA3000E1D17 /* list.h in Headers */, + FA0B7B2D1A958EA3000E1D17 /* core.h in Headers */, + FAB17BF71ABFC4B100F9BA27 /* lz4hc.h in Headers */, + FA0B7E831A95902C000E1D17 /* Shape.h in Headers */, + FAE272531C05A15B00A67640 /* ParticleSystem.h in Headers */, + FA0B7EDD1A95902D000E1D17 /* Touch.h in Headers */, + FA0B7EDE1A95902D000E1D17 /* Touch.h in Headers */, + FA0B7A541A958EA3000E1D17 /* b2Math.h in Headers */, + FA0B7ED01A95902C000E1D17 /* wrap_LuaThread.h in Headers */, + FA0B7CE41A95902C000E1D17 /* wrap_Audio.h in Headers */, + FA0B7A7F1A958EA3000E1D17 /* b2ContactSolver.h in Headers */, + FA0B79491A958E3B000E1D17 /* version.h in Headers */, + FA0B7B2B1A958EA3000E1D17 /* stb_image.h in Headers */, + FA0B7CD21A95902C000E1D17 /* Audio.h in Headers */, + FA0B79421A958E3B000E1D17 /* utf8.h in Headers */, + FA0B7D171A95902C000E1D17 /* Font.h in Headers */, + FA0B7A6D1A958EA3000E1D17 /* b2World.h in Headers */, + FA0B7EAE1A95902C000E1D17 /* wrap_SoundData.h in Headers */, + FA0B7CFF1A95902C000E1D17 /* File.h in Headers */, + FA0B7AB41A958EA3000E1D17 /* ddsinfo.h in Headers */, + FA0B7DD21A95902C000E1D17 /* love.h in Headers */, + FA0B7CE71A95902C000E1D17 /* wrap_Source.h in Headers */, + FA0B7B231A958EA3000E1D17 /* luasocket.h in Headers */, + FA0B7D1D1A95902C000E1D17 /* GlyphData.h in Headers */, + FA0B7B391A958EA3000E1D17 /* wuff_internal.h in Headers */, + FA0B7A5A1A958EA3000E1D17 /* b2StackAllocator.h in Headers */, + FA0B7D881A95902C000E1D17 /* ImageData.h in Headers */, + FA0B7A661A958EA3000E1D17 /* b2Fixture.h in Headers */, + FA0B7EE11A95902D000E1D17 /* wrap_Touch.h in Headers */, + FA0B7AA91A958EA3000E1D17 /* b2RopeJoint.h in Headers */, + FAB17BE21ABFAA2000F9BA27 /* Compressor.h in Headers */, + FA0B7E441A95902C000E1D17 /* wrap_CircleShape.h in Headers */, + FA0B7EB41A95902C000E1D17 /* System.h in Headers */, + FA0B7CE11A95902C000E1D17 /* Source.h in Headers */, + FA0B7E621A95902C000E1D17 /* wrap_Physics.h in Headers */, + FA0B7DF01A95902C000E1D17 /* Mouse.h in Headers */, + FA0B7DAD1A95902C000E1D17 /* STBHandler.h in Headers */, + FA0B7DE11A95902C000E1D17 /* wrap_Math.h in Headers */, + FA0B7AAF1A958EA3000E1D17 /* b2WheelJoint.h in Headers */, + FA0B7D1A1A95902C000E1D17 /* TrueTypeRasterizer.h in Headers */, + FA0B7EA81A95902C000E1D17 /* wrap_Decoder.h in Headers */, + FA0B7AC51A958EA3000E1D17 /* time.h in Headers */, + FA0B793E1A958E3B000E1D17 /* StringMap.h in Headers */, + FA0B793A1A958E3B000E1D17 /* Reference.h in Headers */, + FA0B7DCC1A95902C000E1D17 /* Keyboard.h in Headers */, + FA620A341AA2F8DB005DB4C2 /* wrap_Quad.h in Headers */, + FA0B7EA51A95902C000E1D17 /* SoundData.h in Headers */, + FA0B7A821A958EA3000E1D17 /* b2EdgeAndCircleContact.h in Headers */, + FA0B79341A958E3B000E1D17 /* Object.h in Headers */, + FA0B7CEA1A95902C000E1D17 /* Event.h in Headers */, + FA0B7E351A95902C000E1D17 /* WeldJoint.h in Headers */, + FA0B7E2F1A95902C000E1D17 /* RopeJoint.h in Headers */, + FA0B7D141A95902C000E1D17 /* Font.h in Headers */, + FA0B7D411A95902C000E1D17 /* Mesh.h in Headers */, + FA0B7E591A95902C000E1D17 /* wrap_Joint.h in Headers */, + FA0B79351A958E3B000E1D17 /* macosx.h in Headers */, + FA0B7A631A958EA3000E1D17 /* b2ContactManager.h in Headers */, + FA0B7E771A95902C000E1D17 /* wrap_WeldJoint.h in Headers */, + FA0B7A911A958EA3000E1D17 /* b2FrictionJoint.h in Headers */, + FA0B7E291A95902C000E1D17 /* PulleyJoint.h in Headers */, + FA0B7D471A95902C000E1D17 /* ParticleSystem.h in Headers */, + FA0B7E231A95902C000E1D17 /* PolygonShape.h in Headers */, + FA0B791E1A958E3B000E1D17 /* config.h in Headers */, + FAB17BE81ABFAA9000F9BA27 /* lz4.h in Headers */, + FA0B7E6B1A95902C000E1D17 /* wrap_PulleyJoint.h in Headers */, + FA0B7E051A95902C000E1D17 /* Contact.h in Headers */, + FA0B7A691A958EA3000E1D17 /* b2Island.h in Headers */, + FA0B7E0E1A95902C000E1D17 /* Fixture.h in Headers */, + FA0B7A401A958EA3000E1D17 /* b2ChainShape.h in Headers */, + FA0B7AA61A958EA3000E1D17 /* b2RevoluteJoint.h in Headers */, + FA0B7EEA1A95902D000E1D17 /* wrap_Window.h in Headers */, + FA0B7E381A95902C000E1D17 /* WheelJoint.h in Headers */, + FA0B7D851A95902C000E1D17 /* Image.h in Headers */, + FA0B7E7D1A95902C000E1D17 /* wrap_World.h in Headers */, + FA0B7EBD1A95902C000E1D17 /* LuaThread.h in Headers */, + FA0B7D601A95902C000E1D17 /* wrap_Graphics.h in Headers */, + FA0B7DC01A95902C000E1D17 /* JoystickModule.h in Headers */, + FA0B7E871A95902C000E1D17 /* CoreAudioDecoder.h in Headers */, + FA0B7CD51A95902C000E1D17 /* Source.h in Headers */, + FA0B7A2B1A958EA3000E1D17 /* b2BroadPhase.h in Headers */, + FA27B39F1B498151008A9DCE /* Video.h in Headers */, + FA0B7D661A95902C000E1D17 /* wrap_Mesh.h in Headers */, + FA0B7AAC1A958EA3000E1D17 /* b2WeldJoint.h in Headers */, + FA0B7E7A1A95902C000E1D17 /* wrap_WheelJoint.h in Headers */, + FA0B7A791A958EA3000E1D17 /* b2CircleContact.h in Headers */, + FA0B7DD81A95902C000E1D17 /* MathModule.h in Headers */, + FA0B7D631A95902C000E1D17 /* wrap_Image.h in Headers */, + FA0B7A341A958EA3000E1D17 /* b2Collision.h in Headers */, + FA0B7EC71A95902C000E1D17 /* ThreadModule.h in Headers */, + FA0B792B1A958E3B000E1D17 /* Matrix.h in Headers */, + FA0B7DA41A95902C000E1D17 /* PKMHandler.h in Headers */, + FA0B7AC81A958EA3000E1D17 /* utility.h in Headers */, + FA0B791F1A958E3B000E1D17 /* Data.h in Headers */, + FA0B7D021A95902C000E1D17 /* Filesystem.h in Headers */, + FA0B7E471A95902C000E1D17 /* wrap_Contact.h in Headers */, + FA0B7E021A95902C000E1D17 /* CircleShape.h in Headers */, + FA0B7E111A95902C000E1D17 /* FrictionJoint.h in Headers */, + FA0B7AE01A958EA3000E1D17 /* lodepng.h in Headers */, + FA0B7A4D1A958EA3000E1D17 /* b2BlockAllocator.h in Headers */, + FA0B7ECD1A95902C000E1D17 /* wrap_Channel.h in Headers */, + FA0B7A431A958EA3000E1D17 /* b2CircleShape.h in Headers */, + FA0B7CD81A95902C000E1D17 /* Audio.h in Headers */, + FA0B7CF61A95902C000E1D17 /* File.h in Headers */, + FA0B7E961A95902C000E1D17 /* Mpg123Decoder.h in Headers */, + FA0B7D501A95902C000E1D17 /* SpriteBatch.h in Headers */, + FA0B7DD51A95902C000E1D17 /* BezierCurve.h in Headers */, + FA0B79271A958E3B000E1D17 /* int.h in Headers */, + FA27B3A21B498151008A9DCE /* VideoStream.h in Headers */, + FA0B7D8C1A95902C000E1D17 /* CompressedFormatHandler.h in Headers */, + FA0B7E531A95902C000E1D17 /* wrap_FrictionJoint.h in Headers */, + FA0B7EB71A95902C000E1D17 /* wrap_System.h in Headers */, + FA27B3A91B498151008A9DCE /* Video.h in Headers */, + FA0B7DF61A95902C000E1D17 /* wrap_Mouse.h in Headers */, + FAB17BF21ABFB37500F9BA27 /* wrap_CompressedData.h in Headers */, + FA0B7E801A95902C000E1D17 /* Joint.h in Headers */, + FA0B7D2F1A95902C000E1D17 /* Drawable.h in Headers */, + FA0B7D951A95902C000E1D17 /* Image.h in Headers */, + FA0B7EC41A95902C000E1D17 /* Thread.h in Headers */, + FA0B7DFF1A95902C000E1D17 /* ChainShape.h in Headers */, + FA0B7E4D1A95902C000E1D17 /* wrap_EdgeShape.h in Headers */, + FA0B7DDB1A95902C000E1D17 /* RandomGenerator.h in Headers */, + FA0B7E841A95902C000E1D17 /* Decoder.h in Headers */, + FA0B7A601A958EA3000E1D17 /* b2Body.h in Headers */, + FA0B7EAB1A95902C000E1D17 /* wrap_Sound.h in Headers */, + FA0B7B2C1A958EA3000E1D17 /* checked.h in Headers */, + FA0B7D2A1A95902C000E1D17 /* wrap_GlyphData.h in Headers */, + FA0B7E741A95902C000E1D17 /* wrap_Shape.h in Headers */, + FA0B7A5D1A958EA3000E1D17 /* b2Timer.h in Headers */, + FA0B7A4A1A958EA3000E1D17 /* b2Shape.h in Headers */, + FA0B7E3B1A95902C000E1D17 /* World.h in Headers */, + FA0B7DC31A95902C000E1D17 /* wrap_Joystick.h in Headers */, + FA0B7EE71A95902D000E1D17 /* Window.h in Headers */, + FA0B7E651A95902C000E1D17 /* wrap_PolygonShape.h in Headers */, + FA0B7AC91A958EA3000E1D17 /* win32.h in Headers */, + FA0B7DFC1A95902C000E1D17 /* Body.h in Headers */, + FA0B7A941A958EA3000E1D17 /* b2GearJoint.h in Headers */, + FA0B7DF31A95902C000E1D17 /* wrap_Cursor.h in Headers */, + FA0B7A461A958EA3000E1D17 /* b2EdgeShape.h in Headers */, + FA0B7D271A95902C000E1D17 /* wrap_Font.h in Headers */, + FA0B7A761A958EA3000E1D17 /* b2ChainAndPolygonContact.h in Headers */, + FA0B7DAA1A95902C000E1D17 /* PVRHandler.h in Headers */, + FA27B3B51B498151008A9DCE /* wrap_Video.h in Headers */, + FA0B7D7B1A95902C000E1D17 /* Quad.h in Headers */, + FA0B7E261A95902C000E1D17 /* PrismaticJoint.h in Headers */, + FA0B7E991A95902C000E1D17 /* Sound.h in Headers */, + FA0B7D841A95902C000E1D17 /* CompressedImageData.h in Headers */, + FA0B7D231A95902C000E1D17 /* Rasterizer.h in Headers */, + FA0B7CDB1A95902C000E1D17 /* Pool.h in Headers */, + FA0B7D0B1A95902C000E1D17 /* wrap_FileData.h in Headers */, + FA0B7DF91A95902C000E1D17 /* Body.h in Headers */, + FA0B7DB91A95902C000E1D17 /* Joystick.h in Headers */, + FA0B7E2C1A95902C000E1D17 /* RevoluteJoint.h in Headers */, + FA8951A41AA2EDF300EC385A /* wrap_Event.h in Headers */, + FA0B7B2A1A958EA3000E1D17 /* simplexnoise1234.h in Headers */, + FA0B7ADC1A958EA3000E1D17 /* glad.hpp in Headers */, + FA0B7CF91A95902C000E1D17 /* FileData.h in Headers */, + FA0B7DA71A95902C000E1D17 /* PNGHandler.h in Headers */, + FA0B7AC41A958EA3000E1D17 /* protocol.h in Headers */, + FA0B7D8B1A95902C000E1D17 /* CompressedImageData.h in Headers */, + FA0B7A8E1A958EA3000E1D17 /* b2DistanceJoint.h in Headers */, + FA0B7A8B1A958EA3000E1D17 /* b2PolygonContact.h in Headers */, + FA0B794C1A958E3B000E1D17 /* wrap_Data.h in Headers */, + FA0B7D321A95902C000E1D17 /* Graphics.h in Headers */, + FA0B7E321A95902C000E1D17 /* Shape.h in Headers */, + FA620A371AA2F8DB005DB4C2 /* wrap_Texture.h in Headers */, + FA0B7DBA1A95902C000E1D17 /* JoystickModule.h in Headers */, + FA0B792E1A958E3B000E1D17 /* Memoizer.h in Headers */, + FA0B7A731A958EA3000E1D17 /* b2ChainAndCircleContact.h in Headers */, + FA0B7AA01A958EA3000E1D17 /* b2PrismaticJoint.h in Headers */, + FA0B7B241A958EA3000E1D17 /* lprefix.h in Headers */, + FA0B7DEA1A95902C000E1D17 /* Mouse.h in Headers */, + FA0B7E931A95902C000E1D17 /* ModPlugDecoder.h in Headers */, + FA0B7D111A95902C000E1D17 /* BMFontRasterizer.h in Headers */, + FA0B7E8A1A95902C000E1D17 /* Decoder.h in Headers */, + FA0B7E3E1A95902C000E1D17 /* wrap_Body.h in Headers */, + FA0B7A571A958EA3000E1D17 /* b2Settings.h in Headers */, + FA0B7B321A958EA3000E1D17 /* wuff.h in Headers */, + FA0B7A3D1A958EA3000E1D17 /* b2TimeOfImpact.h in Headers */, + FA0B79261A958E3B000E1D17 /* Exception.h in Headers */, + FA0B7D4D1A95902C000E1D17 /* Shader.h in Headers */, + FA0B793D1A958E3B000E1D17 /* runtime.h in Headers */, + FA0B7A701A958EA3000E1D17 /* b2WorldCallbacks.h in Headers */, + FA0B7A9D1A958EA3000E1D17 /* b2MouseJoint.h in Headers */, + FA57FB9A1AE1993600F2AD6D /* noise1234.h in Headers */, + FA0B7CED1A95902C000E1D17 /* Event.h in Headers */, + FA0B7D811A95902C000E1D17 /* Volatile.h in Headers */, + FA0B7B2E1A958EA3000E1D17 /* unchecked.h in Headers */, + FA0B7D081A95902C000E1D17 /* wrap_File.h in Headers */, + FA0B79451A958E3B000E1D17 /* Variant.h in Headers */, + FA0B7D691A95902C000E1D17 /* wrap_ParticleSystem.h in Headers */, + FA0B7E5C1A95902C000E1D17 /* wrap_MotorJoint.h in Headers */, + FA0B7A7C1A958EA3000E1D17 /* b2Contact.h in Headers */, + FA0B7A881A958EA3000E1D17 /* b2PolygonAndCircleContact.h in Headers */, + FA0B7DDE1A95902C000E1D17 /* wrap_BezierCurve.h in Headers */, + FA0B7DED1A95902C000E1D17 /* Cursor.h in Headers */, + FA0B7E501A95902C000E1D17 /* wrap_Fixture.h in Headers */, + FAA3A9B01B7D465A00CED060 /* android.h in Headers */, + FA0B7A491A958EA3000E1D17 /* b2PolygonShape.h in Headers */, + FA0B79281A958E3B000E1D17 /* math.h in Headers */, + FA0B7A9A1A958EA3000E1D17 /* b2MotorJoint.h in Headers */, + FA0B7DCF1A95902C000E1D17 /* wrap_Keyboard.h in Headers */, + FA0B7D6F1A95902C000E1D17 /* wrap_Shader.h in Headers */, + FA0B7EA21A95902C000E1D17 /* Sound.h in Headers */, + FA0B7B331A958EA3000E1D17 /* wuff_config.h in Headers */, + FA0B7CF31A95902C000E1D17 /* DroppedFile.h in Headers */, + FA0B7D3B1A95902C000E1D17 /* Graphics.h in Headers */, + FA0B7E6E1A95902C000E1D17 /* wrap_RevoluteJoint.h in Headers */, + FA27B3AC1B498151008A9DCE /* VideoStream.h in Headers */, + FA0B7AC71A958EA3000E1D17 /* unix.h in Headers */, + FA0B7E8D1A95902C000E1D17 /* FLACDecoder.h in Headers */, + FA0B7A501A958EA3000E1D17 /* b2Draw.h in Headers */, + FA0B7DE71A95902C000E1D17 /* Cursor.h in Headers */, + FA0B7DB61A95902C000E1D17 /* wrap_ImageData.h in Headers */, + FA0B7A971A958EA3000E1D17 /* b2Joint.h in Headers */, + FA0B7A851A958EA3000E1D17 /* b2EdgeAndPolygonContact.h in Headers */, + FA0B7D2D1A95902C000E1D17 /* wrap_Rasterizer.h in Headers */, + FA0B7AB71A958EA3000E1D17 /* ddsparse.h in Headers */, + FA0B7DA11A95902C000E1D17 /* KTXHandler.h in Headers */, + FA0B79311A958E3B000E1D17 /* Module.h in Headers */, + FA0B7D5A1A95902C000E1D17 /* wrap_Canvas.h in Headers */, + FA0B7E4A1A95902C000E1D17 /* wrap_DistanceJoint.h in Headers */, + FA0B7D2E1A95902C000E1D17 /* Color.h in Headers */, + FA0B7A6A1A958EA3000E1D17 /* b2TimeStep.h in Headers */, + FA0B7A281A958EA3000E1D17 /* Box2D.h in Headers */, + FA0B7DE41A95902C000E1D17 /* wrap_RandomGenerator.h in Headers */, + FA0B7E0B1A95902C000E1D17 /* EdgeShape.h in Headers */, + FA0B7EDA1A95902D000E1D17 /* wrap_Timer.h in Headers */, + FA0B7EB11A95902C000E1D17 /* System.h in Headers */, + FA0B7E1A1A95902C000E1D17 /* MotorJoint.h in Headers */, + FA0B7D441A95902C000E1D17 /* OpenGL.h in Headers */, + FA0B7E081A95902C000E1D17 /* DistanceJoint.h in Headers */, + FA0B7E711A95902C000E1D17 /* wrap_RopeJoint.h in Headers */, + FA0B7E411A95902C000E1D17 /* wrap_ChainShape.h in Headers */, + FA0B7E171A95902C000E1D17 /* Joint.h in Headers */, + FA0B793F1A958E3B000E1D17 /* types.h in Headers */, + FA0B7AB31A958EA3000E1D17 /* b2Rope.h in Headers */, + FA41A3CA1C0A1F950084430C /* ASTCHandler.h in Headers */, + FA0B7D5D1A95902C000E1D17 /* wrap_Font.h in Headers */, + FA0B7ED31A95902C000E1D17 /* wrap_ThreadModule.h in Headers */, + FA0B7A511A958EA3000E1D17 /* b2GrowableStack.h in Headers */, + FA0B7D921A95902C000E1D17 /* FormatHandler.h in Headers */, + FA0B7ADD1A958EA3000E1D17 /* gladfuncs.hpp in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + FA0B78DC1A958B90000E1D17 /* liblove-ios */ = { + isa = PBXNativeTarget; + buildConfigurationList = FA0B78EE1A958B90000E1D17 /* Build configuration list for PBXNativeTarget "liblove-ios" */; + buildPhases = ( + FA0B78D91A958B90000E1D17 /* Sources */, + FA0B78DA1A958B90000E1D17 /* Frameworks */, + FA0B78DB1A958B90000E1D17 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "liblove-ios"; + productName = "liblove-ios"; + productReference = FA0B78DD1A958B90000E1D17 /* liblove.a */; + productType = "com.apple.product-type.library.static"; + }; + FA577AAE16C7507900860150 /* liblove-macosx */ = { + isa = PBXNativeTarget; + buildConfigurationList = FA577ABF16C7507900860150 /* Build configuration list for PBXNativeTarget "liblove-macosx" */; + buildPhases = ( + FA577AAA16C7507900860150 /* Sources */, + FA577AAB16C7507900860150 /* Frameworks */, + FA577AAC16C7507900860150 /* Headers */, + FA577AAD16C7507900860150 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "liblove-macosx"; + productName = love; + productReference = FA577AAF16C7507900860150 /* love.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0700; + TargetAttributes = { + FA0B78DC1A958B90000E1D17 = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "liblove" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 54067CFB7D564E5764FA17DC /* love */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + FA577AAE16C7507900860150 /* liblove-macosx */, + FA0B78DC1A958B90000E1D17 /* liblove-ios */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + FA577AAD16C7507900860150 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + FA0B78D91A958B90000E1D17 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FA0B7D741A95902C000E1D17 /* wrap_Text.cpp in Sources */, + FA0B7DE01A95902C000E1D17 /* wrap_Math.cpp in Sources */, + FA0B7DA91A95902C000E1D17 /* PVRHandler.cpp in Sources */, + FA0B7EC61A95902C000E1D17 /* ThreadModule.cpp in Sources */, + FA0B7D2C1A95902C000E1D17 /* wrap_Rasterizer.cpp in Sources */, + FA0B7D591A95902C000E1D17 /* wrap_Canvas.cpp in Sources */, + FA0B7E8F1A95902C000E1D17 /* GmeDecoder.cpp in Sources */, + FA0B7CD71A95902C000E1D17 /* Audio.cpp in Sources */, + FA0B7AC01A958EA3000E1D17 /* host.c in Sources */, + FA0B7EB01A95902C000E1D17 /* System.cpp in Sources */, + FA0B7EE31A95902D000E1D17 /* Window.cpp in Sources */, + FA0B7AAB1A958EA3000E1D17 /* b2WeldJoint.cpp in Sources */, + FA0B7EC21A95902C000E1D17 /* threads.cpp in Sources */, + FA0B79371A958E3B000E1D17 /* macosx.mm in Sources */, + FA0B7D011A95902C000E1D17 /* Filesystem.cpp in Sources */, + FA0B7ED91A95902D000E1D17 /* wrap_Timer.cpp in Sources */, + FA0B7DD11A95902C000E1D17 /* love.cpp in Sources */, + FA0B7AB61A958EA3000E1D17 /* ddsparse.cpp in Sources */, + FA0B7D221A95902C000E1D17 /* Rasterizer.cpp in Sources */, + FA0B7A4F1A958EA3000E1D17 /* b2Draw.cpp in Sources */, + FA0B7D7D1A95902C000E1D17 /* Texture.cpp in Sources */, + FA0B7ECC1A95902C000E1D17 /* wrap_Channel.cpp in Sources */, + FA0B7E6D1A95902C000E1D17 /* wrap_RevoluteJoint.cpp in Sources */, + FA0B7B0F1A958EA3000E1D17 /* timeout.c in Sources */, + FA0B7A5F1A958EA3000E1D17 /* b2Body.cpp in Sources */, + FA0B7B171A958EA3000E1D17 /* unix.c in Sources */, + FA0B7E641A95902C000E1D17 /* wrap_PolygonShape.cpp in Sources */, + FA0B7E731A95902C000E1D17 /* wrap_Shape.cpp in Sources */, + FA0B7CFE1A95902C000E1D17 /* File.cpp in Sources */, + FA27B39E1B498151008A9DCE /* Video.cpp in Sources */, + FA0B7A751A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp in Sources */, + FA0B7E6A1A95902C000E1D17 /* wrap_PulleyJoint.cpp in Sources */, + FA0B7DB81A95902C000E1D17 /* Joystick.cpp in Sources */, + FA0B794B1A958E3B000E1D17 /* wrap_Data.cpp in Sources */, + FAB17BEC1ABFAF1800F9BA27 /* CompressedData.cpp in Sources */, + FA0B7D371A95902C000E1D17 /* Font.cpp in Sources */, + FA0B7E401A95902C000E1D17 /* wrap_ChainShape.cpp in Sources */, + FA0B7DEC1A95902C000E1D17 /* Cursor.cpp in Sources */, + FA0B7D871A95902C000E1D17 /* ImageData.cpp in Sources */, + FA0B7AE21A958EA3000E1D17 /* auxiliar.c in Sources */, + FA0B7E101A95902C000E1D17 /* FrictionJoint.cpp in Sources */, + FA620A361AA2F8DB005DB4C2 /* wrap_Texture.cpp in Sources */, + FA0B7D0A1A95902C000E1D17 /* wrap_FileData.cpp in Sources */, + FA0B7ABE1A958EA3000E1D17 /* compress.c in Sources */, + FA0B7CF21A95902C000E1D17 /* DroppedFile.cpp in Sources */, + FA0B7D8A1A95902C000E1D17 /* CompressedImageData.cpp in Sources */, + FA0B7AD21A958EA3000E1D17 /* protocol.c in Sources */, + FA0B7D1F1A95902C000E1D17 /* ImageRasterizer.cpp in Sources */, + FA0B7EA41A95902C000E1D17 /* SoundData.cpp in Sources */, + FA0B7D041A95902C000E1D17 /* wrap_DroppedFile.cpp in Sources */, + FA0B7B261A958EA3000E1D17 /* lutf8lib.c in Sources */, + FA0B7D461A95902C000E1D17 /* ParticleSystem.cpp in Sources */, + FA8951A31AA2EDF300EC385A /* wrap_Event.cpp in Sources */, + FA0B7A361A958EA3000E1D17 /* b2Distance.cpp in Sources */, + FA0B7D4C1A95902C000E1D17 /* Shader.cpp in Sources */, + FA0B792A1A958E3B000E1D17 /* Matrix.cpp in Sources */, + FA0B7A8D1A958EA3000E1D17 /* b2DistanceJoint.cpp in Sources */, + FA0B7A841A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp in Sources */, + FA0B7E191A95902C000E1D17 /* MotorJoint.cpp in Sources */, + FA0B7E4F1A95902C000E1D17 /* wrap_Fixture.cpp in Sources */, + FA0B7EBF1A95902C000E1D17 /* Thread.cpp in Sources */, + FA0B7EB91A95902C000E1D17 /* Channel.cpp in Sources */, + FA0B7AFB1A958EA3000E1D17 /* mime.c in Sources */, + FA4B66CA1ABBCF1900558F15 /* Timer.cpp in Sources */, + FA0B7A3F1A958EA3000E1D17 /* b2ChainShape.cpp in Sources */, + FA0B7E921A95902C000E1D17 /* ModPlugDecoder.cpp in Sources */, + FA0B7E521A95902C000E1D17 /* wrap_FrictionJoint.cpp in Sources */, + FA0B7A311A958EA3000E1D17 /* b2CollidePolygon.cpp in Sources */, + FA0B7A931A958EA3000E1D17 /* b2GearJoint.cpp in Sources */, + FA0B7E0D1A95902C000E1D17 /* Fixture.cpp in Sources */, + FA0B7D191A95902C000E1D17 /* TrueTypeRasterizer.cpp in Sources */, + FA0B7CFB1A95902C000E1D17 /* Filesystem.cpp in Sources */, + FA0B7D3D1A95902C000E1D17 /* Image.cpp in Sources */, + FA0B7B351A958EA3000E1D17 /* wuff_convert.c in Sources */, + FA0B7E431A95902C000E1D17 /* wrap_CircleShape.cpp in Sources */, + FA0B7CE61A95902C000E1D17 /* wrap_Source.cpp in Sources */, + FA0B7AA21A958EA3000E1D17 /* b2PulleyJoint.cpp in Sources */, + FA0B7CCE1A95902C000E1D17 /* Audio.cpp in Sources */, + FA0B7DCB1A95902C000E1D17 /* Keyboard.cpp in Sources */, + FA0B7A901A958EA3000E1D17 /* b2FrictionJoint.cpp in Sources */, + FA0B7DFB1A95902C000E1D17 /* Body.cpp in Sources */, + FA0B7ED21A95902C000E1D17 /* wrap_ThreadModule.cpp in Sources */, + FA0B7EE01A95902D000E1D17 /* wrap_Touch.cpp in Sources */, + FA0B7A3C1A958EA3000E1D17 /* b2TimeOfImpact.cpp in Sources */, + FA0B7CDD1A95902C000E1D17 /* Source.cpp in Sources */, + FA0B7DC51A95902C000E1D17 /* wrap_JoystickModule.cpp in Sources */, + FA0B7E701A95902C000E1D17 /* wrap_RopeJoint.cpp in Sources */, + FA0B7A7B1A958EA3000E1D17 /* b2Contact.cpp in Sources */, + FA0B7A6F1A958EA3000E1D17 /* b2WorldCallbacks.cpp in Sources */, + FA0B793C1A958E3B000E1D17 /* runtime.cpp in Sources */, + FA27B3C61B4985D8008A9DCE /* Video.cpp in Sources */, + FA0B7DBC1A95902C000E1D17 /* Joystick.cpp in Sources */, + FA0B7DAF1A95902C000E1D17 /* wrap_CompressedImageData.cpp in Sources */, + FA0B7A481A958EA3000E1D17 /* b2PolygonShape.cpp in Sources */, + FA0B7A991A958EA3000E1D17 /* b2MotorJoint.cpp in Sources */, + FA0B7D681A95902C000E1D17 /* wrap_ParticleSystem.cpp in Sources */, + FA0B7AD51A958EA3000E1D17 /* unix.c in Sources */, + FAB17BE71ABFAA9000F9BA27 /* lz4.c in Sources */, + FA0B7B1C1A958EA3000E1D17 /* usocket.c in Sources */, + FA0B7D651A95902C000E1D17 /* wrap_Mesh.cpp in Sources */, + FA0B7A531A958EA3000E1D17 /* b2Math.cpp in Sources */, + FA0B7CDA1A95902C000E1D17 /* Pool.cpp in Sources */, + FA0B7E161A95902C000E1D17 /* Joint.cpp in Sources */, + FA0B7EE91A95902D000E1D17 /* wrap_Window.cpp in Sources */, + FA0B7AB91A958EA3000E1D17 /* enet.cpp in Sources */, + FA0B7E281A95902C000E1D17 /* PulleyJoint.cpp in Sources */, + FA0B7A4C1A958EA3000E1D17 /* b2BlockAllocator.cpp in Sources */, + FA0B7E041A95902C000E1D17 /* Contact.cpp in Sources */, + FA0B7D831A95902C000E1D17 /* CompressedImageData.cpp in Sources */, + FA0B7B311A958EA3000E1D17 /* wuff.c in Sources */, + FA0B7DF21A95902C000E1D17 /* wrap_Cursor.cpp in Sources */, + FA0B7E011A95902C000E1D17 /* CircleShape.cpp in Sources */, + FA0B7E461A95902C000E1D17 /* wrap_Contact.cpp in Sources */, + FA0B7D401A95902C000E1D17 /* Mesh.cpp in Sources */, + FA0B7D161A95902C000E1D17 /* Font.cpp in Sources */, + FA0B7EB61A95902C000E1D17 /* wrap_System.cpp in Sources */, + FA0B7DAC1A95902C000E1D17 /* STBHandler.cpp in Sources */, + FA0B79301A958E3B000E1D17 /* Module.cpp in Sources */, + FA0B7DDA1A95902C000E1D17 /* RandomGenerator.cpp in Sources */, + FA0B7AF81A958EA3000E1D17 /* luasocket.c in Sources */, + FA0B7D801A95902C000E1D17 /* Volatile.cpp in Sources */, + FA0B792D1A958E3B000E1D17 /* Memoizer.cpp in Sources */, + FA0B7EBC1A95902C000E1D17 /* LuaThread.cpp in Sources */, + FA0B7A871A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp in Sources */, + FA0B7EF21A959D2C000E1D17 /* ios.mm in Sources */, + FA0B7D3A1A95902C000E1D17 /* Graphics.cpp in Sources */, + FA0B7A2D1A958EA3000E1D17 /* b2CollideCircle.cpp in Sources */, + FA59A2D31C06481400328DBA /* ParticleSystem.cpp in Sources */, + FA0B7E131A95902C000E1D17 /* GearJoint.cpp in Sources */, + FA0B7DC21A95902C000E1D17 /* wrap_Joystick.cpp in Sources */, + FA0B7CD41A95902C000E1D17 /* Source.cpp in Sources */, + FA0B7AEF1A958EA3000E1D17 /* inet.c in Sources */, + FAA3A9AF1B7D465A00CED060 /* android.cpp in Sources */, + FA0B7CD11A95902C000E1D17 /* Audio.cpp in Sources */, + FA0B7D131A95902C000E1D17 /* Font.cpp in Sources */, + FA0B7EC91A95902C000E1D17 /* threads.cpp in Sources */, + FA0B7A781A958EA3000E1D17 /* b2CircleContact.cpp in Sources */, + FA0B7D5F1A95902C000E1D17 /* wrap_Graphics.cpp in Sources */, + FA0B7A9C1A958EA3000E1D17 /* b2MouseJoint.cpp in Sources */, + FA41A3C91C0A1F950084430C /* ASTCHandler.cpp in Sources */, + FA0B7E551A95902C000E1D17 /* wrap_GearJoint.cpp in Sources */, + FA0B7E791A95902C000E1D17 /* wrap_WheelJoint.cpp in Sources */, + FA0B7DDD1A95902C000E1D17 /* wrap_BezierCurve.cpp in Sources */, + FA0B7A2A1A958EA3000E1D17 /* b2BroadPhase.cpp in Sources */, + FA0B7A811A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp in Sources */, + FA0B7D071A95902C000E1D17 /* wrap_File.cpp in Sources */, + FA0B7AD01A958EA3000E1D17 /* peer.c in Sources */, + FA27B3C11B4985BF008A9DCE /* wrap_VideoStream.cpp in Sources */, + FA0B791C1A958E3B000E1D17 /* b64.cpp in Sources */, + FA0B7D941A95902C000E1D17 /* Image.cpp in Sources */, + FA0B7DA01A95902C000E1D17 /* KTXHandler.cpp in Sources */, + FA27B3A11B498151008A9DCE /* VideoStream.cpp in Sources */, + FA0B7A5C1A958EA3000E1D17 /* b2Timer.cpp in Sources */, + FA0B7CEC1A95902C000E1D17 /* Event.cpp in Sources */, + FA27B3AB1B498151008A9DCE /* VideoStream.cpp in Sources */, + FA0B7A7E1A958EA3000E1D17 /* b2ContactSolver.cpp in Sources */, + FA0B7D971A95902C000E1D17 /* ImageData.cpp in Sources */, + FA0B7E581A95902C000E1D17 /* wrap_Joint.cpp in Sources */, + FA0B7E311A95902C000E1D17 /* Shape.cpp in Sources */, + FA0B7E491A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */, + FA0B7A391A958EA3000E1D17 /* b2DynamicTree.cpp in Sources */, + FA0B7A681A958EA3000E1D17 /* b2Island.cpp in Sources */, + FA0B7E2B1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */, + FA0B7B291A958EA3000E1D17 /* simplexnoise1234.cpp in Sources */, + FA0B7D261A95902C000E1D17 /* wrap_Font.cpp in Sources */, + FA0B7E0A1A95902C000E1D17 /* EdgeShape.cpp in Sources */, + FAB17BF11ABFB37500F9BA27 /* wrap_CompressedData.cpp in Sources */, + FA0B7CF81A95902C000E1D17 /* FileData.cpp in Sources */, + FA0B7DA61A95902C000E1D17 /* PNGHandler.cpp in Sources */, + FA0B7B041A958EA3000E1D17 /* select.c in Sources */, + FA0B7E981A95902C000E1D17 /* Sound.cpp in Sources */, + FA0B7E371A95902C000E1D17 /* WheelJoint.cpp in Sources */, + FA0B7A8A1A958EA3000E1D17 /* b2PolygonContact.cpp in Sources */, + FA0B7D8E1A95902C000E1D17 /* ddsHandler.cpp in Sources */, + FA0B7DFE1A95902C000E1D17 /* ChainShape.cpp in Sources */, + FA0B7A451A958EA3000E1D17 /* b2EdgeShape.cpp in Sources */, + FA0B7D621A95902C000E1D17 /* wrap_Image.cpp in Sources */, + FA0B7ABB1A958EA3000E1D17 /* callbacks.c in Sources */, + FA0B7A721A958EA3000E1D17 /* b2ChainAndCircleContact.cpp in Sources */, + FA0B7EAA1A95902C000E1D17 /* wrap_Sound.cpp in Sources */, + FA0B79391A958E3B000E1D17 /* Reference.cpp in Sources */, + FA620A331AA2F8DB005DB4C2 /* wrap_Quad.cpp in Sources */, + FA0B7E071A95902C000E1D17 /* DistanceJoint.cpp in Sources */, + FA0B7A331A958EA3000E1D17 /* b2Collision.cpp in Sources */, + FA0B7E5E1A95902C000E1D17 /* wrap_MouseJoint.cpp in Sources */, + FA0B7B3B1A958EA3000E1D17 /* wuff_memory.c in Sources */, + FA0B79411A958E3B000E1D17 /* utf8.cpp in Sources */, + FAB17BE11ABFAA2000F9BA27 /* Compressor.cpp in Sources */, + FA0B7ADF1A958EA3000E1D17 /* lodepng.cpp in Sources */, + FA0B7D711A95902C000E1D17 /* wrap_SpriteBatch.cpp in Sources */, + FA0B7D341A95902C000E1D17 /* Canvas.cpp in Sources */, + FA0B7E8C1A95902C000E1D17 /* FLACDecoder.cpp in Sources */, + FA0B7A421A958EA3000E1D17 /* b2CircleShape.cpp in Sources */, + FA0B7B141A958EA3000E1D17 /* udp.c in Sources */, + FA0B7D491A95902C000E1D17 /* Polyline.cpp in Sources */, + FA0B7CE31A95902C000E1D17 /* wrap_Audio.cpp in Sources */, + FA0B7B381A958EA3000E1D17 /* wuff_internal.c in Sources */, + FA0B7DF81A95902C000E1D17 /* Body.cpp in Sources */, + FA0B7DF51A95902C000E1D17 /* wrap_Mouse.cpp in Sources */, + FA0B7D6E1A95902C000E1D17 /* wrap_Shader.cpp in Sources */, + FA0B7E861A95902C000E1D17 /* CoreAudioDecoder.cpp in Sources */, + FA0B7E761A95902C000E1D17 /* wrap_WeldJoint.cpp in Sources */, + FA0B7D561A95902C000E1D17 /* GLBuffer.cpp in Sources */, + FA0B7A6C1A958EA3000E1D17 /* b2World.cpp in Sources */, + FA57FB991AE1993600F2AD6D /* noise1234.cpp in Sources */, + FA0B7E221A95902C000E1D17 /* PolygonShape.cpp in Sources */, + FA0B7A651A958EA3000E1D17 /* b2Fixture.cpp in Sources */, + FA0B7D521A95902C000E1D17 /* Text.cpp in Sources */, + FA0B7DA31A95902C000E1D17 /* PKMHandler.cpp in Sources */, + FA0B7AB21A958EA3000E1D17 /* b2Rope.cpp in Sources */, + FAB17BF61ABFC4B100F9BA27 /* lz4hc.c in Sources */, + FA0B7EA71A95902C000E1D17 /* wrap_Decoder.cpp in Sources */, + FA0B7E1C1A95902C000E1D17 /* MouseJoint.cpp in Sources */, + FA0B7CF51A95902C000E1D17 /* File.cpp in Sources */, + FA0B7E341A95902C000E1D17 /* WeldJoint.cpp in Sources */, + FA0B7D5C1A95902C000E1D17 /* wrap_Font.cpp in Sources */, + FA0B7B221A958EA3000E1D17 /* luasocket.cpp in Sources */, + FA0B7D311A95902C000E1D17 /* Graphics.cpp in Sources */, + FA0B7E9E1A95902C000E1D17 /* WaveDecoder.cpp in Sources */, + FA0B7EB31A95902C000E1D17 /* System.cpp in Sources */, + FA0B7D1C1A95902C000E1D17 /* GlyphData.cpp in Sources */, + FA0B7AAE1A958EA3000E1D17 /* b2WheelJoint.cpp in Sources */, + FA0B7E671A95902C000E1D17 /* wrap_PrismaticJoint.cpp in Sources */, + FA0B7DCE1A95902C000E1D17 /* wrap_Keyboard.cpp in Sources */, + FA0B7EE61A95902D000E1D17 /* Window.cpp in Sources */, + FA0B7E3A1A95902C000E1D17 /* World.cpp in Sources */, + FA0B79471A958E3B000E1D17 /* Vector.cpp in Sources */, + FA0B7B001A958EA3000E1D17 /* options.c in Sources */, + FA0B7E7F1A95902C000E1D17 /* Joint.cpp in Sources */, + FA0B7AE81A958EA3000E1D17 /* except.c in Sources */, + FA0B7DB21A95902C000E1D17 /* wrap_Image.cpp in Sources */, + FA0B7E891A95902C000E1D17 /* Decoder.cpp in Sources */, + FA0B7A591A958EA3000E1D17 /* b2StackAllocator.cpp in Sources */, + FA0B7E3D1A95902C000E1D17 /* wrap_Body.cpp in Sources */, + FA0B7D7A1A95902C000E1D17 /* Quad.cpp in Sources */, + FA620A3B1AA305F6005DB4C2 /* types.cpp in Sources */, + FA0B7DD41A95902C000E1D17 /* BezierCurve.cpp in Sources */, + FA0B7E7C1A95902C000E1D17 /* wrap_World.cpp in Sources */, + FA0B7B0C1A958EA3000E1D17 /* tcp.c in Sources */, + FA0B7D911A95902C000E1D17 /* FormatHandler.cpp in Sources */, + FA0B7D431A95902C000E1D17 /* OpenGL.cpp in Sources */, + FA0B7AF21A958EA3000E1D17 /* io.c in Sources */, + FA0B7DBF1A95902C000E1D17 /* JoystickModule.cpp in Sources */, + FA0B7D4F1A95902C000E1D17 /* SpriteBatch.cpp in Sources */, + FAB2D5AB1AABDD8A008224A4 /* TrueTypeRasterizer.cpp in Sources */, + FA0B7A9F1A958EA3000E1D17 /* b2PrismaticJoint.cpp in Sources */, + FA0B79331A958E3B000E1D17 /* Object.cpp in Sources */, + FA0B7E5B1A95902C000E1D17 /* wrap_MotorJoint.cpp in Sources */, + FA0B79441A958E3B000E1D17 /* Variant.cpp in Sources */, + FA0B7DD71A95902C000E1D17 /* MathModule.cpp in Sources */, + FA0B7D101A95902C000E1D17 /* BMFontRasterizer.cpp in Sources */, + FA0B7E9B1A95902C000E1D17 /* VorbisDecoder.cpp in Sources */, + FA0B7E4C1A95902C000E1D17 /* wrap_EdgeShape.cpp in Sources */, + FA0B7E251A95902C000E1D17 /* PrismaticJoint.cpp in Sources */, + FA0B7A561A958EA3000E1D17 /* b2Settings.cpp in Sources */, + FA0B7E611A95902C000E1D17 /* wrap_Physics.cpp in Sources */, + FA0B7DC81A95902C000E1D17 /* Keyboard.cpp in Sources */, + FA0B7EAD1A95902C000E1D17 /* wrap_SoundData.cpp in Sources */, + FA0B7E2E1A95902C000E1D17 /* RopeJoint.cpp in Sources */, + FA0B7CE01A95902C000E1D17 /* Source.cpp in Sources */, + FA0B7ECF1A95902C000E1D17 /* wrap_LuaThread.cpp in Sources */, + FA0B7AA51A958EA3000E1D17 /* b2RevoluteJoint.cpp in Sources */, + FA0B7EA11A95902C000E1D17 /* Sound.cpp in Sources */, + FA0B7DE61A95902C000E1D17 /* Cursor.cpp in Sources */, + FA0B7EDC1A95902D000E1D17 /* Touch.cpp in Sources */, + FA0B7CE91A95902C000E1D17 /* Event.cpp in Sources */, + FA0B7A961A958EA3000E1D17 /* b2Joint.cpp in Sources */, + FA0B7A621A958EA3000E1D17 /* b2ContactManager.cpp in Sources */, + FA0B7A2F1A958EA3000E1D17 /* b2CollideEdge.cpp in Sources */, + FA0B7ADA1A958EA3000E1D17 /* glad.cpp in Sources */, + FA0B7E1F1A95902C000E1D17 /* Physics.cpp in Sources */, + FA0B7E821A95902C000E1D17 /* Shape.cpp in Sources */, + FA0B7ACE1A958EA3000E1D17 /* packet.c in Sources */, + FA0B7ED51A95902D000E1D17 /* Timer.cpp in Sources */, + FA19C4C61B4B0BD50059B0B3 /* wrap_Video.cpp in Sources */, + FA27B3B41B498151008A9DCE /* wrap_Video.cpp in Sources */, + FA0B7AA81A958EA3000E1D17 /* b2RopeJoint.cpp in Sources */, + FA0B7ACC1A958EA3000E1D17 /* list.c in Sources */, + FA0B7DEF1A95902C000E1D17 /* Mouse.cpp in Sources */, + FA0B79251A958E3B000E1D17 /* Exception.cpp in Sources */, + FA0B7D291A95902C000E1D17 /* wrap_GlyphData.cpp in Sources */, + FA0B7DE31A95902C000E1D17 /* wrap_RandomGenerator.cpp in Sources */, + FA0B7AD71A958EA3000E1D17 /* win32.c in Sources */, + FA0B7AE51A958EA3000E1D17 /* buffer.c in Sources */, + FA0B7D0D1A95902C000E1D17 /* wrap_Filesystem.cpp in Sources */, + FA0B79211A958E3B000E1D17 /* delay.cpp in Sources */, + FA0B7DB51A95902C000E1D17 /* wrap_ImageData.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA577AAA16C7507900860150 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FA0B7D731A95902C000E1D17 /* wrap_Text.cpp in Sources */, + FA0B7DDF1A95902C000E1D17 /* wrap_Math.cpp in Sources */, + FA0B7DA81A95902C000E1D17 /* PVRHandler.cpp in Sources */, + FA0B7EC51A95902C000E1D17 /* ThreadModule.cpp in Sources */, + FA0B7D2B1A95902C000E1D17 /* wrap_Rasterizer.cpp in Sources */, + FA0B7D581A95902C000E1D17 /* wrap_Canvas.cpp in Sources */, + FA0B7E8E1A95902C000E1D17 /* GmeDecoder.cpp in Sources */, + FA0B7CD61A95902C000E1D17 /* Audio.cpp in Sources */, + FA0B7A9E1A958EA3000E1D17 /* b2PrismaticJoint.cpp in Sources */, + FA0B7EAF1A95902C000E1D17 /* System.cpp in Sources */, + FA0B7EE21A95902D000E1D17 /* Window.cpp in Sources */, + FA0B791B1A958E3B000E1D17 /* b64.cpp in Sources */, + FA0B7EC11A95902C000E1D17 /* threads.cpp in Sources */, + FA0B79321A958E3B000E1D17 /* Object.cpp in Sources */, + FA0B7D001A95902C000E1D17 /* Filesystem.cpp in Sources */, + FA0B7ED81A95902D000E1D17 /* wrap_Timer.cpp in Sources */, + FA0B7DD01A95902C000E1D17 /* love.cpp in Sources */, + FA0B7A521A958EA3000E1D17 /* b2Math.cpp in Sources */, + FA0B7D211A95902C000E1D17 /* Rasterizer.cpp in Sources */, + FA0B7B131A958EA3000E1D17 /* udp.c in Sources */, + FA0B7D7C1A95902C000E1D17 /* Texture.cpp in Sources */, + FA0B7ECB1A95902C000E1D17 /* wrap_Channel.cpp in Sources */, + FA0B7E6C1A95902C000E1D17 /* wrap_RevoluteJoint.cpp in Sources */, + FA0B7AFA1A958EA3000E1D17 /* mime.c in Sources */, + FA0B7A5E1A958EA3000E1D17 /* b2Body.cpp in Sources */, + FA0B7B0E1A958EA3000E1D17 /* timeout.c in Sources */, + FA0B7E631A95902C000E1D17 /* wrap_PolygonShape.cpp in Sources */, + FA0B7E721A95902C000E1D17 /* wrap_Shape.cpp in Sources */, + FA0B7CFD1A95902C000E1D17 /* File.cpp in Sources */, + FA27B39D1B498151008A9DCE /* Video.cpp in Sources */, + FA0B7A2E1A958EA3000E1D17 /* b2CollideEdge.cpp in Sources */, + FA0B7E691A95902C000E1D17 /* wrap_PulleyJoint.cpp in Sources */, + FA0B7DB71A95902C000E1D17 /* Joystick.cpp in Sources */, + FA0B7A321A958EA3000E1D17 /* b2Collision.cpp in Sources */, + FAB17BEB1ABFAF1800F9BA27 /* CompressedData.cpp in Sources */, + FA0B7D361A95902C000E1D17 /* Font.cpp in Sources */, + FA0B7E3F1A95902C000E1D17 /* wrap_ChainShape.cpp in Sources */, + FA0B7DEB1A95902C000E1D17 /* Cursor.cpp in Sources */, + FA0B7D861A95902C000E1D17 /* ImageData.cpp in Sources */, + FA0B7A3E1A958EA3000E1D17 /* b2ChainShape.cpp in Sources */, + FA0B7E0F1A95902C000E1D17 /* FrictionJoint.cpp in Sources */, + FA620A351AA2F8DB005DB4C2 /* wrap_Texture.cpp in Sources */, + FA0B7D091A95902C000E1D17 /* wrap_FileData.cpp in Sources */, + FA0B7B341A958EA3000E1D17 /* wuff_convert.c in Sources */, + FA0B7CF11A95902C000E1D17 /* DroppedFile.cpp in Sources */, + FA0B7D891A95902C000E1D17 /* CompressedImageData.cpp in Sources */, + FA0B7B031A958EA3000E1D17 /* select.c in Sources */, + FA0B7D1E1A95902C000E1D17 /* ImageRasterizer.cpp in Sources */, + FA0B7EA31A95902C000E1D17 /* SoundData.cpp in Sources */, + FA0B7D031A95902C000E1D17 /* wrap_DroppedFile.cpp in Sources */, + FA0B79291A958E3B000E1D17 /* Matrix.cpp in Sources */, + FA0B7D451A95902C000E1D17 /* ParticleSystem.cpp in Sources */, + FA8951A21AA2EDF300EC385A /* wrap_Event.cpp in Sources */, + FA0B7ABF1A958EA3000E1D17 /* host.c in Sources */, + FA0B7D4B1A95902C000E1D17 /* Shader.cpp in Sources */, + FA0B7A581A958EA3000E1D17 /* b2StackAllocator.cpp in Sources */, + FA0B7A301A958EA3000E1D17 /* b2CollidePolygon.cpp in Sources */, + FA0B7A641A958EA3000E1D17 /* b2Fixture.cpp in Sources */, + FA0B7E181A95902C000E1D17 /* MotorJoint.cpp in Sources */, + FA0B7E4E1A95902C000E1D17 /* wrap_Fixture.cpp in Sources */, + FA0B7EBE1A95902C000E1D17 /* Thread.cpp in Sources */, + FA0B7EB81A95902C000E1D17 /* Channel.cpp in Sources */, + FA0B7AB11A958EA3000E1D17 /* b2Rope.cpp in Sources */, + FA4B66C91ABBCF1900558F15 /* Timer.cpp in Sources */, + FA0B7A351A958EA3000E1D17 /* b2Distance.cpp in Sources */, + FA0B7E911A95902C000E1D17 /* ModPlugDecoder.cpp in Sources */, + FA0B7E511A95902C000E1D17 /* wrap_FrictionJoint.cpp in Sources */, + FA0B7AD61A958EA3000E1D17 /* win32.c in Sources */, + FA0B7B161A958EA3000E1D17 /* unix.c in Sources */, + FA0B7E0C1A95902C000E1D17 /* Fixture.cpp in Sources */, + FA0B7D181A95902C000E1D17 /* TrueTypeRasterizer.cpp in Sources */, + FA0B7CFA1A95902C000E1D17 /* Filesystem.cpp in Sources */, + FA0B7D3C1A95902C000E1D17 /* Image.cpp in Sources */, + FA0B7A8C1A958EA3000E1D17 /* b2DistanceJoint.cpp in Sources */, + FA0B7E421A95902C000E1D17 /* wrap_CircleShape.cpp in Sources */, + FA0B7CE51A95902C000E1D17 /* wrap_Source.cpp in Sources */, + FA0B792C1A958E3B000E1D17 /* Memoizer.cpp in Sources */, + FA0B7CCD1A95902C000E1D17 /* Audio.cpp in Sources */, + FA0B7DCA1A95902C000E1D17 /* Keyboard.cpp in Sources */, + FA0B7AA41A958EA3000E1D17 /* b2RevoluteJoint.cpp in Sources */, + FA0B7DFA1A95902C000E1D17 /* Body.cpp in Sources */, + FA0B7ED11A95902C000E1D17 /* wrap_ThreadModule.cpp in Sources */, + FA0B7EDF1A95902D000E1D17 /* wrap_Touch.cpp in Sources */, + FA0B794A1A958E3B000E1D17 /* wrap_Data.cpp in Sources */, + FA0B7CDC1A95902C000E1D17 /* Source.cpp in Sources */, + FA0B7DC41A95902C000E1D17 /* wrap_JoystickModule.cpp in Sources */, + FA0B7E6F1A95902C000E1D17 /* wrap_RopeJoint.cpp in Sources */, + FA0B7AB51A958EA3000E1D17 /* ddsparse.cpp in Sources */, + FA0B7A441A958EA3000E1D17 /* b2EdgeShape.cpp in Sources */, + FA0B79461A958E3B000E1D17 /* Vector.cpp in Sources */, + FA27B3C51B4985D8008A9DCE /* Video.cpp in Sources */, + FA0B7DBB1A95902C000E1D17 /* Joystick.cpp in Sources */, + FA0B7DAE1A95902C000E1D17 /* wrap_CompressedImageData.cpp in Sources */, + FA0B7A6E1A958EA3000E1D17 /* b2WorldCallbacks.cpp in Sources */, + FA0B7A831A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp in Sources */, + FA0B7D671A95902C000E1D17 /* wrap_ParticleSystem.cpp in Sources */, + FA0B7AA11A958EA3000E1D17 /* b2PulleyJoint.cpp in Sources */, + FAB17BE61ABFAA9000F9BA27 /* lz4.c in Sources */, + FA0B7B211A958EA3000E1D17 /* luasocket.cpp in Sources */, + FA0B7D641A95902C000E1D17 /* wrap_Mesh.cpp in Sources */, + FA0B7A5B1A958EA3000E1D17 /* b2Timer.cpp in Sources */, + FA0B7CD91A95902C000E1D17 /* Pool.cpp in Sources */, + FA0B7E151A95902C000E1D17 /* Joint.cpp in Sources */, + FA0B7EE81A95902D000E1D17 /* wrap_Window.cpp in Sources */, + FA0B7AF11A958EA3000E1D17 /* io.c in Sources */, + FA0B7E271A95902C000E1D17 /* PulleyJoint.cpp in Sources */, + FA0B7B301A958EA3000E1D17 /* wuff.c in Sources */, + FA0B7E031A95902C000E1D17 /* Contact.cpp in Sources */, + FA0B7D821A95902C000E1D17 /* CompressedImageData.cpp in Sources */, + FA0B7A7A1A958EA3000E1D17 /* b2Contact.cpp in Sources */, + FA0B7DF11A95902C000E1D17 /* wrap_Cursor.cpp in Sources */, + FA0B7E001A95902C000E1D17 /* CircleShape.cpp in Sources */, + FA0B7E451A95902C000E1D17 /* wrap_Contact.cpp in Sources */, + FA0B7D3F1A95902C000E1D17 /* Mesh.cpp in Sources */, + FA0B7D151A95902C000E1D17 /* Font.cpp in Sources */, + FA0B7EB51A95902C000E1D17 /* wrap_System.cpp in Sources */, + FA0B7DAB1A95902C000E1D17 /* STBHandler.cpp in Sources */, + FA0B7AB81A958EA3000E1D17 /* enet.cpp in Sources */, + FA0B7DD91A95902C000E1D17 /* RandomGenerator.cpp in Sources */, + FA0B7A9B1A958EA3000E1D17 /* b2MouseJoint.cpp in Sources */, + FA0B7D7F1A95902C000E1D17 /* Volatile.cpp in Sources */, + FA0B7A3B1A958EA3000E1D17 /* b2TimeOfImpact.cpp in Sources */, + FA0B7EBB1A95902C000E1D17 /* LuaThread.cpp in Sources */, + FA0B79381A958E3B000E1D17 /* Reference.cpp in Sources */, + FA0B7D391A95902C000E1D17 /* Graphics.cpp in Sources */, + FA0B79361A958E3B000E1D17 /* macosx.mm in Sources */, + FA0B7E121A95902C000E1D17 /* GearJoint.cpp in Sources */, + FAE272521C05A15B00A67640 /* ParticleSystem.cpp in Sources */, + FA0B7DC11A95902C000E1D17 /* wrap_Joystick.cpp in Sources */, + FA0B7CD31A95902C000E1D17 /* Source.cpp in Sources */, + FA0B7A411A958EA3000E1D17 /* b2CircleShape.cpp in Sources */, + FA0B7CD01A95902C000E1D17 /* Audio.cpp in Sources */, + FAA3A9AE1B7D465A00CED060 /* android.cpp in Sources */, + FA0B7D121A95902C000E1D17 /* Font.cpp in Sources */, + FA0B7EC81A95902C000E1D17 /* threads.cpp in Sources */, + FA0B7A6B1A958EA3000E1D17 /* b2World.cpp in Sources */, + FA0B7D5E1A95902C000E1D17 /* wrap_Graphics.cpp in Sources */, + FA0B7A801A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp in Sources */, + FA0B7E541A95902C000E1D17 /* wrap_GearJoint.cpp in Sources */, + FA41A3C81C0A1F950084430C /* ASTCHandler.cpp in Sources */, + FA0B7E781A95902C000E1D17 /* wrap_WheelJoint.cpp in Sources */, + FA0B7DDC1A95902C000E1D17 /* wrap_BezierCurve.cpp in Sources */, + FA0B7AF71A958EA3000E1D17 /* luasocket.c in Sources */, + FA0B7A951A958EA3000E1D17 /* b2Joint.cpp in Sources */, + FA0B7D061A95902C000E1D17 /* wrap_File.cpp in Sources */, + FA0B7A4E1A958EA3000E1D17 /* b2Draw.cpp in Sources */, + FA0B7AEE1A958EA3000E1D17 /* inet.c in Sources */, + FA27B3C01B4985BF008A9DCE /* wrap_VideoStream.cpp in Sources */, + FA0B7D931A95902C000E1D17 /* Image.cpp in Sources */, + FA0B7D9F1A95902C000E1D17 /* KTXHandler.cpp in Sources */, + FA0B7A2C1A958EA3000E1D17 /* b2CollideCircle.cpp in Sources */, + FA27B3A01B498151008A9DCE /* VideoStream.cpp in Sources */, + FA0B7CEB1A95902C000E1D17 /* Event.cpp in Sources */, + FA0B7B0B1A958EA3000E1D17 /* tcp.c in Sources */, + FA27B3AA1B498151008A9DCE /* VideoStream.cpp in Sources */, + FA0B7D961A95902C000E1D17 /* ImageData.cpp in Sources */, + FA0B7E571A95902C000E1D17 /* wrap_Joint.cpp in Sources */, + FA0B7E301A95902C000E1D17 /* Shape.cpp in Sources */, + FA0B7E481A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */, + FA0B7A8F1A958EA3000E1D17 /* b2FrictionJoint.cpp in Sources */, + FA0B792F1A958E3B000E1D17 /* Module.cpp in Sources */, + FA0B7E2A1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */, + FA0B7A711A958EA3000E1D17 /* b2ChainAndCircleContact.cpp in Sources */, + FA0B7D251A95902C000E1D17 /* wrap_Font.cpp in Sources */, + FA0B7E091A95902C000E1D17 /* EdgeShape.cpp in Sources */, + FA0B7CF71A95902C000E1D17 /* FileData.cpp in Sources */, + FAB17BF01ABFB37500F9BA27 /* wrap_CompressedData.cpp in Sources */, + FA0B7DA51A95902C000E1D17 /* PNGHandler.cpp in Sources */, + FA0B7B371A958EA3000E1D17 /* wuff_internal.c in Sources */, + FA0B7E971A95902C000E1D17 /* Sound.cpp in Sources */, + FA0B7E361A95902C000E1D17 /* WheelJoint.cpp in Sources */, + FA0B7A471A958EA3000E1D17 /* b2PolygonShape.cpp in Sources */, + FA0B7D8D1A95902C000E1D17 /* ddsHandler.cpp in Sources */, + FA0B7DFD1A95902C000E1D17 /* ChainShape.cpp in Sources */, + FA0B79201A958E3B000E1D17 /* delay.cpp in Sources */, + FA0B7D611A95902C000E1D17 /* wrap_Image.cpp in Sources */, + FA0B7A4B1A958EA3000E1D17 /* b2BlockAllocator.cpp in Sources */, + FA0B7A551A958EA3000E1D17 /* b2Settings.cpp in Sources */, + FA0B7EA91A95902C000E1D17 /* wrap_Sound.cpp in Sources */, + FA0B7A981A958EA3000E1D17 /* b2MotorJoint.cpp in Sources */, + FA0B7E061A95902C000E1D17 /* DistanceJoint.cpp in Sources */, + FA620A321AA2F8DB005DB4C2 /* wrap_Quad.cpp in Sources */, + FA0B793B1A958E3B000E1D17 /* runtime.cpp in Sources */, + FA0B7E5D1A95902C000E1D17 /* wrap_MouseJoint.cpp in Sources */, + FA0B7A741A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp in Sources */, + FA0B7AD41A958EA3000E1D17 /* unix.c in Sources */, + FA0B7A771A958EA3000E1D17 /* b2CircleContact.cpp in Sources */, + FAB17BE01ABFAA2000F9BA27 /* Compressor.cpp in Sources */, + FA0B7D701A95902C000E1D17 /* wrap_SpriteBatch.cpp in Sources */, + FA0B7D331A95902C000E1D17 /* Canvas.cpp in Sources */, + FA0B7E941A95902C000E1D17 /* Mpg123Decoder.cpp in Sources */, + FA0B7E8B1A95902C000E1D17 /* FLACDecoder.cpp in Sources */, + FA0B7B3A1A958EA3000E1D17 /* wuff_memory.c in Sources */, + FA0B7A381A958EA3000E1D17 /* b2DynamicTree.cpp in Sources */, + FA0B7D481A95902C000E1D17 /* Polyline.cpp in Sources */, + FA0B7CE21A95902C000E1D17 /* wrap_Audio.cpp in Sources */, + FA0B7AAA1A958EA3000E1D17 /* b2WeldJoint.cpp in Sources */, + FA0B7DF71A95902C000E1D17 /* Body.cpp in Sources */, + FA0B7DF41A95902C000E1D17 /* wrap_Mouse.cpp in Sources */, + FA0B7D6D1A95902C000E1D17 /* wrap_Shader.cpp in Sources */, + FA0B7E851A95902C000E1D17 /* CoreAudioDecoder.cpp in Sources */, + FA0B7E751A95902C000E1D17 /* wrap_WeldJoint.cpp in Sources */, + FA0B7D551A95902C000E1D17 /* GLBuffer.cpp in Sources */, + FA0B7AFF1A958EA3000E1D17 /* options.c in Sources */, + FA57FB981AE1993600F2AD6D /* noise1234.cpp in Sources */, + FA0B7E211A95902C000E1D17 /* PolygonShape.cpp in Sources */, + FA0B7AE41A958EA3000E1D17 /* buffer.c in Sources */, + FA0B7D511A95902C000E1D17 /* Text.cpp in Sources */, + FA0B7DA21A95902C000E1D17 /* PKMHandler.cpp in Sources */, + FA0B7ABA1A958EA3000E1D17 /* callbacks.c in Sources */, + FAB17BF51ABFC4B100F9BA27 /* lz4hc.c in Sources */, + FA0B7EA61A95902C000E1D17 /* wrap_Decoder.cpp in Sources */, + FA0B7E1B1A95902C000E1D17 /* MouseJoint.cpp in Sources */, + FA0B7CF41A95902C000E1D17 /* File.cpp in Sources */, + FA0B7E331A95902C000E1D17 /* WeldJoint.cpp in Sources */, + FA0B7D5B1A95902C000E1D17 /* wrap_Font.cpp in Sources */, + FA0B7AE71A958EA3000E1D17 /* except.c in Sources */, + FA0B7D301A95902C000E1D17 /* Graphics.cpp in Sources */, + FA0B7E9D1A95902C000E1D17 /* WaveDecoder.cpp in Sources */, + FA0B7EB21A95902C000E1D17 /* System.cpp in Sources */, + FA0B7D1B1A95902C000E1D17 /* GlyphData.cpp in Sources */, + FA0B7AD11A958EA3000E1D17 /* protocol.c in Sources */, + FA0B7E661A95902C000E1D17 /* wrap_PrismaticJoint.cpp in Sources */, + FA0B7DCD1A95902C000E1D17 /* wrap_Keyboard.cpp in Sources */, + FA0B7EE51A95902D000E1D17 /* Window.cpp in Sources */, + FA0B7E391A95902C000E1D17 /* World.cpp in Sources */, + FA0B7ABD1A958EA3000E1D17 /* compress.c in Sources */, + FA0B7ACB1A958EA3000E1D17 /* list.c in Sources */, + FA0B7E7E1A95902C000E1D17 /* Joint.cpp in Sources */, + FA0B7A861A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp in Sources */, + FA0B7DB11A95902C000E1D17 /* wrap_Image.cpp in Sources */, + FA0B7E881A95902C000E1D17 /* Decoder.cpp in Sources */, + FA0B7B1B1A958EA3000E1D17 /* usocket.c in Sources */, + FA0B7E3C1A95902C000E1D17 /* wrap_Body.cpp in Sources */, + FA0B7D791A95902C000E1D17 /* Quad.cpp in Sources */, + FA620A3A1AA305F6005DB4C2 /* types.cpp in Sources */, + FA0B7DD31A95902C000E1D17 /* BezierCurve.cpp in Sources */, + FA0B7E7B1A95902C000E1D17 /* wrap_World.cpp in Sources */, + FA0B7B281A958EA3000E1D17 /* simplexnoise1234.cpp in Sources */, + FA0B7D901A95902C000E1D17 /* FormatHandler.cpp in Sources */, + FA0B7D421A95902C000E1D17 /* OpenGL.cpp in Sources */, + FA0B7A671A958EA3000E1D17 /* b2Island.cpp in Sources */, + FA0B7DBE1A95902C000E1D17 /* JoystickModule.cpp in Sources */, + FA0B7D4E1A95902C000E1D17 /* SpriteBatch.cpp in Sources */, + FAB2D5AA1AABDD8A008224A4 /* TrueTypeRasterizer.cpp in Sources */, + FA0B7ACD1A958EA3000E1D17 /* packet.c in Sources */, + FA0B7A921A958EA3000E1D17 /* b2GearJoint.cpp in Sources */, + FA0B7E5A1A95902C000E1D17 /* wrap_MotorJoint.cpp in Sources */, + FA0B7AA71A958EA3000E1D17 /* b2RopeJoint.cpp in Sources */, + FA0B7DD61A95902C000E1D17 /* MathModule.cpp in Sources */, + FA0B7D0F1A95902C000E1D17 /* BMFontRasterizer.cpp in Sources */, + FA0B7E9A1A95902C000E1D17 /* VorbisDecoder.cpp in Sources */, + FA0B7E4B1A95902C000E1D17 /* wrap_EdgeShape.cpp in Sources */, + FA0B7E241A95902C000E1D17 /* PrismaticJoint.cpp in Sources */, + FA0B7A7D1A958EA3000E1D17 /* b2ContactSolver.cpp in Sources */, + FA0B7E601A95902C000E1D17 /* wrap_Physics.cpp in Sources */, + FA0B7DC71A95902C000E1D17 /* Keyboard.cpp in Sources */, + FA0B7EAC1A95902C000E1D17 /* wrap_SoundData.cpp in Sources */, + FA0B7E2D1A95902C000E1D17 /* RopeJoint.cpp in Sources */, + FA0B7CDF1A95902C000E1D17 /* Source.cpp in Sources */, + FA0B7ECE1A95902C000E1D17 /* wrap_LuaThread.cpp in Sources */, + FA0B79431A958E3B000E1D17 /* Variant.cpp in Sources */, + FA0B7EA01A95902C000E1D17 /* Sound.cpp in Sources */, + FA0B7DE51A95902C000E1D17 /* Cursor.cpp in Sources */, + FA0B7EDB1A95902D000E1D17 /* Touch.cpp in Sources */, + FA0B7CE81A95902C000E1D17 /* Event.cpp in Sources */, + FA0B7ACF1A958EA3000E1D17 /* peer.c in Sources */, + FA0B7ADE1A958EA3000E1D17 /* lodepng.cpp in Sources */, + FA0B7A291A958EA3000E1D17 /* b2BroadPhase.cpp in Sources */, + FA0B7A891A958EA3000E1D17 /* b2PolygonContact.cpp in Sources */, + FA0B7E1E1A95902C000E1D17 /* Physics.cpp in Sources */, + FA0B7E811A95902C000E1D17 /* Shape.cpp in Sources */, + FA0B7B251A958EA3000E1D17 /* lutf8lib.c in Sources */, + FA0B7ED41A95902D000E1D17 /* Timer.cpp in Sources */, + FA19C4C51B4B0BD50059B0B3 /* wrap_Video.cpp in Sources */, + FA27B3B31B498151008A9DCE /* wrap_Video.cpp in Sources */, + FA0B7A611A958EA3000E1D17 /* b2ContactManager.cpp in Sources */, + FA0B7AAD1A958EA3000E1D17 /* b2WheelJoint.cpp in Sources */, + FA0B7DEE1A95902C000E1D17 /* Mouse.cpp in Sources */, + FA0B7AE11A958EA3000E1D17 /* auxiliar.c in Sources */, + FA0B7D281A95902C000E1D17 /* wrap_GlyphData.cpp in Sources */, + FA0B7DE21A95902C000E1D17 /* wrap_RandomGenerator.cpp in Sources */, + FA0B79401A958E3B000E1D17 /* utf8.cpp in Sources */, + FA0B79241A958E3B000E1D17 /* Exception.cpp in Sources */, + FA0B7D0C1A95902C000E1D17 /* wrap_Filesystem.cpp in Sources */, + FA0B7AD91A958EA3000E1D17 /* glad.cpp in Sources */, + FA0B7DB41A95902C000E1D17 /* wrap_ImageData.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 10D5479E63C26BB35EB5482E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + DEAD_CODE_STRIPPING = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_PARAMETER = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../src\"", + "\"$(SRCROOT)/../../src/libraries\"", + "\"$(SRCROOT)/../../src/modules\"", + "\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"", + ); + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "@rpath"; + LIBRARY_SEARCH_PATHS = ""; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = NO; + SDKROOT = macosx; + USE_HEADERMAP = NO; + WARNING_CFLAGS = "-Wall"; + }; + name = Release; + }; + 64274E785071353E1A1D0D4B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + LOVE_APPLE_USE_FRAMEWORKS, + "DEBUG=1", + ); + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_PARAMETER = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../src\"", + "\"$(SRCROOT)/../../src/libraries\"", + "\"$(SRCROOT)/../../src/modules\"", + "\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"", + ); + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "@rpath"; + LIBRARY_SEARCH_PATHS = ""; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + USE_HEADERMAP = NO; + WARNING_CFLAGS = "-Wall"; + }; + name = Debug; + }; + FA0B78EF1A958B90000E1D17 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + LOVE_SUPPORT_COREAUDIO, + LOVE_NOMPG123, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + ios/include, + ios/include/luajit, + ios/include/freetype, + ios/include/SDL2, + ios/include/modplug, + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/ios/libraries/freetype", + "$(PROJECT_DIR)/ios/libraries/lua", + "$(PROJECT_DIR)/ios/libraries/ogg", + "$(PROJECT_DIR)/ios/libraries/physfs", + "$(PROJECT_DIR)/ios/libraries/vorbis", + "$(PROJECT_DIR)/ios/libraries/SDL2", + "$(PROJECT_DIR)/ios/libraries/luajit", + "$(PROJECT_DIR)/ios/libraries/theora", + "$(PROJECT_DIR)/ios/libraries/modplug", + ); + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = love; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + FA0B78F01A958B90000E1D17 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + LOVE_SUPPORT_COREAUDIO, + LOVE_NOMPG123, + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + ios/include, + ios/include/luajit, + ios/include/freetype, + ios/include/SDL2, + ios/include/modplug, + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/ios/libraries/freetype", + "$(PROJECT_DIR)/ios/libraries/lua", + "$(PROJECT_DIR)/ios/libraries/ogg", + "$(PROJECT_DIR)/ios/libraries/physfs", + "$(PROJECT_DIR)/ios/libraries/vorbis", + "$(PROJECT_DIR)/ios/libraries/SDL2", + "$(PROJECT_DIR)/ios/libraries/luajit", + "$(PROJECT_DIR)/ios/libraries/theora", + "$(PROJECT_DIR)/ios/libraries/modplug", + ); + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = love; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + FA0B78F11A958B90000E1D17 /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + LOVE_SUPPORT_COREAUDIO, + LOVE_NOMPG123, + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + ios/include, + ios/include/luajit, + ios/include/freetype, + ios/include/SDL2, + ios/include/modplug, + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/ios/libraries/freetype", + "$(PROJECT_DIR)/ios/libraries/lua", + "$(PROJECT_DIR)/ios/libraries/ogg", + "$(PROJECT_DIR)/ios/libraries/physfs", + "$(PROJECT_DIR)/ios/libraries/vorbis", + "$(PROJECT_DIR)/ios/libraries/SDL2", + "$(PROJECT_DIR)/ios/libraries/luajit", + "$(PROJECT_DIR)/ios/libraries/theora", + "$(PROJECT_DIR)/ios/libraries/modplug", + ); + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = love; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Distribution; + }; + FA5326C4189719C700F7BBF4 /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + DEAD_CODE_STRIPPING = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_PARAMETER = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../src\"", + "\"$(SRCROOT)/../../src/libraries\"", + "\"$(SRCROOT)/../../src/modules\"", + "\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"", + ); + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "@rpath"; + LIBRARY_SEARCH_PATHS = ""; + LLVM_LTO = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = NO; + SDKROOT = macosx; + USE_HEADERMAP = NO; + WARNING_CFLAGS = "-Wall"; + }; + name = Distribution; + }; + FA5326C5189719C700F7BBF4 /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 9.0; + DYLIB_CURRENT_VERSION = 9.0; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks, + "$(LOCAL_LIBRARY_DIR)/Frameworks", + ); + FRAMEWORK_VERSION = A; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks/FreeType.framework/Headers, + /Library/Frameworks/Lua.framework/Headers, + /Library/Frameworks/SDL2.framework/Headers, + ); + INFOPLIST_FILE = "macosx/liblove-macosx.plist"; + LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-undefined", + dynamic_lookup, + ); + PRODUCT_BUNDLE_IDENTIFIER = "love2d.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = love; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = framework; + }; + name = Distribution; + }; + FA577AC016C7507900860150 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; + DYLIB_COMPATIBILITY_VERSION = 9.0; + DYLIB_CURRENT_VERSION = 9.0; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks, + "$(LOCAL_LIBRARY_DIR)/Frameworks", + ); + FRAMEWORK_VERSION = A; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks/FreeType.framework/Headers, + /Library/Frameworks/Lua.framework/Headers, + /Library/Frameworks/SDL2.framework/Headers, + ); + INFOPLIST_FILE = "macosx/liblove-macosx.plist"; + LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-undefined", + dynamic_lookup, + ); + PRODUCT_BUNDLE_IDENTIFIER = "love2d.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = love; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = framework; + }; + name = Debug; + }; + FA577AC116C7507900860150 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 9.0; + DYLIB_CURRENT_VERSION = 9.0; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks, + "$(LOCAL_LIBRARY_DIR)/Frameworks", + ); + FRAMEWORK_VERSION = A; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks/FreeType.framework/Headers, + /Library/Frameworks/Lua.framework/Headers, + /Library/Frameworks/SDL2.framework/Headers, + ); + INFOPLIST_FILE = "macosx/liblove-macosx.plist"; + LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-undefined", + dynamic_lookup, + ); + PRODUCT_BUNDLE_IDENTIFIER = "love2d.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = love; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "liblove" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 64274E785071353E1A1D0D4B /* Debug */, + 10D5479E63C26BB35EB5482E /* Release */, + FA5326C4189719C700F7BBF4 /* Distribution */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + FA0B78EE1A958B90000E1D17 /* Build configuration list for PBXNativeTarget "liblove-ios" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FA0B78EF1A958B90000E1D17 /* Debug */, + FA0B78F01A958B90000E1D17 /* Release */, + FA0B78F11A958B90000E1D17 /* Distribution */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + FA577ABF16C7507900860150 /* Build configuration list for PBXNativeTarget "liblove-macosx" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FA577AC016C7507900860150 /* Debug */, + FA577AC116C7507900860150 /* Release */, + FA5326C5189719C700F7BBF4 /* Distribution */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/jni/love/platform/xcode/liblove.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/jni/love/platform/xcode/liblove.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..f4e1c8fd --- /dev/null +++ b/jni/love/platform/xcode/liblove.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/jni/love/platform/xcode/love.xcodeproj/TemplateIcon.icns b/jni/love/platform/xcode/love.xcodeproj/TemplateIcon.icns new file mode 100644 index 00000000..62cb7015 Binary files /dev/null and b/jni/love/platform/xcode/love.xcodeproj/TemplateIcon.icns differ diff --git a/jni/love/platform/xcode/love.xcodeproj/default.pbxuser b/jni/love/platform/xcode/love.xcodeproj/default.pbxuser new file mode 100644 index 00000000..347c8dc8 --- /dev/null +++ b/jni/love/platform/xcode/love.xcodeproj/default.pbxuser @@ -0,0 +1,1052 @@ +// !$*UTF8*$! +{ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + activeArchitecturePreference = ppc; + activeBuildConfigurationName = Release; + activeExecutable = A93E69C010420A88007D418B /* love */; + activeSDKPreference = macosx10.5; + activeTarget = 8D1107260486CEB800E47090 /* love */; + addToTargets = ( + 8D1107260486CEB800E47090 /* love */, + ); + breakpoints = ( + ); + codeSenseManager = A93E69C410420AA6007D418B /* Code sense */; + executables = ( + A93E69C010420A88007D418B /* love */, + ); + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 200, + 200, + 150.58349609375, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXBookmarksDataSource_LocationID, + PBXBookmarksDataSource_NameID, + PBXBookmarksDataSource_CommentsID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 300, + 193.20849609375, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXErrorsWarningsDataSource_TypeID, + PBXErrorsWarningsDataSource_MessageID, + PBXErrorsWarningsDataSource_LocationID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 22, + 300, + 191, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXExecutablesDataSource_ActiveFlagID, + PBXExecutablesDataSource_NameID, + PBXExecutablesDataSource_CommentsID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_FiletypeID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 341, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 301, + 60, + 20, + 48, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 272885036; + PBXWorkspaceStateSaveDate = 272885036; + }; + perUserProjectItems = { + A9D8FBD21043E5320063561F /* PBXTextBookmark */ = A9D8FBD21043E5320063561F /* PBXTextBookmark */; + A9D8FBE01043E5AE0063561F /* PBXTextBookmark */ = A9D8FBE01043E5AE0063561F /* PBXTextBookmark */; + A9D8FBE21043E5AE0063561F /* PBXTextBookmark */ = A9D8FBE21043E5AE0063561F /* PBXTextBookmark */; + A9D8FBE71043E5C10063561F /* PBXTextBookmark */ = A9D8FBE71043E5C10063561F /* PBXTextBookmark */; + A9D8FBE81043E5C10063561F /* PBXTextBookmark */ = A9D8FBE81043E5C10063561F /* PBXTextBookmark */; + A9D8FBE91043E5C10063561F /* PBXTextBookmark */ = A9D8FBE91043E5C10063561F /* PBXTextBookmark */; + A9D8FBEA1043E5C10063561F /* PBXTextBookmark */ = A9D8FBEA1043E5C10063561F /* PBXTextBookmark */; + A9D8FBEB1043E5C10063561F /* PBXTextBookmark */ = A9D8FBEB1043E5C10063561F /* PBXTextBookmark */; + A9D8FBEC1043E5C10063561F /* PBXTextBookmark */ = A9D8FBEC1043E5C10063561F /* PBXTextBookmark */; + A9D8FBED1043E5C10063561F /* PBXTextBookmark */ = A9D8FBED1043E5C10063561F /* PBXTextBookmark */; + A9D8FBFC1043E7C20063561F /* PBXTextBookmark */ = A9D8FBFC1043E7C20063561F /* PBXTextBookmark */; + A9D8FC011043E8770063561F /* PBXTextBookmark */ = A9D8FC011043E8770063561F /* PBXTextBookmark */; + A9D8FC031043E94F0063561F /* PBXTextBookmark */ = A9D8FC031043E94F0063561F /* PBXTextBookmark */; + A9D8FC041043E94F0063561F /* PBXTextBookmark */ = A9D8FC041043E94F0063561F /* PBXTextBookmark */; + A9D8FC051043E94F0063561F /* PBXTextBookmark */ = A9D8FC051043E94F0063561F /* PBXTextBookmark */; + A9D8FC061043E94F0063561F /* PBXTextBookmark */ = A9D8FC061043E94F0063561F /* PBXTextBookmark */; + A9D8FC0D1043EBD30063561F /* PBXTextBookmark */ = A9D8FC0D1043EBD30063561F /* PBXTextBookmark */; + A9D8FC131043EC200063561F /* PBXTextBookmark */ = A9D8FC131043EC200063561F /* PBXTextBookmark */; + A9D8FC1E1043EFA00063561F /* PBXTextBookmark */ = A9D8FC1E1043EFA00063561F /* PBXTextBookmark */; + A9D8FC2010441C030063561F /* PBXTextBookmark */ = A9D8FC2010441C030063561F /* PBXTextBookmark */; + A9D8FC2110441C0F0063561F /* PBXTextBookmark */ = A9D8FC2110441C0F0063561F /* PBXTextBookmark */; + A9D8FC2410441DF10063561F /* PBXTextBookmark */ = A9D8FC2410441DF10063561F /* PBXTextBookmark */; + A9D8FC2510441E590063561F /* PBXTextBookmark */ = A9D8FC2510441E590063561F /* PBXTextBookmark */; + A9D8FC2610441E700063561F /* PBXTextBookmark */ = A9D8FC2610441E700063561F /* PBXTextBookmark */; + A9D8FC2710441E890063561F /* PBXTextBookmark */ = A9D8FC2710441E890063561F /* PBXTextBookmark */; + A9D8FC2910441E9B0063561F /* PBXTextBookmark */ = A9D8FC2910441E9B0063561F /* PBXTextBookmark */; + A9D8FC2F104423D80063561F /* PBXTextBookmark */ = A9D8FC2F104423D80063561F /* PBXTextBookmark */; + A9D8FC30104423D80063561F /* PBXTextBookmark */ = A9D8FC30104423D80063561F /* PBXTextBookmark */; + A9D8FC31104423D80063561F /* PBXTextBookmark */ = A9D8FC31104423D80063561F /* PBXTextBookmark */; + A9D8FC32104423D80063561F /* PBXTextBookmark */ = A9D8FC32104423D80063561F /* PBXTextBookmark */; + A9D8FC36104423F90063561F /* PBXTextBookmark */ = A9D8FC36104423F90063561F /* PBXTextBookmark */; + A9D8FC3D104427770063561F /* PBXTextBookmark */ = A9D8FC3D104427770063561F /* PBXTextBookmark */; + A9D8FC3F104427A10063561F /* PBXTextBookmark */ = A9D8FC3F104427A10063561F /* PBXTextBookmark */; + A9D8FC40104427AE0063561F /* PBXTextBookmark */ = A9D8FC40104427AE0063561F /* PBXTextBookmark */; + A9D8FC421044283D0063561F /* PBXTextBookmark */ = A9D8FC421044283D0063561F /* PBXTextBookmark */; + A9DE83571043CE2800567BA4 = A9DE83571043CE2800567BA4 /* PBXTextBookmark */; + A9DE835A1043CE2800567BA4 = A9DE835A1043CE2800567BA4 /* PBXTextBookmark */; + A9DE83781043CFEF00567BA4 = A9DE83781043CFEF00567BA4 /* PBXTextBookmark */; + A9DE83791043CFEF00567BA4 = A9DE83791043CFEF00567BA4 /* PBXTextBookmark */; + A9DE837A1043CFEF00567BA4 = A9DE837A1043CFEF00567BA4 /* PBXBookmark */; + A9DE837B1043CFEF00567BA4 = A9DE837B1043CFEF00567BA4 /* PBXTextBookmark */; + A9DE837C1043CFEF00567BA4 = A9DE837C1043CFEF00567BA4 /* PBXTextBookmark */; + A9DE85AA1043E49900567BA4 = A9DE85AA1043E49900567BA4 /* PBXTextBookmark */; + }; + sourceControlManager = A93E69C310420AA6007D418B /* Source Control */; + userBuildSettings = { + }; + }; + 8D1107260486CEB800E47090 /* love */ = { + activeExec = 0; + executables = ( + A93E69C010420A88007D418B /* love */, + ); + }; + A9255DEA1043188D00BA1496 /* SDLMain.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {762, 5586}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{561, 596}"; + }; + }; + A93E69C010420A88007D418B /* love */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 0; + configStateDict = { + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = love; + sourceDirectories = ( + ); + }; + A93E69C310420AA6007D418B /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + }; + A93E69C410420AA6007D418B /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + A93E69DE10420ABF007D418B /* config.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 812}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{922, 334}"; + }; + }; + A93E69E110420ABF007D418B /* Exception.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 770}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 844}"; + }; + }; + A93E69E610420ABF007D418B /* MemoryData.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 910}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{987, 353}"; + }; + }; + A93E69E710420ABF007D418B /* Module.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 798}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{1168, 298}"; + }; + }; + A93E69EA10420ABF007D418B /* Reference.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 742}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E69ED10420ABF007D418B /* runtime.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {798, 3990}}"; + sepNavSelRange = "{1030, 18}"; + sepNavVisRange = "{9125, 493}"; + }; + }; + A93E69F110420ABF007D418B /* version.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 532}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 844}"; + }; + }; + A93E69F710420ABF007D418B /* keeper.lch */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 3094}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1141}"; + }; + }; + A93E6A0410420ABF007D418B /* auxiliar.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 2156}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 765}"; + }; + }; + A93E6A2C10420AC0007D418B /* unix.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 5054}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 534}"; + }; + }; + A93E6A3010420AC0007D418B /* usocket.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 5250}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 728}"; + }; + }; + A93E6A3110420AC0007D418B /* usocket.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1206, 641}}"; + sepNavSelRange = "{601, 0}"; + sepNavVisRange = "{0, 1146}"; + sepNavWindowFrame = "{{15, 4}, {1265, 769}}"; + }; + }; + A93E6A3410420AC0007D418B /* love.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {606, 2576}}"; + sepNavSelRange = "{4804, 0}"; + sepNavVisRange = "{3953, 397}"; + }; + }; + A93E6A4410420AC0007D418B /* Audio.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {468, 2590}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 674}"; + }; + }; + A93E6A4510420AC0007D418B /* Audio.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 1624}}"; + sepNavSelRange = "{1170, 127}"; + sepNavVisRange = "{1062, 295}"; + }; + }; + A93E6A4710420AC0007D418B /* Music.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 1064}}"; + sepNavSelRange = "{1084, 127}"; + sepNavVisRange = "{1065, 229}"; + }; + }; + A93E6A4910420AC0007D418B /* Pool.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 1806}}"; + sepNavSelRange = "{1297, 0}"; + sepNavVisRange = "{1139, 229}"; + }; + }; + A93E6A4A10420AC0007D418B /* Sound.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1008}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 926}"; + }; + }; + A93E6A4B10420AC0007D418B /* Sound.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 980}}"; + sepNavSelRange = "{1242, 0}"; + sepNavVisRange = "{1066, 274}"; + }; + }; + A93E6A4D10420AC0007D418B /* Source.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 1190}}"; + sepNavSelRange = "{1243, 0}"; + sepNavVisRange = "{1095, 229}"; + }; + }; + A93E6A5210420AC0007D418B /* wrap_Audio.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 798}}"; + sepNavSelRange = "{1721, 64}"; + sepNavVisRange = "{1247, 565}"; + }; + }; + A93E6A5E10420AC1007D418B /* wrap_Event.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1260}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E6A6B10420AC1007D418B /* wrap_FileData.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 798}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 908}"; + }; + }; + A93E6A7510420AC2007D418B /* wrap_Font.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1064}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E6A8910420AC2007D418B /* GLee.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 182112}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 847}"; + }; + }; + A93E6A8D10420AC2007D418B /* Graphics.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {696, 17220}}"; + sepNavSelRange = "{2543, 0}"; + sepNavVisRange = "{2152, 690}"; + }; + }; + A93E6A8E10420AC2007D418B /* Graphics.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 7588}}"; + sepNavSelRange = "{2168, 0}"; + sepNavVisRange = "{1975, 342}"; + }; + }; + A93E6A9010420AC2007D418B /* Image.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 2002}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{1597, 394}"; + }; + }; + A93E6AB210420AC3007D418B /* wrap_ImageData.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1932}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E6AB710420AC3007D418B /* Joystick.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 2968}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 926}"; + }; + }; + A93E6AB910420AC3007D418B /* wrap_Joystick.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 2366}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E6ABE10420AC3007D418B /* Keyboard.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 812}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 926}"; + }; + }; + A93E6AC510420AC3007D418B /* Mouse.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 980}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 926}"; + }; + }; + A93E6AC710420AC3007D418B /* wrap_Mouse.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1694}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E6ACB10420AC3007D418B /* api.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 1680}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{1254, 265}"; + }; + }; + A93E6AD710420AC5007D418B /* libtcc.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {444, 31906}}"; + sepNavSelRange = "{39418, 40}"; + sepNavVisRange = "{39238, 339}"; + sepNavWindowFrame = "{{15, 4}, {1265, 769}}"; + }; + }; + A93E6AD810420AC5007D418B /* libtcc.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1526}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 299}"; + }; + }; + A93E6AD910420AC5007D418B /* stab.def */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 3332}}"; + sepNavSelRange = "{8422, 0}"; + sepNavVisRange = "{8041, 701}"; + }; + }; + A93E6ADB10420AC5007D418B /* tcc.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {498, 7854}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{16939, 512}"; + sepNavWindowFrame = "{{15, 4}, {1265, 769}}"; + }; + }; + A93E6ADC10420AC5007D418B /* tcc.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 10990}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{2051, 632}"; + sepNavWindowFrame = "{{15, 4}, {1265, 769}}"; + }; + }; + A93E6ADF10420AC6007D418B /* tccelf.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 38388}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 822}"; + }; + }; + A93E6AE210420AC7007D418B /* tccpp.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 40502}}"; + sepNavSelRange = "{5078, 31}"; + sepNavVisRange = "{4906, 460}"; + }; + }; + A93E6AE510420AC7007D418B /* Native.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 2282}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{598, 493}"; + }; + }; + A93E6AE610420AC7007D418B /* Native.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1162}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{844, 283}"; + }; + }; + A93E6AE710420AC7007D418B /* wrap_Native.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1792}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E6AF010420AC7007D418B /* Contact.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {468, 1526}}"; + sepNavSelRange = "{1359, 0}"; + sepNavVisRange = "{1199, 238}"; + }; + }; + A93E6B0810420AC8007D418B /* Shape.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 2660}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E6B1710420AC8007D418B /* b2CircleShape.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1568}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 947}"; + }; + }; + A93E6B5810420ACA007D418B /* wrap_GearJoint.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 854}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; + }; + }; + A93E6B7010420ACB007D418B /* Signal.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 896}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 908}"; + }; + }; + A93E6B7110420ACB007D418B /* Signal.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 812}}"; + sepNavSelRange = "{1377, 23}"; + sepNavVisRange = "{4, 905}"; + }; + }; + A93E6B7210420ACB007D418B /* wrap_Signal.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 1106}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 908}"; + }; + }; + A93E6B7910420ACB007D418B /* FLACDecoder.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 2296}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 908}"; + }; + }; + A93E6B7F10420ACB007D418B /* Sound.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {618, 1050}}"; + sepNavSelRange = "{1940, 0}"; + sepNavVisRange = "{0, 926}"; + }; + }; + A93E6B9710420ACC007D418B /* boot.lua */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {481, 9702}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 391}"; + }; + }; + A93E6B9810420ACC007D418B /* boot.lua.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 9926}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1228}"; + }; + }; + A9D8FBD21043E5320063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6A8910420AC2007D418B /* GLee.c */; + name = "GLee.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 847; + vrLoc = 0; + }; + A9D8FBE01043E5AE0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "warning: 'OV_CALLBACKS_DEFAULT' defined but not used"; + fRef = A9D8FBE11043E5AE0063561F /* vorbisfile.h */; + rLen = 1; + rLoc = 55; + rType = 1; + }; + A9D8FBE11043E5AE0063561F /* vorbisfile.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = vorbisfile.h; + path = /opt/local/include/vorbis/vorbisfile.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {519, 2464}}"; + sepNavSelRange = "{2279, 45}"; + sepNavVisRange = "{1931, 733}"; + }; + }; + A9D8FBE21043E5AE0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9D8FBE31043E5AE0063561F /* vorbisfile.h */; + name = "vorbisfile.h: 56"; + rLen = 45; + rLoc = 2279; + rType = 0; + vrLen = 629; + vrLoc = 1931; + }; + A9D8FBE31043E5AE0063561F /* vorbisfile.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = vorbisfile.h; + path = /opt/local/include/vorbis/vorbisfile.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {492, 2618}}"; + sepNavSelRange = "{2279, 45}"; + sepNavVisRange = "{1931, 629}"; + }; + }; + A9D8FBE71043E5C10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6A8910420AC2007D418B /* GLee.c */; + name = "GLee.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 847; + vrLoc = 0; + }; + A9D8FBE81043E5C10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6B7910420ACB007D418B /* FLACDecoder.cpp */; + name = "FLACDecoder.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 908; + vrLoc = 0; + }; + A9D8FBE91043E5C10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6B7F10420ACB007D418B /* Sound.cpp */; + name = "Sound.cpp: 63"; + rLen = 0; + rLoc = 1940; + rType = 0; + vrLen = 926; + vrLoc = 0; + }; + A9D8FBEA1043E5C10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6A8910420AC2007D418B /* GLee.c */; + name = "GLee.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 847; + vrLoc = 0; + }; + A9D8FBEB1043E5C10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6B7910420ACB007D418B /* FLACDecoder.cpp */; + name = "FLACDecoder.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 908; + vrLoc = 0; + }; + A9D8FBEC1043E5C10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6B7F10420ACB007D418B /* Sound.cpp */; + name = "Sound.cpp: 63"; + rLen = 0; + rLoc = 1940; + rType = 0; + vrLen = 926; + vrLoc = 0; + }; + A9D8FBED1043E5C10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9D8FBE11043E5AE0063561F /* vorbisfile.h */; + name = "vorbisfile.h: 56"; + rLen = 45; + rLoc = 2279; + rType = 0; + vrLen = 733; + vrLoc = 1931; + }; + A9D8FBFC1043E7C20063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9D8FBE11043E5AE0063561F /* vorbisfile.h */; + name = "vorbisfile.h: 56"; + rLen = 45; + rLoc = 2279; + rType = 0; + vrLen = 733; + vrLoc = 1931; + }; + A9D8FC011043E8770063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9D8FBE11043E5AE0063561F /* vorbisfile.h */; + name = "vorbisfile.h: 56"; + rLen = 45; + rLoc = 2279; + rType = 0; + vrLen = 733; + vrLoc = 1931; + }; + A9D8FC031043E94F0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9D8FBE11043E5AE0063561F /* vorbisfile.h */; + name = "vorbisfile.h: 56"; + rLen = 45; + rLoc = 2279; + rType = 0; + vrLen = 733; + vrLoc = 1931; + }; + A9D8FC041043E94F0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 604; + vrLoc = 0; + }; + A9D8FC051043E94F0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9D8FBE11043E5AE0063561F /* vorbisfile.h */; + name = "vorbisfile.h: 56"; + rLen = 45; + rLoc = 2279; + rType = 0; + vrLen = 733; + vrLoc = 1931; + }; + A9D8FC061043E94F0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 549; + vrLoc = 347; + }; + A9D8FC0D1043EBD30063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC131043EC200063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC1E1043EFA00063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC2010441C030063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC2110441C0F0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC2410441DF10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC2510441E590063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC2610441E700063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC2710441E890063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC2910441E9B0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC2F104423D80063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9D8FBE31043E5AE0063561F /* vorbisfile.h */; + name = "vorbisfile.h: 56"; + rLen = 45; + rLoc = 2279; + rType = 0; + vrLen = 629; + vrLoc = 1931; + }; + A9D8FC30104423D80063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: 'struct mcontext' has no member named '__ss'"; + fRef = A93E6AD710420AC5007D418B /* libtcc.c */; + rLen = 1; + rLoc = 1480; + rType = 1; + }; + A9D8FC31104423D80063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9D8FBE31043E5AE0063561F /* vorbisfile.h */; + name = "vorbisfile.h: 56"; + rLen = 45; + rLoc = 2279; + rType = 0; + vrLen = 629; + vrLoc = 1931; + }; + A9D8FC32104423D80063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6AD710420AC5007D418B /* libtcc.c */; + name = "libtcc.c: 1481"; + rLen = 40; + rLoc = 39418; + rType = 0; + vrLen = 300; + vrLoc = 39238; + }; + A9D8FC36104423F90063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC3D104427770063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC3F104427A10063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC40104427AE0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9D8FC421044283D0063561F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9255DEA1043188D00BA1496 /* SDLMain.m */; + name = "SDLMain.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 596; + vrLoc = 561; + }; + A9DE83571043CE2800567BA4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6B7110420ACB007D418B /* Signal.h */; + name = "Signal.h: 52"; + rLen = 23; + rLoc = 1377; + rType = 0; + vrLen = 905; + vrLoc = 4; + }; + A9DE83591043CE2800567BA4 /* Makefile */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.make; + name = Makefile; + path = "/Users/bill/Downloads/flac-1.2.1/src/libFLAC++/Makefile"; + sourceTree = ""; + }; + A9DE835A1043CE2800567BA4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6B7110420ACB007D418B /* Signal.h */; + name = "Signal.h: 52"; + rLen = 23; + rLoc = 1377; + rType = 0; + vrLen = 905; + vrLoc = 4; + }; + A9DE83781043CFEF00567BA4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9DE83591043CE2800567BA4 /* Makefile */; + name = "Makefile: 608"; + rLen = 0; + rLoc = 18653; + rType = 0; + vrLen = 753; + vrLoc = 233; + }; + A9DE83791043CFEF00567BA4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6ADF10420AC6007D418B /* tccelf.c */; + name = "tccelf.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 822; + vrLoc = 0; + }; + A9DE837A1043CFEF00567BA4 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = A93E6A8910420AC2007D418B /* GLee.c */; + }; + A9DE837B1043CFEF00567BA4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A9DE83591043CE2800567BA4 /* Makefile */; + name = "Makefile: 608"; + rLen = 0; + rLoc = 18653; + rType = 0; + vrLen = 753; + vrLoc = 233; + }; + A9DE837C1043CFEF00567BA4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6ADF10420AC6007D418B /* tccelf.c */; + name = "tccelf.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 822; + vrLoc = 0; + }; + A9DE85AA1043E49900567BA4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = A93E6A8910420AC2007D418B /* GLee.c */; + name = "GLee.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 847; + vrLoc = 0; + }; +} diff --git a/jni/love/platform/xcode/love.xcodeproj/project.pbxproj b/jni/love/platform/xcode/love.xcodeproj/project.pbxproj new file mode 100644 index 00000000..3c46db73 --- /dev/null +++ b/jni/love/platform/xcode/love.xcodeproj/project.pbxproj @@ -0,0 +1,850 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + A9255DD11043183600BA1496 /* FreeType.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E4810420B4A007D418B /* FreeType.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + A9255DD31043183600BA1496 /* Lua.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E5310420B57007D418B /* Lua.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + A9255E031043195A00BA1496 /* Vorbis.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9255E021043195A00BA1496 /* Vorbis.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + A9255F58104324E100BA1496 /* Ogg.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9255F51104324D700BA1496 /* Ogg.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + A93E6E5510420B57007D418B /* Lua.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E5310420B57007D418B /* Lua.framework */; }; + A93E6EED10420BA8007D418B /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E6A3410420AC0007D418B /* love.cpp */; }; + A9D307F2106635D3004FEDF8 /* physfs.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9D307E9106635C3004FEDF8 /* physfs.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + A9F169AC109E825000FC83D1 /* mpg123.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9F169A6109E824900FC83D1 /* mpg123.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + A9F169AD109E825000FC83D1 /* libmodplug.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9F16926109E7BAD00FC83D1 /* libmodplug.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + FA0797991BF480A200034B7C /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA0797981BF480A200034B7C /* GameController.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + FA08F69616C766E000F007B5 /* love.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA08F69116C765A200F007B5 /* love.framework */; }; + FA08F69716C766E700F007B5 /* love.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FA08F69116C765A200F007B5 /* love.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + FA0B7F301A95AC7D000E1D17 /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E6A3410420AC0007D418B /* love.cpp */; }; + FA27B3CB1B498696008A9DCE /* Theora.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA27B3CA1B498696008A9DCE /* Theora.framework */; }; + FA5933751C6D625B000EC779 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FA5D249A1A96CF4300C6FC8F /* Images.xcassets */; }; + FA5D24821A96CA1800C6FC8F /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24811A96CA1800C6FC8F /* OpenAL.framework */; }; + FA5D24841A96CA2700C6FC8F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24831A96CA2700C6FC8F /* OpenGLES.framework */; }; + FA5D24881A96CA8A00C6FC8F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24871A96CA8A00C6FC8F /* UIKit.framework */; }; + FA5D248A1A96CA9600C6FC8F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24891A96CA9600C6FC8F /* AudioToolbox.framework */; }; + FA5D248C1A96CA9E00C6FC8F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D248B1A96CA9E00C6FC8F /* QuartzCore.framework */; }; + FA5D248E1A96CAA700C6FC8F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D248D1A96CAA700C6FC8F /* CoreGraphics.framework */; }; + FA5D24941A96CABA00C6FC8F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24931A96CABA00C6FC8F /* libz.dylib */; }; + FA5D24961A96CAC200C6FC8F /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24951A96CAC200C6FC8F /* CoreMotion.framework */; }; + FA5D249C1A96CF4300C6FC8F /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FA5D249A1A96CF4300C6FC8F /* Images.xcassets */; }; + FA5D24C21A96D78000C6FC8F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24C11A96D78000C6FC8F /* Foundation.framework */; }; + FA5D24D11A96E73300C6FC8F /* liblove.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA0B7EEF1A95924A000E1D17 /* liblove.a */; }; + FA7C636A1A9C49570000FD29 /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA7C63691A9C49570000FD29 /* Launch Screen.xib */; }; + FA9B4A0A16E1579F00074F42 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0916E1579F00074F42 /* SDL2.framework */; }; + FA9B4A0B16E157B500074F42 /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0916E1579F00074F42 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + FAAFF04716CB120000CCDE45 /* OpenAL-Soft.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + FAC1A449196F5DC600125284 /* license.txt in Resources */ = {isa = PBXBuildFile; fileRef = FAC1A448196F5DC600125284 /* license.txt */; }; + FAD4B1731C1F50A3004CF150 /* Theora.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FA27B3CA1B498696008A9DCE /* Theora.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + FA0B78D71A958301000E1D17 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = FA577A9316C7217800860150 /* liblove.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = FA577AAF16C7507900860150; + remoteInfo = Framework; + }; + FA0B7EEE1A95924A000E1D17 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = FA577A9316C7217800860150 /* liblove.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = FA0B78DD1A958B90000E1D17; + remoteInfo = "liblove-ios"; + }; + FA5D24BA1A96D6FC00C6FC8F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = FA577A9316C7217800860150 /* liblove.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = FA0B78DC1A958B90000E1D17; + remoteInfo = "liblove-ios"; + }; + FAA287711B0ABF1400B82827 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = FA577A9316C7217800860150 /* liblove.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = FA577AAE16C7507900860150; + remoteInfo = "liblove-macosx"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + A9255DDE1043185300BA1496 /* Copy Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + FA08F69716C766E700F007B5 /* love.framework in Copy Frameworks */, + FA9B4A0B16E157B500074F42 /* SDL2.framework in Copy Frameworks */, + FAD4B1731C1F50A3004CF150 /* Theora.framework in Copy Frameworks */, + FAAFF04716CB120000CCDE45 /* OpenAL-Soft.framework in Copy Frameworks */, + A9F169AC109E825000FC83D1 /* mpg123.framework in Copy Frameworks */, + A9F169AD109E825000FC83D1 /* libmodplug.framework in Copy Frameworks */, + A9D307F2106635D3004FEDF8 /* physfs.framework in Copy Frameworks */, + A9255F58104324E100BA1496 /* Ogg.framework in Copy Frameworks */, + A9255E031043195A00BA1496 /* Vorbis.framework in Copy Frameworks */, + A9255DD11043183600BA1496 /* FreeType.framework in Copy Frameworks */, + A9255DD31043183600BA1496 /* Lua.framework in Copy Frameworks */, + ); + name = "Copy Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 8D1107320486CEB800E47090 /* love.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = love.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A9255E021043195A00BA1496 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = /Library/Frameworks/Vorbis.framework; sourceTree = ""; }; + A9255F51104324D700BA1496 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = ""; }; + A93E6A3410420AC0007D418B /* love.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = love.cpp; path = ../../src/love.cpp; sourceTree = ""; }; + A93E6E4710420B4A007D418B /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + A93E6E4810420B4A007D418B /* FreeType.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FreeType.framework; path = /Library/Frameworks/FreeType.framework; sourceTree = ""; }; + A93E6E5310420B57007D418B /* Lua.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Lua.framework; path = /Library/Frameworks/Lua.framework; sourceTree = ""; }; + A97E3842132A9EDE00198A2F /* love-macosx.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "love-macosx.plist"; path = "macosx/love-macosx.plist"; sourceTree = ""; }; + A9D307E9106635C3004FEDF8 /* physfs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = physfs.framework; path = /Library/Frameworks/physfs.framework; sourceTree = ""; }; + A9F16926109E7BAD00FC83D1 /* libmodplug.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libmodplug.framework; path = /Library/Frameworks/libmodplug.framework; sourceTree = ""; }; + A9F169A6109E824900FC83D1 /* mpg123.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = mpg123.framework; path = /Library/Frameworks/mpg123.framework; sourceTree = ""; }; + FA0797981BF480A200034B7C /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.1.sdk/System/Library/Frameworks/GameController.framework; sourceTree = DEVELOPER_DIR; }; + FA08F69116C765A200F007B5 /* love.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = love.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FA0B7F061A95AAF3000E1D17 /* love.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = love.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FA27B3CA1B498696008A9DCE /* Theora.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Theora.framework; path = /Library/Frameworks/Theora.framework; sourceTree = ""; }; + FA577A9316C7217800860150 /* liblove.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = liblove.xcodeproj; sourceTree = ""; }; + FA5D24811A96CA1800C6FC8F /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/OpenAL.framework; sourceTree = DEVELOPER_DIR; }; + FA5D24831A96CA2700C6FC8F /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; + FA5D24871A96CA8A00C6FC8F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + FA5D24891A96CA9600C6FC8F /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + FA5D248B1A96CA9E00C6FC8F /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + FA5D248D1A96CAA700C6FC8F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + FA5D24931A96CABA00C6FC8F /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; }; + FA5D24951A96CAC200C6FC8F /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/CoreMotion.framework; sourceTree = DEVELOPER_DIR; }; + FA5D24971A96CE1E00C6FC8F /* love-ios.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "love-ios.plist"; path = "ios/love-ios.plist"; sourceTree = ""; }; + FA5D249A1A96CF4300C6FC8F /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + FA5D24C11A96D78000C6FC8F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + FA7C63691A9C49570000FD29 /* Launch Screen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = "Launch Screen.xib"; path = "ios/Launch Screen.xib"; sourceTree = ""; }; + FA9B4A0916E1579F00074F42 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = ""; }; + FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "OpenAL-Soft.framework"; path = "/Library/Frameworks/OpenAL-Soft.framework"; sourceTree = ""; }; + FAC1A448196F5DC600125284 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = license.txt; path = ../../license.txt; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D11072E0486CEB800E47090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FA08F69616C766E000F007B5 /* love.framework in Frameworks */, + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + A93E6E5510420B57007D418B /* Lua.framework in Frameworks */, + FA27B3CB1B498696008A9DCE /* Theora.framework in Frameworks */, + FA9B4A0A16E1579F00074F42 /* SDL2.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA0B7F031A95AAF3000E1D17 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FA5D24D11A96E73300C6FC8F /* liblove.a in Frameworks */, + FA5D24C21A96D78000C6FC8F /* Foundation.framework in Frameworks */, + FA5D24961A96CAC200C6FC8F /* CoreMotion.framework in Frameworks */, + FA0797991BF480A200034B7C /* GameController.framework in Frameworks */, + FA5D24941A96CABA00C6FC8F /* libz.dylib in Frameworks */, + FA5D248E1A96CAA700C6FC8F /* CoreGraphics.framework in Frameworks */, + FA5D248C1A96CA9E00C6FC8F /* QuartzCore.framework in Frameworks */, + FA5D248A1A96CA9600C6FC8F /* AudioToolbox.framework in Frameworks */, + FA5D24881A96CA8A00C6FC8F /* UIKit.framework in Frameworks */, + FA5D24841A96CA2700C6FC8F /* OpenGLES.framework in Frameworks */, + FA5D24821A96CA1800C6FC8F /* OpenAL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1058C7A0FEA54F0111CA2CBB /* Frameworks */ = { + isa = PBXGroup; + children = ( + FA5D24801A96C97900C6FC8F /* ios */, + FA0B7EEC1A959249000E1D17 /* macosx */, + ); + name = Frameworks; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D1107320486CEB800E47090 /* love.app */, + FA0B7F061A95AAF3000E1D17 /* love.app */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* love */ = { + isa = PBXGroup; + children = ( + FA5D249A1A96CF4300C6FC8F /* Images.xcassets */, + FA577A9D16C7262E00860150 /* Source */, + FA5D24A01A96CF7200C6FC8F /* Supporting Files */, + 1058C7A0FEA54F0111CA2CBB /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + 29B97317FDCFA39411CA2CEA /* Resources */, + FA577A9316C7217800860150 /* liblove.xcodeproj */, + ); + name = love; + sourceTree = ""; + usesTabs = 1; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + FAC1A448196F5DC600125284 /* license.txt */, + ); + name = Resources; + sourceTree = ""; + }; + FA0B78D41A958301000E1D17 /* Products */ = { + isa = PBXGroup; + children = ( + FA0B78D81A958301000E1D17 /* love.framework */, + FA0B7EEF1A95924A000E1D17 /* liblove.a */, + ); + name = Products; + sourceTree = ""; + }; + FA0B7EEC1A959249000E1D17 /* macosx */ = { + isa = PBXGroup; + children = ( + FA27B3CA1B498696008A9DCE /* Theora.framework */, + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + A93E6E4810420B4A007D418B /* FreeType.framework */, + A9F16926109E7BAD00FC83D1 /* libmodplug.framework */, + FA08F69116C765A200F007B5 /* love.framework */, + A93E6E5310420B57007D418B /* Lua.framework */, + A9F169A6109E824900FC83D1 /* mpg123.framework */, + A9255F51104324D700BA1496 /* Ogg.framework */, + FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */, + A93E6E4710420B4A007D418B /* OpenGL.framework */, + A9D307E9106635C3004FEDF8 /* physfs.framework */, + FA9B4A0916E1579F00074F42 /* SDL2.framework */, + A9255E021043195A00BA1496 /* Vorbis.framework */, + ); + name = macosx; + sourceTree = ""; + }; + FA577A9D16C7262E00860150 /* Source */ = { + isa = PBXGroup; + children = ( + A93E6A3410420AC0007D418B /* love.cpp */, + ); + name = Source; + sourceTree = ""; + }; + FA5D24801A96C97900C6FC8F /* ios */ = { + isa = PBXGroup; + children = ( + FA0797981BF480A200034B7C /* GameController.framework */, + FA5D24C11A96D78000C6FC8F /* Foundation.framework */, + FA5D24891A96CA9600C6FC8F /* AudioToolbox.framework */, + FA5D248D1A96CAA700C6FC8F /* CoreGraphics.framework */, + FA5D24951A96CAC200C6FC8F /* CoreMotion.framework */, + FA5D24931A96CABA00C6FC8F /* libz.dylib */, + FA5D24811A96CA1800C6FC8F /* OpenAL.framework */, + FA5D24831A96CA2700C6FC8F /* OpenGLES.framework */, + FA5D248B1A96CA9E00C6FC8F /* QuartzCore.framework */, + FA5D24871A96CA8A00C6FC8F /* UIKit.framework */, + ); + name = ios; + sourceTree = ""; + }; + FA5D24A01A96CF7200C6FC8F /* Supporting Files */ = { + isa = PBXGroup; + children = ( + FA7C63691A9C49570000FD29 /* Launch Screen.xib */, + FA5D24971A96CE1E00C6FC8F /* love-ios.plist */, + A97E3842132A9EDE00198A2F /* love-macosx.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D1107260486CEB800E47090 /* love-macosx */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "love-macosx" */; + buildPhases = ( + 8D1107290486CEB800E47090 /* Resources */, + 8D11072C0486CEB800E47090 /* Sources */, + A9255DDE1043185300BA1496 /* Copy Frameworks */, + 8D11072E0486CEB800E47090 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + FAA287721B0ABF1400B82827 /* PBXTargetDependency */, + ); + name = "love-macosx"; + productInstallPath = "$(HOME)/Applications"; + productName = love; + productReference = 8D1107320486CEB800E47090 /* love.app */; + productType = "com.apple.product-type.application"; + }; + FA0B7F051A95AAF3000E1D17 /* love-ios */ = { + isa = PBXNativeTarget; + buildConfigurationList = FA0B7F2E1A95AAF4000E1D17 /* Build configuration list for PBXNativeTarget "love-ios" */; + buildPhases = ( + FA0B7F021A95AAF3000E1D17 /* Sources */, + FA0B7F031A95AAF3000E1D17 /* Frameworks */, + FA0B7F041A95AAF3000E1D17 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + FA5D24BB1A96D6FC00C6FC8F /* PBXTargetDependency */, + ); + name = "love-ios"; + productName = "love-ios"; + productReference = FA0B7F061A95AAF3000E1D17 /* love.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0700; + TargetAttributes = { + FA0B7F051A95AAF3000E1D17 = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "love" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + Base, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* love */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = FA0B78D41A958301000E1D17 /* Products */; + ProjectRef = FA577A9316C7217800860150 /* liblove.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 8D1107260486CEB800E47090 /* love-macosx */, + FA0B7F051A95AAF3000E1D17 /* love-ios */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + FA0B78D81A958301000E1D17 /* love.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = love.framework; + remoteRef = FA0B78D71A958301000E1D17 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + FA0B7EEF1A95924A000E1D17 /* liblove.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = liblove.a; + remoteRef = FA0B7EEE1A95924A000E1D17 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FA5933751C6D625B000EC779 /* Images.xcassets in Resources */, + FAC1A449196F5DC600125284 /* license.txt in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA0B7F041A95AAF3000E1D17 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FA5D249C1A96CF4300C6FC8F /* Images.xcassets in Resources */, + FA7C636A1A9C49570000FD29 /* Launch Screen.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D11072C0486CEB800E47090 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A93E6EED10420BA8007D418B /* love.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA0B7F021A95AAF3000E1D17 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FA0B7F301A95AC7D000E1D17 /* love.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + FA5D24BB1A96D6FC00C6FC8F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "liblove-ios"; + targetProxy = FA5D24BA1A96D6FC00C6FC8F /* PBXContainerItemProxy */; + }; + FAA287721B0ABF1400B82827 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "liblove-macosx"; + targetProxy = FAA287711B0ABF1400B82827 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "OS X AppIcon"; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks, + "\"$(SRCROOT)/build/Release\"", + "\"$(SRCROOT)/build/Debug\"", + "$(LOCAL_LIBRARY_DIR)/Frameworks", + ); + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks/Lua.framework/Headers, + /Library/Frameworks/SDL2.framework/Headers, + ); + INFOPLIST_FILE = "macosx/love-macosx.plist"; + INSTALL_PATH = /Applications; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = org.love2d.love; + PRODUCT_NAME = love; + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "OS X AppIcon"; + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks, + "\"$(SRCROOT)/build/Release\"", + "\"$(SRCROOT)/build/Debug\"", + "$(LOCAL_LIBRARY_DIR)/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks/Lua.framework/Headers, + /Library/Frameworks/SDL2.framework/Headers, + ); + INFOPLIST_FILE = "macosx/love-macosx.plist"; + INSTALL_PATH = /Applications; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = org.love2d.love; + PRODUCT_NAME = love; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PEDANTIC = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../src\"", + "\"$(SRCROOT)/../../src/libraries\"", + "\"$(SRCROOT)/../../src/modules\"", + ); + INFOPLIST_FILE = "love-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ""; + "OTHER_LDFLAGS[arch=x86_64]" = ( + "-pagezero_size", + 10000, + "-image_base", + 100000000, + ); + PRODUCT_NAME = love; + SDKROOT = macosx; + WARNING_CFLAGS = ( + "-Wall", + "-W", + ); + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + DEPLOYMENT_POSTPROCESSING = NO; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_INPUT_FILETYPE = automatic; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PEDANTIC = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../src\"", + "\"$(SRCROOT)/../../src/libraries\"", + "\"$(SRCROOT)/../../src/modules\"", + ); + INFOPLIST_FILE = "love-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; + LLVM_LTO = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = NO; + OTHER_LDFLAGS = ""; + "OTHER_LDFLAGS[arch=x86_64]" = ( + "-pagezero_size", + 10000, + "-image_base", + 100000000, + ); + PRODUCT_NAME = love; + SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES; + SDKROOT = macosx; + WARNING_CFLAGS = ( + "-Wall", + "-W", + ); + }; + name = Release; + }; + FA0B7F261A95AAF4000E1D17 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iOS AppIcon"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "iOS LaunchImage"; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_BITCODE = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + ios/include, + ios/include/luajit, + ios/include/SDL2, + ); + INFOPLIST_FILE = "$(SRCROOT)/ios/love-ios.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.love2d.love; + PRODUCT_NAME = love; + PROVISIONING_PROFILE = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + FA0B7F271A95AAF4000E1D17 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iOS AppIcon"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "iOS LaunchImage"; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + ios/include, + ios/include/luajit, + ios/include/SDL2, + ); + INFOPLIST_FILE = "$(SRCROOT)/ios/love-ios.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = org.love2d.love; + PRODUCT_NAME = love; + PROVISIONING_PROFILE = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + FA0B7F281A95AAF4000E1D17 /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iOS AppIcon"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "iOS LaunchImage"; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + ios/include, + ios/include/luajit, + ios/include/SDL2, + ); + INFOPLIST_FILE = "$(SRCROOT)/ios/love-ios.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = org.love2d.love; + PRODUCT_NAME = love; + PROVISIONING_PROFILE = ""; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Distribution; + }; + FA5326C618971A0900F7BBF4 /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + DEPLOYMENT_POSTPROCESSING = NO; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_INPUT_FILETYPE = automatic; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PEDANTIC = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../src\"", + "\"$(SRCROOT)/../../src/libraries\"", + "\"$(SRCROOT)/../../src/modules\"", + ); + INFOPLIST_FILE = "love-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; + LLVM_LTO = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = NO; + OTHER_LDFLAGS = ""; + "OTHER_LDFLAGS[arch=x86_64]" = ( + "-pagezero_size", + 10000, + "-image_base", + 100000000, + ); + PRODUCT_NAME = love; + SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES; + SDKROOT = macosx; + WARNING_CFLAGS = ( + "-Wall", + "-W", + ); + }; + name = Distribution; + }; + FA5326C718971A0900F7BBF4 /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "OS X AppIcon"; + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks, + "\"$(SRCROOT)/build/Release\"", + "\"$(SRCROOT)/build/Debug\"", + "$(LOCAL_LIBRARY_DIR)/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Library/Frameworks/Lua.framework/Headers, + /Library/Frameworks/SDL2.framework/Headers, + ); + INFOPLIST_FILE = "macosx/love-macosx.plist"; + INSTALL_PATH = /Applications; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = org.love2d.love; + PRODUCT_NAME = love; + }; + name = Distribution; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "love-macosx" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + FA5326C718971A0900F7BBF4 /* Distribution */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "love" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + FA5326C618971A0900F7BBF4 /* Distribution */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FA0B7F2E1A95AAF4000E1D17 /* Build configuration list for PBXNativeTarget "love-ios" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FA0B7F261A95AAF4000E1D17 /* Debug */, + FA0B7F271A95AAF4000E1D17 /* Release */, + FA0B7F281A95AAF4000E1D17 /* Distribution */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/jni/love/platform/xcode/love.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/jni/love/platform/xcode/love.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..0c5703c4 --- /dev/null +++ b/jni/love/platform/xcode/love.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/jni/love/platform/xcode/macosx/liblove-macosx.plist b/jni/love/platform/xcode/macosx/liblove-macosx.plist new file mode 100644 index 00000000..b5aedb33 --- /dev/null +++ b/jni/love/platform/xcode/macosx/liblove-macosx.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + LÖVE + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.10.1 + CFBundleSignature + LoVe + NSPrincipalClass + + + diff --git a/jni/love/platform/xcode/macosx/love-macosx.plist b/jni/love/platform/xcode/macosx/love-macosx.plist new file mode 100644 index 00000000..8cf99c4a --- /dev/null +++ b/jni/love/platform/xcode/macosx/love-macosx.plist @@ -0,0 +1,106 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + love + + CFBundleTypeIconFile + GameIcon + CFBundleTypeName + LÖVE Project + CFBundleTypeRole + Viewer + LSHandlerRank + Owner + LSItemContentTypes + + org.love2d.love-game + + LSTypeIsPackage + 1 + + + CFBundleTypeName + Folder + CFBundleTypeOSTypes + + fold + + CFBundleTypeRole + Viewer + LSHandlerRank + None + + + CFBundleTypeIconFile + Document + CFBundleTypeName + Document + CFBundleTypeOSTypes + + **** + + CFBundleTypeRole + Editor + + + CFBundleExecutable + love + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + LÖVE + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.10.2 + CFBundleSignature + LoVe + LSApplicationCategoryType + public.app-category.games + NSHighResolutionCapable + + NSHumanReadableCopyright + © 2006-2016 LÖVE Development Team + NSPrincipalClass + NSApplication + UTExportedTypeDeclarations + + + UTTypeConformsTo + + com.pkware.zip-archive + com.apple.package + + UTTypeDescription + LÖVE Project + UTTypeIconFile + GameIcon + UTTypeIdentifier + org.love2d.love-game + UTTypeReferenceURL + http://love2d.org/wiki/Game_Distribution + UTTypeTagSpecification + + com.apple.ostype + LOVE + public.filename-extension + + love + + public.mime-type + application/x-love-game + + + + + diff --git a/jni/love/src/common/Matrix.cpp b/jni/love/src/common/Matrix.cpp index 14cacba6..67e71105 100644 --- a/jni/love/src/common/Matrix.cpp +++ b/jni/love/src/common/Matrix.cpp @@ -36,6 +36,11 @@ Matrix4::Matrix4() { setIdentity(); } + +Matrix4::Matrix4(float t00, float t10, float t01, float t11, float x, float y) +{ + setRawTransformation(t00, t10, t01, t11, x, y); +} Matrix4::Matrix4(float x, float y, float angle, float sx, float sy, float ox, float oy, float kx, float ky) { @@ -129,6 +134,18 @@ void Matrix4::setShear(float kx, float ky) e[1] = ky; e[4] = kx; } + +void Matrix4::setRawTransformation(float t00, float t10, float t01, float t11, float x, float y) +{ + memset(e, 0, sizeof(float)*16); // zero out matrix + e[10] = e[15] = 1.0f; + e[0] = t00; + e[1] = t10; + e[4] = t01; + e[5] = t11; + e[12] = x; + e[13] = y; +} void Matrix4::setTransformation(float x, float y, float angle, float sx, float sy, float ox, float oy, float kx, float ky) { diff --git a/jni/love/src/common/Matrix.h b/jni/love/src/common/Matrix.h index 406d4932..c1b62146 100644 --- a/jni/love/src/common/Matrix.h +++ b/jni/love/src/common/Matrix.h @@ -40,6 +40,11 @@ public: * Creates a new identity matrix. **/ Matrix4(); + + /** + * Creates a new matrix with the transform values set. + **/ + Matrix4(float t00, float t10, float t01, float t11, float x, float y); /** * Creates a new matrix set to a transformation. @@ -101,6 +106,21 @@ public: * @param ky Shear along y-axis. **/ void setShear(float kx, float ky); + + /** + * Sets a transformation's values directly. Useful if you want to modify them inplace, + * or if you want to create a transformation that's not buildable with setTransformation() + * i.e. the inverse of setTransformation() is not easily built with another call + * to setTransformation() with tweaked values. + * + * @param t00 The sx*cos(angle) component of the transformation. + * @param t10 The sx*sin(angle) component of the transformation. + * @param t01 The sy*(-sin(angle)) component of the transformation. + * @param t11 The sy*cos(angle) component of the transformation. + * @param x The x translation component of the transformation. + * @param y The y translation component of the transformation. + **/ + void setRawTransformation(float t00, float t10, float t01, float t11, float x, float y); /** * Creates a transformation with a certain position, orientation, scale diff --git a/jni/love/src/common/Memoizer.cpp b/jni/love/src/common/Memoizer.cpp index 88ad3a00..6dd2d4e7 100644 --- a/jni/love/src/common/Memoizer.cpp +++ b/jni/love/src/common/Memoizer.cpp @@ -19,12 +19,13 @@ **/ #include "Memoizer.h" -#include + +#include namespace love { -std::map Memoizer::objectMap; +static std::unordered_map objectMap; void Memoizer::add(void *key, void *val) { diff --git a/jni/love/src/common/Memoizer.h b/jni/love/src/common/Memoizer.h index e972ae62..db6fadb6 100644 --- a/jni/love/src/common/Memoizer.h +++ b/jni/love/src/common/Memoizer.h @@ -21,8 +21,6 @@ #ifndef LOVE_MEMOIZER_H #define LOVE_MEMOIZER_H -#include - namespace love { @@ -31,14 +29,9 @@ class Memoizer public: static void add(void *key, void *val); - static void remove(void *key); - static void *find(void *key); -private: - - static std::map objectMap; }; // Memoizer } // love diff --git a/jni/love/src/common/Object.h b/jni/love/src/common/Object.h index 78a84484..70562329 100644 --- a/jni/love/src/common/Object.h +++ b/jni/love/src/common/Object.h @@ -59,14 +59,14 @@ public: * Retains the Object, i.e. increases the * reference count by one. **/ - virtual void retain(); + void retain(); /** * Releases one reference to the Object, i.e. decrements the * reference count by one, and potentially deletes the Object * if there are no more references. **/ - virtual void release(); + void release(); private: @@ -75,32 +75,41 @@ private: }; // Object -/** - * Partial re-implementation + specialization of std::shared_ptr. We can't - * use C++11's stdlib yet... - **/ + +enum class Acquire +{ + RETAIN, + NORETAIN, +}; + template class StrongRef { public: StrongRef() - : object(nullptr) + : object(nullptr) { } - StrongRef(T *obj) - : object(obj) + StrongRef(T *obj, Acquire acquire = Acquire::RETAIN) + : object(obj) { - if (object) object->retain(); + if (object && acquire == Acquire::RETAIN) object->retain(); } StrongRef(const StrongRef &other) - : object(other.get()) + : object(other.get()) { if (object) object->retain(); } + StrongRef(StrongRef &&other) + : object(other.object) + { + other.object = nullptr; + } + ~StrongRef() { if (object) object->release(); @@ -117,7 +126,7 @@ public: return object; } - operator bool() const + explicit operator bool() const { return object != nullptr; } @@ -127,9 +136,9 @@ public: return object; } - void set(T *obj) + void set(T *obj, Acquire acquire = Acquire::RETAIN) { - if (obj) obj->retain(); + if (obj && acquire == Acquire::RETAIN) obj->retain(); if (object) object->release(); object = obj; } diff --git a/jni/love/src/common/Variant.cpp b/jni/love/src/common/Variant.cpp index 32e9ba5e..8fd893f3 100644 --- a/jni/love/src/common/Variant.cpp +++ b/jni/love/src/common/Variant.cpp @@ -26,35 +26,21 @@ namespace love static love::Type extractudatatype(lua_State *L, int idx) { - Type t = INVALID_ID; - if (!lua_isuserdata(L, idx)) - return t; - if (luaL_getmetafield(L, idx, "type") == 0) - return t; - lua_pushvalue(L, idx); - int result = lua_pcall(L, 1, 1, 0); - if (result == 0) - getTypeName(lua_tostring(L, -1), t); - if (result == 0 || result == LUA_ERRRUN) - lua_pop(L, 1); - return t; -} + Proxy *u = (Proxy *)lua_touserdata(L, idx); -static inline void delete_table(std::vector > *table) -{ - while (!table->empty()) - { - std::pair &kv = table->back(); - kv.first->release(); - kv.second->release(); - table->pop_back(); - } - delete table; + if (u == nullptr || u->type <= INVALID_ID || u->type >= TYPE_MAX_ENUM) + return INVALID_ID; + + // We could get rid of the dynamic_cast for more performance, but it would + // be less safe... + if (dynamic_cast(u->object) != nullptr) + return u->type; + + return INVALID_ID; } Variant::Variant() : type(NIL) - , data() { } @@ -71,19 +57,18 @@ Variant::Variant(double number) } Variant::Variant(const char *string, size_t len) - : type(STRING) { - char *buf = new char[len+1]; - memset(buf, 0, len+1); - memcpy(buf, string, len); - data.string.str = buf; - data.string.len = len; -} - -Variant::Variant(char c) - : type(CHARACTER) -{ - data.character = c; + if (len <= MAX_SMALL_STRING_LENGTH) + { + type = SMALLSTRING; + memcpy(data.smallstring.str, string, len); + data.smallstring.len = (uint8) len; + } + else + { + type = STRING; + data.string = new SharedString(string, len); + } } Variant::Variant(void *userdata) @@ -107,10 +92,31 @@ Variant::Variant(love::Type udatatype, void *userdata) } // Variant gets ownership of the vector. -Variant::Variant(std::vector > *table) +Variant::Variant(std::vector> *table) : type(TABLE) { - data.table = table; + data.table = new SharedTable(table); +} + +Variant::Variant(const Variant &v) + : type(v.type) + , udatatype(v.udatatype) + , data(v.data) +{ + if (type == STRING) + data.string->retain(); + else if (type == FUSERDATA) + ((love::Object *) data.userdata)->retain(); + else if (type == TABLE) + data.table->retain(); +} + +Variant::Variant(Variant &&v) + : type(std::move(v.type)) + , udatatype(std::move(v.udatatype)) + , data(std::move(v.data)) +{ + v.type = NIL; } Variant::~Variant() @@ -118,102 +124,118 @@ Variant::~Variant() switch (type) { case STRING: - delete[] data.string.str; + data.string->release(); break; case FUSERDATA: ((love::Object *) data.userdata)->release(); break; case TABLE: - delete_table(data.table); + data.table->release(); + break; default: break; } } -Variant *Variant::fromLua(lua_State *L, int n, bool allowTables) +Variant &Variant::operator = (const Variant &v) +{ + if (v.type == STRING) + v.data.string->retain(); + else if (v.type == FUSERDATA) + ((love::Object *) v.data.userdata)->retain(); + else if (v.type == TABLE) + v.data.table->retain(); + + if (type == STRING) + data.string->release(); + else if (type == FUSERDATA) + ((love::Object *) v.data.userdata)->release(); + else if (type == TABLE) + data.table->release(); + + type = v.type; + data = v.data; + udatatype = v.udatatype; + + return *this; +} + +Variant Variant::fromLua(lua_State *L, int n, bool allowTables) { - Variant *v = nullptr; size_t len; const char *str; + if (n < 0) // Fix the stack position, we might modify it later n += lua_gettop(L) + 1; switch (lua_type(L, n)) { case LUA_TBOOLEAN: - v = new Variant(luax_toboolean(L, n)); - break; + return Variant(luax_toboolean(L, n)); case LUA_TNUMBER: - v = new Variant(lua_tonumber(L, n)); - break; + return Variant(lua_tonumber(L, n)); case LUA_TSTRING: str = lua_tolstring(L, n, &len); - v = new Variant(str, len); - break; + return Variant(str, len); case LUA_TLIGHTUSERDATA: - v = new Variant(lua_touserdata(L, n)); - break; + return Variant(lua_touserdata(L, n)); case LUA_TUSERDATA: - v = new Variant(extractudatatype(L, n), lua_touserdata(L, n)); - break; + return Variant(extractudatatype(L, n), lua_touserdata(L, n)); case LUA_TNIL: - v = new Variant(); - break; + return Variant(); case LUA_TTABLE: if (allowTables) { bool success = true; - std::vector> *table = new std::vector>(); + std::vector> *table = new std::vector>(); + + size_t len = luax_objlen(L, -1); + if (len > 0) + table->reserve(len); + lua_pushnil(L); + while (lua_next(L, n)) { - Variant *key = fromLua(L, -2, false); - if (!key) - { - success = false; - lua_pop(L, 2); - break; - } - - Variant *value = fromLua(L, -1, false); - if (!value) - { - delete key; - success = false; - lua_pop(L, 2); - break; - } - - table->push_back(std::make_pair(key, value)); - + table->emplace_back(fromLua(L, -2), fromLua(L, -1)); lua_pop(L, 1); + + const auto &p = table->back(); + if (p.first.getType() == UNKNOWN || p.second.getType() == UNKNOWN) + { + success = false; + break; + } } if (success) - v = new Variant(table); + return Variant(table); else - delete_table(table); + delete table; } break; } + + Variant v; + v.type = UNKNOWN; return v; } -void Variant::toLua(lua_State *L) +void Variant::toLua(lua_State *L) const { switch (type) { case BOOLEAN: lua_pushboolean(L, data.boolean); break; - case CHARACTER: - lua_pushlstring(L, &data.character, 1); - break; case NUMBER: lua_pushnumber(L, data.number); break; case STRING: - lua_pushlstring(L, data.string.str, data.string.len); + lua_pushlstring(L, data.string->str, data.string->len); + break; + case SMALLSTRING: + lua_pushlstring(L, data.smallstring.str, data.smallstring.len); break; case LUSERDATA: lua_pushlightuserdata(L, data.userdata); @@ -228,15 +250,22 @@ void Variant::toLua(lua_State *L) // I can do (at the moment). break; case TABLE: - lua_createtable(L, 0, (int) data.table->size()); - for (size_t i = 0; i < data.table->size(); ++i) + { + std::vector> *table = data.table->table; + int tsize = (int) table->size(); + + lua_createtable(L, 0, tsize); + + for (int i = 0; i < tsize; ++i) { - std::pair &kv = data.table->at(i); - kv.first->toLua(L); - kv.second->toLua(L); + std::pair &kv = (*table)[i]; + kv.first.toLua(L); + kv.second.toLua(L); lua_settable(L, -3); } + break; + } case NIL: default: lua_pushnil(L); diff --git a/jni/love/src/common/Variant.h b/jni/love/src/common/Variant.h index ce7dad08..87e5d357 100644 --- a/jni/love/src/common/Variant.h +++ b/jni/love/src/common/Variant.h @@ -23,60 +23,100 @@ #include "common/runtime.h" #include "common/Object.h" +#include "common/int.h" #include #include -#include namespace love { -class Variant : public love::Object +class Variant { public: - Variant(); - Variant(bool boolean); - Variant(double number); - Variant(const char *string, size_t len); - Variant(char c); - Variant(void *userdata); - Variant(love::Type udatatype, void *userdata); - Variant(std::vector > *table); - virtual ~Variant(); - - static Variant *fromLua(lua_State *L, int n, bool allowTables = true); - void toLua(lua_State *L); - enum Type { UNKNOWN = 0, BOOLEAN, NUMBER, - CHARACTER, STRING, + SMALLSTRING, LUSERDATA, FUSERDATA, NIL, TABLE - } type; - union - { - bool boolean; - char character; - double number; - struct - { - const char *str; - size_t len; - } string; - void *userdata; - std::vector> *table; - } data; + }; + + Variant(); + Variant(bool boolean); + Variant(double number); + Variant(const char *string, size_t len); + Variant(void *userdata); + Variant(love::Type udatatype, void *userdata); + Variant(std::vector> *table); + Variant(const Variant &v); + Variant(Variant &&v); + ~Variant(); + + Variant &operator = (const Variant &v); + + Type getType() const { return type; } + + static Variant fromLua(lua_State *L, int n, bool allowTables = true); + void toLua(lua_State *L) const; private: + + class SharedString : public love::Object + { + public: + + SharedString(const char *string, size_t len) + : len(len) + { + str = new char[len+1]; + memcpy(str, string, len); + } + virtual ~SharedString() { delete[] str; } + + char *str; + size_t len; + }; + + class SharedTable : public love::Object + { + public: + + SharedTable(std::vector> *table) + : table(table) + { + } + + virtual ~SharedTable() { delete table; } + + std::vector> *table; + }; + + static const int MAX_SMALL_STRING_LENGTH = 15; + + Type type; love::Type udatatype; + union Data + { + bool boolean; + double number; + SharedString *string; + void *userdata; + SharedTable *table; + struct + { + char str[MAX_SMALL_STRING_LENGTH]; + uint8 len; + } smallstring; + } data; + }; // Variant } // love diff --git a/jni/love/src/common/b64.cpp b/jni/love/src/common/b64.cpp index aa2f6f5d..bc3bd6f6 100644 --- a/jni/love/src/common/b64.cpp +++ b/jni/love/src/common/b64.cpp @@ -34,9 +34,11 @@ static void b64_decode_block(char in[4], char out[3]) char *b64_decode(const char *src, int slen, int &size) { - size = (slen / 4) * 3; + // Actual output may be smaller due to padding and/or whitespace in the + // base64-encoded string. + int max_size = (slen / 4) * 3; - char *dst = new char[size]; + char *dst = new char[max_size]; char *d = dst; char in[4] = {0}, out[3], v; @@ -70,10 +72,12 @@ char *b64_decode(const char *src, int slen, int &size) { b64_decode_block(in, out); for (i = 0; i < len - 1; i++) - *(d++) = out[i]; + *(d++) = out[i]; } } + size = int(d - dst); + return dst; } diff --git a/jni/love/src/common/config.h b/jni/love/src/common/config.h index 61d08cf7..8bb43bab 100644 --- a/jni/love/src/common/config.h +++ b/jni/love/src/common/config.h @@ -24,12 +24,21 @@ // Platform stuff. #if defined(WIN32) || defined(_WIN32) # define LOVE_WINDOWS 1 + // If _USING_V110_SDK71_ is defined it means we are using the xp toolset. +# if defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_ +# include +# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +# define LOVE_WINDOWS_UWP 1 +# define LOVE_NO_MODPLUG 1 +# define LOVE_NOMPG123 1 +# endif +# endif #endif #if defined(linux) || defined(__linux) || defined(__linux__) -# define LOVE_LINUX 1 +# define LOVE_LINUX 1 #endif #if defined(__ANDROID__) -# define LOVE_ANDROID 1 +# define LOVE_ANDROID 1 #endif #if defined(__APPLE__) # include @@ -76,7 +85,9 @@ #endif #if defined(LOVE_WINDOWS) +#ifndef LOVE_WINDOWS_UWP # define LOVE_LEGENDARY_CONSOLE_IO_HACK +#endif // LOVE_WINDOWS_UWP # define NOMINMAX #endif @@ -148,7 +159,7 @@ #endif // Check we have a sane configuration -#if !defined(LOVE_WINDOWS) && !defined(LOVE_LINUX) && !defined(LOVE_IOS) && !defined(LOVE_MACOSX) +#if !defined(LOVE_WINDOWS) && !defined(LOVE_LINUX) && !defined(LOVE_IOS) && !defined(LOVE_MACOSX) && !defined(LOVE_ANDROID) # error Could not detect target platform #endif #if !defined(LOVE_LITTLE_ENDIAN) && !defined(LOVE_BIG_ENDIAN) diff --git a/jni/love/src/common/delay.cpp b/jni/love/src/common/delay.cpp index 7677d93e..9208f843 100644 --- a/jni/love/src/common/delay.cpp +++ b/jni/love/src/common/delay.cpp @@ -25,7 +25,7 @@ namespace love { -void delay(unsigned int ms) +void sleep(unsigned int ms) { SDL_Delay(ms); } diff --git a/jni/love/src/common/delay.h b/jni/love/src/common/delay.h index 619e14dc..566139ca 100644 --- a/jni/love/src/common/delay.h +++ b/jni/love/src/common/delay.h @@ -24,7 +24,7 @@ namespace love { -void delay(unsigned int ms); +void sleep(unsigned int ms); } // namespace love diff --git a/jni/love/src/common/macosx.mm b/jni/love/src/common/macosx.mm index b6e3cad5..b9055faf 100644 --- a/jni/love/src/common/macosx.mm +++ b/jni/love/src/common/macosx.mm @@ -25,7 +25,11 @@ #import #import -#include +#ifdef LOVE_MACOSX_SDL_DIRECT_INCLUDE +# include +#else +# include +#endif namespace love { diff --git a/jni/love/src/common/math.h b/jni/love/src/common/math.h index f5a794e7..0a77ee3b 100644 --- a/jni/love/src/common/math.h +++ b/jni/love/src/common/math.h @@ -68,15 +68,7 @@ struct Vertex unsigned char r, g, b, a; }; -struct Triangle -{ - Triangle(const Vertex &x, const Vertex &y, const Vertex &z) - : a(x), b(y), c(z) - {} - Vertex a, b, c; -}; - -inline int next_p2(int x) +inline int nextP2(int x) { x += (x == 0); x--; @@ -84,9 +76,9 @@ inline int next_p2(int x) return ++x; } -inline float next_p2(float x) +inline float nextP2(float x) { - return static_cast(next_p2(static_cast(x))); + return (float) nextP2((int) x); } } // love diff --git a/jni/love/src/common/runtime.h b/jni/love/src/common/runtime.h index 08020d7c..9072c99d 100644 --- a/jni/love/src/common/runtime.h +++ b/jni/love/src/common/runtime.h @@ -445,7 +445,7 @@ T *luax_checktype(lua_State *L, int idx, love::Type type) Proxy *u = (Proxy *)lua_touserdata(L, idx); - if (!typeFlags[u->type][type]) + if (u->type <= INVALID_ID || u->type >= TYPE_MAX_ENUM || !typeFlags[u->type][type]) { const char *name = "Invalid"; getTypeName(type, name); @@ -469,7 +469,7 @@ T *luax_getmodule(lua_State *L, love::Type type) Proxy *u = (Proxy *)lua_touserdata(L, -1); - if (!typeFlags[u->type][type]) + if (u->type <= INVALID_ID || u->type >= TYPE_MAX_ENUM || !typeFlags[u->type][type]) luaL_error(L, "Incorrect module %s", name); lua_pop(L, 2); diff --git a/jni/love/src/common/version.h b/jni/love/src/common/version.h index be23de43..783445e4 100644 --- a/jni/love/src/common/version.h +++ b/jni/love/src/common/version.h @@ -25,12 +25,12 @@ namespace love { // Version stuff. -#define LOVE_VERSION_STRING "0.10.1" +#define LOVE_VERSION_STRING "0.10.2" static const int VERSION_MAJOR = 0; static const int VERSION_MINOR = 10; -static const int VERSION_REV = 1; +static const int VERSION_REV = 2; static const char *VERSION = LOVE_VERSION_STRING; -static const char *VERSION_COMPATIBILITY[] = { VERSION, "0.10.0", 0 }; +static const char *VERSION_COMPATIBILITY[] = { VERSION, "0.10.1", "0.10.0", 0 }; static const char *VERSION_CODENAME = "Super Toast"; } // love diff --git a/jni/love/src/libraries/enet/libenet/ChangeLog b/jni/love/src/libraries/enet/libenet/ChangeLog index 5277b2c9..663c7b73 100644 --- a/jni/love/src/libraries/enet/libenet/ChangeLog +++ b/jni/love/src/libraries/enet/libenet/ChangeLog @@ -1,3 +1,17 @@ +* use getaddrinfo and getnameinfo where available + +ENet 1.3.13 (April 30, 2015): + +* miscellaneous bug fixes +* added premake and cmake support +* miscellaneous documentation cleanups + +ENet 1.3.12 (April 24, 2014): + +* added maximumPacketSize and maximumWaitingData fields to ENetHost to limit the amount of +data waiting to be delivered on a peer (beware that the default maximumPacketSize is +32MB and should be set higher if desired as should maximumWaitingData) + ENet 1.3.11 (December 26, 2013): * allow an ENetHost to connect to itself diff --git a/jni/love/src/libraries/enet/libenet/LICENSE b/jni/love/src/libraries/enet/libenet/LICENSE index 87961d3b..39af84a8 100644 --- a/jni/love/src/libraries/enet/libenet/LICENSE +++ b/jni/love/src/libraries/enet/libenet/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2002-2013 Lee Salzman +Copyright (c) 2002-2016 Lee Salzman Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/jni/love/src/libraries/enet/libenet/host.c b/jni/love/src/libraries/enet/libenet/host.c index fc57f741..3be6c092 100644 --- a/jni/love/src/libraries/enet/libenet/host.c +++ b/jni/love/src/libraries/enet/libenet/host.c @@ -100,6 +100,8 @@ enet_host_create (const ENetAddress * address, size_t peerCount, size_t channelL host -> connectedPeers = 0; host -> bandwidthLimitedPeers = 0; host -> duplicatePeers = ENET_PROTOCOL_MAXIMUM_PEER_ID; + host -> maximumPacketSize = ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE; + host -> maximumWaitingData = ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA; host -> compressor.context = NULL; host -> compressor.compress = NULL; diff --git a/jni/love/src/libraries/enet/libenet/include/enet/enet.h b/jni/love/src/libraries/enet/libenet/include/enet/enet.h index d5d5b8fe..9389400e 100644 --- a/jni/love/src/libraries/enet/libenet/include/enet/enet.h +++ b/jni/love/src/libraries/enet/libenet/include/enet/enet.h @@ -25,7 +25,7 @@ extern "C" #define ENET_VERSION_MAJOR 1 #define ENET_VERSION_MINOR 3 -#define ENET_VERSION_PATCH 11 +#define ENET_VERSION_PATCH 13 #define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch)) #define ENET_VERSION_GET_MAJOR(version) (((version)>>16)&0xFF) #define ENET_VERSION_GET_MINOR(version) (((version)>>8)&0xFF) @@ -138,7 +138,11 @@ typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (struct _ENetPacket *); * (not supported for reliable packets) * * ENET_PACKET_FLAG_NO_ALLOCATE - packet will not allocate data, and user must supply it instead - + * + * ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT - packet will be fragmented using unreliable + * (instead of reliable) sends if it exceeds the MTU + * + * ENET_PACKET_FLAG_SENT - whether the packet has been sent from all queues it has been entered into @sa ENetPacketFlag */ typedef struct _ENetPacket @@ -209,6 +213,8 @@ enum ENET_HOST_SEND_BUFFER_SIZE = 256 * 1024, ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL = 1000, ENET_HOST_DEFAULT_MTU = 1400, + ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE = 32 * 1024 * 1024, + ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA = 32 * 1024 * 1024, ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500, ENET_PEER_DEFAULT_PACKET_THROTTLE = 32, @@ -310,6 +316,7 @@ typedef struct _ENetPeer enet_uint16 outgoingUnsequencedGroup; enet_uint32 unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32]; enet_uint32 eventData; + size_t totalWaitingData; } ENetPeer; /** An ENet packet compressor for compressing UDP packets before socket sends or receives. @@ -384,6 +391,8 @@ typedef struct _ENetHost size_t connectedPeers; size_t bandwidthLimitedPeers; size_t duplicatePeers; /**< optional number of allowed peers from duplicate IPs, defaults to ENET_PROTOCOL_MAXIMUM_PEER_ID */ + size_t maximumPacketSize; /**< the maximum allowable packet size that may be sent or received on a peer */ + size_t maximumWaitingData; /**< the maximum aggregate amount of buffer space a peer may use waiting for packets to be delivered */ } ENetHost; /** @@ -446,7 +455,7 @@ ENET_API int enet_initialize (void); Initializes ENet globally and supplies user-overridden callbacks. Must be called prior to using any functions in ENet. Do not use enet_initialize() if you use this variant. Make sure the ENetCallbacks structure is zeroed out so that any additional callbacks added in future versions will be properly ignored. @param version the constant ENET_VERSION should be supplied so ENet knows which version of ENetCallbacks struct to use - @param inits user-overriden callbacks where any NULL callbacks will use ENet's defaults + @param inits user-overridden callbacks where any NULL callbacks will use ENet's defaults @returns 0 on success, < 0 on failure */ ENET_API int enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits); @@ -510,7 +519,7 @@ ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSock */ ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName); -/** Gives the printable form of the ip address specified in the address parameter. +/** Gives the printable form of the IP address specified in the address parameter. @param address address printed @param hostName destination for name, must not be NULL @param nameLength maximum length of hostName. @@ -565,7 +574,7 @@ extern int enet_peer_throttle (ENetPeer *, enet_uint32); extern void enet_peer_reset_queues (ENetPeer *); extern void enet_peer_setup_outgoing_command (ENetPeer *, ENetOutgoingCommand *); extern ENetOutgoingCommand * enet_peer_queue_outgoing_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32, enet_uint16); -extern ENetIncomingCommand * enet_peer_queue_incoming_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32); +extern ENetIncomingCommand * enet_peer_queue_incoming_command (ENetPeer *, const ENetProtocol *, const void *, size_t, enet_uint32, enet_uint32); extern ENetAcknowledgement * enet_peer_queue_acknowledgement (ENetPeer *, const ENetProtocol *, enet_uint16); extern void enet_peer_dispatch_incoming_unreliable_commands (ENetPeer *, ENetChannel *); extern void enet_peer_dispatch_incoming_reliable_commands (ENetPeer *, ENetChannel *); diff --git a/jni/love/src/libraries/enet/libenet/include/enet/protocol.h b/jni/love/src/libraries/enet/libenet/include/enet/protocol.h index a7c73c69..f8c73d8a 100644 --- a/jni/love/src/libraries/enet/libenet/include/enet/protocol.h +++ b/jni/love/src/libraries/enet/libenet/include/enet/protocol.h @@ -17,7 +17,6 @@ enum ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT = 1, ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT = 255, ENET_PROTOCOL_MAXIMUM_PEER_ID = 0xFFF, - ENET_PROTOCOL_MAXIMUM_PACKET_SIZE = 1024 * 1024 * 1024, ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT = 1024 * 1024 }; diff --git a/jni/love/src/libraries/enet/libenet/include/enet/win32.h b/jni/love/src/libraries/enet/libenet/include/enet/win32.h index d8968ee5..e73ca9d0 100644 --- a/jni/love/src/libraries/enet/libenet/include/enet/win32.h +++ b/jni/love/src/libraries/enet/libenet/include/enet/win32.h @@ -7,7 +7,6 @@ #ifdef _MSC_VER #ifdef ENET_BUILDING_LIB -#pragma warning (disable: 4996) // 'strncpy' was declared deprecated #pragma warning (disable: 4267) // size_t to int conversion #pragma warning (disable: 4244) // 64bit to 32bit int #pragma warning (disable: 4018) // signed/unsigned mismatch diff --git a/jni/love/src/libraries/enet/libenet/packet.c b/jni/love/src/libraries/enet/libenet/packet.c index 9a997be4..5fa78b28 100644 --- a/jni/love/src/libraries/enet/libenet/packet.c +++ b/jni/love/src/libraries/enet/libenet/packet.c @@ -11,7 +11,7 @@ */ /** Creates a packet that may be sent to a peer. - @param dataContents initial contents of the packet's data; the packet's data will remain uninitialized if dataContents is NULL. + @param data initial contents of the packet's data; the packet's data will remain uninitialized if data is NULL. @param dataLength size of the data allocated for this packet @param flags flags for this packet as described for the ENetPacket structure. @returns the packet on success, NULL on failure diff --git a/jni/love/src/libraries/enet/libenet/peer.c b/jni/love/src/libraries/enet/libenet/peer.c index 318f2c25..e2d0872b 100644 --- a/jni/love/src/libraries/enet/libenet/peer.c +++ b/jni/love/src/libraries/enet/libenet/peer.c @@ -105,7 +105,7 @@ enet_peer_send (ENetPeer * peer, enet_uint8 channelID, ENetPacket * packet) if (peer -> state != ENET_PEER_STATE_CONNECTED || channelID >= peer -> channelCount || - packet -> dataLength > ENET_PROTOCOL_MAXIMUM_PACKET_SIZE) + packet -> dataLength > peer -> host -> maximumPacketSize) return -1; fragmentLength = peer -> mtu - sizeof (ENetProtocolHeader) - sizeof (ENetProtocolSendFragment); @@ -241,6 +241,8 @@ enet_peer_receive (ENetPeer * peer, enet_uint8 * channelID) enet_free (incomingCommand); + peer -> totalWaitingData -= packet -> dataLength; + return packet; } @@ -415,6 +417,7 @@ enet_peer_reset (ENetPeer * peer) peer -> incomingUnsequencedGroup = 0; peer -> outgoingUnsequencedGroup = 0; peer -> eventData = 0; + peer -> totalWaitingData = 0; memset (peer -> unsequencedWindow, 0, sizeof (peer -> unsequencedWindow)); @@ -424,7 +427,7 @@ enet_peer_reset (ENetPeer * peer) /** Sends a ping request to a peer. @param peer destination for the ping request @remarks ping requests factor into the mean round trip time as designated by the - roundTripTime field in the ENetPeer structure. Enet automatically pings all connected + roundTripTime field in the ENetPeer structure. ENet automatically pings all connected peers at regular intervals, however, this function may be called to ensure more frequent ping requests. */ @@ -486,7 +489,7 @@ enet_peer_timeout (ENetPeer * peer, enet_uint32 timeoutLimit, enet_uint32 timeou @param peer peer to disconnect @param data data describing the disconnection @remarks No ENET_EVENT_DISCONNECT event will be generated. The foreign peer is not - guarenteed to receive the disconnect notification, and is reset immediately upon + guaranteed to receive the disconnect notification, and is reset immediately upon return from this function. */ void @@ -818,7 +821,7 @@ enet_peer_dispatch_incoming_reliable_commands (ENetPeer * peer, ENetChannel * ch } ENetIncomingCommand * -enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, ENetPacket * packet, enet_uint32 fragmentCount) +enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, const void * data, size_t dataLength, enet_uint32 flags, enet_uint32 fragmentCount) { static ENetIncomingCommand dummyCommand; @@ -827,9 +830,10 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, enet_uint16 reliableWindow, currentWindow; ENetIncomingCommand * incomingCommand; ENetListIterator currentCommand; + ENetPacket * packet = NULL; if (peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) - goto freePacket; + goto discardCommand; if ((command -> header.command & ENET_PROTOCOL_COMMAND_MASK) != ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED) { @@ -841,7 +845,7 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, reliableWindow += ENET_PEER_RELIABLE_WINDOWS; if (reliableWindow < currentWindow || reliableWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1) - goto freePacket; + goto discardCommand; } switch (command -> header.command & ENET_PROTOCOL_COMMAND_MASK) @@ -849,7 +853,7 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, case ENET_PROTOCOL_COMMAND_SEND_FRAGMENT: case ENET_PROTOCOL_COMMAND_SEND_RELIABLE: if (reliableSequenceNumber == channel -> incomingReliableSequenceNumber) - goto freePacket; + goto discardCommand; for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingReliableCommands)); currentCommand != enet_list_end (& channel -> incomingReliableCommands); @@ -871,7 +875,7 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, if (incomingCommand -> reliableSequenceNumber < reliableSequenceNumber) break; - goto freePacket; + goto discardCommand; } } break; @@ -882,7 +886,7 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, if (reliableSequenceNumber == channel -> incomingReliableSequenceNumber && unreliableSequenceNumber <= channel -> incomingUnreliableSequenceNumber) - goto freePacket; + goto discardCommand; for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingUnreliableCommands)); currentCommand != enet_list_end (& channel -> incomingUnreliableCommands); @@ -913,7 +917,7 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, if (incomingCommand -> unreliableSequenceNumber < unreliableSequenceNumber) break; - goto freePacket; + goto discardCommand; } } break; @@ -923,9 +927,16 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, break; default: - goto freePacket; + goto discardCommand; } + if (peer -> totalWaitingData >= peer -> host -> maximumWaitingData) + goto notifyError; + + packet = enet_packet_create (data, dataLength, flags); + if (packet == NULL) + goto notifyError; + incomingCommand = (ENetIncomingCommand *) enet_malloc (sizeof (ENetIncomingCommand)); if (incomingCommand == NULL) goto notifyError; @@ -952,7 +963,11 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, } if (packet != NULL) - ++ packet -> referenceCount; + { + ++ packet -> referenceCount; + + peer -> totalWaitingData += packet -> dataLength; + } enet_list_insert (enet_list_next (currentCommand), incomingCommand); @@ -970,7 +985,7 @@ enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, return incomingCommand; -freePacket: +discardCommand: if (fragmentCount > 0) goto notifyError; diff --git a/jni/love/src/libraries/enet/libenet/protocol.c b/jni/love/src/libraries/enet/libenet/protocol.c index b8d4863e..29d64873 100644 --- a/jni/love/src/libraries/enet/libenet/protocol.c +++ b/jni/love/src/libraries/enet/libenet/protocol.c @@ -424,7 +424,6 @@ enet_protocol_handle_connect (ENetHost * host, ENetProtocolHeader * header, ENet static int enet_protocol_handle_send_reliable (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) { - ENetPacket * packet; size_t dataLength; if (command -> header.channelID >= peer -> channelCount || @@ -433,16 +432,12 @@ enet_protocol_handle_send_reliable (ENetHost * host, ENetPeer * peer, const ENet dataLength = ENET_NET_TO_HOST_16 (command -> sendReliable.dataLength); * currentData += dataLength; - if (dataLength > ENET_PROTOCOL_MAXIMUM_PACKET_SIZE || + if (dataLength > host -> maximumPacketSize || * currentData < host -> receivedData || * currentData > & host -> receivedData [host -> receivedDataLength]) return -1; - packet = enet_packet_create ((const enet_uint8 *) command + sizeof (ENetProtocolSendReliable), - dataLength, - ENET_PACKET_FLAG_RELIABLE); - if (packet == NULL || - enet_peer_queue_incoming_command (peer, command, packet, 0) == NULL) + if (enet_peer_queue_incoming_command (peer, command, (const enet_uint8 *) command + sizeof (ENetProtocolSendReliable), dataLength, ENET_PACKET_FLAG_RELIABLE, 0) == NULL) return -1; return 0; @@ -451,7 +446,6 @@ enet_protocol_handle_send_reliable (ENetHost * host, ENetPeer * peer, const ENet static int enet_protocol_handle_send_unsequenced (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) { - ENetPacket * packet; enet_uint32 unsequencedGroup, index; size_t dataLength; @@ -461,7 +455,7 @@ enet_protocol_handle_send_unsequenced (ENetHost * host, ENetPeer * peer, const E dataLength = ENET_NET_TO_HOST_16 (command -> sendUnsequenced.dataLength); * currentData += dataLength; - if (dataLength > ENET_PROTOCOL_MAXIMUM_PACKET_SIZE || + if (dataLength > host -> maximumPacketSize || * currentData < host -> receivedData || * currentData > & host -> receivedData [host -> receivedDataLength]) return -1; @@ -487,11 +481,7 @@ enet_protocol_handle_send_unsequenced (ENetHost * host, ENetPeer * peer, const E if (peer -> unsequencedWindow [index / 32] & (1 << (index % 32))) return 0; - packet = enet_packet_create ((const enet_uint8 *) command + sizeof (ENetProtocolSendUnsequenced), - dataLength, - ENET_PACKET_FLAG_UNSEQUENCED); - if (packet == NULL || - enet_peer_queue_incoming_command (peer, command, packet, 0) == NULL) + if (enet_peer_queue_incoming_command (peer, command, (const enet_uint8 *) command + sizeof (ENetProtocolSendUnsequenced), dataLength, ENET_PACKET_FLAG_UNSEQUENCED, 0) == NULL) return -1; peer -> unsequencedWindow [index / 32] |= 1 << (index % 32); @@ -502,7 +492,6 @@ enet_protocol_handle_send_unsequenced (ENetHost * host, ENetPeer * peer, const E static int enet_protocol_handle_send_unreliable (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) { - ENetPacket * packet; size_t dataLength; if (command -> header.channelID >= peer -> channelCount || @@ -511,16 +500,12 @@ enet_protocol_handle_send_unreliable (ENetHost * host, ENetPeer * peer, const EN dataLength = ENET_NET_TO_HOST_16 (command -> sendUnreliable.dataLength); * currentData += dataLength; - if (dataLength > ENET_PROTOCOL_MAXIMUM_PACKET_SIZE || + if (dataLength > host -> maximumPacketSize || * currentData < host -> receivedData || * currentData > & host -> receivedData [host -> receivedDataLength]) return -1; - packet = enet_packet_create ((const enet_uint8 *) command + sizeof (ENetProtocolSendUnreliable), - dataLength, - 0); - if (packet == NULL || - enet_peer_queue_incoming_command (peer, command, packet, 0) == NULL) + if (enet_peer_queue_incoming_command (peer, command, (const enet_uint8 *) command + sizeof (ENetProtocolSendUnreliable), dataLength, 0, 0) == NULL) return -1; return 0; @@ -546,7 +531,7 @@ enet_protocol_handle_send_fragment (ENetHost * host, ENetPeer * peer, const ENet fragmentLength = ENET_NET_TO_HOST_16 (command -> sendFragment.dataLength); * currentData += fragmentLength; - if (fragmentLength > ENET_PROTOCOL_MAXIMUM_PACKET_SIZE || + if (fragmentLength > host -> maximumPacketSize || * currentData < host -> receivedData || * currentData > & host -> receivedData [host -> receivedDataLength]) return -1; @@ -569,7 +554,7 @@ enet_protocol_handle_send_fragment (ENetHost * host, ENetPeer * peer, const ENet if (fragmentCount > ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT || fragmentNumber >= fragmentCount || - totalLength > ENET_PROTOCOL_MAXIMUM_PACKET_SIZE || + totalLength > host -> maximumPacketSize || fragmentOffset >= totalLength || fragmentLength > totalLength - fragmentOffset) return -1; @@ -607,13 +592,10 @@ enet_protocol_handle_send_fragment (ENetHost * host, ENetPeer * peer, const ENet if (startCommand == NULL) { ENetProtocol hostCommand = * command; - ENetPacket * packet = enet_packet_create (NULL, totalLength, ENET_PACKET_FLAG_RELIABLE); - if (packet == NULL) - return -1; hostCommand.header.reliableSequenceNumber = startSequenceNumber; - startCommand = enet_peer_queue_incoming_command (peer, & hostCommand, packet, fragmentCount); + startCommand = enet_peer_queue_incoming_command (peer, & hostCommand, NULL, totalLength, ENET_PACKET_FLAG_RELIABLE, fragmentCount); if (startCommand == NULL) return -1; } @@ -659,7 +641,7 @@ enet_protocol_handle_send_unreliable_fragment (ENetHost * host, ENetPeer * peer, fragmentLength = ENET_NET_TO_HOST_16 (command -> sendFragment.dataLength); * currentData += fragmentLength; - if (fragmentLength > ENET_PROTOCOL_MAXIMUM_PACKET_SIZE || + if (fragmentLength > host -> maximumPacketSize || * currentData < host -> receivedData || * currentData > & host -> receivedData [host -> receivedDataLength]) return -1; @@ -688,7 +670,7 @@ enet_protocol_handle_send_unreliable_fragment (ENetHost * host, ENetPeer * peer, if (fragmentCount > ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT || fragmentNumber >= fragmentCount || - totalLength > ENET_PROTOCOL_MAXIMUM_PACKET_SIZE || + totalLength > host -> maximumPacketSize || fragmentOffset >= totalLength || fragmentLength > totalLength - fragmentOffset) return -1; @@ -731,11 +713,7 @@ enet_protocol_handle_send_unreliable_fragment (ENetHost * host, ENetPeer * peer, if (startCommand == NULL) { - ENetPacket * packet = enet_packet_create (NULL, totalLength, ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT); - if (packet == NULL) - return -1; - - startCommand = enet_peer_queue_incoming_command (peer, command, packet, fragmentCount); + startCommand = enet_peer_queue_incoming_command (peer, command, NULL, totalLength, ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT, fragmentCount); if (startCommand == NULL) return -1; } @@ -786,6 +764,10 @@ enet_protocol_handle_bandwidth_limit (ENetHost * host, ENetPeer * peer, const EN if (peer -> incomingBandwidth == 0 && host -> outgoingBandwidth == 0) peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; + else + if (peer -> incomingBandwidth == 0 || host -> outgoingBandwidth == 0) + peer -> windowSize = (ENET_MAX (peer -> incomingBandwidth, host -> outgoingBandwidth) / + ENET_PEER_WINDOW_SIZE_SCALE) * ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; else peer -> windowSize = (ENET_MIN (peer -> incomingBandwidth, host -> outgoingBandwidth) / ENET_PEER_WINDOW_SIZE_SCALE) * ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; @@ -1213,7 +1195,9 @@ commandError: static int enet_protocol_receive_incoming_commands (ENetHost * host, ENetEvent * event) { - for (;;) + int packets; + + for (packets = 0; packets < 256; ++ packets) { int receivedLength; ENetBuffer buffer; @@ -1506,7 +1490,7 @@ enet_protocol_send_reliable_outgoing_commands (ENetHost * host, ENetPeer * peer) ! (outgoingCommand -> reliableSequenceNumber % ENET_PEER_RELIABLE_WINDOW_SIZE) && (channel -> reliableWindows [(reliableWindow + ENET_PEER_RELIABLE_WINDOWS - 1) % ENET_PEER_RELIABLE_WINDOWS] >= ENET_PEER_RELIABLE_WINDOW_SIZE || channel -> usedReliableWindows & ((((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) << reliableWindow) | - (((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) >> (ENET_PEER_RELIABLE_WINDOW_SIZE - reliableWindow))))) + (((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) >> (ENET_PEER_RELIABLE_WINDOWS - reliableWindow))))) windowWrap = 1; if (windowWrap) { @@ -1904,6 +1888,9 @@ enet_host_service (ENetHost * host, ENetEvent * event, enet_uint32 timeout) } } + if (ENET_TIME_GREATER_EQUAL (host -> serviceTime, timeout)) + return 0; + do { host -> serviceTime = enet_time_get (); diff --git a/jni/love/src/libraries/enet/libenet/unix.c b/jni/love/src/libraries/enet/libenet/unix.c index 111d8e66..8cbeae5b 100644 --- a/jni/love/src/libraries/enet/libenet/unix.c +++ b/jni/love/src/libraries/enet/libenet/unix.c @@ -38,6 +38,12 @@ #ifndef HAS_SOCKLEN_T #define HAS_SOCKLEN_T 1 #endif +#ifndef HAS_GETADDRINFO +#define HAS_GETADDRINFO 1 +#endif +#ifndef HAS_GETNAMEINFO +#define HAS_GETNAMEINFO 1 +#endif #endif #ifdef HAS_FCNTL @@ -99,13 +105,39 @@ enet_time_set (enet_uint32 newTimeBase) int enet_address_set_host (ENetAddress * address, const char * name) { +#ifdef HAS_GETADDRINFO + struct addrinfo hints, * resultList = NULL, * result = NULL; + + memset (& hints, 0, sizeof (hints)); + hints.ai_family = AF_INET; + + if (getaddrinfo (name, NULL, NULL, & resultList) != 0) + return -1; + + for (result = resultList; result != NULL; result = result -> ai_next) + { + if (result -> ai_family == AF_INET && result -> ai_addr != NULL && result -> ai_addrlen >= sizeof (struct sockaddr_in)) + { + struct sockaddr_in * sin = (struct sockaddr_in *) result -> ai_addr; + + address -> host = sin -> sin_addr.s_addr; + + freeaddrinfo (resultList); + + return 0; + } + } + + if (resultList != NULL) + freeaddrinfo (resultList); +#else struct hostent * hostEntry = NULL; #ifdef HAS_GETHOSTBYNAME_R struct hostent hostData; char buffer [2048]; int errnum; -#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum); #else hostEntry = gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & errnum); @@ -114,19 +146,20 @@ enet_address_set_host (ENetAddress * address, const char * name) hostEntry = gethostbyname (name); #endif - if (hostEntry == NULL || - hostEntry -> h_addrtype != AF_INET) + if (hostEntry != NULL && hostEntry -> h_addrtype == AF_INET) { -#ifdef HAS_INET_PTON - if (! inet_pton (AF_INET, name, & address -> host)) -#else - if (! inet_aton (name, (struct in_addr *) & address -> host)) -#endif - return -1; + address -> host = * (enet_uint32 *) hostEntry -> h_addr_list [0]; + return 0; } +#endif - address -> host = * (enet_uint32 *) hostEntry -> h_addr_list [0]; +#ifdef HAS_INET_PTON + if (! inet_pton (AF_INET, name, & address -> host)) +#else + if (! inet_aton (name, (struct in_addr *) & address -> host)) +#endif + return -1; return 0; } @@ -139,7 +172,12 @@ enet_address_get_host_ip (const ENetAddress * address, char * name, size_t nameL #else char * addr = inet_ntoa (* (struct in_addr *) & address -> host); if (addr != NULL) - strncpy (name, addr, nameLength); + { + size_t addrLen = strlen(addr); + if (addrLen >= nameLength) + return -1; + memcpy (name, addr, addrLen + 1); + } else #endif return -1; @@ -149,6 +187,26 @@ enet_address_get_host_ip (const ENetAddress * address, char * name, size_t nameL int enet_address_get_host (const ENetAddress * address, char * name, size_t nameLength) { +#ifdef HAS_GETNAMEINFO + struct sockaddr_in sin; + int err; + + memset (& sin, 0, sizeof (struct sockaddr_in)); + + sin.sin_family = AF_INET; + sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); + sin.sin_addr.s_addr = address -> host; + + err = getnameinfo ((struct sockaddr *) & sin, sizeof (sin), name, nameLength, NULL, 0, NI_NAMEREQD); + if (! err) + { + if (name != NULL && nameLength > 0 && ! memchr (name, '\0', nameLength)) + return -1; + return 0; + } + if (err != EAI_NONAME) + return -1; +#else struct in_addr in; struct hostent * hostEntry = NULL; #ifdef HAS_GETHOSTBYADDR_R @@ -158,7 +216,7 @@ enet_address_get_host (const ENetAddress * address, char * name, size_t nameLeng in.s_addr = address -> host; -#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum); #else hostEntry = gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & errnum); @@ -169,12 +227,17 @@ enet_address_get_host (const ENetAddress * address, char * name, size_t nameLeng hostEntry = gethostbyaddr ((char *) & in, sizeof (struct in_addr), AF_INET); #endif - if (hostEntry == NULL) - return enet_address_get_host_ip (address, name, nameLength); + if (hostEntry != NULL) + { + size_t hostLen = strlen (hostEntry -> h_name); + if (hostLen >= nameLength) + return -1; + memcpy (name, hostEntry -> h_name, hostLen + 1); + return 0; + } +#endif - strncpy (name, hostEntry -> h_name, nameLength); - - return 0; + return enet_address_get_host_ip (address, name, nameLength); } int @@ -237,7 +300,7 @@ enet_socket_set_option (ENetSocket socket, ENetSocketOption option, int value) { case ENET_SOCKOPT_NONBLOCK: #ifdef HAS_FCNTL - result = fcntl (socket, F_SETFL, O_NONBLOCK | fcntl (socket, F_GETFL)); + result = fcntl (socket, F_SETFL, (value ? O_NONBLOCK : 0) | (fcntl (socket, F_GETFL) & ~O_NONBLOCK)); #else result = ioctl (socket, FIONBIO, & value); #endif diff --git a/jni/love/src/libraries/enet/libenet/win32.c b/jni/love/src/libraries/enet/libenet/win32.c index c441841d..5cc16799 100644 --- a/jni/love/src/libraries/enet/libenet/win32.c +++ b/jni/love/src/libraries/enet/libenet/win32.c @@ -4,9 +4,10 @@ */ #ifdef _WIN32 -#include #define ENET_BUILDING_LIB 1 #include "enet/enet.h" +#include +#include static enet_uint32 timeBase = 0; @@ -85,7 +86,13 @@ enet_address_get_host_ip (const ENetAddress * address, char * name, size_t nameL char * addr = inet_ntoa (* (struct in_addr *) & address -> host); if (addr == NULL) return -1; - strncpy (name, addr, nameLength); + else + { + size_t addrLen = strlen(addr); + if (addrLen >= nameLength) + return -1; + memcpy (name, addr, addrLen + 1); + } return 0; } @@ -94,14 +101,19 @@ enet_address_get_host (const ENetAddress * address, char * name, size_t nameLeng { struct in_addr in; struct hostent * hostEntry; - + in.s_addr = address -> host; hostEntry = gethostbyaddr ((char *) & in, sizeof (struct in_addr), AF_INET); if (hostEntry == NULL) return enet_address_get_host_ip (address, name, nameLength); - - strncpy (name, hostEntry -> h_name, nameLength); + else + { + size_t hostLen = strlen (hostEntry -> h_name); + if (hostLen >= nameLength) + return -1; + memcpy (name, hostEntry -> h_name, hostLen + 1); + } return 0; } diff --git a/jni/love/src/libraries/stb/stb_image.h b/jni/love/src/libraries/stb/stb_image.h index a46521db..13ba6c75 100644 --- a/jni/love/src/libraries/stb/stb_image.h +++ b/jni/love/src/libraries/stb/stb_image.h @@ -1,4 +1,4 @@ -/* stb_image - v2.07 - public domain image loader - http://nothings.org/stb_image.h +/* stb_image - v2.12 - public domain image loader - http://nothings.org/stb_image.h no warranty implied; use at your own risk Do this: @@ -146,6 +146,14 @@ Latest revision history: + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 + RGB-format JPEG; remove white matting in PSD; + allocate large structures on the stack; + correct channel count for PNG & BMP + 2.10 (2016-01-22) avoid warning introduced in 2.09 + 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED + 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA 2.07 (2015-09-13) partial animated GIF support limited 16-bit PSD support minor bugs, code cleanup, and compiler warnings @@ -164,59 +172,47 @@ STBI_MALLOC,STBI_REALLOC,STBI_FREE STBI_NO_*, STBI_ONLY_* GIF bugfix - 1.48 (2014-12-14) fix incorrectly-named assert() - 1.47 (2014-12-14) 1/2/4-bit PNG support (both grayscale and paletted) - optimize PNG - fix bug in interlaced PNG with user-specified channel count See end of file for full revision history. ============================ Contributors ========================= - Image formats Bug fixes & warning fixes - Sean Barrett (jpeg, png, bmp) Marc LeBlanc - Nicolas Schulz (hdr, psd) Christpher Lloyd - Jonathan Dummer (tga) Dave Moore - Jean-Marc Lienher (gif) Won Chun - Tom Seddon (pic) the Horde3D community - Thatcher Ulrich (psd) Janez Zemva - Ken Miller (pgm, ppm) Jonathan Blow - urraka@github (animated gif) Laurent Gomila - Aruelien Pocheville - Ryamond Barbiero - David Woo - Extensions, features Martin Golini - Jetro Lauha (stbi_info) Roy Eltham - Martin "SpartanJ" Golini (stbi_info) Luke Graham - James "moose2000" Brown (iPhone PNG) Thomas Ruf - Ben "Disch" Wenger (io callbacks) John Bartholomew - Omar Cornut (1/2/4-bit PNG) Ken Hamada - Nicolas Guillemot (vertical flip) Cort Stratton - Richard Mitton (16-bit PSD) Blazej Dariusz Roszkowski - Thibault Reuille - Paul Du Bois - Guillaume George - Jerry Jansson - Hayaki Saito - Johan Duparc - Ronny Chevalier - Optimizations & bugfixes Michal Cichon - Fabian "ryg" Giesen Tero Hanninen - Arseny Kapoulkine Sergio Gonzalez - Cass Everitt - Engin Manap - If your name should be here but Martins Mozeiko - isn't, let Sean know. Joseph Thomson - Phil Jordan - Nathan Reed - Michaelangel007@github + Image formats Extensions, features + Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) + Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) + Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) + Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) + Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) + Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) + Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) + urraka@github (animated gif) Junggon Kim (PNM comments) + Daniel Gibson (16-bit TGA) + + Optimizations & bugfixes + Fabian "ryg" Giesen + Arseny Kapoulkine + + Bug & warning fixes + Marc LeBlanc David Woo Guillaume George Martins Mozeiko + Christpher Lloyd Martin Golini Jerry Jansson Joseph Thomson + Dave Moore Roy Eltham Hayaki Saito Phil Jordan + Won Chun Luke Graham Johan Duparc Nathan Reed + the Horde3D community Thomas Ruf Ronny Chevalier Nick Verigakis + Janez Zemva John Bartholomew Michal Cichon svdijk@github + Jonathan Blow Ken Hamada Tero Hanninen Baldur Karlsson + Laurent Gomila Cort Stratton Sergio Gonzalez romigrou@github + Aruelien Pocheville Thibault Reuille Cass Everitt Matthew Gregan + Ryamond Barbiero Paul Du Bois Engin Manap snagar@github + Michaelangel007@github Oriol Ferrer Mesia socks-the-fox + Blazej Dariusz Roszkowski + LICENSE -This software is in the public domain. Where that dedication is not -recognized, you are granted a perpetual, irrevocable license to copy, -distribute, and modify this file as you see fit. +This software is dual-licensed to the public domain and under the following +license: you are granted a perpetual, irrevocable license to copy, modify, +publish, and distribute this file as you see fit. */ @@ -459,12 +455,12 @@ STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, #ifndef STBI_NO_HDR STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); STBIDEF void stbi_hdr_to_ldr_scale(float scale); -#endif +#endif // STBI_NO_HDR #ifndef STBI_NO_LINEAR STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); STBIDEF void stbi_ldr_to_hdr_scale(float scale); -#endif // STBI_NO_HDR +#endif // STBI_NO_LINEAR // stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); @@ -628,18 +624,22 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y)))) #endif -#if defined(STBI_MALLOC) && defined(STBI_FREE) && defined(STBI_REALLOC) +#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) // ok -#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) // ok #else -#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC." +#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." #endif #ifndef STBI_MALLOC -#define STBI_MALLOC(sz) malloc(sz) -#define STBI_REALLOC(p,sz) realloc(p,sz) -#define STBI_FREE(p) free(p) +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p,newsz) realloc(p,newsz) +#define STBI_FREE(p) free(p) +#endif + +#ifndef STBI_REALLOC_SIZED +#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) #endif // x86/x64 detection @@ -673,7 +673,7 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; #define STBI_NO_SIMD #endif -#if !defined(STBI_NO_SIMD) && defined(STBI__X86_TARGET) +#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) #define STBI_SSE2 #include @@ -712,12 +712,18 @@ static int stbi__sse2_available() static int stbi__sse2_available() { -#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later - // GCC 4.8+ has a nice way to do this - return __builtin_cpu_supports("sse2"); +#if defined(STBI__X64_TARGET) + // on x64, SSE2 can be assumed to be available. + return 1; +#elif defined(LOVE_STBI_SSE2_OVERRIDE) + return 1; #else - // portable way to do this, preferably without using GCC inline ASM? - // just bail for now. +# warning "stb_image compiled without SSE2 support, define LOVE_STBI_SSE2_OVERRIDE to force SSE2 support" + // __builtin_cpu_supports is buggy on GCC 5 and above, causing problems if + // referenced in a shared object, giving missing __cpu_model hidden symbol errors. + // To get around that, just assume that SSE2 is not available on x86. + // + // See https://github.com/nothings/stb/issues/280 for more information. return 0; #endif } @@ -1184,14 +1190,15 @@ STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void #endif } -static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; +#ifndef STBI_NO_LINEAR static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; -#ifndef STBI_NO_LINEAR STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } #endif +static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; + STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } @@ -1294,7 +1301,9 @@ static int stbi__get16be(stbi__context *s) return (z << 8) + stbi__get8(s); } -#if !defined(STBI_NO_PNG) || !defined(STBI_NO_PSD) +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else static stbi__uint32 stbi__get32be(stbi__context *s) { stbi__uint32 z = stbi__get16be(s); @@ -1302,7 +1311,9 @@ static stbi__uint32 stbi__get32be(stbi__context *s) } #endif -#if !defined(STBI_NO_BMP) || !defined(STBI_NO_TGA) || !defined(STBI_NO_GIF) +#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +#else static int stbi__get16le(stbi__context *s) { int z = stbi__get8(s); @@ -1506,6 +1517,7 @@ typedef struct int succ_high; int succ_low; int eob_run; + int rgb; int scan_n, order[4]; int restart_interval, todo; @@ -2717,11 +2729,17 @@ static int stbi__process_frame_header(stbi__jpeg *z, int scan) if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); + z->rgb = 0; for (i=0; i < s->img_n; ++i) { + static unsigned char rgb[3] = { 'R', 'G', 'B' }; z->img_comp[i].id = stbi__get8(s); if (z->img_comp[i].id != i+1) // JFIF requires - if (z->img_comp[i].id != i) // some version of jpegtran outputs non-JFIF-compliant files! - return stbi__err("bad component ID","Corrupt JPEG"); + if (z->img_comp[i].id != i) { // some version of jpegtran outputs non-JFIF-compliant files! + // somethings output this (see http://fileformats.archiveteam.org/wiki/JPEG#Color_format) + if (z->img_comp[i].id != rgb[i]) + return stbi__err("bad component ID","Corrupt JPEG"); + ++z->rgb; + } q = stbi__get8(s); z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); @@ -3383,7 +3401,17 @@ static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp if (n >= 3) { stbi_uc *y = coutput[0]; if (z->s->img_n == 3) { - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + if (z->rgb == 3) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } } else for (i=0; i < z->s->img_x; ++i) { out[0] = out[1] = out[2] = y[i]; @@ -3408,10 +3436,13 @@ static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp static unsigned char *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) { - stbi__jpeg j; - j.s = s; - stbi__setup_jpeg(&j); - return load_jpeg_image(&j, x,y,comp,req_comp); + unsigned char* result; + stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x,y,comp,req_comp); + STBI_FREE(j); + return result; } static int stbi__jpeg_test(stbi__context *s) @@ -3439,9 +3470,12 @@ static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) { - stbi__jpeg j; - j.s = s; - return stbi__jpeg_info_raw(&j, x, y, comp); + int result; + stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; } #endif @@ -3614,14 +3648,15 @@ stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes { char *q; - int cur, limit; + int cur, limit, old_limit; z->zout = zout; if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); cur = (int) (z->zout - z->zout_start); - limit = (int) (z->zout_end - z->zout_start); + limit = old_limit = (int) (z->zout_end - z->zout_start); while (cur + n > limit) limit *= 2; - q = (char *) STBI_REALLOC(z->zout_start, limit); + q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); if (q == NULL) return stbi__err("outofmem", "Out of memory"); z->zout_start = q; z->zout = q + cur; @@ -3731,7 +3766,7 @@ static int stbi__compute_huffman_codes(stbi__zbuf *a) return 1; } -static int stbi__parse_uncomperssed_block(stbi__zbuf *a) +static int stbi__parse_uncompressed_block(stbi__zbuf *a) { stbi_uc header[4]; int len,nlen,k; @@ -3797,7 +3832,7 @@ static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) final = stbi__zreceive(a,1); type = stbi__zreceive(a,2); if (type == 0) { - if (!stbi__parse_uncomperssed_block(a)) return 0; + if (!stbi__parse_uncompressed_block(a)) return 0; } else if (type == 3) { return 0; } else { @@ -3939,6 +3974,7 @@ typedef struct { stbi__context *s; stbi_uc *idata, *expanded, *out; + int depth; } stbi__png; @@ -3978,14 +4014,19 @@ static stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x0 // create the png data from post-deflated data static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) { + int bytes = (depth == 16? 2 : 1); stbi__context *s = a->s; - stbi__uint32 i,j,stride = x*out_n; + stbi__uint32 i,j,stride = x*out_n*bytes; stbi__uint32 img_len, img_width_bytes; int k; int img_n = s->img_n; // copy it into a local for later + int output_bytes = out_n*bytes; + int filter_bytes = img_n*bytes; + int width = x; + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); - a->out = (stbi_uc *) stbi__malloc(x * y * out_n); // extra bytes to write off the end into + a->out = (stbi_uc *) stbi__malloc(x * y * output_bytes); // extra bytes to write off the end into if (!a->out) return stbi__err("outofmem", "Out of memory"); img_width_bytes = (((img_n * x * depth) + 7) >> 3); @@ -4000,8 +4041,7 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r stbi_uc *cur = a->out + stride*j; stbi_uc *prior = cur - stride; int filter = *raw++; - int filter_bytes = img_n; - int width = x; + if (filter > 4) return stbi__err("invalid filter","Corrupt PNG"); @@ -4034,6 +4074,14 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r raw += img_n; cur += out_n; prior += out_n; + } else if (depth == 16) { + if (img_n != out_n) { + cur[filter_bytes] = 255; // first pixel top byte + cur[filter_bytes+1] = 255; // first pixel bottom byte + } + raw += filter_bytes; + cur += output_bytes; + prior += output_bytes; } else { raw += 1; cur += 1; @@ -4042,7 +4090,7 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r // this is a little gross, so that we don't switch per-pixel or per-component if (depth < 8 || img_n == out_n) { - int nk = (width - 1)*img_n; + int nk = (width - 1)*filter_bytes; #define CASE(f) \ case f: \ for (k=0; k < nk; ++k) @@ -4062,18 +4110,27 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r STBI_ASSERT(img_n+1 == out_n); #define CASE(f) \ case f: \ - for (i=x-1; i >= 1; --i, cur[img_n]=255,raw+=img_n,cur+=out_n,prior+=out_n) \ - for (k=0; k < img_n; ++k) + for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ + for (k=0; k < filter_bytes; ++k) switch (filter) { CASE(STBI__F_none) cur[k] = raw[k]; break; - CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-out_n]); break; + CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); break; CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-out_n])>>1)); break; - CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],prior[k],prior[k-out_n])); break; - CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-out_n] >> 1)); break; - CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],0,0)); break; + CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); break; + CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); break; + CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); break; + CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); break; } #undef CASE + + // the loop above sets the high byte of the pixels' alpha, but for + // 16 bit png files we also need the low byte set. we'll do that here. + if (depth == 16) { + cur = a->out + stride*j; // start at the beginning of the row again + for (i=0; i < x; ++i,cur+=output_bytes) { + cur[filter_bytes+1] = 255; + } + } } } @@ -4149,6 +4206,17 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r } } } + } else if (depth == 16) { + // force the image data from big-endian to platform-native. + // this is done in a separate pass due to the decoding relying + // on the data being untouched, but could probably be done + // per-line during decode if care is taken. + stbi_uc *cur = a->out; + stbi__uint16 *cur16 = (stbi__uint16*)cur; + + for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { + *cur16 = (cur[0] << 8) | cur[1]; + } } return 1; @@ -4221,6 +4289,31 @@ static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) return 1; } +static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16 *p = (stbi__uint16*) z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) { stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; @@ -4258,6 +4351,26 @@ static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int return 1; } +static int stbi__reduce_png(stbi__png *p) +{ + int i; + int img_len = p->s->img_x * p->s->img_y * p->s->img_out_n; + stbi_uc *reduced; + stbi__uint16 *orig = (stbi__uint16*)p->out; + + if (p->depth != 16) return 1; // don't need to do anything if not 16-bit data + + reduced = (stbi_uc *)stbi__malloc(img_len); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is a decent approx of 16->8 bit scaling + + p->out = reduced; + STBI_FREE(orig); + + return 1; +} + static int stbi__unpremultiply_on_load = 0; static int stbi__de_iphone_flag = 0; @@ -4319,8 +4432,9 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) { stbi_uc palette[1024], pal_img_n=0; stbi_uc has_trans=0, tc[3]; + stbi__uint16 tc16[3]; stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; - int first=1,k,interlace=0, color=0, depth=0, is_iphone=0; + int first=1,k,interlace=0, color=0, is_iphone=0; stbi__context *s = z->s; z->expanded = NULL; @@ -4345,8 +4459,9 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); s->img_x = stbi__get32be(s); if (s->img_x > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); - depth = stbi__get8(s); if (depth != 1 && depth != 2 && depth != 4 && depth != 8) return stbi__err("1/2/4/8-bit only","PNG not supported: 1/2/4/8-bit only"); + z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); @@ -4394,8 +4509,11 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); has_trans = 1; - for (k=0; k < s->img_n; ++k) - tc[k] = (stbi_uc) (stbi__get16be(s) & 255) * stbi__depth_scale_table[depth]; // non 8-bit images will be larger + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) tc16[k] = stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + } } break; } @@ -4406,11 +4524,13 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; } if ((int)(ioff + c.length) < (int)ioff) return 0; if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; stbi_uc *p; if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; while (ioff + c.length > idata_limit) idata_limit *= 2; - p = (stbi_uc *) STBI_REALLOC(z->idata, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); z->idata = p; } if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); @@ -4424,7 +4544,7 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) if (scan != STBI__SCAN_load) return 1; if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); // initial guess for decoded data size to avoid unnecessary reallocs - bpl = (s->img_x * depth + 7) / 8; // bytes per line, per component + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); if (z->expanded == NULL) return 0; // zlib should set error @@ -4433,9 +4553,14 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) s->img_out_n = s->img_n+1; else s->img_out_n = s->img_n; - if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, depth, color, interlace)) return 0; - if (has_trans) - if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + } + } if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) stbi__de_iphone(z); if (pal_img_n) { @@ -4477,6 +4602,11 @@ static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req unsigned char *result=NULL; if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth == 16) { + if (!stbi__reduce_png(p)) { + return result; + } + } result = p->out; p->out = NULL; if (req_comp && req_comp != p->s->img_out_n) { @@ -4486,7 +4616,7 @@ static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req } *x = p->s->img_x; *y = p->s->img_y; - if (n) *n = p->s->img_out_n; + if (n) *n = p->s->img_n; } STBI_FREE(p->out); p->out = NULL; STBI_FREE(p->expanded); p->expanded = NULL; @@ -4596,19 +4726,23 @@ static int stbi__shiftsigned(int v, int shift, int bits) return result; } -static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +typedef struct { - stbi_uc *out; - unsigned int mr=0,mg=0,mb=0,ma=0, all_a=255; - stbi_uc pal[256][4]; - int psize=0,i,j,compress=0,width; - int bpp, flip_vertically, pad, target, offset, hsz; + int bpp, offset, hsz; + unsigned int mr,mg,mb,ma, all_a; +} stbi__bmp_data; + +static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) +{ + int hsz; if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); stbi__get32le(s); // discard filesize stbi__get16le(s); // discard reserved stbi__get16le(s); // discard reserved - offset = stbi__get32le(s); - hsz = stbi__get32le(s); + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); if (hsz == 12) { s->img_x = stbi__get16le(s); @@ -4618,15 +4752,10 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int s->img_y = stbi__get32le(s); } if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); - bpp = stbi__get16le(s); - if (bpp == 1) return stbi__errpuc("monochrome", "BMP type not supported: 1-bit"); - flip_vertically = ((int) s->img_y) > 0; - s->img_y = abs((int) s->img_y); - if (hsz == 12) { - if (bpp < 24) - psize = (offset - 14 - 24) / 3; - } else { - compress = stbi__get32le(s); + info->bpp = stbi__get16le(s); + if (info->bpp == 1) return stbi__errpuc("monochrome", "BMP type not supported: 1-bit"); + if (hsz != 12) { + int compress = stbi__get32le(s); if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); stbi__get32le(s); // discard sizeof stbi__get32le(s); // discard hres @@ -4640,26 +4769,25 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int stbi__get32le(s); stbi__get32le(s); } - if (bpp == 16 || bpp == 32) { - mr = mg = mb = 0; + if (info->bpp == 16 || info->bpp == 32) { if (compress == 0) { - if (bpp == 32) { - mr = 0xffu << 16; - mg = 0xffu << 8; - mb = 0xffu << 0; - ma = 0xffu << 24; - all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 + if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 } else { - mr = 31u << 10; - mg = 31u << 5; - mb = 31u << 0; + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; } } else if (compress == 3) { - mr = stbi__get32le(s); - mg = stbi__get32le(s); - mb = stbi__get32le(s); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); // not documented, but generated by photoshop and handled by mspaint - if (mr == mg && mg == mb) { + if (info->mr == info->mg && info->mg == info->mb) { // ?!?!? return stbi__errpuc("bad BMP", "bad BMP"); } @@ -4667,11 +4795,13 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int return stbi__errpuc("bad BMP", "bad BMP"); } } else { - STBI_ASSERT(hsz == 108 || hsz == 124); - mr = stbi__get32le(s); - mg = stbi__get32le(s); - mb = stbi__get32le(s); - ma = stbi__get32le(s); + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); stbi__get32le(s); // discard color space for (i=0; i < 12; ++i) stbi__get32le(s); // discard color space parameters @@ -4682,35 +4812,68 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int stbi__get32le(s); // discard reserved } } - if (bpp < 16) - psize = (offset - 14 - hsz) >> 2; } + return (void *) 1; +} + + +static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *out; + unsigned int mr=0,mg=0,mb=0,ma=0, all_a; + stbi_uc pal[256][4]; + int psize=0,i,j,width; + int flip_vertically, pad, target; + stbi__bmp_data info; + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - 14 - 24) / 3; + } else { + if (info.bpp < 16) + psize = (info.offset - 14 - info.hsz) >> 2; + } + s->img_n = ma ? 4 : 3; if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 target = req_comp; else target = s->img_n; // if they want monochrome, we'll post-convert + out = (stbi_uc *) stbi__malloc(target * s->img_x * s->img_y); if (!out) return stbi__errpuc("outofmem", "Out of memory"); - if (bpp < 16) { + if (info.bpp < 16) { int z=0; if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } for (i=0; i < psize; ++i) { pal[i][2] = stbi__get8(s); pal[i][1] = stbi__get8(s); pal[i][0] = stbi__get8(s); - if (hsz != 12) stbi__get8(s); + if (info.hsz != 12) stbi__get8(s); pal[i][3] = 255; } - stbi__skip(s, offset - 14 - hsz - psize * (hsz == 12 ? 3 : 4)); - if (bpp == 4) width = (s->img_x + 1) >> 1; - else if (bpp == 8) width = s->img_x; + stbi__skip(s, info.offset - 14 - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 4) width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) width = s->img_x; else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } pad = (-width)&3; for (j=0; j < (int) s->img_y; ++j) { for (i=0; i < (int) s->img_x; i += 2) { int v=stbi__get8(s),v2=0; - if (bpp == 4) { + if (info.bpp == 4) { v2 = v & 15; v >>= 4; } @@ -4719,7 +4882,7 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int out[z++] = pal[v][2]; if (target == 4) out[z++] = 255; if (i+1 == (int) s->img_x) break; - v = (bpp == 8) ? stbi__get8(s) : v2; + v = (info.bpp == 8) ? stbi__get8(s) : v2; out[z++] = pal[v][0]; out[z++] = pal[v][1]; out[z++] = pal[v][2]; @@ -4731,14 +4894,14 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; int z = 0; int easy=0; - stbi__skip(s, offset - 14 - hsz); - if (bpp == 24) width = 3 * s->img_x; - else if (bpp == 16) width = 2*s->img_x; + stbi__skip(s, info.offset - 14 - info.hsz); + if (info.bpp == 24) width = 3 * s->img_x; + else if (info.bpp == 16) width = 2*s->img_x; else /* bpp = 32 and pad = 0 */ width=0; pad = (-width) & 3; - if (bpp == 24) { + if (info.bpp == 24) { easy = 1; - } else if (bpp == 32) { + } else if (info.bpp == 32) { if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) easy = 2; } @@ -4763,6 +4926,7 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int if (target == 4) out[z++] = a; } } else { + int bpp = info.bpp; for (i=0; i < (int) s->img_x; ++i) { stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); int a; @@ -4809,20 +4973,55 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int // Targa Truevision - TGA // by Jonathan Dummer #ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if(is_rgb16) *is_rgb16 = 0; + switch(bits_per_pixel) { + case 8: return STBI_grey; + case 16: if(is_grey) return STBI_grey_alpha; + // else: fall-through + case 15: if(is_rgb16) *is_rgb16 = 1; + return STBI_rgb; + case 24: // fall-through + case 32: return bits_per_pixel/8; + default: return 0; + } +} + static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) { - int tga_w, tga_h, tga_comp; - int sz; + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; + int sz, tga_colormap_type; stbi__get8(s); // discard Offset - sz = stbi__get8(s); // color type - if( sz > 1 ) { + tga_colormap_type = stbi__get8(s); // colormap type + if( tga_colormap_type > 1 ) { stbi__rewind(s); return 0; // only RGB or indexed allowed } - sz = stbi__get8(s); // image type - // only RGB or grey allowed, +/- RLE - if ((sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11)) return 0; - stbi__skip(s,9); + tga_image_type = stbi__get8(s); // image type + if ( tga_colormap_type == 1 ) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s,9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } tga_w = stbi__get16le(s); if( tga_w < 1 ) { stbi__rewind(s); @@ -4833,44 +5032,80 @@ static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) stbi__rewind(s); return 0; // test height } - sz = stbi__get8(s); // bits per pixel - // only RGB or RGBA or grey allowed - if ((sz != 8) && (sz != 16) && (sz != 24) && (sz != 32)) { - stbi__rewind(s); - return 0; + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if(!tga_comp) { + stbi__rewind(s); + return 0; } - tga_comp = sz; if (x) *x = tga_w; if (y) *y = tga_h; - if (comp) *comp = tga_comp / 8; + if (comp) *comp = tga_comp; return 1; // seems to have passed everything } static int stbi__tga_test(stbi__context *s) { - int res; - int sz; + int res = 0; + int sz, tga_color_type; stbi__get8(s); // discard Offset - sz = stbi__get8(s); // color type - if ( sz > 1 ) return 0; // only RGB or indexed allowed + tga_color_type = stbi__get8(s); // color type + if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed sz = stbi__get8(s); // image type - if ( (sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11) ) return 0; // only RGB or grey allowed, +/- RLE - stbi__get16be(s); // discard palette start - stbi__get16be(s); // discard palette length - stbi__get8(s); // discard bits per palette color entry - stbi__get16be(s); // discard x origin - stbi__get16be(s); // discard y origin - if ( stbi__get16be(s) < 1 ) return 0; // test width - if ( stbi__get16be(s) < 1 ) return 0; // test height + if ( tga_color_type == 1 ) { // colormapped (paletted) image + if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + stbi__skip(s,4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s,9); // skip colormap specification and image x/y origin + } + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height sz = stbi__get8(s); // bits per pixel - if ( (sz != 8) && (sz != 16) && (sz != 24) && (sz != 32) ) - res = 0; - else - res = 1; + if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + +errorEnd: stbi__rewind(s); return res; } +// read 16bit value and convert to 24bit RGB +void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) +{ + stbi__uint16 px = stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (r * 255)/31; + out[1] = (g * 255)/31; + out[2] = (b * 255)/31; + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) { // read in the TGA header stuff @@ -4886,8 +5121,9 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int int tga_width = stbi__get16le(s); int tga_height = stbi__get16le(s); int tga_bits_per_pixel = stbi__get8(s); - int tga_comp = tga_bits_per_pixel / 8; + int tga_comp, tga_rgb16=0; int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) // image data unsigned char *tga_data; unsigned char *tga_palette = NULL; @@ -4903,25 +5139,14 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int tga_image_type -= 8; tga_is_RLE = 1; } - /* int tga_alpha_bits = tga_inverted & 15; */ tga_inverted = 1 - ((tga_inverted >> 5) & 1); - // error check - if ( //(tga_indexed) || - (tga_width < 1) || (tga_height < 1) || - (tga_image_type < 1) || (tga_image_type > 3) || - ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16) && - (tga_bits_per_pixel != 24) && (tga_bits_per_pixel != 32)) - ) - { - return NULL; // we don't report this as a bad TGA because we don't even know if it's TGA - } - // If I'm paletted, then I'll use the number of bits from the palette - if ( tga_indexed ) - { - tga_comp = tga_palette_bits / 8; - } + if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); + + if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); // tga info *x = tga_width; @@ -4934,7 +5159,7 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int // skip to the data's starting position (offset usually = 0) stbi__skip(s, tga_offset ); - if ( !tga_indexed && !tga_is_RLE) { + if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { for (i=0; i < tga_height; ++i) { int row = tga_inverted ? tga_height -i - 1 : i; stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; @@ -4947,15 +5172,22 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int // any data to skip? (offset usually = 0) stbi__skip(s, tga_palette_start ); // load the palette - tga_palette = (unsigned char*)stbi__malloc( tga_palette_len * tga_palette_bits / 8 ); + tga_palette = (unsigned char*)stbi__malloc( tga_palette_len * tga_comp ); if (!tga_palette) { STBI_FREE(tga_data); return stbi__errpuc("outofmem", "Out of memory"); } - if (!stbi__getn(s, tga_palette, tga_palette_len * tga_palette_bits / 8 )) { - STBI_FREE(tga_data); - STBI_FREE(tga_palette); - return stbi__errpuc("bad palette", "Corrupt TGA"); + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i=0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); } } // load the data @@ -4985,23 +5217,22 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int // load however much data we did have if ( tga_indexed ) { - // read in 1 byte, then perform the lookup - int pal_idx = stbi__get8(s); - if ( pal_idx >= tga_palette_len ) - { - // invalid index + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if ( pal_idx >= tga_palette_len ) { + // invalid index pal_idx = 0; } - pal_idx *= tga_bits_per_pixel / 8; - for (j = 0; j*8 < tga_bits_per_pixel; ++j) - { + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { raw_data[j] = tga_palette[pal_idx+j]; } - } else - { + } else if(tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { // read in the data raw - for (j = 0; j*8 < tga_bits_per_pixel; ++j) - { + for (j = 0; j < tga_comp; ++j) { raw_data[j] = stbi__get8(s); } } @@ -5040,8 +5271,8 @@ static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int } } - // swap RGB - if (tga_comp >= 3) + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) { unsigned char* tga_pixel = tga_data; for (i=0; i < tga_width * tga_height; ++i) @@ -5215,15 +5446,16 @@ static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int stbi_uc *p; p = out + channel; - if (channel > channelCount) { + if (channel >= channelCount) { // Fill this channel with default data. + stbi_uc val = channel == 3 ? 255 : 0; for (i = 0; i < pixelCount; i++, p += 4) - *p = channel == 3 ? 255 : 0; + *p = val; } else { // Read the data. if (bitdepth == 16) { for (i = 0; i < pixelCount; i++, p += 4) - *p = stbi__get16be(s) >> 8; + *p = (stbi_uc) (stbi__get16be(s) >> 8); } else { for (i = 0; i < pixelCount; i++, p += 4) *p = stbi__get8(s); @@ -5232,6 +5464,21 @@ static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int } } + if (channelCount >= 4) { + for (i=0; i < w*h; ++i) { + unsigned char *pixel = out + 4*i; + if (pixel[3] != 0 && pixel[3] != 255) { + // remove weird white matte from PSD + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); + pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); + pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); + } + } + } + if (req_comp && req_comp != 4) { out = stbi__convert_format(out, 4, req_comp, w, h); if (out == NULL) return out; // stbi__convert_format frees input on failure @@ -5544,13 +5791,15 @@ static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_in static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) { - stbi__gif g; - if (!stbi__gif_header(s, &g, comp, 1)) { + stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); stbi__rewind( s ); return 0; } - if (x) *x = g.w; - if (y) *y = g.h; + if (x) *x = g->w; + if (y) *y = g->h; + STBI_FREE(g); return 1; } @@ -5765,7 +6014,7 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i if (o == NULL) return NULL; if (prev_trans != -1) - g->pal[g->transparent][3] = prev_trans; + g->pal[g->transparent][3] = (stbi_uc) prev_trans; return o; } @@ -5796,25 +6045,27 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i return stbi__errpuc("unknown code", "Corrupt GIF"); } } + + STBI_NOTUSED(req_comp); } static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) { stbi_uc *u = 0; - stbi__gif g; - memset(&g, 0, sizeof(g)); + stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); + memset(g, 0, sizeof(*g)); - u = stbi__gif_load_next(s, &g, comp, req_comp); + u = stbi__gif_load_next(s, g, comp, req_comp); if (u == (stbi_uc *) s) u = 0; // end of animated gif marker if (u) { - *x = g.w; - *y = g.h; + *x = g->w; + *y = g->h; if (req_comp && req_comp != 4) - u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + u = stbi__convert_format(u, 4, req_comp, g->w, g->h); } - else if (g.out) - STBI_FREE(g.out); - + else if (g->out) + STBI_FREE(g->out); + STBI_FREE(g); return u; } @@ -6012,7 +6263,7 @@ static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) char *token; int valid = 0; - if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0) { + if (stbi__hdr_test(s) == 0) { stbi__rewind( s ); return 0; } @@ -6049,29 +6300,17 @@ static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) #ifndef STBI_NO_BMP static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) { - int hsz; - if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') { - stbi__rewind( s ); - return 0; - } - stbi__skip(s,12); - hsz = stbi__get32le(s); - if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) { - stbi__rewind( s ); - return 0; - } - if (hsz == 12) { - *x = stbi__get16le(s); - *y = stbi__get16le(s); - } else { - *x = stbi__get32le(s); - *y = stbi__get32le(s); - } - if (stbi__get16le(s) != 1) { - stbi__rewind( s ); - return 0; - } - *comp = stbi__get16le(s) / 8; + void *p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + stbi__rewind( s ); + if (p == NULL) + return 0; + *x = s->img_x; + *y = s->img_y; + *comp = info.ma ? 4 : 3; return 1; } #endif @@ -6217,8 +6456,16 @@ static int stbi__pnm_isspace(char c) static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) { - while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) - *c = (char) stbi__get8(s); + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char) stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) + *c = (char) stbi__get8(s); + } } static int stbi__pnm_isdigit(char c) @@ -6356,9 +6603,24 @@ STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int /* revision history: + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) allocate large structures on the stack + remove white matting for transparent PSD + fix reported channel count for PNG & BMP + re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support realloc + code cleanup + 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA 2.07 (2015-09-13) fix compiler warnings partial animated GIF support - limited 16-bit PSD support + limited 16-bpc PSD support #ifdef unused functions bug with < 92 byte PIC,PNM,HDR,TGA 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value diff --git a/jni/love/src/love.cpp b/jni/love/src/love.cpp index 1ee6f6c0..00e8f36c 100644 --- a/jni/love/src/love.cpp +++ b/jni/love/src/love.cpp @@ -172,23 +172,14 @@ static int l_print_sdl_log(lua_State *L) } #endif -int main(int argc, char **argv) +enum DoneAction { - int retval = 0; - -#ifdef LOVE_IOS - int orig_argc = argc; - char **orig_argv = argv; - - // on iOS we should never programmatically exit the app, so we'll just - // "restart" when that is attempted. Games which use threads might cause - // some issues if the threads aren't cleaned up properly... - while (true) - { - argc = orig_argc; - argv = orig_argv; -#endif + DONE_QUIT, + DONE_RESTART, +}; +static DoneAction runlove(int argc, char **argv, int &retval) +{ #ifdef LOVE_LEGENDARY_APP_ARGV_HACK int hack_argc = 0; char **hack_argv = 0; @@ -197,18 +188,12 @@ int main(int argc, char **argv) argv = hack_argv; #endif // LOVE_LEGENDARY_APP_ARGV_HACK - if (strcmp(LOVE_VERSION_STRING, love_version()) != 0) - { - printf("Version mismatch detected!\nLOVE binary is version %s\n" - "LOVE library is version %s\n", LOVE_VERSION_STRING, love_version()); - return 1; - } - // Oh, you just want the version? Okay! if (argc > 1 && strcmp(argv[1], "--version") == 0) { printf("LOVE %s (%s)\n", love_version(), love_codename()); - return 0; + retval = 0; + return DONE_QUIT; } // Create the virtual machine. @@ -269,12 +254,19 @@ int main(int argc, char **argv) // Call the returned boot function. lua_call(L, 0, 1); + retval = 0; + DoneAction done = DONE_QUIT; + + // if love.boot() returns "restart", we'll start up again after closing this + // Lua state. + if (lua_type(L, -1) == LUA_TSTRING && strcmp(lua_tostring(L, -1), "restart") == 0) + done = DONE_RESTART; if (lua_isnumber(L, -1)) retval = (int) lua_tonumber(L, -1); lua_close(L); -#if defined(LOVE_LEGENDARY_APP_ARGV_HACK) +#if defined(LOVE_LEGENDARY_APP_ARGV_HACK) && !defined(LOVE_IOS) if (hack_argv) { for (int i = 0; iupdate(); - delay(5); + sleep(5); } } diff --git a/jni/love/src/modules/audio/openal/Audio.h b/jni/love/src/modules/audio/openal/Audio.h index b33731e2..4ec6d4d6 100644 --- a/jni/love/src/modules/audio/openal/Audio.h +++ b/jni/love/src/modules/audio/openal/Audio.h @@ -131,7 +131,7 @@ private: public: PoolThread(Pool *pool); - ~PoolThread(); + virtual ~PoolThread(); void setFinish(); void threadFunction(); }; diff --git a/jni/love/src/modules/audio/openal/Source.cpp b/jni/love/src/modules/audio/openal/Source.cpp index b9fb49a3..99f3b792 100644 --- a/jni/love/src/modules/audio/openal/Source.cpp +++ b/jni/love/src/modules/audio/openal/Source.cpp @@ -104,10 +104,7 @@ Source::Source(Pool *pool, love::sound::SoundData *soundData) if (fmt == 0) throw InvalidFormatException(soundData->getChannels(), soundData->getBitDepth()); - staticBuffer.set(new StaticDataBuffer(fmt, soundData->getData(), (ALsizei) soundData->getSize(), soundData->getSampleRate())); - - // The buffer has a +2 retain count right now, but we want it to have +1. - staticBuffer->release(); + staticBuffer.set(new StaticDataBuffer(fmt, soundData->getData(), (ALsizei) soundData->getSize(), sampleRate), Acquire::NORETAIN); float z[3] = {0, 0, 0}; @@ -179,11 +176,7 @@ Source::Source(const Source &s) if (type == TYPE_STREAM) { if (s.decoder.get()) - { - love::sound::Decoder *dec = s.decoder->clone(); - decoder.set(dec); - dec->release(); - } + decoder.set(s.decoder->clone(), Acquire::NORETAIN); alGenBuffers(MAX_BUFFERS, streamBuffers); } @@ -602,6 +595,11 @@ bool Source::isLooping() const bool Source::playAtomic() { + // This Source may now be associated with an OpenAL source that still has + // the properties of another love Source. Let's reset it to the settings + // of the new one. + reset(); + if (type == TYPE_STATIC) { alSourcei(source, AL_BUFFER, staticBuffer->getBuffer()); @@ -625,11 +623,6 @@ bool Source::playAtomic() alSourceQueueBuffers(source, usedBuffers, streamBuffers); } - // This Source may now be associated with an OpenAL source that still has - // the properties of another love Source. Let's reset it to the settings - // of the new one. - reset(); - // Clear errors. alGetError(); @@ -721,6 +714,7 @@ void Source::rewindAtomic() void Source::reset() { + alSourcei(source, AL_BUFFER, 0); alSourcefv(source, AL_POSITION, position); alSourcefv(source, AL_VELOCITY, velocity); alSourcefv(source, AL_DIRECTION, direction); diff --git a/jni/love/src/modules/event/Event.cpp b/jni/love/src/modules/event/Event.cpp index d35f533d..960a39a0 100644 --- a/jni/love/src/modules/event/Event.cpp +++ b/jni/love/src/modules/event/Event.cpp @@ -28,7 +28,7 @@ namespace love namespace event { -Message::Message(const std::string &name, const std::vector> &vargs) +Message::Message(const std::string &name, const std::vector &vargs) : name(name) , args(vargs) { @@ -42,13 +42,8 @@ int Message::toLua(lua_State *L) { luax_pushstring(L, name); - for (const StrongRef &v : args) - { - if (v.get() != nullptr) - v->toLua(L); - else - lua_pushnil(L); - } + for (const Variant &v : args) + v.toLua(L); return (int) args.size() + 1; } @@ -56,11 +51,13 @@ int Message::toLua(lua_State *L) Message *Message::fromLua(lua_State *L, int n) { std::string name = luax_checkstring(L, n); - std::vector> vargs; + std::vector vargs; int count = lua_gettop(L) - n; n++; + Variant varg; + for (int i = 0; i < count; i++) { if (lua_isnoneornil(L, n+i)) @@ -68,14 +65,12 @@ Message *Message::fromLua(lua_State *L, int n) vargs.push_back(Variant::fromLua(L, n+i)); - if (!vargs.back().get()) + if (vargs.back().getType() == Variant::UNKNOWN) { vargs.clear(); luaL_error(L, "Argument %d can't be stored safely\nExpected boolean, number, string or userdata.", n+i); return nullptr; } - - vargs.back()->release(); // fromLua gave a +1 ref. } return new Message(name, vargs); diff --git a/jni/love/src/modules/event/Event.h b/jni/love/src/modules/event/Event.h index 1ca6e947..d597855e 100644 --- a/jni/love/src/modules/event/Event.h +++ b/jni/love/src/modules/event/Event.h @@ -43,7 +43,7 @@ class Message : public Object { public: - Message(const std::string &name, const std::vector> &vargs = {}); + Message(const std::string &name, const std::vector &vargs = {}); ~Message(); int toLua(lua_State *L); @@ -52,7 +52,7 @@ public: private: std::string name; - std::vector> args; + std::vector args; }; // Message diff --git a/jni/love/src/modules/event/sdl/Event.cpp b/jni/love/src/modules/event/sdl/Event.cpp index 364f1570..52caa11c 100644 --- a/jni/love/src/modules/event/sdl/Event.cpp +++ b/jni/love/src/modules/event/sdl/Event.cpp @@ -150,7 +150,7 @@ Message *Event::convert(const SDL_Event &e) const { Message *msg = nullptr; - std::vector> vargs; + std::vector vargs; vargs.reserve(4); love::filesystem::Filesystem *filesystem = nullptr; @@ -192,9 +192,9 @@ Message *Event::convert(const SDL_Event &e) const if (!love::keyboard::Keyboard::getConstant(scancode, txt2)) txt2 = "unknown"; - vargs.push_back(new Variant(txt, strlen(txt))); - vargs.push_back(new Variant(txt2, strlen(txt2))); - vargs.push_back(new Variant(e.key.repeat != 0)); + vargs.emplace_back(txt, strlen(txt)); + vargs.emplace_back(txt2, strlen(txt2)); + vargs.emplace_back(e.key.repeat != 0); msg = new Message("keypressed", vargs); break; case SDL_KEYUP: @@ -209,20 +209,20 @@ Message *Event::convert(const SDL_Event &e) const if (!love::keyboard::Keyboard::getConstant(scancode, txt2)) txt2 = "unknown"; - vargs.push_back(new Variant(txt, strlen(txt))); - vargs.push_back(new Variant(txt2, strlen(txt2))); + vargs.emplace_back(txt, strlen(txt)); + vargs.emplace_back(txt2, strlen(txt2)); msg = new Message("keyreleased", vargs); break; case SDL_TEXTINPUT: txt = e.text.text; - vargs.push_back(new Variant(txt, strlen(txt))); + vargs.emplace_back(txt, strlen(txt)); msg = new Message("textinput", vargs); break; case SDL_TEXTEDITING: txt = e.edit.text; - vargs.push_back(new Variant(txt, strlen(txt))); - vargs.push_back(new Variant((double) e.edit.start)); - vargs.push_back(new Variant((double) e.edit.length)); + vargs.emplace_back(txt, strlen(txt)); + vargs.emplace_back((double) e.edit.start); + vargs.emplace_back((double) e.edit.length); msg = new Message("textedited", vargs); break; case SDL_MOUSEMOTION: @@ -233,11 +233,11 @@ Message *Event::convert(const SDL_Event &e) const double yrel = (double) e.motion.yrel; windowToPixelCoords(&x, &y); windowToPixelCoords(&xrel, &yrel); - vargs.push_back(new Variant(x)); - vargs.push_back(new Variant(y)); - vargs.push_back(new Variant(xrel)); - vargs.push_back(new Variant(yrel)); - vargs.push_back(new Variant(e.motion.which == SDL_TOUCH_MOUSEID)); + vargs.emplace_back(x); + vargs.emplace_back(y); + vargs.emplace_back(xrel); + vargs.emplace_back(yrel); + vargs.emplace_back(e.motion.which == SDL_TOUCH_MOUSEID); msg = new Message("mousemoved", vargs); } break; @@ -260,18 +260,18 @@ Message *Event::convert(const SDL_Event &e) const double x = (double) e.button.x; double y = (double) e.button.y; windowToPixelCoords(&x, &y); - vargs.push_back(new Variant(x)); - vargs.push_back(new Variant(y)); - vargs.push_back(new Variant((double) button)); - vargs.push_back(new Variant(e.button.which == SDL_TOUCH_MOUSEID)); + vargs.emplace_back(x); + vargs.emplace_back(y); + vargs.emplace_back((double) button); + vargs.emplace_back(e.button.which == SDL_TOUCH_MOUSEID); msg = new Message((e.type == SDL_MOUSEBUTTONDOWN) ? "mousepressed" : "mousereleased", vargs); } break; case SDL_MOUSEWHEEL: - vargs.push_back(new Variant((double) e.wheel.x)); - vargs.push_back(new Variant((double) e.wheel.y)); + vargs.emplace_back((double) e.wheel.x); + vargs.emplace_back((double) e.wheel.y); msg = new Message("wheelmoved", vargs); break; case SDL_FINGERDOWN: @@ -316,12 +316,12 @@ Message *Event::convert(const SDL_Event &e) const // bits as can fit in a pointer (for now.) // We use lightuserdata instead of a lua_Number (double) because doubles // can't represent all possible id values on 64-bit systems. - vargs.push_back(new Variant((void *) (intptr_t) touchinfo.id)); - vargs.push_back(new Variant(touchinfo.x)); - vargs.push_back(new Variant(touchinfo.y)); - vargs.push_back(new Variant(touchinfo.dx)); - vargs.push_back(new Variant(touchinfo.dy)); - vargs.push_back(new Variant(touchinfo.pressure)); + vargs.emplace_back((void *) (intptr_t) touchinfo.id); + vargs.emplace_back(touchinfo.x); + vargs.emplace_back(touchinfo.y); + vargs.emplace_back(touchinfo.dx); + vargs.emplace_back(touchinfo.dy); + vargs.emplace_back(touchinfo.pressure); if (e.type == SDL_FINGERDOWN) txt = "touchpressed"; @@ -356,7 +356,7 @@ Message *Event::convert(const SDL_Event &e) const if (filesystem->isRealDirectory(e.drop.file)) { - vargs.push_back(new Variant(e.drop.file, strlen(e.drop.file))); + vargs.emplace_back(e.drop.file, strlen(e.drop.file)); msg = new Message("directorydropped", vargs); } else @@ -364,7 +364,7 @@ Message *Event::convert(const SDL_Event &e) const Proxy proxy; proxy.object = new love::filesystem::DroppedFile(e.drop.file); proxy.type = FILESYSTEM_DROPPED_FILE_ID; - vargs.push_back(new Variant(proxy.type, &proxy)); + vargs.emplace_back(proxy.type, &proxy); msg = new Message("filedropped", vargs); proxy.object->release(); } @@ -382,13 +382,6 @@ Message *Event::convert(const SDL_Event &e) const break; } - // We gave +1 refs to the StrongRef list, so we should release them. - for (const StrongRef &v : vargs) - { - if (v.get() != nullptr) - v->release(); - } - return msg; } @@ -400,7 +393,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const Message *msg = nullptr; - std::vector> vargs; + std::vector vargs; vargs.reserve(4); Proxy proxy; @@ -418,8 +411,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const if (!proxy.object) break; - vargs.push_back(new Variant(proxy.type, (void *) &proxy)); - vargs.push_back(new Variant((double)(e.jbutton.button+1))); + vargs.emplace_back(proxy.type, (void *) &proxy); + vargs.emplace_back((double)(e.jbutton.button+1)); msg = new Message((e.type == SDL_JOYBUTTONDOWN) ? "joystickpressed" : "joystickreleased", vargs); @@ -431,10 +424,10 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const if (!proxy.object) break; - vargs.push_back(new Variant(proxy.type, (void *) &proxy)); - vargs.push_back(new Variant((double)(e.jaxis.axis+1))); + vargs.emplace_back(proxy.type, (void *) &proxy); + vargs.emplace_back((double)(e.jaxis.axis+1)); float value = joystick::Joystick::clampval(e.jaxis.value / 32768.0f); - vargs.push_back(new Variant((double) value)); + vargs.emplace_back((double) value); msg = new Message("joystickaxis", vargs); } break; @@ -447,9 +440,9 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const if (!proxy.object) break; - vargs.push_back(new Variant(proxy.type, (void *) &proxy)); - vargs.push_back(new Variant((double)(e.jhat.hat+1))); - vargs.push_back(new Variant(txt, strlen(txt))); + vargs.emplace_back(proxy.type, (void *) &proxy); + vargs.emplace_back((double)(e.jhat.hat+1)); + vargs.emplace_back(txt, strlen(txt)); msg = new Message("joystickhat", vargs); break; case SDL_CONTROLLERBUTTONDOWN: @@ -465,8 +458,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const if (!proxy.object) break; - vargs.push_back(new Variant(proxy.type, (void *) &proxy)); - vargs.push_back(new Variant(txt, strlen(txt))); + vargs.emplace_back(proxy.type, (void *) &proxy); + vargs.emplace_back(txt, strlen(txt)); msg = new Message(e.type == SDL_CONTROLLERBUTTONDOWN ? "gamepadpressed" : "gamepadreleased", vargs); break; @@ -481,11 +474,11 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const if (!proxy.object) break; - vargs.push_back(new Variant(proxy.type, (void *) &proxy)); + vargs.emplace_back(proxy.type, (void *) &proxy); - vargs.push_back(new Variant(txt, strlen(txt))); + vargs.emplace_back(txt, strlen(txt)); float value = joystick::Joystick::clampval(e.caxis.value / 32768.0f); - vargs.push_back(new Variant((double) value)); + vargs.emplace_back((double) value); msg = new Message("gamepadaxis", vargs); } break; @@ -495,7 +488,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const proxy.type = JOYSTICK_JOYSTICK_ID; if (proxy.object) { - vargs.push_back(new Variant(proxy.type, (void *) &proxy)); + vargs.emplace_back(proxy.type, (void *) &proxy); msg = new Message("joystickadded", vargs); } break; @@ -506,7 +499,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const if (proxy.object) { joymodule->removeJoystick((joystick::Joystick *) proxy.object); - vargs.push_back(new Variant(proxy.type, (void *) &proxy)); + vargs.emplace_back(proxy.type, (void *) &proxy); msg = new Message("joystickremoved", vargs); } break; @@ -514,13 +507,6 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const break; } - // We gave +1 refs to the StrongRef list, so we should release them. - for (const StrongRef &v : vargs) - { - if (v.get() != nullptr) - v->release(); - } - return msg; } @@ -528,7 +514,7 @@ Message *Event::convertWindowEvent(const SDL_Event &e) const { Message *msg = nullptr; - std::vector> vargs; + std::vector vargs; vargs.reserve(4); window::Window *win = nullptr; @@ -540,17 +526,17 @@ Message *Event::convertWindowEvent(const SDL_Event &e) const { case SDL_WINDOWEVENT_FOCUS_GAINED: case SDL_WINDOWEVENT_FOCUS_LOST: - vargs.push_back(new Variant(e.window.event == SDL_WINDOWEVENT_FOCUS_GAINED)); + vargs.emplace_back(e.window.event == SDL_WINDOWEVENT_FOCUS_GAINED); msg = new Message("focus", vargs); break; case SDL_WINDOWEVENT_ENTER: case SDL_WINDOWEVENT_LEAVE: - vargs.push_back(new Variant(e.window.event == SDL_WINDOWEVENT_ENTER)); + vargs.emplace_back(e.window.event == SDL_WINDOWEVENT_ENTER); msg = new Message("mousefocus", vargs); break; case SDL_WINDOWEVENT_SHOWN: case SDL_WINDOWEVENT_HIDDEN: - vargs.push_back(new Variant(e.window.event == SDL_WINDOWEVENT_SHOWN)); + vargs.emplace_back(e.window.event == SDL_WINDOWEVENT_SHOWN); msg = new Message("visible", vargs); break; case SDL_WINDOWEVENT_RESIZED: @@ -562,10 +548,10 @@ Message *Event::convertWindowEvent(const SDL_Event &e) const if (sdlwin) SDL_GL_GetDrawableSize(sdlwin, &px_w, &px_h); - vargs.push_back(new Variant((double) px_w)); - vargs.push_back(new Variant((double) px_h)); - vargs.push_back(new Variant((double) e.window.data1)); - vargs.push_back(new Variant((double) e.window.data2)); + vargs.emplace_back((double) px_w); + vargs.emplace_back((double) px_h); + vargs.emplace_back((double) e.window.data1); + vargs.emplace_back((double) e.window.data2); msg = new Message("resize", vargs); } break; @@ -591,13 +577,6 @@ Message *Event::convertWindowEvent(const SDL_Event &e) const break; } - // We gave +1 refs to the StrongRef list, so we should release them. - for (const StrongRef &v : vargs) - { - if (v.get() != nullptr) - v->release(); - } - return msg; } diff --git a/jni/love/src/modules/event/wrap_Event.cpp b/jni/love/src/modules/event/wrap_Event.cpp index 06aa53a3..06b9686f 100644 --- a/jni/love/src/modules/event/wrap_Event.cpp +++ b/jni/love/src/modules/event/wrap_Event.cpp @@ -74,16 +74,14 @@ int w_wait(lua_State *L) int w_push(lua_State *L) { - Message *m = Message::fromLua(L, 1); + StrongRef m(Message::fromLua(L, 1), Acquire::NORETAIN); - luax_pushboolean(L, m != nullptr); + luax_pushboolean(L, m.get() != nullptr); - if (m == nullptr) + if (m.get() == nullptr) return 1; instance()->push(m); - m->release(); - return 1; } @@ -95,18 +93,10 @@ int w_clear(lua_State *) int w_quit(lua_State *L) { - std::vector> args; + std::vector args = {Variant::fromLua(L, 1)}; - Variant *v = Variant::fromLua(L, 1); - if (v) - { - args.push_back(v); - v->release(); - } - - Message *m = new Message("quit", args); + StrongRef m(new Message("quit", args), Acquire::NORETAIN); instance()->push(m); - m->release(); luax_pushboolean(L, true); return 1; diff --git a/jni/love/src/modules/filesystem/FileData.cpp b/jni/love/src/modules/filesystem/FileData.cpp index 35ceefda..4e0f3972 100644 --- a/jni/love/src/modules/filesystem/FileData.cpp +++ b/jni/love/src/modules/filesystem/FileData.cpp @@ -78,7 +78,7 @@ bool FileData::getConstant(const char *in, Decoder &out) return decoders.find(in, out); } -bool FileData::getConstant(Decoder in, const char *&out) +bool FileData::getConstant(Decoder in, const char *&out) { return decoders.find(in, out); } diff --git a/jni/love/src/modules/filesystem/FileData.h b/jni/love/src/modules/filesystem/FileData.h index d2909dd4..7106cdb7 100644 --- a/jni/love/src/modules/filesystem/FileData.h +++ b/jni/love/src/modules/filesystem/FileData.h @@ -55,7 +55,7 @@ public: const std::string &getExtension() const; static bool getConstant(const char *in, Decoder &out); - static bool getConstant(Decoder in, const char *&out); + static bool getConstant(Decoder in, const char *&out); private: diff --git a/jni/love/src/modules/filesystem/physfs/Filesystem.cpp b/jni/love/src/modules/filesystem/physfs/Filesystem.cpp index 85dfc274..4d19d58f 100644 --- a/jni/love/src/modules/filesystem/physfs/Filesystem.cpp +++ b/jni/love/src/modules/filesystem/physfs/Filesystem.cpp @@ -519,7 +519,9 @@ std::string Filesystem::getAppdataDirectory() { if (appdata.empty()) { -#ifdef LOVE_WINDOWS +#ifdef LOVE_WINDOWS_UWP + appdata = getUserDirectory(); +#elif defined(LOVE_WINDOWS) wchar_t *w_appdata = _wgetenv(L"APPDATA"); appdata = to_utf8(w_appdata); replace_char(appdata, '\\', '/'); diff --git a/jni/love/src/modules/filesystem/physfs/Filesystem.h b/jni/love/src/modules/filesystem/physfs/Filesystem.h index 5d279da4..fcb207d1 100644 --- a/jni/love/src/modules/filesystem/physfs/Filesystem.h +++ b/jni/love/src/modules/filesystem/physfs/Filesystem.h @@ -62,7 +62,7 @@ public: bool mount(const char *archive, const char *mountpoint, bool appendToPath = false); bool unmount(const char *archive); - File *newFile(const char *filename) const; + love::filesystem::File *newFile(const char *filename) const; FileData *newFileData(void *data, unsigned int size, const char *filename) const; FileData *newFileData(const char *b64, const char *filename) const; diff --git a/jni/love/src/modules/filesystem/wrap_File.cpp b/jni/love/src/modules/filesystem/wrap_File.cpp index b0209dff..90e96c01 100644 --- a/jni/love/src/modules/filesystem/wrap_File.cpp +++ b/jni/love/src/modules/filesystem/wrap_File.cpp @@ -108,13 +108,13 @@ int w_File_isOpen(lua_State *L) int w_File_read(lua_State *L) { File *file = luax_checkfile(L, 1); - Data *d = 0; + StrongRef d = nullptr; int64 size = (int64) luaL_optnumber(L, 2, (lua_Number) File::ALL); try { - d = file->read(size); + d.set(file->read(size), Acquire::NORETAIN); } catch (love::Exception &e) { @@ -123,7 +123,6 @@ int w_File_read(lua_State *L) lua_pushlstring(L, (const char *) d->getData(), d->getSize()); lua_pushnumber(L, d->getSize()); - d->release(); return 2; } diff --git a/jni/love/src/modules/filesystem/wrap_Filesystem.cpp b/jni/love/src/modules/filesystem/wrap_Filesystem.cpp index e01b3840..a1e0b177 100644 --- a/jni/love/src/modules/filesystem/wrap_Filesystem.cpp +++ b/jni/love/src/modules/filesystem/wrap_Filesystem.cpp @@ -111,11 +111,20 @@ int w_getSource(lua_State *L) int w_mount(lua_State *L) { - const char *archive = luaL_checkstring(L, 1); + std::string archive; + + if (luax_istype(L, 1, FILESYSTEM_DROPPED_FILE_ID)) + { + DroppedFile *file = luax_totype(L, 1, FILESYSTEM_DROPPED_FILE_ID); + archive = file->getFilename(); + } + else + archive = luax_checkstring(L, 1); + const char *mountpoint = luaL_checkstring(L, 2); bool append = luax_optboolean(L, 3, false); - luax_pushboolean(L, instance()->mount(archive, mountpoint, append)); + luax_pushboolean(L, instance()->mount(archive.c_str(), mountpoint, append)); return 1; } @@ -209,6 +218,11 @@ FileData *luax_getfiledata(lua_State *L, int idx) return data; } +bool luax_cangetfiledata(lua_State *L, int idx) +{ + return lua_isstring(L, idx) || luax_istype(L, idx, FILESYSTEM_FILE_ID) || luax_istype(L, idx, FILESYSTEM_FILE_DATA_ID); +} + int w_newFileData(lua_State *L) { // Single argument: treat as filepath or File. @@ -223,17 +237,16 @@ int w_newFileData(lua_State *L) { File *file = luax_checkfile(L, 1); - FileData *data = 0; + StrongRef data; try { - data = file->read(); + data.set(file->read(), Acquire::NORETAIN); } catch (love::Exception &e) { return luax_ioError(L, "%s", e.what()); } luax_pushtype(L, FILESYSTEM_FILE_DATA_ID, data); - data->release(); return 1; } else diff --git a/jni/love/src/modules/filesystem/wrap_Filesystem.h b/jni/love/src/modules/filesystem/wrap_Filesystem.h index 0b27b326..a010fd77 100644 --- a/jni/love/src/modules/filesystem/wrap_Filesystem.h +++ b/jni/love/src/modules/filesystem/wrap_Filesystem.h @@ -39,6 +39,7 @@ namespace filesystem * May trigger a Lua error. **/ FileData *luax_getfiledata(lua_State *L, int idx); +bool luax_cangetfiledata(lua_State *L, int idx); File *luax_getfile(lua_State *L, int idx); bool hack_setupWriteDirectory(); diff --git a/jni/love/src/modules/font/BMFontRasterizer.cpp b/jni/love/src/modules/font/BMFontRasterizer.cpp index bda538d3..dd02634d 100644 --- a/jni/love/src/modules/font/BMFontRasterizer.cpp +++ b/jni/love/src/modules/font/BMFontRasterizer.cpp @@ -198,12 +198,11 @@ void BMFontRasterizer::parseConfig(const std::string &configtext) if (!imagemodule) throw love::Exception("Image module not loaded!"); - // Release these variables right away since StrongRef retains. - StrongRef data = filesystem->read(filename.c_str()); - data->release(); + // read() returns a retained ref already. + StrongRef data(filesystem->read(filename.c_str()), Acquire::NORETAIN); - images[pageindex].set(imagemodule->newImageData(data.get())); - images[pageindex]->release(); + // Same with newImageData. + images[pageindex].set(imagemodule->newImageData(data.get()), Acquire::NORETAIN); } } else if (tag == "char") diff --git a/jni/love/src/modules/font/Font.cpp b/jni/love/src/modules/font/Font.cpp index c3a67dbc..1aeb0eb2 100644 --- a/jni/love/src/modules/font/Font.cpp +++ b/jni/love/src/modules/font/Font.cpp @@ -43,9 +43,7 @@ public: Rasterizer *Font::newTrueTypeRasterizer(int size, TrueTypeRasterizer::Hinting hinting) { - StrongRef data(new DefaultFontData); - data->release(); - + StrongRef data(new DefaultFontData, Acquire::NORETAIN); return newTrueTypeRasterizer(data.get(), size, hinting); } diff --git a/jni/love/src/modules/font/GlyphData.cpp b/jni/love/src/modules/font/GlyphData.cpp index 485806bd..7a766522 100644 --- a/jni/love/src/modules/font/GlyphData.cpp +++ b/jni/love/src/modules/font/GlyphData.cpp @@ -40,18 +40,7 @@ GlyphData::GlyphData(uint32 glyph, GlyphMetrics glyphMetrics, GlyphData::Format , format(f) { if (metrics.width > 0 && metrics.height > 0) - { - switch (f) - { - case GlyphData::FORMAT_LUMINANCE_ALPHA: - data = new unsigned char[metrics.width * metrics.height * 2]; - break; - case GlyphData::FORMAT_RGBA: - default: - data = new unsigned char[metrics.width * metrics.height * 4]; - break; - } - } + data = new uint8[metrics.width * metrics.height * getPixelSize()]; } GlyphData::~GlyphData() @@ -61,22 +50,30 @@ GlyphData::~GlyphData() void *GlyphData::getData() const { - return (void *) data; + return data; +} + +size_t GlyphData::getPixelSize() const +{ + switch (format) + { + case FORMAT_LUMINANCE_ALPHA: + return 2; + case FORMAT_RGBA: + default: + return 4; + } +} + +void *GlyphData::getData(int x, int y) const +{ + size_t offset = (y * getWidth() + x) * getPixelSize(); + return data + offset; } size_t GlyphData::getSize() const { - switch (format) - { - case GlyphData::FORMAT_LUMINANCE_ALPHA: - return size_t(getWidth() * getHeight() * 2); - break; - case GlyphData::FORMAT_RGBA: - default: - return size_t(getWidth() * getHeight() * 4); - break; - } - + return size_t(getWidth() * getHeight()) * getPixelSize(); } int GlyphData::getHeight() const @@ -133,22 +130,22 @@ int GlyphData::getBearingY() const int GlyphData::getMinX() const { - return this->getBearingX(); + return getBearingX(); } int GlyphData::getMinY() const { - return this->getHeight() - this->getBearingY(); + return getHeight() - getBearingY(); } int GlyphData::getMaxX() const { - return this->getBearingX() + this->getWidth(); + return getBearingX() + getWidth(); } int GlyphData::getMaxY() const { - return this->getBearingY(); + return getBearingY(); } GlyphData::Format GlyphData::getFormat() const @@ -168,8 +165,8 @@ bool GlyphData::getConstant(GlyphData::Format in, const char *&out) StringMap::Entry GlyphData::formatEntries[] = { - {"luminancealpha", GlyphData::FORMAT_LUMINANCE_ALPHA}, - {"rgba", GlyphData::FORMAT_RGBA}, + {"luminancealpha", FORMAT_LUMINANCE_ALPHA}, + {"rgba", FORMAT_RGBA}, }; StringMap GlyphData::formats(GlyphData::formatEntries, sizeof(GlyphData::formatEntries)); diff --git a/jni/love/src/modules/font/GlyphData.h b/jni/love/src/modules/font/GlyphData.h index 5f8b188a..a7011895 100644 --- a/jni/love/src/modules/font/GlyphData.h +++ b/jni/love/src/modules/font/GlyphData.h @@ -69,6 +69,16 @@ public: void *getData() const; size_t getSize() const; + /** + * Gets the data starting at a specific pixel in the glyph. + **/ + void *getData(int x, int y) const; + + /** + * Gets the size in bytes of each pixel in the glyph. + **/ + size_t getPixelSize() const; + /** * Gets the height of the glyph. **/ @@ -141,7 +151,7 @@ private: GlyphMetrics metrics; // Glyph texture data. - unsigned char *data; + uint8 *data; // The format the data's in. Format format; diff --git a/jni/love/src/modules/font/freetype/TrueTypeRasterizer.cpp b/jni/love/src/modules/font/freetype/TrueTypeRasterizer.cpp index 8fea1b64..1c67ef00 100644 --- a/jni/love/src/modules/font/freetype/TrueTypeRasterizer.cpp +++ b/jni/love/src/modules/font/freetype/TrueTypeRasterizer.cpp @@ -168,7 +168,11 @@ bool TrueTypeRasterizer::hasGlyph(uint32 glyph) const float TrueTypeRasterizer::getKerning(uint32 leftglyph, uint32 rightglyph) const { FT_Vector kerning = {}; - FT_Get_Kerning(face, leftglyph, rightglyph, FT_KERNING_DEFAULT, &kerning); + FT_Get_Kerning(face, + FT_Get_Char_Index(face, leftglyph), + FT_Get_Char_Index(face, rightglyph), + FT_KERNING_DEFAULT, + &kerning); return float(kerning.x >> 6); } diff --git a/jni/love/src/modules/graphics/Graphics.cpp b/jni/love/src/modules/graphics/Graphics.cpp index 44337d10..f726fc17 100644 --- a/jni/love/src/modules/graphics/Graphics.cpp +++ b/jni/love/src/modules/graphics/Graphics.cpp @@ -142,14 +142,14 @@ bool Graphics::getConstant(CompareMode in, const char *&out) return compareModes.find(in, out); } -bool Graphics::getConstant(const char *in, Support &out) +bool Graphics::getConstant(const char *in, Feature &out) { - return support.find(in, out); + return features.find(in, out); } -bool Graphics::getConstant(Support in, const char *&out) +bool Graphics::getConstant(Feature in, const char *&out) { - return support.find(in, out); + return features.find(in, out); } bool Graphics::getConstant(const char *in, SystemLimit &out) @@ -172,16 +172,6 @@ bool Graphics::getConstant(StackType in, const char *&out) return stackTypes.find(in, out); } -bool Graphics::getConstant(const char *in, StatType &out) -{ - return statTypes.find(in, out); -} - -bool Graphics::getConstant(StatType in, const char *&out) -{ - return statTypes.find(in, out); -} - StringMap::Entry Graphics::drawModeEntries[] = { { "line", DRAW_LINE }, @@ -263,14 +253,14 @@ StringMap::Entry Graphics::co StringMap Graphics::compareModes(Graphics::compareModeEntries, sizeof(Graphics::compareModeEntries)); -StringMap::Entry Graphics::supportEntries[] = +StringMap::Entry Graphics::featureEntries[] = { - { "multicanvasformats", SUPPORT_MULTI_CANVAS_FORMATS }, - { "clampzero", SUPPORT_CLAMP_ZERO }, - { "lighten", SUPPORT_LIGHTEN }, + { "multicanvasformats", FEATURE_MULTI_CANVAS_FORMATS }, + { "clampzero", FEATURE_CLAMP_ZERO }, + { "lighten", FEATURE_LIGHTEN }, }; -StringMap Graphics::support(Graphics::supportEntries, sizeof(Graphics::supportEntries)); +StringMap Graphics::features(Graphics::featureEntries, sizeof(Graphics::featureEntries)); StringMap::Entry Graphics::systemLimitEntries[] = { @@ -290,17 +280,5 @@ StringMap::Entry Graphics::stackT StringMap Graphics::stackTypes(Graphics::stackTypeEntries, sizeof(Graphics::stackTypeEntries)); -StringMap::Entry Graphics::statTypeEntries[] = -{ - { "drawcalls", STAT_DRAW_CALLS }, - { "canvasswitches", STAT_CANVAS_SWITCHES }, - { "canvases", STAT_CANVASES }, - { "images", STAT_IMAGES }, - { "fonts", STAT_FONTS }, - { "texturememory", STAT_TEXTURE_MEMORY }, -}; - -StringMap Graphics::statTypes(Graphics::statTypeEntries, sizeof(Graphics::statTypeEntries)); - } // graphics } // love diff --git a/jni/love/src/modules/graphics/Graphics.h b/jni/love/src/modules/graphics/Graphics.h index eb37c4d0..06e55db5 100644 --- a/jni/love/src/modules/graphics/Graphics.h +++ b/jni/love/src/modules/graphics/Graphics.h @@ -136,12 +136,12 @@ public: COMPARE_MAX_ENUM }; - enum Support + enum Feature { - SUPPORT_MULTI_CANVAS_FORMATS, - SUPPORT_CLAMP_ZERO, - SUPPORT_LIGHTEN, - SUPPORT_MAX_ENUM + FEATURE_MULTI_CANVAS_FORMATS, + FEATURE_CLAMP_ZERO, + FEATURE_LIGHTEN, + FEATURE_MAX_ENUM }; enum Renderer @@ -167,17 +167,6 @@ public: STACK_MAX_ENUM }; - enum StatType - { - STAT_DRAW_CALLS, - STAT_CANVAS_SWITCHES, - STAT_CANVASES, - STAT_IMAGES, - STAT_FONTS, - STAT_TEXTURE_MEMORY, - STAT_MAX_ENUM - }; - struct RendererInfo { std::string name; @@ -190,6 +179,7 @@ public: { int drawCalls; int canvasSwitches; + int shaderSwitches; int canvases; int images; int fonts; @@ -291,8 +281,8 @@ public: static bool getConstant(const char *in, CompareMode &out); static bool getConstant(CompareMode in, const char *&out); - static bool getConstant(const char *in, Support &out); - static bool getConstant(Support in, const char *&out); + static bool getConstant(const char *in, Feature &out); + static bool getConstant(Feature in, const char *&out); static bool getConstant(const char *in, SystemLimit &out); static bool getConstant(SystemLimit in, const char *&out); @@ -300,9 +290,6 @@ public: static bool getConstant(const char *in, StackType &out); static bool getConstant(StackType in, const char *&out); - static bool getConstant(const char *in, StatType &out); - static bool getConstant(StatType in, const char *&out); - private: static StringMap::Entry drawModeEntries[]; @@ -329,8 +316,8 @@ private: static StringMap::Entry compareModeEntries[]; static StringMap compareModes; - static StringMap::Entry supportEntries[]; - static StringMap support; + static StringMap::Entry featureEntries[]; + static StringMap features; static StringMap::Entry systemLimitEntries[]; static StringMap systemLimits; @@ -338,9 +325,6 @@ private: static StringMap::Entry stackTypeEntries[]; static StringMap stackTypes; - static StringMap::Entry statTypeEntries[]; - static StringMap statTypes; - }; // Graphics } // graphics diff --git a/jni/love/src/modules/graphics/ParticleSystem.cpp b/jni/love/src/modules/graphics/ParticleSystem.cpp index 377d5e14..fdb445fc 100644 --- a/jni/love/src/modules/graphics/ParticleSystem.cpp +++ b/jni/love/src/modules/graphics/ParticleSystem.cpp @@ -242,6 +242,7 @@ void ParticleSystem::initParticle(Particle *p, float t) p->position = pos; + float rand_x, rand_y; switch (areaSpreadDistribution) { case DISTRIBUTION_UNIFORM: @@ -252,6 +253,12 @@ void ParticleSystem::initParticle(Particle *p, float t) p->position.x += (float) rng.randomNormal(areaSpread.getX()); p->position.y += (float) rng.randomNormal(areaSpread.getY()); break; + case DISTRIBUTION_ELLIPSE: + rand_x = (float) rng.random(-1, 1); + rand_y = (float) rng.random(-1, 1); + p->position.x += areaSpread.getX() * (rand_x * sqrt(1 - 0.5f*pow(rand_y, 2))); + p->position.y += areaSpread.getY() * (rand_y * sqrt(1 - 0.5f*pow(rand_x, 2))); + break; case DISTRIBUTION_NONE: default: break; @@ -437,6 +444,9 @@ void ParticleSystem::setEmissionRate(float rate) if (rate < 0.0f) throw love::Exception("Invalid emission rate"); emissionRate = rate; + + // Prevent an explosion when dramatically increasing the rate + emitCounter = std::min(emitCounter, 1.0f/rate); } float ParticleSystem::getEmissionRate() const @@ -932,9 +942,6 @@ void ParticleSystem::update(float dt) addParticle(1.0f - (emitCounter - rate) / total); emitCounter -= rate; } - /*int particles = (int)(emissionRate * dt); - for (int i = 0; i != particles; i++) - add();*/ life -= dt; if (lifetime != -1 && life < 0) @@ -969,6 +976,7 @@ StringMap ParticleSystem::distributions(ParticleSystem::distributionsEntries, sizeof(ParticleSystem::distributionsEntries)); diff --git a/jni/love/src/modules/graphics/ParticleSystem.h b/jni/love/src/modules/graphics/ParticleSystem.h index cae0307d..b95941c3 100644 --- a/jni/love/src/modules/graphics/ParticleSystem.h +++ b/jni/love/src/modules/graphics/ParticleSystem.h @@ -46,13 +46,14 @@ class ParticleSystem : public Drawable { public: /** - * Type of distribution new particles are drawn from: None, uniform, normal. + * Type of distribution new particles are drawn from: None, uniform, normal, ellipse. */ enum AreaSpreadDistribution { DISTRIBUTION_NONE, DISTRIBUTION_UNIFORM, DISTRIBUTION_NORMAL, + DISTRIBUTION_ELLIPSE, DISTRIBUTION_MAX_ENUM }; diff --git a/jni/love/src/modules/graphics/Quad.cpp b/jni/love/src/modules/graphics/Quad.cpp index 9a0ebf85..2bc656c9 100644 --- a/jni/love/src/modules/graphics/Quad.cpp +++ b/jni/love/src/modules/graphics/Quad.cpp @@ -79,6 +79,16 @@ Quad::Viewport Quad::getViewport() const return viewport; } +double Quad::getTextureWidth() const +{ + return sw; +} + +double Quad::getTextureHeight() const +{ + return sh; +} + const Vertex *Quad::getVertices() const { return vertices; diff --git a/jni/love/src/modules/graphics/Quad.h b/jni/love/src/modules/graphics/Quad.h index 15220e49..26e06f3d 100644 --- a/jni/love/src/modules/graphics/Quad.h +++ b/jni/love/src/modules/graphics/Quad.h @@ -47,6 +47,9 @@ public: void setViewport(const Viewport &v); Viewport getViewport() const; + double getTextureWidth() const; + double getTextureHeight() const; + const Vertex *getVertices() const; private: diff --git a/jni/love/src/modules/graphics/opengl/Canvas.cpp b/jni/love/src/modules/graphics/opengl/Canvas.cpp index b58420f3..2f704c9f 100644 --- a/jni/love/src/modules/graphics/opengl/Canvas.cpp +++ b/jni/love/src/modules/graphics/opengl/Canvas.cpp @@ -352,7 +352,7 @@ bool Canvas::setWrap(const Texture::Wrap &w) wrap = w; if ((GLAD_ES_VERSION_2_0 && !(GLAD_ES_VERSION_3_0 || GLAD_OES_texture_npot)) - && (width != next_p2(width) || height != next_p2(height))) + && (width != nextP2(width) || height != nextP2(height))) { if (wrap.s != WRAP_CLAMP || wrap.t != WRAP_CLAMP) success = false; @@ -501,13 +501,15 @@ void Canvas::startGrab() gl.setFramebufferSRGB(false); } - if (attachedCanvases.size() == 0) - return; + if (attachedCanvases.size() > 0) + { + // Make sure the FBO is only using a single draw buffer. + // GLES3 only has glDrawBuffers, so we avoid using glDrawBuffer. + const GLenum buffers[] = {GL_COLOR_ATTACHMENT0}; + glDrawBuffers(1, buffers); - // Make sure the FBO is only using a single draw buffer. - glDrawBuffer(GL_COLOR_ATTACHMENT0); - - attachedCanvases.clear(); + attachedCanvases.clear(); + } } void Canvas::stopGrab(bool switchingToOtherCanvas) @@ -521,7 +523,8 @@ void Canvas::stopGrab(bool switchingToOtherCanvas) // Make sure the canvas texture is up to date if we're using MSAA. resolveMSAA(false); - gl.matrices.projection.pop_back(); + if (gl.matrices.projection.size() > 1) + gl.matrices.projection.pop_back(); if (!switchingToOtherCanvas) { @@ -552,14 +555,18 @@ bool Canvas::checkCreateStencil() gl.bindFramebuffer(GL_FRAMEBUFFER, fbo); GLenum format = GL_STENCIL_INDEX8; - GLenum attachment = GL_STENCIL_ATTACHMENT; + std::vector attachments = {GL_STENCIL_ATTACHMENT}; // Prefer a combined depth/stencil buffer. - if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_object - || GLAD_EXT_packed_depth_stencil || GLAD_OES_packed_depth_stencil) + if (GLAD_ES_VERSION_3_0 || GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_object) { format = GL_DEPTH24_STENCIL8; - attachment = GL_DEPTH_STENCIL_ATTACHMENT; + attachments = {GL_DEPTH_STENCIL_ATTACHMENT}; + } + else if (GLAD_EXT_packed_depth_stencil || GLAD_OES_packed_depth_stencil) + { + format = GL_DEPTH24_STENCIL8; + attachments = {GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT}; } glGenRenderbuffers(1, &depth_stencil); @@ -570,8 +577,9 @@ bool Canvas::checkCreateStencil() else glRenderbufferStorage(GL_RENDERBUFFER, format, width, height); - // Attach the stencil buffer to the framebuffer object. - glFramebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, depth_stencil); + // Attach the buffer to the framebuffer object. + for (GLenum attachment : attachments) + glFramebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, depth_stencil); glBindRenderbuffer(GL_RENDERBUFFER, 0); diff --git a/jni/love/src/modules/graphics/opengl/Font.cpp b/jni/love/src/modules/graphics/opengl/Font.cpp index 5e5e071e..867b70e3 100644 --- a/jni/love/src/modules/graphics/opengl/Font.cpp +++ b/jni/love/src/modules/graphics/opengl/Font.cpp @@ -25,6 +25,7 @@ #include "common/math.h" #include "common/Matrix.h" +#include "graphics/Graphics.h" #include #include @@ -112,12 +113,36 @@ Font::TextureSize Font::getNextTextureSize() const return size; } +GLenum Font::getTextureFormat(FontType fontType, GLenum *internalformat) const +{ + GLenum format = fontType == FONT_TRUETYPE ? GL_LUMINANCE_ALPHA : GL_RGBA; + GLenum iformat = fontType == FONT_TRUETYPE ? GL_LUMINANCE8_ALPHA8 : GL_RGBA8; + + if (format == GL_RGBA && isGammaCorrect()) + { + // In ES2, the internalformat and format params of TexImage must match. + // ES3 doesn't allow "GL_SRGB_ALPHA" as the internal format. But it also + // requires GL_LUMINANCE_ALPHA rather than GL_LUMINANCE8_ALPHA8 as the + // internal format, for LA. + if (GLAD_ES_VERSION_2_0 && !GLAD_ES_VERSION_3_0) + format = iformat = GL_SRGB_ALPHA; + else + iformat = GL_SRGB8_ALPHA8; + } + else if (GLAD_ES_VERSION_2_0) + iformat = format; + + if (internalformat != nullptr) + *internalformat = iformat; + + return format; +} + void Font::createTexture() { OpenGL::TempDebugGroup debuggroup("Font create texture"); - GLenum format = type == FONT_TRUETYPE ? GL_LUMINANCE_ALPHA : GL_RGBA; - size_t bpp = format == GL_LUMINANCE_ALPHA ? 2 : 4; + size_t bpp = type == FONT_TRUETYPE ? 2 : 4; size_t prevmemsize = textureMemorySize; if (prevmemsize > 0) @@ -151,13 +176,8 @@ void Font::createTexture() glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - GLenum internalformat = type == FONT_TRUETYPE ? GL_LUMINANCE8_ALPHA8 : GL_RGBA8; - - // In GLES2, the internalformat and format params of TexImage have to match. - // There is still no GL_LUMINANCE8_ALPHA8 in GLES3, so we have to use - // GL_LUMINANCE_ALPHA even on ES3. - if (GLAD_ES_VERSION_2_0) - internalformat = format; + GLenum internalformat = GL_RGBA; + GLenum format = getTextureFormat(type, &internalformat); // Initialize the texture with transparent black. std::vector emptydata(size.width * size.height * bpp, 0); @@ -232,7 +252,7 @@ love::font::GlyphData *Font::getRasterizerGlyphData(uint32 glyph) const Font::Glyph &Font::addGlyph(uint32 glyph) { - love::font::GlyphData *gd = getRasterizerGlyphData(glyph); + StrongRef gd(getRasterizerGlyphData(glyph), Acquire::NORETAIN); int w = gd->getWidth(); int h = gd->getHeight(); @@ -244,18 +264,15 @@ const Font::Glyph &Font::addGlyph(uint32 glyph) textureY += rowHeight; rowHeight = TEXTURE_PADDING; } + if (textureY + h + TEXTURE_PADDING > textureHeight) { // totally out of space - new texture! - try - { - createTexture(); - } - catch (love::Exception &) - { - gd->release(); - throw; - } + createTexture(); + + // Makes sure the above code for checking if the glyph can fit at + // the current position in the texture is run again for this glyph. + return addGlyph(glyph); } Glyph g; @@ -268,14 +285,12 @@ const Font::Glyph &Font::addGlyph(uint32 glyph) // don't waste space for empty glyphs. also fixes a divide by zero bug with ATI drivers if (w > 0 && h > 0) { - const GLuint t = textures.back(); + GLenum format = getTextureFormat(type); + g.texture = textures.back(); - gl.bindTexture(t); + gl.bindTexture(g.texture); glTexSubImage2D(GL_TEXTURE_2D, 0, textureX, textureY, w, h, - (type == FONT_TRUETYPE ? GL_LUMINANCE_ALPHA : GL_RGBA), - GL_UNSIGNED_BYTE, gd->getData()); - - g.texture = t; + format, GL_UNSIGNED_BYTE, gd->getData()); double tX = (double) textureX, tY = (double) textureY; double tWidth = (double) textureWidth, tHeight = (double) textureHeight; @@ -300,18 +315,12 @@ const Font::Glyph &Font::addGlyph(uint32 glyph) g.vertices[i].x += gd->getBearingX(); g.vertices[i].y -= gd->getBearingY(); } + + textureX += w + TEXTURE_PADDING; + rowHeight = std::max(rowHeight, h + TEXTURE_PADDING); } - if (w > 0) - textureX += (w + TEXTURE_PADDING); - - if (h > 0) - rowHeight = std::max(rowHeight, h + TEXTURE_PADDING); - - gd->release(); - const auto p = glyphs.insert(std::make_pair(glyph, g)); - return p.first->second; } @@ -378,6 +387,11 @@ void Font::getCodepointsFromString(const std::vector &strs, Color for (const ColoredString &cstr : strs) { + // No need to add the color if the string is empty anyway, and the code + // further on assumes no two colors share the same starting position. + if (cstr.str.size() == 0) + continue; + IndexedColor c = {cstr.color, (int) codepoints.cps.size()}; codepoints.colors.push_back(c); diff --git a/jni/love/src/modules/graphics/opengl/Font.h b/jni/love/src/modules/graphics/opengl/Font.h index d37a7005..f457f488 100644 --- a/jni/love/src/modules/graphics/opengl/Font.h +++ b/jni/love/src/modules/graphics/opengl/Font.h @@ -195,7 +195,7 @@ public: uint32 getTextureCacheID() const; static bool getConstant(const char *in, AlignMode &out); - static bool getConstant(AlignMode in, const char *&out); + static bool getConstant(AlignMode in, const char *&out); static int fontCount; @@ -222,6 +222,7 @@ private: }; TextureSize getNextTextureSize() const; + GLenum getTextureFormat(FontType fontType, GLenum *internalformat = nullptr) const; void createTexture(); love::font::GlyphData *getRasterizerGlyphData(uint32 glyph); const Glyph &addGlyph(uint32 glyph); diff --git a/jni/love/src/modules/graphics/opengl/GLBuffer.cpp b/jni/love/src/modules/graphics/opengl/GLBuffer.cpp index 6658e8fd..8c7c482c 100644 --- a/jni/love/src/modules/graphics/opengl/GLBuffer.cpp +++ b/jni/love/src/modules/graphics/opengl/GLBuffer.cpp @@ -58,12 +58,10 @@ GLBuffer::GLBuffer(size_t size, const void *data, GLenum target, GLenum usage, u if (data != nullptr) memcpy(memory_map, data, size); - bool ok = load(data != nullptr); - - if (!ok) + if (!load(data != nullptr)) { delete[] memory_map; - throw love::Exception("Could not load VBO."); + throw love::Exception("Could not load vertex buffer (out of VRAM?)"); } } @@ -221,13 +219,16 @@ bool GLBuffer::load(bool restore) GLBuffer::Bind bind(*this); + while (glGetError() != GL_NO_ERROR) + /* Clear the error buffer. */; + // Copy the old buffer only if 'restore' was requested. const GLvoid *src = restore ? memory_map : nullptr; // Note that if 'src' is '0', no data will be copied. glBufferData(getTarget(), (GLsizeiptr) getSize(), src, getUsage()); - return true; + return (glGetError() == GL_NO_ERROR); } void GLBuffer::unload() @@ -278,7 +279,7 @@ QuadIndices::QuadIndices(size_t size) } catch (std::bad_alloc &) { - delete[] newbuffer; + delete newbuffer; delete[] newindices; throw love::Exception("Out of memory."); } diff --git a/jni/love/src/modules/graphics/opengl/Graphics.cpp b/jni/love/src/modules/graphics/opengl/Graphics.cpp index 5ab7608e..ebc8a135 100644 --- a/jni/love/src/modules/graphics/opengl/Graphics.cpp +++ b/jni/love/src/modules/graphics/opengl/Graphics.cpp @@ -203,11 +203,10 @@ void Graphics::checkSetDefaultFont() if (!fontmodule) throw love::Exception("Font module has not been loaded."); - StrongRef r(fontmodule->newTrueTypeRasterizer(12, font::TrueTypeRasterizer::HINTING_NORMAL)); - r->release(); + auto hinting = font::TrueTypeRasterizer::HINTING_NORMAL; + StrongRef r(fontmodule->newTrueTypeRasterizer(12, hinting), Acquire::NORETAIN); - defaultFont.set(newFont(r.get())); - defaultFont->release(); + defaultFont.set(newFont(r.get()), Acquire::NORETAIN); } states.back().font.set(defaultFont.get()); @@ -253,8 +252,6 @@ bool Graphics::setMode(int width, int height) created = true; - setViewportSize(width, height); - // Enable blending glEnable(GL_BLEND); @@ -311,6 +308,8 @@ bool Graphics::setMode(int width, int height) if (quadIndices == nullptr) quadIndices = new QuadIndices(20); + setViewportSize(width, height); + // Restore the graphics state. restoreState(states.back()); @@ -318,18 +317,20 @@ bool Graphics::setMode(int width, int height) pixelSizeStack.reserve(5); pixelSizeStack.push_back(1); + int gammacorrect = isGammaCorrect() ? 1 : 0; + // We always need a default shader. if (!Shader::defaultShader) { Renderer renderer = GLAD_ES_VERSION_2_0 ? RENDERER_OPENGLES : RENDERER_OPENGL; - Shader::defaultShader = newShader(Shader::defaultCode[renderer]); + Shader::defaultShader = newShader(Shader::defaultCode[renderer][gammacorrect]); } // and a default video shader. if (!Shader::defaultVideoShader) { Renderer renderer = GLAD_ES_VERSION_2_0 ? RENDERER_OPENGLES : RENDERER_OPENGL; - Shader::defaultVideoShader = newShader(Shader::defaultVideoCode[renderer]); + Shader::defaultVideoShader = newShader(Shader::defaultVideoCode[renderer][gammacorrect]); } // A shader should always be active, but the default shader shouldn't be @@ -451,8 +452,8 @@ void Graphics::clear(Colorf c) { // This seems to be enough to fix the bug for me. Other methods I've // tried (e.g. dummy draws) don't work in all cases. - glUseProgram(0); - glUseProgram(Shader::current->getProgram()); + gl.useProgram(0); + gl.useProgram(Shader::current->getProgram()); } } @@ -529,8 +530,8 @@ void Graphics::clear(const std::vector &colors) { // This seems to be enough to fix the bug for me. Other methods I've // tried (e.g. dummy draws) don't work in all cases. - glUseProgram(0); - glUseProgram(Shader::current->getProgram()); + gl.useProgram(0); + gl.useProgram(Shader::current->getProgram()); } } @@ -609,6 +610,7 @@ void Graphics::present() // Reset the per-frame stat counts. gl.stats.drawCalls = 0; gl.stats.framebufferBinds = 0; + gl.stats.shaderSwitches = 0; } int Graphics::getWidth() const @@ -1106,7 +1108,7 @@ void Graphics::setBlendMode(BlendMode mode, BlendAlpha alphamode) if (mode == BLEND_LIGHTEN || mode == BLEND_DARKEN) { - if (!isSupported(SUPPORT_LIGHTEN)) + if (!isSupported(FEATURE_LIGHTEN)) throw love::Exception("The 'lighten' and 'darken' blend modes are not supported on this system."); } @@ -1652,6 +1654,7 @@ Graphics::Stats Graphics::getStats() const stats.drawCalls = gl.stats.drawCalls; stats.canvasSwitches = gl.stats.framebufferBinds; + stats.shaderSwitches = gl.stats.shaderSwitches; stats.canvases = Canvas::canvasCount; stats.images = Image::imageCount; stats.fonts = Font::fontCount; @@ -1662,13 +1665,10 @@ Graphics::Stats Graphics::getStats() const double Graphics::getSystemLimit(SystemLimit limittype) const { - GLfloat limits[2]; - switch (limittype) { case Graphics::LIMIT_POINT_SIZE: - glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, limits); - return (double) limits[1]; + return (double) gl.getMaxPointSize(); case Graphics::LIMIT_TEXTURE_SIZE: return (double) gl.getMaxTextureSize(); case Graphics::LIMIT_MULTI_CANVAS: @@ -1680,15 +1680,15 @@ double Graphics::getSystemLimit(SystemLimit limittype) const } } -bool Graphics::isSupported(Support feature) const +bool Graphics::isSupported(Feature feature) const { switch (feature) { - case SUPPORT_MULTI_CANVAS_FORMATS: + case FEATURE_MULTI_CANVAS_FORMATS: return Canvas::isMultiFormatMultiCanvasSupported(); - case SUPPORT_CLAMP_ZERO: + case FEATURE_CLAMP_ZERO: return gl.isClampZeroTextureWrapSupported(); - case SUPPORT_LIGHTEN: + case FEATURE_LIGHTEN: return GLAD_VERSION_1_4 || GLAD_ES_VERSION_3_0 || GLAD_EXT_blend_minmax; default: return false; diff --git a/jni/love/src/modules/graphics/opengl/Graphics.h b/jni/love/src/modules/graphics/opengl/Graphics.h index f1103354..993e62cb 100644 --- a/jni/love/src/modules/graphics/opengl/Graphics.h +++ b/jni/love/src/modules/graphics/opengl/Graphics.h @@ -468,7 +468,7 @@ public: /** * Gets whether a graphics feature is supported on this system. **/ - bool isSupported(Support feature) const; + bool isSupported(Feature feature) const; void push(StackType type = STACK_TRANSFORM); void pop(); diff --git a/jni/love/src/modules/graphics/opengl/Image.cpp b/jni/love/src/modules/graphics/opengl/Image.cpp index 43190b3d..ab4a4a37 100644 --- a/jni/love/src/modules/graphics/opengl/Image.cpp +++ b/jni/love/src/modules/graphics/opengl/Image.cpp @@ -133,7 +133,11 @@ Image::Image(const std::vector &compressedda if (compresseddata[0]->getMipmapCount() == 1) this->flags.mipmaps = false; else - throw love::Exception("Image cannot have mipmaps: compressed image data does not have all required mipmap levels."); + { + throw love::Exception("Image cannot have mipmaps: compressed image data does not have all required mipmap levels (expected %d, got %d)", + getMipmapCount(width, height), + compresseddata[0]->getMipmapCount()); + } } for (const auto &cd : compresseddata) @@ -217,8 +221,8 @@ void Image::loadDefaultTexture() setFilter(filter); // A nice friendly checkerboard to signify invalid textures... - GLubyte px[] = {0xFF,0xFF,0xFF,0xFF, 0xFF,0xC0,0xC0,0xFF, - 0xFF,0xC0,0xC0,0xFF, 0xFF,0xFF,0xFF,0xFF}; + GLubyte px[] = {0xFF,0xFF,0xFF,0xFF, 0xFF,0xA0,0xA0,0xFF, + 0xFF,0xA0,0xA0,0xFF, 0xFF,0xFF,0xFF,0xFF}; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, px); } @@ -308,7 +312,7 @@ bool Image::loadVolatile() // NPOT textures don't support mipmapping without full NPOT support. if ((GLAD_ES_VERSION_2_0 && !(GLAD_ES_VERSION_3_0 || GLAD_OES_texture_npot)) - && (width != next_p2(width) || height != next_p2(height))) + && (width != nextP2(width) || height != nextP2(height))) { flags.mipmaps = false; filter.mipmap = FILTER_NONE; @@ -519,7 +523,7 @@ bool Image::setWrap(const Texture::Wrap &w) wrap = w; if ((GLAD_ES_VERSION_2_0 && !(GLAD_ES_VERSION_3_0 || GLAD_OES_texture_npot)) - && (width != next_p2(width) || height != next_p2(height))) + && (width != nextP2(width) || height != nextP2(height))) { if (wrap.s != WRAP_CLAMP || wrap.t != WRAP_CLAMP) success = false; diff --git a/jni/love/src/modules/graphics/opengl/OpenGL.cpp b/jni/love/src/modules/graphics/opengl/OpenGL.cpp index 42319a29..bb084993 100644 --- a/jni/love/src/modules/graphics/opengl/OpenGL.cpp +++ b/jni/love/src/modules/graphics/opengl/OpenGL.cpp @@ -289,6 +289,10 @@ void OpenGL::initMaxValues() maxRenderbufferSamples = 0; glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits); + + GLfloat limits[2]; + glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, limits); + maxPointSize = limits[1]; } void OpenGL::initMatrices() @@ -491,6 +495,12 @@ void OpenGL::bindFramebuffer(GLenum target, GLuint framebuffer) ++stats.framebufferBinds; } +void OpenGL::useProgram(GLuint program) +{ + glUseProgram(program); + ++stats.shaderSwitches; +} + GLuint OpenGL::getDefaultFBO() const { #ifdef LOVE_IOS @@ -656,6 +666,11 @@ int OpenGL::getMaxTextureUnits() const return maxTextureUnits; } +float OpenGL::getMaxPointSize() const +{ + return maxPointSize; +} + void OpenGL::updateTextureMemorySize(size_t oldsize, size_t newsize) { int64 memsize = (int64) stats.textureMemory + ((int64) newsize - (int64) oldsize); diff --git a/jni/love/src/modules/graphics/opengl/OpenGL.h b/jni/love/src/modules/graphics/opengl/OpenGL.h index 7ec94093..8b89f018 100644 --- a/jni/love/src/modules/graphics/opengl/OpenGL.h +++ b/jni/love/src/modules/graphics/opengl/OpenGL.h @@ -167,6 +167,7 @@ public: size_t textureMemory; int drawCalls; int framebufferBinds; + int shaderSwitches; } stats; struct Bugs @@ -305,6 +306,11 @@ public: **/ void bindFramebuffer(GLenum target, GLuint framebuffer); + /** + * Calls glUseProgram. + **/ + void useProgram(GLuint program); + /** * This will usually be 0 (system drawable), but some platforms require a * non-zero FBO for rendering. @@ -377,6 +383,12 @@ public: **/ int getMaxTextureUnits() const; + /** + * Returns the maximum point size. + **/ + float getMaxPointSize() const; + + void updateTextureMemorySize(size_t oldsize, size_t newsize); /** @@ -408,6 +420,7 @@ private: int maxRenderTargets; int maxRenderbufferSamples; int maxTextureUnits; + float maxPointSize; Vendor vendor; diff --git a/jni/love/src/modules/graphics/opengl/Shader.cpp b/jni/love/src/modules/graphics/opengl/Shader.cpp index f6ff898a..16aff824 100644 --- a/jni/love/src/modules/graphics/opengl/Shader.cpp +++ b/jni/love/src/modules/graphics/opengl/Shader.cpp @@ -66,8 +66,8 @@ Shader *Shader::current = nullptr; Shader *Shader::defaultShader = nullptr; Shader *Shader::defaultVideoShader = nullptr; -Shader::ShaderSource Shader::defaultCode[Graphics::RENDERER_MAX_ENUM]; -Shader::ShaderSource Shader::defaultVideoCode[Graphics::RENDERER_MAX_ENUM]; +Shader::ShaderSource Shader::defaultCode[Graphics::RENDERER_MAX_ENUM][2]; +Shader::ShaderSource Shader::defaultVideoCode[Graphics::RENDERER_MAX_ENUM][2]; std::vector Shader::textureCounters; @@ -181,7 +181,7 @@ void Shader::mapActiveUniforms() GLint activeprogram = 0; glGetIntegerv(GL_CURRENT_PROGRAM, &activeprogram); - glUseProgram(program); + gl.useProgram(program); GLint numuniforms; glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &numuniforms); @@ -192,13 +192,15 @@ void Shader::mapActiveUniforms() for (int i = 0; i < numuniforms; i++) { GLsizei namelen = 0; - Uniform u = {}; + GLenum gltype = 0; + UniformInfo u = {}; - glGetActiveUniform(program, (GLuint) i, bufsize, &namelen, &u.count, &u.type, cname); + glGetActiveUniform(program, (GLuint) i, bufsize, &namelen, &u.count, &gltype, cname); u.name = std::string(cname, (size_t) namelen); u.location = glGetUniformLocation(program, u.name.c_str()); - u.baseType = getUniformBaseType(u.type); + u.baseType = getUniformBaseType(gltype); + u.components = getUniformTypeSize(gltype); // Initialize all samplers to 0. Both GLSL and GLSL ES are supposed to // do this themselves, but some Android devices (galaxy tab 3 and 4) @@ -223,7 +225,7 @@ void Shader::mapActiveUniforms() uniforms[u.name] = u; } - glUseProgram(activeprogram); + gl.useProgram(activeprogram); } bool Shader::loadVolatile() @@ -250,9 +252,10 @@ bool Shader::loadVolatile() std::vector shaderids; - const ShaderSource *defaults = &defaultCode[Graphics::RENDERER_OPENGL]; + bool gammacorrect = graphics::isGammaCorrect(); + const ShaderSource *defaults = &defaultCode[Graphics::RENDERER_OPENGL][gammacorrect ? 1 : 0]; if (GLAD_ES_VERSION_2_0) - defaults = &defaultCode[Graphics::RENDERER_OPENGLES]; + defaults = &defaultCode[Graphics::RENDERER_OPENGLES][gammacorrect ? 1 : 0]; // The shader program must have both vertex and pixel shader stages. const std::string &vertexcode = shaderSource.vertex.empty() ? defaults->vertex : shaderSource.vertex; @@ -333,7 +336,7 @@ bool Shader::loadVolatile() void Shader::unloadVolatile() { if (current == this) - glUseProgram(0); + gl.useProgram(0); if (program != 0) { @@ -405,23 +408,23 @@ void Shader::attach(bool temporary) { if (current != this) { - glUseProgram(program); + gl.useProgram(program); current = this; // retain/release happens in Graphics::setShader. - } - if (!temporary) - { - // make sure all sent textures are properly bound to their respective texture units - // note: list potentially contains texture ids of deleted/invalid textures! - for (size_t i = 0; i < activeTexUnits.size(); ++i) + if (!temporary) { - if (activeTexUnits[i] > 0) - gl.bindTextureToUnit(activeTexUnits[i], i + 1, false); - } + // make sure all sent textures are properly bound to their respective texture units + // note: list potentially contains texture ids of deleted/invalid textures! + for (size_t i = 0; i < activeTexUnits.size(); ++i) + { + if (activeTexUnits[i] > 0) + gl.bindTextureToUnit(activeTexUnits[i], i + 1, false); + } - // We always want to use texture unit 0 for everyhing else. - gl.setTextureUnit(0); + // We always want to use texture unit 0 for everyhing else. + gl.setTextureUnit(0); + } } } @@ -436,135 +439,114 @@ void Shader::detach() } if (current != nullptr) - glUseProgram(0); + gl.useProgram(0); current = nullptr; } -const Shader::Uniform &Shader::getUniform(const std::string &name) const +const Shader::UniformInfo *Shader::getUniformInfo(const std::string &name) const { - std::map::const_iterator it = uniforms.find(name); + const auto it = uniforms.find(name); if (it == uniforms.end()) - throw love::Exception("Variable '%s' does not exist.\n" - "A common error is to define but not use the variable.", name.c_str()); + return nullptr; - return it->second; + return &(it->second); } -void Shader::checkSetUniformError(const Uniform &u, int size, int count, UniformType sendtype) const +void Shader::sendInts(const UniformInfo *info, const int *vec, int count) { - if (!program) - throw love::Exception("No active shader program."); + if (info->baseType != UNIFORM_INT && info->baseType != UNIFORM_BOOL) + return; - int realsize = getUniformTypeSize(u.type); - - if (size != realsize) - throw love::Exception("Value size of %d does not match variable size of %d.", size, realsize); - - if ((u.count == 1 && count > 1) || count < 0) - throw love::Exception("Invalid number of values (expected %d, got %d).", u.count, count); - - if (u.baseType == UNIFORM_SAMPLER && sendtype != u.baseType) - throw love::Exception("Cannot send a value of this type to an Image variable."); - - if ((sendtype == UNIFORM_FLOAT && u.baseType == UNIFORM_INT) || (sendtype == UNIFORM_INT && u.baseType == UNIFORM_FLOAT)) - throw love::Exception("Cannot convert between float and int."); -} - -void Shader::sendInt(const std::string &name, int size, const GLint *vec, int count) -{ TemporaryAttacher attacher(this); - const Uniform &u = getUniform(name); - checkSetUniformError(u, size, count, UNIFORM_INT); + int location = info->location; - switch (size) + switch (info->components) { case 4: - glUniform4iv(u.location, count, vec); + glUniform4iv(location, count, vec); break; case 3: - glUniform3iv(u.location, count, vec); + glUniform3iv(location, count, vec); break; case 2: - glUniform2iv(u.location, count, vec); + glUniform2iv(location, count, vec); break; case 1: default: - glUniform1iv(u.location, count, vec); + glUniform1iv(location, count, vec); break; } } -void Shader::sendFloat(const std::string &name, int size, const GLfloat *vec, int count) +void Shader::sendFloats(const UniformInfo *info, const float *vec, int count) { + if (info->baseType != UNIFORM_FLOAT && info->baseType != UNIFORM_BOOL) + return; + TemporaryAttacher attacher(this); - const Uniform &u = getUniform(name); - checkSetUniformError(u, size, count, UNIFORM_FLOAT); + int location = info->location; - switch (size) + switch (info->components) { case 4: - glUniform4fv(u.location, count, vec); + glUniform4fv(location, count, vec); break; case 3: - glUniform3fv(u.location, count, vec); + glUniform3fv(location, count, vec); break; case 2: - glUniform2fv(u.location, count, vec); + glUniform2fv(location, count, vec); break; case 1: default: - glUniform1fv(u.location, count, vec); + glUniform1fv(location, count, vec); break; } } -void Shader::sendMatrix(const std::string &name, int size, const GLfloat *m, int count) +void Shader::sendMatrices(const UniformInfo *info, const float *m, int count) { + if (info->baseType != UNIFORM_MATRIX) + return; + TemporaryAttacher attacher(this); - if (size < 2 || size > 4) - { - throw love::Exception("Invalid matrix size: %dx%d " - "(can only set 2x2, 3x3 or 4x4 matrices.)", size,size); - } + int location = info->location; - const Uniform &u = getUniform(name); - checkSetUniformError(u, size, count, UNIFORM_FLOAT); - - switch (size) + switch (info->components) { case 4: - glUniformMatrix4fv(u.location, count, GL_FALSE, m); + glUniformMatrix4fv(location, count, GL_FALSE, m); break; case 3: - glUniformMatrix3fv(u.location, count, GL_FALSE, m); + glUniformMatrix3fv(location, count, GL_FALSE, m); break; case 2: default: - glUniformMatrix2fv(u.location, count, GL_FALSE, m); + glUniformMatrix2fv(location, count, GL_FALSE, m); break; } } -void Shader::sendTexture(const std::string &name, Texture *texture) +void Shader::sendTexture(const UniformInfo *info, Texture *texture) { + if (info->baseType != UNIFORM_SAMPLER) + return; + GLuint gltex = *(GLuint *) texture->getHandle(); TemporaryAttacher attacher(this); - int texunit = getTextureUnit(name); - - const Uniform &u = getUniform(name); - checkSetUniformError(u, 1, 1, UNIFORM_SAMPLER); + int texunit = getTextureUnit(info->name); // bind texture to assigned texture unit and send uniform to shader program gl.bindTextureToUnit(gltex, texunit, true); - glUniform1i(u.location, texunit); + glUniform1i(info->location, texunit); // increment global shader texture id counter for this texture unit, if we haven't already if (activeTexUnits[texunit-1] == 0) @@ -573,7 +555,7 @@ void Shader::sendTexture(const std::string &name, Texture *texture) // store texture id so it can be re-bound to the proper texture unit later activeTexUnits[texunit-1] = gltex; - retainObject(name, texture); + retainObject(info->name, texture); } void Shader::retainObject(const std::string &name, Object *object) @@ -631,9 +613,12 @@ Shader::UniformType Shader::getExternVariable(const std::string &name, int &comp return UNIFORM_UNKNOWN; } - components = getUniformTypeSize(it->second.type); + components = it->second.components; count = (int) it->second.count; + // Legacy support. This whole function is gone in 0.11 anyway. + if (it->second.baseType == UNIFORM_MATRIX) + return UNIFORM_FLOAT; return it->second.baseType; } @@ -893,6 +878,7 @@ Shader::UniformType Shader::getUniformBaseType(GLenum type) const case GL_FLOAT_VEC2: case GL_FLOAT_VEC3: case GL_FLOAT_VEC4: + return UNIFORM_FLOAT; case GL_FLOAT_MAT2: case GL_FLOAT_MAT3: case GL_FLOAT_MAT4: @@ -902,7 +888,7 @@ Shader::UniformType Shader::getUniformBaseType(GLenum type) const case GL_FLOAT_MAT3x4: case GL_FLOAT_MAT4x2: case GL_FLOAT_MAT4x3: - return UNIFORM_FLOAT; + return UNIFORM_MATRIX; case GL_BOOL: case GL_BOOL_VEC2: case GL_BOOL_VEC3: @@ -962,6 +948,7 @@ StringMap Shader::stageNames(Shader StringMap::Entry Shader::uniformTypeEntries[] = { {"float", Shader::UNIFORM_FLOAT}, + {"matrix", Shader::UNIFORM_MATRIX}, {"int", Shader::UNIFORM_INT}, {"bool", Shader::UNIFORM_BOOL}, {"image", Shader::UNIFORM_SAMPLER}, diff --git a/jni/love/src/modules/graphics/opengl/Shader.h b/jni/love/src/modules/graphics/opengl/Shader.h index 042a696d..1fad3973 100644 --- a/jni/love/src/modules/graphics/opengl/Shader.h +++ b/jni/love/src/modules/graphics/opengl/Shader.h @@ -74,6 +74,7 @@ public: enum UniformType { UNIFORM_FLOAT, + UNIFORM_MATRIX, UNIFORM_INT, UNIFORM_BOOL, UNIFORM_SAMPLER, @@ -87,6 +88,15 @@ public: std::string pixel; }; + struct UniformInfo + { + int location; + int count; + int components; + UniformType baseType; + std::string name; + }; + // Pointer to currently active Shader. static Shader *current; @@ -95,8 +105,8 @@ public: static Shader *defaultVideoShader; // Default shader code (a shader is always required internally.) - static ShaderSource defaultCode[Graphics::RENDERER_MAX_ENUM]; - static ShaderSource defaultVideoCode[Graphics::RENDERER_MAX_ENUM]; + static ShaderSource defaultCode[Graphics::RENDERER_MAX_ENUM][2]; + static ShaderSource defaultVideoCode[Graphics::RENDERER_MAX_ENUM][2]; /** * Creates a new Shader using a list of source codes. @@ -128,44 +138,12 @@ public: **/ std::string getWarnings() const; - /** - * Send at least one integer or int-vector value to this Shader as a uniform. - * - * @param name The name of the uniform variable in the source code. - * @param size Number of elements in each vector to send. - * A value of 1 indicates a single-component vector (an int). - * @param vec Pointer to the integer or int-vector values. - * @param count Number of integer or int-vector values. - **/ - void sendInt(const std::string &name, int size, const GLint *vec, int count); + const UniformInfo *getUniformInfo(const std::string &name) const; - /** - * Send at least one float or vector value to this Shader as a uniform. - * - * @param name The name of the uniform variable in the source code. - * @param size Number of elements in each vector to send. - * A value of 1 indicates a single-component vector (a float). - * @param vec Pointer to the float or float-vector values. - * @param count Number of float or float-vector values. - **/ - void sendFloat(const std::string &name, int size, const GLfloat *vec, int count); - - /** - * Send at least one matrix to this Shader as a uniform. - * - * @param name The name of the uniform variable in the source code. - * @param size Number of rows/columns in the matrix. - * @param m Pointer to the first element of the first matrix. - * @param count Number of matrices to send. - **/ - void sendMatrix(const std::string &name, int size, const GLfloat *m, int count); - - /** - * Send a texture to this Shader as a uniform. - * - * @param name The name of the uniform variable in the source code. - **/ - void sendTexture(const std::string &name, Texture *texture); + void sendInts(const UniformInfo *info, const int *vec, int count); + void sendFloats(const UniformInfo *info, const float *vec, int count); + void sendMatrices(const UniformInfo *info, const float *m, int count); + void sendTexture(const UniformInfo *info, Texture *texture); /** * Gets the type, number of components, and number of array elements of @@ -199,6 +177,17 @@ public: return program; } + template + T *getScratchBuffer(size_t count) + { + size_t bytes = sizeof(T) * count; + + if (scratchBuffer.size() < bytes) + scratchBuffer.resize(bytes); + + return (T *) scratchBuffer.data(); + } + static std::string getGLSLVersion(); static bool isSupported(); @@ -210,24 +199,11 @@ public: private: - // Represents a single uniform/extern shader variable. - struct Uniform - { - GLint location; - GLint count; - GLenum type; - UniformType baseType; - std::string name; - }; - // Map active uniform names to their locations. void mapActiveUniforms(); - const Uniform &getUniform(const std::string &name) const; - int getUniformTypeSize(GLenum type) const; UniformType getUniformBaseType(GLenum type) const; - void checkSetUniformError(const Uniform &u, int size, int count, UniformType sendtype) const; GLuint compileCode(ShaderStage stage, const std::string &code); @@ -256,7 +232,7 @@ private: std::map attributes; // Uniform location buffer map - std::map uniforms; + std::map uniforms; // Texture unit pool for setting images std::map texUnitPool; // texUnitPool[name] = textureunit @@ -276,6 +252,8 @@ private: GLuint videoTextureUnits[3]; + std::vector scratchBuffer; + // Counts total number of textures bound to each texture unit in all shaders static std::vector textureCounters; diff --git a/jni/love/src/modules/graphics/opengl/SpriteBatch.cpp b/jni/love/src/modules/graphics/opengl/SpriteBatch.cpp index 7c5f4fc6..6982725e 100644 --- a/jni/love/src/modules/graphics/opengl/SpriteBatch.cpp +++ b/jni/love/src/modules/graphics/opengl/SpriteBatch.cpp @@ -162,14 +162,18 @@ void SpriteBatch::setBufferSize(int newsize) size_t vertex_size = sizeof(Vertex) * 4 * newsize; GLBuffer *new_array_buf = nullptr; + int new_next = std::min(next, newsize); + try { new_array_buf = new GLBuffer(vertex_size, nullptr, array_buf->getTarget(), array_buf->getUsage(), array_buf->getMapFlags()); - // Copy as much of the old data into the new GLBuffer as can fit. GLBuffer::Bind bind(*new_array_buf); - void *new_data = new_array_buf->map(); - memcpy(new_data, old_data, sizeof(Vertex) * 4 * std::min(newsize, size)); + + // Copy as much of the old data into the new GLBuffer as can fit. + size_t copy_size = sizeof(Vertex) * 4 * new_next; + memcpy(new_array_buf->map(), old_data, copy_size); + new_array_buf->setMappedRangeModified(0, copy_size); quad_indices = QuadIndices(newsize); } @@ -185,7 +189,7 @@ void SpriteBatch::setBufferSize(int newsize) array_buf = new_array_buf; size = newsize; - next = std::min(next, newsize); + next = new_next; } int SpriteBatch::getBufferSize() const diff --git a/jni/love/src/modules/graphics/opengl/Text.cpp b/jni/love/src/modules/graphics/opengl/Text.cpp index 8b66fafa..79deac7f 100644 --- a/jni/love/src/modules/graphics/opengl/Text.cpp +++ b/jni/love/src/modules/graphics/opengl/Text.cpp @@ -129,6 +129,7 @@ void Text::addTextData(const TextData &t) { voffset = 0; draw_commands.clear(); + text_data.clear(); } uploadVertices(vertices, voffset); diff --git a/jni/love/src/modules/graphics/opengl/wrap_Graphics.cpp b/jni/love/src/modules/graphics/opengl/wrap_Graphics.cpp index 30097a50..7c0a5846 100644 --- a/jni/love/src/modules/graphics/opengl/wrap_Graphics.cpp +++ b/jni/love/src/modules/graphics/opengl/wrap_Graphics.cpp @@ -1346,52 +1346,45 @@ int w_getShader(lua_State *L) int w_setDefaultShaderCode(lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); + luaL_checktype(L, 2, LUA_TTABLE); - lua_getfield(L, 1, "opengl"); - lua_rawgeti(L, -1, 1); - lua_rawgeti(L, -2, 2); - lua_rawgeti(L, -3, 3); + for (int i = 0; i < 2; i++) + { + for (int renderer = 0; renderer < Graphics::RENDERER_MAX_ENUM; renderer++) + { + const char *lang = renderer == Graphics::RENDERER_OPENGLES ? "glsles" : "glsl"; - Shader::ShaderSource openglcode; - openglcode.vertex = luax_checkstring(L, -3); - openglcode.pixel = luax_checkstring(L, -2); + lua_getfield(L, i + 1, lang); - Shader::ShaderSource openglVideocode; - openglVideocode.vertex = luax_checkstring(L, -3); - openglVideocode.pixel = luax_checkstring(L, -1); + lua_getfield(L, -1, "vertex"); + lua_getfield(L, -2, "pixel"); + lua_getfield(L, -3, "videopixel"); - lua_pop(L, 4); + Shader::ShaderSource code; + code.vertex = luax_checkstring(L, -3); + code.pixel = luax_checkstring(L, -2); - lua_getfield(L, 1, "opengles"); - lua_rawgeti(L, -1, 1); - lua_rawgeti(L, -2, 2); - lua_rawgeti(L, -3, 3); + Shader::ShaderSource videocode; + videocode.vertex = luax_checkstring(L, -3); + videocode.pixel = luax_checkstring(L, -1); - Shader::ShaderSource openglescode; - openglescode.vertex = luax_checkstring(L, -3); - openglescode.pixel = luax_checkstring(L, -2); + lua_pop(L, 4); - Shader::ShaderSource openglesVideocode; - openglesVideocode.vertex = luax_checkstring(L, -3); - openglesVideocode.pixel = luax_checkstring(L, -1); - - lua_pop(L, 4); - - Shader::defaultCode[Graphics::RENDERER_OPENGL] = openglcode; - Shader::defaultCode[Graphics::RENDERER_OPENGLES] = openglescode; - Shader::defaultVideoCode[Graphics::RENDERER_OPENGL] = openglVideocode; - Shader::defaultVideoCode[Graphics::RENDERER_OPENGLES] = openglesVideocode; + Shader::defaultCode[renderer][i] = code; + Shader::defaultVideoCode[renderer][i] = videocode; + } + } return 0; } int w_getSupported(lua_State *L) { - lua_createtable(L, 0, (int) Graphics::SUPPORT_MAX_ENUM); + lua_createtable(L, 0, (int) Graphics::FEATURE_MAX_ENUM); - for (int i = 0; i < (int) Graphics::SUPPORT_MAX_ENUM; i++) + for (int i = 0; i < (int) Graphics::FEATURE_MAX_ENUM; i++) { - Graphics::Support feature = (Graphics::Support) i; + auto feature = (Graphics::Feature) i; const char *name = nullptr; if (!Graphics::getConstant(feature, name)) @@ -1480,33 +1473,28 @@ int w_getStats(lua_State *L) { Graphics::Stats stats = instance()->getStats(); - lua_createtable(L, 0, (int) Graphics::STAT_MAX_ENUM); + lua_createtable(L, 0, 7); - const char *sname = nullptr; - - Graphics::getConstant(Graphics::STAT_DRAW_CALLS, sname); lua_pushinteger(L, stats.drawCalls); - lua_setfield(L, -2, sname); + lua_setfield(L, -2, "drawcalls"); - Graphics::getConstant(Graphics::STAT_CANVAS_SWITCHES, sname); lua_pushinteger(L, stats.canvasSwitches); - lua_setfield(L, -2, sname); + lua_setfield(L, -2, "canvasswitches"); + + lua_pushinteger(L, stats.shaderSwitches); + lua_setfield(L, -2, "shaderswitches"); - Graphics::getConstant(Graphics::STAT_CANVASES, sname); lua_pushinteger(L, stats.canvases); - lua_setfield(L, -2, sname); + lua_setfield(L, -2, "canvases"); - Graphics::getConstant(Graphics::STAT_IMAGES, sname); lua_pushinteger(L, stats.images); - lua_setfield(L, -2, sname); + lua_setfield(L, -2, "images"); - Graphics::getConstant(Graphics::STAT_FONTS, sname); lua_pushinteger(L, stats.fonts); - lua_setfield(L, -2, sname); + lua_setfield(L, -2, "fonts"); - Graphics::getConstant(Graphics::STAT_TEXTURE_MEMORY, sname); - lua_pushnumber(L, (lua_Number) stats.textureMemory); - lua_setfield(L, -2, sname); + lua_pushinteger(L, stats.textureMemory); + lua_setfield(L, -2, "texturememory"); return 1; } diff --git a/jni/love/src/modules/graphics/opengl/wrap_Graphics.lua b/jni/love/src/modules/graphics/opengl/wrap_Graphics.lua index b92cb40b..4beed478 100644 --- a/jni/love/src/modules/graphics/opengl/wrap_Graphics.lua +++ b/jni/love/src/modules/graphics/opengl/wrap_Graphics.lua @@ -23,6 +23,7 @@ misrepresented as being the original software. --]] local table_concat = table.concat +local ipairs = ipairs -- SHADERS @@ -139,6 +140,8 @@ varying vec4 VaryingColor; uniform mediump float love_PointSize; #endif]], + FUNCTIONS = "", + FOOTER = [[ void main() { VaryingTexCoord = VertexTexCoord; @@ -210,33 +213,21 @@ void main() { }]], } -local function createVertexCode(vertexcode, lang) - local vertexcodes = { +local function createShaderStageCode(stage, code, lang, gammacorrect, multicanvas) + stage = stage:upper() + local lines = { lang == "glsles" and GLSL.VERSION_ES or GLSL.VERSION, GLSL.SYNTAX, - love.graphics.isGammaCorrect() and "#define LOVE_GAMMA_CORRECT 1" or "", - GLSL.VERTEX.HEADER, GLSL.UNIFORMS, + gammacorrect and "#define LOVE_GAMMA_CORRECT 1" or "", + GLSL[stage].HEADER, + GLSL.UNIFORMS, GLSL.FUNCTIONS, + GLSL[stage].FUNCTIONS, lang == "glsles" and "#line 1" or "#line 0", - vertexcode, - GLSL.VERTEX.FOOTER, + code, + multicanvas and GLSL[stage].FOOTER_MULTI_CANVAS or GLSL[stage].FOOTER, } - return table_concat(vertexcodes, "\n") -end - -local function createPixelCode(pixelcode, is_multicanvas, lang) - local pixelcodes = { - lang == "glsles" and GLSL.VERSION_ES or GLSL.VERSION, - GLSL.SYNTAX, - love.graphics.isGammaCorrect() and "#define LOVE_GAMMA_CORRECT 1" or "", - GLSL.PIXEL.HEADER, GLSL.UNIFORMS, - GLSL.FUNCTIONS, - GLSL.PIXEL.FUNCTIONS, - lang == "glsles" and "#line 1" or "#line 0", - pixelcode, - is_multicanvas and GLSL.PIXEL.FOOTER_MULTI_CANVAS or GLSL.PIXEL.FOOTER, - } - return table_concat(pixelcodes, "\n") + return table_concat(lines, "\n") end local function isVertexCode(code) @@ -258,11 +249,6 @@ function love.graphics._shaderCodeToGLSL(arg1, arg2) local vertexcode, pixelcode local is_multicanvas = false -- whether pixel code has "effects" function instead of "effect" - local lang = "glsl" - if (love.graphics.getRendererInfo()) == "OpenGL ES" then - lang = "glsles" - end - if arg1 then if isVertexCode(arg1) then vertexcode = arg1 -- first arg contains vertex shader code @@ -287,11 +273,18 @@ function love.graphics._shaderCodeToGLSL(arg1, arg2) end end + local lang = "glsl" + if love.graphics.getRendererInfo() == "OpenGL ES" then + lang = "glsles" + end + + local gammacorrect = love.graphics.isGammaCorrect() + if vertexcode then - vertexcode = createVertexCode(vertexcode, lang) + vertexcode = createShaderStageCode("VERTEX", vertexcode, lang, gammacorrect) end if pixelcode then - pixelcode = createPixelCode(pixelcode, is_multicanvas, lang) + pixelcode = createShaderStageCode("PIXEL", pixelcode, lang, gammacorrect, is_multicanvas) end return vertexcode, pixelcode @@ -339,32 +332,37 @@ vec4 effect(mediump vec4 vcolor, Image tex, vec2 texcoord, vec2 pixcoord) { }]], } -local defaults = { - opengl = { - createVertexCode(defaultcode.vertex, "glsl"), - createPixelCode(defaultcode.pixel, false, "glsl"), - createPixelCode(defaultcode.videopixel, false, "glsl"), - }, - opengles = { - createVertexCode(defaultcode.vertex, "glsles"), - createPixelCode(defaultcode.pixel, false, "glsles"), - createPixelCode(defaultcode.videopixel, false, "glsles"), - }, -} +local defaults = {} +local defaults_gammacorrect = {} -love.graphics._setDefaultShaderCode(defaults) +for _, lang in ipairs{"glsl", "glsles"} do + for _, gammacorrect in ipairs{false, true} do + local t = gammacorrect and defaults_gammacorrect or defaults + t[lang] = { + vertex = createShaderStageCode("VERTEX", defaultcode.vertex, lang, gammacorrect), + pixel = createShaderStageCode("PIXEL", defaultcode.pixel, lang, gammacorrect, false), + videopixel = createShaderStageCode("PIXEL", defaultcode.videopixel, lang, gammacorrect, false), + } + end +end + +love.graphics._setDefaultShaderCode(defaults, defaults_gammacorrect) function love.graphics.newVideo(file, loadaudio) local video = love.graphics._newVideo(file) local source, success - if loadaudio ~= false then + if loadaudio ~= false and love.audio then success, source = pcall(love.audio.newSource, video:getStream():getFilename()) end if success then video:setSource(source) elseif loadaudio == true then - error("Video had no audio track", 2) + if love.audio then + error("Video had no audio track", 2) + else + error("love.audio was not loaded", 2) + end else video:getStream():setSync() end diff --git a/jni/love/src/modules/graphics/opengl/wrap_Shader.cpp b/jni/love/src/modules/graphics/opengl/wrap_Shader.cpp index fa5d94ba..e13cc792 100644 --- a/jni/love/src/modules/graphics/opengl/wrap_Shader.cpp +++ b/jni/love/src/modules/graphics/opengl/wrap_Shader.cpp @@ -23,7 +23,6 @@ #include "math/MathModule.h" #include -#include #include #include @@ -42,137 +41,51 @@ Shader *luax_checkshader(lua_State *L, int idx) int w_Shader_getWarnings(lua_State *L) { Shader *shader = luax_checkshader(L, 1); - lua_pushstring(L, shader->getWarnings().c_str()); + std::string warnings = shader->getWarnings(); + lua_pushstring(L, warnings.c_str()); return 1; } -template -static T *_getScalars(lua_State *L, int count, size_t &dimension) +static int _getCount(lua_State *L, int startidx, const Shader::UniformInfo *info) { - dimension = 1; - T *values = new T[count]; - - for (int i = 0; i < count; ++i) - { - if (lua_isnumber(L, 3 + i)) - values[i] = static_cast(lua_tonumber(L, 3 + i)); - else if (lua_isboolean(L, 3 + i)) - values[i] = static_cast(lua_toboolean(L, 3 + i)); - else - { - delete[] values; - luax_typerror(L, 3 + i, "number or boolean"); - return 0; - } - } - - return values; + return std::min(std::max(lua_gettop(L) - startidx, 1), info->count); } template -static T *_getVectors(lua_State *L, int count, size_t &dimension) +static T *_getNumbers(lua_State *L, int startidx, Shader *shader, int components, int count) { - dimension = luax_objlen(L, 3); - T *values = new T[count * dimension]; + T *values = shader->getScratchBuffer(components * count); - for (int i = 0; i < count; ++i) + if (components == 1) { - if (!lua_istable(L, 3 + i)) + for (int i = 0; i < count; ++i) + values[i] = (T) luaL_checknumber(L, startidx + i); + } + else + { + for (int i = 0; i < count; i++) { - delete[] values; - luax_typerror(L, 3 + i, "table"); - return 0; - } - if (luax_objlen(L, 3 + i) != dimension) - { - delete[] values; - luaL_error(L, "Error in argument %d: Expected table size %d, got %d.", - 3+i, dimension, luax_objlen(L, 3+i)); - return 0; - } + luaL_checktype(L, startidx + i, LUA_TTABLE); - for (int k = 1; k <= (int) dimension; ++k) - { - lua_rawgeti(L, 3 + i, k); - if (lua_isnumber(L, -1)) - values[i * dimension + k - 1] = static_cast(lua_tonumber(L, -1)); - else if (lua_isboolean(L, -1)) - values[i * dimension + k - 1] = static_cast(lua_toboolean(L, -1)); - else + for (int k = 1; k <= components; k++) { - delete[] values; - luax_typerror(L, -1, "number or boolean"); - return 0; + lua_rawgeti(L, startidx + i, k); + values[i * components + k - 1] = (T) luaL_checknumber(L, -1); } + + lua_pop(L, components); } - lua_pop(L, int(dimension)); } return values; } -int w_Shader_sendInt(lua_State *L) +int w_Shader_sendFloats(lua_State *L, int startidx, Shader *shader, const Shader::UniformInfo *info, bool colors) { - Shader *shader = luax_checkshader(L, 1); - const char *name = luaL_checkstring(L, 2); - int count = lua_gettop(L) - 2; + int count = _getCount(L, startidx, info); + int components = info->components; - if (count < 1) - return luaL_error(L, "No variable to send."); - - int *values = 0; - size_t dimension = 1; - - if (lua_isnumber(L, 3) || lua_isboolean(L, 3)) - values = _getScalars(L, count, dimension); - else if (lua_istable(L, 3)) - values = _getVectors(L, count, dimension); - else - return luax_typerror(L, 3, "number, boolean, or table"); - - if (!values) - return luaL_error(L, "Error in arguments."); - - bool should_error = false; - try - { - shader->sendInt(name, (int) dimension, values, count); - } - catch (love::Exception &e) - { - should_error = true; - lua_pushstring(L, e.what()); - } - - delete[] values; - - if (should_error) - return luaL_error(L, "%s", lua_tostring(L, -1)); - - return 0; -} - -static int w__Shader_sendFloat(lua_State *L, bool colors) -{ - Shader *shader = luax_checkshader(L, 1); - const char *name = luaL_checkstring(L, 2); - int count = lua_gettop(L) - 2; - - if (count < 1) - return luaL_error(L, "No variable to send."); - - float *values = nullptr; - size_t dimension = 1; - - if (lua_isnumber(L, 3) || lua_isboolean(L, 3)) - values = _getScalars(L, count, dimension); - else if (lua_istable(L, 3)) - values = _getVectors(L, count, dimension); - else - return luax_typerror(L, 3, "number, boolean, or table"); - - if (!values) - return luaL_error(L, "Error in arguments."); + float *values = _getNumbers(L, startidx, shader, components, count); if (colors) { @@ -181,119 +94,94 @@ static int w__Shader_sendFloat(lua_State *L, bool colors) for (int i = 0; i < count; i++) { - for (int j = 0; j < (int) dimension; j++) + for (int j = 0; j < components; j++) { // the fourth component (alpha) is always already linear, if it exists. if (gammacorrect && j < 3) - values[i * dimension + j] = m.gammaToLinear(values[i * dimension + j] / 255.0f); + values[i * components + j] = m.gammaToLinear(values[i * components + j] / 255.0f); else - values[i * dimension + j] /= 255.0f; + values[i * components + j] /= 255.0f; } } } - bool should_error = false; - try - { - shader->sendFloat(name, (int) dimension, values, count); - } - catch (love::Exception &e) - { - should_error = true; - lua_pushstring(L, e.what()); - } - - delete[] values; - - if (should_error) - return luaL_error(L, "%s", lua_tostring(L, -1)); - + luax_catchexcept(L, [&]() { shader->sendFloats(info, values, count); }); return 0; } -int w_Shader_sendFloat(lua_State *L) +int w_Shader_sendInts(lua_State *L, int startidx, Shader *shader, const Shader::UniformInfo *info) { - return w__Shader_sendFloat(L, false); + int count = _getCount(L, startidx, info); + int *values = _getNumbers(L, startidx, shader, info->components, count); + luax_catchexcept(L, [&]() { shader->sendInts(info, values, count); }); + return 0; } -int w_Shader_sendColor(lua_State *L) +int w_Shader_sendBooleans(lua_State *L, int startidx, Shader *shader, const Shader::UniformInfo *info) { - return w__Shader_sendFloat(L, true); -} + int count = _getCount(L, startidx, info); + int components = info->components; -int w_Shader_sendMatrix(lua_State *L) -{ - int count = lua_gettop(L) - 2; - Shader *shader = luax_checkshader(L, 1); - const char *name = luaL_checkstring(L, 2); + // We have to send booleans as ints or floats. + float *values = shader->getScratchBuffer(components * count); - if (!lua_istable(L, 3)) - return luax_typerror(L, 3, "matrix table"); - - int dimension = 0; - - lua_rawgeti(L, 3, 1); - if (lua_istable(L, -1)) - dimension = (int) luax_objlen(L, 3); - lua_pop(L, 1); - - if (dimension == 0) + if (components == 1) { - lua_getfield(L, 3, "dimension"); + for (int i = 0; i < count; i++) + { + luaL_checktype(L, startidx + i, LUA_TBOOLEAN); + values[i] = (float) lua_toboolean(L, startidx + i); + } + } + else + { + for (int i = 0; i < count; i++) + { + luaL_checktype(L, startidx + i, LUA_TTABLE); - if (!lua_isnoneornil(L, -1)) - dimension = (int) lua_tointeger(L, -1); - else - dimension = (int) sqrtf((float) luax_objlen(L, 3)); + for (int k = 1; k <= components; k++) + { + lua_rawgeti(L, startidx + i, k); + luaL_checktype(L, -1, LUA_TBOOLEAN); + values[i * components + k - 1] = (float) lua_toboolean(L, -1); + } - lua_pop(L, 1); + lua_pop(L, components); + } } - if (dimension < 2 || dimension > 4) - return luaL_error(L, "Invalid matrix size: %dx%d (only 2x2, 3x3 and 4x4 matrices are supported).", - dimension, dimension); + luax_catchexcept(L, [&]() { shader->sendFloats(info, values, count); }); + return 0; +} - float *values = new float[dimension * dimension * count]; +int w_Shader_sendMatrices(lua_State *L, int startidx, Shader *shader, const Shader::UniformInfo *info) +{ + int count = _getCount(L, startidx, info); + int dimension = info->components; + int elements = dimension * dimension; - for (int i = 0; i < count; ++i) + float *values = shader->getScratchBuffer(elements * count); + + for (int i = 0; i < count; i++) { - int other_dimension = 0; + luaL_checktype(L, startidx + i, LUA_TTABLE); - lua_rawgeti(L, 3+i, 1); + lua_rawgeti(L, startidx + i, 1); bool table_of_tables = lua_istable(L, -1); - - if (table_of_tables) - other_dimension = luax_objlen(L, -1); - lua_pop(L, 1); - if (!table_of_tables) - other_dimension = (int) sqrtf((float) luax_objlen(L, 3+i)); - - if (other_dimension != dimension) - { - // You unlock this door with the key of imagination. Beyond it is - // another dimension: a dimension of sound, a dimension of sight, - // a dimension of mind. You're moving into a land of both shadow - // and substance, of things and ideas. You've just crossed over - // into... the Twilight Zone. - delete[] values; - return luaL_error(L, "Invalid matrix size at argument %d: Expected size %dx%d, got %dx%d.", - 3+i, dimension, dimension, other_dimension, other_dimension); - } - if (table_of_tables) { int n = 0; for (int j = 1; j <= dimension; j++) { - lua_rawgeti(L, 3+i, j); + lua_rawgeti(L, startidx + i, j); for (int k = 1; k <= dimension; k++) { lua_rawgeti(L, -k, k); - values[i * dimension * dimension + n] = (float) lua_tonumber(L, -1); + values[i * elements + n] = (float) luaL_checknumber(L, -1); n++; } @@ -302,71 +190,69 @@ int w_Shader_sendMatrix(lua_State *L) } else { - for (int k = 1; k <= dimension*dimension; k++) + for (int k = 1; k <= elements; k++) { - lua_rawgeti(L, 3+i, k); - values[i * dimension * dimension + k - 1] = (float) lua_tonumber(L, -1); + lua_rawgeti(L, startidx + i, k); + values[i * elements + (k - 1)] = (float) luaL_checknumber(L, -1); } - lua_pop(L, dimension*dimension); + lua_pop(L, elements); } } - luax_catchexcept(L, - [&]() { shader->sendMatrix(name, dimension, values, count); }, - [&](bool) { delete[] values; } - ); - + shader->sendMatrices(info, values, count); return 0; } -int w_Shader_sendTexture(lua_State *L) +int w_Shader_sendTexture(lua_State *L, int startidx, Shader *shader, const Shader::UniformInfo *info) { - Shader *shader = luax_checkshader(L, 1); - const char *name = luaL_checkstring(L, 2); - Texture *texture = luax_checktexture(L, 3); - - luax_catchexcept(L, [&](){ shader->sendTexture(name, texture); }); + // We don't support arrays of textures (yet). + Texture *texture = luax_checktexture(L, startidx); + luax_catchexcept(L, [&]() { shader->sendTexture(info, texture); }); return 0; } int w_Shader_send(lua_State *L) { - int ttype = lua_type(L, 3); - Proxy *p = nullptr; + Shader *shader = luax_checkshader(L, 1); + const char *name = luaL_checkstring(L, 2); - switch (ttype) + const Shader::UniformInfo *info = shader->getUniformInfo(name); + if (info == nullptr) + return luaL_error(L, "Shader uniform '%s' does not exist.\nA common error is to define but not use the variable.", name); + + int startidx = 3; + + switch (info->baseType) { - case LUA_TNUMBER: - case LUA_TBOOLEAN: - // Scalar float/boolean. - return w_Shader_sendFloat(L); - break; - case LUA_TUSERDATA: - // Texture (Image or Canvas). - p = (Proxy *) lua_touserdata(L, 3); - - if (typeFlags[p->type][GRAPHICS_TEXTURE_ID]) - return w_Shader_sendTexture(L); - - break; - case LUA_TTABLE: - // Vector or Matrix. - lua_rawgeti(L, 3, 1); - ttype = lua_type(L, -1); - lua_pop(L, 1); - - if (ttype == LUA_TNUMBER || ttype == LUA_TBOOLEAN) - return w_Shader_sendFloat(L); - else if (ttype == LUA_TTABLE) - return w_Shader_sendMatrix(L); - - break; + case Shader::UNIFORM_FLOAT: + return w_Shader_sendFloats(L, startidx, shader, info, false); + case Shader::UNIFORM_MATRIX: + return w_Shader_sendMatrices(L, startidx, shader, info); + case Shader::UNIFORM_INT: + return w_Shader_sendInts(L, startidx, shader, info); + case Shader::UNIFORM_BOOL: + return w_Shader_sendBooleans(L, startidx, shader, info); + case Shader::UNIFORM_SAMPLER: + return w_Shader_sendTexture(L, startidx, shader, info); default: - break; + return luaL_error(L, "Unknown variable type for shader uniform '%s", name); } +} - return luaL_argerror(L, 3, "number, boolean, table, image, or canvas expected"); +int w_Shader_sendColors(lua_State *L) +{ + Shader *shader = luax_checkshader(L, 1); + const char *name = luaL_checkstring(L, 2); + + const Shader::UniformInfo *info = shader->getUniformInfo(name); + if (info == nullptr) + return luaL_error(L, "Shader uniform '%s' does not exist.\nA common error is to define but not use the variable.", name); + + if (info->baseType != Shader::UNIFORM_FLOAT || info->components < 3) + return luaL_error(L, "sendColor can only be used on vec3 or vec4 uniforms."); + + return w_Shader_sendFloats(L, 3, shader, info, true); } int w_Shader_getExternVariable(lua_State *L) @@ -404,13 +290,13 @@ int w_Shader_getExternVariable(lua_State *L) static const luaL_Reg w_Shader_functions[] = { { "getWarnings", w_Shader_getWarnings }, - { "sendInt", w_Shader_sendInt }, - { "sendBoolean", w_Shader_sendInt }, - { "sendFloat", w_Shader_sendFloat }, - { "sendColor", w_Shader_sendColor }, - { "sendMatrix", w_Shader_sendMatrix }, - { "sendTexture", w_Shader_sendTexture }, + { "sendInt", w_Shader_send }, + { "sendBoolean", w_Shader_send }, + { "sendFloat", w_Shader_send }, + { "sendMatrix", w_Shader_send }, + { "sendTexture", w_Shader_send }, { "send", w_Shader_send }, + { "sendColor", w_Shader_sendColors }, { "getExternVariable", w_Shader_getExternVariable }, { 0, 0 } }; diff --git a/jni/love/src/modules/graphics/wrap_Quad.cpp b/jni/love/src/modules/graphics/wrap_Quad.cpp index 2552bc4f..d6464b95 100644 --- a/jni/love/src/modules/graphics/wrap_Quad.cpp +++ b/jni/love/src/modules/graphics/wrap_Quad.cpp @@ -64,10 +64,21 @@ int w_Quad_getViewport(lua_State *L) return 4; } +int w_Quad_getTextureDimensions(lua_State *L) +{ + Quad *quad = luax_checkquad(L, 1); + double sw = quad->getTextureWidth(); + double sh = quad->getTextureHeight(); + lua_pushnumber(L, sw); + lua_pushnumber(L, sh); + return 2; +} + static const luaL_Reg w_Quad_functions[] = { { "setViewport", w_Quad_setViewport }, { "getViewport", w_Quad_getViewport }, + { "getTextureDimensions", w_Quad_getTextureDimensions }, { 0, 0 } }; diff --git a/jni/love/src/modules/image/magpie/ImageData.cpp b/jni/love/src/modules/image/magpie/ImageData.cpp index 79fa2651..b4af00ad 100644 --- a/jni/love/src/modules/image/magpie/ImageData.cpp +++ b/jni/love/src/modules/image/magpie/ImageData.cpp @@ -124,10 +124,7 @@ void ImageData::decode(love::filesystem::FileData *data) // The decoder *must* output a 32 bits-per-pixel image. if (decodedimage.size != decodedimage.width*decodedimage.height*sizeof(pixel)) { - if (decodeHandler) - decodeHandler->free(decodedimage.data); - else - delete[] decodedimage.data; + decoder->free(decodedimage.data); throw love::Exception("Could not convert image!"); } diff --git a/jni/love/src/modules/image/magpie/KTXHandler.cpp b/jni/love/src/modules/image/magpie/KTXHandler.cpp index 70de4b0e..9207895f 100644 --- a/jni/love/src/modules/image/magpie/KTXHandler.cpp +++ b/jni/love/src/modules/image/magpie/KTXHandler.cpp @@ -67,6 +67,7 @@ enum KTXGLInternalFormat { KTX_GL_ETC1_RGB8_OES = 0x8D64, + // ETC2 and EAC. KTX_GL_COMPRESSED_R11_EAC = 0x9270, KTX_GL_COMPRESSED_SIGNED_R11_EAC = 0x9271, KTX_GL_COMPRESSED_RG11_EAC = 0x9272, @@ -78,17 +79,33 @@ enum KTXGLInternalFormat KTX_GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278, KTX_GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279, - // I don't know if any KTX file contains PVR data, but why not support it. + // PVRTC1. KTX_GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00, KTX_GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01, KTX_GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02, KTX_GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03, - // Same with DXT1/3/5. - KTX_GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0, - KTX_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2, - KTX_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3, + // DXT1, DXT3, and DXT5. + KTX_GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0, + KTX_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2, + KTX_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3, + KTX_GL_COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8C4C, + KTX_GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8C4E, + KTX_GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8C4F, + // BC4 and BC5. + KTX_GL_COMPRESSED_RED_RGTC1 = 0x8DBB, + KTX_GL_COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC, + KTX_GL_COMPRESSED_RG_RGTC2 = 0x8DBD, + KTX_GL_COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE, + + // BC6 and BC7. + KTX_GL_COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C, + KTX_GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D, + KTX_GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E, + KTX_GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F, + + // ASTC. KTX_GL_COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0, KTX_GL_COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93B1, KTX_GL_COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93B2, @@ -129,6 +146,8 @@ CompressedImageData::Format convertFormat(uint32 glformat, bool &sRGB) { case KTX_GL_ETC1_RGB8_OES: return CompressedImageData::FORMAT_ETC1; + + // EAC and ETC2. case KTX_GL_COMPRESSED_R11_EAC: return CompressedImageData::FORMAT_EAC_R; case KTX_GL_COMPRESSED_SIGNED_R11_EAC: @@ -152,6 +171,8 @@ CompressedImageData::Format convertFormat(uint32 glformat, bool &sRGB) case KTX_GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: sRGB = true; return CompressedImageData::FORMAT_ETC2_RGBA; + + // PVRTC. case KTX_GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG: return CompressedImageData::FORMAT_PVR1_RGB4; case KTX_GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG: @@ -160,12 +181,42 @@ CompressedImageData::Format convertFormat(uint32 glformat, bool &sRGB) return CompressedImageData::FORMAT_PVR1_RGBA4; case KTX_GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: return CompressedImageData::FORMAT_PVR1_RGBA2; + + // DXT. + case KTX_GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: + sRGB = true; case KTX_GL_COMPRESSED_RGB_S3TC_DXT1_EXT: return CompressedImageData::FORMAT_DXT1; + case KTX_GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + sRGB = true; case KTX_GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: return CompressedImageData::FORMAT_DXT3; + case KTX_GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + sRGB = true; case KTX_GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: return CompressedImageData::FORMAT_DXT5; + + // BC4 and BC5. + case KTX_GL_COMPRESSED_RED_RGTC1: + return CompressedImageData::FORMAT_BC4; + case KTX_GL_COMPRESSED_SIGNED_RED_RGTC1: + return CompressedImageData::FORMAT_BC4s; + case KTX_GL_COMPRESSED_RG_RGTC2: + return CompressedImageData::FORMAT_BC5; + case KTX_GL_COMPRESSED_SIGNED_RG_RGTC2: + return CompressedImageData::FORMAT_BC5s; + + // BC6 and BC7. + case KTX_GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM: + sRGB = true; + case KTX_GL_COMPRESSED_RGBA_BPTC_UNORM: + return CompressedImageData::FORMAT_BC7; + case KTX_GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT: + return CompressedImageData::FORMAT_BC6Hs; + case KTX_GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT: + return CompressedImageData::FORMAT_BC6H; + + // ASTC. case KTX_GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: sRGB = true; case KTX_GL_COMPRESSED_RGBA_ASTC_4x4_KHR: diff --git a/jni/love/src/modules/image/magpie/STBHandler.cpp b/jni/love/src/modules/image/magpie/STBHandler.cpp index ac4ed76b..72ea4aa7 100644 --- a/jni/love/src/modules/image/magpie/STBHandler.cpp +++ b/jni/love/src/modules/image/magpie/STBHandler.cpp @@ -75,7 +75,12 @@ FormatHandler::DecodedImage STBHandler::decode(love::filesystem::FileData *data) &comp, 4); if (img.data == nullptr || img.width <= 0 || img.height <= 0) - throw love::Exception("Could not decode image with stb_image."); + { + const char *err = stbi_failure_reason(); + if (err == nullptr) + err = "unknown error"; + throw love::Exception("Could not decode image with stb_image (%s).", err); + } img.size = img.width * img.height * 4; diff --git a/jni/love/src/modules/image/wrap_Image.cpp b/jni/love/src/modules/image/wrap_Image.cpp index 8a86879c..e8c0f161 100644 --- a/jni/love/src/modules/image/wrap_Image.cpp +++ b/jni/love/src/modules/image/wrap_Image.cpp @@ -68,19 +68,24 @@ int w_newImageData(lua_State *L) t->release(); return 1; } + else if (filesystem::luax_cangetfiledata(L, 1)) // Case 2: File(Data). + { + filesystem::FileData *data = love::filesystem::luax_getfiledata(L, 1); - // Case 2: File(Data). - love::filesystem::FileData *data = love::filesystem::luax_getfiledata(L, 1); + ImageData *t = nullptr; + luax_catchexcept(L, + [&]() { t = instance()->newImageData(data); }, + [&](bool) { data->release(); } + ); - ImageData *t = nullptr; - luax_catchexcept(L, - [&]() { t = instance()->newImageData(data); }, - [&](bool) { data->release(); } - ); - - luax_pushtype(L, IMAGE_IMAGE_DATA_ID, t); - t->release(); - return 1; + luax_pushtype(L, IMAGE_IMAGE_DATA_ID, t); + t->release(); + return 1; + } + else + { + return luax_typerror(L, 1, "value"); + } } int w_newCompressedData(lua_State *L) diff --git a/jni/love/src/modules/image/wrap_ImageData.cpp b/jni/love/src/modules/image/wrap_ImageData.cpp index e362d92a..4d1ec007 100644 --- a/jni/love/src/modules/image/wrap_ImageData.cpp +++ b/jni/love/src/modules/image/wrap_ImageData.cpp @@ -164,7 +164,7 @@ int w_ImageData__mapPixelUnsafe(lua_State *L) lua_pushvalue(L, 2); lua_pushnumber(L, x); lua_pushnumber(L, y); - pixel c = t->getPixel(x, y); + pixel c = t->getPixelUnsafe(x, y); lua_pushnumber(L, c.r); lua_pushnumber(L, c.g); lua_pushnumber(L, c.b); diff --git a/jni/love/src/modules/image/wrap_ImageData.lua b/jni/love/src/modules/image/wrap_ImageData.lua index 22fbc451..ddc0e7fd 100644 --- a/jni/love/src/modules/image/wrap_ImageData.lua +++ b/jni/love/src/modules/image/wrap_ImageData.lua @@ -27,6 +27,7 @@ local ImageData = ImageData_mt.__index local tonumber, assert, error = tonumber, assert, error local type, pcall = type, pcall +local floor = math.floor local function inside(x, y, w, h) return x >= 0 and x < w and y >= 0 and y < h @@ -126,6 +127,11 @@ function ImageData:_mapPixelUnsafe(func, ix, iy, iw, ih) local p = objectcache[self] local idw, idh = p.width, p.height + ix = floor(ix) + iy = floor(iy) + iw = floor(iw) + ih = floor(ih) + local pixels = p.pointer for y=iy, iy+ih-1 do @@ -144,6 +150,9 @@ function ImageData:getPixel(x, y) if type(x) ~= "number" then error("bad argument #1 to ImageData:getPixel (expected number)", 2) end if type(y) ~= "number" then error("bad argument #2 to ImageData:getPixel (expected number)", 2) end + x = floor(x) + y = floor(y) + local p = objectcache[self] if not inside(x, y, p.width, p.height) then error("Attempt to get out-of-range pixel!", 2) end @@ -161,6 +170,9 @@ function ImageData:setPixel(x, y, r, g, b, a) if type(x) ~= "number" then error("bad argument #1 to ImageData:setPixel (expected number)", 2) end if type(y) ~= "number" then error("bad argument #2 to ImageData:setPixel (expected number)", 2) end + x = floor(x) + y = floor(y) + if type(r) == "table" then local t = r r, g, b, a = t[1], t[2], t[3], t[4] diff --git a/jni/love/src/modules/joystick/wrap_Joystick.cpp b/jni/love/src/modules/joystick/wrap_Joystick.cpp index f02df825..32791d1c 100644 --- a/jni/love/src/modules/joystick/wrap_Joystick.cpp +++ b/jni/love/src/modules/joystick/wrap_Joystick.cpp @@ -105,8 +105,8 @@ int w_Joystick_getAxes(lua_State *L) Joystick *j = luax_checkjoystick(L, 1); std::vector axes = j->getAxes(); - for (size_t i = 0; i < axes.size(); i++) - lua_pushnumber(L, axes[i]); + for (float value : axes) + lua_pushnumber(L, value); return (int) axes.size(); } @@ -129,11 +129,29 @@ int w_Joystick_isDown(lua_State *L) { Joystick *j = luax_checkjoystick(L, 1); - luaL_checkinteger(L, 2); + bool istable = lua_istable(L, 2); + int num = istable ? (int) luax_objlen(L, 2) : (lua_gettop(L) - 1); + + if (num == 0) + luaL_checkinteger(L, 2); std::vector buttons; - for (int i = 2; i <= lua_gettop(L); i++) - buttons.push_back((int) luaL_checknumber(L, i) - 1); + buttons.reserve(num); + + if (istable) + { + for (int i = 0; i < num; i++) + { + lua_rawgeti(L, 2, i + 1); + buttons.push_back((int) luaL_checknumber(L, -1) - 1); + lua_pop(L, 1); + } + } + else + { + for (int i = 0; i < num; i++) + buttons.push_back((int) luaL_checknumber(L, i + 2) - 1); + } luax_pushboolean(L, j->isDown(buttons)); return 1; @@ -164,20 +182,43 @@ int w_Joystick_isGamepadDown(lua_State *L) { Joystick *j = luax_checkjoystick(L, 1); + bool istable = lua_istable(L, 2); + int num = istable ? (int) luax_objlen(L, 2) : (lua_gettop(L) - 1); + + if (num == 0) + luaL_checkstring(L, 2); + std::vector buttons; - buttons.reserve(lua_gettop(L) - 1); + buttons.reserve(num); - luaL_checkstring(L, 2); + Joystick::GamepadButton button; - for (int i = 2; i <= lua_gettop(L); i++) + if (istable) { - const char *str = luaL_checkstring(L, i); - Joystick::GamepadButton button; + for (int i = 0; i < num; i++) + { + lua_rawgeti(L, 2, i + 1); + const char *str = luaL_checkstring(L, -1); - if (!joystick::Joystick::getConstant(str, button)) - return luaL_error(L, "Invalid gamepad button: %s", str); + if (!joystick::Joystick::getConstant(str, button)) + return luaL_error(L, "Invalid gamepad button: %s", str); - buttons.push_back(button); + buttons.push_back(button); + + lua_pop(L, 1); + } + } + else + { + for (int i = 0; i < num; i++) + { + const char *str = luaL_checkstring(L, i + 2); + + if (!joystick::Joystick::getConstant(str, button)) + return luaL_error(L, "Invalid gamepad button: %s", str); + + buttons.push_back(button); + } } luax_pushboolean(L, j->isGamepadDown(buttons)); diff --git a/jni/love/src/modules/keyboard/wrap_Keyboard.cpp b/jni/love/src/modules/keyboard/wrap_Keyboard.cpp index 3b5b9ed1..647905b1 100644 --- a/jni/love/src/modules/keyboard/wrap_Keyboard.cpp +++ b/jni/love/src/modules/keyboard/wrap_Keyboard.cpp @@ -46,14 +46,30 @@ int w_hasKeyRepeat(lua_State *L) int w_isDown(lua_State *L) { Keyboard::Key k; - int num = lua_gettop(L); + + bool istable = lua_istable(L, 1); + int num = istable ? (int) luax_objlen(L, 1) : lua_gettop(L); + std::vector keylist; keylist.reserve(num); - for (int i = 0; i < num; i++) + if (istable) { - if (Keyboard::getConstant(luaL_checkstring(L, i+1), k)) - keylist.push_back(k); + for (int i = 0; i < num; i++) + { + lua_rawgeti(L, 1, i + 1); + if (Keyboard::getConstant(luaL_checkstring(L, -1), k)) + keylist.push_back(k); + lua_pop(L, 1); + } + } + else + { + for (int i = 0; i < num; i++) + { + if (Keyboard::getConstant(luaL_checkstring(L, i+1), k)) + keylist.push_back(k); + } } luax_pushboolean(L, instance()->isDown(keylist)); @@ -63,14 +79,30 @@ int w_isDown(lua_State *L) int w_isScancodeDown(lua_State *L) { Keyboard::Scancode scancode; - int num = lua_gettop(L); + + bool istable = lua_istable(L, 1); + int num = istable ? (int) luax_objlen(L, 1) : lua_gettop(L); + std::vector scancodelist; scancodelist.reserve(num); - for (int i = 0; i < num; i++) + if (istable) { - if (Keyboard::getConstant(luaL_checkstring(L, i+1), scancode)) - scancodelist.push_back(scancode); + for (int i = 0; i < num; i++) + { + lua_rawgeti(L, 1, i + 1); + if (Keyboard::getConstant(luaL_checkstring(L, -1), scancode)) + scancodelist.push_back(scancode); + lua_pop(L, 1); + } + } + else + { + for (int i = 0; i < num; i++) + { + if (Keyboard::getConstant(luaL_checkstring(L, i+1), scancode)) + scancodelist.push_back(scancode); + } } luax_pushboolean(L, instance()->isScancodeDown(scancodelist)); diff --git a/jni/love/src/modules/love/love.cpp b/jni/love/src/modules/love/love.cpp index 5aef3806..64d3d458 100644 --- a/jni/love/src/modules/love/love.cpp +++ b/jni/love/src/modules/love/love.cpp @@ -307,7 +307,9 @@ int luaopen_love(lua_State *L) lua_pushcfunction(L, w_love_isVersionCompatible); lua_setfield(L, -2, "isVersionCompatible"); -#ifdef LOVE_WINDOWS +#ifdef LOVE_WINDOWS_UWP + lua_pushstring(L, "UWP"); +#elif LOVE_WINDOWS lua_pushstring(L, "Windows"); #elif defined(LOVE_MACOSX) lua_pushstring(L, "OS X"); diff --git a/jni/love/src/modules/math/MathModule.cpp b/jni/love/src/modules/math/MathModule.cpp index 2493630d..0432edd7 100644 --- a/jni/love/src/modules/math/MathModule.cpp +++ b/jni/love/src/modules/math/MathModule.cpp @@ -29,20 +29,19 @@ #include using std::list; -using std::vector; -using love::Vertex; +using love::Vector; namespace { // check if an angle is oriented counter clockwise - inline bool is_oriented_ccw(const Vertex &a, const Vertex &b, const Vertex &c) + inline bool is_oriented_ccw(const Vector &a, const Vector &b, const Vector &c) { // return det(b-a, c-a) >= 0 return ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)) >= 0; } // check if a and b are on the same side of the line c->d - bool on_same_side(const Vertex &a, const Vertex &b, const Vertex &c, const Vertex &d) + bool on_same_side(const Vector &a, const Vector &b, const Vector &c, const Vector &d) { float px = d.x - c.x, py = d.y - c.y; // return det(p, a-c) * det(p, b-c) >= 0 @@ -52,18 +51,16 @@ namespace } // checks is p is contained in the triangle abc - inline bool point_in_triangle(const Vertex &p, const Vertex &a, const Vertex &b, const Vertex &c) + inline bool point_in_triangle(const Vector &p, const Vector &a, const Vector &b, const Vector &c) { return on_same_side(p,a, b,c) && on_same_side(p,b, a,c) && on_same_side(p,c, a,b); } // checks if any vertex in `vertices' is in the triangle abc. - bool any_point_in_triangle(const list &vertices, const Vertex &a, const Vertex &b, const Vertex &c) + bool any_point_in_triangle(const list &vertices, const Vector &a, const Vector &b, const Vector &c) { - list::const_iterator it, end = vertices.end(); - for (it = vertices.begin(); it != end; ++it) + for (const Vector *p : vertices) { - const Vertex *p = *it; if ((p != &a) && (p != &b) && (p != &c) && point_in_triangle(*p, a,b,c)) // oh god... return true; } @@ -71,7 +68,7 @@ namespace return false; } - inline bool is_ear(const Vertex &a, const Vertex &b, const Vertex &c, const list &vertices) + inline bool is_ear(const Vector &a, const Vector &b, const Vector &c, const list &vertices) { return is_oriented_ccw(a,b,c) && !any_point_in_triangle(vertices, a,b,c); } @@ -100,25 +97,25 @@ RandomGenerator *Math::newRandomGenerator() return new RandomGenerator(); } -BezierCurve *Math::newBezierCurve(const vector &points) +BezierCurve *Math::newBezierCurve(const std::vector &points) { return new BezierCurve(points); } -vector Math::triangulate(const vector &polygon) +std::vector Math::triangulate(const std::vector &polygon) { if (polygon.size() < 3) throw love::Exception("Not a polygon"); else if (polygon.size() == 3) - return vector(1, Triangle(polygon[0], polygon[1], polygon[2])); + return std::vector(1, Triangle(polygon[0], polygon[1], polygon[2])); // collect list of connections and record leftmost item to check if the polygon // has the expected winding - vector next_idx(polygon.size()), prev_idx(polygon.size()); + std::vector next_idx(polygon.size()), prev_idx(polygon.size()); size_t idx_lm = 0; for (size_t i = 0; i < polygon.size(); ++i) { - const Vertex &lm = polygon[idx_lm], &p = polygon[i]; + const love::Vector &lm = polygon[idx_lm], &p = polygon[i]; if (p.x < lm.x || (p.x == lm.x && p.y < lm.y)) idx_lm = i; next_idx[i] = i+1; @@ -132,7 +129,7 @@ vector Math::triangulate(const vector &polygon) next_idx.swap(prev_idx); // collect list of concave polygons - list concave_vertices; + list concave_vertices; for (size_t i = 0; i < polygon.size(); ++i) { if (!is_oriented_ccw(polygon[prev_idx[i]], polygon[i], polygon[next_idx[i]])) @@ -140,14 +137,14 @@ vector Math::triangulate(const vector &polygon) } // triangulation according to kong - vector triangles; + std::vector triangles; size_t n_vertices = polygon.size(); size_t current = 1, skipped = 0, next, prev; while (n_vertices > 3) { next = next_idx[current]; prev = prev_idx[current]; - const Vertex &a = polygon[prev], &b = polygon[current], &c = polygon[next]; + const Vector &a = polygon[prev], &b = polygon[current], &c = polygon[next]; if (is_ear(a,b,c, concave_vertices)) { triangles.push_back(Triangle(a,b,c)); @@ -170,7 +167,7 @@ vector Math::triangulate(const vector &polygon) return triangles; } -bool Math::isConvex(const std::vector &polygon) +bool Math::isConvex(const std::vector &polygon) { if (polygon.size() < 3) return false; diff --git a/jni/love/src/modules/math/MathModule.h b/jni/love/src/modules/math/MathModule.h index 66b4100b..ee4ffe6f 100644 --- a/jni/love/src/modules/math/MathModule.h +++ b/jni/love/src/modules/math/MathModule.h @@ -43,6 +43,14 @@ namespace love namespace math { +struct Triangle +{ + Triangle(const Vector &x, const Vector &y, const Vector &z) + : a(x), b(y), c(z) + {} + Vector a, b, c; +}; + class BezierCurve; class Math : public Module @@ -87,7 +95,7 @@ public: * @param polygon Polygon to triangulate. Must not intersect itself. * @return List of triangles the polygon is composed of. **/ - std::vector triangulate(const std::vector &polygon); + std::vector triangulate(const std::vector &polygon); /** * Checks whether a polygon is convex. @@ -95,7 +103,7 @@ public: * @param polygon Polygon to test. * @return True if the polygon is convex, false otherwise. **/ - bool isConvex(const std::vector &polygon); + bool isConvex(const std::vector &polygon); /** * Converts a value from the sRGB (gamma) colorspace to linear RGB. diff --git a/jni/love/src/modules/math/wrap_Math.cpp b/jni/love/src/modules/math/wrap_Math.cpp index 74c8a4bd..0453a153 100644 --- a/jni/love/src/modules/math/wrap_Math.cpp +++ b/jni/love/src/modules/math/wrap_Math.cpp @@ -119,7 +119,7 @@ int w_newBezierCurve(lua_State *L) int w_triangulate(lua_State *L) { - std::vector vertices; + std::vector vertices; if (lua_istable(L, 1)) { int top = (int) luax_objlen(L, 1); @@ -129,7 +129,7 @@ int w_triangulate(lua_State *L) lua_rawgeti(L, 1, i); lua_rawgeti(L, 1, i+1); - Vertex v; + Vector v; v.x = (float) luaL_checknumber(L, -2); v.y = (float) luaL_checknumber(L, -1); vertices.push_back(v); @@ -143,7 +143,7 @@ int w_triangulate(lua_State *L) vertices.reserve(top / 2); for (int i = 1; i <= top; i += 2) { - Vertex v; + Vector v; v.x = (float) luaL_checknumber(L, i); v.y = (float) luaL_checknumber(L, i+1); vertices.push_back(v); @@ -189,7 +189,7 @@ int w_triangulate(lua_State *L) int w_isConvex(lua_State *L) { - std::vector vertices; + std::vector vertices; if (lua_istable(L, 1)) { int top = (int) luax_objlen(L, 1); @@ -199,7 +199,7 @@ int w_isConvex(lua_State *L) lua_rawgeti(L, 1, i); lua_rawgeti(L, 1, i+1); - Vertex v; + love::Vector v; v.x = (float) luaL_checknumber(L, -2); v.y = (float) luaL_checknumber(L, -1); vertices.push_back(v); @@ -213,7 +213,7 @@ int w_isConvex(lua_State *L) vertices.reserve(top / 2); for (int i = 1; i <= top; i += 2) { - Vertex v; + love::Vector v; v.x = (float) luaL_checknumber(L, i); v.y = (float) luaL_checknumber(L, i+1); vertices.push_back(v); diff --git a/jni/love/src/modules/math/wrap_Math.lua b/jni/love/src/modules/math/wrap_Math.lua index 77ed4ce0..d45c5a76 100644 --- a/jni/love/src/modules/math/wrap_Math.lua +++ b/jni/love/src/modules/math/wrap_Math.lua @@ -88,7 +88,7 @@ function love_math.noise(x, y, z, w) return tonumber(ffifuncs.noise3(x, y, z)) elseif y ~= nil then return tonumber(ffifuncs.noise2(x, y)) - elseif x ~= nil then + else return tonumber(ffifuncs.noise1(x)) end end diff --git a/jni/love/src/modules/mouse/wrap_Mouse.cpp b/jni/love/src/modules/mouse/wrap_Mouse.cpp index 2d7f7dc2..90b8892a 100644 --- a/jni/love/src/modules/mouse/wrap_Mouse.cpp +++ b/jni/love/src/modules/mouse/wrap_Mouse.cpp @@ -142,12 +142,26 @@ int w_setPosition(lua_State *L) int w_isDown(lua_State *L) { - int num = lua_gettop(L); + bool istable = lua_istable(L, 1); + int num = istable ? (int) luax_objlen(L, 1) : lua_gettop(L); + std::vector buttons; buttons.reserve(num); - for (int i = 0; i < num; i++) - buttons.push_back((int) luaL_checknumber(L, i + 1)); + if (istable) + { + for (int i = 0; i < num; i++) + { + lua_rawgeti(L, 1, i + 1); + buttons.push_back((int) luaL_checknumber(L, -1)); + lua_pop(L, 1); + } + } + else + { + for (int i = 0; i < num; i++) + buttons.push_back((int) luaL_checknumber(L, i + 1)); + } luax_pushboolean(L, instance()->isDown(buttons)); return 1; diff --git a/jni/love/src/modules/physics/box2d/ChainShape.cpp b/jni/love/src/modules/physics/box2d/ChainShape.cpp index d55e3920..1b77d0cc 100644 --- a/jni/love/src/modules/physics/box2d/ChainShape.cpp +++ b/jni/love/src/modules/physics/box2d/ChainShape.cpp @@ -55,6 +55,12 @@ void ChainShape::setNextVertex(float x, float y) c->SetNextVertex(Physics::scaleDown(v)); } +void ChainShape::setNextVertex() +{ + b2ChainShape *c = (b2ChainShape *)shape; + c->m_hasNextVertex = false; +} + void ChainShape::setPreviousVertex(float x, float y) { if (loop) @@ -64,7 +70,43 @@ void ChainShape::setPreviousVertex(float x, float y) } b2Vec2 v(x, y); b2ChainShape *c = (b2ChainShape *)shape; - c->SetNextVertex(Physics::scaleDown(v)); + c->SetPrevVertex(Physics::scaleDown(v)); +} + +void ChainShape::setPreviousVertex() +{ + b2ChainShape *c = (b2ChainShape *)shape; + c->m_hasPrevVertex = false; +} + +bool ChainShape::getNextVertex(float &x, float &y) const +{ + b2ChainShape *c = (b2ChainShape *)shape; + + if (c->m_hasNextVertex) + { + b2Vec2 v = Physics::scaleUp(c->m_nextVertex); + x = v.x; + y = v.y; + return true; + } + + return false; +} + +bool ChainShape::getPreviousVertex(float &x, float &y) const +{ + b2ChainShape *c = (b2ChainShape *)shape; + + if (c->m_hasPrevVertex) + { + b2Vec2 v = Physics::scaleUp(c->m_prevVertex); + x = v.x; + y = v.y; + return true; + } + + return false; } EdgeShape *ChainShape::getChildEdge(int index) const diff --git a/jni/love/src/modules/physics/box2d/ChainShape.h b/jni/love/src/modules/physics/box2d/ChainShape.h index 9f53ca95..8b7a18f2 100644 --- a/jni/love/src/modules/physics/box2d/ChainShape.h +++ b/jni/love/src/modules/physics/box2d/ChainShape.h @@ -54,6 +54,7 @@ public: * @param y The y-coordinate of the vertex. **/ void setNextVertex(float x, float y); + void setNextVertex(); /** * Establish connectivity to a vertex that precedes @@ -62,6 +63,17 @@ public: * @param y The y-coordinate of the vertex. **/ void setPreviousVertex(float x, float y); + void setPreviousVertex(); + + /** + * Gets the vertex that follows the last vertex. + **/ + bool getNextVertex(float &x, float &y) const; + + /** + * Gets the vertex that precedes the first vertex. + **/ + bool getPreviousVertex(float &x, float &y) const; /** * Returns a child EdgeShape. diff --git a/jni/love/src/modules/physics/box2d/EdgeShape.cpp b/jni/love/src/modules/physics/box2d/EdgeShape.cpp index 47f427c9..8189b131 100644 --- a/jni/love/src/modules/physics/box2d/EdgeShape.cpp +++ b/jni/love/src/modules/physics/box2d/EdgeShape.cpp @@ -43,6 +43,64 @@ EdgeShape::~EdgeShape() { } +void EdgeShape::setNextVertex(float x, float y) +{ + b2EdgeShape *e = (b2EdgeShape *)shape; + b2Vec2 v(x, y); + e->m_vertex3 = Physics::scaleDown(v); + e->m_hasVertex3 = true; +} + +void EdgeShape::setNextVertex() +{ + b2EdgeShape *e = (b2EdgeShape *)shape; + e->m_hasVertex3 = false; +} + +bool EdgeShape::getNextVertex(float &x, float &y) const +{ + b2EdgeShape *e = (b2EdgeShape *)shape; + + if (e->m_hasVertex3) + { + b2Vec2 v = Physics::scaleUp(e->m_vertex3); + x = v.x; + y = v.y; + return true; + } + + return false; +} + +void EdgeShape::setPreviousVertex(float x, float y) +{ + b2EdgeShape *e = (b2EdgeShape *)shape; + b2Vec2 v(x, y); + e->m_vertex0 = Physics::scaleDown(v); + e->m_hasVertex0 = true; +} + +void EdgeShape::setPreviousVertex() +{ + b2EdgeShape *e = (b2EdgeShape *)shape; + e->m_hasVertex0 = false; +} + +bool EdgeShape::getPreviousVertex(float &x, float &y) const +{ + b2EdgeShape *e = (b2EdgeShape *)shape; + + if (e->m_hasVertex0) + { + b2Vec2 v = Physics::scaleUp(e->m_vertex0); + x = v.x; + y = v.y; + return true; + } + + return false; +} + int EdgeShape::getPoints(lua_State *L) { b2EdgeShape *e = (b2EdgeShape *)shape; diff --git a/jni/love/src/modules/physics/box2d/EdgeShape.h b/jni/love/src/modules/physics/box2d/EdgeShape.h index 86fd4e83..3e5184a2 100644 --- a/jni/love/src/modules/physics/box2d/EdgeShape.h +++ b/jni/love/src/modules/physics/box2d/EdgeShape.h @@ -47,6 +47,14 @@ public: virtual ~EdgeShape(); + void setNextVertex(float x, float y); + void setNextVertex(); + bool getNextVertex(float &x, float &y) const; + + void setPreviousVertex(float x, float y); + void setPreviousVertex(); + bool getPreviousVertex(float &x, float &y) const; + /** * Returns the transformed points of the edge shape. * This function is useful for debug drawing and such. diff --git a/jni/love/src/modules/physics/box2d/Fixture.cpp b/jni/love/src/modules/physics/box2d/Fixture.cpp index 49689a4b..7f0b31e2 100644 --- a/jni/love/src/modules/physics/box2d/Fixture.cpp +++ b/jni/love/src/modules/physics/box2d/Fixture.cpp @@ -193,16 +193,28 @@ int Fixture::getMask(lua_State *L) uint16 Fixture::getBits(lua_State *L) { // Get number of args. - int argc = lua_gettop(L); + bool istable = lua_istable(L, 1); + int argc = istable ? (int) luax_objlen(L, 1) : lua_gettop(L); // The new bitset. std::bitset<16> b; - for (int i = 1; i<=argc; i++) + for (int i = 1; i <= argc; i++) { - size_t bpos = (size_t)(lua_tointeger(L, i)-1); + size_t bpos = 0; + + if (istable) + { + lua_rawgeti(L, 1, i); + bpos = (size_t) (lua_tointeger(L, -1) - 1); + lua_pop(L, 1); + } + else + bpos = (size_t) (lua_tointeger(L, i) - 1); + if (bpos >= 16) luaL_error(L, "Values must be in range 1-16."); + b.set(bpos, true); } @@ -272,7 +284,8 @@ int Fixture::rayCast(lua_State *L) const int Fixture::getBoundingBox(lua_State *L) const { int childIndex = (int) luaL_optnumber(L, 1, 1) - 1; // Convert from 1-based index - b2AABB box = fixture->GetAABB(childIndex); + b2AABB box; + luax_catchexcept(L, [&]() { box = fixture->GetAABB(childIndex); }); box = Physics::scaleUp(box); lua_pushnumber(L, box.lowerBound.x); lua_pushnumber(L, box.lowerBound.y); diff --git a/jni/love/src/modules/physics/box2d/Joint.h b/jni/love/src/modules/physics/box2d/Joint.h index dd6be8e1..25823498 100644 --- a/jni/love/src/modules/physics/box2d/Joint.h +++ b/jni/love/src/modules/physics/box2d/Joint.h @@ -84,8 +84,8 @@ public: **/ Type getType() const; - Body *getBodyA() const; - Body *getBodyB() const; + virtual Body *getBodyA() const; + virtual Body *getBodyB() const; /** * Gets the anchor positions of the Joint in world diff --git a/jni/love/src/modules/physics/box2d/MouseJoint.cpp b/jni/love/src/modules/physics/box2d/MouseJoint.cpp index b037a9c7..96768e87 100644 --- a/jni/love/src/modules/physics/box2d/MouseJoint.cpp +++ b/jni/love/src/modules/physics/box2d/MouseJoint.cpp @@ -36,6 +36,9 @@ MouseJoint::MouseJoint(Body *body1, float x, float y) : Joint(body1) , joint(NULL) { + if (body1->getType() == Body::BODY_KINEMATIC) + throw love::Exception("Cannot attach a MouseJoint to a kinematic body"); + b2MouseJointDef def; def.bodyA = body1->world->getGroundBody(); @@ -91,6 +94,16 @@ float MouseJoint::getDampingRatio() const return joint->GetDampingRatio(); } +Body *MouseJoint::getBodyA() const +{ + return Joint::getBodyB(); +} + +Body *MouseJoint::getBodyB() const +{ + return nullptr; +} + } // box2d } // physics } // love diff --git a/jni/love/src/modules/physics/box2d/MouseJoint.h b/jni/love/src/modules/physics/box2d/MouseJoint.h index 803bf4b9..bf365e8d 100644 --- a/jni/love/src/modules/physics/box2d/MouseJoint.h +++ b/jni/love/src/modules/physics/box2d/MouseJoint.h @@ -95,6 +95,9 @@ public: **/ float getDampingRatio() const; + virtual Body *getBodyA() const; + virtual Body *getBodyB() const; + private: // The Box2D MouseJoint object. b2MouseJoint *joint; diff --git a/jni/love/src/modules/physics/box2d/Physics.cpp b/jni/love/src/modules/physics/box2d/Physics.cpp index 8673c1ad..e55be0c5 100644 --- a/jni/love/src/modules/physics/box2d/Physics.cpp +++ b/jni/love/src/modules/physics/box2d/Physics.cpp @@ -223,9 +223,14 @@ MouseJoint *Physics::newMouseJoint(Body *body, float x, float y) return new MouseJoint(body, x, y); } -RevoluteJoint *Physics::newRevoluteJoint(Body *body1, Body *body2, float x, float y, bool collideConnected) +RevoluteJoint *Physics::newRevoluteJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected) { - return new RevoluteJoint(body1, body2, x, y, collideConnected); + return new RevoluteJoint(body1, body2, xA, yA, xB, yB, collideConnected); +} + +RevoluteJoint *Physics::newRevoluteJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected, float referenceAngle) +{ + return new RevoluteJoint(body1, body2, xA, yA, xB, yB, collideConnected, referenceAngle); } PrismaticJoint *Physics::newPrismaticJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected) @@ -233,6 +238,11 @@ PrismaticJoint *Physics::newPrismaticJoint(Body *body1, Body *body2, float xA, f return new PrismaticJoint(body1, body2, xA, yA, xB, yB, ax, ay, collideConnected); } +PrismaticJoint *Physics::newPrismaticJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected, float referenceAngle) +{ + return new PrismaticJoint(body1, body2, xA, yA, xB, yB, ax, ay, collideConnected, referenceAngle); +} + PulleyJoint *Physics::newPulleyJoint(Body *body1, Body *body2, b2Vec2 groundAnchor1, b2Vec2 groundAnchor2, b2Vec2 anchor1, b2Vec2 anchor2, float ratio, bool collideConnected) { return new PulleyJoint(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, ratio, collideConnected); @@ -253,6 +263,11 @@ WeldJoint *Physics::newWeldJoint(Body *body1, Body *body2, float xA, float yA, f return new WeldJoint(body1, body2, xA, yA, xB, yB, collideConnected); } +WeldJoint *Physics::newWeldJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected, float referenceAngle) +{ + return new WeldJoint(body1, body2, xA, yA, xB, yB, collideConnected, referenceAngle); +} + WheelJoint *Physics::newWheelJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected) { return new WheelJoint(body1, body2, xA, yA, xB, yB, ax, ay, collideConnected); diff --git a/jni/love/src/modules/physics/box2d/Physics.h b/jni/love/src/modules/physics/box2d/Physics.h index 11350637..48089f5f 100644 --- a/jni/love/src/modules/physics/box2d/Physics.h +++ b/jni/love/src/modules/physics/box2d/Physics.h @@ -171,11 +171,16 @@ public: /** * Creates a new RevoluteJoint connecting body1 with body2. - * @param x Anchor along the x-axis. (World coordinates) - * @param y Anchor along the y-axis. (World coordinates) + * @param xA Anchor for body 1 along the x-axis. (World coordinates) + * @param yA Anchor for body 1 along the y-axis. (World coordinates) + * @param xB Anchor for body 2 along the x-axis. (World coordinates) + * @param yB Anchor for body 2 along the y-axis. (World coordinates) * @param collideConnected Whether the connected bodies should collide with each other. Defaults to false. + * @param referenceAngle The reference angle. **/ - RevoluteJoint *newRevoluteJoint(Body *body1, Body *body2, float x, float y, bool collideConnected); + RevoluteJoint *newRevoluteJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected); + + RevoluteJoint *newRevoluteJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected, float referenceAngle); /** * Creates a new PrismaticJoint connecting body1 with body2. @@ -186,9 +191,12 @@ public: * @param ax The x-component of the world-axis. * @param ay The y-component of the world-axis. * @param collideConnected Whether the connected bodies should collide with each other. Defaults to false. + * @param referenceAngle The reference angle. **/ PrismaticJoint *newPrismaticJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected); + PrismaticJoint *newPrismaticJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected, float referenceAngle); + /** * Creates a new PulleyJoint connecting body1 with body2. * @param groundAnchor1 World ground-anchor for body1. @@ -226,9 +234,12 @@ public: * @param xB Anchor for body 2 along the x-axis. (World coordinates) * @param yB Anchor for body 2 along the y-axis. (World coordinates) * @param collideConnected Whether the connected bodies should collide with each other. Defaults to false. + * @param referenceAngle The reference angle. **/ WeldJoint *newWeldJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected); + WeldJoint *newWeldJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected, float referenceAngle); + /** * Creates a new WheelJoint connecting body1 with body2. * @param xA Anchor for body 1 along the x-axis. (World coordinates) diff --git a/jni/love/src/modules/physics/box2d/PrismaticJoint.cpp b/jni/love/src/modules/physics/box2d/PrismaticJoint.cpp index cd56aa96..8ee1e108 100644 --- a/jni/love/src/modules/physics/box2d/PrismaticJoint.cpp +++ b/jni/love/src/modules/physics/box2d/PrismaticJoint.cpp @@ -37,18 +37,32 @@ PrismaticJoint::PrismaticJoint(Body *body1, Body *body2, float xA, float yA, flo , joint(NULL) { b2PrismaticJointDef def; + init(def, body1, body2, xA, yA, xB, yB, ax, ay, collideConnected); + joint = (b2PrismaticJoint *)createJoint(&def); +} +PrismaticJoint::PrismaticJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected, float referenceAngle) + : Joint(body1, body2) + , joint(NULL) +{ + b2PrismaticJointDef def; + init(def, body1, body2, xA, yA, xB, yB, ax, ay, collideConnected); + def.referenceAngle = referenceAngle; + joint = (b2PrismaticJoint *)createJoint(&def); +} + +PrismaticJoint::~PrismaticJoint() +{ +} + +void PrismaticJoint::init(b2PrismaticJointDef &def, Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected) +{ def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(xA,yA)), b2Vec2(ax,ay)); def.localAnchorB = body2->body->GetLocalPoint(Physics::scaleDown(b2Vec2(xB, yB))); def.lowerTranslation = 0.0f; def.upperTranslation = 100.0f; def.enableLimit = true; def.collideConnected = collideConnected; - joint = (b2PrismaticJoint *)createJoint(&def); -} - -PrismaticJoint::~PrismaticJoint() -{ } float PrismaticJoint::getJointTranslation() const @@ -138,6 +152,19 @@ int PrismaticJoint::getLimits(lua_State *L) return 2; } +int PrismaticJoint::getAxis(lua_State *L) +{ + b2Vec2 axis = joint->GetLocalAxisA(); + getBodyA()->getWorldVector(axis.x, axis.y, axis.x, axis.y); + lua_pushnumber(L, axis.x); + lua_pushnumber(L, axis.y); + return 2; +} + +float PrismaticJoint::getReferenceAngle() const +{ + return joint->GetReferenceAngle(); +} } // box2d } // physics diff --git a/jni/love/src/modules/physics/box2d/PrismaticJoint.h b/jni/love/src/modules/physics/box2d/PrismaticJoint.h index 5a34b2c8..dba1d4e7 100644 --- a/jni/love/src/modules/physics/box2d/PrismaticJoint.h +++ b/jni/love/src/modules/physics/box2d/PrismaticJoint.h @@ -44,6 +44,8 @@ public: **/ PrismaticJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected); + PrismaticJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected, float referenceAngle); + virtual ~PrismaticJoint(); /** @@ -134,10 +136,24 @@ public: **/ int getLimits(lua_State *L); + /** + * Gets the axis unit vector, relative to body1. + * @returns The X component of the axis unit vector. + * @returns The Y component of the axis unit vector. + **/ + int getAxis(lua_State *L); + + /** + * Gets the reference angle. + **/ + float getReferenceAngle() const; + private: // The Box2D prismatic joint object. b2PrismaticJoint *joint; + + void init(b2PrismaticJointDef &def, Body *body1, Body *body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected); }; } // box2d diff --git a/jni/love/src/modules/physics/box2d/RevoluteJoint.cpp b/jni/love/src/modules/physics/box2d/RevoluteJoint.cpp index 513b1fa8..ba1e1e87 100644 --- a/jni/love/src/modules/physics/box2d/RevoluteJoint.cpp +++ b/jni/love/src/modules/physics/box2d/RevoluteJoint.cpp @@ -34,13 +34,22 @@ namespace physics namespace box2d { -RevoluteJoint::RevoluteJoint(Body *body1, Body *body2, float x, float y, bool collideConnected) +RevoluteJoint::RevoluteJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected) : Joint(body1, body2) , joint(NULL) { b2RevoluteJointDef def; - def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(x,y))); - def.collideConnected = collideConnected; + init(def, body1, body2, xA, yA, xB, yB, collideConnected); + joint = (b2RevoluteJoint *)createJoint(&def); +} + +RevoluteJoint::RevoluteJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected, float referenceAngle) + : Joint(body1, body2) + , joint(NULL) +{ + b2RevoluteJointDef def; + init(def, body1, body2, xA, yA, xB, yB, collideConnected); + def.referenceAngle = referenceAngle; joint = (b2RevoluteJoint *)createJoint(&def); } @@ -48,6 +57,13 @@ RevoluteJoint::~RevoluteJoint() { } +void RevoluteJoint::init(b2RevoluteJointDef &def, Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected) +{ + def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(xA,yA))); + def.localAnchorB = body2->body->GetLocalPoint(Physics::scaleDown(b2Vec2(xB, yB))); + def.collideConnected = collideConnected; +} + float RevoluteJoint::getJointAngle() const { return joint->GetJointAngle(); @@ -135,6 +151,11 @@ int RevoluteJoint::getLimits(lua_State *L) return 2; } +float RevoluteJoint::getReferenceAngle() const +{ + return joint->GetReferenceAngle(); +} + } // box2d } // physics } // love diff --git a/jni/love/src/modules/physics/box2d/RevoluteJoint.h b/jni/love/src/modules/physics/box2d/RevoluteJoint.h index d3412e3c..f54026be 100644 --- a/jni/love/src/modules/physics/box2d/RevoluteJoint.h +++ b/jni/love/src/modules/physics/box2d/RevoluteJoint.h @@ -42,7 +42,9 @@ public: /** * Creates a new RevoluteJoint connecting body1 and body2. **/ - RevoluteJoint(Body *body1, Body *body2, float x, float y, bool collideConnected); + RevoluteJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected); + + RevoluteJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected, float referenceAngle); virtual ~RevoluteJoint(); @@ -134,10 +136,17 @@ public: **/ int getLimits(lua_State *L); + /** + * Gets the reference angle. + **/ + float getReferenceAngle() const; + private: // The Box2D revolute joint object. b2RevoluteJoint *joint; + + void init(b2RevoluteJointDef &def, Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected); }; } // box2d diff --git a/jni/love/src/modules/physics/box2d/WeldJoint.cpp b/jni/love/src/modules/physics/box2d/WeldJoint.cpp index 51b6b9f5..bc21a28f 100644 --- a/jni/love/src/modules/physics/box2d/WeldJoint.cpp +++ b/jni/love/src/modules/physics/box2d/WeldJoint.cpp @@ -39,9 +39,17 @@ WeldJoint::WeldJoint(Body *body1, Body *body2, float xA, float yA, float xB, flo , joint(NULL) { b2WeldJointDef def; - def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(xA,yA))); - def.localAnchorB = body2->body->GetLocalPoint(Physics::scaleDown(b2Vec2(xB, yB))); - def.collideConnected = collideConnected; + init(def, body1, body2, xA, yA, xB, yB, collideConnected); + joint = (b2WeldJoint *)createJoint(&def); +} + +WeldJoint::WeldJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected, float referenceAngle) + : Joint(body1, body2) + , joint(NULL) +{ + b2WeldJointDef def; + init(def, body1, body2, xA, yA, xB, yB, collideConnected); + def.referenceAngle = referenceAngle; joint = (b2WeldJoint *)createJoint(&def); } @@ -49,6 +57,13 @@ WeldJoint::~WeldJoint() { } +void WeldJoint::init(b2WeldJointDef &def, Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected) +{ + def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(xA,yA))); + def.localAnchorB = body2->body->GetLocalPoint(Physics::scaleDown(b2Vec2(xB, yB))); + def.collideConnected = collideConnected; +} + void WeldJoint::setFrequency(float hz) { joint->SetFrequency(hz); @@ -69,6 +84,11 @@ float WeldJoint::getDampingRatio() const return joint->GetDampingRatio(); } +float WeldJoint::getReferenceAngle() const +{ + return joint->GetReferenceAngle(); +} + } // box2d } // physics } // love diff --git a/jni/love/src/modules/physics/box2d/WeldJoint.h b/jni/love/src/modules/physics/box2d/WeldJoint.h index 8ddbb9c8..c3fa0a3d 100644 --- a/jni/love/src/modules/physics/box2d/WeldJoint.h +++ b/jni/love/src/modules/physics/box2d/WeldJoint.h @@ -43,6 +43,8 @@ public: **/ WeldJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected); + WeldJoint(Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected, float referenceAngle); + virtual ~WeldJoint(); /** @@ -67,10 +69,17 @@ public: **/ float getDampingRatio() const; + /** + * Gets the reference angle. + **/ + float getReferenceAngle() const; + private: // The Box2D weld joint object. b2WeldJoint *joint; + + void init(b2WeldJointDef &def, Body *body1, Body *body2, float xA, float yA, float xB, float yB, bool collideConnected); }; } // box2d diff --git a/jni/love/src/modules/physics/box2d/WheelJoint.cpp b/jni/love/src/modules/physics/box2d/WheelJoint.cpp index b28220ce..2670878c 100644 --- a/jni/love/src/modules/physics/box2d/WheelJoint.cpp +++ b/jni/love/src/modules/physics/box2d/WheelJoint.cpp @@ -113,6 +113,14 @@ float WheelJoint::getSpringDampingRatio() const return joint->GetSpringDampingRatio(); } +int WheelJoint::getAxis(lua_State *L) +{ + b2Vec2 axis = joint->GetLocalAxisA(); + getBodyA()->getWorldVector(axis.x, axis.y, axis.x, axis.y); + lua_pushnumber(L, axis.x); + lua_pushnumber(L, axis.y); + return 2; +} } // box2d } // physics diff --git a/jni/love/src/modules/physics/box2d/WheelJoint.h b/jni/love/src/modules/physics/box2d/WheelJoint.h index 7d1b4600..b08d2810 100644 --- a/jni/love/src/modules/physics/box2d/WheelJoint.h +++ b/jni/love/src/modules/physics/box2d/WheelJoint.h @@ -114,6 +114,13 @@ public: **/ float getSpringDampingRatio() const; + /** + * Gets the axis unit vector, relative to body1. + * @returns The X component of the axis unit vector. + * @returns The Y component of the axis unit vector. + **/ + int getAxis(lua_State *L); + private: // The Box2D wheel joint object. diff --git a/jni/love/src/modules/physics/box2d/wrap_ChainShape.cpp b/jni/love/src/modules/physics/box2d/wrap_ChainShape.cpp index 8cf7d8f8..a68e6677 100644 --- a/jni/love/src/modules/physics/box2d/wrap_ChainShape.cpp +++ b/jni/love/src/modules/physics/box2d/wrap_ChainShape.cpp @@ -37,18 +37,28 @@ ChainShape *luax_checkchainshape(lua_State *L, int idx) int w_ChainShape_setNextVertex(lua_State *L) { ChainShape *c = luax_checkchainshape(L, 1); - float x = (float)luaL_checknumber(L, 2); - float y = (float)luaL_checknumber(L, 3); - luax_catchexcept(L, [&](){ c->setNextVertex(x, y); }); + if (lua_isnoneornil(L, 2)) + c->setNextVertex(); + else + { + float x = (float)luaL_checknumber(L, 2); + float y = (float)luaL_checknumber(L, 3); + luax_catchexcept(L, [&](){ c->setNextVertex(x, y); }); + } return 0; } int w_ChainShape_setPreviousVertex(lua_State *L) { ChainShape *c = luax_checkchainshape(L, 1); - float x = (float)luaL_checknumber(L, 2); - float y = (float)luaL_checknumber(L, 3); - luax_catchexcept(L, [&](){ c->setPreviousVertex(x, y); }); + if (lua_isnoneornil(L, 2)) + c->setPreviousVertex(); + else + { + float x = (float)luaL_checknumber(L, 2); + float y = (float)luaL_checknumber(L, 3); + luax_catchexcept(L, [&](){ c->setPreviousVertex(x, y); }); + } return 0; } @@ -82,6 +92,32 @@ int w_ChainShape_getPoint(lua_State *L) return 2; } +int w_ChainShape_getNextVertex(lua_State *L) +{ + ChainShape *c = luax_checkchainshape(L, 1); + float x, y; + if (c->getNextVertex(x, y)) + { + lua_pushnumber(L, x); + lua_pushnumber(L, y); + return 2; + } + return 0; +} + +int w_ChainShape_getPreviousVertex(lua_State *L) +{ + ChainShape *c = luax_checkchainshape(L, 1); + float x, y; + if (c->getPreviousVertex(x, y)) + { + lua_pushnumber(L, x); + lua_pushnumber(L, y); + return 2; + } + return 0; +} + int w_ChainShape_getPoints(lua_State *L) { ChainShape *c = luax_checkchainshape(L, 1); @@ -102,6 +138,8 @@ static const luaL_Reg w_ChainShape_functions[] = { { "setNextVertex", w_ChainShape_setNextVertex }, { "setPreviousVertex", w_ChainShape_setPreviousVertex }, + { "getNextVertex", w_ChainShape_getNextVertex }, + { "getPreviousVertex", w_ChainShape_getPreviousVertex }, { "getChildEdge", w_ChainShape_getChildEdge }, { "getVertexCount", w_ChainShape_getVertexCount }, { "getPoint", w_ChainShape_getPoint }, diff --git a/jni/love/src/modules/physics/box2d/wrap_EdgeShape.cpp b/jni/love/src/modules/physics/box2d/wrap_EdgeShape.cpp index 4dfceb32..53c8805c 100644 --- a/jni/love/src/modules/physics/box2d/wrap_EdgeShape.cpp +++ b/jni/love/src/modules/physics/box2d/wrap_EdgeShape.cpp @@ -32,6 +32,60 @@ EdgeShape *luax_checkedgeshape(lua_State *L, int idx) return luax_checktype(L, idx, PHYSICS_EDGE_SHAPE_ID); } +int w_EdgeShape_setNextVertex(lua_State *L) +{ + EdgeShape *t = luax_checkedgeshape(L, 1); + if (lua_isnoneornil(L, 2)) + t->setNextVertex(); + else + { + float x = (float)luaL_checknumber(L, 2); + float y = (float)luaL_checknumber(L, 3); + t->setNextVertex(x, y); + } + return 0; +} + +int w_EdgeShape_setPreviousVertex(lua_State *L) +{ + EdgeShape *t = luax_checkedgeshape(L, 1); + if (lua_isnoneornil(L, 2)) + t->setPreviousVertex(); + else + { + float x = (float)luaL_checknumber(L, 2); + float y = (float)luaL_checknumber(L, 3); + t->setPreviousVertex(x, y); + } + return 0; +} + +int w_EdgeShape_getNextVertex(lua_State *L) +{ + EdgeShape *t = luax_checkedgeshape(L, 1); + float x, y; + if (t->getNextVertex(x, y)) + { + lua_pushnumber(L, x); + lua_pushnumber(L, y); + return 2; + } + return 0; +} + +int w_EdgeShape_getPreviousVertex(lua_State *L) +{ + EdgeShape *t = luax_checkedgeshape(L, 1); + float x, y; + if (t->getPreviousVertex(x, y)) + { + lua_pushnumber(L, x); + lua_pushnumber(L, y); + return 2; + } + return 0; +} + int w_EdgeShape_getPoints(lua_State *L) { EdgeShape *t = luax_checkedgeshape(L, 1); @@ -41,6 +95,10 @@ int w_EdgeShape_getPoints(lua_State *L) static const luaL_Reg w_EdgeShape_functions[] = { + { "setNextVertex", w_EdgeShape_setNextVertex }, + { "setPreviousVertex", w_EdgeShape_setPreviousVertex }, + { "getNextVertex", w_EdgeShape_getNextVertex }, + { "getPreviousVertex", w_EdgeShape_getPreviousVertex }, { "getPoints", w_EdgeShape_getPoints }, { 0, 0 } }; diff --git a/jni/love/src/modules/physics/box2d/wrap_Fixture.cpp b/jni/love/src/modules/physics/box2d/wrap_Fixture.cpp index da045c54..6074c256 100644 --- a/jni/love/src/modules/physics/box2d/wrap_Fixture.cpp +++ b/jni/love/src/modules/physics/box2d/wrap_Fixture.cpp @@ -118,8 +118,8 @@ int w_Fixture_getBody(lua_State *L) int w_Fixture_getShape(lua_State *L) { Fixture *t = luax_checkfixture(L, 1); - Shape *shape = t->getShape(); - if (shape == 0) + StrongRef shape(t->getShape(), Acquire::NORETAIN); + if (shape.get() == nullptr) return 0; switch (shape->getType()) { @@ -139,7 +139,6 @@ int w_Fixture_getShape(lua_State *L) luax_pushtype(L, PHYSICS_SHAPE_ID, shape); break; } - shape->release(); return 1; } diff --git a/jni/love/src/modules/physics/box2d/wrap_Physics.cpp b/jni/love/src/modules/physics/box2d/wrap_Physics.cpp index ef6327c6..27dc7101 100644 --- a/jni/love/src/modules/physics/box2d/wrap_Physics.cpp +++ b/jni/love/src/modules/physics/box2d/wrap_Physics.cpp @@ -215,12 +215,27 @@ int w_newRevoluteJoint(lua_State *L) { Body *body1 = luax_checkbody(L, 1); Body *body2 = luax_checkbody(L, 2); - float x = (float)luaL_checknumber(L, 3); - float y = (float)luaL_checknumber(L, 4); - bool collideConnected = luax_optboolean(L, 5, false); + float xA = (float)luaL_checknumber(L, 3); + float yA = (float)luaL_checknumber(L, 4); + float xB, yB; + bool collideConnected; + float referenceAngle = 0.0f; + if (lua_gettop(L) >= 6) + { + xB = (float)luaL_checknumber(L, 5); + yB = (float)luaL_checknumber(L, 6); + collideConnected = luax_optboolean(L, 7, false); + referenceAngle = (float)luaL_optnumber(L, 8, referenceAngle); + } + else + { + xB = xA; + yB = yA; + collideConnected = luax_optboolean(L, 5, false); + } RevoluteJoint *j; luax_catchexcept(L, [&]() { - j = instance()->newRevoluteJoint(body1, body2, x, y, collideConnected); + j = instance()->newRevoluteJoint(body1, body2, xA, yA, xB, yB, collideConnected, referenceAngle); }); luax_pushtype(L, PHYSICS_REVOLUTE_JOINT_ID, j); j->release(); @@ -235,6 +250,7 @@ int w_newPrismaticJoint(lua_State *L) float yA = (float)luaL_checknumber(L, 4); float xB, yB, ax, ay; bool collideConnected; + float referenceAngle = 0.0f; if (lua_gettop(L) >= 8) { xB = (float)luaL_checknumber(L, 5); @@ -242,6 +258,7 @@ int w_newPrismaticJoint(lua_State *L) ax = (float)luaL_checknumber(L, 7); ay = (float)luaL_checknumber(L, 8); collideConnected = luax_optboolean(L, 9, false); + referenceAngle = (float)luaL_optnumber(L, 10, referenceAngle); } else { @@ -253,7 +270,7 @@ int w_newPrismaticJoint(lua_State *L) } PrismaticJoint *j; luax_catchexcept(L, [&]() { - j = instance()->newPrismaticJoint(body1, body2, xA, yA, xB, yB, ax, ay, collideConnected); + j = instance()->newPrismaticJoint(body1, body2, xA, yA, xB, yB, ax, ay, collideConnected, referenceAngle); }); luax_pushtype(L, PHYSICS_PRISMATIC_JOINT_ID, j); j->release(); @@ -337,11 +354,13 @@ int w_newWeldJoint(lua_State *L) float yA = (float)luaL_checknumber(L, 4); float xB, yB; bool collideConnected; + float referenceAngle = 0.0f; if (lua_gettop(L) >= 6) { xB = (float)luaL_checknumber(L, 5); yB = (float)luaL_checknumber(L, 6); collideConnected = luax_optboolean(L, 7, false); + referenceAngle = (float)luaL_optnumber(L, 8, referenceAngle); } else { @@ -351,7 +370,7 @@ int w_newWeldJoint(lua_State *L) } WeldJoint *j; luax_catchexcept(L, [&]() { - j = instance()->newWeldJoint(body1, body2, xA, yA, xB, yB, collideConnected); + j = instance()->newWeldJoint(body1, body2, xA, yA, xB, yB, collideConnected, referenceAngle); }); luax_pushtype(L, PHYSICS_WELD_JOINT_ID, j); j->release(); diff --git a/jni/love/src/modules/physics/box2d/wrap_PrismaticJoint.cpp b/jni/love/src/modules/physics/box2d/wrap_PrismaticJoint.cpp index abd1895b..a8c07331 100644 --- a/jni/love/src/modules/physics/box2d/wrap_PrismaticJoint.cpp +++ b/jni/love/src/modules/physics/box2d/wrap_PrismaticJoint.cpp @@ -164,6 +164,20 @@ int w_PrismaticJoint_getLimits(lua_State *L) return t->getLimits(L); } +int w_PrismaticJoint_getAxis(lua_State *L) +{ + PrismaticJoint *t = luax_checkprismaticjoint(L, 1); + lua_remove(L, 1); + return t->getAxis(L); +} + +int w_PrismaticJoint_getReferenceAngle(lua_State *L) +{ + PrismaticJoint *t = luax_checkprismaticjoint(L, 1); + lua_pushnumber(L, t->getReferenceAngle()); + return 1; +} + static const luaL_Reg w_PrismaticJoint_functions[] = { { "getJointTranslation", w_PrismaticJoint_getJointTranslation }, @@ -183,6 +197,8 @@ static const luaL_Reg w_PrismaticJoint_functions[] = { "getLowerLimit", w_PrismaticJoint_getLowerLimit }, { "getUpperLimit", w_PrismaticJoint_getUpperLimit }, { "getLimits", w_PrismaticJoint_getLimits }, + { "getAxis", w_PrismaticJoint_getAxis }, + { "getReferenceAngle", w_PrismaticJoint_getReferenceAngle }, { 0, 0 } }; diff --git a/jni/love/src/modules/physics/box2d/wrap_RevoluteJoint.cpp b/jni/love/src/modules/physics/box2d/wrap_RevoluteJoint.cpp index 9716e994..10ef1058 100644 --- a/jni/love/src/modules/physics/box2d/wrap_RevoluteJoint.cpp +++ b/jni/love/src/modules/physics/box2d/wrap_RevoluteJoint.cpp @@ -164,6 +164,13 @@ int w_RevoluteJoint_getLimits(lua_State *L) return t->getLimits(L); } +int w_RevoluteJoint_getReferenceAngle(lua_State *L) +{ + RevoluteJoint *t = luax_checkrevolutejoint(L, 1); + lua_pushnumber(L, t->getReferenceAngle()); + return 1; +} + static const luaL_Reg w_RevoluteJoint_functions[] = { { "getJointAngle", w_RevoluteJoint_getJointAngle }, @@ -183,6 +190,7 @@ static const luaL_Reg w_RevoluteJoint_functions[] = { "getLowerLimit", w_RevoluteJoint_getLowerLimit }, { "getUpperLimit", w_RevoluteJoint_getUpperLimit }, { "getLimits", w_RevoluteJoint_getLimits }, + { "getReferenceAngle", w_RevoluteJoint_getReferenceAngle }, { 0, 0 } }; diff --git a/jni/love/src/modules/physics/box2d/wrap_WeldJoint.cpp b/jni/love/src/modules/physics/box2d/wrap_WeldJoint.cpp index 6b9ed8e7..92efc52a 100644 --- a/jni/love/src/modules/physics/box2d/wrap_WeldJoint.cpp +++ b/jni/love/src/modules/physics/box2d/wrap_WeldJoint.cpp @@ -65,12 +65,20 @@ int w_WeldJoint_getDampingRatio(lua_State *L) return 1; } +int w_WeldJoint_getReferenceAngle(lua_State *L) +{ + WeldJoint *t = luax_checkweldjoint(L, 1); + lua_pushnumber(L, t->getReferenceAngle()); + return 1; +} + static const luaL_Reg w_WeldJoint_functions[] = { { "setFrequency", w_WeldJoint_setFrequency }, { "getFrequency", w_WeldJoint_getFrequency }, { "setDampingRatio", w_WeldJoint_setDampingRatio }, { "getDampingRatio", w_WeldJoint_getDampingRatio }, + { "getReferenceAngle", w_WeldJoint_getReferenceAngle }, { 0, 0 } }; diff --git a/jni/love/src/modules/physics/box2d/wrap_WheelJoint.cpp b/jni/love/src/modules/physics/box2d/wrap_WheelJoint.cpp index 5ec454a7..4a6ee66b 100644 --- a/jni/love/src/modules/physics/box2d/wrap_WheelJoint.cpp +++ b/jni/love/src/modules/physics/box2d/wrap_WheelJoint.cpp @@ -132,6 +132,13 @@ int w_WheelJoint_getSpringDampingRatio(lua_State *L) return 1; } +int w_WheelJoint_getAxis(lua_State *L) +{ + WheelJoint *t = luax_checkwheeljoint(L, 1); + lua_remove(L, 1); + return t->getAxis(L); +} + static const luaL_Reg w_WheelJoint_functions[] = { { "getJointTranslation", w_WheelJoint_getJointTranslation }, @@ -147,6 +154,7 @@ static const luaL_Reg w_WheelJoint_functions[] = { "getSpringFrequency", w_WheelJoint_getSpringFrequency }, { "setSpringDampingRatio", w_WheelJoint_setSpringDampingRatio }, { "getSpringDampingRatio", w_WheelJoint_getSpringDampingRatio }, + { "getAxis", w_WheelJoint_getAxis }, { 0, 0 } }; diff --git a/jni/love/src/modules/sound/lullaby/Mpg123Decoder.cpp b/jni/love/src/modules/sound/lullaby/Mpg123Decoder.cpp index 96f5d2ef..af4d22e5 100644 --- a/jni/love/src/modules/sound/lullaby/Mpg123Decoder.cpp +++ b/jni/love/src/modules/sound/lullaby/Mpg123Decoder.cpp @@ -24,6 +24,8 @@ #include +#ifndef LOVE_NOMPG123 + namespace love { namespace sound @@ -286,3 +288,5 @@ double Mpg123Decoder::getDuration() } // lullaby } // sound } // love + +#endif // LOVE_NOMPG123 diff --git a/jni/love/src/modules/sound/lullaby/Mpg123Decoder.h b/jni/love/src/modules/sound/lullaby/Mpg123Decoder.h index 81fa1d24..edb3b139 100644 --- a/jni/love/src/modules/sound/lullaby/Mpg123Decoder.h +++ b/jni/love/src/modules/sound/lullaby/Mpg123Decoder.h @@ -25,6 +25,8 @@ #include "common/Data.h" #include "Decoder.h" +#ifndef LOVE_NOMPG123 + // libmpg123 #ifdef LOVE_APPLE_USE_FRAMEWORKS #include @@ -88,4 +90,6 @@ private: } // sound } // love +#endif // LOVE_NOMPG123 + #endif // LOVE_SOUND_LULLABY_LIBMPG123_DECODER_H diff --git a/jni/love/src/modules/sound/wrap_SoundData.lua b/jni/love/src/modules/sound/wrap_SoundData.lua index 803a9a2d..e7448239 100644 --- a/jni/love/src/modules/sound/wrap_SoundData.lua +++ b/jni/love/src/modules/sound/wrap_SoundData.lua @@ -35,6 +35,7 @@ local status, ffi = pcall(require, "ffi") if not status then return end local tonumber, assert, error = tonumber, assert, error +local floor = math.floor local float = ffi.typeof("float") local datatypes = {ffi.typeof("uint8_t *"), ffi.typeof("int16_t *")} @@ -77,6 +78,8 @@ local objectcache = setmetatable({}, { function SoundData:getSample(i) if type(i) ~= "number" then error("bad argument #1 to SoundData:getSample (expected number)", 2) end + i = floor(i) + local p = objectcache[self] if not (i >= 0 and i < p.size/p.bytedepth) then @@ -96,6 +99,8 @@ function SoundData:setSample(i, sample) if type(i) ~= "number" then error("bad argument #1 to SoundData:setSample (expected number)", 2) end if type(sample) ~= "number" then error("bad argument #2 to SoundData:setSample (expected number)", 2) end + i = floor(i) + local p = objectcache[self] if not (i >= 0 and i < p.size/p.bytedepth) then diff --git a/jni/love/src/modules/system/System.cpp b/jni/love/src/modules/system/System.cpp index 61e2ef74..5ad39118 100755 --- a/jni/love/src/modules/system/System.cpp +++ b/jni/love/src/modules/system/System.cpp @@ -26,20 +26,35 @@ #include #elif defined(LOVE_IOS) #include "common/ios.h" -#elif defined(LOVE_ANDROID) -#include "common/android.h" -#elif defined(LOVE_LINUX) -#include -//#include -//#include +#elif defined(LOVE_LINUX) || defined(LOVE_ANDROID) #include #include +#include #elif defined(LOVE_WINDOWS) #include "common/utf8.h" #include #include #pragma comment(lib, "shell32.lib") #endif +#if defined(LOVE_ANDROID) +#include "common/android.h" +#elif defined(LOVE_LINUX) +#include +#endif + +#if defined(LOVE_LINUX) +static void sigchld_handler(int sig) +{ + // Because waitpid can set errno, we need to save it. + auto old = errno; + + // Reap whilst there are children waiting to be reaped. + while (waitpid(-1, nullptr, WNOHANG) > 0) + ; + + errno = old; +} +#endif namespace love { @@ -50,12 +65,14 @@ System::System() { #if defined(LOVE_LINUX) // Enable automatic cleanup of zombie processes + // NOTE: We're using our own handler, instead of SA_NOCLDWAIT because the + // latter breaks wait, and thus os.execute. + // NOTE: This isn't perfect, due to multithreading our SIGCHLD can happen + // on a different thread than the one calling wait(), thus causing a race. struct sigaction act = {0}; sigemptyset(&act.sa_mask); - act.sa_handler = SIG_DFL; - act.sa_flags = SA_NOCLDWAIT; - - // Requires linux 2.6 or higher, so anything remotely modern + act.sa_handler = sigchld_handler; + act.sa_flags = SA_RESTART; sigaction(SIGCHLD, &act, nullptr); #endif } @@ -66,6 +83,8 @@ std::string System::getOS() const return "OS X"; #elif defined(LOVE_IOS) return "iOS"; +#elif defined(LOVE_WINDOWS_UWP) + return "UWP"; #elif defined(LOVE_WINDOWS) return "Windows"; #elif defined(LOVE_ANDROID) @@ -130,12 +149,24 @@ bool System::openURL(const std::string &url) const // Unicode-aware WinAPI functions don't accept UTF-8, so we need to convert. std::wstring wurl = to_widestr(url); - HINSTANCE result = ShellExecuteW(nullptr, - L"open", - wurl.c_str(), - nullptr, - nullptr, - SW_SHOW); + HINSTANCE result = 0; + +#if defined(LOVE_WINDOWS_UWP) + + Platform::String^ urlString = ref new Platform::String(wurl.c_str()); + auto uwpUri = ref new Windows::Foundation::Uri(urlString); + Windows::System::Launcher::LaunchUriAsync(uwpUri); + +#else + + result = ShellExecuteW(nullptr, + L"open", + wurl.c_str(), + nullptr, + nullptr, + SW_SHOW); + +#endif return (int) result > 32; diff --git a/jni/love/src/modules/thread/Channel.cpp b/jni/love/src/modules/thread/Channel.cpp index e86d018b..8d618017 100644 --- a/jni/love/src/modules/thread/Channel.cpp +++ b/jni/love/src/modules/thread/Channel.cpp @@ -58,12 +58,17 @@ Channel *Channel::getChannel(const std::string &name) if (!namedChannelMutex) namedChannelMutex = newMutex(); - Lock l(namedChannelMutex); - if (!namedChannels.count(name)) - namedChannels[name] = new Channel(name); - else - namedChannels[name]->retain(); + Lock lock(namedChannelMutex); + auto it = namedChannels.find(name); + + if (it != namedChannels.end()) + { + it->second->retain(); + return it->second; + } + + namedChannels[name] = new Channel(name); return namedChannels[name]; } @@ -72,8 +77,6 @@ Channel::Channel() , sent(0) , received(0) { - mutex = newMutex(); - cond = newConditional(); } Channel::Channel(const std::string &name) @@ -82,32 +85,20 @@ Channel::Channel(const std::string &name) , sent(0) , received(0) { - mutex = newMutex(); - cond = newConditional(); } Channel::~Channel() { - while (!queue.empty()) - { - queue.front()->release(); - queue.pop(); - } - - delete mutex; - delete cond; - if (named) + { + Lock l(namedChannelMutex); namedChannels.erase(name); + } } -unsigned long Channel::push(Variant *var) +unsigned long Channel::push(const Variant &var) { - if (!var) - return 0; - Lock l(mutex); - var->retain(); // Keep a reference to ourselves // if we're non-empty and named. @@ -120,11 +111,8 @@ unsigned long Channel::push(Variant *var) return ++sent; } -void Channel::supply(Variant *var) +void Channel::supply(const Variant &var) { - if (!var) - return; - Lock l(mutex); unsigned long id = push(var); @@ -132,13 +120,14 @@ void Channel::supply(Variant *var) cond->wait(mutex); } -Variant *Channel::pop() +bool Channel::pop(Variant *var) { Lock l(mutex); - if (queue.empty()) - return 0; - Variant *var = queue.front(); + if (queue.empty()) + return false; + + *var = queue.front(); queue.pop(); received++; @@ -149,28 +138,26 @@ Variant *Channel::pop() if (named && queue.empty()) release(); - return var; -} // NOTE: Returns a retained Variant - -Variant *Channel::demand() -{ - Variant *var; - Lock l(mutex); - while (!(var = pop())) - cond->wait(mutex); - - return var; + return true; } -Variant *Channel::peek() +void Channel::demand(Variant *var) { Lock l(mutex); - if (queue.empty()) - return 0; - Variant *var = queue.front(); - var->retain(); - return var; + while (!pop(var)) + cond->wait(mutex); +} + +bool Channel::peek(Variant *var) +{ + Lock l(mutex); + + if (queue.empty()) + return false; + + *var = queue.front(); + return true; } int Channel::getCount() @@ -188,10 +175,7 @@ void Channel::clear() return; while (!queue.empty()) - { - queue.front()->release(); queue.pop(); - } // Finish all the supply waits received = sent; @@ -213,22 +197,5 @@ void Channel::unlockMutex() mutex->unlock(); } -void Channel::retain() -{ - EmptyLock l; - if (named) - l.setLock(namedChannelMutex); - - Object::retain(); -} - -void Channel::release() -{ - EmptyLock l; - if (named) - l.setLock(namedChannelMutex); - - Object::release(); -} } // thread } // love diff --git a/jni/love/src/modules/thread/Channel.h b/jni/love/src/modules/thread/Channel.h index d034ef09..b257415a 100644 --- a/jni/love/src/modules/thread/Channel.h +++ b/jni/love/src/modules/thread/Channel.h @@ -37,8 +37,6 @@ namespace thread class Channel : public love::Object { // FOR WRAPPER USE ONLY -friend void retainVariant(Channel *, Variant *); -friend void releaseVariant(Channel *, Variant *); friend int w_Channel_performAtomic(lua_State *); public: @@ -48,26 +46,23 @@ public: static Channel *getChannel(const std::string &name); - unsigned long push(Variant *var); - void supply(Variant *var); // blocking push - Variant *pop(); - Variant *demand(); // blocking pop - Variant *peek(); + unsigned long push(const Variant &var); + void supply(const Variant &var); // blocking push + bool pop(Variant *var); + void demand(Variant *var); // blocking pop + bool peek(Variant *var); int getCount(); void clear(); - void retain(); - void release(); - private: Channel(const std::string &name); void lockMutex(); void unlockMutex(); - Mutex *mutex; - Conditional *cond; - std::queue queue; + MutexRef mutex; + ConditionalRef cond; + std::queue queue; bool named; std::string name; diff --git a/jni/love/src/modules/thread/LuaThread.cpp b/jni/love/src/modules/thread/LuaThread.cpp index c61594fd..d7150a31 100644 --- a/jni/love/src/modules/thread/LuaThread.cpp +++ b/jni/love/src/modules/thread/LuaThread.cpp @@ -33,23 +33,16 @@ namespace thread LuaThread::LuaThread(const std::string &name, love::Data *code) : code(code) , name(name) - , args(nullptr) - , nargs(0) { threadName = name; } LuaThread::~LuaThread() { - // No args should still exist at this point, - // but you never know. - for (int i = 0; i < nargs; ++i) - args[i]->release(); } void LuaThread::threadFunction() { - this->retain(); error.clear(); lua_State *L = luaL_newstate(); @@ -74,16 +67,12 @@ void LuaThread::threadFunction() error = luax_tostring(L, -1); else { - int pushedargs = nargs; - for (int i = 0; i < nargs; ++i) - { - args[i]->toLua(L); - args[i]->release(); - } - // Set both args and nargs to nil, prevents the deconstructor from - // accessing it again. - nargs = 0; - args = nullptr; + int pushedargs = (int) args.size(); + + for (int i = 0; i < pushedargs; i++) + args[i].toLua(L); + + args.clear(); if (lua_pcall(L, pushedargs, 0, 0) != 0) error = luax_tostring(L, -1); @@ -93,18 +82,11 @@ void LuaThread::threadFunction() if (!error.empty()) onError(); - - this->release(); } -bool LuaThread::start(Variant **args, int nargs) +bool LuaThread::start(const std::vector &args) { - for (int i = 0; i < this->nargs; ++i) - this->args[i]->release(); - this->args = args; - this->nargs = nargs; - return Threadable::start(); } @@ -126,18 +108,13 @@ void LuaThread::onError() p.type = THREAD_THREAD_ID; p.object = this; - std::vector> vargs = { - new Variant(THREAD_THREAD_ID, &p), - new Variant(error.c_str(), error.length()) + std::vector vargs = { + Variant(p.type, &p), + Variant(error.c_str(), error.length()) }; - event::Message *msg = new event::Message("threaderror", vargs); - - for (const StrongRef &v : vargs) - v->release(); - + StrongRef msg(new event::Message("threaderror", vargs), Acquire::NORETAIN); eventmodule->push(msg); - msg->release(); } } // thread diff --git a/jni/love/src/modules/thread/LuaThread.h b/jni/love/src/modules/thread/LuaThread.h index be8c1b84..169dce6f 100644 --- a/jni/love/src/modules/thread/LuaThread.h +++ b/jni/love/src/modules/thread/LuaThread.h @@ -23,6 +23,7 @@ // STL #include +#include // LOVE #include "common/Data.h" @@ -35,16 +36,16 @@ namespace love namespace thread { -class LuaThread : public love::Object, public Threadable +class LuaThread : public Threadable { public: LuaThread(const std::string &name, love::Data *code); - ~LuaThread(); + virtual ~LuaThread(); void threadFunction(); const std::string &getError() const; - bool start(Variant **args, int nargs); + bool start(const std::vector &args); private: @@ -54,8 +55,7 @@ private: std::string name; std::string error; - Variant **args; - int nargs; + std::vector args; }; // LuaThread diff --git a/jni/love/src/modules/thread/ThreadModule.cpp b/jni/love/src/modules/thread/ThreadModule.cpp index c3b30277..32a6c30e 100644 --- a/jni/love/src/modules/thread/ThreadModule.cpp +++ b/jni/love/src/modules/thread/ThreadModule.cpp @@ -27,8 +27,7 @@ namespace thread LuaThread *ThreadModule::newThread(const std::string &name, love::Data *data) { - LuaThread *lt = new LuaThread(name, data); - return lt; + return new LuaThread(name, data); } Channel *ThreadModule::newChannel() diff --git a/jni/love/src/modules/thread/sdl/Thread.cpp b/jni/love/src/modules/thread/sdl/Thread.cpp index 74b34998..f775f748 100644 --- a/jni/love/src/modules/thread/sdl/Thread.cpp +++ b/jni/love/src/modules/thread/sdl/Thread.cpp @@ -29,19 +29,15 @@ namespace sdl Thread::Thread(Threadable *t) : t(t) , running(false) - , thread(0) + , thread(nullptr) { } Thread::~Thread() { - if (!running) // Clean up handle - wait(); - /* - if (running) - wait(); - FIXME: Needed for proper thread cleanup - */ + // Clean up handle + if (thread) + SDL_DetachThread(thread); } bool Thread::start() @@ -50,9 +46,9 @@ bool Thread::start() if (running) return false; if (thread) // Clean old handle up - SDL_WaitThread(thread, 0); + SDL_WaitThread(thread, nullptr); thread = SDL_CreateThread(thread_runner, t->getThreadName(), this); - running = (thread != 0); + running = (thread != nullptr); return running; } @@ -63,10 +59,10 @@ void Thread::wait() if (!thread) return; } - SDL_WaitThread(thread, 0); + SDL_WaitThread(thread, nullptr); Lock l(mutex); running = false; - thread = 0; + thread = nullptr; } bool Thread::isRunning() @@ -78,9 +74,16 @@ bool Thread::isRunning() int Thread::thread_runner(void *data) { Thread *self = (Thread *) data; // some compilers don't like 'this' + self->t->retain(); + self->t->threadFunction(); - Lock l(self->mutex); - self->running = false; + + { + Lock l(self->mutex); + self->running = false; + } + + self->t->release(); return 0; } } // sdl diff --git a/jni/love/src/modules/thread/threads.cpp b/jni/love/src/modules/thread/threads.cpp index cf20e534..ad5f314f 100644 --- a/jni/love/src/modules/thread/threads.cpp +++ b/jni/love/src/modules/thread/threads.cpp @@ -43,7 +43,7 @@ Lock::~Lock() } EmptyLock::EmptyLock() - : mutex(0) + : mutex(nullptr) { } @@ -119,5 +119,30 @@ MutexRef::operator Mutex*() const return mutex; } +Mutex *MutexRef::operator->() const +{ + return mutex; +} + +ConditionalRef::ConditionalRef() + : conditional(newConditional()) +{ +} + +ConditionalRef::~ConditionalRef() +{ + delete conditional; +} + +ConditionalRef::operator Conditional*() const +{ + return conditional; +} + +Conditional *ConditionalRef::operator->() const +{ + return conditional; +} + } // thread } // love diff --git a/jni/love/src/modules/thread/threads.h b/jni/love/src/modules/thread/threads.h index ff7b01e4..0039f708 100644 --- a/jni/love/src/modules/thread/threads.h +++ b/jni/love/src/modules/thread/threads.h @@ -76,7 +76,7 @@ private: Mutex *mutex; }; -class Threadable +class Threadable : public love::Object { public: Threadable(); @@ -103,11 +103,25 @@ public: ~MutexRef(); operator Mutex*() const; + Mutex *operator->() const; private: Mutex *mutex; }; +class ConditionalRef +{ +public: + ConditionalRef(); + ~ConditionalRef(); + + operator Conditional*() const; + Conditional *operator->() const; + +private: + Conditional *conditional; +}; + Mutex *newMutex(); Conditional *newConditional(); Thread *newThread(Threadable *t); diff --git a/jni/love/src/modules/thread/wrap_Channel.cpp b/jni/love/src/modules/thread/wrap_Channel.cpp index 0885e319..778786de 100644 --- a/jni/love/src/modules/thread/wrap_Channel.cpp +++ b/jni/love/src/modules/thread/wrap_Channel.cpp @@ -25,20 +25,6 @@ namespace love namespace thread { -void retainVariant(Channel *c, Variant *v) -{ - c->lockMutex(); - v->retain(); - c->unlockMutex(); -} - -void releaseVariant(Channel *c, Variant *v) -{ - c->lockMutex(); - v->release(); - c->unlockMutex(); -} - Channel *luax_checkchannel(lua_State *L, int idx) { return luax_checktype(L, idx, THREAD_CHANNEL_ID); @@ -47,34 +33,29 @@ Channel *luax_checkchannel(lua_State *L, int idx) int w_Channel_push(lua_State *L) { Channel *c = luax_checkchannel(L, 1); - Variant *var = lua_isnoneornil(L, 2) ? 0 : Variant::fromLua(L, 2); - if (!var) + Variant var = Variant::fromLua(L, 2); + if (var.getType() == Variant::UNKNOWN) return luaL_argerror(L, 2, "boolean, number, string, love type, or flat table expected"); c->push(var); - releaseVariant(c, var); return 0; } int w_Channel_supply(lua_State *L) { Channel *c = luax_checkchannel(L, 1); - Variant *var = lua_isnoneornil(L, 2) ? 0 : Variant::fromLua(L, 2); - if (!var) + Variant var = Variant::fromLua(L, 2); + if (var.getType() == Variant::UNKNOWN) return luaL_argerror(L, 2, "boolean, number, string, love type, or flat table expected"); c->supply(var); - releaseVariant(c, var); return 0; } int w_Channel_pop(lua_State *L) { Channel *c = luax_checkchannel(L, 1); - Variant *var = c->pop(); - if (var) - { - var->toLua(L); - releaseVariant(c, var); - } + Variant var; + if (c->pop(&var)) + var.toLua(L); else lua_pushnil(L); return 1; @@ -83,21 +64,18 @@ int w_Channel_pop(lua_State *L) int w_Channel_demand(lua_State *L) { Channel *c = luax_checkchannel(L, 1); - Variant *var = c->demand(); - var->toLua(L); - releaseVariant(c, var); + Variant var; + c->demand(&var); + var.toLua(L); return 1; } int w_Channel_peek(lua_State *L) { Channel *c = luax_checkchannel(L, 1); - Variant *var = c->peek(); - if (var) - { - var->toLua(L); - releaseVariant(c, var); - } + Variant var; + if (c->peek(&var)) + var.toLua(L); else lua_pushnil(L); return 1; diff --git a/jni/love/src/modules/thread/wrap_LuaThread.cpp b/jni/love/src/modules/thread/wrap_LuaThread.cpp index ee2e4d6a..fefe06f1 100644 --- a/jni/love/src/modules/thread/wrap_LuaThread.cpp +++ b/jni/love/src/modules/thread/wrap_LuaThread.cpp @@ -33,26 +33,21 @@ LuaThread *luax_checkthread(lua_State *L, int idx) int w_Thread_start(lua_State *L) { LuaThread *t = luax_checkthread(L, 1); + std::vector args; int nargs = lua_gettop(L) - 1; - Variant **args = 0; - if (nargs > 0) + for (int i = 0; i < nargs; ++i) { - args = new Variant*[nargs]; - for (int i = 0; i < nargs; ++i) + args.push_back(Variant::fromLua(L, i+2)); + + if (args.back().getType() == Variant::UNKNOWN) { - args[i] = Variant::fromLua(L, i+2); - if (!args[i]) - { - for (int j = i; j >= 0; j--) - delete args[j]; - delete[] args; - return luaL_argerror(L, i+2, "boolean, number, string, love type, or flat table expected"); - } + args.clear(); + return luaL_argerror(L, i+2, "boolean, number, string, love type, or flat table expected"); } } - luax_pushboolean(L, t->start(args, nargs)); + luax_pushboolean(L, t->start(args)); return 1; } diff --git a/jni/love/src/modules/timer/Timer.cpp b/jni/love/src/modules/timer/Timer.cpp index 4cd4aaea..ce5cc730 100644 --- a/jni/love/src/modules/timer/Timer.cpp +++ b/jni/love/src/modules/timer/Timer.cpp @@ -21,6 +21,7 @@ // LOVE #include "common/config.h" #include "common/int.h" +#include "common/delay.h" #include "Timer.h" #if defined(LOVE_WINDOWS) @@ -85,6 +86,12 @@ void Timer::step() } } +void Timer::sleep(double seconds) const +{ + if (seconds > 0) + love::sleep((unsigned int)(seconds*1000)); +} + double Timer::getDelta() const { return dt; @@ -114,7 +121,7 @@ double Timer::getTimerPeriod() return 0; } -double Timer::getTimeSinceEpoch() +double Timer::getTime() { // The timer period (reciprocal of the frequency.) static const double timerPeriod = getTimerPeriod(); @@ -145,10 +152,5 @@ double Timer::getTimeSinceEpoch() #endif } -double Timer::getTime() const -{ - return getTimeSinceEpoch(); -} - } // timer } // love diff --git a/jni/love/src/modules/timer/Timer.h b/jni/love/src/modules/timer/Timer.h index 3d9eda13..760b9d8c 100644 --- a/jni/love/src/modules/timer/Timer.h +++ b/jni/love/src/modules/timer/Timer.h @@ -50,7 +50,7 @@ public: * usually 1ms. * @param seconds The number of seconds to sleep for. **/ - virtual void sleep(double seconds) const = 0; + virtual void sleep(double seconds) const; /** * Gets the time between the last two frames, assuming step is called @@ -76,8 +76,7 @@ public: * and increases monotonically. * @return The time (in seconds) **/ - virtual double getTime() const; - static double getTimeSinceEpoch(); + static double getTime(); private: diff --git a/jni/love/src/modules/timer/sdl/Timer.cpp b/jni/love/src/modules/timer/sdl/Timer.cpp index fb433fc8..7a6f9ff3 100644 --- a/jni/love/src/modules/timer/sdl/Timer.cpp +++ b/jni/love/src/modules/timer/sdl/Timer.cpp @@ -20,10 +20,6 @@ // LOVE #include "Timer.h" -#include "common/delay.h" - -// SDL -#include namespace love { @@ -34,15 +30,12 @@ namespace sdl Timer::Timer() { - // Init the SDL timer system (needed for SDL_Delay.) - if (SDL_InitSubSystem(SDL_INIT_TIMER) < 0) - throw love::Exception("Could not initialize SDL timer subsystem (%s)", SDL_GetError()); + // We don't need to initialize the SDL timer subsystem for SDL_Delay to + // function - and doing so causes SDL to create a worker thread. } Timer::~Timer() { - // Quit SDL timer. - SDL_QuitSubSystem(SDL_INIT_TIMER); } const char *Timer::getName() const @@ -50,12 +43,6 @@ const char *Timer::getName() const return "love.timer.sdl"; } -void Timer::sleep(double seconds) const -{ - if (seconds > 0) - delay((unsigned int)(seconds*1000)); -} - } // sdl } // timer } // love diff --git a/jni/love/src/modules/timer/sdl/Timer.h b/jni/love/src/modules/timer/sdl/Timer.h index 95571d7c..cd5e2ea1 100644 --- a/jni/love/src/modules/timer/sdl/Timer.h +++ b/jni/love/src/modules/timer/sdl/Timer.h @@ -37,11 +37,8 @@ public: Timer(); virtual ~Timer(); - const char *getName() const override; - void sleep(double seconds) const override; - }; // Timer } // sdl diff --git a/jni/love/src/modules/video/theora/Video.cpp b/jni/love/src/modules/video/theora/Video.cpp index 9e1188b6..2daa6e95 100644 --- a/jni/love/src/modules/video/theora/Video.cpp +++ b/jni/love/src/modules/video/theora/Video.cpp @@ -71,6 +71,7 @@ void Worker::addStream(VideoStream *stream) { love::thread::Lock l(mutex); streams.push_back(stream); + cond->broadcast(); } void Worker::stop() @@ -78,6 +79,7 @@ void Worker::stop() { love::thread::Lock l(mutex); stopping = true; + cond->broadcast(); } owner->wait(); @@ -85,35 +87,39 @@ void Worker::stop() void Worker::threadFunction() { - double lastFrame = love::timer::Timer::getTimeSinceEpoch(); + double lastFrame = love::timer::Timer::getTime(); + while (true) { - double curFrame = love::timer::Timer::getTimeSinceEpoch(); + love::sleep(2); + + love::thread::Lock l(mutex); + + while (!stopping && streams.empty()) + { + cond->wait(mutex); + lastFrame = love::timer::Timer::getTime(); + } + + if (stopping) + return; + + double curFrame = love::timer::Timer::getTime(); double dt = curFrame-lastFrame; lastFrame = curFrame; + for (auto it = streams.begin(); it != streams.end(); ++it) { - love::thread::Lock l(mutex); - - if (stopping) - return; - - for (auto it = streams.begin(); it != streams.end(); ++it) + VideoStream *stream = *it; + if (stream->getReferenceCount() == 1) { - VideoStream *stream = *it; - if (stream->getReferenceCount() == 1) - { - // We're the only ones left - streams.erase(it); - break; - } - - stream->threadedFillBackBuffer(dt); + // We're the only ones left + streams.erase(it); + break; } - } - // sleep - love::delay(2); + stream->threadedFillBackBuffer(dt); + } } } diff --git a/jni/love/src/modules/video/theora/Video.h b/jni/love/src/modules/video/theora/Video.h index 741dc058..05ed0684 100644 --- a/jni/love/src/modules/video/theora/Video.h +++ b/jni/love/src/modules/video/theora/Video.h @@ -43,7 +43,7 @@ class Video : public love::video::Video { public: Video(); - ~Video(); + virtual ~Video(); // Implements Module virtual const char *getName() const; @@ -58,7 +58,7 @@ class Worker : public love::thread::Threadable { public: Worker(); - ~Worker(); + virtual ~Worker(); // Implements Threadable void threadFunction(); @@ -68,10 +68,13 @@ public: void stop(); private: - std::vector> streams; - love::thread::MutexRef mutex; - volatile bool stopping; + std::vector> streams; + + love::thread::MutexRef mutex; + love::thread::ConditionalRef cond; + + bool stopping; }; // Worker } // theora diff --git a/jni/love/src/modules/video/theora/VideoStream.cpp b/jni/love/src/modules/video/theora/VideoStream.cpp index 0b6e91e3..4d3d3354 100644 --- a/jni/love/src/modules/video/theora/VideoStream.cpp +++ b/jni/love/src/modules/video/theora/VideoStream.cpp @@ -64,8 +64,7 @@ VideoStream::VideoStream(love::filesystem::File *file) throw ex; } - frameSync = new DeltaSync(); - frameSync->release(); + frameSync.set(new DeltaSync(), Acquire::NORETAIN); } VideoStream::~VideoStream() @@ -152,12 +151,12 @@ bool VideoStream::readPacket(bool mustSucceed) while (ogg_stream_packetout(&stream, &packet) != 1) { - // We need to read another page, but there is none, we're at the end - if (ogg_page_eos(&page) && !mustSucceed) - return eos = true; - do { + // We need to read another page, but there is none, we're at the end + if (ogg_page_eos(&page) && !mustSucceed) + return eos = true; + readPage(); } while (ogg_page_serialno(&page) != videoSerial); diff --git a/jni/love/src/modules/window/Window.h b/jni/love/src/modules/window/Window.h index 54e5b924..307adadc 100644 --- a/jni/love/src/modules/window/Window.h +++ b/jni/love/src/modules/window/Window.h @@ -143,6 +143,8 @@ public: virtual void minimize() = 0; virtual void maximize() = 0; + virtual bool isMaximized() const = 0; + // default no-op implementation virtual void swapBuffers(); @@ -151,9 +153,6 @@ public: virtual bool isVisible() const = 0; - virtual void setMouseVisible(bool visible) = 0; - virtual bool getMouseVisible() const = 0; - virtual void setMouseGrab(bool grab) = 0; virtual bool isMouseGrabbed() const = 0; diff --git a/jni/love/src/modules/window/sdl/Window.cpp b/jni/love/src/modules/window/sdl/Window.cpp index 2b66608e..d3d72787 100644 --- a/jni/love/src/modules/window/sdl/Window.cpp +++ b/jni/love/src/modules/window/sdl/Window.cpp @@ -229,7 +229,14 @@ bool Window::createWindowAndContext(int x, int y, int w, int h, Uint32 windowfla }; // OpenGL ES 3+ contexts are only properly supported in SDL 2.0.4+. - if (hasSDL203orEarlier) + bool removeES3 = hasSDL203orEarlier; + + // While UWP SDL is above 2.0.4, it still doesn't support OpenGL ES 3+ +#ifdef LOVE_WINDOWS_UWP + removeES3 = true; +#endif + + if (removeES3) { auto it = attribslist.begin(); while (it != attribslist.end()) @@ -478,14 +485,14 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) SDL_GL_SetSwapInterval(f.vsync ? 1 : 0); - updateSettings(f); + updateSettings(f, false); auto gfx = Module::getInstance(Module::M_GRAPHICS); if (gfx != nullptr) gfx->setMode(pixelWidth, pixelHeight); #ifdef LOVE_ANDROID - love::android::setImmersive(f.fullscreen); + love::android::setImmersive(f.fullscreen); #endif return true; @@ -508,7 +515,7 @@ bool Window::onSizeChanged(int width, int height) return true; } -void Window::updateSettings(const WindowSettings &newsettings) +void Window::updateSettings(const WindowSettings &newsettings, bool updateGraphicsViewport) { Uint32 wflags = SDL_GetWindowFlags(window); @@ -568,13 +575,21 @@ void Window::updateSettings(const WindowSettings &newsettings) // May be 0 if the refresh rate can't be determined. settings.refreshrate = (double) dmode.refresh_rate; + + if (updateGraphicsViewport) + { + // Update the viewport size now instead of waiting for event polling. + auto gfx = Module::getInstance(Module::M_GRAPHICS); + if (gfx != nullptr) + gfx->setViewportSize(pixelWidth, pixelHeight); + } } void Window::getWindow(int &width, int &height, WindowSettings &newsettings) { // The window might have been modified (moved, resized, etc.) by the user. if (window) - updateSettings(settings); + updateSettings(settings, true); width = windowWidth; height = windowHeight; @@ -641,17 +656,12 @@ bool Window::setFullscreen(bool fullscreen, Window::FullscreenType fstype) if (SDL_SetWindowFullscreen(window, sdlflags) == 0) { SDL_GL_MakeCurrent(window, context); - updateSettings(newsettings); + updateSettings(newsettings, true); // Apparently this gets un-set when we exit fullscreen (at least in OS X). if (!fullscreen) SDL_SetWindowMinimumSize(window, settings.minwidth, settings.minheight); - // Update the viewport size now instead of waiting for event polling. - auto gfx = Module::getInstance(Module::M_GRAPHICS); - if (gfx != nullptr) - gfx->setViewportSize(pixelWidth, pixelHeight); - return true; } @@ -850,7 +860,15 @@ void Window::minimize() void Window::maximize() { if (window != nullptr) + { SDL_MaximizeWindow(window); + updateSettings(settings, true); + } +} + +bool Window::isMaximized() const +{ + return window != nullptr && (SDL_GetWindowFlags(window) & SDL_WINDOW_MAXIMIZED); } void Window::swapBuffers() @@ -873,16 +891,6 @@ bool Window::isVisible() const return window && (SDL_GetWindowFlags(window) & SDL_WINDOW_SHOWN) != 0; } -void Window::setMouseVisible(bool visible) -{ - SDL_ShowCursor(visible ? SDL_ENABLE : SDL_DISABLE); -} - -bool Window::getMouseVisible() const -{ - return (SDL_ShowCursor(SDL_QUERY) == SDL_ENABLE); -} - void Window::setMouseGrab(bool grab) { mouseGrabbed = grab; @@ -1019,7 +1027,7 @@ int Window::showMessageBox(const MessageBoxData &data) void Window::requestAttention(bool continuous) { -#if defined(LOVE_WINDOWS) +#if defined(LOVE_WINDOWS) && !defined(LOVE_WINDOWS_UWP) if (hasFocus()) return; diff --git a/jni/love/src/modules/window/sdl/Window.h b/jni/love/src/modules/window/sdl/Window.h index b459a217..f920f853 100644 --- a/jni/love/src/modules/window/sdl/Window.h +++ b/jni/love/src/modules/window/sdl/Window.h @@ -76,6 +76,8 @@ public: void minimize(); void maximize(); + bool isMaximized() const; + void swapBuffers(); bool hasFocus() const; @@ -83,9 +85,6 @@ public: bool isVisible() const; - void setMouseVisible(bool visible); - bool getMouseVisible() const; - void setMouseGrab(bool grab); bool isMouseGrabbed() const; @@ -125,7 +124,7 @@ private: bool createWindowAndContext(int x, int y, int w, int h, Uint32 windowflags, int msaa); // Update the saved window settings based on the window's actual state. - void updateSettings(const WindowSettings &newsettings); + void updateSettings(const WindowSettings &newsettings, bool updateGraphicsViewport); SDL_MessageBoxFlags convertMessageBoxType(MessageBoxType type) const; diff --git a/jni/love/src/modules/window/wrap_Window.cpp b/jni/love/src/modules/window/wrap_Window.cpp index c7a7a149..48ae7af3 100644 --- a/jni/love/src/modules/window/wrap_Window.cpp +++ b/jni/love/src/modules/window/wrap_Window.cpp @@ -432,6 +432,12 @@ int w_maximize(lua_State *) return 0; } +int w_isMaximized(lua_State *L) +{ + luax_pushboolean(L, instance()->isMaximized()); + return 0; +} + int w_showMessageBox(lua_State *L) { Window::MessageBoxData data = {}; @@ -533,6 +539,7 @@ static const luaL_Reg functions[] = { "fromPixels", w_fromPixels }, { "minimize", w_minimize }, { "maximize", w_maximize }, + { "isMaximized", w_isMaximized }, { "showMessageBox", w_showMessageBox }, { "requestAttention", w_requestAttention }, { 0, 0 } diff --git a/jni/love/src/scripts/auto.lua b/jni/love/src/scripts/auto.lua index 351ced94..d4fb77be 100644 --- a/jni/love/src/scripts/auto.lua +++ b/jni/love/src/scripts/auto.lua @@ -108,8 +108,14 @@ end for i, v in ipairs(arg) do --run the auto function for every argument --but do it with pcall, to catch errors - v = v:gsub("%.lua$", ""):gsub("^(.+)/", "") -- normalize input - local ok, err = pcall(auto, v) + local ok, err = true + v = v:gsub("^scripts/", "") + if v:match("/") then + ok, err = false, "not in scripts directory" + else + v = v:gsub("%.lua$", "") -- normalize input + ok, err = pcall(auto, v) + end if not ok then --inform people we've failed print(v .. ": " .. err) diff --git a/jni/love/src/scripts/boot.lua b/jni/love/src/scripts/boot.lua index 45baa5b4..552827e1 100644 --- a/jni/love/src/scripts/boot.lua +++ b/jni/love/src/scripts/boot.lua @@ -239,8 +239,9 @@ function love.createhandlers() if love.directorydropped then return love.directorydropped(dir) end end, lowmemory = function () + if love.lowmemory then love.lowmemory() end + collectgarbage() collectgarbage() - if love.lowmemory then return love.lowmemory() end end, }, { __index = function(self, name) @@ -678,5 +679,5 @@ return function() local result, retval = xpcall(love.run, deferErrhand) if not result then return 1 end - return tonumber(retval) or 0 + return retval == nil and 0 or retval end diff --git a/jni/love/src/scripts/boot.lua.h b/jni/love/src/scripts/boot.lua.h index 10527331..90d13adf 100644 --- a/jni/love/src/scripts/boot.lua.h +++ b/jni/love/src/scripts/boot.lua.h @@ -455,11 +455,13 @@ const unsigned char boot_lua[] = 0x09, 0x09, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x77, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x77, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x77, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, + 0x09, 0x09, 0x09, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x67, 0x61, 0x72, 0x62, 0x61, 0x67, 0x65, 0x28, + 0x29, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x67, 0x61, 0x72, 0x62, 0x61, 0x67, 0x65, 0x28, 0x29, 0x0a, - 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x77, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x76, - 0x65, 0x2e, 0x6c, 0x6f, 0x77, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x09, 0x7d, 0x2c, 0x20, 0x7b, 0x0a, 0x09, 0x09, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, @@ -1232,8 +1234,9 @@ const unsigned char boot_lua[] = 0x72, 0x75, 0x6e, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x65, 0x72, 0x45, 0x72, 0x72, 0x68, 0x61, 0x6e, 0x64, 0x29, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x20, 0x65, 0x6e, 0x64, 0x0a, - 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x6f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x28, 0x72, - 0x65, 0x74, 0x76, 0x61, 0x6c, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x0a, + 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x20, 0x3d, 0x3d, 0x20, + 0x6e, 0x69, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x30, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x74, 0x76, 0x61, + 0x6c, 0x0a, 0x65, 0x6e, 0x64, 0x0a, }; // [boot.lua] } // love