๐Ÿ“ฆ RobLoach / raylib-physfs

Integrate PhysFS with raylib to load images, audio, and fonts, from .zip files.

โ˜… 51 stars โ‘‚ 10 forks ๐Ÿ‘ 51 watching โš–๏ธ zlib License
physfsraylib
๐Ÿ“ฅ Clone https://github.com/RobLoach/raylib-physfs.git
HTTPS git clone https://github.com/RobLoach/raylib-physfs.git
SSH git clone git@github.com:RobLoach/raylib-physfs.git
CLI gh repo clone RobLoach/raylib-physfs
Rob Loach Rob Loach Update e559edc 1 years ago ๐Ÿ“ History
๐Ÿ“‚ master View all commits โ†’
๐Ÿ“ .github
๐Ÿ“ cmake
๐Ÿ“ examples
๐Ÿ“ test
๐Ÿ“„ .editorconfig
๐Ÿ“„ .gitignore
๐Ÿ“„ CMakeLists.txt
๐Ÿ“„ LICENSE
๐Ÿ“„ raylib-physfs.h
๐Ÿ“„ README.md
๐Ÿ“„ README.md

raylib-physfs

Tests

Load raylib images, sounds, music, fonts and shaders from data archives, like .zip files, through PhysicsFS.

Screenshot of textures<em>image</em>loading example

Features

  • Load various assets from data archives, including Images, Textures, Music, Waves, Fonts, Text, Data and Shaders
  • Check if directories and files exist within archives
  • Enumerate across multiple archives and mounted paths
  • Save files through PhysFS
  • Set all file loading to use PhysFS via SetPhysFSCallbacks()
  • Find the user's configuration directory with GetPerfDirectory()

Usage

This is a header-only library. To use it, you have to do two things...

  • Link both the raylib and physfs libraries. With CMake, you will see examples of linking physfs in examples/CMakeLists.txt
  • Define RAYLIB_PHYSFS_IMPLEMENTATION in one .c source file before including raylib-physfs.h

Example

The below example will initialize PhysFS, mount a .zip file, and then load an Image directly from the .zip.

`` c #define RAYLIB_PHYSFS_IMPLEMENTATION #include "raylib-physfs.h" int main() { // Initiatize the file system. InitPhysFS(); // Mount a directory or archive into a given namespace. MountPhysFS("assets.zip", "assets"); // Load an image through PhysFS directly from assets.zip. Image dog = LoadImageFromPhysFS("assets/dog.png"); // Close the file system. ClosePhysFS(); } %%CODEBLOCK0%% c bool InitPhysFS(); // Initialize the PhysFS file system bool InitPhysFSEx(const char* newDir, const char* mountPoint); // Initialize the PhysFS file system with a mount point. bool ClosePhysFS(); // Close the PhysFS file system bool IsPhysFSReady(); // Check if PhysFS has been initialized successfully bool MountPhysFS(const char* newDir, const char* mountPoint); // Mount the given directory or archive as a mount point bool MountPhysFSFromMemory(const unsigned char *fileData, int dataSize, const char* newDir, const char* mountPoint); // Mount the given file data as a mount point bool UnmountPhysFS(const char* oldDir); // Unmounts the given directory bool FileExistsInPhysFS(const char* fileName); // Check if the given file exists in PhysFS bool DirectoryExistsInPhysFS(const char* dirPath); // Check if the given directory exists in PhysFS unsigned char* LoadFileDataFromPhysFS(const char* fileName, unsigned int* bytesRead); // Load a data buffer from PhysFS (memory should be freed) char* LoadFileTextFromPhysFS(const char* fileName); // Load text from a file (memory should be freed) bool SetPhysFSWriteDirectory(const char* newDir); // Set the base directory where PhysFS should write files to (defaults to the current working directory) bool SaveFileDataToPhysFS(const char* fileName, void* data, unsigned int bytesToWrite); // Save the given file data in PhysFS bool SaveFileTextToPhysFS(const char* fileName, char* text); // Save the given file text in PhysFS FilePathList LoadDirectoryFilesFromPhysFS(const char* dirPath); // Get filenames in a directory path (memory should be freed) long GetFileModTimeFromPhysFS(const char* fileName); // Get file modification time (last write time) from PhysFS Image LoadImageFromPhysFS(const char* fileName); // Load an image from PhysFS Texture2D LoadTextureFromPhysFS(const char* fileName); // Load a texture from PhysFS Wave LoadWaveFromPhysFS(const char* fileName); // Load wave data from PhysFS Music LoadMusicStreamFromPhysFS(const char* fileName); // Load music data from PhysFS Font LoadFontFromPhysFS(const char* fileName, int fontSize, int *fontChars, int charsCount); // Load a font from PhysFS Shader LoadShaderFromPhysFS(const char* vsFileName, const char* fsFileName); // Load shader from PhysFS void SetPhysFSCallbacks(); // Set the raylib file loader/saver callbacks to use PhysFS const char* GetPerfDirectory(const char *organization, const char *application); // Get the user's current config directory for the application. %%CODEBLOCK1%% bash git clone https://github.com/RobLoach/raylib-physfs.git cd raylib-physfs mkdir build cd build cmake .. make make test cd examples ./textures_image_loading ``

Alternatives

While physfs is great, there are alternative file systems available...

License

raylib-physfs is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check LICENSE for further details.