raylib 3.0 released!
After 10 months of intense development, new raylib version is ready. Despite primary intended as a minor release, the CHANGELIST has grown so big and the library has changed so much internally that it finally became a major release. Library internal ABI has been received a big redesign and review, targeting portability, integration with other platforms and making it a perfect option for other progamming language bindings.
- All global variables from the multiple raylib modules have been moved to a global context state, it has several benefits, first, better code readability with more comprehensive variables naming and categorization (organized by types, i.e.
RLGL.State.modelview). Second, it allows better memory management to load global context state dynamically when required (not at the moment), making it easy to implement a hot-reloading mechanism if desired.
- All memory allocations on raylib and its dependencies now use
RL_FREEand similar macros. Now users can easely hook their own memory allocations mechanism if desired, having more control on how memory is allocated internally by the library. Additionally, it makes it easier to port the library to embedded devices where memory control is critical. For more info check raylib issue #1074.
- All I/O file accesses from raylib are being moved to memory data access, now all I/O file access is centralized into just four functions:
SaveFileText(). Users can just update those functions to any I/O file system. This change makes it easier to integrate raylib with Virtual File Systems or custom I/O file implementations.
- All raylib data structures have been reviewed and optimized for pass-by-value usage. One of raylib distinctive design decisions is that most of its functions receive and return data by value. This design makes raylib really simple for newcomers, avoiding pointers and allowing complete access to all structures data in a simple way. The downside is that data is copied on stack every function call and that copy could be costly so, all raylib data structures have been optimized to stay under 64 bytes for fast copy and retrieve.
- All raylib tracelog messages have been reviewed and categorized for a more comprehensive output information when developing raylib applications, now all display, input, timer, platform, auxiliar libraries, file-accesses, data loading/unloading issues are properly reported with more detailed and visual messages.
raudiomodule has been internally reviewed to accomodate the new
Musicstructure (converted from previous pointer format) and the module has been adapted to the highly improved miniaudio v0.10.
textmodule reviewed to improve fonts generation and text management functions,
Fontstructure has been redesigned to better accomodate characters data, decoupling individual characters as
Imageglyphs from the font atlas parameters. Several improvements have been made to better support Unicode strings with UTF-8 encoding.
- Multiple new examples added (most of them contributed by raylib users) and all examples reviewed for correct execution on most of the supported platforms, specially Web and Raspberry Pi. A detailed categorized table has been created on github for easy examples navigation and code access.
- New GitHub Actions CI system has been implemented for Windows, Linux and macOS code and examples compilation on every new commit or PR to make sure library keeps stable and usable with no breaking bugs.
Note that only key changes are listed here but there is way more! About 30 new functions have been added, multiple functions reviewed, bindings to +40 programming languages and great samples/demos/tutorials created by the community, including raylib integration with Spine, Unity, Tiled, Nuklear, enet and more!
It has been 10 months of improvements to create the best raylib ever.
Welcome to raylib 3.0.